@the-open-engine/zeroshot 6.30.1 → 6.31.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.
- package/lib/agent-cli-provider/adapters/acp.d.ts.map +1 -1
- package/lib/agent-cli-provider/adapters/acp.js +7 -11
- package/lib/agent-cli-provider/adapters/acp.js.map +1 -1
- package/lib/agent-cli-provider/adapters/omp-policy.d.ts +4 -0
- package/lib/agent-cli-provider/adapters/omp-policy.d.ts.map +1 -0
- package/lib/agent-cli-provider/adapters/omp-policy.js +47 -0
- package/lib/agent-cli-provider/adapters/omp-policy.js.map +1 -0
- package/lib/agent-cli-provider/adapters/omp.d.ts.map +1 -1
- package/lib/agent-cli-provider/adapters/omp.js +8 -158
- package/lib/agent-cli-provider/adapters/omp.js.map +1 -1
- package/lib/agent-cli-provider/adapters/pi.d.ts.map +1 -1
- package/lib/agent-cli-provider/adapters/pi.js +12 -124
- package/lib/agent-cli-provider/adapters/pi.js.map +1 -1
- package/lib/agent-cli-provider/assistant-stream.d.ts +27 -0
- package/lib/agent-cli-provider/assistant-stream.d.ts.map +1 -0
- package/lib/agent-cli-provider/assistant-stream.js +119 -0
- package/lib/agent-cli-provider/assistant-stream.js.map +1 -0
- package/lib/agent-cli-provider/contract-actions.d.ts.map +1 -1
- package/lib/agent-cli-provider/contract-actions.js +42 -1
- package/lib/agent-cli-provider/contract-actions.js.map +1 -1
- package/lib/agent-cli-provider/contract-invoke.d.ts.map +1 -1
- package/lib/agent-cli-provider/contract-invoke.js +68 -38
- package/lib/agent-cli-provider/contract-invoke.js.map +1 -1
- package/lib/agent-cli-provider/contract-support.d.ts +5 -6
- package/lib/agent-cli-provider/contract-support.d.ts.map +1 -1
- package/lib/agent-cli-provider/contract-support.js +99 -6
- package/lib/agent-cli-provider/contract-support.js.map +1 -1
- package/lib/agent-cli-provider/index.d.ts +8 -6
- package/lib/agent-cli-provider/index.d.ts.map +1 -1
- package/lib/agent-cli-provider/index.js +34 -10
- package/lib/agent-cli-provider/index.js.map +1 -1
- package/lib/agent-cli-provider/omp/auth-policy.d.ts +31 -0
- package/lib/agent-cli-provider/omp/auth-policy.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/auth-policy.js +98 -0
- package/lib/agent-cli-provider/omp/auth-policy.js.map +1 -0
- package/lib/agent-cli-provider/{omp-release.d.ts → omp/release.d.ts} +1 -1
- package/lib/agent-cli-provider/omp/release.d.ts.map +1 -0
- package/lib/agent-cli-provider/{omp-release.js → omp/release.js} +1 -1
- package/lib/agent-cli-provider/omp/release.js.map +1 -0
- package/lib/agent-cli-provider/{omp-rpc-bounds.d.ts → omp/rpc-bounds.d.ts} +1 -1
- package/lib/agent-cli-provider/omp/rpc-bounds.d.ts.map +1 -0
- package/lib/agent-cli-provider/{omp-rpc-bounds.js → omp/rpc-bounds.js} +1 -1
- package/lib/agent-cli-provider/omp/rpc-bounds.js.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-driver-channel.d.ts +19 -0
- package/lib/agent-cli-provider/omp/rpc-driver-channel.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-driver-channel.js +109 -0
- package/lib/agent-cli-provider/omp/rpc-driver-channel.js.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-driver-dispatch.d.ts +27 -0
- package/lib/agent-cli-provider/omp/rpc-driver-dispatch.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-driver-dispatch.js +135 -0
- package/lib/agent-cli-provider/omp/rpc-driver-dispatch.js.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-driver-runner.d.ts +3 -0
- package/lib/agent-cli-provider/omp/rpc-driver-runner.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-driver-runner.js +205 -0
- package/lib/agent-cli-provider/omp/rpc-driver-runner.js.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-driver-state.d.ts +80 -0
- package/lib/agent-cli-provider/omp/rpc-driver-state.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-driver-state.js +86 -0
- package/lib/agent-cli-provider/omp/rpc-driver-state.js.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-driver.d.ts +3 -0
- package/lib/agent-cli-provider/omp/rpc-driver.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-driver.js +6 -0
- package/lib/agent-cli-provider/omp/rpc-driver.js.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-event-lines.d.ts +8 -0
- package/lib/agent-cli-provider/omp/rpc-event-lines.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-event-lines.js +59 -0
- package/lib/agent-cli-provider/omp/rpc-event-lines.js.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-events.d.ts +16 -0
- package/lib/agent-cli-provider/omp/rpc-events.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-events.js +115 -0
- package/lib/agent-cli-provider/omp/rpc-events.js.map +1 -0
- package/lib/agent-cli-provider/{omp-rpc-protocol.d.ts → omp/rpc-protocol-contract.d.ts} +1 -13
- package/lib/agent-cli-provider/omp/rpc-protocol-contract.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-protocol-contract.js +54 -0
- package/lib/agent-cli-provider/omp/rpc-protocol-contract.js.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-protocol.d.ts +15 -0
- package/lib/agent-cli-provider/omp/rpc-protocol.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/rpc-protocol.js +208 -0
- package/lib/agent-cli-provider/omp/rpc-protocol.js.map +1 -0
- package/lib/agent-cli-provider/{omp-rpc-session.d.ts → omp/rpc-session.d.ts} +1 -1
- package/lib/agent-cli-provider/omp/rpc-session.d.ts.map +1 -0
- package/lib/agent-cli-provider/{omp-rpc-session.js → omp/rpc-session.js} +1 -1
- package/lib/agent-cli-provider/omp/rpc-session.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-contract.d.ts +34 -0
- package/lib/agent-cli-provider/omp/sdk-contract.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-contract.js +81 -0
- package/lib/agent-cli-provider/omp/sdk-contract.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-process-credentials.d.ts +6 -0
- package/lib/agent-cli-provider/omp/sdk-process-credentials.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-process-credentials.js +44 -0
- package/lib/agent-cli-provider/omp/sdk-process-credentials.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-process-error.d.ts +5 -0
- package/lib/agent-cli-provider/omp/sdk-process-error.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-process-error.js +13 -0
- package/lib/agent-cli-provider/omp/sdk-process-error.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-process-io.d.ts +18 -0
- package/lib/agent-cli-provider/omp/sdk-process-io.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-process-io.js +80 -0
- package/lib/agent-cli-provider/omp/sdk-process-io.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-process-private-runtime.d.ts +51 -0
- package/lib/agent-cli-provider/omp/sdk-process-private-runtime.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-process-private-runtime.js +154 -0
- package/lib/agent-cli-provider/omp/sdk-process-private-runtime.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-process-result.d.ts +26 -0
- package/lib/agent-cli-provider/omp/sdk-process-result.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-process-result.js +117 -0
- package/lib/agent-cli-provider/omp/sdk-process-result.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-process-runner.d.ts +7 -0
- package/lib/agent-cli-provider/omp/sdk-process-runner.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-process-runner.js +204 -0
- package/lib/agent-cli-provider/omp/sdk-process-runner.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-collector.d.ts +3 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-collector.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-collector.js +145 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-collector.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-frame.d.ts +4 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-frame.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-frame.js +183 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-frame.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-request.d.ts +8 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-request.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-request.js +170 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-request.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-result.d.ts +5 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-result.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-result.js +74 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-result.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-types.d.ts +94 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-types.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-types.js +54 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-types.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-value.d.ts +18 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-value.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-value.js +229 -0
- package/lib/agent-cli-provider/omp/sdk-protocol-value.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol.d.ts +7 -0
- package/lib/agent-cli-provider/omp/sdk-protocol.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-protocol.js +28 -0
- package/lib/agent-cli-provider/omp/sdk-protocol.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-runtime.d.ts +29 -0
- package/lib/agent-cli-provider/omp/sdk-runtime.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-runtime.js +110 -0
- package/lib/agent-cli-provider/omp/sdk-runtime.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-auth.d.ts +3 -0
- package/lib/agent-cli-provider/omp/sdk-settings-auth.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-auth.js +86 -0
- package/lib/agent-cli-provider/omp/sdk-settings-auth.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-constants.d.ts +26 -0
- package/lib/agent-cli-provider/omp/sdk-settings-constants.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-constants.js +148 -0
- package/lib/agent-cli-provider/omp/sdk-settings-constants.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-model-fields.d.ts +5 -0
- package/lib/agent-cli-provider/omp/sdk-settings-model-fields.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-model-fields.js +198 -0
- package/lib/agent-cli-provider/omp/sdk-settings-model-fields.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-model.d.ts +4 -0
- package/lib/agent-cli-provider/omp/sdk-settings-model.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-model.js +163 -0
- package/lib/agent-cli-provider/omp/sdk-settings-model.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-normalize.d.ts +18 -0
- package/lib/agent-cli-provider/omp/sdk-settings-normalize.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-normalize.js +148 -0
- package/lib/agent-cli-provider/omp/sdk-settings-normalize.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-selector.d.ts +3 -0
- package/lib/agent-cli-provider/omp/sdk-settings-selector.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-selector.js +22 -0
- package/lib/agent-cli-provider/omp/sdk-settings-selector.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-types.d.ts +68 -0
- package/lib/agent-cli-provider/omp/sdk-settings-types.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-types.js +19 -0
- package/lib/agent-cli-provider/omp/sdk-settings-types.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-values.d.ts +14 -0
- package/lib/agent-cli-provider/omp/sdk-settings-values.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings-values.js +112 -0
- package/lib/agent-cli-provider/omp/sdk-settings-values.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings.d.ts +5 -0
- package/lib/agent-cli-provider/omp/sdk-settings.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-settings.js +16 -0
- package/lib/agent-cli-provider/omp/sdk-settings.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-context.d.ts +11 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-context.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-context.js +171 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-context.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-credentials.d.ts +5 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-credentials.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-credentials.js +94 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-credentials.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-execute.d.ts +5 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-execute.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-execute.js +175 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-execute.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-output.d.ts +5 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-output.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-output.js +216 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-output.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-runtime.d.ts +11 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-runtime.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-runtime.js +265 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-runtime.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-types.d.ts +148 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-types.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-types.js +84 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar-types.js.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar.d.ts +4 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar.d.ts.map +1 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar.js +9 -0
- package/lib/agent-cli-provider/omp/sdk-sidecar.js.map +1 -0
- package/lib/agent-cli-provider/process-runner.d.ts +1 -0
- package/lib/agent-cli-provider/process-runner.d.ts.map +1 -1
- package/lib/agent-cli-provider/process-runner.js +19 -6
- package/lib/agent-cli-provider/process-runner.js.map +1 -1
- package/lib/agent-cli-provider/provider-registry.d.ts +18 -4
- package/lib/agent-cli-provider/provider-registry.d.ts.map +1 -1
- package/lib/agent-cli-provider/provider-registry.js +21 -7
- package/lib/agent-cli-provider/provider-registry.js.map +1 -1
- package/lib/agent-cli-provider/single-agent-runtime.d.ts +10 -1
- package/lib/agent-cli-provider/single-agent-runtime.d.ts.map +1 -1
- package/lib/agent-cli-provider/single-agent-runtime.js +378 -11
- package/lib/agent-cli-provider/single-agent-runtime.js.map +1 -1
- package/lib/agent-cli-provider/types.d.ts +110 -2
- package/lib/agent-cli-provider/types.d.ts.map +1 -1
- package/lib/agent-cli-provider/types.js.map +1 -1
- package/npm-shrinkwrap.json +18116 -0
- package/package.json +16 -3
- package/scripts/omp/bun-ffi.d.ts +28 -0
- package/scripts/omp/host-supervisor-cleanup.ts +100 -0
- package/scripts/omp/host-supervisor-launch.ts +38 -0
- package/scripts/omp/host-supervisor-native.ts +181 -0
- package/scripts/omp/host-supervisor-tracker.ts +258 -0
- package/scripts/omp/host-supervisor.ts +298 -0
- package/scripts/omp/promise-gate.ts +13 -0
- package/scripts/omp/runtime-identities.js +283 -0
- package/scripts/omp/runtime-lock.js +232 -0
- package/scripts/omp/runtime-release.js +105 -0
- package/scripts/omp/runtime.js +33 -0
- package/scripts/omp/sidecar.ts +124 -0
- package/scripts/opcore-introduced-check.js +5 -0
- package/scripts/release-preflight.js +19 -0
- package/src/agent-cli-provider/adapters/acp.ts +18 -17
- package/src/agent-cli-provider/adapters/omp-policy.ts +45 -0
- package/src/agent-cli-provider/adapters/omp.ts +9 -155
- package/src/agent-cli-provider/adapters/pi.ts +15 -145
- package/src/agent-cli-provider/assistant-stream.ts +155 -0
- package/src/agent-cli-provider/contract-actions.ts +14 -2
- package/src/agent-cli-provider/contract-invoke.ts +77 -40
- package/src/agent-cli-provider/contract-support.ts +83 -12
- package/src/agent-cli-provider/index.ts +60 -5
- package/src/agent-cli-provider/omp/auth-policy.ts +126 -0
- package/src/agent-cli-provider/omp/rpc-driver-channel.ts +144 -0
- package/src/agent-cli-provider/omp/rpc-driver-dispatch.ts +177 -0
- package/src/agent-cli-provider/omp/rpc-driver-runner.ts +199 -0
- package/src/agent-cli-provider/omp/rpc-driver-state.ts +165 -0
- package/src/agent-cli-provider/omp/rpc-driver.ts +8 -0
- package/src/agent-cli-provider/omp/rpc-event-lines.ts +58 -0
- package/src/agent-cli-provider/omp/rpc-events.ts +154 -0
- package/src/agent-cli-provider/omp/rpc-protocol-contract.ts +77 -0
- package/src/agent-cli-provider/{omp-rpc-protocol.ts → omp/rpc-protocol.ts} +9 -111
- package/src/agent-cli-provider/omp/sdk-contract.ts +123 -0
- package/src/agent-cli-provider/omp/sdk-process-credentials.ts +55 -0
- package/src/agent-cli-provider/omp/sdk-process-error.ts +9 -0
- package/src/agent-cli-provider/omp/sdk-process-io.ts +92 -0
- package/src/agent-cli-provider/omp/sdk-process-private-runtime.ts +249 -0
- package/src/agent-cli-provider/omp/sdk-process-result.ts +181 -0
- package/src/agent-cli-provider/omp/sdk-process-runner.ts +281 -0
- package/src/agent-cli-provider/omp/sdk-protocol-collector.ts +140 -0
- package/src/agent-cli-provider/omp/sdk-protocol-frame.ts +260 -0
- package/src/agent-cli-provider/omp/sdk-protocol-request.ts +181 -0
- package/src/agent-cli-provider/omp/sdk-protocol-result.ts +80 -0
- package/src/agent-cli-provider/omp/sdk-protocol-types.ts +156 -0
- package/src/agent-cli-provider/omp/sdk-protocol-value.ts +234 -0
- package/src/agent-cli-provider/omp/sdk-protocol.ts +46 -0
- package/src/agent-cli-provider/omp/sdk-runtime.ts +159 -0
- package/src/agent-cli-provider/omp/sdk-settings-auth.ts +78 -0
- package/src/agent-cli-provider/omp/sdk-settings-constants.ts +147 -0
- package/src/agent-cli-provider/omp/sdk-settings-model-fields.ts +233 -0
- package/src/agent-cli-provider/omp/sdk-settings-model.ts +238 -0
- package/src/agent-cli-provider/omp/sdk-settings-normalize.ts +242 -0
- package/src/agent-cli-provider/omp/sdk-settings-selector.ts +28 -0
- package/src/agent-cli-provider/omp/sdk-settings-types.ts +88 -0
- package/src/agent-cli-provider/omp/sdk-settings-values.ts +118 -0
- package/src/agent-cli-provider/omp/sdk-settings.ts +33 -0
- package/src/agent-cli-provider/omp/sdk-sidecar-context.ts +199 -0
- package/src/agent-cli-provider/omp/sdk-sidecar-credentials.ts +100 -0
- package/src/agent-cli-provider/omp/sdk-sidecar-execute.ts +201 -0
- package/src/agent-cli-provider/omp/sdk-sidecar-output.ts +235 -0
- package/src/agent-cli-provider/omp/sdk-sidecar-runtime.ts +244 -0
- package/src/agent-cli-provider/omp/sdk-sidecar-types.ts +173 -0
- package/src/agent-cli-provider/omp/sdk-sidecar.ts +3 -0
- package/src/agent-cli-provider/process-runner.ts +22 -8
- package/src/agent-cli-provider/provider-registry.ts +29 -10
- package/src/agent-cli-provider/single-agent-runtime.ts +444 -18
- package/src/agent-cli-provider/types.ts +131 -3
- package/src/command-cleanup-ownership.js +15 -0
- package/task-lib/omp-sdk-runtime.js +8 -0
- package/task-lib/runner.js +121 -40
- package/task-lib/sdk-watcher.js +154 -0
- package/lib/agent-cli-provider/omp-release.d.ts.map +0 -1
- package/lib/agent-cli-provider/omp-release.js.map +0 -1
- package/lib/agent-cli-provider/omp-rpc-bounds.d.ts.map +0 -1
- package/lib/agent-cli-provider/omp-rpc-bounds.js.map +0 -1
- package/lib/agent-cli-provider/omp-rpc-driver.d.ts +0 -40
- package/lib/agent-cli-provider/omp-rpc-driver.d.ts.map +0 -1
- package/lib/agent-cli-provider/omp-rpc-driver.js +0 -519
- package/lib/agent-cli-provider/omp-rpc-driver.js.map +0 -1
- package/lib/agent-cli-provider/omp-rpc-events.d.ts +0 -28
- package/lib/agent-cli-provider/omp-rpc-events.d.ts.map +0 -1
- package/lib/agent-cli-provider/omp-rpc-events.js +0 -264
- package/lib/agent-cli-provider/omp-rpc-events.js.map +0 -1
- package/lib/agent-cli-provider/omp-rpc-protocol.d.ts.map +0 -1
- package/lib/agent-cli-provider/omp-rpc-protocol.js +0 -272
- package/lib/agent-cli-provider/omp-rpc-protocol.js.map +0 -1
- package/lib/agent-cli-provider/omp-rpc-session.d.ts.map +0 -1
- package/lib/agent-cli-provider/omp-rpc-session.js.map +0 -1
- package/src/agent-cli-provider/omp-rpc-driver.ts +0 -639
- package/src/agent-cli-provider/omp-rpc-events.ts +0 -318
- /package/src/agent-cli-provider/{omp-release.ts → omp/release.ts} +0 -0
- /package/src/agent-cli-provider/{omp-rpc-bounds.ts → omp/rpc-bounds.ts} +0 -0
- /package/src/agent-cli-provider/{omp-rpc-session.ts → omp/rpc-session.ts} +0 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
2
|
+
|
|
3
|
+
import Ajv from 'ajv';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
OMP_SDK_BACKEND_VERSION,
|
|
7
|
+
OMP_SDK_BUN_VERSION,
|
|
8
|
+
validateOmpSdkProtocolResultFrame,
|
|
9
|
+
type OmpSdkProtocolFrame,
|
|
10
|
+
type OmpSdkSidecarRequest,
|
|
11
|
+
} from './sdk-protocol';
|
|
12
|
+
import {
|
|
13
|
+
ALLOWED_YIELD_FIELDS,
|
|
14
|
+
SidecarFailure,
|
|
15
|
+
isRecord,
|
|
16
|
+
natural,
|
|
17
|
+
nonnegative,
|
|
18
|
+
type OmpSingleResult,
|
|
19
|
+
type YieldItem,
|
|
20
|
+
} from './sdk-sidecar-types';
|
|
21
|
+
import { classify } from './sdk-sidecar-runtime';
|
|
22
|
+
|
|
23
|
+
function yieldItem(value: unknown): YieldItem {
|
|
24
|
+
if (!isRecord(value)) throw new SidecarFailure('sdk-error', 'sdk', false);
|
|
25
|
+
const type = value.type;
|
|
26
|
+
if (
|
|
27
|
+
Object.keys(value).some((key) => ALLOWED_YIELD_FIELDS[key] !== true) ||
|
|
28
|
+
(value.status !== 'success' && value.status !== 'aborted') ||
|
|
29
|
+
(value.error !== undefined && typeof value.error !== 'string') ||
|
|
30
|
+
(value.schemaOverridden !== undefined && typeof value.schemaOverridden !== 'boolean') ||
|
|
31
|
+
(value.useLastTurn !== undefined && typeof value.useLastTurn !== 'boolean') ||
|
|
32
|
+
(type !== undefined &&
|
|
33
|
+
!(typeof type === 'string' && type.length > 0) &&
|
|
34
|
+
!(
|
|
35
|
+
Array.isArray(type) &&
|
|
36
|
+
type.length > 0 &&
|
|
37
|
+
type.every((item) => typeof item === 'string' && item.length > 0)
|
|
38
|
+
))
|
|
39
|
+
) {
|
|
40
|
+
throw new SidecarFailure('sdk-error', 'sdk', false);
|
|
41
|
+
}
|
|
42
|
+
return value as YieldItem;
|
|
43
|
+
}
|
|
44
|
+
function terminalYield(result: OmpSingleResult): YieldItem {
|
|
45
|
+
const raw = result.extractedToolData?.yield;
|
|
46
|
+
if (!Array.isArray(raw) || raw.length !== 1) {
|
|
47
|
+
throw new SidecarFailure('schema-violation', 'schema', false);
|
|
48
|
+
}
|
|
49
|
+
const terminal = yieldItem(raw[0]);
|
|
50
|
+
if (
|
|
51
|
+
Array.isArray(terminal.type) ||
|
|
52
|
+
terminal.status !== 'success' ||
|
|
53
|
+
terminal.error !== undefined ||
|
|
54
|
+
terminal.useLastTurn === true ||
|
|
55
|
+
terminal.schemaOverridden === true ||
|
|
56
|
+
!Object.hasOwn(terminal, 'data')
|
|
57
|
+
) {
|
|
58
|
+
throw new SidecarFailure('schema-violation', 'schema', false);
|
|
59
|
+
}
|
|
60
|
+
return terminal;
|
|
61
|
+
}
|
|
62
|
+
function immutableYieldData(value: unknown): unknown {
|
|
63
|
+
const pending = [value];
|
|
64
|
+
const seen = new Set<object>();
|
|
65
|
+
while (pending.length > 0) {
|
|
66
|
+
const current = pending.pop();
|
|
67
|
+
if (
|
|
68
|
+
current === null ||
|
|
69
|
+
typeof current === 'string' ||
|
|
70
|
+
typeof current === 'boolean' ||
|
|
71
|
+
(typeof current === 'number' && Number.isFinite(current))
|
|
72
|
+
) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (typeof current !== 'object' || seen.has(current)) {
|
|
76
|
+
throw new SidecarFailure('schema-violation', 'schema', false);
|
|
77
|
+
}
|
|
78
|
+
seen.add(current);
|
|
79
|
+
if (Array.isArray(current)) {
|
|
80
|
+
current.forEach((child) => pending.push(child));
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const prototype = Reflect.getPrototypeOf(current);
|
|
84
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
85
|
+
throw new SidecarFailure('schema-violation', 'schema', false);
|
|
86
|
+
}
|
|
87
|
+
Object.values(current).forEach((child) => pending.push(child));
|
|
88
|
+
}
|
|
89
|
+
let encoded: unknown;
|
|
90
|
+
try {
|
|
91
|
+
encoded = JSON.stringify(value);
|
|
92
|
+
} catch {
|
|
93
|
+
throw new SidecarFailure('schema-violation', 'schema', false);
|
|
94
|
+
}
|
|
95
|
+
if (typeof encoded !== 'string') {
|
|
96
|
+
throw new SidecarFailure('schema-violation', 'schema', false);
|
|
97
|
+
}
|
|
98
|
+
const snapshot: unknown = JSON.parse(encoded);
|
|
99
|
+
const stack = [snapshot];
|
|
100
|
+
while (stack.length > 0) {
|
|
101
|
+
const current = stack.pop();
|
|
102
|
+
if (current === null || typeof current !== 'object' || Object.isFrozen(current)) continue;
|
|
103
|
+
Object.values(current).forEach((child) => stack.push(child));
|
|
104
|
+
Object.freeze(current);
|
|
105
|
+
}
|
|
106
|
+
return snapshot;
|
|
107
|
+
}
|
|
108
|
+
function validateSchema(schema: unknown, value: unknown): void {
|
|
109
|
+
try {
|
|
110
|
+
if (typeof schema !== 'boolean' && (schema === null || typeof schema !== 'object')) {
|
|
111
|
+
throw new SidecarFailure('invalid-request', 'request', false);
|
|
112
|
+
}
|
|
113
|
+
const validate = new Ajv({
|
|
114
|
+
allErrors: true,
|
|
115
|
+
coerceTypes: false,
|
|
116
|
+
strict: false,
|
|
117
|
+
validateFormats: false,
|
|
118
|
+
}).compile(schema);
|
|
119
|
+
if (!validate(value)) throw new SidecarFailure('schema-violation', 'schema', false);
|
|
120
|
+
} catch (error) {
|
|
121
|
+
if (error instanceof SidecarFailure) throw error;
|
|
122
|
+
throw new SidecarFailure('invalid-request', 'request', false);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
export function successfulValue(
|
|
126
|
+
result: OmpSingleResult,
|
|
127
|
+
request: OmpSdkSidecarRequest,
|
|
128
|
+
schema: unknown,
|
|
129
|
+
signal?: AbortSignal
|
|
130
|
+
): unknown {
|
|
131
|
+
if (signal?.aborted) throw new SidecarFailure('cancelled', 'cancelled', false);
|
|
132
|
+
if (result.aborted === true) {
|
|
133
|
+
if (/timeout|timed out|deadline/i.test(result.abortReason ?? '')) {
|
|
134
|
+
throw new SidecarFailure('provider-timeout', 'timeout', true);
|
|
135
|
+
}
|
|
136
|
+
throw new SidecarFailure('cancelled', 'cancelled', false);
|
|
137
|
+
}
|
|
138
|
+
if (!Number.isInteger(result.exitCode)) throw new SidecarFailure('sdk-error', 'sdk', false);
|
|
139
|
+
if (result.exitCode !== 0) throw classify(result.retryFailure ?? result.error ?? result.stderr);
|
|
140
|
+
if (result.resolvedModel !== request.modelSelector) {
|
|
141
|
+
throw new SidecarFailure('model-resolution', 'model', false);
|
|
142
|
+
}
|
|
143
|
+
if (result.resolvedModelIsFallback === true) {
|
|
144
|
+
throw new SidecarFailure('model-fallback', 'model', false);
|
|
145
|
+
}
|
|
146
|
+
const structured = result.structuredOutput;
|
|
147
|
+
if (
|
|
148
|
+
structured?.source !== 'caller' ||
|
|
149
|
+
structured.mode !== 'strict' ||
|
|
150
|
+
structured.status !== 'valid' ||
|
|
151
|
+
!Object.hasOwn(structured, 'data')
|
|
152
|
+
) {
|
|
153
|
+
throw new SidecarFailure('schema-violation', 'schema', false);
|
|
154
|
+
}
|
|
155
|
+
const terminal = terminalYield(result);
|
|
156
|
+
const terminalData = immutableYieldData(terminal.data);
|
|
157
|
+
const structuredData = immutableYieldData(structured.data);
|
|
158
|
+
if (!isDeepStrictEqual(terminalData, structuredData)) {
|
|
159
|
+
throw new SidecarFailure('schema-violation', 'schema', false);
|
|
160
|
+
}
|
|
161
|
+
validateSchema(schema, structuredData);
|
|
162
|
+
return structuredData;
|
|
163
|
+
}
|
|
164
|
+
function usage(result: OmpSingleResult): Record<string, unknown> {
|
|
165
|
+
const item = result.usage;
|
|
166
|
+
if (item === undefined) throw new SidecarFailure('sdk-error', 'sdk', false);
|
|
167
|
+
const tokenValues = [item.input, item.output, item.cacheRead, item.cacheWrite, item.totalTokens];
|
|
168
|
+
const costValues = [
|
|
169
|
+
item.cost.input,
|
|
170
|
+
item.cost.output,
|
|
171
|
+
item.cost.cacheRead,
|
|
172
|
+
item.cost.cacheWrite,
|
|
173
|
+
item.cost.total,
|
|
174
|
+
];
|
|
175
|
+
if (
|
|
176
|
+
!tokenValues.every(natural) ||
|
|
177
|
+
!costValues.every(nonnegative) ||
|
|
178
|
+
!natural(result.requests) ||
|
|
179
|
+
!nonnegative(result.durationMs)
|
|
180
|
+
) {
|
|
181
|
+
throw new SidecarFailure('sdk-error', 'sdk', false);
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
source: 'omp-aggregate',
|
|
185
|
+
completeness: 'unknown',
|
|
186
|
+
inputTokens: item.input,
|
|
187
|
+
outputTokens: item.output,
|
|
188
|
+
cacheReadInputTokens: item.cacheRead,
|
|
189
|
+
cacheCreationInputTokens: item.cacheWrite,
|
|
190
|
+
totalTokens: item.totalTokens,
|
|
191
|
+
requests: result.requests,
|
|
192
|
+
durationMs: result.durationMs,
|
|
193
|
+
cost: item.cost,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
function textResult(value: unknown): string {
|
|
197
|
+
if (!isRecord(value) || typeof value.result !== 'string') {
|
|
198
|
+
throw new SidecarFailure('schema-violation', 'schema', false);
|
|
199
|
+
}
|
|
200
|
+
return value.result;
|
|
201
|
+
}
|
|
202
|
+
export function resultFrame(
|
|
203
|
+
request: OmpSdkSidecarRequest,
|
|
204
|
+
result: OmpSingleResult,
|
|
205
|
+
rawValue: unknown
|
|
206
|
+
): OmpSdkProtocolFrame {
|
|
207
|
+
const frame = {
|
|
208
|
+
protocolVersion: 1,
|
|
209
|
+
type: 'result',
|
|
210
|
+
runId: request.runId,
|
|
211
|
+
backend: { id: 'omp-sdk', version: OMP_SDK_BACKEND_VERSION },
|
|
212
|
+
runtime: { name: 'bun', version: OMP_SDK_BUN_VERSION },
|
|
213
|
+
requested: {
|
|
214
|
+
modelSelector: request.modelSelector,
|
|
215
|
+
reasoningEffort: request.reasoningEffort,
|
|
216
|
+
outputMode: request.outputMode,
|
|
217
|
+
},
|
|
218
|
+
resolved: { modelSelector: result.resolvedModel },
|
|
219
|
+
strictOutput: {
|
|
220
|
+
source: 'caller',
|
|
221
|
+
mode: 'strict',
|
|
222
|
+
status: 'valid',
|
|
223
|
+
yieldCount: 1,
|
|
224
|
+
},
|
|
225
|
+
fallback: false,
|
|
226
|
+
execution: { exitCode: 0, aborted: false },
|
|
227
|
+
value: request.outputMode === 'text' ? textResult(rawValue) : rawValue,
|
|
228
|
+
usage: usage(result),
|
|
229
|
+
};
|
|
230
|
+
try {
|
|
231
|
+
return validateOmpSdkProtocolResultFrame(frame, request);
|
|
232
|
+
} catch {
|
|
233
|
+
throw new SidecarFailure('sdk-error', 'sdk', false);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import {
|
|
2
|
+
OMP_SDK_BACKEND_VERSION,
|
|
3
|
+
OMP_SDK_BUN_VERSION,
|
|
4
|
+
parseOmpSdkProtocolFrame,
|
|
5
|
+
type OmpSdkProtocolFrame,
|
|
6
|
+
} from './sdk-protocol';
|
|
7
|
+
import {
|
|
8
|
+
SidecarFailure,
|
|
9
|
+
isRecord,
|
|
10
|
+
type OmpAuthStorage,
|
|
11
|
+
type OmpModel,
|
|
12
|
+
type OmpModelRegistry,
|
|
13
|
+
type OmpModelRegistryConstructor,
|
|
14
|
+
type OmpSdkBindings,
|
|
15
|
+
type OmpSingleResult,
|
|
16
|
+
} from './sdk-sidecar-types';
|
|
17
|
+
|
|
18
|
+
export function bunVersion(): string | undefined {
|
|
19
|
+
const value = (globalThis as typeof globalThis & { Bun?: { version?: unknown } }).Bun?.version;
|
|
20
|
+
return typeof value === 'string' ? value : undefined;
|
|
21
|
+
}
|
|
22
|
+
function runtimeMember(container: unknown, name: string): unknown {
|
|
23
|
+
if (container === null || (typeof container !== 'object' && typeof container !== 'function')) {
|
|
24
|
+
throw new TypeError('invalid OMP SDK module');
|
|
25
|
+
}
|
|
26
|
+
const value: unknown = Reflect.get(container, name);
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
function isRuntimeCallable(value: unknown): value is (...args: unknown[]) => unknown {
|
|
30
|
+
return typeof value === 'function';
|
|
31
|
+
}
|
|
32
|
+
function runtimeCallable(value: unknown): (...args: unknown[]) => unknown {
|
|
33
|
+
if (!isRuntimeCallable(value)) throw new TypeError('invalid OMP SDK export');
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
function isRuntimeConstructor(value: unknown): value is OmpModelRegistryConstructor {
|
|
37
|
+
if (typeof value !== 'function') return false;
|
|
38
|
+
try {
|
|
39
|
+
Reflect.construct(Object, [], value);
|
|
40
|
+
return true;
|
|
41
|
+
} catch {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function runtimeConstructor(value: unknown): OmpModelRegistryConstructor {
|
|
46
|
+
if (!isRuntimeConstructor(value)) throw new TypeError('invalid OMP SDK constructor');
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
function isOmpAuthStorage(value: unknown): value is OmpAuthStorage {
|
|
50
|
+
return (
|
|
51
|
+
isRecord(value) &&
|
|
52
|
+
typeof value.close === 'function' &&
|
|
53
|
+
typeof value.hasAuth === 'function' &&
|
|
54
|
+
typeof value.setRuntimeApiKey === 'function'
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
export function requireOmpAuthStorage(value: unknown): OmpAuthStorage {
|
|
58
|
+
if (!isOmpAuthStorage(value)) throw new TypeError('invalid OMP AuthStorage');
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
function isOmpModelRegistry(value: unknown): value is OmpModelRegistry {
|
|
62
|
+
return (
|
|
63
|
+
isRecord(value) &&
|
|
64
|
+
typeof value.find === 'function' &&
|
|
65
|
+
typeof value.getAvailable === 'function' &&
|
|
66
|
+
typeof value.getError === 'function'
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
export function requireOmpModelRegistry(value: unknown): OmpModelRegistry {
|
|
70
|
+
if (!isOmpModelRegistry(value)) throw new TypeError('invalid OMP ModelRegistry');
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
function isOmpModel(value: unknown): value is OmpModel {
|
|
74
|
+
return isRecord(value) && typeof value.id === 'string' && typeof value.provider === 'string';
|
|
75
|
+
}
|
|
76
|
+
function isOmpUsage(value: unknown): value is NonNullable<OmpSingleResult['usage']> {
|
|
77
|
+
if (!isRecord(value) || !isRecord(value.cost)) return false;
|
|
78
|
+
return (
|
|
79
|
+
typeof value.input === 'number' &&
|
|
80
|
+
typeof value.output === 'number' &&
|
|
81
|
+
typeof value.cacheRead === 'number' &&
|
|
82
|
+
typeof value.cacheWrite === 'number' &&
|
|
83
|
+
typeof value.totalTokens === 'number' &&
|
|
84
|
+
typeof value.cost.input === 'number' &&
|
|
85
|
+
typeof value.cost.output === 'number' &&
|
|
86
|
+
typeof value.cost.cacheRead === 'number' &&
|
|
87
|
+
typeof value.cost.cacheWrite === 'number' &&
|
|
88
|
+
typeof value.cost.total === 'number'
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
function isOmpSingleResult(value: unknown): value is OmpSingleResult {
|
|
92
|
+
if (!isRecord(value)) return false;
|
|
93
|
+
const extractedToolData = value.extractedToolData;
|
|
94
|
+
return (
|
|
95
|
+
typeof value.durationMs === 'number' &&
|
|
96
|
+
typeof value.exitCode === 'number' &&
|
|
97
|
+
typeof value.requests === 'number' &&
|
|
98
|
+
typeof value.stderr === 'string' &&
|
|
99
|
+
(value.aborted === undefined || typeof value.aborted === 'boolean') &&
|
|
100
|
+
(value.abortReason === undefined || typeof value.abortReason === 'string') &&
|
|
101
|
+
(value.error === undefined || typeof value.error === 'string') &&
|
|
102
|
+
(value.resolvedModel === undefined || typeof value.resolvedModel === 'string') &&
|
|
103
|
+
(value.resolvedModelIsFallback === undefined ||
|
|
104
|
+
typeof value.resolvedModelIsFallback === 'boolean') &&
|
|
105
|
+
(value.structuredOutput === undefined || isRecord(value.structuredOutput)) &&
|
|
106
|
+
(extractedToolData === undefined ||
|
|
107
|
+
(isRecord(extractedToolData) && Object.values(extractedToolData).every(Array.isArray))) &&
|
|
108
|
+
(value.usage === undefined || isOmpUsage(value.usage))
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
export function requireOmpSingleResult(value: unknown): OmpSingleResult {
|
|
112
|
+
if (!isOmpSingleResult(value)) throw new TypeError('invalid OMP runSubprocess result');
|
|
113
|
+
return value;
|
|
114
|
+
}
|
|
115
|
+
// OMP is an optional sidecar-only dependency and must not load in the host process.
|
|
116
|
+
async function importRuntimeModule(specifier: string): Promise<unknown> {
|
|
117
|
+
const runtimeModule: unknown = await import(specifier);
|
|
118
|
+
return runtimeModule;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export async function loadOmpSdk(): Promise<OmpSdkBindings> {
|
|
122
|
+
const [root, agents, resolver, broker] = await Promise.all([
|
|
123
|
+
importRuntimeModule('@oh-my-pi/pi-coding-agent'),
|
|
124
|
+
importRuntimeModule('@oh-my-pi/pi-coding-agent/task/agents'),
|
|
125
|
+
importRuntimeModule('@oh-my-pi/pi-coding-agent/config/model-resolver'),
|
|
126
|
+
importRuntimeModule('@oh-my-pi/pi-coding-agent/session/auth-broker-config'),
|
|
127
|
+
]);
|
|
128
|
+
const authStorageExport = runtimeMember(root, 'AuthStorage');
|
|
129
|
+
const createAuthStorage = runtimeCallable(runtimeMember(authStorageExport, 'create'));
|
|
130
|
+
const settings = runtimeMember(root, 'Settings');
|
|
131
|
+
const isolatedSettings = runtimeCallable(runtimeMember(settings, 'isolated'));
|
|
132
|
+
const discoverBrokerAuthStorage = runtimeCallable(runtimeMember(broker, 'discoverAuthStorage'));
|
|
133
|
+
const getBundledAgent = runtimeCallable(runtimeMember(agents, 'getBundledAgent'));
|
|
134
|
+
const parseModelString = runtimeCallable(runtimeMember(resolver, 'parseModelString'));
|
|
135
|
+
const modelRegistry = runtimeConstructor(runtimeMember(root, 'ModelRegistry'));
|
|
136
|
+
const runSubprocess = runtimeCallable(runtimeMember(root, 'runSubprocess'));
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
AuthStorage: {
|
|
140
|
+
async create(path: string): Promise<OmpAuthStorage> {
|
|
141
|
+
const value: unknown = await Promise.resolve(
|
|
142
|
+
Reflect.apply(createAuthStorage, authStorageExport, [path])
|
|
143
|
+
);
|
|
144
|
+
return requireOmpAuthStorage(value);
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
ModelRegistry: modelRegistry,
|
|
148
|
+
Settings: {
|
|
149
|
+
isolated(overrides: Readonly<Record<string, unknown>>): unknown {
|
|
150
|
+
const value: unknown = Reflect.apply(isolatedSettings, settings, [overrides]);
|
|
151
|
+
return value;
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
async discoverBrokerAuthStorage(
|
|
155
|
+
agentDirectory: string,
|
|
156
|
+
options: { cachePath: string; sourceLabel: string }
|
|
157
|
+
): Promise<OmpAuthStorage> {
|
|
158
|
+
const value: unknown = await Promise.resolve(
|
|
159
|
+
Reflect.apply(discoverBrokerAuthStorage, broker, [agentDirectory, options])
|
|
160
|
+
);
|
|
161
|
+
return requireOmpAuthStorage(value);
|
|
162
|
+
},
|
|
163
|
+
getBundledAgent(name: string): Readonly<Record<string, unknown>> | undefined {
|
|
164
|
+
const value: unknown = Reflect.apply(getBundledAgent, agents, [name]);
|
|
165
|
+
if (value === undefined) return undefined;
|
|
166
|
+
if (!isRecord(value)) throw new TypeError('invalid OMP bundled agent');
|
|
167
|
+
return value;
|
|
168
|
+
},
|
|
169
|
+
parseModelString(
|
|
170
|
+
selector: string
|
|
171
|
+
): { readonly id: string; readonly provider: string } | undefined {
|
|
172
|
+
const value: unknown = Reflect.apply(parseModelString, resolver, [selector]);
|
|
173
|
+
if (value === undefined) return undefined;
|
|
174
|
+
if (!isOmpModel(value)) throw new TypeError('invalid OMP model selector');
|
|
175
|
+
return value;
|
|
176
|
+
},
|
|
177
|
+
async runSubprocess(options: Readonly<Record<string, unknown>>): Promise<OmpSingleResult> {
|
|
178
|
+
const value: unknown = await Promise.resolve(Reflect.apply(runSubprocess, root, [options]));
|
|
179
|
+
return requireOmpSingleResult(value);
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
export function runIdFrom(value: unknown): string {
|
|
184
|
+
if (!isRecord(value) || typeof value.runId !== 'string') return 'unknown';
|
|
185
|
+
return /^[A-Za-z0-9][A-Za-z0-9._:-]*$/.test(value.runId) && Buffer.byteLength(value.runId) <= 128
|
|
186
|
+
? value.runId
|
|
187
|
+
: 'unknown';
|
|
188
|
+
}
|
|
189
|
+
export function classify(error: unknown): SidecarFailure {
|
|
190
|
+
if (error instanceof SidecarFailure) return error;
|
|
191
|
+
const record = isRecord(error) ? error : undefined;
|
|
192
|
+
const code = typeof record?.code === 'string' ? record.code : '';
|
|
193
|
+
const status =
|
|
194
|
+
typeof record?.status === 'number'
|
|
195
|
+
? record.status
|
|
196
|
+
: isRecord(record?.response) && typeof record.response.status === 'number'
|
|
197
|
+
? record.response.status
|
|
198
|
+
: undefined;
|
|
199
|
+
const message =
|
|
200
|
+
error instanceof Error
|
|
201
|
+
? error.message
|
|
202
|
+
: typeof error === 'string'
|
|
203
|
+
? error
|
|
204
|
+
: typeof record?.errorMessage === 'string'
|
|
205
|
+
? record.errorMessage
|
|
206
|
+
: '';
|
|
207
|
+
const searchable = `${code} ${message}`;
|
|
208
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
209
|
+
return new SidecarFailure('cancelled', 'cancelled', false);
|
|
210
|
+
}
|
|
211
|
+
if (
|
|
212
|
+
status === 401 ||
|
|
213
|
+
status === 403 ||
|
|
214
|
+
/auth|unauthori[sz]ed|forbidden|api.?key/i.test(searchable)
|
|
215
|
+
) {
|
|
216
|
+
return new SidecarFailure('provider-auth', 'auth', false);
|
|
217
|
+
}
|
|
218
|
+
if (status === 429 || /rate.?limit|too many requests|retry-after/i.test(searchable)) {
|
|
219
|
+
return new SidecarFailure('provider-rate-limit', 'rate-limit', true);
|
|
220
|
+
}
|
|
221
|
+
if (/timeout|timed out|deadline|etimedout/i.test(searchable)) {
|
|
222
|
+
return new SidecarFailure('provider-timeout', 'timeout', true);
|
|
223
|
+
}
|
|
224
|
+
if (/schema|structured output|yield/i.test(searchable)) {
|
|
225
|
+
return new SidecarFailure('schema-violation', 'schema', false);
|
|
226
|
+
}
|
|
227
|
+
return new SidecarFailure('provider-error', 'provider', status === undefined || status >= 500);
|
|
228
|
+
}
|
|
229
|
+
export function createOmpSdkErrorFrame(runId: string, error: unknown): OmpSdkProtocolFrame {
|
|
230
|
+
const failure = classify(error);
|
|
231
|
+
return parseOmpSdkProtocolFrame({
|
|
232
|
+
protocolVersion: 1,
|
|
233
|
+
type: 'error',
|
|
234
|
+
runId,
|
|
235
|
+
backend: { id: 'omp-sdk', version: OMP_SDK_BACKEND_VERSION },
|
|
236
|
+
runtime: { name: 'bun', version: OMP_SDK_BUN_VERSION },
|
|
237
|
+
error: {
|
|
238
|
+
code: failure.code,
|
|
239
|
+
category: failure.category,
|
|
240
|
+
retryable: failure.retryable,
|
|
241
|
+
redacted: true,
|
|
242
|
+
},
|
|
243
|
+
});
|
|
244
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import type { OmpSdkErrorCategory, OmpSdkErrorCode } from './sdk-protocol';
|
|
2
|
+
|
|
3
|
+
export const PRIVATE_BASE_ENV_KEYS = [
|
|
4
|
+
'HOME',
|
|
5
|
+
'XDG_CONFIG_HOME',
|
|
6
|
+
'XDG_CACHE_HOME',
|
|
7
|
+
'XDG_DATA_HOME',
|
|
8
|
+
'XDG_STATE_HOME',
|
|
9
|
+
] as const;
|
|
10
|
+
export const MAX_CREDENTIAL_COUNT = 32;
|
|
11
|
+
export const MAX_CREDENTIAL_NAME_BYTES = 128;
|
|
12
|
+
export const MAX_CREDENTIAL_VALUE_BYTES = 16 * 1024;
|
|
13
|
+
export const CREDENTIAL_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
14
|
+
export const ALLOWED_YIELD_FIELDS: Readonly<Record<string, true>> = {
|
|
15
|
+
data: true,
|
|
16
|
+
error: true,
|
|
17
|
+
schemaOverridden: true,
|
|
18
|
+
status: true,
|
|
19
|
+
type: true,
|
|
20
|
+
useLastTurn: true,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const ISOLATED_SETTINGS = {
|
|
24
|
+
'advisor.enabled': false,
|
|
25
|
+
'advisor.subagents': false,
|
|
26
|
+
'advisor.syncBacklog': 'off',
|
|
27
|
+
'async.enabled': false,
|
|
28
|
+
'async.maxJobs': 0,
|
|
29
|
+
'bash.direnv': 'off',
|
|
30
|
+
'bash.autoBackground.enabled': false,
|
|
31
|
+
'compaction.autoContinue': false,
|
|
32
|
+
'compaction.enabled': false,
|
|
33
|
+
'compaction.idleEnabled': false,
|
|
34
|
+
'compaction.midTurnEnabled': false,
|
|
35
|
+
'compaction.remoteEnabled': false,
|
|
36
|
+
'compaction.remoteStreamingV2Enabled': false,
|
|
37
|
+
'compaction.strategy': 'off',
|
|
38
|
+
'prewalk.enabled': false,
|
|
39
|
+
'retry.fallbackChains': {},
|
|
40
|
+
'retry.modelFallback': false,
|
|
41
|
+
'retry.usageAwareFallback': false,
|
|
42
|
+
'task.agentPrewalk': {},
|
|
43
|
+
'task.maxRecursionDepth': 0,
|
|
44
|
+
'task.maxRuntimeMs': 0,
|
|
45
|
+
'task.prewalk': false,
|
|
46
|
+
'task.softRequestBudget': 200,
|
|
47
|
+
'task.softRequestBudgetNotice': true,
|
|
48
|
+
'thinkingBudgets.high': 16384,
|
|
49
|
+
'thinkingBudgets.low': 2048,
|
|
50
|
+
'thinkingBudgets.max': 32768,
|
|
51
|
+
'thinkingBudgets.medium': 8192,
|
|
52
|
+
'thinkingBudgets.minimal': 1024,
|
|
53
|
+
'thinkingBudgets.xhigh': 32768,
|
|
54
|
+
} as const;
|
|
55
|
+
|
|
56
|
+
export interface OmpAuthStorage {
|
|
57
|
+
close(): void;
|
|
58
|
+
hasAuth(provider: string): boolean;
|
|
59
|
+
setRuntimeApiKey(provider: string, apiKey: string): void;
|
|
60
|
+
}
|
|
61
|
+
export interface OmpModel {
|
|
62
|
+
readonly api?: string;
|
|
63
|
+
readonly baseUrl?: string;
|
|
64
|
+
readonly id: string;
|
|
65
|
+
readonly provider: string;
|
|
66
|
+
}
|
|
67
|
+
export interface OmpModelRegistry {
|
|
68
|
+
find(provider: string, id: string): OmpModel | undefined;
|
|
69
|
+
getAvailable(): readonly OmpModel[];
|
|
70
|
+
getError(): unknown;
|
|
71
|
+
}
|
|
72
|
+
export interface OmpModelRegistryConstructor {
|
|
73
|
+
new (
|
|
74
|
+
authStorage: OmpAuthStorage,
|
|
75
|
+
modelsPath: string,
|
|
76
|
+
options?: { ignoreLocalModelConfig?: boolean }
|
|
77
|
+
): unknown;
|
|
78
|
+
}
|
|
79
|
+
export interface OmpSingleResult {
|
|
80
|
+
readonly aborted?: boolean;
|
|
81
|
+
readonly abortReason?: string;
|
|
82
|
+
readonly durationMs: number;
|
|
83
|
+
readonly error?: string;
|
|
84
|
+
readonly exitCode: number;
|
|
85
|
+
readonly extractedToolData?: Readonly<Record<string, readonly unknown[]>>;
|
|
86
|
+
readonly requests: number;
|
|
87
|
+
readonly resolvedModel?: string;
|
|
88
|
+
readonly resolvedModelIsFallback?: boolean;
|
|
89
|
+
readonly retryFailure?: unknown;
|
|
90
|
+
readonly stderr: string;
|
|
91
|
+
readonly structuredOutput?: {
|
|
92
|
+
readonly data?: unknown;
|
|
93
|
+
readonly mode: unknown;
|
|
94
|
+
readonly source: unknown;
|
|
95
|
+
readonly status: unknown;
|
|
96
|
+
};
|
|
97
|
+
readonly usage?: {
|
|
98
|
+
readonly cacheRead: number;
|
|
99
|
+
readonly cacheWrite: number;
|
|
100
|
+
readonly cost: {
|
|
101
|
+
readonly cacheRead: number;
|
|
102
|
+
readonly cacheWrite: number;
|
|
103
|
+
readonly input: number;
|
|
104
|
+
readonly output: number;
|
|
105
|
+
readonly total: number;
|
|
106
|
+
};
|
|
107
|
+
readonly input: number;
|
|
108
|
+
readonly output: number;
|
|
109
|
+
readonly totalTokens: number;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export interface OmpSdkBindings {
|
|
113
|
+
readonly AuthStorage: { create(path: string): Promise<OmpAuthStorage> };
|
|
114
|
+
readonly ModelRegistry: OmpModelRegistryConstructor;
|
|
115
|
+
readonly Settings: { isolated(overrides: Readonly<Record<string, unknown>>): unknown };
|
|
116
|
+
readonly discoverBrokerAuthStorage: (
|
|
117
|
+
agentDirectory: string,
|
|
118
|
+
options: { cachePath: string; sourceLabel: string }
|
|
119
|
+
) => Promise<OmpAuthStorage>;
|
|
120
|
+
readonly getBundledAgent: (name: string) => Readonly<Record<string, unknown>> | undefined;
|
|
121
|
+
readonly parseModelString: (
|
|
122
|
+
selector: string
|
|
123
|
+
) => { readonly id: string; readonly provider: string } | undefined;
|
|
124
|
+
readonly runSubprocess: (options: Readonly<Record<string, unknown>>) => Promise<OmpSingleResult>;
|
|
125
|
+
}
|
|
126
|
+
export interface PrivateState {
|
|
127
|
+
readonly agentDirectory: string;
|
|
128
|
+
readonly authDatabasePath: string;
|
|
129
|
+
readonly brokerCachePath: string;
|
|
130
|
+
readonly modelsPath: string;
|
|
131
|
+
readonly discoveryCwd: string;
|
|
132
|
+
readonly root: string;
|
|
133
|
+
}
|
|
134
|
+
export interface YieldItem {
|
|
135
|
+
readonly data?: unknown;
|
|
136
|
+
readonly error?: string;
|
|
137
|
+
readonly schemaOverridden?: boolean;
|
|
138
|
+
readonly status?: 'success' | 'aborted';
|
|
139
|
+
readonly type?: string | readonly string[];
|
|
140
|
+
readonly useLastTurn?: boolean;
|
|
141
|
+
}
|
|
142
|
+
export interface CredentialChannel {
|
|
143
|
+
readonly values: Readonly<Record<string, string>>;
|
|
144
|
+
}
|
|
145
|
+
export interface OmpSdkSidecarOptions {
|
|
146
|
+
readonly loadOmpSdk?: () => Promise<OmpSdkBindings>;
|
|
147
|
+
readonly runtimeVersion?: () => string | undefined;
|
|
148
|
+
readonly signal?: AbortSignal;
|
|
149
|
+
readonly credentialChannelFd?: number;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export class SidecarFailure extends Error {
|
|
153
|
+
constructor(
|
|
154
|
+
readonly code: OmpSdkErrorCode,
|
|
155
|
+
readonly category: OmpSdkErrorCategory,
|
|
156
|
+
readonly retryable: boolean
|
|
157
|
+
) {
|
|
158
|
+
super(code);
|
|
159
|
+
this.name = 'SidecarFailure';
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
export function isRecord(value: unknown): value is Record<string, unknown> {
|
|
163
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
164
|
+
}
|
|
165
|
+
export function isUnknownArray(value: unknown): value is readonly unknown[] {
|
|
166
|
+
return Array.isArray(value);
|
|
167
|
+
}
|
|
168
|
+
export function nonnegative(value: unknown): value is number {
|
|
169
|
+
return typeof value === 'number' && Number.isFinite(value) && value >= 0;
|
|
170
|
+
}
|
|
171
|
+
export function natural(value: unknown): value is number {
|
|
172
|
+
return nonnegative(value) && Number.isInteger(value);
|
|
173
|
+
}
|