open-multi-agent-kit 0.99.0 → 1.2.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/CHANGELOG.md +30 -1
- package/README.md +3 -3
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js +1 -0
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/register-bundled-coding-agent.d.ts +10 -0
- package/dist/bun/register-bundled-coding-agent.d.ts.map +1 -0
- package/dist/bun/register-bundled-coding-agent.js +12 -0
- package/dist/bun/register-bundled-coding-agent.js.map +1 -0
- package/dist/cli/args.d.ts +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +2 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +14 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/neo-cli.d.ts +9 -0
- package/dist/commands/neo-cli.d.ts.map +1 -0
- package/dist/commands/neo-cli.js +61 -0
- package/dist/commands/neo-cli.js.map +1 -0
- package/dist/coordination/awareness.d.ts +32 -0
- package/dist/coordination/awareness.d.ts.map +1 -0
- package/dist/coordination/awareness.js +55 -0
- package/dist/coordination/awareness.js.map +1 -0
- package/dist/coordination/broker.d.ts +79 -0
- package/dist/coordination/broker.d.ts.map +1 -0
- package/dist/coordination/broker.js +195 -0
- package/dist/coordination/broker.js.map +1 -0
- package/dist/coordination/index.d.ts +16 -0
- package/dist/coordination/index.d.ts.map +1 -0
- package/dist/coordination/index.js +16 -0
- package/dist/coordination/index.js.map +1 -0
- package/dist/coordination/integration.d.ts +59 -0
- package/dist/coordination/integration.d.ts.map +1 -0
- package/dist/coordination/integration.js +126 -0
- package/dist/coordination/integration.js.map +1 -0
- package/dist/coordination/operation.d.ts +106 -0
- package/dist/coordination/operation.d.ts.map +1 -0
- package/dist/coordination/operation.js +179 -0
- package/dist/coordination/operation.js.map +1 -0
- package/dist/coordination/resource.d.ts +33 -0
- package/dist/coordination/resource.d.ts.map +1 -0
- package/dist/coordination/resource.js +89 -0
- package/dist/coordination/resource.js.map +1 -0
- package/dist/coordination/session.d.ts +74 -0
- package/dist/coordination/session.d.ts.map +1 -0
- package/dist/coordination/session.js +143 -0
- package/dist/coordination/session.js.map +1 -0
- package/dist/coordination/types.d.ts +68 -0
- package/dist/coordination/types.d.ts.map +1 -0
- package/dist/coordination/types.js +26 -0
- package/dist/coordination/types.js.map +1 -0
- package/dist/core/agent-session.d.ts +29 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +135 -37
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bundled-skills.d.ts +4 -0
- package/dist/core/bundled-skills.d.ts.map +1 -0
- package/dist/core/bundled-skills.js +32 -0
- package/dist/core/bundled-skills.js.map +1 -0
- package/dist/core/cli-diagnostics.d.ts +6 -0
- package/dist/core/cli-diagnostics.d.ts.map +1 -0
- package/dist/core/cli-diagnostics.js +20 -0
- package/dist/core/cli-diagnostics.js.map +1 -0
- package/dist/core/compaction/control-state.d.ts +41 -0
- package/dist/core/compaction/control-state.d.ts.map +1 -0
- package/dist/core/compaction/control-state.js +85 -0
- package/dist/core/compaction/control-state.js.map +1 -0
- package/dist/core/compaction/fallback.d.ts +60 -0
- package/dist/core/compaction/fallback.d.ts.map +1 -0
- package/dist/core/compaction/fallback.js +117 -0
- package/dist/core/compaction/fallback.js.map +1 -0
- package/dist/core/compaction/index.d.ts +2 -0
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/index.js +2 -0
- package/dist/core/compaction/index.js.map +1 -1
- package/dist/core/context-budget-headroom-candidates.d.ts +16 -1
- package/dist/core/context-budget-headroom-candidates.d.ts.map +1 -1
- package/dist/core/context-budget-headroom-candidates.js +31 -13
- package/dist/core/context-budget-headroom-candidates.js.map +1 -1
- package/dist/core/context-budget-headroom-types.d.ts +7 -1
- package/dist/core/context-budget-headroom-types.d.ts.map +1 -1
- package/dist/core/context-budget-headroom-types.js +0 -1
- package/dist/core/context-budget-headroom-types.js.map +1 -1
- package/dist/core/context-budget-headroom.d.ts +22 -0
- package/dist/core/context-budget-headroom.d.ts.map +1 -1
- package/dist/core/context-budget-headroom.js +46 -2
- package/dist/core/context-budget-headroom.js.map +1 -1
- package/dist/core/context-budget-v2-global-pass.d.ts +21 -0
- package/dist/core/context-budget-v2-global-pass.d.ts.map +1 -0
- package/dist/core/context-budget-v2-global-pass.js +203 -0
- package/dist/core/context-budget-v2-global-pass.js.map +1 -0
- package/dist/core/context-budget-v2-input-validation.d.ts +4 -0
- package/dist/core/context-budget-v2-input-validation.d.ts.map +1 -0
- package/dist/core/context-budget-v2-input-validation.js +79 -0
- package/dist/core/context-budget-v2-input-validation.js.map +1 -0
- package/dist/core/context-budget-v2-observability.d.ts +15 -0
- package/dist/core/context-budget-v2-observability.d.ts.map +1 -0
- package/dist/core/context-budget-v2-observability.js +35 -0
- package/dist/core/context-budget-v2-observability.js.map +1 -0
- package/dist/core/context-budget-v2-planned-items.d.ts +17 -0
- package/dist/core/context-budget-v2-planned-items.d.ts.map +1 -0
- package/dist/core/context-budget-v2-planned-items.js +59 -0
- package/dist/core/context-budget-v2-planned-items.js.map +1 -0
- package/dist/core/context-budget-v2-planner.d.ts.map +1 -1
- package/dist/core/context-budget-v2-planner.js +69 -51
- package/dist/core/context-budget-v2-planner.js.map +1 -1
- package/dist/core/context-budget-v2-scoring.d.ts +7 -1
- package/dist/core/context-budget-v2-scoring.d.ts.map +1 -1
- package/dist/core/context-budget-v2-scoring.js.map +1 -1
- package/dist/core/context-budget-v2-selection.d.ts +22 -3
- package/dist/core/context-budget-v2-selection.d.ts.map +1 -1
- package/dist/core/context-budget-v2-selection.js +41 -59
- package/dist/core/context-budget-v2-selection.js.map +1 -1
- package/dist/core/context-budget-v2-tiers.d.ts.map +1 -1
- package/dist/core/context-budget-v2-tiers.js +9 -42
- package/dist/core/context-budget-v2-tiers.js.map +1 -1
- package/dist/core/context-budget-v2-types.d.ts +14 -2
- package/dist/core/context-budget-v2-types.d.ts.map +1 -1
- package/dist/core/context-budget-v2-types.js +6 -1
- package/dist/core/context-budget-v2-types.js.map +1 -1
- package/dist/core/extensions/bundled-virtual-modules.d.ts +15 -0
- package/dist/core/extensions/bundled-virtual-modules.d.ts.map +1 -0
- package/dist/core/extensions/bundled-virtual-modules.js +63 -0
- package/dist/core/extensions/bundled-virtual-modules.js.map +1 -0
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +2 -42
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +6 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +10 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/loadout-runtime.d.ts +2 -8
- package/dist/core/loadout-runtime.d.ts.map +1 -1
- package/dist/core/loadout-runtime.js.map +1 -1
- package/dist/core/mcp/client.d.ts +27 -6
- package/dist/core/mcp/client.d.ts.map +1 -1
- package/dist/core/mcp/client.js +80 -20
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/manager.d.ts +10 -1
- package/dist/core/mcp/manager.d.ts.map +1 -1
- package/dist/core/mcp/manager.js +68 -9
- package/dist/core/mcp/manager.js.map +1 -1
- package/dist/core/mcp/protocol.d.ts +9 -3
- package/dist/core/mcp/protocol.d.ts.map +1 -1
- package/dist/core/mcp/protocol.js +61 -15
- package/dist/core/mcp/protocol.js.map +1 -1
- package/dist/core/mcp/stdio-transport.d.ts +12 -1
- package/dist/core/mcp/stdio-transport.d.ts.map +1 -1
- package/dist/core/mcp/stdio-transport.js +30 -2
- package/dist/core/mcp/stdio-transport.js.map +1 -1
- package/dist/core/mcp-descriptor-injection.d.ts +26 -0
- package/dist/core/mcp-descriptor-injection.d.ts.map +1 -0
- package/dist/core/mcp-descriptor-injection.js +25 -0
- package/dist/core/mcp-descriptor-injection.js.map +1 -0
- package/dist/core/mcp-public-presets.d.ts +1 -3
- package/dist/core/mcp-public-presets.d.ts.map +1 -1
- package/dist/core/mcp-public-presets.js +3 -15
- package/dist/core/mcp-public-presets.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +24 -3
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/neo/catalog.d.ts +20 -0
- package/dist/core/neo/catalog.d.ts.map +1 -0
- package/dist/core/neo/catalog.js +50 -0
- package/dist/core/neo/catalog.js.map +1 -0
- package/dist/core/neo/setup.d.ts +3 -0
- package/dist/core/neo/setup.d.ts.map +1 -0
- package/dist/core/neo/setup.js +47 -0
- package/dist/core/neo/setup.js.map +1 -0
- package/dist/core/provider-default-models.d.ts +2 -0
- package/dist/core/provider-default-models.d.ts.map +1 -1
- package/dist/core/provider-default-models.js +2 -0
- package/dist/core/provider-default-models.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +2 -0
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/provider-error-classification.d.ts +57 -0
- package/dist/core/provider-error-classification.d.ts.map +1 -0
- package/dist/core/provider-error-classification.js +103 -0
- package/dist/core/provider-error-classification.js.map +1 -0
- package/dist/core/provider-resilience.d.ts +10 -0
- package/dist/core/provider-resilience.d.ts.map +1 -1
- package/dist/core/provider-resilience.js +36 -3
- package/dist/core/provider-resilience.js.map +1 -1
- package/dist/core/provider-usage-commandcode.d.ts +9 -0
- package/dist/core/provider-usage-commandcode.d.ts.map +1 -0
- package/dist/core/provider-usage-commandcode.js +198 -0
- package/dist/core/provider-usage-commandcode.js.map +1 -0
- package/dist/core/provider-usage-devin.d.ts +5 -3
- package/dist/core/provider-usage-devin.d.ts.map +1 -1
- package/dist/core/provider-usage-devin.js +15 -5
- package/dist/core/provider-usage-devin.js.map +1 -1
- package/dist/core/provider-usage-types.d.ts +1 -1
- package/dist/core/provider-usage-types.d.ts.map +1 -1
- package/dist/core/provider-usage-types.js.map +1 -1
- package/dist/core/provider-usage.d.ts.map +1 -1
- package/dist/core/provider-usage.js +6 -0
- package/dist/core/provider-usage.js.map +1 -1
- package/dist/core/reasoning-router-resolver.d.ts +7 -0
- package/dist/core/reasoning-router-resolver.d.ts.map +1 -1
- package/dist/core/reasoning-router-resolver.js +21 -3
- package/dist/core/reasoning-router-resolver.js.map +1 -1
- package/dist/core/reasoning-router-v4.d.ts +8 -5
- package/dist/core/reasoning-router-v4.d.ts.map +1 -1
- package/dist/core/reasoning-router-v4.js +8 -5
- package/dist/core/reasoning-router-v4.js.map +1 -1
- package/dist/core/resource-admission.d.ts +36 -0
- package/dist/core/resource-admission.d.ts.map +1 -1
- package/dist/core/resource-admission.js +59 -0
- package/dist/core/resource-admission.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +2 -2
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/run-usage-ledger.d.ts +47 -0
- package/dist/core/run-usage-ledger.d.ts.map +1 -0
- package/dist/core/run-usage-ledger.js +162 -0
- package/dist/core/run-usage-ledger.js.map +1 -0
- package/dist/core/run-usage-operation.d.ts +8 -0
- package/dist/core/run-usage-operation.d.ts.map +1 -0
- package/dist/core/run-usage-operation.js +12 -0
- package/dist/core/run-usage-operation.js.map +1 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +5 -6
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-compaction-service.d.ts +15 -0
- package/dist/core/session-compaction-service.d.ts.map +1 -1
- package/dist/core/session-compaction-service.js +17 -4
- package/dist/core/session-compaction-service.js.map +1 -1
- package/dist/core/session-failure-cause.d.ts.map +1 -1
- package/dist/core/session-failure-cause.js +14 -5
- package/dist/core/session-failure-cause.js.map +1 -1
- package/dist/core/session-prompt-lifecycle.d.ts +6 -0
- package/dist/core/session-prompt-lifecycle.d.ts.map +1 -1
- package/dist/core/session-prompt-lifecycle.js +47 -2
- package/dist/core/session-prompt-lifecycle.js.map +1 -1
- package/dist/core/session-termination.d.ts.map +1 -1
- package/dist/core/session-termination.js +4 -2
- package/dist/core/session-termination.js.map +1 -1
- package/dist/core/subagent-lane-authority.d.ts +28 -0
- package/dist/core/subagent-lane-authority.d.ts.map +1 -0
- package/dist/core/subagent-lane-authority.js +119 -0
- package/dist/core/subagent-lane-authority.js.map +1 -0
- package/dist/core/subagent-lane-contract.d.ts +114 -0
- package/dist/core/subagent-lane-contract.d.ts.map +1 -0
- package/dist/core/subagent-lane-contract.js +18 -0
- package/dist/core/subagent-lane-contract.js.map +1 -0
- package/dist/core/subagent-lane-launcher.d.ts +3 -6
- package/dist/core/subagent-lane-launcher.d.ts.map +1 -1
- package/dist/core/subagent-lane-launcher.js +53 -12
- package/dist/core/subagent-lane-launcher.js.map +1 -1
- package/dist/core/subagent-orchestration.d.ts +4 -17
- package/dist/core/subagent-orchestration.d.ts.map +1 -1
- package/dist/core/subagent-orchestration.js.map +1 -1
- package/dist/core/todo-runtime-state.d.ts +12 -0
- package/dist/core/todo-runtime-state.d.ts.map +1 -1
- package/dist/core/todo-runtime-state.js +23 -0
- package/dist/core/todo-runtime-state.js.map +1 -1
- package/dist/core/verified-run/broker.d.ts.map +1 -1
- package/dist/core/verified-run/broker.js +4 -1
- package/dist/core/verified-run/broker.js.map +1 -1
- package/dist/core/workload-permit-pool.d.ts +1 -1
- package/dist/core/workload-permit-pool.d.ts.map +1 -1
- package/dist/core/workload-permit-pool.js +3 -0
- package/dist/core/workload-permit-pool.js.map +1 -1
- package/dist/guardrails/strict-evidence-approval-adapter.d.ts +34 -0
- package/dist/guardrails/strict-evidence-approval-adapter.d.ts.map +1 -0
- package/dist/guardrails/strict-evidence-approval-adapter.js +70 -0
- package/dist/guardrails/strict-evidence-approval-adapter.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +11 -18
- package/dist/main.js.map +1 -1
- package/dist/metacognition/calibration-selective.d.ts +78 -0
- package/dist/metacognition/calibration-selective.d.ts.map +1 -0
- package/dist/metacognition/calibration-selective.js +161 -0
- package/dist/metacognition/calibration-selective.js.map +1 -0
- package/dist/metacognition/calibration.d.ts +62 -0
- package/dist/metacognition/calibration.d.ts.map +1 -0
- package/dist/metacognition/calibration.js +122 -0
- package/dist/metacognition/calibration.js.map +1 -0
- package/dist/metacognition/checkpoint.d.ts +60 -0
- package/dist/metacognition/checkpoint.d.ts.map +1 -0
- package/dist/metacognition/checkpoint.js +57 -0
- package/dist/metacognition/checkpoint.js.map +1 -0
- package/dist/metacognition/context7.d.ts +48 -0
- package/dist/metacognition/context7.d.ts.map +1 -0
- package/dist/metacognition/context7.js +154 -0
- package/dist/metacognition/context7.js.map +1 -0
- package/dist/metacognition/decision.d.ts +44 -0
- package/dist/metacognition/decision.d.ts.map +1 -0
- package/dist/metacognition/decision.js +111 -0
- package/dist/metacognition/decision.js.map +1 -0
- package/dist/metacognition/evaluation.d.ts +73 -0
- package/dist/metacognition/evaluation.d.ts.map +1 -0
- package/dist/metacognition/evaluation.js +97 -0
- package/dist/metacognition/evaluation.js.map +1 -0
- package/dist/metacognition/index.d.ts +31 -0
- package/dist/metacognition/index.d.ts.map +1 -0
- package/dist/metacognition/index.js +31 -0
- package/dist/metacognition/index.js.map +1 -0
- package/dist/metacognition/knowledge-action.d.ts +43 -0
- package/dist/metacognition/knowledge-action.d.ts.map +1 -0
- package/dist/metacognition/knowledge-action.js +60 -0
- package/dist/metacognition/knowledge-action.js.map +1 -0
- package/dist/metacognition/knowledge.d.ts +84 -0
- package/dist/metacognition/knowledge.d.ts.map +1 -0
- package/dist/metacognition/knowledge.js +165 -0
- package/dist/metacognition/knowledge.js.map +1 -0
- package/dist/metacognition/obligations.d.ts +82 -0
- package/dist/metacognition/obligations.d.ts.map +1 -0
- package/dist/metacognition/obligations.js +139 -0
- package/dist/metacognition/obligations.js.map +1 -0
- package/dist/metacognition/observation-validity.d.ts +83 -0
- package/dist/metacognition/observation-validity.d.ts.map +1 -0
- package/dist/metacognition/observation-validity.js +118 -0
- package/dist/metacognition/observation-validity.js.map +1 -0
- package/dist/metacognition/observe.d.ts +45 -0
- package/dist/metacognition/observe.d.ts.map +1 -0
- package/dist/metacognition/observe.js +59 -0
- package/dist/metacognition/observe.js.map +1 -0
- package/dist/metacognition/policy.d.ts +53 -0
- package/dist/metacognition/policy.d.ts.map +1 -0
- package/dist/metacognition/policy.js +155 -0
- package/dist/metacognition/policy.js.map +1 -0
- package/dist/metacognition/predictions.d.ts +78 -0
- package/dist/metacognition/predictions.d.ts.map +1 -0
- package/dist/metacognition/predictions.js +181 -0
- package/dist/metacognition/predictions.js.map +1 -0
- package/dist/metacognition/retrieval.d.ts +53 -0
- package/dist/metacognition/retrieval.d.ts.map +1 -0
- package/dist/metacognition/retrieval.js +170 -0
- package/dist/metacognition/retrieval.js.map +1 -0
- package/dist/metacognition/risk.d.ts +48 -0
- package/dist/metacognition/risk.d.ts.map +1 -0
- package/dist/metacognition/risk.js +165 -0
- package/dist/metacognition/risk.js.map +1 -0
- package/dist/metacognition/route-economics.d.ts +95 -0
- package/dist/metacognition/route-economics.d.ts.map +1 -0
- package/dist/metacognition/route-economics.js +110 -0
- package/dist/metacognition/route-economics.js.map +1 -0
- package/dist/metacognition/runtime-bridge.d.ts +54 -0
- package/dist/metacognition/runtime-bridge.d.ts.map +1 -0
- package/dist/metacognition/runtime-bridge.js +140 -0
- package/dist/metacognition/runtime-bridge.js.map +1 -0
- package/dist/metacognition/skills.d.ts +42 -0
- package/dist/metacognition/skills.d.ts.map +1 -0
- package/dist/metacognition/skills.js +220 -0
- package/dist/metacognition/skills.js.map +1 -0
- package/dist/metacognition/state.d.ts +110 -0
- package/dist/metacognition/state.d.ts.map +1 -0
- package/dist/metacognition/state.js +52 -0
- package/dist/metacognition/state.js.map +1 -0
- package/dist/metacognition/validation.d.ts +19 -0
- package/dist/metacognition/validation.d.ts.map +1 -0
- package/dist/metacognition/validation.js +58 -0
- package/dist/metacognition/validation.js.map +1 -0
- package/dist/metacognition/verification.d.ts +93 -0
- package/dist/metacognition/verification.d.ts.map +1 -0
- package/dist/metacognition/verification.js +132 -0
- package/dist/metacognition/verification.js.map +1 -0
- package/dist/metacognition/verifier.d.ts +49 -0
- package/dist/metacognition/verifier.d.ts.map +1 -0
- package/dist/metacognition/verifier.js +88 -0
- package/dist/metacognition/verifier.js.map +1 -0
- package/dist/modes/acp/acp-agent.d.ts +24 -0
- package/dist/modes/acp/acp-agent.d.ts.map +1 -0
- package/dist/modes/acp/acp-agent.js +133 -0
- package/dist/modes/acp/acp-agent.js.map +1 -0
- package/dist/modes/acp/acp-mode.d.ts +4 -0
- package/dist/modes/acp/acp-mode.d.ts.map +1 -0
- package/dist/modes/acp/acp-mode.js +34 -0
- package/dist/modes/acp/acp-mode.js.map +1 -0
- package/dist/modes/acp/acp-session.d.ts +4 -0
- package/dist/modes/acp/acp-session.d.ts.map +1 -0
- package/dist/modes/acp/acp-session.js +76 -0
- package/dist/modes/acp/acp-session.js.map +1 -0
- package/dist/modes/acp/acp-transport.d.ts +5 -0
- package/dist/modes/acp/acp-transport.d.ts.map +1 -0
- package/dist/modes/acp/acp-transport.js +90 -0
- package/dist/modes/acp/acp-transport.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/observation/identity.d.ts +14 -0
- package/dist/observation/identity.d.ts.map +1 -0
- package/dist/observation/identity.js +29 -0
- package/dist/observation/identity.js.map +1 -0
- package/dist/observation/index.d.ts +13 -0
- package/dist/observation/index.d.ts.map +1 -0
- package/dist/observation/index.js +13 -0
- package/dist/observation/index.js.map +1 -0
- package/dist/observation/observe-mode.d.ts +46 -0
- package/dist/observation/observe-mode.d.ts.map +1 -0
- package/dist/observation/observe-mode.js +83 -0
- package/dist/observation/observe-mode.js.map +1 -0
- package/dist/observation/store.d.ts +53 -0
- package/dist/observation/store.d.ts.map +1 -0
- package/dist/observation/store.js +126 -0
- package/dist/observation/store.js.map +1 -0
- package/dist/observation/types.d.ts +72 -0
- package/dist/observation/types.d.ts.map +1 -0
- package/dist/observation/types.js +9 -0
- package/dist/observation/types.js.map +1 -0
- package/dist/observation/view.d.ts +39 -0
- package/dist/observation/view.d.ts.map +1 -0
- package/dist/observation/view.js +173 -0
- package/dist/observation/view.js.map +1 -0
- package/docs/audit-revalidation-2026-09-17.md +77 -0
- package/docs/devin-harness.md +33 -4
- package/docs/ecraf-normalization.md +83 -0
- package/docs/metacognition.md +51 -0
- package/docs/model-catalog-refresh.md +110 -1
- package/docs/models.md +1 -1
- package/docs/neo.md +134 -0
- package/docs/providers.md +125 -6
- package/docs/run-usage-ledger.md +56 -0
- package/docs/runtime-algorithms.md +151 -3
- package/docs/skills.md +1 -1
- package/docs/usage.md +2 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/subagent/adaptive-agent-runtime.ts +14 -1
- package/examples/extensions/subagent/graph-result.ts +48 -0
- package/examples/extensions/subagent/index.ts +246 -111
- package/examples/extensions/subagent/managed-process-tree.ts +42 -0
- package/examples/extensions/subagent/managed-process.test.ts +24 -0
- package/examples/extensions/subagent/managed-process.ts +93 -112
- package/examples/extensions/subagent/subagent-runtime-types.ts +17 -1
- package/examples/extensions/subagent/subagent-stream.ts +161 -0
- package/examples/extensions/terminal-browser/README.md +54 -0
- package/examples/extensions/terminal-browser/bridge-protocol.ts +29 -0
- package/examples/extensions/terminal-browser/bridge.ts +219 -0
- package/examples/extensions/terminal-browser/browser-surface.ts +288 -0
- package/examples/extensions/terminal-browser/index.ts +215 -0
- package/examples/extensions/terminal-browser/placeholders.ts +49 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +18 -18
- package/package.json +8 -7
- package/resources/neo/skills/omk-browser/SKILL.md +32 -0
- package/resources/neo/skills/omk-code-review/SKILL.md +24 -0
- package/resources/neo/skills/omk-computeruse/SKILL.md +34 -0
- package/resources/neo/skills/omk-mcp-setup/SKILL.md +48 -0
- package/resources/neo/skills/omk-research/SKILL.md +24 -0
- package/resources/neo/skills/omk-site/SKILL.md +28 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp-agent.js","sourceRoot":"","sources":["../../../src/modes/acp/acp-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,OAAO,QAAS,SAAQ,KAAK;IACzB,IAAI,CAAS;IACtB,YAAY,IAAY,EAAE,OAAe,EAAE;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAAA,CACjB;CACD;AAYD,SAAS,MAAM,CAAC,KAAc,EAA2B;IACxD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAC/G,OAAO,KAAgC,CAAC;AAAA,CACxC;AAED,SAAS,UAAU,CAAC,KAAc,EAAU;IAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;IACxG,OAAO,KAAK;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC;QAC/E,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvG,iEAAiE;YACjE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC;IAAA,CACzD,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACb;AAED,kGAAkG;AAClG,MAAM,OAAO,QAAQ;IACZ,WAAW,GAAG,KAAK,CAAC;IACpB,MAAM,GAAG,KAAK,CAAC;IACf,QAAQ,GAAG,CAAC,CAAC;IACJ,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE3C,aAAa,CAAoB;IACjC,OAAO,CAAS;IAChB,MAAM,CAA4B;IACnD,YAAY,aAAgC,EAAE,OAAe,EAAE,MAAiC,EAAE;QACjG,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAAA,CACrB;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,SAAkB,EAAmB;QACnE,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;YACxE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzF,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;YACvD,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,OAAO;gBACN,eAAe,EAAE,CAAC;gBAClB,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;gBAC/D,iBAAiB,EAAE;oBAClB,WAAW,EAAE,KAAK;oBAClB,kBAAkB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE;oBAC1E,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;oBAC5C,KAAK,EAAE,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,KAAK,EAAE;iBACtE;gBACD,WAAW,EAAE,EAAE;aACf,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACtE,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;YAC9B,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC5D,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzE,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,2DAA2D,CAAC,CAAC;YACzF,CAAC;YACD,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS;gBAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;YAC3G,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC;gBAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;YACjG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC;gBACJ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBACjB,OAAO,CAAC,OAAO,EAAE,CAAC;oBAClB,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;gBACjD,CAAC;gBACD,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;gBAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC1D,OAAO,EAAE,SAAS,EAAE,CAAC;YACtB,CAAC;oBAAS,CAAC;gBACV,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjB,CAAC;QACF,CAAC;QACD,IAAI,MAAM,KAAK,gBAAgB,IAAI,MAAM,KAAK,gBAAgB;YAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QAC/G,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrG,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAC1D,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;YACjC,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC;QACX,CAAC;QACD,IAAI,KAAK,CAAC,OAAO;YAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC;YACJ,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAC7D,IAAI,CAAC,MAAM,CAAC;gBACX,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,gBAAgB;gBACxB,MAAM,EAAE;oBACP,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,MAAM,EAAE,EAAE,aAAa,EAAE,qBAAqB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;iBACxF;aACD,CAAC,CACF,CAAC;YACF,OAAO,EAAE,UAAU,EAAE,CAAC;QACvB,CAAC;gBAAS,CAAC;YACV,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC;IAAA,CACD;IAED,KAAK,CAAC,KAAK,GAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,OAAO,CAAC,GAAG,CAChB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACtD,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC;QAAA,CACjB,CAAC,CACF,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAAA,CACtB;CACD","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { isAbsolute } from \"node:path\";\n\nexport class AcpError extends Error {\n\treadonly code: number;\n\tconstructor(code: number, message: string) {\n\t\tsuper(message);\n\t\tthis.code = code;\n\t}\n}\n\nexport interface AcpSession {\n\tprompt(text: string, emit: (text: string) => void): Promise<\"end_turn\" | \"cancelled\" | \"max_tokens\">;\n\tcancel(): Promise<void>;\n\tdispose(): void;\n}\n\nexport type AcpSessionFactory = (cwd: string) => Promise<AcpSession>;\n\ntype SessionState = { session: AcpSession; running: boolean };\n\nfunction object(value: unknown): Record<string, unknown> {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) throw new AcpError(-32602, \"Expected object\");\n\treturn value as Record<string, unknown>;\n}\n\nfunction promptText(value: unknown): string {\n\tif (!Array.isArray(value) || value.length === 0) throw new AcpError(-32602, \"Expected nonempty prompt\");\n\treturn value\n\t\t.map((item) => {\n\t\t\tconst block = object(item);\n\t\t\tif (block.type === \"text\" && typeof block.text === \"string\") return block.text;\n\t\t\tif (block.type === \"resource_link\" && typeof block.uri === \"string\" && typeof block.name === \"string\") {\n\t\t\t\t// Links are context, never permission to retrieve files or URLs.\n\t\t\t\treturn JSON.stringify({ resource_link: { name: block.name, uri: block.uri } });\n\t\t\t}\n\t\t\tthrow new AcpError(-32602, \"Unsupported prompt content\");\n\t\t})\n\t\t.join(\"\\n\");\n}\n\n/** Restricted ACP v1 conversation profile. Does not grant tools or launch client MCP commands. */\nexport class AcpAgent {\n\tprivate initialized = false;\n\tprivate closed = false;\n\tprivate creating = 0;\n\tprivate readonly sessions = new Map<string, SessionState>();\n\n\tprivate readonly createSession: AcpSessionFactory;\n\tprivate readonly version: string;\n\tprivate readonly notify: (message: object) => void;\n\tconstructor(createSession: AcpSessionFactory, version: string, notify: (message: object) => void) {\n\t\tthis.createSession = createSession;\n\t\tthis.version = version;\n\t\tthis.notify = notify;\n\t}\n\n\tasync dispatch(method: string, rawParams: unknown): Promise<object> {\n\t\tif (this.closed) throw new AcpError(-32000, \"Connection closed\");\n\t\tconst params = object(rawParams);\n\t\tif (method === \"initialize\") {\n\t\t\tif (this.initialized) throw new AcpError(-32600, \"Already initialized\");\n\t\t\tif (!Number.isSafeInteger(params.protocolVersion) || Number(params.protocolVersion) < 1) {\n\t\t\t\tthrow new AcpError(-32602, \"Invalid protocolVersion\");\n\t\t\t}\n\t\t\tthis.initialized = true;\n\t\t\treturn {\n\t\t\t\tprotocolVersion: 1,\n\t\t\t\tagentInfo: { name: \"omk\", title: \"OMK\", version: this.version },\n\t\t\t\tagentCapabilities: {\n\t\t\t\t\tloadSession: false,\n\t\t\t\t\tpromptCapabilities: { image: false, audio: false, embeddedContext: false },\n\t\t\t\t\tmcpCapabilities: { http: false, sse: false },\n\t\t\t\t\t_meta: { \"omk/profile\": \"conversation-only\", \"omk/client-mcp\": false },\n\t\t\t\t},\n\t\t\t\tauthMethods: [],\n\t\t\t};\n\t\t}\n\t\tif (!this.initialized) throw new AcpError(-32000, \"Initialize first\");\n\t\tif (method === \"session/new\") {\n\t\t\tif (typeof params.cwd !== \"string\" || !isAbsolute(params.cwd))\n\t\t\t\tthrow new AcpError(-32602, \"cwd must be absolute\");\n\t\t\tif (!Array.isArray(params.mcpServers) || params.mcpServers.length !== 0) {\n\t\t\t\tthrow new AcpError(-32602, \"This restricted profile requires an empty mcpServers list\");\n\t\t\t}\n\t\t\tif (params.additionalDirectories !== undefined) throw new AcpError(-32602, \"Additional roots unsupported\");\n\t\t\tif (this.sessions.size + this.creating >= 8) throw new AcpError(-32000, \"Session limit reached\");\n\t\t\tthis.creating++;\n\t\t\ttry {\n\t\t\t\tconst session = await this.createSession(params.cwd);\n\t\t\t\tif (this.closed) {\n\t\t\t\t\tsession.dispose();\n\t\t\t\t\tthrow new AcpError(-32000, \"Connection closed\");\n\t\t\t\t}\n\t\t\t\tconst sessionId = randomUUID();\n\t\t\t\tthis.sessions.set(sessionId, { session, running: false });\n\t\t\t\treturn { sessionId };\n\t\t\t} finally {\n\t\t\t\tthis.creating--;\n\t\t\t}\n\t\t}\n\t\tif (method !== \"session/prompt\" && method !== \"session/cancel\") throw new AcpError(-32601, \"Method not found\");\n\t\tconst state = typeof params.sessionId === \"string\" ? this.sessions.get(params.sessionId) : undefined;\n\t\tif (!state) throw new AcpError(-32602, \"Unknown session\");\n\t\tif (method === \"session/cancel\") {\n\t\t\tawait state.session.cancel();\n\t\t\treturn {};\n\t\t}\n\t\tif (state.running) throw new AcpError(-32000, \"Session busy\");\n\t\tconst text = promptText(params.prompt);\n\t\tstate.running = true;\n\t\ttry {\n\t\t\tconst stopReason = await state.session.prompt(text, (delta) =>\n\t\t\t\tthis.notify({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tmethod: \"session/update\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tsessionId: params.sessionId,\n\t\t\t\t\t\tupdate: { sessionUpdate: \"agent_message_chunk\", content: { type: \"text\", text: delta } },\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn { stopReason };\n\t\t} finally {\n\t\t\tstate.running = false;\n\t\t}\n\t}\n\n\tasync close(): Promise<void> {\n\t\tthis.closed = true;\n\t\tawait Promise.all(\n\t\t\t[...this.sessions.values()].map(async ({ session }) => {\n\t\t\t\tawait session.cancel();\n\t\t\t\tsession.dispose();\n\t\t\t\treturn undefined;\n\t\t\t}),\n\t\t);\n\t\tthis.sessions.clear();\n\t}\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp-mode.d.ts","sourceRoot":"","sources":["../../../src/modes/acp/acp-mode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAM9C,2GAA2G;AAC3G,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC1D","sourcesContent":["import type { Args } from \"../../cli/args.ts\";\nimport { VERSION } from \"../../config.ts\";\nimport { flushRawStdout, takeOverStdout, writeRawStdout } from \"../../core/output-guard.ts\";\nimport { createAcpSession } from \"./acp-session.ts\";\nimport { serveAcp } from \"./acp-transport.ts\";\n\n/** Start before session/resource discovery so initialization requires no credentials or provider calls. */\nexport async function runAcpMode(args: Args): Promise<void> {\n\tif (\n\t\targs.messages.length ||\n\t\targs.fileArgs.length ||\n\t\targs.print ||\n\t\targs.session ||\n\t\targs.resume ||\n\t\targs.continue ||\n\t\targs.fork ||\n\t\targs.sessionId ||\n\t\targs.extensions?.length ||\n\t\targs.tools?.length ||\n\t\targs.apiKey ||\n\t\targs.modelContractFile\n\t) {\n\t\tthrow new Error(\"ACP conversation mode accepts --model/--provider/--thinking; prompts arrive via session/prompt\");\n\t}\n\ttakeOverStdout();\n\tconst stop = () => process.stdin.destroy();\n\tprocess.once(\"SIGINT\", stop);\n\tprocess.once(\"SIGTERM\", stop);\n\ttry {\n\t\tawait serveAcp(\n\t\t\tprocess.stdin,\n\t\t\t(message) => writeRawStdout(`${JSON.stringify(message)}\\n`),\n\t\t\t(cwd) => createAcpSession(cwd, args),\n\t\t\tVERSION,\n\t\t);\n\t\tawait flushRawStdout();\n\t} finally {\n\t\tprocess.off(\"SIGINT\", stop);\n\t\tprocess.off(\"SIGTERM\", stop);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { VERSION } from "../../config.js";
|
|
2
|
+
import { flushRawStdout, takeOverStdout, writeRawStdout } from "../../core/output-guard.js";
|
|
3
|
+
import { createAcpSession } from "./acp-session.js";
|
|
4
|
+
import { serveAcp } from "./acp-transport.js";
|
|
5
|
+
/** Start before session/resource discovery so initialization requires no credentials or provider calls. */
|
|
6
|
+
export async function runAcpMode(args) {
|
|
7
|
+
if (args.messages.length ||
|
|
8
|
+
args.fileArgs.length ||
|
|
9
|
+
args.print ||
|
|
10
|
+
args.session ||
|
|
11
|
+
args.resume ||
|
|
12
|
+
args.continue ||
|
|
13
|
+
args.fork ||
|
|
14
|
+
args.sessionId ||
|
|
15
|
+
args.extensions?.length ||
|
|
16
|
+
args.tools?.length ||
|
|
17
|
+
args.apiKey ||
|
|
18
|
+
args.modelContractFile) {
|
|
19
|
+
throw new Error("ACP conversation mode accepts --model/--provider/--thinking; prompts arrive via session/prompt");
|
|
20
|
+
}
|
|
21
|
+
takeOverStdout();
|
|
22
|
+
const stop = () => process.stdin.destroy();
|
|
23
|
+
process.once("SIGINT", stop);
|
|
24
|
+
process.once("SIGTERM", stop);
|
|
25
|
+
try {
|
|
26
|
+
await serveAcp(process.stdin, (message) => writeRawStdout(`${JSON.stringify(message)}\n`), (cwd) => createAcpSession(cwd, args), VERSION);
|
|
27
|
+
await flushRawStdout();
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
process.off("SIGINT", stop);
|
|
31
|
+
process.off("SIGTERM", stop);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=acp-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp-mode.js","sourceRoot":"","sources":["../../../src/modes/acp/acp-mode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,2GAA2G;AAC3G,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAU,EAAiB;IAC3D,IACC,IAAI,CAAC,QAAQ,CAAC,MAAM;QACpB,IAAI,CAAC,QAAQ,CAAC,MAAM;QACpB,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,UAAU,EAAE,MAAM;QACvB,IAAI,CAAC,KAAK,EAAE,MAAM;QAClB,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,iBAAiB,EACrB,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;IACnH,CAAC;IACD,cAAc,EAAE,CAAC;IACjB,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC;QACJ,MAAM,QAAQ,CACb,OAAO,CAAC,KAAK,EACb,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAC3D,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,EACpC,OAAO,CACP,CAAC;QACF,MAAM,cAAc,EAAE,CAAC;IACxB,CAAC;YAAS,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;AAAA,CACD","sourcesContent":["import type { Args } from \"../../cli/args.ts\";\nimport { VERSION } from \"../../config.ts\";\nimport { flushRawStdout, takeOverStdout, writeRawStdout } from \"../../core/output-guard.ts\";\nimport { createAcpSession } from \"./acp-session.ts\";\nimport { serveAcp } from \"./acp-transport.ts\";\n\n/** Start before session/resource discovery so initialization requires no credentials or provider calls. */\nexport async function runAcpMode(args: Args): Promise<void> {\n\tif (\n\t\targs.messages.length ||\n\t\targs.fileArgs.length ||\n\t\targs.print ||\n\t\targs.session ||\n\t\targs.resume ||\n\t\targs.continue ||\n\t\targs.fork ||\n\t\targs.sessionId ||\n\t\targs.extensions?.length ||\n\t\targs.tools?.length ||\n\t\targs.apiKey ||\n\t\targs.modelContractFile\n\t) {\n\t\tthrow new Error(\"ACP conversation mode accepts --model/--provider/--thinking; prompts arrive via session/prompt\");\n\t}\n\ttakeOverStdout();\n\tconst stop = () => process.stdin.destroy();\n\tprocess.once(\"SIGINT\", stop);\n\tprocess.once(\"SIGTERM\", stop);\n\ttry {\n\t\tawait serveAcp(\n\t\t\tprocess.stdin,\n\t\t\t(message) => writeRawStdout(`${JSON.stringify(message)}\\n`),\n\t\t\t(cwd) => createAcpSession(cwd, args),\n\t\t\tVERSION,\n\t\t);\n\t\tawait flushRawStdout();\n\t} finally {\n\t\tprocess.off(\"SIGINT\", stop);\n\t\tprocess.off(\"SIGTERM\", stop);\n\t}\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp-session.d.ts","sourceRoot":"","sources":["../../../src/modes/acp/acp-session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAU9C,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkB3D,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CA4CnF","sourcesContent":["import { stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { Args } from \"../../cli/args.ts\";\nimport { getAgentDir } from \"../../config.ts\";\nimport { AuthStorage } from \"../../core/auth-storage.ts\";\nimport { createExtensionRuntime } from \"../../core/extensions/loader.ts\";\nimport { ModelRegistry } from \"../../core/model-registry.ts\";\nimport { resolveCliModel } from \"../../core/model-resolver.ts\";\nimport type { ResourceLoader } from \"../../core/resource-loader.ts\";\nimport { createAgentSession } from \"../../core/sdk.ts\";\nimport { SessionManager } from \"../../core/session-manager.ts\";\nimport { SettingsManager } from \"../../core/settings-manager.ts\";\nimport { AcpError, type AcpSession } from \"./acp-agent.ts\";\n\n/** No discovery or client-requested executables in the restricted ACP profile. */\nfunction emptyResources(): ResourceLoader {\n\treturn {\n\t\tgetExtensions: () => ({ extensions: [], errors: [], runtime: createExtensionRuntime() }),\n\t\tgetSkills: () => ({ skills: [], diagnostics: [] }),\n\t\tgetPrompts: () => ({ prompts: [], diagnostics: [] }),\n\t\tgetThemes: () => ({ themes: [], diagnostics: [] }),\n\t\tgetAgentsFiles: () => ({ agentsFiles: [] }),\n\t\tgetSystemPrompt: () =>\n\t\t\t\"You are OMK, a conversational coding assistant. No tools are available in this ACP profile.\",\n\t\tgetAppendSystemPrompt: () => [],\n\t\textendResources: () => {},\n\t\treload: async () => {},\n\t};\n}\n\nexport async function createAcpSession(cwd: string, args: Args): Promise<AcpSession> {\n\tif (!(await stat(cwd)).isDirectory()) throw new AcpError(-32602, \"cwd must be a directory\");\n\tconst agentDir = getAgentDir();\n\tconst authStorage = AuthStorage.create(join(agentDir, \"auth.json\"));\n\tconst modelRegistry = ModelRegistry.create(authStorage, join(agentDir, \"models.json\"));\n\tconst selected = resolveCliModel({ cliModel: args.model, cliProvider: args.provider, modelRegistry });\n\tif (selected.error) throw new AcpError(-32602, \"Model selection failed; check --model and --provider\");\n\tconst model =\n\t\tselected.model ?? modelRegistry.getAvailable().find((m) => !args.provider || m.provider === args.provider);\n\tif (!model) throw new AcpError(-32000, \"No model available; configure credentials using omk /login first\");\n\tconst { session } = await createAgentSession({\n\t\tcwd,\n\t\tagentDir,\n\t\tauthStorage,\n\t\tmodelRegistry,\n\t\tmodel,\n\t\tmodelPinned: true,\n\t\tthinkingLevel: args.thinking ?? selected.thinkingLevel,\n\t\ttools: [],\n\t\tnoTools: \"all\",\n\t\tresourceLoader: emptyResources(),\n\t\tsessionManager: SessionManager.inMemory(cwd),\n\t\tsettingsManager: SettingsManager.inMemory({ retry: { enabled: false } }),\n\t});\n\treturn {\n\t\tasync prompt(text, emit) {\n\t\t\tconst unsubscribe = session.subscribe((event) => {\n\t\t\t\tif (event.type === \"message_update\" && event.assistantMessageEvent.type === \"text_delta\") {\n\t\t\t\t\temit(event.assistantMessageEvent.delta);\n\t\t\t\t}\n\t\t\t});\n\t\t\ttry {\n\t\t\t\tawait session.prompt(text, { source: \"rpc\", expandPromptTemplates: false });\n\t\t\t\tconst kind = session.lastTermination?.kind;\n\t\t\t\tif (kind === \"user_abort\" || kind === \"provider_abort\") return \"cancelled\";\n\t\t\t\tif (kind !== \"completed\") throw new AcpError(-32603, \"Prompt did not complete successfully\");\n\t\t\t\treturn \"end_turn\";\n\t\t\t} finally {\n\t\t\t\tunsubscribe();\n\t\t\t}\n\t\t},\n\t\tcancel: () => session.abort(),\n\t\tdispose: () => session.dispose(),\n\t};\n}\n"]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { stat } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { getAgentDir } from "../../config.js";
|
|
4
|
+
import { AuthStorage } from "../../core/auth-storage.js";
|
|
5
|
+
import { createExtensionRuntime } from "../../core/extensions/loader.js";
|
|
6
|
+
import { ModelRegistry } from "../../core/model-registry.js";
|
|
7
|
+
import { resolveCliModel } from "../../core/model-resolver.js";
|
|
8
|
+
import { createAgentSession } from "../../core/sdk.js";
|
|
9
|
+
import { SessionManager } from "../../core/session-manager.js";
|
|
10
|
+
import { SettingsManager } from "../../core/settings-manager.js";
|
|
11
|
+
import { AcpError } from "./acp-agent.js";
|
|
12
|
+
/** No discovery or client-requested executables in the restricted ACP profile. */
|
|
13
|
+
function emptyResources() {
|
|
14
|
+
return {
|
|
15
|
+
getExtensions: () => ({ extensions: [], errors: [], runtime: createExtensionRuntime() }),
|
|
16
|
+
getSkills: () => ({ skills: [], diagnostics: [] }),
|
|
17
|
+
getPrompts: () => ({ prompts: [], diagnostics: [] }),
|
|
18
|
+
getThemes: () => ({ themes: [], diagnostics: [] }),
|
|
19
|
+
getAgentsFiles: () => ({ agentsFiles: [] }),
|
|
20
|
+
getSystemPrompt: () => "You are OMK, a conversational coding assistant. No tools are available in this ACP profile.",
|
|
21
|
+
getAppendSystemPrompt: () => [],
|
|
22
|
+
extendResources: () => { },
|
|
23
|
+
reload: async () => { },
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export async function createAcpSession(cwd, args) {
|
|
27
|
+
if (!(await stat(cwd)).isDirectory())
|
|
28
|
+
throw new AcpError(-32602, "cwd must be a directory");
|
|
29
|
+
const agentDir = getAgentDir();
|
|
30
|
+
const authStorage = AuthStorage.create(join(agentDir, "auth.json"));
|
|
31
|
+
const modelRegistry = ModelRegistry.create(authStorage, join(agentDir, "models.json"));
|
|
32
|
+
const selected = resolveCliModel({ cliModel: args.model, cliProvider: args.provider, modelRegistry });
|
|
33
|
+
if (selected.error)
|
|
34
|
+
throw new AcpError(-32602, "Model selection failed; check --model and --provider");
|
|
35
|
+
const model = selected.model ?? modelRegistry.getAvailable().find((m) => !args.provider || m.provider === args.provider);
|
|
36
|
+
if (!model)
|
|
37
|
+
throw new AcpError(-32000, "No model available; configure credentials using omk /login first");
|
|
38
|
+
const { session } = await createAgentSession({
|
|
39
|
+
cwd,
|
|
40
|
+
agentDir,
|
|
41
|
+
authStorage,
|
|
42
|
+
modelRegistry,
|
|
43
|
+
model,
|
|
44
|
+
modelPinned: true,
|
|
45
|
+
thinkingLevel: args.thinking ?? selected.thinkingLevel,
|
|
46
|
+
tools: [],
|
|
47
|
+
noTools: "all",
|
|
48
|
+
resourceLoader: emptyResources(),
|
|
49
|
+
sessionManager: SessionManager.inMemory(cwd),
|
|
50
|
+
settingsManager: SettingsManager.inMemory({ retry: { enabled: false } }),
|
|
51
|
+
});
|
|
52
|
+
return {
|
|
53
|
+
async prompt(text, emit) {
|
|
54
|
+
const unsubscribe = session.subscribe((event) => {
|
|
55
|
+
if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
56
|
+
emit(event.assistantMessageEvent.delta);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
try {
|
|
60
|
+
await session.prompt(text, { source: "rpc", expandPromptTemplates: false });
|
|
61
|
+
const kind = session.lastTermination?.kind;
|
|
62
|
+
if (kind === "user_abort" || kind === "provider_abort")
|
|
63
|
+
return "cancelled";
|
|
64
|
+
if (kind !== "completed")
|
|
65
|
+
throw new AcpError(-32603, "Prompt did not complete successfully");
|
|
66
|
+
return "end_turn";
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
unsubscribe();
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
cancel: () => session.abort(),
|
|
73
|
+
dispose: () => session.dispose(),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=acp-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp-session.js","sourceRoot":"","sources":["../../../src/modes/acp/acp-session.ts"],"names":[],"mappings":"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","sourcesContent":["import { stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { Args } from \"../../cli/args.ts\";\nimport { getAgentDir } from \"../../config.ts\";\nimport { AuthStorage } from \"../../core/auth-storage.ts\";\nimport { createExtensionRuntime } from \"../../core/extensions/loader.ts\";\nimport { ModelRegistry } from \"../../core/model-registry.ts\";\nimport { resolveCliModel } from \"../../core/model-resolver.ts\";\nimport type { ResourceLoader } from \"../../core/resource-loader.ts\";\nimport { createAgentSession } from \"../../core/sdk.ts\";\nimport { SessionManager } from \"../../core/session-manager.ts\";\nimport { SettingsManager } from \"../../core/settings-manager.ts\";\nimport { AcpError, type AcpSession } from \"./acp-agent.ts\";\n\n/** No discovery or client-requested executables in the restricted ACP profile. */\nfunction emptyResources(): ResourceLoader {\n\treturn {\n\t\tgetExtensions: () => ({ extensions: [], errors: [], runtime: createExtensionRuntime() }),\n\t\tgetSkills: () => ({ skills: [], diagnostics: [] }),\n\t\tgetPrompts: () => ({ prompts: [], diagnostics: [] }),\n\t\tgetThemes: () => ({ themes: [], diagnostics: [] }),\n\t\tgetAgentsFiles: () => ({ agentsFiles: [] }),\n\t\tgetSystemPrompt: () =>\n\t\t\t\"You are OMK, a conversational coding assistant. No tools are available in this ACP profile.\",\n\t\tgetAppendSystemPrompt: () => [],\n\t\textendResources: () => {},\n\t\treload: async () => {},\n\t};\n}\n\nexport async function createAcpSession(cwd: string, args: Args): Promise<AcpSession> {\n\tif (!(await stat(cwd)).isDirectory()) throw new AcpError(-32602, \"cwd must be a directory\");\n\tconst agentDir = getAgentDir();\n\tconst authStorage = AuthStorage.create(join(agentDir, \"auth.json\"));\n\tconst modelRegistry = ModelRegistry.create(authStorage, join(agentDir, \"models.json\"));\n\tconst selected = resolveCliModel({ cliModel: args.model, cliProvider: args.provider, modelRegistry });\n\tif (selected.error) throw new AcpError(-32602, \"Model selection failed; check --model and --provider\");\n\tconst model =\n\t\tselected.model ?? modelRegistry.getAvailable().find((m) => !args.provider || m.provider === args.provider);\n\tif (!model) throw new AcpError(-32000, \"No model available; configure credentials using omk /login first\");\n\tconst { session } = await createAgentSession({\n\t\tcwd,\n\t\tagentDir,\n\t\tauthStorage,\n\t\tmodelRegistry,\n\t\tmodel,\n\t\tmodelPinned: true,\n\t\tthinkingLevel: args.thinking ?? selected.thinkingLevel,\n\t\ttools: [],\n\t\tnoTools: \"all\",\n\t\tresourceLoader: emptyResources(),\n\t\tsessionManager: SessionManager.inMemory(cwd),\n\t\tsettingsManager: SettingsManager.inMemory({ retry: { enabled: false } }),\n\t});\n\treturn {\n\t\tasync prompt(text, emit) {\n\t\t\tconst unsubscribe = session.subscribe((event) => {\n\t\t\t\tif (event.type === \"message_update\" && event.assistantMessageEvent.type === \"text_delta\") {\n\t\t\t\t\temit(event.assistantMessageEvent.delta);\n\t\t\t\t}\n\t\t\t});\n\t\t\ttry {\n\t\t\t\tawait session.prompt(text, { source: \"rpc\", expandPromptTemplates: false });\n\t\t\t\tconst kind = session.lastTermination?.kind;\n\t\t\t\tif (kind === \"user_abort\" || kind === \"provider_abort\") return \"cancelled\";\n\t\t\t\tif (kind !== \"completed\") throw new AcpError(-32603, \"Prompt did not complete successfully\");\n\t\t\t\treturn \"end_turn\";\n\t\t\t} finally {\n\t\t\t\tunsubscribe();\n\t\t\t}\n\t\t},\n\t\tcancel: () => session.abort(),\n\t\tdispose: () => session.dispose(),\n\t};\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Readable } from "node:stream";
|
|
2
|
+
import { type AcpSessionFactory } from "./acp-agent.ts";
|
|
3
|
+
/** LF-only JSON-RPC transport, bounded per frame and in-flight request set. */
|
|
4
|
+
export declare function serveAcp(input: Readable, output: (message: object) => void, createSession: AcpSessionFactory, version: string): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=acp-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp-transport.d.ts","sourceRoot":"","sources":["../../../src/modes/acp/acp-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE5E,+EAA+E;AAC/E,wBAAsB,QAAQ,CAC7B,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACjC,aAAa,EAAE,iBAAiB,EAChC,OAAO,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAsFf","sourcesContent":["import type { Readable } from \"node:stream\";\nimport { StringDecoder } from \"node:string_decoder\";\nimport { AcpAgent, AcpError, type AcpSessionFactory } from \"./acp-agent.ts\";\n\n/** LF-only JSON-RPC transport, bounded per frame and in-flight request set. */\nexport async function serveAcp(\n\tinput: Readable,\n\toutput: (message: object) => void,\n\tcreateSession: AcpSessionFactory,\n\tversion: string,\n): Promise<void> {\n\tconst agent = new AcpAgent(createSession, version, output);\n\tconst pending = new Set<Promise<void>>();\n\tconst ids = new Set<string | number>();\n\tconst decoder = new StringDecoder(\"utf8\");\n\tlet buffer = \"\";\n\tconst maxBytes = 1024 * 1024;\n\tconst fail = (id: unknown, code: number, message: string) =>\n\t\toutput({ jsonrpc: \"2.0\", id, error: { code, message } });\n\tconst receive = (line: string): void => {\n\t\tlet raw: unknown;\n\t\ttry {\n\t\t\traw = JSON.parse(line);\n\t\t} catch {\n\t\t\tfail(null, -32700, \"Parse error\");\n\t\t\treturn;\n\t\t}\n\t\tif (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n\t\t\tfail(null, -32600, \"Invalid request\");\n\t\t\treturn;\n\t\t}\n\t\tconst request = raw as Record<string, unknown>;\n\t\tconst id = request.id;\n\t\tconst hasId = Object.hasOwn(request, \"id\");\n\t\tconst validId = typeof id === \"string\" || (typeof id === \"number\" && Number.isSafeInteger(id));\n\t\tif (request.jsonrpc !== \"2.0\" || typeof request.method !== \"string\" || (hasId && !validId)) {\n\t\t\tfail(validId ? id : null, -32600, \"Invalid request\");\n\t\t\treturn;\n\t\t}\n\t\t// Only cancellation is a notification. No session creation/provider call without a response ID.\n\t\tif (!hasId && request.method !== \"session/cancel\") return;\n\t\tif (hasId && validId && ids.has(id)) {\n\t\t\tfail(id, -32600, \"Duplicate in-flight id\");\n\t\t\treturn;\n\t\t}\n\t\tif (pending.size >= 32) {\n\t\t\tif (hasId) fail(id, -32000, \"Request limit reached\");\n\t\t\treturn;\n\t\t}\n\t\tif (validId) ids.add(id);\n\t\tconst work = agent\n\t\t\t.dispatch(request.method, request.params ?? {})\n\t\t\t.then(\n\t\t\t\t(result) => {\n\t\t\t\t\tif (hasId) output({ jsonrpc: \"2.0\", id, result });\n\t\t\t\t},\n\t\t\t\t(error: unknown) => {\n\t\t\t\t\tif (hasId)\n\t\t\t\t\t\tfail(\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\terror instanceof AcpError ? error.code : -32603,\n\t\t\t\t\t\t\terror instanceof AcpError ? error.message : \"Agent operation failed\",\n\t\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t)\n\t\t\t.finally(() => {\n\t\t\t\tpending.delete(work);\n\t\t\t\tif (validId) ids.delete(id);\n\t\t\t});\n\t\tpending.add(work);\n\t};\n\ttry {\n\t\tfor await (const chunk of input) {\n\t\t\tbuffer += typeof chunk === \"string\" ? chunk : decoder.write(chunk);\n\t\t\tlet newline = buffer.indexOf(\"\\n\");\n\t\t\twhile (newline !== -1) {\n\t\t\t\tconst line = buffer.slice(0, newline);\n\t\t\t\tif (Buffer.byteLength(line) > maxBytes) throw new AcpError(-32600, \"Frame too large\");\n\t\t\t\treceive(line);\n\t\t\t\tbuffer = buffer.slice(newline + 1);\n\t\t\t\tnewline = buffer.indexOf(\"\\n\");\n\t\t\t}\n\t\t\tif (Buffer.byteLength(buffer) > maxBytes) throw new AcpError(-32600, \"Frame too large\");\n\t\t}\n\t\tbuffer += decoder.end();\n\t\tif (buffer.trim()) fail(null, -32700, \"Incomplete JSONL frame\");\n\t} catch (error) {\n\t\tfail(\n\t\t\tnull,\n\t\t\terror instanceof AcpError ? error.code : -32603,\n\t\t\terror instanceof AcpError ? error.message : \"Transport failed\",\n\t\t);\n\t} finally {\n\t\tawait agent.close();\n\t\tawait Promise.all(pending);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { StringDecoder } from "node:string_decoder";
|
|
2
|
+
import { AcpAgent, AcpError } from "./acp-agent.js";
|
|
3
|
+
/** LF-only JSON-RPC transport, bounded per frame and in-flight request set. */
|
|
4
|
+
export async function serveAcp(input, output, createSession, version) {
|
|
5
|
+
const agent = new AcpAgent(createSession, version, output);
|
|
6
|
+
const pending = new Set();
|
|
7
|
+
const ids = new Set();
|
|
8
|
+
const decoder = new StringDecoder("utf8");
|
|
9
|
+
let buffer = "";
|
|
10
|
+
const maxBytes = 1024 * 1024;
|
|
11
|
+
const fail = (id, code, message) => output({ jsonrpc: "2.0", id, error: { code, message } });
|
|
12
|
+
const receive = (line) => {
|
|
13
|
+
let raw;
|
|
14
|
+
try {
|
|
15
|
+
raw = JSON.parse(line);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
fail(null, -32700, "Parse error");
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
|
|
22
|
+
fail(null, -32600, "Invalid request");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const request = raw;
|
|
26
|
+
const id = request.id;
|
|
27
|
+
const hasId = Object.hasOwn(request, "id");
|
|
28
|
+
const validId = typeof id === "string" || (typeof id === "number" && Number.isSafeInteger(id));
|
|
29
|
+
if (request.jsonrpc !== "2.0" || typeof request.method !== "string" || (hasId && !validId)) {
|
|
30
|
+
fail(validId ? id : null, -32600, "Invalid request");
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
// Only cancellation is a notification. No session creation/provider call without a response ID.
|
|
34
|
+
if (!hasId && request.method !== "session/cancel")
|
|
35
|
+
return;
|
|
36
|
+
if (hasId && validId && ids.has(id)) {
|
|
37
|
+
fail(id, -32600, "Duplicate in-flight id");
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (pending.size >= 32) {
|
|
41
|
+
if (hasId)
|
|
42
|
+
fail(id, -32000, "Request limit reached");
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (validId)
|
|
46
|
+
ids.add(id);
|
|
47
|
+
const work = agent
|
|
48
|
+
.dispatch(request.method, request.params ?? {})
|
|
49
|
+
.then((result) => {
|
|
50
|
+
if (hasId)
|
|
51
|
+
output({ jsonrpc: "2.0", id, result });
|
|
52
|
+
}, (error) => {
|
|
53
|
+
if (hasId)
|
|
54
|
+
fail(id, error instanceof AcpError ? error.code : -32603, error instanceof AcpError ? error.message : "Agent operation failed");
|
|
55
|
+
})
|
|
56
|
+
.finally(() => {
|
|
57
|
+
pending.delete(work);
|
|
58
|
+
if (validId)
|
|
59
|
+
ids.delete(id);
|
|
60
|
+
});
|
|
61
|
+
pending.add(work);
|
|
62
|
+
};
|
|
63
|
+
try {
|
|
64
|
+
for await (const chunk of input) {
|
|
65
|
+
buffer += typeof chunk === "string" ? chunk : decoder.write(chunk);
|
|
66
|
+
let newline = buffer.indexOf("\n");
|
|
67
|
+
while (newline !== -1) {
|
|
68
|
+
const line = buffer.slice(0, newline);
|
|
69
|
+
if (Buffer.byteLength(line) > maxBytes)
|
|
70
|
+
throw new AcpError(-32600, "Frame too large");
|
|
71
|
+
receive(line);
|
|
72
|
+
buffer = buffer.slice(newline + 1);
|
|
73
|
+
newline = buffer.indexOf("\n");
|
|
74
|
+
}
|
|
75
|
+
if (Buffer.byteLength(buffer) > maxBytes)
|
|
76
|
+
throw new AcpError(-32600, "Frame too large");
|
|
77
|
+
}
|
|
78
|
+
buffer += decoder.end();
|
|
79
|
+
if (buffer.trim())
|
|
80
|
+
fail(null, -32700, "Incomplete JSONL frame");
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
fail(null, error instanceof AcpError ? error.code : -32603, error instanceof AcpError ? error.message : "Transport failed");
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
await agent.close();
|
|
87
|
+
await Promise.all(pending);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=acp-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp-transport.js","sourceRoot":"","sources":["../../../src/modes/acp/acp-transport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAA0B,MAAM,gBAAgB,CAAC;AAE5E,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC7B,KAAe,EACf,MAAiC,EACjC,aAAgC,EAChC,OAAe,EACC;IAChB,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAmB,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,EAAW,EAAE,IAAY,EAAE,OAAe,EAAE,EAAE,CAC3D,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,CAAC,IAAY,EAAQ,EAAE,CAAC;QACvC,IAAI,GAAY,CAAC;QACjB,IAAI,CAAC;YACJ,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACR,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YAClC,OAAO;QACR,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YACtC,OAAO;QACR,CAAC;QACD,MAAM,OAAO,GAAG,GAA8B,CAAC;QAC/C,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/F,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5F,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YACrD,OAAO;QACR,CAAC;QACD,gGAAgG;QAChG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB;YAAE,OAAO;QAC1D,IAAI,KAAK,IAAI,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;YAC3C,OAAO;QACR,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YACxB,IAAI,KAAK;gBAAE,IAAI,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;YACrD,OAAO;QACR,CAAC;QACD,IAAI,OAAO;YAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,KAAK;aAChB,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;aAC9C,IAAI,CACJ,CAAC,MAAM,EAAE,EAAE,CAAC;YACX,IAAI,KAAK;gBAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAAA,CAClD,EACD,CAAC,KAAc,EAAE,EAAE,CAAC;YACnB,IAAI,KAAK;gBACR,IAAI,CACH,EAAE,EACF,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAC/C,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CACpE,CAAC;QAAA,CACH,CACD;aACA,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,OAAO;gBAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAAA,CAC5B,CAAC,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAAA,CAClB,CAAC;IACF,IAAI,CAAC;QACJ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YACjC,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnE,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnC,OAAO,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACtC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ;oBAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;gBACtF,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBACnC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YACD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,QAAQ;gBAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CACH,IAAI,EACJ,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAC/C,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAC9D,CAAC;IACH,CAAC;YAAS,CAAC;QACV,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;AAAA,CACD","sourcesContent":["import type { Readable } from \"node:stream\";\nimport { StringDecoder } from \"node:string_decoder\";\nimport { AcpAgent, AcpError, type AcpSessionFactory } from \"./acp-agent.ts\";\n\n/** LF-only JSON-RPC transport, bounded per frame and in-flight request set. */\nexport async function serveAcp(\n\tinput: Readable,\n\toutput: (message: object) => void,\n\tcreateSession: AcpSessionFactory,\n\tversion: string,\n): Promise<void> {\n\tconst agent = new AcpAgent(createSession, version, output);\n\tconst pending = new Set<Promise<void>>();\n\tconst ids = new Set<string | number>();\n\tconst decoder = new StringDecoder(\"utf8\");\n\tlet buffer = \"\";\n\tconst maxBytes = 1024 * 1024;\n\tconst fail = (id: unknown, code: number, message: string) =>\n\t\toutput({ jsonrpc: \"2.0\", id, error: { code, message } });\n\tconst receive = (line: string): void => {\n\t\tlet raw: unknown;\n\t\ttry {\n\t\t\traw = JSON.parse(line);\n\t\t} catch {\n\t\t\tfail(null, -32700, \"Parse error\");\n\t\t\treturn;\n\t\t}\n\t\tif (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n\t\t\tfail(null, -32600, \"Invalid request\");\n\t\t\treturn;\n\t\t}\n\t\tconst request = raw as Record<string, unknown>;\n\t\tconst id = request.id;\n\t\tconst hasId = Object.hasOwn(request, \"id\");\n\t\tconst validId = typeof id === \"string\" || (typeof id === \"number\" && Number.isSafeInteger(id));\n\t\tif (request.jsonrpc !== \"2.0\" || typeof request.method !== \"string\" || (hasId && !validId)) {\n\t\t\tfail(validId ? id : null, -32600, \"Invalid request\");\n\t\t\treturn;\n\t\t}\n\t\t// Only cancellation is a notification. No session creation/provider call without a response ID.\n\t\tif (!hasId && request.method !== \"session/cancel\") return;\n\t\tif (hasId && validId && ids.has(id)) {\n\t\t\tfail(id, -32600, \"Duplicate in-flight id\");\n\t\t\treturn;\n\t\t}\n\t\tif (pending.size >= 32) {\n\t\t\tif (hasId) fail(id, -32000, \"Request limit reached\");\n\t\t\treturn;\n\t\t}\n\t\tif (validId) ids.add(id);\n\t\tconst work = agent\n\t\t\t.dispatch(request.method, request.params ?? {})\n\t\t\t.then(\n\t\t\t\t(result) => {\n\t\t\t\t\tif (hasId) output({ jsonrpc: \"2.0\", id, result });\n\t\t\t\t},\n\t\t\t\t(error: unknown) => {\n\t\t\t\t\tif (hasId)\n\t\t\t\t\t\tfail(\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\terror instanceof AcpError ? error.code : -32603,\n\t\t\t\t\t\t\terror instanceof AcpError ? error.message : \"Agent operation failed\",\n\t\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t)\n\t\t\t.finally(() => {\n\t\t\t\tpending.delete(work);\n\t\t\t\tif (validId) ids.delete(id);\n\t\t\t});\n\t\tpending.add(work);\n\t};\n\ttry {\n\t\tfor await (const chunk of input) {\n\t\t\tbuffer += typeof chunk === \"string\" ? chunk : decoder.write(chunk);\n\t\t\tlet newline = buffer.indexOf(\"\\n\");\n\t\t\twhile (newline !== -1) {\n\t\t\t\tconst line = buffer.slice(0, newline);\n\t\t\t\tif (Buffer.byteLength(line) > maxBytes) throw new AcpError(-32600, \"Frame too large\");\n\t\t\t\treceive(line);\n\t\t\t\tbuffer = buffer.slice(newline + 1);\n\t\t\t\tnewline = buffer.indexOf(\"\\n\");\n\t\t\t}\n\t\t\tif (Buffer.byteLength(buffer) > maxBytes) throw new AcpError(-32600, \"Frame too large\");\n\t\t}\n\t\tbuffer += decoder.end();\n\t\tif (buffer.trim()) fail(null, -32700, \"Incomplete JSONL frame\");\n\t} catch (error) {\n\t\tfail(\n\t\t\tnull,\n\t\t\terror instanceof AcpError ? error.code : -32603,\n\t\t\terror instanceof AcpError ? error.message : \"Transport failed\",\n\t\t);\n\t} finally {\n\t\tawait agent.close();\n\t\tawait Promise.all(pending);\n\t}\n}\n"]}
|