@the-open-engine/zeroshot 6.18.0 → 6.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/cli/index.js +2 -1
  2. package/lib/agent-cli-provider/omp-release.d.ts +15 -0
  3. package/lib/agent-cli-provider/omp-release.d.ts.map +1 -0
  4. package/lib/agent-cli-provider/omp-release.js +50 -0
  5. package/lib/agent-cli-provider/omp-release.js.map +1 -0
  6. package/lib/agent-cli-provider/omp-rpc-protocol.d.ts +38 -0
  7. package/lib/agent-cli-provider/omp-rpc-protocol.d.ts.map +1 -0
  8. package/lib/agent-cli-provider/omp-rpc-protocol.js +267 -0
  9. package/lib/agent-cli-provider/omp-rpc-protocol.js.map +1 -0
  10. package/lib/agent-cli-provider/provider-registry.d.ts +16 -1
  11. package/lib/agent-cli-provider/provider-registry.d.ts.map +1 -1
  12. package/lib/agent-cli-provider/provider-registry.js +25 -1
  13. package/lib/agent-cli-provider/provider-registry.js.map +1 -1
  14. package/lib/agent-cli-provider/single-agent-runtime.d.ts.map +1 -1
  15. package/lib/agent-cli-provider/single-agent-runtime.js +1 -1
  16. package/lib/agent-cli-provider/single-agent-runtime.js.map +1 -1
  17. package/lib/provider-names.js +5 -0
  18. package/lib/settings.js +6 -3
  19. package/lib/setup-plan.js +5 -5
  20. package/lib/start-cluster.js +3 -3
  21. package/package.json +1 -1
  22. package/src/agent/agent-lifecycle.js +4 -4
  23. package/src/agent/agent-task-executor.js +7 -6
  24. package/src/agent/pr-verification.js +4 -1
  25. package/src/agent-cli-provider/omp-release.ts +63 -0
  26. package/src/agent-cli-provider/omp-rpc-protocol.ts +396 -0
  27. package/src/agent-cli-provider/provider-registry.ts +29 -1
  28. package/src/agent-cli-provider/single-agent-runtime.ts +2 -1
  29. package/src/agent-wrapper.js +3 -3
  30. package/src/claude-task-runner.js +5 -3
  31. package/src/config-validator.js +3 -2
  32. package/src/isolation-manager.js +6 -2
  33. package/src/orchestrator.js +3 -3
  34. package/src/preflight.js +2 -1
package/cli/index.js CHANGED
@@ -51,6 +51,7 @@ const {
51
51
  } = require('../lib/settings');
