fix(changes): accept opencode evidence contract version
This commit is contained in:
parent
33a8a5fabc
commit
7b5924c8bd
2 changed files with 44 additions and 1 deletions
|
|
@ -1,6 +1,7 @@
|
|||
import { createHash } from 'crypto';
|
||||
|
||||
export const OPEN_CODE_BRIDGE_SCHEMA_VERSION = 1 as const;
|
||||
export const OPEN_CODE_TASK_LEDGER_EVIDENCE_CONTRACT_VERSION = 1 as const;
|
||||
|
||||
export type OpenCodeBridgeCommandName =
|
||||
| 'opencode.handshake'
|
||||
|
|
@ -259,6 +260,7 @@ export type OpenCodeBackfillTaskLedgerOutcome =
|
|||
export interface OpenCodeBackfillTaskLedgerCommandData {
|
||||
schemaVersion: 1;
|
||||
providerId: 'opencode';
|
||||
opencodeTaskLedgerEvidenceContractVersion?: number;
|
||||
teamName: string;
|
||||
taskId?: string;
|
||||
projectDir?: string;
|
||||
|
|
@ -362,6 +364,7 @@ export interface OpenCodeBridgePeerIdentity {
|
|||
minVersion: number;
|
||||
currentVersion: number;
|
||||
supportedCommands: OpenCodeBridgeCommandName[];
|
||||
opencodeTaskLedgerEvidenceContractVersion?: number;
|
||||
};
|
||||
runtime: {
|
||||
providerId: 'opencode';
|
||||
|
|
@ -846,7 +849,10 @@ function isPeerIdentity(value: unknown): value is OpenCodeBridgePeerIdentity {
|
|||
(bridgeProtocol.minVersion as number) < 1 ||
|
||||
(bridgeProtocol.currentVersion as number) < (bridgeProtocol.minVersion as number) ||
|
||||
!Array.isArray(bridgeProtocol.supportedCommands) ||
|
||||
!bridgeProtocol.supportedCommands.every(isOpenCodeBridgeCommandName)
|
||||
!bridgeProtocol.supportedCommands.every(isOpenCodeBridgeCommandName) ||
|
||||
(bridgeProtocol.opencodeTaskLedgerEvidenceContractVersion !== undefined &&
|
||||
(!Number.isInteger(bridgeProtocol.opencodeTaskLedgerEvidenceContractVersion) ||
|
||||
(bridgeProtocol.opencodeTaskLedgerEvidenceContractVersion as number) < 1))
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import {
|
|||
createOpenCodeBridgeHandshakeIdentityHash,
|
||||
createOpenCodeBridgeIdempotencyKey,
|
||||
isOpenCodeBridgeCommandName,
|
||||
OPEN_CODE_TASK_LEDGER_EVIDENCE_CONTRACT_VERSION,
|
||||
parseSingleBridgeJsonResult,
|
||||
stableHash,
|
||||
validateBridgeResultEnvelope,
|
||||
|
|
@ -202,6 +203,42 @@ describe('OpenCodeBridgeCommandContract', () => {
|
|||
});
|
||||
});
|
||||
|
||||
it('accepts handshake evidence contract version and rejects invalid values', () => {
|
||||
const client = peerIdentity('claude_team');
|
||||
const server = peerIdentity('agent_teams_orchestrator');
|
||||
server.bridgeProtocol.opencodeTaskLedgerEvidenceContractVersion =
|
||||
OPEN_CODE_TASK_LEDGER_EVIDENCE_CONTRACT_VERSION;
|
||||
const validHandshake = buildHandshake({ client, server });
|
||||
|
||||
expect(
|
||||
validateOpenCodeBridgeHandshake({
|
||||
handshake: validHandshake,
|
||||
expectedClient: client,
|
||||
requiredCommand: 'opencode.launchTeam',
|
||||
expectedCapabilitySnapshotId: 'cap-1',
|
||||
expectedManifestHighWatermark: 10,
|
||||
expectedRunId: 'run-1',
|
||||
})
|
||||
).toEqual({ ok: true });
|
||||
|
||||
server.bridgeProtocol.opencodeTaskLedgerEvidenceContractVersion = 0;
|
||||
const invalidHandshake = buildHandshake({ client, server });
|
||||
|
||||
expect(
|
||||
validateOpenCodeBridgeHandshake({
|
||||
handshake: invalidHandshake,
|
||||
expectedClient: client,
|
||||
requiredCommand: 'opencode.launchTeam',
|
||||
expectedCapabilitySnapshotId: 'cap-1',
|
||||
expectedManifestHighWatermark: 10,
|
||||
expectedRunId: 'run-1',
|
||||
})
|
||||
).toEqual({
|
||||
ok: false,
|
||||
reason: 'Bridge handshake peer identity is invalid',
|
||||
});
|
||||
});
|
||||
|
||||
it('creates deterministic idempotency keys for equivalent JSON bodies', () => {
|
||||
const first = createOpenCodeBridgeIdempotencyKey({
|
||||
command: 'opencode.launchTeam',
|
||||
|
|
|
|||
Loading…
Reference in a new issue