@gajae-code/coding-agent 0.10.2 → 0.11.1
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 +58 -2
- package/dist/types/append-only-mode.d.ts +1 -1
- package/dist/types/async/job-manager.d.ts +46 -7
- package/dist/types/cli/args.d.ts +4 -5
- package/dist/types/cli/daemon-cli.d.ts +12 -1
- package/dist/types/cli/notify-cli.d.ts +21 -1
- package/dist/types/cli.d.ts +3 -0
- package/dist/types/commands/daemon.d.ts +39 -0
- package/dist/types/commands/launch.d.ts +3 -0
- package/dist/types/commands/notify.d.ts +28 -1
- package/dist/types/commands/sdk.d.ts +33 -0
- package/dist/types/config/atomic-yaml-patch.d.ts +85 -0
- package/dist/types/config/model-profile-activation.d.ts +35 -15
- package/dist/types/config/model-profiles.d.ts +11 -5
- package/dist/types/config/model-registry.d.ts +3 -3
- package/dist/types/config/model-resolver.d.ts +39 -6
- package/dist/types/config/model-selector-value.d.ts +17 -0
- package/dist/types/config/models-config-schema.d.ts +10 -6
- package/dist/types/config/settings-schema.d.ts +133 -6
- package/dist/types/config/settings.d.ts +63 -35
- package/dist/types/coordinator-mcp/model-preset.d.ts +7 -6
- package/dist/types/coordinator-mcp/server.d.ts +6 -49
- package/dist/types/daemon/builtin.d.ts +6 -5
- package/dist/types/daemon/control-types.d.ts +1 -1
- package/dist/types/discovery/mcp-json.d.ts +12 -1
- package/dist/types/extensibility/custom-tools/types.d.ts +1 -1
- package/dist/types/extensibility/extensions/compact-handler.d.ts +4 -2
- package/dist/types/extensibility/extensions/get-commands-handler.d.ts +2 -2
- package/dist/types/extensibility/extensions/loader.d.ts +10 -1
- package/dist/types/extensibility/extensions/runner.d.ts +3 -3
- package/dist/types/extensibility/extensions/types.d.ts +141 -16
- package/dist/types/extensibility/hooks/types.d.ts +1 -1
- package/dist/types/gjc-runtime/launch-tmux.d.ts +3 -2
- package/dist/types/gjc-runtime/psmux-detect.d.ts +3 -0
- package/dist/types/gjc-runtime/session-state-sidecar.d.ts +3 -0
- package/dist/types/gjc-runtime/team-runtime.d.ts +3 -4
- package/dist/types/gjc-runtime/tmux-owner-isolation-cli.d.ts +13 -0
- package/dist/types/gjc-runtime/tmux-sessions.d.ts +4 -1
- package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +11 -0
- package/dist/types/gjc-runtime/windows-powershell-command.d.ts +9 -0
- package/dist/types/harness-control-plane/operate.d.ts +5 -5
- package/dist/types/harness-control-plane/owner.d.ts +18 -4
- package/dist/types/harness-control-plane/receipts.d.ts +0 -1
- package/dist/types/harness-control-plane/sdk-transport.d.ts +43 -0
- package/dist/types/harness-control-plane/session-transport.d.ts +48 -0
- package/dist/types/harness-control-plane/types.d.ts +3 -4
- package/dist/types/lsp/index.d.ts +1 -1
- package/dist/types/main.d.ts +32 -38
- package/dist/types/modes/acp/acp-agent.d.ts +224 -53
- package/dist/types/modes/acp/acp-client-bridge.d.ts +1 -0
- package/dist/types/modes/acp/acp-mode.d.ts +6 -15
- package/dist/types/modes/acp/permission-mode.d.ts +4 -0
- package/dist/types/modes/acp/startup-options.d.ts +6 -0
- package/dist/types/modes/components/agent-dashboard.d.ts +3 -0
- package/dist/types/modes/components/model-selector.d.ts +1 -0
- package/dist/types/modes/components/notifications-settings-editor.d.ts +135 -0
- package/dist/types/modes/components/settings-selector.d.ts +6 -4
- package/dist/types/modes/components/welcome.d.ts +1 -1
- package/dist/types/modes/controllers/command-controller.d.ts +2 -2
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +35 -1
- package/dist/types/modes/index.d.ts +0 -4
- package/dist/types/modes/interactive-mode.d.ts +5 -2
- package/dist/types/modes/runtime-init.d.ts +2 -2
- package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +6 -9
- package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +4 -6
- package/dist/types/modes/shared/agent-wire/event-contract.d.ts +6 -6
- package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +4 -9
- package/dist/types/modes/shared/agent-wire/event-observation.d.ts +1 -1
- package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +170 -30
- package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +7 -7
- package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +105 -0
- package/dist/types/modes/types.d.ts +7 -2
- package/dist/types/runtime-mcp/client.d.ts +2 -0
- package/dist/types/runtime-mcp/config.d.ts +5 -1
- package/dist/types/runtime-mcp/manager.d.ts +8 -1
- package/dist/types/runtime-mcp/types.d.ts +4 -0
- package/dist/types/sdk/acp/adapter.d.ts +67 -0
- package/dist/types/sdk/acp/index.d.ts +2 -0
- package/dist/types/sdk/broker/broker.d.ts +53 -0
- package/dist/types/sdk/broker/discovery.d.ts +30 -0
- package/dist/types/sdk/broker/ensure.d.ts +42 -0
- package/dist/types/sdk/broker/identity.d.ts +3 -0
- package/dist/types/sdk/broker/index.d.ts +8 -0
- package/dist/types/sdk/broker/lifecycle-ledger.d.ts +95 -0
- package/dist/types/sdk/broker/lifecycle.d.ts +85 -0
- package/dist/types/sdk/broker/process-incarnation.d.ts +14 -0
- package/dist/types/sdk/broker/runtime.d.ts +33 -0
- package/dist/types/sdk/broker/session-index.d.ts +57 -0
- package/dist/types/sdk/broker/state-version.d.ts +8 -0
- package/dist/types/sdk/broker/transport.d.ts +9 -0
- package/dist/types/sdk/bus/chat-command-policy.d.ts +49 -0
- package/dist/types/sdk/bus/chat-daemon-cli.d.ts +21 -0
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +111 -0
- package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +77 -0
- package/dist/types/sdk/bus/chat-effect-journal.d.ts +84 -0
- package/dist/types/{notifications → sdk/bus}/config-commands.d.ts +7 -2
- package/dist/types/sdk/bus/config.d.ts +274 -0
- package/dist/types/sdk/bus/conversation-store.d.ts +72 -0
- package/dist/types/sdk/bus/discord-conversation.d.ts +58 -0
- package/dist/types/sdk/bus/discord-daemon.d.ts +50 -0
- package/dist/types/sdk/bus/discord-live-provider.d.ts +70 -0
- package/dist/types/sdk/bus/discord-provider.d.ts +85 -0
- package/dist/types/{notifications → sdk/bus}/html-format.d.ts +2 -2
- package/dist/types/{notifications → sdk/bus}/index.d.ts +113 -13
- package/dist/types/{notifications → sdk/bus}/lifecycle-control-runtime.d.ts +4 -2
- package/dist/types/{notifications → sdk/bus}/lifecycle-orchestrator.d.ts +18 -21
- package/dist/types/{notifications → sdk/bus}/managed-daemon.d.ts +1 -1
- package/dist/types/sdk/bus/native-runtime-compatibility.d.ts +13 -0
- package/dist/types/sdk/bus/notification-orchestration.d.ts +170 -0
- package/dist/types/{notifications → sdk/bus}/notification-service.d.ts +7 -1
- package/dist/types/sdk/bus/session-control.d.ts +83 -0
- package/dist/types/sdk/bus/slack-conversation.d.ts +56 -0
- package/dist/types/sdk/bus/slack-daemon.d.ts +60 -0
- package/dist/types/sdk/bus/slack-live-provider.d.ts +59 -0
- package/dist/types/sdk/bus/slack-provider.d.ts +55 -0
- package/dist/types/{notifications → sdk/bus}/telegram-cli.d.ts +4 -4
- package/dist/types/{notifications → sdk/bus}/telegram-daemon-cli.d.ts +14 -5
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +12 -0
- package/dist/types/{notifications → sdk/bus}/telegram-daemon-control.d.ts +2 -2
- package/dist/types/{notifications → sdk/bus}/telegram-daemon.d.ts +78 -17
- package/dist/types/{notifications → sdk/bus}/telegram-reference.d.ts +2 -2
- package/dist/types/sdk/bus/telegram-setup.d.ts +128 -0
- package/dist/types/{notifications → sdk/bus}/topic-registry.d.ts +11 -0
- package/dist/types/sdk/cli/index.d.ts +1 -0
- package/dist/types/sdk/cli/session-cli.d.ts +19 -0
- package/dist/types/sdk/client/client.d.ts +1 -0
- package/dist/types/sdk/client/discovery.d.ts +27 -0
- package/dist/types/sdk/client/index.d.ts +2 -0
- package/dist/types/sdk/host/control/dispatch.d.ts +34 -0
- package/dist/types/sdk/host/control/index.d.ts +2 -0
- package/dist/types/sdk/host/control/operations.d.ts +65 -0
- package/dist/types/sdk/host/events.d.ts +35 -0
- package/dist/types/sdk/host/host.d.ts +35 -0
- package/dist/types/sdk/host/index.d.ts +4 -0
- package/dist/types/sdk/host/query/cursor.d.ts +62 -0
- package/dist/types/sdk/host/query/handlers.d.ts +70 -0
- package/dist/types/sdk/host/query/index.d.ts +3 -0
- package/dist/types/sdk/host/query/revision-store.d.ts +60 -0
- package/dist/types/sdk/host/reverse-leases.d.ts +45 -0
- package/dist/types/sdk/host/types.d.ts +32 -0
- package/dist/types/sdk/index.d.ts +6 -0
- package/dist/types/sdk/lifecycle-session.d.ts +14 -0
- package/dist/types/sdk/mcp/index.d.ts +1 -0
- package/dist/types/sdk/mcp/server.d.ts +37 -0
- package/dist/types/sdk/models.d.ts +44 -0
- package/dist/types/sdk/protocol/adapter-validation.d.ts +14 -0
- package/dist/types/sdk/protocol/operation-registry.d.ts +24 -0
- package/dist/types/{sdk.d.ts → sdk/session.d.ts} +44 -38
- package/dist/types/sdk/startup-capability.d.ts +50 -0
- package/dist/types/session/agent-session.d.ts +114 -21
- package/dist/types/session/default-model-selection.d.ts +25 -0
- package/dist/types/session/fallback-chain-controller.d.ts +52 -0
- package/dist/types/session/session-manager.d.ts +58 -1
- package/dist/types/setup/credential-auto-import.d.ts +36 -6
- package/dist/types/tools/ask-answer-registry.d.ts +1 -1
- package/dist/types/tools/browser/benchmark/detector-report.d.ts +63 -0
- package/dist/types/tools/browser/benchmark/run-suite.d.ts +18 -0
- package/dist/types/tools/browser/launch.d.ts +22 -0
- package/dist/types/tools/browser/profile-discovery.d.ts +31 -0
- package/dist/types/tools/browser/profile-posture.d.ts +37 -0
- package/dist/types/tools/browser/profile-reuse.d.ts +39 -0
- package/dist/types/tools/browser/profile-warmup.d.ts +39 -0
- package/dist/types/tools/browser/registry.d.ts +19 -0
- package/dist/types/tools/browser/tab-protocol.d.ts +4 -0
- package/dist/types/tools/index.d.ts +8 -8
- package/dist/types/tools/subagent-render.d.ts +1 -0
- package/dist/types/tools/subagent.d.ts +6 -1
- package/package.json +34 -13
- package/scripts/build-sdk-package-smoke.ts +99 -0
- package/scripts/capture-notifications-settings-showcase.ts +435 -0
- package/scripts/compile-args.ts +4 -2
- package/scripts/g005-daemon-smoke.ts +4 -5
- package/scripts/g011-daemon-path-smoke.ts +5 -5
- package/scripts/generate-sdk-adapter-parity-manifest.ts +163 -0
- package/scripts/generate-sdk-operation-inventory.ts +867 -0
- package/scripts/generate-telegram-baseline-manifest.ts +128 -0
- package/scripts/manifest-schema.ts +124 -0
- package/scripts/run-test-manifest.ts +153 -0
- package/scripts/run-threat-model-check.ts +157 -0
- package/scripts/verify-gjc-sdk-canonicalization.ts +3467 -0
- package/scripts/verify-gjc-sdk-rename.ts +90 -0
- package/src/append-only-mode.ts +1 -1
- package/src/async/job-manager.ts +406 -63
- package/src/cli/args.ts +43 -12
- package/src/cli/auth-gateway-cli.ts +2 -2
- package/src/cli/config-cli.ts +2 -1
- package/src/cli/daemon-cli.ts +63 -14
- package/src/cli/list-models.ts +1 -1
- package/src/cli/notify-cli.ts +288 -286
- package/src/cli.ts +21 -2
- package/src/commands/daemon.ts +50 -6
- package/src/commands/harness.ts +93 -36
- package/src/commands/launch.ts +5 -2
- package/src/commands/mcp-serve.ts +19 -12
- package/src/commands/notify.ts +36 -3
- package/src/commands/sdk.ts +426 -0
- package/src/commit/agentic/agent.ts +1 -0
- package/src/config/atomic-yaml-patch.ts +423 -0
- package/src/config/model-profile-activation.ts +240 -89
- package/src/config/model-profiles.ts +18 -15
- package/src/config/model-registry.ts +51 -26
- package/src/config/model-resolver.ts +138 -51
- package/src/config/model-selector-value.ts +50 -0
- package/src/config/models-config-schema.ts +14 -21
- package/src/config/settings-schema.ts +128 -10
- package/src/config/settings.ts +1120 -158
- package/src/coordinator-mcp/model-preset.ts +74 -20
- package/src/coordinator-mcp/server.ts +1597 -3052
- package/src/daemon/builtin.ts +8 -5
- package/src/daemon/control-types.ts +1 -1
- package/src/defaults/gjc/skills/team/SKILL.md +4 -4
- package/src/discovery/mcp-json.ts +327 -20
- package/src/extensibility/custom-tools/types.ts +1 -1
- package/src/extensibility/extensions/compact-handler.ts +3 -3
- package/src/extensibility/extensions/get-commands-handler.ts +2 -2
- package/src/extensibility/extensions/loader.ts +69 -5
- package/src/extensibility/extensions/runner.ts +112 -4
- package/src/extensibility/extensions/types.ts +176 -17
- package/src/extensibility/hooks/types.ts +1 -1
- package/src/gjc-runtime/launch-tmux.ts +170 -86
- package/src/gjc-runtime/psmux-detect.ts +82 -4
- package/src/gjc-runtime/session-state-sidecar.ts +41 -31
- package/src/gjc-runtime/team-runtime.ts +54 -35
- package/src/gjc-runtime/tmux-owner-isolation-cli.ts +53 -17
- package/src/gjc-runtime/tmux-owner-isolation.ts +1 -1
- package/src/gjc-runtime/tmux-sessions.ts +19 -13
- package/src/gjc-runtime/ultragoal-guard.ts +108 -14
- package/src/gjc-runtime/ultragoal-receipt-freshness.ts +102 -1
- package/src/gjc-runtime/ultragoal-runtime.ts +227 -11
- package/src/gjc-runtime/windows-powershell-command.ts +58 -0
- package/src/harness-control-plane/operate.ts +9 -9
- package/src/harness-control-plane/owner.ts +283 -39
- package/src/harness-control-plane/receipts.ts +0 -1
- package/src/harness-control-plane/sdk-transport.ts +395 -0
- package/src/harness-control-plane/session-transport.ts +94 -0
- package/src/harness-control-plane/types.ts +1 -1
- package/src/internal-urls/docs-index.generated.ts +34 -35
- package/src/lsp/client.ts +42 -6
- package/src/lsp/index.ts +2 -2
- package/src/main.ts +299 -204
- package/src/modes/DESIGN.md +258 -0
- package/src/modes/acp/acp-agent.ts +1228 -2612
- package/src/modes/acp/acp-client-bridge.ts +2 -20
- package/src/modes/acp/acp-event-mapper.ts +18 -2
- package/src/modes/acp/acp-mode.ts +8 -36
- package/src/modes/acp/permission-mode.ts +25 -0
- package/src/modes/acp/startup-options.ts +6 -0
- package/src/modes/components/agent-dashboard.ts +37 -17
- package/src/modes/components/model-selector.ts +93 -35
- package/src/modes/components/notifications-settings-editor.ts +1379 -0
- package/src/modes/components/settings-selector.ts +60 -11
- package/src/modes/components/welcome.ts +4 -4
- package/src/modes/controllers/command-controller.ts +10 -17
- package/src/modes/controllers/event-controller.ts +11 -16
- package/src/modes/controllers/extension-ui-controller.ts +396 -28
- package/src/modes/controllers/selector-controller.ts +674 -36
- package/src/modes/index.ts +0 -22
- package/src/modes/interactive-mode.ts +87 -36
- package/src/modes/runtime-init.ts +298 -6
- package/src/modes/shared/agent-wire/approval-gate.ts +9 -11
- package/src/modes/shared/agent-wire/deep-interview-gate.ts +10 -11
- package/src/modes/shared/agent-wire/event-contract.ts +7 -8
- package/src/modes/shared/agent-wire/event-envelope.ts +9 -17
- package/src/modes/shared/agent-wire/event-observation.ts +16 -7
- package/src/modes/shared/agent-wire/workflow-gate-broker.ts +1258 -87
- package/src/modes/shared/agent-wire/workflow-gate-schema.ts +15 -15
- package/src/modes/shared/agent-wire/workflow-gate-types.ts +113 -0
- package/src/modes/types.ts +7 -2
- package/src/runtime-mcp/client.ts +94 -19
- package/src/runtime-mcp/config.ts +27 -15
- package/src/runtime-mcp/manager.ts +343 -105
- package/src/runtime-mcp/oauth-flow.ts +42 -12
- package/src/runtime-mcp/transports/http.ts +49 -19
- package/src/runtime-mcp/transports/stdio.ts +47 -28
- package/src/runtime-mcp/types.ts +10 -0
- package/src/sdk/acp/adapter.ts +418 -0
- package/src/sdk/acp/index.ts +2 -0
- package/src/sdk/broker/broker.ts +642 -0
- package/src/sdk/broker/discovery.ts +113 -0
- package/src/sdk/broker/ensure.ts +307 -0
- package/src/sdk/broker/identity.ts +42 -0
- package/src/sdk/broker/index.ts +8 -0
- package/src/sdk/broker/internal-source-marker-2178.txt +1 -0
- package/src/sdk/broker/internal-source.bunfig.toml +1 -0
- package/src/sdk/broker/lifecycle-ledger.ts +286 -0
- package/src/sdk/broker/lifecycle.ts +2157 -0
- package/src/sdk/broker/process-incarnation.ts +159 -0
- package/src/sdk/broker/runtime.ts +164 -0
- package/src/sdk/broker/session-index.ts +318 -0
- package/src/sdk/broker/state-version.ts +23 -0
- package/src/sdk/broker/transport.ts +125 -0
- package/src/sdk/bus/chat-command-policy.ts +107 -0
- package/src/sdk/bus/chat-daemon-cli.ts +214 -0
- package/src/sdk/bus/chat-daemon-control.ts +713 -0
- package/src/sdk/bus/chat-daemon-runtime.ts +526 -0
- package/src/sdk/bus/chat-effect-journal.ts +355 -0
- package/src/{notifications → sdk/bus}/config-commands.ts +39 -10
- package/src/sdk/bus/config.ts +433 -0
- package/src/sdk/bus/conversation-store.ts +391 -0
- package/src/sdk/bus/discord-conversation.ts +85 -0
- package/src/sdk/bus/discord-daemon.ts +2292 -0
- package/src/sdk/bus/discord-live-provider.ts +521 -0
- package/src/sdk/bus/discord-provider.ts +56 -0
- package/src/{notifications → sdk/bus}/html-format.ts +2 -2
- package/src/sdk/bus/index.ts +3979 -0
- package/src/{notifications → sdk/bus}/lifecycle-commands.ts +2 -0
- package/src/{notifications → sdk/bus}/lifecycle-control-runtime.ts +225 -196
- package/src/{notifications → sdk/bus}/lifecycle-orchestrator.ts +161 -74
- package/src/{notifications → sdk/bus}/managed-daemon.ts +2 -2
- package/src/sdk/bus/native-runtime-compatibility.ts +42 -0
- package/src/sdk/bus/natives-augment.d.ts +38 -0
- package/src/sdk/bus/notification-orchestration.ts +535 -0
- package/src/{notifications → sdk/bus}/notification-service.ts +106 -12
- package/src/sdk/bus/session-control.ts +333 -0
- package/src/sdk/bus/slack-conversation.ts +74 -0
- package/src/sdk/bus/slack-daemon.ts +2144 -0
- package/src/sdk/bus/slack-live-provider.ts +380 -0
- package/src/sdk/bus/slack-provider.ts +76 -0
- package/src/{notifications → sdk/bus}/telegram-cli.ts +8 -8
- package/src/sdk/bus/telegram-daemon-cli.ts +330 -0
- package/src/sdk/bus/telegram-daemon-contract.ts +14 -0
- package/src/{notifications → sdk/bus}/telegram-daemon-control.ts +4 -4
- package/src/{notifications → sdk/bus}/telegram-daemon.ts +603 -63
- package/src/{notifications → sdk/bus}/telegram-reference.ts +2 -2
- package/src/sdk/bus/telegram-setup.ts +663 -0
- package/src/{notifications → sdk/bus}/topic-registry.ts +32 -0
- package/src/sdk/cli/index.ts +1 -0
- package/src/sdk/cli/session-cli.ts +275 -0
- package/src/sdk/client/client.ts +1 -0
- package/src/sdk/client/discovery.ts +108 -0
- package/src/sdk/client/index.ts +2 -0
- package/src/sdk/host/control/dispatch.ts +367 -0
- package/src/sdk/host/control/index.ts +10 -0
- package/src/sdk/host/control/operations.ts +63 -0
- package/src/sdk/host/events.ts +91 -0
- package/src/sdk/host/host.ts +296 -0
- package/src/sdk/host/index.ts +4 -0
- package/src/sdk/host/query/cursor.ts +189 -0
- package/src/sdk/host/query/handlers.ts +533 -0
- package/src/sdk/host/query/index.ts +3 -0
- package/src/sdk/host/query/revision-store.ts +1126 -0
- package/src/sdk/host/reverse-leases.ts +325 -0
- package/src/sdk/host/types.ts +29 -0
- package/src/sdk/index.ts +13 -0
- package/src/sdk/lifecycle-session.ts +39 -0
- package/src/sdk/mcp/index.ts +1 -0
- package/src/sdk/mcp/server.ts +332 -0
- package/src/sdk/models.ts +168 -0
- package/src/sdk/protocol/adapter-validation.ts +48 -0
- package/src/sdk/protocol/operation-inventory.generated.json +5654 -0
- package/src/sdk/protocol/operation-registry.ts +312 -0
- package/src/{sdk.ts → sdk/session.ts} +339 -212
- package/src/sdk/startup-capability.ts +189 -0
- package/src/session/agent-session.ts +2650 -944
- package/src/session/default-model-selection.ts +93 -0
- package/src/session/fallback-chain-controller.ts +136 -0
- package/src/session/session-manager.ts +438 -11
- package/src/session/session-storage.ts +8 -1
- package/src/setup/credential-auto-import.ts +290 -35
- package/src/setup/hermes/templates/operator-instructions.v1.md +3 -5
- package/src/slash-commands/builtin-registry.ts +2 -1
- package/src/task/executor.ts +62 -13
- package/src/task/index.ts +26 -16
- package/src/tools/ask-answer-registry.ts +1 -1
- package/src/tools/ask.ts +13 -8
- package/src/tools/browser/STEALTH-THIRD-PARTY-NOTICES.md +26 -0
- package/src/tools/browser/benchmark/detector-report.ts +157 -0
- package/src/tools/browser/benchmark/run-suite.ts +39 -0
- package/src/tools/browser/launch.ts +124 -19
- package/src/tools/browser/profile-discovery.ts +63 -0
- package/src/tools/browser/profile-posture.ts +59 -0
- package/src/tools/browser/profile-reuse.ts +102 -0
- package/src/tools/browser/profile-warmup.ts +109 -0
- package/src/tools/browser/registry.ts +87 -11
- package/src/tools/browser/tab-protocol.ts +1 -0
- package/src/tools/browser/tab-supervisor.ts +1 -0
- package/src/tools/browser/tab-worker.ts +1 -1
- package/src/tools/browser.ts +6 -0
- package/src/tools/index.ts +8 -8
- package/src/tools/puppeteer/14_stealth_permissions.txt +57 -0
- package/src/tools/puppeteer/15_stealth_webrtc.txt +60 -0
- package/src/tools/subagent-render.ts +19 -8
- package/src/tools/subagent.ts +84 -32
- package/src/tools/telegram-send.ts +2 -2
- package/vendor/insane-search/MANIFEST.json +2 -1
- package/vendor/insane-search/engine/bias_check.py +4 -1
- package/vendor/insane-search/engine/phase0.py +26 -1
- package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
- package/dist/types/modes/bridge/auth.d.ts +0 -12
- package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
- package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
- package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
- package/dist/types/modes/bridge/event-stream.d.ts +0 -8
- package/dist/types/modes/rpc/host-tools.d.ts +0 -1
- package/dist/types/modes/rpc/host-uris.d.ts +0 -1
- package/dist/types/modes/rpc/rpc-client.d.ts +0 -299
- package/dist/types/modes/rpc/rpc-mode.d.ts +0 -86
- package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
- package/dist/types/modes/rpc/rpc-types.d.ts +0 -810
- package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
- package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
- package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
- package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
- package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
- package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
- package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
- package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
- package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
- package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
- package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
- package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
- package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
- package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
- package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -166
- package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -127
- package/dist/types/notifications/config.d.ts +0 -132
- package/src/harness-control-plane/rpc-adapter.ts +0 -290
- package/src/modes/bridge/auth.ts +0 -41
- package/src/modes/bridge/bridge-client-bridge.ts +0 -47
- package/src/modes/bridge/bridge-mode.ts +0 -675
- package/src/modes/bridge/bridge-ui-context.ts +0 -200
- package/src/modes/bridge/event-stream.ts +0 -70
- package/src/modes/rpc/host-tools.ts +0 -1
- package/src/modes/rpc/host-uris.ts +0 -1
- package/src/modes/rpc/rpc-client.ts +0 -1166
- package/src/modes/rpc/rpc-mode.ts +0 -1029
- package/src/modes/rpc/rpc-socket-security.ts +0 -115
- package/src/modes/rpc/rpc-types.ts +0 -637
- package/src/modes/shared/agent-wire/command-contract.ts +0 -18
- package/src/modes/shared/agent-wire/command-dispatch.ts +0 -498
- package/src/modes/shared/agent-wire/command-validation.ts +0 -181
- package/src/modes/shared/agent-wire/handshake.ts +0 -157
- package/src/modes/shared/agent-wire/host-tool-bridge.ts +0 -197
- package/src/modes/shared/agent-wire/host-uri-bridge.ts +0 -236
- package/src/modes/shared/agent-wire/protocol.ts +0 -46
- package/src/modes/shared/agent-wire/responses.ts +0 -17
- package/src/modes/shared/agent-wire/scopes.ts +0 -94
- package/src/modes/shared/agent-wire/session-registry.ts +0 -109
- package/src/modes/shared/agent-wire/ui-request-broker.ts +0 -150
- package/src/modes/shared/agent-wire/ui-result.ts +0 -48
- package/src/modes/shared/agent-wire/unattended-action-policy.ts +0 -365
- package/src/modes/shared/agent-wire/unattended-audit.ts +0 -176
- package/src/modes/shared/agent-wire/unattended-run-controller.ts +0 -426
- package/src/modes/shared/agent-wire/unattended-session.ts +0 -528
- package/src/notifications/config.ts +0 -219
- package/src/notifications/index.ts +0 -1835
- package/src/notifications/telegram-daemon-cli.ts +0 -243
- package/src/tools/puppeteer/09_stealth_locale.txt +0 -46
- /package/dist/types/{notifications → sdk/bus}/attachment-registry.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/chat-adapters.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/daemon-paths.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/engine.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/helpers.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/lifecycle-commands.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/operator-runtime.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/rate-limit-pool.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/recent-activity.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/reply-sent-store.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/rich-draft.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/rich-render.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/threaded-inbound.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/threaded-render.d.ts +0 -0
- /package/src/{notifications → sdk/bus}/attachment-registry.ts +0 -0
- /package/src/{notifications → sdk/bus}/chat-adapters.ts +0 -0
- /package/src/{notifications → sdk/bus}/daemon-paths.ts +0 -0
- /package/src/{notifications → sdk/bus}/engine.ts +0 -0
- /package/src/{notifications → sdk/bus}/helpers.ts +0 -0
- /package/src/{notifications → sdk/bus}/operator-runtime.ts +0 -0
- /package/src/{notifications → sdk/bus}/rate-limit-pool.ts +0 -0
- /package/src/{notifications → sdk/bus}/recent-activity.ts +0 -0
- /package/src/{notifications → sdk/bus}/reply-sent-store.ts +0 -0
- /package/src/{notifications → sdk/bus}/rich-draft.ts +0 -0
- /package/src/{notifications → sdk/bus}/rich-render.ts +0 -0
- /package/src/{notifications → sdk/bus}/threaded-inbound.ts +0 -0
- /package/src/{notifications → sdk/bus}/threaded-render.ts +0 -0
package/src/main.ts
CHANGED
|
@@ -26,9 +26,10 @@ import { buildInitialMessage } from "./cli/initial-message";
|
|
|
26
26
|
import { runListModelsCommand } from "./cli/list-models";
|
|
27
27
|
import { selectSession } from "./cli/session-picker";
|
|
28
28
|
import { findConfigFile } from "./config";
|
|
29
|
-
import { activateModelProfile } from "./config/model-profile-activation";
|
|
29
|
+
import { activateModelProfile, ModelProfileCredentialError } from "./config/model-profile-activation";
|
|
30
30
|
import { ModelRegistry, ModelsConfigFile } from "./config/model-registry";
|
|
31
31
|
import { resolveCliModel, resolveModelRoleValue, resolveModelScope, type ScopedModel } from "./config/model-resolver";
|
|
32
|
+
import { selectorHead } from "./config/model-selector-value";
|
|
32
33
|
import { getDefault, type SettingPath, Settings, settings } from "./config/settings";
|
|
33
34
|
import { BUNDLED_GROK_BUILD_EXTENSION_ID, getBundledGrokBuildExtensionFactory } from "./defaults/gjc-grok-cli";
|
|
34
35
|
import { initializeWithSettings } from "./discovery";
|
|
@@ -36,6 +37,7 @@ import { exportFromFile } from "./export/html";
|
|
|
36
37
|
import type { ExtensionUIContext } from "./extensibility/extensions/types";
|
|
37
38
|
import { persistCoordinatorRuntimeInputReady } from "./gjc-runtime/session-state-sidecar";
|
|
38
39
|
import { isTmuxOwnerIsolationCliArgv, runTmuxOwnerIsolationCliFromStdin } from "./gjc-runtime/tmux-owner-isolation-cli";
|
|
40
|
+
import type { AcpStartupOptions } from "./modes/acp/startup-options";
|
|
39
41
|
import type { SessionSelectionResult } from "./modes/components/session-selector";
|
|
40
42
|
import type { InteractiveMode } from "./modes/interactive-mode";
|
|
41
43
|
import type { PrintModeOptions } from "./modes/print-mode";
|
|
@@ -51,7 +53,7 @@ import {
|
|
|
51
53
|
discoverAuthStorage,
|
|
52
54
|
} from "./sdk";
|
|
53
55
|
import type { AgentSession } from "./session/agent-session";
|
|
54
|
-
|
|
56
|
+
|
|
55
57
|
import {
|
|
56
58
|
type ResumeSessionIdentity,
|
|
57
59
|
resolveResumableSession,
|
|
@@ -86,19 +88,15 @@ async function checkForNewVersion(currentVersion: string): Promise<string | unde
|
|
|
86
88
|
}
|
|
87
89
|
}
|
|
88
90
|
|
|
89
|
-
export type StartupUpdateRoute = "interactive" | "print" | "text" | "json" | "
|
|
91
|
+
export type StartupUpdateRoute = "interactive" | "print" | "text" | "json" | "acp";
|
|
90
92
|
|
|
91
93
|
export function classifyStartupUpdateRoute(
|
|
92
94
|
parsed: Pick<Args, "print" | "mode">,
|
|
93
95
|
autoPrint: boolean,
|
|
94
96
|
): StartupUpdateRoute {
|
|
95
|
-
if (!parsed.print && !autoPrint && parsed.mode === undefined)
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (parsed.print) {
|
|
99
|
-
return "print";
|
|
100
|
-
}
|
|
101
|
-
return parsed.mode ?? "text";
|
|
97
|
+
if (!parsed.print && !autoPrint && parsed.mode === undefined) return "interactive";
|
|
98
|
+
if (parsed.print) return "print";
|
|
99
|
+
return parsed.mode === "acp" ? "acp" : "text";
|
|
102
100
|
}
|
|
103
101
|
|
|
104
102
|
/** Coordinates the non-blocking update check around the interactive UI lifecycle. */
|
|
@@ -115,9 +113,7 @@ export class StartupUpdateOrchestrator {
|
|
|
115
113
|
}
|
|
116
114
|
|
|
117
115
|
startBeforeInteractiveInitialization(): void {
|
|
118
|
-
if (this.#route !== "interactive" || !this.#enabled() || this.#versionCheckPromise)
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
116
|
+
if (this.#route !== "interactive" || !this.#enabled() || this.#versionCheckPromise) return;
|
|
121
117
|
try {
|
|
122
118
|
this.#versionCheckPromise = this.#check().catch(() => undefined);
|
|
123
119
|
} catch {
|
|
@@ -128,9 +124,7 @@ export class StartupUpdateOrchestrator {
|
|
|
128
124
|
attachAfterInteractiveInitialization(notify: (version: string) => void): void {
|
|
129
125
|
this.#versionCheckPromise
|
|
130
126
|
?.then(version => {
|
|
131
|
-
if (version && this.#enabled())
|
|
132
|
-
notify(version);
|
|
133
|
-
}
|
|
127
|
+
if (version && this.#enabled()) notify(version);
|
|
134
128
|
})
|
|
135
129
|
.catch(() => {});
|
|
136
130
|
}
|
|
@@ -149,7 +143,7 @@ export async function initializeInteractiveModeWithStartupUpdate(
|
|
|
149
143
|
startupUpdate.attachAfterInteractiveInitialization(version => mode.showNewVersionNotification(version));
|
|
150
144
|
}
|
|
151
145
|
|
|
152
|
-
const
|
|
146
|
+
const ACP_DEFAULTED_SETTING_PATHS: SettingPath[] = [
|
|
153
147
|
"todo.enabled",
|
|
154
148
|
"todo.reminders",
|
|
155
149
|
"todo.reminders.max",
|
|
@@ -167,18 +161,125 @@ const RPC_DEFAULTED_SETTING_PATHS: SettingPath[] = [
|
|
|
167
161
|
"task.maxRecursionDepth",
|
|
168
162
|
"task.disabledAgents",
|
|
169
163
|
"task.agentModelOverrides",
|
|
170
|
-
// Memory subsystems are off-by-default for
|
|
171
|
-
// memory should opt in explicitly through their own settings layer.
|
|
164
|
+
// Memory subsystems are off-by-default for embedded (ACP) hosts; embedders
|
|
165
|
+
// that want memory should opt in explicitly through their own settings layer.
|
|
172
166
|
"memory.backend",
|
|
173
167
|
"memories.enabled",
|
|
174
168
|
];
|
|
175
169
|
|
|
176
|
-
function
|
|
177
|
-
for (const settingPath of
|
|
170
|
+
function applyAcpDefaultSettingOverrides(targetSettings: Settings = settings): void {
|
|
171
|
+
for (const settingPath of ACP_DEFAULTED_SETTING_PATHS) {
|
|
178
172
|
targetSettings.override(settingPath, getDefault(settingPath));
|
|
179
173
|
}
|
|
180
174
|
}
|
|
181
175
|
|
|
176
|
+
/**
|
|
177
|
+
* Translate only ACP startup settings with a canonical SDK control carrier.
|
|
178
|
+
* Every other local-session flag is rejected so the broker-backed ACP host
|
|
179
|
+
* never appears to accept options it cannot apply to its remote session.
|
|
180
|
+
*/
|
|
181
|
+
export function resolveAcpStartupOptions(
|
|
182
|
+
parsed: Pick<
|
|
183
|
+
Args,
|
|
184
|
+
| "allowHome"
|
|
185
|
+
| "apiKey"
|
|
186
|
+
| "appendSystemPrompt"
|
|
187
|
+
| "credential"
|
|
188
|
+
| "continue"
|
|
189
|
+
| "default"
|
|
190
|
+
| "cwd"
|
|
191
|
+
| "fileArgs"
|
|
192
|
+
| "fork"
|
|
193
|
+
| "hooks"
|
|
194
|
+
| "messages"
|
|
195
|
+
| "mpreset"
|
|
196
|
+
| "mcpConfig"
|
|
197
|
+
| "model"
|
|
198
|
+
| "models"
|
|
199
|
+
| "noLsp"
|
|
200
|
+
| "noPty"
|
|
201
|
+
| "noRules"
|
|
202
|
+
| "noSession"
|
|
203
|
+
| "noSkills"
|
|
204
|
+
| "noTitle"
|
|
205
|
+
| "noTools"
|
|
206
|
+
| "pluginDirs"
|
|
207
|
+
| "print"
|
|
208
|
+
| "provider"
|
|
209
|
+
| "providerSessionId"
|
|
210
|
+
| "resume"
|
|
211
|
+
| "sessionDir"
|
|
212
|
+
| "skills"
|
|
213
|
+
| "slow"
|
|
214
|
+
| "smol"
|
|
215
|
+
| "plan"
|
|
216
|
+
| "systemPrompt"
|
|
217
|
+
| "thinking"
|
|
218
|
+
| "tmux"
|
|
219
|
+
| "tools"
|
|
220
|
+
| "extensions"
|
|
221
|
+
| "unknownFlags"
|
|
222
|
+
>,
|
|
223
|
+
sessionOptions: Pick<CreateAgentSessionOptions, "model" | "modelPattern" | "thinkingLevel">,
|
|
224
|
+
): AcpStartupOptions {
|
|
225
|
+
const unsupported = [
|
|
226
|
+
...(parsed.allowHome ? ["--allow-home"] : []),
|
|
227
|
+
...(parsed.default ? ["--default"] : []),
|
|
228
|
+
...(parsed.apiKey ? ["--api-key"] : []),
|
|
229
|
+
...(parsed.appendSystemPrompt ? ["--append-system-prompt"] : []),
|
|
230
|
+
...(parsed.credential ? ["--credential"] : []),
|
|
231
|
+
...(parsed.continue ? ["--continue"] : []),
|
|
232
|
+
...(parsed.cwd ? ["--cwd"] : []),
|
|
233
|
+
...(parsed.fileArgs.length > 0 ? ["@file"] : []),
|
|
234
|
+
...(parsed.fork ? ["--fork"] : []),
|
|
235
|
+
...(parsed.hooks?.length ? ["--hook"] : []),
|
|
236
|
+
...(parsed.messages.length > 0 ? ["initial prompt"] : []),
|
|
237
|
+
...(parsed.models?.length ? ["--models"] : []),
|
|
238
|
+
...(parsed.mcpConfig !== undefined ? ["--mcp-config"] : []),
|
|
239
|
+
...(parsed.noLsp ? ["--no-lsp"] : []),
|
|
240
|
+
...(parsed.noPty ? ["--no-pty"] : []),
|
|
241
|
+
...(parsed.noRules ? ["--no-rules"] : []),
|
|
242
|
+
...(parsed.noSession ? ["--no-session"] : []),
|
|
243
|
+
...(parsed.noSkills ? ["--no-skills"] : []),
|
|
244
|
+
...(parsed.noTitle ? ["--no-title"] : []),
|
|
245
|
+
...(parsed.noTools ? ["--no-tools"] : []),
|
|
246
|
+
...(parsed.pluginDirs?.length ? ["--plugin-dir"] : []),
|
|
247
|
+
...(parsed.print ? ["--print"] : []),
|
|
248
|
+
...(parsed.provider && !parsed.model ? ["--provider"] : []),
|
|
249
|
+
...(parsed.providerSessionId ? ["--provider-session-id"] : []),
|
|
250
|
+
...(parsed.resume ? ["--resume"] : []),
|
|
251
|
+
...(parsed.sessionDir ? ["--session-dir"] : []),
|
|
252
|
+
...(parsed.skills?.length ? ["--skills"] : []),
|
|
253
|
+
...(parsed.slow ? ["--slow"] : []),
|
|
254
|
+
...(parsed.smol ? ["--smol"] : []),
|
|
255
|
+
...(parsed.plan ? ["--plan"] : []),
|
|
256
|
+
...(parsed.systemPrompt ? ["--system-prompt"] : []),
|
|
257
|
+
...(parsed.tmux ? ["--tmux"] : []),
|
|
258
|
+
...(parsed.tools?.length ? ["--tools"] : []),
|
|
259
|
+
...(parsed.extensions?.length ? ["--extension"] : []),
|
|
260
|
+
...(parsed.unknownFlags.size > 0 ? ["extension flags"] : []),
|
|
261
|
+
];
|
|
262
|
+
if (unsupported.length > 0) {
|
|
263
|
+
throw new Error(
|
|
264
|
+
`Unsupported under SDK-backed ACP: ${unsupported.join(", ")}. Use ACP session configuration or SDK controls after session creation.`,
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
if (parsed.model && (!sessionOptions.model || sessionOptions.modelPattern)) {
|
|
268
|
+
throw new Error(
|
|
269
|
+
"Unsupported under SDK-backed ACP: --model could not be resolved to a canonical model ID. Use session/set_config_option after session creation.",
|
|
270
|
+
);
|
|
271
|
+
}
|
|
272
|
+
return {
|
|
273
|
+
...(parsed.mpreset ? { modelPreset: parsed.mpreset } : {}),
|
|
274
|
+
...(parsed.model && sessionOptions.model
|
|
275
|
+
? { modelId: `${sessionOptions.model.provider}/${sessionOptions.model.id}` }
|
|
276
|
+
: {}),
|
|
277
|
+
...((parsed.model || parsed.thinking) && sessionOptions.thinkingLevel
|
|
278
|
+
? { thinkingLevel: sessionOptions.thinkingLevel }
|
|
279
|
+
: {}),
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
|
|
182
283
|
async function readPipedInput(): Promise<string | undefined> {
|
|
183
284
|
if (process.stdin.isTTY !== false) return undefined;
|
|
184
285
|
try {
|
|
@@ -267,36 +368,36 @@ type CreateSessionForMain = (
|
|
|
267
368
|
context?: { skipPostCreateModelRefresh?: boolean },
|
|
268
369
|
) => Promise<CreateAgentSessionResult>;
|
|
269
370
|
|
|
270
|
-
type
|
|
271
|
-
|
|
272
|
-
export interface AcpSessionFactoryOptions {
|
|
273
|
-
baseOptions: CreateAgentSessionOptions;
|
|
274
|
-
settings: Settings;
|
|
275
|
-
sessionDir?: string;
|
|
276
|
-
authStorage: AuthStorage;
|
|
277
|
-
modelRegistry: ModelRegistry;
|
|
278
|
-
parsedArgs: Pick<Args, "apiKey" | "default" | "model" | "mpreset" | "thinking">;
|
|
279
|
-
rawArgs: string[];
|
|
280
|
-
createSession: CreateSessionForMain;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
export async function applyStartupModelProfiles(args: {
|
|
371
|
+
type StartupModelProfileArgs = {
|
|
284
372
|
session: AgentSession;
|
|
285
373
|
settings: Settings;
|
|
286
374
|
modelRegistry: ModelRegistry;
|
|
287
375
|
parsedArgs: Pick<Args, "default" | "model" | "mpreset" | "thinking">;
|
|
288
376
|
startupModel?: CreateAgentSessionOptions["model"];
|
|
289
377
|
startupThinkingLevel?: CreateAgentSessionOptions["thinkingLevel"];
|
|
290
|
-
}
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
async function applyStartupModelProfilesWithPolicy(
|
|
381
|
+
args: StartupModelProfileArgs,
|
|
382
|
+
onCredentialError?: (error: ModelProfileCredentialError) => void,
|
|
383
|
+
): Promise<void> {
|
|
291
384
|
const applyProfile = async (
|
|
292
385
|
profileName: string,
|
|
293
386
|
persistDefault: boolean,
|
|
294
387
|
options: { thinkingLevelOverride?: CreateAgentSessionOptions["thinkingLevel"] } = {},
|
|
295
388
|
): Promise<void> => {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
389
|
+
try {
|
|
390
|
+
await activateModelProfile(
|
|
391
|
+
{ session: args.session, modelRegistry: args.modelRegistry, settings: args.settings, profileName },
|
|
392
|
+
{ persistDefault, thinkingLevelOverride: options.thinkingLevelOverride },
|
|
393
|
+
);
|
|
394
|
+
} catch (error) {
|
|
395
|
+
if (onCredentialError && error instanceof ModelProfileCredentialError) {
|
|
396
|
+
onCredentialError(error);
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
throw error;
|
|
400
|
+
}
|
|
300
401
|
};
|
|
301
402
|
|
|
302
403
|
// Capture the explicitly-selected startup model BEFORE profile activation can
|
|
@@ -319,68 +420,76 @@ export async function applyStartupModelProfiles(args: {
|
|
|
319
420
|
await applyProfile(args.parsedArgs.mpreset, args.parsedArgs.default === true);
|
|
320
421
|
}
|
|
321
422
|
|
|
322
|
-
// Explicit CLI --model/--thinking must win over any activated profile.
|
|
423
|
+
// Explicit CLI --model/--thinking must win over any activated or skipped profile.
|
|
323
424
|
if (explicitModel) {
|
|
324
|
-
await args.session.setModelTemporary(explicitModel, args.startupThinkingLevel ?? args.parsedArgs.thinking
|
|
425
|
+
await args.session.setModelTemporary(explicitModel, args.startupThinkingLevel ?? args.parsedArgs.thinking, {
|
|
426
|
+
persistAsSessionDefault: true,
|
|
427
|
+
cause: "startup-override",
|
|
428
|
+
});
|
|
429
|
+
const selector = `${explicitModel.provider}/${explicitModel.id}`;
|
|
430
|
+
args.session.setConfiguredModelChain("default", [selector], "startup-override", undefined, true);
|
|
431
|
+
args.session.seedDefaultFallbackResolution(0, []);
|
|
325
432
|
} else if (args.parsedArgs.thinking && args.session.model) {
|
|
326
|
-
await args.session.setModelTemporary(args.session.model, args.parsedArgs.thinking);
|
|
433
|
+
await args.session.setModelTemporary(args.session.model, args.parsedArgs.thinking, { cause: "startup-override" });
|
|
327
434
|
}
|
|
328
435
|
}
|
|
329
436
|
|
|
330
|
-
export async function
|
|
331
|
-
args
|
|
332
|
-
|
|
437
|
+
export async function applyStartupModelProfiles(args: StartupModelProfileArgs): Promise<void> {
|
|
438
|
+
await applyStartupModelProfilesWithPolicy(args);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
async function exitForStartupModelProfileError(args: StartupModelProfileArgs, error: unknown): Promise<never> {
|
|
442
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
443
|
+
process.stderr.write(`${chalk.red(`Error: ${message}`)}\n`);
|
|
444
|
+
await args.session.dispose();
|
|
445
|
+
process.exit(1);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
export async function applyStartupModelProfilesOrExit(args: StartupModelProfileArgs): Promise<void> {
|
|
333
449
|
try {
|
|
334
450
|
await applyStartupModelProfiles(args);
|
|
335
451
|
} catch (error) {
|
|
336
|
-
|
|
337
|
-
process.stderr.write(`${chalk.red(`Error: ${message}`)}\n`);
|
|
338
|
-
process.exit(1);
|
|
452
|
+
await exitForStartupModelProfileError(args, error);
|
|
339
453
|
}
|
|
340
454
|
}
|
|
341
455
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
});
|
|
380
|
-
applyCliRuntimeApiKeyOverride(args.authStorage, args.parsedArgs.apiKey, nextSession.model);
|
|
381
|
-
applyExtensionFlagValues(nextSession, args.rawArgs);
|
|
382
|
-
return nextSession;
|
|
383
|
-
};
|
|
456
|
+
export function isStartupModelProfileCredentialRecoveryEligible(options: {
|
|
457
|
+
isInteractive: boolean;
|
|
458
|
+
hasInteractiveTerminal: boolean;
|
|
459
|
+
initialMessage: string | undefined;
|
|
460
|
+
initialMessages: readonly string[];
|
|
461
|
+
resumeAction: "continue-tail" | "open-idle" | undefined;
|
|
462
|
+
}): boolean {
|
|
463
|
+
return (
|
|
464
|
+
options.isInteractive &&
|
|
465
|
+
options.hasInteractiveTerminal &&
|
|
466
|
+
options.initialMessage === undefined &&
|
|
467
|
+
options.initialMessages.length === 0 &&
|
|
468
|
+
options.resumeAction !== "continue-tail"
|
|
469
|
+
);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
export async function applyStartupModelProfilesForRoot(
|
|
473
|
+
args: StartupModelProfileArgs & {
|
|
474
|
+
isInteractive: boolean;
|
|
475
|
+
hasInteractiveTerminal: boolean;
|
|
476
|
+
initialMessage: string | undefined;
|
|
477
|
+
initialMessages: readonly string[];
|
|
478
|
+
resumeAction: "continue-tail" | "open-idle" | undefined;
|
|
479
|
+
},
|
|
480
|
+
): Promise<{ recoverableErrors: string[] }> {
|
|
481
|
+
if (!isStartupModelProfileCredentialRecoveryEligible(args)) {
|
|
482
|
+
await applyStartupModelProfilesOrExit(args);
|
|
483
|
+
return { recoverableErrors: [] };
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
const recoverableErrors: string[] = [];
|
|
487
|
+
try {
|
|
488
|
+
await applyStartupModelProfilesWithPolicy(args, error => recoverableErrors.push(error.message));
|
|
489
|
+
} catch (error) {
|
|
490
|
+
await exitForStartupModelProfileError(args, error);
|
|
491
|
+
}
|
|
492
|
+
return { recoverableErrors };
|
|
384
493
|
}
|
|
385
494
|
|
|
386
495
|
interface InteractiveModeFactoryOptions {
|
|
@@ -735,6 +844,7 @@ async function buildSessionOptions(
|
|
|
735
844
|
const options: CreateAgentSessionOptions = {
|
|
736
845
|
cwd: parsed.cwd ?? getProjectDir(),
|
|
737
846
|
};
|
|
847
|
+
if (parsed.mcpConfig !== undefined) options.mcpConfigPath = parsed.mcpConfig;
|
|
738
848
|
|
|
739
849
|
const systemPromptSource = parsed.systemPrompt;
|
|
740
850
|
const resolvedSystemPrompt = await resolvePromptInput(systemPromptSource, "system prompt");
|
|
@@ -801,7 +911,9 @@ async function buildSessionOptions(
|
|
|
801
911
|
scopedModel.model.provider === rememberedResolvedModel.provider &&
|
|
802
912
|
scopedModel.model.id === rememberedResolvedModel.id,
|
|
803
913
|
)
|
|
804
|
-
: scopedModels.find(
|
|
914
|
+
: scopedModels.find(
|
|
915
|
+
scopedModel => scopedModel.model.id.toLowerCase() === selectorHead(remembered)?.toLowerCase(),
|
|
916
|
+
);
|
|
805
917
|
if (rememberedModel) {
|
|
806
918
|
options.model = rememberedModel.model;
|
|
807
919
|
// Apply explicit thinking level from remembered role value
|
|
@@ -881,21 +993,12 @@ export interface RlmPreset {
|
|
|
881
993
|
onSessionCreated?: (session: AgentSession) => void | Promise<void>;
|
|
882
994
|
}
|
|
883
995
|
|
|
884
|
-
type RunRpcMode = (
|
|
885
|
-
session: AgentSession,
|
|
886
|
-
setToolUIContext?: CreateAgentSessionResult["setToolUIContext"],
|
|
887
|
-
options?: { listen?: string },
|
|
888
|
-
) => Promise<void>;
|
|
889
|
-
type RunBridgeMode = (
|
|
890
|
-
session: AgentSession,
|
|
891
|
-
setToolUIContext?: CreateAgentSessionResult["setToolUIContext"],
|
|
892
|
-
) => Promise<void>;
|
|
893
996
|
type RunPrintMode = (session: AgentSession, options: PrintModeOptions) => Promise<void>;
|
|
894
997
|
|
|
895
998
|
export interface RunRootCommandDependencies {
|
|
896
999
|
createAgentSession?: typeof createAgentSession;
|
|
897
1000
|
discoverAuthStorage?: typeof discoverAuthStorage;
|
|
898
|
-
runAcpMode?: (
|
|
1001
|
+
runAcpMode?: (options?: { agentDir?: string }) => Promise<void>;
|
|
899
1002
|
settings?: Settings;
|
|
900
1003
|
rlmPreset?: RlmPreset;
|
|
901
1004
|
suppressProcessExit?: boolean;
|
|
@@ -904,8 +1007,6 @@ export interface RunRootCommandDependencies {
|
|
|
904
1007
|
readPipedInput?: typeof readPipedInput;
|
|
905
1008
|
runStartupCredentialAutoImportIfNeeded?: typeof runStartupCredentialAutoImportIfNeeded;
|
|
906
1009
|
getChangelogForDisplay?: typeof getChangelogForDisplay;
|
|
907
|
-
runRpcMode?: RunRpcMode;
|
|
908
|
-
runBridgeMode?: RunBridgeMode;
|
|
909
1010
|
createInteractiveMode?: CreateInteractiveMode;
|
|
910
1011
|
runPrintMode?: RunPrintMode;
|
|
911
1012
|
isResumePickerTerminal?: ResumePickerTerminalCheck;
|
|
@@ -1000,7 +1101,7 @@ export async function runRootCommand(
|
|
|
1000
1101
|
}
|
|
1001
1102
|
|
|
1002
1103
|
if (parsedArgs.listModels !== undefined) {
|
|
1003
|
-
await modelRegistry.refresh("online");
|
|
1104
|
+
await modelRegistry.refresh("online-if-uncached");
|
|
1004
1105
|
const searchPattern = typeof parsedArgs.listModels === "string" ? parsedArgs.listModels : undefined;
|
|
1005
1106
|
await runListModelsCommand({
|
|
1006
1107
|
modelRegistry,
|
|
@@ -1030,36 +1131,17 @@ export async function runRootCommand(
|
|
|
1030
1131
|
process.exit(0);
|
|
1031
1132
|
}
|
|
1032
1133
|
|
|
1033
|
-
if (
|
|
1034
|
-
(parsedArgs.mode === "rpc" || parsedArgs.mode === "rpc-ui" || parsedArgs.mode === "bridge") &&
|
|
1035
|
-
parsedArgs.fileArgs.length > 0
|
|
1036
|
-
) {
|
|
1037
|
-
process.stderr.write(`${chalk.red("Error: @file arguments are not supported in RPC or bridge mode")}\n`);
|
|
1038
|
-
process.exit(1);
|
|
1039
|
-
}
|
|
1040
|
-
|
|
1041
1134
|
const cwd = getProjectDir();
|
|
1042
1135
|
const settingsInstance =
|
|
1043
1136
|
deps.settings ?? (await logger.time("settings:init", deps.initializeSettings ?? Settings.init, { cwd }));
|
|
1044
|
-
if (
|
|
1045
|
-
|
|
1046
|
-
parsedArgs.mode === "rpc-ui" ||
|
|
1047
|
-
parsedArgs.mode === "acp" ||
|
|
1048
|
-
parsedArgs.mode === "bridge"
|
|
1049
|
-
) {
|
|
1050
|
-
applyRpcDefaultSettingOverrides(settingsInstance);
|
|
1137
|
+
if (parsedArgs.mode === "acp") {
|
|
1138
|
+
applyAcpDefaultSettingOverrides(settingsInstance);
|
|
1051
1139
|
}
|
|
1052
1140
|
modelRegistry.applyConfiguredModelBindings(settingsInstance);
|
|
1053
|
-
if (parsedArgs.noPty
|
|
1141
|
+
if (parsedArgs.noPty) {
|
|
1054
1142
|
Bun.env.PI_NO_PTY = "1";
|
|
1055
1143
|
}
|
|
1056
|
-
if (
|
|
1057
|
-
parsedArgs.noTitle ||
|
|
1058
|
-
parsedArgs.mode === "rpc" ||
|
|
1059
|
-
parsedArgs.mode === "rpc-ui" ||
|
|
1060
|
-
parsedArgs.mode === "acp" ||
|
|
1061
|
-
parsedArgs.mode === "bridge"
|
|
1062
|
-
) {
|
|
1144
|
+
if (parsedArgs.noTitle || parsedArgs.mode === "acp") {
|
|
1063
1145
|
Bun.env.PI_NO_TITLE = "1";
|
|
1064
1146
|
}
|
|
1065
1147
|
const { pipedInput, fileText, fileImages } = await logger.time("prepareInitialMessage", async () => {
|
|
@@ -1215,12 +1297,14 @@ export async function runRootCommand(
|
|
|
1215
1297
|
};
|
|
1216
1298
|
sessionOptions.authStorage = authStorage;
|
|
1217
1299
|
sessionOptions.modelRegistry = modelRegistry;
|
|
1218
|
-
sessionOptions.hasUI = isInteractive
|
|
1300
|
+
sessionOptions.hasUI = isInteractive;
|
|
1301
|
+
sessionOptions.notificationHostModeSupported = isInteractive;
|
|
1219
1302
|
sessionOptions.settings = settingsInstance;
|
|
1220
1303
|
const hasRootStartupProfile = Boolean(settingsInstance.get("modelProfile.default") || parsedArgs.mpreset);
|
|
1221
1304
|
|
|
1222
1305
|
// Research-mode (RLM) preset: augment session options before session creation.
|
|
1223
1306
|
deps.rlmPreset?.applyOptions(sessionOptions, settingsInstance);
|
|
1307
|
+
const acpStartupOptions = mode === "acp" ? resolveAcpStartupOptions(parsedArgs, sessionOptions) : undefined;
|
|
1224
1308
|
|
|
1225
1309
|
// Handle CLI --api-key as runtime override (not persisted)
|
|
1226
1310
|
if (parsedArgs.apiKey && parsedArgs.credential) {
|
|
@@ -1261,17 +1345,10 @@ export async function runRootCommand(
|
|
|
1261
1345
|
};
|
|
1262
1346
|
|
|
1263
1347
|
if (mode === "acp") {
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
sessionDir: parsedArgs.sessionDir,
|
|
1268
|
-
authStorage,
|
|
1269
|
-
modelRegistry,
|
|
1270
|
-
parsedArgs,
|
|
1271
|
-
rawArgs,
|
|
1272
|
-
createSession,
|
|
1348
|
+
await (deps.runAcpMode ?? (await import("./modes/acp")).runAcpMode)({
|
|
1349
|
+
agentDir: settingsInstance.getAgentDir(),
|
|
1350
|
+
...(acpStartupOptions ? { startupOptions: acpStartupOptions } : {}),
|
|
1273
1351
|
});
|
|
1274
|
-
await (deps.runAcpMode ?? (await import("./modes/acp")).runAcpMode)(createAcpSession);
|
|
1275
1352
|
} else {
|
|
1276
1353
|
const { session, setToolUIContext, modelFallbackMessage, lspServers, mcpManager, eventBus } = await createSession(
|
|
1277
1354
|
sessionOptions,
|
|
@@ -1281,17 +1358,36 @@ export async function runRootCommand(
|
|
|
1281
1358
|
|
|
1282
1359
|
// Research-mode (RLM) preset: hard tool-boundary assertion after the registry is assembled.
|
|
1283
1360
|
if (deps.rlmPreset?.onSessionCreated) {
|
|
1284
|
-
|
|
1361
|
+
try {
|
|
1362
|
+
await deps.rlmPreset.onSessionCreated(session);
|
|
1363
|
+
} catch (error) {
|
|
1364
|
+
try {
|
|
1365
|
+
await session.dispose();
|
|
1366
|
+
} catch {
|
|
1367
|
+
logger.warn("Failed to dispose session after RLM post-create error");
|
|
1368
|
+
}
|
|
1369
|
+
throw error;
|
|
1370
|
+
}
|
|
1285
1371
|
}
|
|
1286
1372
|
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1373
|
+
if (!(parsedArgs.authBootstrap === true && isInteractive)) {
|
|
1374
|
+
const { recoverableErrors } = await applyStartupModelProfilesForRoot({
|
|
1375
|
+
session,
|
|
1376
|
+
settings: settingsInstance,
|
|
1377
|
+
modelRegistry,
|
|
1378
|
+
parsedArgs,
|
|
1379
|
+
startupModel: sessionOptions.model,
|
|
1380
|
+
startupThinkingLevel: sessionOptions.thinkingLevel,
|
|
1381
|
+
isInteractive,
|
|
1382
|
+
hasInteractiveTerminal: hasResumePickerTerminal(),
|
|
1383
|
+
initialMessage,
|
|
1384
|
+
initialMessages: parsedArgs.messages,
|
|
1385
|
+
resumeAction: bareResumeAction,
|
|
1386
|
+
});
|
|
1387
|
+
for (const recoverableError of recoverableErrors) {
|
|
1388
|
+
notifs.push({ kind: "error", message: recoverableError });
|
|
1389
|
+
}
|
|
1390
|
+
}
|
|
1295
1391
|
|
|
1296
1392
|
if (modelFallbackMessage) {
|
|
1297
1393
|
notifs.push({ kind: "warn", message: modelFallbackMessage });
|
|
@@ -1321,71 +1417,70 @@ export async function runRootCommand(
|
|
|
1321
1417
|
process.stderr.write(
|
|
1322
1418
|
`${chalk.yellow(`\nAdvanced manual config remains available at ${ModelsConfigFile.path()}`)}\n`,
|
|
1323
1419
|
);
|
|
1420
|
+
await session.dispose();
|
|
1421
|
+
stopThemeWatcher();
|
|
1422
|
+
await postmortem.quit(1);
|
|
1324
1423
|
process.exit(1);
|
|
1325
1424
|
}
|
|
1326
1425
|
|
|
1327
|
-
if (
|
|
1328
|
-
|
|
1329
|
-
const runRpc = deps.runRpcMode ?? runRpcMode;
|
|
1426
|
+
if (isInteractive) {
|
|
1427
|
+
let exitForTiming = false;
|
|
1330
1428
|
try {
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
const changelogMarkdown = await logger.time(
|
|
1349
|
-
"main:getChangelogForDisplay",
|
|
1350
|
-
deps.getChangelogForDisplay ?? getChangelogForDisplay,
|
|
1351
|
-
parsedArgs,
|
|
1352
|
-
);
|
|
1429
|
+
startupUpdate.startBeforeInteractiveInitialization();
|
|
1430
|
+
const changelogMarkdown = await logger.time(
|
|
1431
|
+
"main:getChangelogForDisplay",
|
|
1432
|
+
deps.getChangelogForDisplay ?? getChangelogForDisplay,
|
|
1433
|
+
parsedArgs,
|
|
1434
|
+
);
|
|
1435
|
+
|
|
1436
|
+
const scopedModelsForDisplay = sessionOptions.scopedModels ?? scopedModels;
|
|
1437
|
+
if (scopedModelsForDisplay.length > 0) {
|
|
1438
|
+
const modelList = scopedModelsForDisplay
|
|
1439
|
+
.map(scopedModel => {
|
|
1440
|
+
const thinkingStr = !scopedModel.thinkingLevel ? `:${scopedModel.thinkingLevel}` : "";
|
|
1441
|
+
return `${scopedModel.model.id}${thinkingStr}`;
|
|
1442
|
+
})
|
|
1443
|
+
.join(", ");
|
|
1444
|
+
process.stdout.write(`${chalk.dim(`Model scope: ${modelList} ${chalk.gray("(Alt+N to cycle)")}`)}\n`);
|
|
1445
|
+
}
|
|
1353
1446
|
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
const thinkingStr = !scopedModel.thinkingLevel ? `:${scopedModel.thinkingLevel}` : "";
|
|
1359
|
-
return `${scopedModel.model.id}${thinkingStr}`;
|
|
1360
|
-
})
|
|
1361
|
-
.join(", ");
|
|
1362
|
-
process.stdout.write(`${chalk.dim(`Model scope: ${modelList} ${chalk.gray("(Alt+N to cycle)")}`)}\n`);
|
|
1363
|
-
}
|
|
1447
|
+
if ($env.PI_TIMING) {
|
|
1448
|
+
logger.printTimings();
|
|
1449
|
+
exitForTiming = $env.PI_TIMING === "x";
|
|
1450
|
+
}
|
|
1364
1451
|
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1452
|
+
if (!exitForTiming) {
|
|
1453
|
+
logger.endTiming();
|
|
1454
|
+
await runInteractiveMode(
|
|
1455
|
+
session,
|
|
1456
|
+
VERSION,
|
|
1457
|
+
changelogMarkdown,
|
|
1458
|
+
notifs,
|
|
1459
|
+
startupUpdate,
|
|
1460
|
+
parsedArgs.messages,
|
|
1461
|
+
setToolUIContext,
|
|
1462
|
+
lspServers,
|
|
1463
|
+
mcpManager,
|
|
1464
|
+
eventBus,
|
|
1465
|
+
initialMessage,
|
|
1466
|
+
initialImages,
|
|
1467
|
+
deps.createInteractiveMode,
|
|
1468
|
+
bareResumeAction,
|
|
1469
|
+
);
|
|
1369
1470
|
}
|
|
1471
|
+
} catch (error) {
|
|
1472
|
+
try {
|
|
1473
|
+
await session.dispose();
|
|
1474
|
+
} catch {
|
|
1475
|
+
logger.warn("Failed to dispose session after interactive error");
|
|
1476
|
+
}
|
|
1477
|
+
throw error;
|
|
1370
1478
|
}
|
|
1371
1479
|
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
changelogMarkdown,
|
|
1377
|
-
notifs,
|
|
1378
|
-
startupUpdate,
|
|
1379
|
-
parsedArgs.messages,
|
|
1380
|
-
setToolUIContext,
|
|
1381
|
-
lspServers,
|
|
1382
|
-
mcpManager,
|
|
1383
|
-
eventBus,
|
|
1384
|
-
initialMessage,
|
|
1385
|
-
initialImages,
|
|
1386
|
-
deps.createInteractiveMode,
|
|
1387
|
-
bareResumeAction,
|
|
1388
|
-
);
|
|
1480
|
+
if (exitForTiming) {
|
|
1481
|
+
await session.dispose();
|
|
1482
|
+
process.exit(0);
|
|
1483
|
+
}
|
|
1389
1484
|
} else {
|
|
1390
1485
|
const runPrint = deps.runPrintMode ?? (await import("./modes/print-mode")).runPrintMode;
|
|
1391
1486
|
await runPrint(session, {
|