52
52
  const {
53
53
  VALID_PROVIDERS,
54
+ getDefaultProviderId,
54
55
  getProviderMetadata,
55
56
  normalizeProviderName,
56
57
  resolveProviderCommand,
@@ -442,7 +443,7 @@ function applyModelOverrideToConfig(config, modelOverride, providerOverride, set
442
443
  }
443
444
 
444
445
  const providerName = normalizeProviderName(
445
- providerOverride || config.defaultProvider || settings.defaultProvider || 'claude'
446
+ providerOverride || config.defaultProvider || settings.defaultProvider || getDefaultProviderId()
446
447
  );
447
448
  const provider = getProvider(providerName);
448
449
  try {
@@ -0,0 +1,15 @@
1
+ export declare const OMP_SUPPORTED_VERSION: "17.2.1";
2
+ export declare const OMP_PACKAGE_NAME: "@oh-my-pi/pi-coding-agent";
3
+ export declare const OMP_BINARY_NAME: "omp";
4
+ export declare const OMP_INSTALL_COMMAND: "npm install -g --ignore-scripts @oh-my-pi/pi-coding-agent@17.2.1";
5
+ export declare const OMP_RELEASE_DOWNLOAD_BASE_URL: "https://github.com/can1357/oh-my-pi/releases/download/v17.2.1";
6
+ export type OmpReleasePlatform = 'darwin-arm64' | 'darwin-x64' | 'linux-arm64' | 'linux-musl-arm64' | 'linux-musl-x64' | 'linux-x64';
7
+ export interface OmpReleaseAsset {
8
+ readonly name: string;
9
+ readonly platform: OmpReleasePlatform;
10
+ readonly sha256: string;
11
+ }
12
+ export declare const OMP_RELEASE_ASSETS: readonly OmpReleaseAsset[];
13
+ export declare function findOmpReleaseAsset(platform: string): OmpReleaseAsset | undefined;
14
+ export declare function ompReleaseAssetDownloadUrl(asset: OmpReleaseAsset): string;
15
+ //# sourceMappingURL=omp-release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omp-release.d.ts","sourceRoot":"","sources":["../../src/agent-cli-provider/omp-release.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,EAAG,QAAiB,CAAC;AACvD,eAAO,MAAM,gBAAgB,EAAG,2BAAoC,CAAC;AACrE,eAAO,MAAM,eAAe,EAAG,KAAc,CAAC;AAC9C,eAAO,MAAM,mBAAmB,oEACyD,CAAC;AAC1F,eAAO,MAAM,6BAA6B,iEACkD,CAAC;AAE7F,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,gBAAgB,GAChB,WAAW,CAAC;AAEhB,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAGD,eAAO,MAAM,kBAAkB,EAAE,SAAS,eAAe,EA+BxD,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEjF;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAEzE"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OMP_RELEASE_ASSETS = exports.OMP_RELEASE_DOWNLOAD_BASE_URL = exports.OMP_INSTALL_COMMAND = exports.OMP_BINARY_NAME = exports.OMP_PACKAGE_NAME = exports.OMP_SUPPORTED_VERSION = void 0;
4
+ exports.findOmpReleaseAsset = findOmpReleaseAsset;
5
+ exports.ompReleaseAssetDownloadUrl = ompReleaseAssetDownloadUrl;
6
+ exports.OMP_SUPPORTED_VERSION = '17.2.1';
7
+ exports.OMP_PACKAGE_NAME = '@oh-my-pi/pi-coding-agent';
8
+ exports.OMP_BINARY_NAME = 'omp';
9
+ exports.OMP_INSTALL_COMMAND = `npm install -g --ignore-scripts ${exports.OMP_PACKAGE_NAME}@${exports.OMP_SUPPORTED_VERSION}`;
10
+ exports.OMP_RELEASE_DOWNLOAD_BASE_URL = `https://github.com/can1357/oh-my-pi/releases/download/v${exports.OMP_SUPPORTED_VERSION}`;
11
+ // Verified via `gh api repos/can1357/oh-my-pi/releases/tags/v17.2.1`. Windows is excluded (Unix-only).
12
+ exports.OMP_RELEASE_ASSETS = [
13
+ {
14
+ name: 'omp-darwin-arm64',
15
+ platform: 'darwin-arm64',
16
+ sha256: 'b75eddb19ba9ec401fee5ecb35b3ceb5ddc48708e98b5a113136df5d65f2bed8',
17
+ },
18
+ {
19
+ name: 'omp-darwin-x64',
20
+ platform: 'darwin-x64',
21
+ sha256: 'd23c197d93243122ef9a35a247bdd85075c4c1356dd1fa4a080faaa2dae4b905',
22
+ },
23
+ {
24
+ name: 'omp-linux-arm64',
25
+ platform: 'linux-arm64',
26
+ sha256: 'd34883744bb54476f7268aad4b561ea9b1cd826f201d044b337c5a96713fa83d',
27
+ },
28
+ {
29
+ name: 'omp-linux-musl-arm64',
30
+ platform: 'linux-musl-arm64',
31
+ sha256: '3babfe15664f32fcc03dc91d92a10341baf6e65b9868351de21c5aa3218e139d',
32
+ },
33
+ {
34
+ name: 'omp-linux-musl-x64',
35
+ platform: 'linux-musl-x64',
36
+ sha256: '8f05f7eed2940b11c29d7aaf0e641b100c014db5bfbee00afa5dd4929ad5dd6a',
37
+ },
38
+ {
39
+ name: 'omp-linux-x64',
40
+ platform: 'linux-x64',
41
+ sha256: 'ac0285a571aa79c58d59482561a3871befe7333dba3a3bdc2e90682653ee33b2',
42
+ },
43
+ ];
44
+ function findOmpReleaseAsset(platform) {
45
+ return exports.OMP_RELEASE_ASSETS.find((asset) => asset.platform === platform);
46
+ }
47
+ function ompReleaseAssetDownloadUrl(asset) {
48
+ return `${exports.OMP_RELEASE_DOWNLOAD_BASE_URL}/${asset.name}`;
49
+ }
50
+ //# sourceMappingURL=omp-release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omp-release.js","sourceRoot":"","sources":["../../src/agent-cli-provider/omp-release.ts"],"names":[],"mappings":";;;AAwDA,kDAEC;AAED,gEAEC;AA9DY,QAAA,qBAAqB,GAAG,QAAiB,CAAC;AAC1C,QAAA,gBAAgB,GAAG,2BAAoC,CAAC;AACxD,QAAA,eAAe,GAAG,KAAc,CAAC;AACjC,QAAA,mBAAmB,GAC9B,mCAAmC,wBAAgB,IAAI,6BAAqB,EAAW,CAAC;AAC7E,QAAA,6BAA6B,GACxC,0DAA0D,6BAAqB,EAAW,CAAC;AAgB7F,uGAAuG;AAC1F,QAAA,kBAAkB,GAA+B;IAC5D;QACE,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,cAAc;QACxB,MAAM,EAAE,kEAAkE;KAC3E;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,kEAAkE;KAC3E;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,kEAAkE;KAC3E;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,kBAAkB;QAC5B,MAAM,EAAE,kEAAkE;KAC3E;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,gBAAgB;QAC1B,MAAM,EAAE,kEAAkE;KAC3E;IACD;QACE,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,kEAAkE;KAC3E;CACF,CAAC;AAEF,SAAgB,mBAAmB,CAAC,QAAgB;IAClD,OAAO,0BAAkB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACzE,CAAC;AAED,SAAgB,0BAA0B,CAAC,KAAsB;IAC/D,OAAO,GAAG,qCAA6B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,38 @@
1
+ export declare const OMP_RPC_CONTRACT_RELEASE: "17.2.1";
2
+ export interface OmpRpcDecoderLimits {
3
+ readonly maxPhysicalFrameBytes: number;
4
+ readonly maxReassembledFrameBytes: number;
5
+ readonly maxConcurrentReassemblies: number;
6
+ readonly maxChunksPerFrame: number;
7
+ readonly maxInflightReassemblyBytes: number;
8
+ }
9
+ export declare const DEFAULT_OMP_RPC_DECODER_LIMITS: OmpRpcDecoderLimits;
10
+ export interface OmpRpcInboundFrame {
11
+ readonly type: string;
12
+ readonly [key: string]: unknown;
13
+ }
14
+ export interface OmpRpcCommand {
15
+ readonly id?: string;
16
+ readonly type: string;
17
+ readonly [key: string]: unknown;
18
+ }
19
+ export declare class OmpRpcProtocolError extends Error {
20
+ readonly code: string;
21
+ constructor(code: string, message: string);
22
+ }
23
+ export declare function classifyOmpRpcFrameType(type: string): 'known-pre-negotiation' | 'v2-only' | 'unknown';
24
+ export declare function assertNoPreNegotiationRpcChunk(frameType: string, negotiatedV2: boolean): void;
25
+ export declare class OmpRpcFrameDecoder {
26
+ private readonly limits;
27
+ private buffer;
28
+ private finished;
29
+ private readonly pendingReassemblies;
30
+ private inflightReassemblyBytes;
31
+ constructor(limits: OmpRpcDecoderLimits);
32
+ push(chunk: Uint8Array): readonly OmpRpcInboundFrame[];
33
+ finish(): void;
34
+ private consumeLine;
35
+ private consumeChunk;
36
+ }
37
+ export declare function encodeOmpRpcCommand(command: OmpRpcCommand, maxFrameBytes: number): Buffer;
38
+ //# sourceMappingURL=omp-rpc-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omp-rpc-protocol.d.ts","sourceRoot":"","sources":["../../src/agent-cli-provider/omp-rpc-protocol.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,wBAAwB,UAAwB,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;CAC7C;AAKD,eAAO,MAAM,8BAA8B,EAAE,mBAM5C,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAsCD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,GACX,uBAAuB,GAAG,SAAS,GAAG,SAAS,CAIjD;AAED,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI,CAO7F;AA4GD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAiC;IACrE,OAAO,CAAC,uBAAuB,CAAS;gBAE5B,MAAM,EAAE,mBAAmB;IAQvC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,kBAAkB,EAAE;IAoCtD,MAAM,IAAI,IAAI;IAgBd,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,YAAY;CAmFrB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAUzF"}
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OmpRpcFrameDecoder = exports.OmpRpcProtocolError = exports.DEFAULT_OMP_RPC_DECODER_LIMITS = exports.OMP_RPC_CONTRACT_RELEASE = void 0;
4
+ exports.classifyOmpRpcFrameType = classifyOmpRpcFrameType;
5
+ exports.assertNoPreNegotiationRpcChunk = assertNoPreNegotiationRpcChunk;
6
+ exports.encodeOmpRpcCommand = encodeOmpRpcCommand;
7
+ const json_1 = require("./json");
8
+ const omp_release_1 = require("./omp-release");
9
+ // Purely for traceability/doc; no runtime coupling to omp-release's spawn/install concerns.
10
+ exports.OMP_RPC_CONTRACT_RELEASE = omp_release_1.OMP_SUPPORTED_VERSION;
11
+ // Verified against the pinned OMP release's rpc-frame.ts: MAX_RPC_FRAME_BYTES=1MiB, MAX_RPC_REASSEMBLED_BYTES=64MiB,
12
+ // RPC_CHUNK_PAYLOAD_BYTES=256KiB -> ceil(64MiB/256KiB)=256 chunks max. The real decoder tracks exactly one
13
+ // pending sequence at a time, so maxConcurrentReassemblies/maxInflightReassemblyBytes mirror that ceiling.
14
+ exports.DEFAULT_OMP_RPC_DECODER_LIMITS = {
15
+ maxPhysicalFrameBytes: 1024 * 1024,
16
+ maxReassembledFrameBytes: 64 * 1024 * 1024,
17
+ maxConcurrentReassemblies: 1,
18
+ maxChunksPerFrame: 256,
19
+ maxInflightReassemblyBytes: 64 * 1024 * 1024,
20
+ };
21
+ class OmpRpcProtocolError extends Error {
22
+ code;
23
+ constructor(code, message) {
24
+ super(message);
25
+ this.name = 'OmpRpcProtocolError';
26
+ this.code = code;
27
+ }
28
+ }
29
+ exports.OmpRpcProtocolError = OmpRpcProtocolError;
30
+ const KNOWN_PRE_NEGOTIATION_FRAME_TYPES = new Set([
31
+ 'ready',
32
+ 'available_commands_update',
33
+ 'response',
34
+ 'extension_error',
35
+ 'agent_start',
36
+ 'agent_end',
37
+ 'turn_start',
38
+ 'turn_end',
39
+ 'message_start',
40
+ 'message_update',
41
+ 'message_end',
42
+ 'tool_execution_start',
43
+ 'tool_execution_update',
44
+ 'tool_execution_end',
45
+ 'auto_compaction_start',
46
+ 'auto_compaction_end',
47
+ 'auto_retry_start',
48
+ 'auto_retry_end',
49
+ 'ttsr_triggered',
50
+ 'todo_reminder',
51
+ 'todo_auto_clear',
52
+ 'extension_ui_request',
53
+ 'host_tool_call',
54
+ 'host_tool_cancel',
55
+ 'host_uri_request',
56
+ 'host_uri_cancel',
57
+ 'prompt_result',
58
+ 'command_output',
59
+ 'session_info_update',
60
+ 'config_update',
61
+ 'subagent_lifecycle',
62
+ 'subagent_progress',
63
+ 'subagent_event',
64
+ ]);
65
+ function classifyOmpRpcFrameType(type) {
66
+ if (type === 'rpc_chunk')
67
+ return 'v2-only';
68
+ if (KNOWN_PRE_NEGOTIATION_FRAME_TYPES.has(type))
69
+ return 'known-pre-negotiation';
70
+ return 'unknown';
71
+ }
72
+ function assertNoPreNegotiationRpcChunk(frameType, negotiatedV2) {
73
+ if (frameType === 'rpc_chunk' && !negotiatedV2) {
74
+ throw new OmpRpcProtocolError('pre-negotiation-rpc-chunk', 'rpc_chunk frame received before protocol v2 negotiation succeeded.');
75
+ }
76
+ }
77
+ const STRICT_BASE64_PATTERN = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
78
+ function decodeStrictBase64(data) {
79
+ if (typeof data !== 'string' || data.length === 0 || !STRICT_BASE64_PATTERN.test(data)) {
80
+ throw new OmpRpcProtocolError('invalid-chunk-data', "rpc_chunk 'data' must be a non-empty, canonically-padded base64 string.");
81
+ }
82
+ const bytes = Buffer.from(data, 'base64');
83
+ if (bytes.toString('base64') !== data) {
84
+ throw new OmpRpcProtocolError('invalid-chunk-data', "rpc_chunk 'data' failed a base64 round-trip check (non-canonical encoding).");
85
+ }
86
+ return bytes;
87
+ }
88
+ function decodeStrictUtf8(bytes) {
89
+ try {
90
+ return new TextDecoder('utf-8', { fatal: true }).decode(bytes);
91
+ }
92
+ catch {
93
+ throw new OmpRpcProtocolError('invalid-utf8-in-reassembled-frame', 'Reassembled rpc_chunk sequence is not valid UTF-8.');
94
+ }
95
+ }
96
+ function toPhysicalFrame(record) {
97
+ const type = (0, json_1.getString)(record, 'type');
98
+ if (type === null) {
99
+ throw new OmpRpcProtocolError('malformed-physical-frame', "Physical frame is missing a string 'type' field.");
100
+ }
101
+ return { ...record, type };
102
+ }
103
+ function toReassembledFrame(record, chunkId) {
104
+ const type = (0, json_1.getString)(record, 'type');
105
+ if (type === null) {
106
+ throw new OmpRpcProtocolError('malformed-json-in-reassembled-frame', `rpc_chunk sequence "${chunkId}" reassembled into an object missing a string 'type' field.`);
107
+ }
108
+ return { ...record, type };
109
+ }
110
+ function readChunkMetadata(parsed, limits) {
111
+ const chunkId = (0, json_1.getString)(parsed, 'chunkId');
112
+ if (chunkId === null || chunkId.length === 0 || chunkId.length > 128) {
113
+ throw new OmpRpcProtocolError('invalid-chunk-metadata', "rpc_chunk 'chunkId' must be a non-empty string of at most 128 characters.");
114
+ }
115
+ const index = (0, json_1.getNumber)(parsed, 'index');
116
+ const count = (0, json_1.getNumber)(parsed, 'count');
117
+ const byteLength = (0, json_1.getNumber)(parsed, 'byteLength');
118
+ if (index === null ||
119
+ !Number.isSafeInteger(index) ||
120
+ index < 0 ||
121
+ count === null ||
122
+ !Number.isSafeInteger(count) ||
123
+ count < 2 ||
124
+ count > limits.maxChunksPerFrame ||
125
+ index >= count ||
126
+ byteLength === null ||
127
+ !Number.isSafeInteger(byteLength) ||
128
+ byteLength <= 0 ||
129
+ byteLength > limits.maxReassembledFrameBytes) {
130
+ throw new OmpRpcProtocolError('invalid-chunk-metadata', "rpc_chunk has invalid 'index'/'count'/'byteLength' metadata.");
131
+ }
132
+ return { chunkId, index, count, byteLength };
133
+ }
134
+ class OmpRpcFrameDecoder {
135
+ limits;
136
+ buffer;
137
+ finished;
138
+ pendingReassemblies;
139
+ inflightReassemblyBytes;
140
+ constructor(limits) {
141
+ this.limits = limits;
142
+ this.buffer = Buffer.alloc(0);
143
+ this.finished = false;
144
+ this.pendingReassemblies = new Map();
145
+ this.inflightReassemblyBytes = 0;
146
+ }
147
+ push(chunk) {
148
+ if (this.finished) {
149
+ throw new OmpRpcProtocolError('decoder-finished', 'push() called after finish().');
150
+ }
151
+ this.buffer = Buffer.concat([this.buffer, Buffer.from(chunk)]);
152
+ const frames = [];
153
+ for (;;) {
154
+ const newlineIndex = this.buffer.indexOf(0x0a);
155
+ if (newlineIndex === -1) {
156
+ if (this.buffer.byteLength > this.limits.maxPhysicalFrameBytes) {
157
+ throw new OmpRpcProtocolError('physical-frame-too-large', `Buffered physical frame exceeds the ${this.limits.maxPhysicalFrameBytes}-byte limit without a terminating newline.`);
158
+ }
159
+ break;
160
+ }
161
+ const lineBytes = this.buffer.subarray(0, newlineIndex);
162
+ this.buffer = this.buffer.subarray(newlineIndex + 1);
163
+ if (lineBytes.byteLength + 1 > this.limits.maxPhysicalFrameBytes) {
164
+ throw new OmpRpcProtocolError('physical-frame-too-large', `Physical frame of ${lineBytes.byteLength + 1} bytes exceeds the ${this.limits.maxPhysicalFrameBytes}-byte limit.`);
165
+ }
166
+ const frame = this.consumeLine(lineBytes);
167
+ if (frame !== null)
168
+ frames.push(frame);
169
+ }
170
+ return frames;
171
+ }
172
+ finish() {
173
+ this.finished = true;
174
+ if (this.buffer.byteLength > 0) {
175
+ throw new OmpRpcProtocolError('incomplete-physical-frame', 'Stream ended with an unterminated physical frame (no trailing newline).');
176
+ }
177
+ if (this.pendingReassemblies.size > 0) {
178
+ throw new OmpRpcProtocolError('incomplete-chunk-sequence', 'Stream ended with an incomplete rpc_chunk sequence still pending.');
179
+ }
180
+ }
181
+ consumeLine(lineBytes) {
182
+ let value;
183
+ try {
184
+ value = JSON.parse(lineBytes.toString('utf8'));
185
+ }
186
+ catch {
187
+ throw new OmpRpcProtocolError('malformed-physical-frame', 'Physical frame is not valid JSON.');
188
+ }
189
+ if (!(0, json_1.isRecord)(value)) {
190
+ throw new OmpRpcProtocolError('malformed-physical-frame', 'Physical frame must be a JSON object.');
191
+ }
192
+ const type = (0, json_1.getString)(value, 'type');
193
+ if (type !== 'rpc_chunk') {
194
+ if (this.pendingReassemblies.size > 0) {
195
+ throw new OmpRpcProtocolError('interrupted-chunk-sequence', 'A non-chunk frame arrived while an rpc_chunk sequence was pending.');
196
+ }
197
+ return toPhysicalFrame(value);
198
+ }
199
+ return this.consumeChunk(value);
200
+ }
201
+ consumeChunk(parsed) {
202
+ const metadata = readChunkMetadata(parsed, this.limits);
203
+ const bytes = decodeStrictBase64(parsed.data);
204
+ let pending = this.pendingReassemblies.get(metadata.chunkId);
205
+ if (pending === undefined) {
206
+ if (metadata.index !== 0) {
207
+ throw new OmpRpcProtocolError('chunk-sequence-must-start-at-zero', `rpc_chunk sequence "${metadata.chunkId}" must begin at index 0.`);
208
+ }
209
+ if (this.pendingReassemblies.size >= this.limits.maxConcurrentReassemblies) {
210
+ throw new OmpRpcProtocolError('interleaved-chunk-sequence', `Starting rpc_chunk sequence "${metadata.chunkId}" would exceed the concurrent-reassembly limit of ${this.limits.maxConcurrentReassemblies}.`);
211
+ }
212
+ pending = {
213
+ chunkId: metadata.chunkId,
214
+ count: metadata.count,
215
+ byteLength: metadata.byteLength,
216
+ nextIndex: 0,
217
+ chunks: [],
218
+ receivedBytes: 0,
219
+ };
220
+ this.pendingReassemblies.set(metadata.chunkId, pending);
221
+ }
222
+ else if (pending.count !== metadata.count ||
223
+ pending.byteLength !== metadata.byteLength ||
224
+ pending.nextIndex !== metadata.index) {
225
+ throw new OmpRpcProtocolError('chunk-sequence-mismatch', `rpc_chunk sequence "${metadata.chunkId}" metadata or ordering does not match the tracked sequence.`);
226
+ }
227
+ pending.chunks.push(bytes);
228
+ pending.receivedBytes += bytes.byteLength;
229
+ this.inflightReassemblyBytes += bytes.byteLength;
230
+ if (this.inflightReassemblyBytes > this.limits.maxInflightReassemblyBytes) {
231
+ throw new OmpRpcProtocolError('inflight-reassembly-bytes-exceeded', `Total in-flight rpc_chunk reassembly bytes exceed the ${this.limits.maxInflightReassemblyBytes}-byte limit.`);
232
+ }
233
+ if (pending.receivedBytes > pending.byteLength) {
234
+ throw new OmpRpcProtocolError('chunk-sequence-exceeds-declared-length', `rpc_chunk sequence "${metadata.chunkId}" received more bytes than its declared byteLength.`);
235
+ }
236
+ pending.nextIndex += 1;
237
+ if (pending.nextIndex < pending.count)
238
+ return null;
239
+ this.pendingReassemblies.delete(metadata.chunkId);
240
+ this.inflightReassemblyBytes -= pending.receivedBytes;
241
+ if (pending.receivedBytes !== pending.byteLength) {
242
+ throw new OmpRpcProtocolError('chunk-sequence-length-mismatch', `rpc_chunk sequence "${metadata.chunkId}" completed with ${pending.receivedBytes} bytes but declared ${pending.byteLength}.`);
243
+ }
244
+ const decodedText = decodeStrictUtf8(Buffer.concat(pending.chunks));
245
+ let reassembled;
246
+ try {
247
+ reassembled = JSON.parse(decodedText);
248
+ }
249
+ catch {
250
+ throw new OmpRpcProtocolError('malformed-json-in-reassembled-frame', `rpc_chunk sequence "${metadata.chunkId}" reassembled into invalid JSON.`);
251
+ }
252
+ if (!(0, json_1.isRecord)(reassembled)) {
253
+ throw new OmpRpcProtocolError('non-object-reassembled-frame', `rpc_chunk sequence "${metadata.chunkId}" reassembled into a non-object JSON value.`);
254
+ }
255
+ return toReassembledFrame(reassembled, metadata.chunkId);
256
+ }
257
+ }
258
+ exports.OmpRpcFrameDecoder = OmpRpcFrameDecoder;
259
+ function encodeOmpRpcCommand(command, maxFrameBytes) {
260
+ const line = `${JSON.stringify(command)}\n`;
261
+ const byteLength = Buffer.byteLength(line, 'utf8');
262
+ if (byteLength > maxFrameBytes) {
263
+ throw new OmpRpcProtocolError('outbound-frame-too-large', `Outbound command of ${byteLength} bytes exceeds the ${maxFrameBytes}-byte limit.`);
264
+ }
265
+ return Buffer.from(line, 'utf8');
266
+ }
267
+ //# sourceMappingURL=omp-rpc-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omp-rpc-protocol.js","sourceRoot":"","sources":["../../src/agent-cli-provider/omp-rpc-protocol.ts"],"names":[],"mappings":"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"}
@@ -46,6 +46,7 @@ export interface ProviderDockerMetadata {
46
46
  }
47
47
  interface ProviderRegistryEntryBase {
48
48
  readonly id: string;
49
+ readonly default: boolean;
49
50
  readonly aliases: readonly string[];
50
51
  readonly displayName: string;
51
52
  readonly binary: string;
@@ -82,6 +83,7 @@ export interface UnstructuredOutputProviderRegistryEntry extends ProviderRegistr
82
83
  export type ProviderRegistryEntry = StructuredOutputProviderRegistryEntry | UnstructuredOutputProviderRegistryEntry;
83
84
  export declare const providerRegistry: readonly [{
84
85
  readonly id: "claude";
86
+ readonly default: true;
85
87
  readonly aliases: readonly ["anthropic"];
86
88
  readonly displayName: "Claude";
87
89
  readonly binary: "claude";
@@ -125,6 +127,7 @@ export declare const providerRegistry: readonly [{
125
127
  readonly adapter: StructuredOutputRecoveryAdapter;
126
128
  }, {
127
129
  readonly id: "codex";
130
+ readonly default: false;
128
131
  readonly aliases: readonly ["openai"];
129
132
  readonly displayName: "Codex";
130
133
  readonly binary: "codex";
@@ -175,6 +178,7 @@ export declare const providerRegistry: readonly [{
175
178
  readonly adapter: StructuredOutputRecoveryAdapter;
176
179
  }, {
177
180
  readonly id: "gateway";
181
+ readonly default: false;
178
182
  readonly aliases: readonly [];
179
183
  readonly displayName: "Gateway";
180
184
  readonly binary: "node";
@@ -222,6 +226,7 @@ export declare const providerRegistry: readonly [{
222
226
  readonly adapter: ProviderAdapter;
223
227
  }, {
224
228
  readonly id: "gemini";
229
+ readonly default: false;
225
230
  readonly aliases: readonly ["google"];
226
231
  readonly displayName: "Gemini";
227
232
  readonly binary: "gemini";
@@ -268,6 +273,7 @@ export declare const providerRegistry: readonly [{
268
273
  readonly adapter: StructuredOutputRecoveryAdapter;
269
274
  }, {
270
275
  readonly id: "opencode";
276
+ readonly default: false;
271
277
  readonly aliases: readonly [];
272
278
  readonly displayName: "Opencode";
273
279
  readonly binary: "opencode";
@@ -317,6 +323,7 @@ export declare const providerRegistry: readonly [{
317
323
  readonly adapter: StructuredOutputRecoveryAdapter;
318
324
  }, {
319
325
  readonly id: "pi";
326
+ readonly default: false;
320
327
  readonly aliases: readonly [];
321
328
  readonly displayName: "Pi";
322
329
  readonly binary: "pi";
@@ -363,6 +370,7 @@ export declare const providerRegistry: readonly [{
363
370
  readonly adapter: ProviderAdapter;
364
371
  }, {
365
372
  readonly id: "omp";
373
+ readonly default: false;
366
374
  readonly aliases: readonly [];
367
375
  readonly displayName: "OMP";
368
376
  readonly binary: "omp";
@@ -372,7 +380,7 @@ export declare const providerRegistry: readonly [{
372
380
  readonly args: readonly [];
373
381
  };
374
382
  readonly invoke: SpawnProviderInvokeSpec;
375
- readonly installInstructions: "npm install -g --ignore-scripts @oh-my-pi/pi-coding-agent";
383
+ readonly installInstructions: "npm install -g --ignore-scripts @oh-my-pi/pi-coding-agent@17.2.1";
376
384
  readonly authInstructions: "omp\n/login";
377
385
  readonly credentialPaths: readonly ["~/.omp"];
378
386
  readonly credentialEnvKeys: readonly string[];
@@ -409,6 +417,7 @@ export declare const providerRegistry: readonly [{
409
417
  readonly adapter: ProviderAdapter;
410
418
  }, {
411
419
  readonly id: "kiro";
420
+ readonly default: false;
412
421
  readonly aliases: readonly [];
413
422
  readonly displayName: "Kiro";
414
423
  readonly binary: "kiro-cli";
@@ -454,6 +463,7 @@ export declare const providerRegistry: readonly [{
454
463
  readonly adapter: ProviderAdapter;
455
464
  }, {
456
465
  readonly id: "copilot";
466
+ readonly default: false;
457
467
  readonly aliases: readonly [];
458
468
  readonly displayName: "Copilot";
459
469
  readonly binary: "copilot";
@@ -507,6 +517,11 @@ export declare const providerIds: readonly RegistryProviderId[];
507
517
  export declare const providerAliases: readonly RegistryProviderAlias[];
508
518
  export declare const knownProviderNames: readonly (RegistryProviderId | RegistryProviderAlias)[];
509
519
  export declare const providerAliasMap: Readonly<Record<string, RegistryProviderId>>;
520
+ export declare function assertExactlyOneDefaultProvider<T extends {
521
+ id: string;
522
+ default: boolean;
523
+ }>(entries: readonly T[]): T['id'];
524
+ export declare function getDefaultProviderId(): RegistryProviderId;
510
525
  export declare function normalizeProviderName(name: string): RegistryProviderId | string;
511
526
  export declare function listProviderRegistryEntries(): readonly ProviderRegistryEntry[];
512
527
  export declare function findProviderRegistryEntry(name: string | null | undefined): ProviderRegistryEntry | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"provider-registry.d.ts","sourceRoot":"","sources":["../../src/agent-cli-provider/provider-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-registry.d.ts","sourceRoot":"","sources":["../../src/agent-cli-provider/provider-registry.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.providerAliasMap = exports.knownProviderNames = exports.providerAliases = exports.providerIds = exports.providerRegistry = void 0;
4
+ exports.assertExactlyOneDefaultProvider = assertExactlyOneDefaultProvider;
5
+ exports.getDefaultProviderId = getDefaultProviderId;
4
6
  exports.normalizeProviderName = normalizeProviderName;
5
7
  exports.listProviderRegistryEntries = listProviderRegistryEntries;
6
8
  exports.findProviderRegistryEntry = findProviderRegistryEntry;
@@ -18,6 +20,7 @@ const opencode_1 = require("./adapters/opencode");
18
20
  const omp_1 = require("./adapters/omp");
19
21
  const pi_1 = require("./adapters/pi");
20
22
  const claude_command_1 = require("./claude-command");
23
+ const omp_release_1 = require("./omp-release");
21
24
  const STANDARD_CAPABILITIES = {
22
25
  dockerIsolation: true,
23
26
  worktreeIsolation: true,
@@ -68,6 +71,7 @@ const kiroAdapter = (0, acp_1.createAcpAdapter)({
68
71
  exports.providerRegistry = [
69
72
  {
70
73
  id: 'claude',
74
+ default: true,
71
75
  aliases: ['anthropic'],
72
76
  displayName: 'Claude',
73
77
  binary: 'claude',
@@ -105,6 +109,7 @@ exports.providerRegistry = [
105
109
  },
106
110
  {
107
111
  id: 'codex',
112
+ default: false,
108
113
  aliases: ['openai'],
109
114
  displayName: 'Codex',
110
115
  binary: 'codex',
@@ -146,6 +151,7 @@ exports.providerRegistry = [
146
151
  },
147
152
  {
148
153
  id: 'gateway',
154
+ default: false,
149
155
  aliases: [],
150
156
  displayName: 'Gateway',
151
157
  binary: 'node',
@@ -193,6 +199,7 @@ exports.providerRegistry = [
193
199
  },
194
200
  {
195
201
  id: 'gemini',
202
+ default: false,
196
203
  aliases: ['google'],
197
204
  displayName: 'Gemini',
198
205
  binary: 'gemini',
@@ -230,6 +237,7 @@ exports.providerRegistry = [
230
237
  },
231
238
  {
232
239
  id: 'opencode',
240
+ default: false,
233
241
  aliases: [],
234
242
  displayName: 'Opencode',
235
243
  binary: 'opencode',
@@ -270,6 +278,7 @@ exports.providerRegistry = [
270
278
  },
271
279
  {
272
280
  id: 'pi',
281
+ default: false,
273
282
  aliases: [],
274
283
  displayName: 'Pi',
275
284
  binary: 'pi',
@@ -308,12 +317,13 @@ exports.providerRegistry = [
308
317
  },
309
318
  {
310
319
  id: 'omp',
320
+ default: false,
311
321
  aliases: [],
312
322
  displayName: 'OMP',
313
323
  binary: 'omp',
314
324
  command: { kind: 'fixed', command: 'omp', args: [] },
315
325
  invoke: SPAWN_INVOKE,
316
- installInstructions: 'npm install -g --ignore-scripts @oh-my-pi/pi-coding-agent',
326
+ installInstructions: omp_release_1.OMP_INSTALL_COMMAND,
317
327
  authInstructions: 'omp\n/login',
318
328
  credentialPaths: ['~/.omp'],
319
329
  credentialEnvKeys: omp_1.ompAdapter.credentialEnvKeys,
@@ -346,6 +356,7 @@ exports.providerRegistry = [
346
356
  },
347
357
  {
348
358
  id: 'kiro',
359
+ default: false,
349
360
  aliases: [],
350
361
  displayName: 'Kiro',
351
362
  binary: 'kiro-cli',
@@ -383,6 +394,7 @@ exports.providerRegistry = [
383
394
  },
384
395
  {
385
396
  id: 'copilot',
397
+ default: false,
386
398
  aliases: [],
387
399
  displayName: 'Copilot',
388
400
  binary: 'copilot',
@@ -440,6 +452,18 @@ exports.providerAliasMap = Object.freeze(exports.providerRegistry.reduce((result
440
452
  }
441
453
  return result;
442
454
  }, {}));
455
+ function assertExactlyOneDefaultProvider(entries) {
456
+ const defaults = entries.filter((e) => e.default);
457
+ const [onlyDefault, ...rest] = defaults;
458
+ if (!onlyDefault || rest.length > 0) {
459
+ throw new Error(`Provider registry must declare exactly one default provider; found ${defaults.length}${defaults.length ? ' (' + defaults.map((e) => e.id).join(', ') + ')' : ''}`);
460
+ }
461
+ return onlyDefault.id;
462
+ }
463
+ const DEFAULT_PROVIDER_ID = assertExactlyOneDefaultProvider(exports.providerRegistry);
464
+ function getDefaultProviderId() {
465
+ return DEFAULT_PROVIDER_ID;
466
+ }
443
467
  function normalizeProviderName(name) {
444
468
  const normalized = name.toLowerCase();
445
469
  return exports.providerAliasMap[normalized] ?? name;