@gajae-code/coding-agent 0.10.1 → 0.11.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 +70 -2
- package/dist/types/append-only-mode.d.ts +1 -1
- 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/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/gajae-pet-widget.d.ts +1 -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/pet-capability.d.ts +37 -0
- package/dist/types/modes/components/pet-selector.d.ts +1 -1
- package/dist/types/modes/components/settings-selector.d.ts +15 -4
- package/dist/types/modes/components/welcome.d.ts +1 -1
- 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 -1
- 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 +169 -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 +16 -1
- 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 +33 -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 +45 -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 +55 -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/package.json +34 -13
- package/scripts/build-sdk-package-smoke.ts +94 -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/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 +37 -34
- 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/extensibility/slash-commands.ts +3 -3
- 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 +5 -2
- package/src/gjc-runtime/tmux-sessions.ts +19 -13
- package/src/gjc-runtime/ultragoal-guard.ts +53 -6
- package/src/gjc-runtime/ultragoal-runtime.ts +155 -3
- 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 +36 -37
- 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/custom-editor.ts +1 -0
- package/src/modes/components/gajae-pet-widget.ts +169 -20
- package/src/modes/components/model-selector.ts +93 -35
- package/src/modes/components/notifications-settings-editor.ts +1379 -0
- package/src/modes/components/pet-capability.ts +115 -0
- package/src/modes/components/pet-selector.ts +4 -6
- package/src/modes/components/settings-selector.ts +86 -11
- package/src/modes/components/welcome.ts +4 -4
- package/src/modes/controllers/command-controller.ts +1 -2
- package/src/modes/controllers/event-controller.ts +11 -16
- package/src/modes/controllers/extension-ui-controller.ts +357 -12
- package/src/modes/controllers/input-controller.ts +43 -13
- package/src/modes/controllers/selector-controller.ts +671 -44
- package/src/modes/index.ts +0 -22
- package/src/modes/interactive-mode.ts +108 -24
- 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 +1254 -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 +16 -1
- 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 +94 -0
- package/src/sdk/broker/ensure.ts +249 -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 +353 -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 +2275 -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 +3943 -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 +502 -54
- 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 +2470 -866
- package/src/session/default-model-selection.ts +93 -0
- package/src/session/fallback-chain-controller.ts +136 -0
- package/src/session/session-manager.ts +447 -13
- 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 +33 -30
- package/src/task/executor.ts +62 -13
- 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/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
|
@@ -6,7 +6,7 @@ import type { CredentialDisabledEvent, ImageContent, Model, ProviderResponseMeta
|
|
|
6
6
|
import type { KeyId } from "@gajae-code/tui";
|
|
7
7
|
import { logger } from "@gajae-code/utils";
|
|
8
8
|
import type { ModelRegistry } from "../../config/model-registry";
|
|
9
|
-
import type { WorkflowGateEmitter } from "../../modes/shared/agent-wire/
|
|
9
|
+
import type { WorkflowGateEmitter } from "../../modes/shared/agent-wire/workflow-gate-broker";
|
|
10
10
|
import { type Theme, theme } from "../../modes/theme/theme";
|
|
11
11
|
import type { SessionManager } from "../../session/session-manager";
|
|
12
12
|
import type {
|
|
@@ -182,10 +182,41 @@ export class ExtensionRunner {
|
|
|
182
182
|
#waitForIdleFn: () => Promise<void> = async () => {};
|
|
183
183
|
#abortFn: () => void = () => {};
|
|
184
184
|
#hasPendingMessagesFn: () => boolean = () => false;
|
|
185
|
+
#getPendingMessageCountsFn: () => { steering: number; followUp: number; nextTurn: number } = () => ({
|
|
186
|
+
steering: 0,
|
|
187
|
+
followUp: 0,
|
|
188
|
+
nextTurn: 0,
|
|
189
|
+
});
|
|
185
190
|
#getContextUsageFn: () => ContextUsage | undefined = () => undefined;
|
|
186
191
|
#compactFn: (instructionsOrOptions?: string | CompactOptions) => Promise<void> = async () => {};
|
|
187
192
|
#getSystemPromptFn: () => string[] = () => [];
|
|
188
193
|
#getWorkflowGateFn: () => WorkflowGateEmitter | undefined = () => undefined;
|
|
194
|
+
#clearContextFn: () => Promise<boolean> = async () => false;
|
|
195
|
+
#getTranscriptFn: ExtensionContext["getTranscript"] = () => [];
|
|
196
|
+
#getTranscriptBodyFn: ExtensionContext["getTranscriptBody"] = () => undefined;
|
|
197
|
+
#getGoalStateFn: ExtensionContext["getGoalState"] = () => undefined;
|
|
198
|
+
#getTodoStateFn: ExtensionContext["getTodoState"] = () => undefined;
|
|
199
|
+
#getQueuedMessagesFn: ExtensionContext["getQueuedMessages"] = () => [];
|
|
200
|
+
#getActiveToolsFn: ExtensionContext["getActiveTools"] = () => [];
|
|
201
|
+
#getAllToolsFn: ExtensionContext["getAllTools"] = () => [];
|
|
202
|
+
#cycleModelFn: ExtensionContextActions["cycleModel"] = undefined;
|
|
203
|
+
#cycleThinkingLevelFn: ExtensionContextActions["cycleThinkingLevel"] = undefined;
|
|
204
|
+
#setQueueModeFn: ExtensionContextActions["setQueueMode"] = undefined;
|
|
205
|
+
#getSkillStateFn: ExtensionContextActions["getSkillState"] = undefined;
|
|
206
|
+
#getConfigItemsFn: ExtensionContextActions["getConfigItems"] = undefined;
|
|
207
|
+
#getBranchCandidatesFn: ExtensionContextActions["getBranchCandidates"] = undefined;
|
|
208
|
+
#getExtensionsFn: ExtensionContextActions["getExtensions"] = undefined;
|
|
209
|
+
#getArtifactFn: ExtensionContextActions["getArtifact"] = undefined;
|
|
210
|
+
#getArtifactRangeFn: ExtensionContextActions["getArtifactRange"] = undefined;
|
|
211
|
+
|
|
212
|
+
#getJobsFn: ExtensionContextActions["getJobs"] = undefined;
|
|
213
|
+
#sdkControlFn: ExtensionContextActions["sdkControl"] = undefined;
|
|
214
|
+
#setSdkPermissionProviderFn: ExtensionContextActions["setSdkPermissionProvider"] = undefined;
|
|
215
|
+
|
|
216
|
+
#invokeSkillFn: ExtensionContextActions["invokeSkill"] = undefined;
|
|
217
|
+
#setPlanModeFn: ExtensionContextActions["setPlanMode"] = undefined;
|
|
218
|
+
#operateGoalFn: ExtensionContextActions["operateGoal"] = undefined;
|
|
219
|
+
|
|
189
220
|
#newSessionHandler: NewSessionHandler = async () => ({ cancelled: false });
|
|
190
221
|
#branchHandler: BranchHandler = async () => ({ cancelled: false });
|
|
191
222
|
#navigateTreeHandler: NavigateTreeHandler = async () => ({ cancelled: false });
|
|
@@ -249,6 +280,14 @@ export class ExtensionRunner {
|
|
|
249
280
|
this.runtime.setModel = actions.setModel;
|
|
250
281
|
this.runtime.getThinkingLevel = actions.getThinkingLevel;
|
|
251
282
|
this.runtime.setThinkingLevel = actions.setThinkingLevel;
|
|
283
|
+
this.runtime.getThinkingVisibility = actions.getThinkingVisibility;
|
|
284
|
+
this.runtime.setThinkingVisibility = actions.setThinkingVisibility;
|
|
285
|
+
this.runtime.cycleThinkingLevel = actions.cycleThinkingLevel;
|
|
286
|
+
this.runtime.setThinkingLevelForControl = actions.setThinkingLevelForControl;
|
|
287
|
+
this.runtime.setThinkingVisibilityForControl = actions.setThinkingVisibilityForControl;
|
|
288
|
+
this.runtime.setModelTemporaryForControl = actions.setModelTemporaryForControl;
|
|
289
|
+
this.runtime.fetchUsageReportsForControl = actions.fetchUsageReportsForControl;
|
|
290
|
+
this.runtime.getThinkingScopeForControl = actions.getThinkingScopeForControl;
|
|
252
291
|
this.runtime.getSessionName = actions.getSessionName;
|
|
253
292
|
this.runtime.setSessionName = actions.setSessionName;
|
|
254
293
|
|
|
@@ -257,9 +296,36 @@ export class ExtensionRunner {
|
|
|
257
296
|
this.#isIdleFn = contextActions.isIdle;
|
|
258
297
|
this.#abortFn = contextActions.abort;
|
|
259
298
|
this.#hasPendingMessagesFn = contextActions.hasPendingMessages;
|
|
299
|
+
this.#getPendingMessageCountsFn =
|
|
300
|
+
contextActions.getPendingMessageCounts ?? (() => ({ steering: 0, followUp: 0, nextTurn: 0 }));
|
|
260
301
|
this.#shutdownHandler = contextActions.shutdown;
|
|
261
302
|
this.#getSystemPromptFn = contextActions.getSystemPrompt;
|
|
262
303
|
this.#getWorkflowGateFn = contextActions.getWorkflowGate ?? (() => undefined);
|
|
304
|
+
this.#clearContextFn = contextActions.clearContext ?? (async () => false);
|
|
305
|
+
this.#getTranscriptFn = contextActions.getTranscript ?? (() => []);
|
|
306
|
+
this.#getTranscriptBodyFn = contextActions.getTranscriptBody ?? (() => undefined);
|
|
307
|
+
this.#getGoalStateFn = contextActions.getGoalState ?? (() => undefined);
|
|
308
|
+
this.#getTodoStateFn = contextActions.getTodoState ?? (() => undefined);
|
|
309
|
+
this.#getQueuedMessagesFn = contextActions.getQueuedMessages ?? (() => []);
|
|
310
|
+
this.#getActiveToolsFn = contextActions.getActiveTools ?? (() => []);
|
|
311
|
+
this.#getAllToolsFn = contextActions.getAllTools ?? (() => []);
|
|
312
|
+
this.#cycleModelFn = contextActions.cycleModel;
|
|
313
|
+
this.#cycleThinkingLevelFn = contextActions.cycleThinkingLevel;
|
|
314
|
+
this.#setQueueModeFn = contextActions.setQueueMode;
|
|
315
|
+
this.#getSkillStateFn = contextActions.getSkillState;
|
|
316
|
+
this.#invokeSkillFn = contextActions.invokeSkill;
|
|
317
|
+
this.#setPlanModeFn = contextActions.setPlanMode;
|
|
318
|
+
this.#operateGoalFn = contextActions.operateGoal;
|
|
319
|
+
|
|
320
|
+
this.#getConfigItemsFn = contextActions.getConfigItems;
|
|
321
|
+
this.#getBranchCandidatesFn = contextActions.getBranchCandidates;
|
|
322
|
+
this.#getExtensionsFn = contextActions.getExtensions;
|
|
323
|
+
this.#getArtifactFn = contextActions.getArtifact;
|
|
324
|
+
this.#getArtifactRangeFn = contextActions.getArtifactRange;
|
|
325
|
+
|
|
326
|
+
this.#getJobsFn = contextActions.getJobs;
|
|
327
|
+
this.#sdkControlFn = contextActions.sdkControl;
|
|
328
|
+
this.#setSdkPermissionProviderFn = contextActions.setSdkPermissionProvider;
|
|
263
329
|
|
|
264
330
|
// Command context actions (optional, only for interactive mode)
|
|
265
331
|
if (commandContextActions) {
|
|
@@ -297,8 +363,8 @@ export class ExtensionRunner {
|
|
|
297
363
|
* Forward a `credential_disabled` event from `AuthStorage` to extension handlers.
|
|
298
364
|
*
|
|
299
365
|
* If {@link initialize} has not yet run, the event is buffered and replayed once
|
|
300
|
-
* initialize wires the runtime/UI context. This matters because
|
|
301
|
-
* (interactive,
|
|
366
|
+
* initialize wires the runtime/UI context. This matters because session frontends
|
|
367
|
+
* (interactive, ACP, print, and subagent) call `initialize()` AFTER `createAgentSession`
|
|
302
368
|
* returns, but `AuthStorage` can fire `credential_disabled` during startup model probes
|
|
303
369
|
* inside `createAgentSession()`. Without deferral, extension handlers would observe
|
|
304
370
|
* `hasUI=false`, an unset model, and no-op runtime actions on exactly the headline
|
|
@@ -483,10 +549,52 @@ export class ExtensionRunner {
|
|
|
483
549
|
isIdle: () => this.#isIdleFn(),
|
|
484
550
|
abort: () => this.#abortFn(),
|
|
485
551
|
hasPendingMessages: () => this.#hasPendingMessagesFn(),
|
|
552
|
+
getPendingMessageCounts: () => this.#getPendingMessageCountsFn(),
|
|
553
|
+
getTranscript: () => this.#getTranscriptFn(),
|
|
554
|
+
getTranscriptBody: entryId => this.#getTranscriptBodyFn(entryId),
|
|
555
|
+
getGoalState: () => this.#getGoalStateFn(),
|
|
556
|
+
getTodoState: () => this.#getTodoStateFn(),
|
|
557
|
+
getQueuedMessages: () => this.#getQueuedMessagesFn(),
|
|
558
|
+
getActiveTools: () => this.#getActiveToolsFn(),
|
|
559
|
+
getAllTools: () => this.#getAllToolsFn(),
|
|
560
|
+
cycleModel: async () => await this.#cycleModelFn?.(),
|
|
561
|
+
cycleThinkingLevel: () => this.#cycleThinkingLevelFn?.(),
|
|
562
|
+
setQueueMode: (kind, mode) => this.#setQueueModeFn?.(kind, mode) ?? false,
|
|
563
|
+
invokeSkill: async (name, args) => await this.#invokeSkillFn?.(name, args),
|
|
564
|
+
|
|
565
|
+
setPlanMode: on => this.#setPlanModeFn?.(on),
|
|
566
|
+
operateGoal: async (op, objective) => await this.#operateGoalFn?.(op, objective),
|
|
567
|
+
|
|
568
|
+
getSkillState: () => this.#getSkillStateFn?.(),
|
|
569
|
+
getConfigItems: () => this.#getConfigItemsFn?.(),
|
|
570
|
+
getBranchCandidates: () => this.#getBranchCandidatesFn?.(),
|
|
571
|
+
getExtensions: () => this.#getExtensionsFn?.(),
|
|
572
|
+
getArtifact: id => this.#getArtifactFn?.(id),
|
|
573
|
+
getArtifactRange: (id, offset, length) => this.#getArtifactRangeFn?.(id, offset, length),
|
|
574
|
+
|
|
575
|
+
getJobs: () => this.#getJobsFn?.(),
|
|
576
|
+
sdkControl: (operation, input) => this.#sdkControlFn?.(operation, input),
|
|
577
|
+
setSdkPermissionProvider: provider => this.#setSdkPermissionProviderFn?.(provider),
|
|
578
|
+
sdkBindings: () => [
|
|
579
|
+
...(this.#cycleModelFn ? ["cycleModel"] : []),
|
|
580
|
+
...(this.#cycleThinkingLevelFn ? ["cycleThinkingLevel"] : []),
|
|
581
|
+
...(this.#setQueueModeFn ? ["setQueueMode"] : []),
|
|
582
|
+
...(this.#getSkillStateFn ? ["getSkillState"] : []),
|
|
583
|
+
...(this.#getConfigItemsFn ? ["getConfigItems"] : []),
|
|
584
|
+
...(this.#getBranchCandidatesFn ? ["getBranchCandidates"] : []),
|
|
585
|
+
...(this.#getExtensionsFn ? ["getExtensions"] : []),
|
|
586
|
+
...(this.#getArtifactRangeFn ? ["getArtifactRange"] : []),
|
|
587
|
+
...(this.#getJobsFn ? ["getJobs"] : []),
|
|
588
|
+
...(this.#sdkControlFn ? ["sdkControl"] : []),
|
|
589
|
+
...(this.#invokeSkillFn ? ["invokeSkill"] : []),
|
|
590
|
+
...(this.#setPlanModeFn ? ["setPlanMode"] : []),
|
|
591
|
+
...(this.#operateGoalFn ? ["operateGoal"] : []),
|
|
592
|
+
],
|
|
486
593
|
shutdown: () => this.#shutdownHandler(),
|
|
487
594
|
getSystemPrompt: () => [...this.#getSystemPromptFn()],
|
|
488
595
|
hasQueuedMessages: () => this.#hasPendingMessagesFn(), // deprecated alias
|
|
489
596
|
workflowGate: this.#getWorkflowGateFn(),
|
|
597
|
+
clearContext: () => this.#clearContextFn(),
|
|
490
598
|
};
|
|
491
599
|
}
|
|
492
600
|
|
|
@@ -734,7 +842,7 @@ export class ExtensionRunner {
|
|
|
734
842
|
async emitInput(
|
|
735
843
|
text: string,
|
|
736
844
|
images: ImageContent[] | undefined,
|
|
737
|
-
source: "interactive" | "
|
|
845
|
+
source: "interactive" | "sdk" | "extension",
|
|
738
846
|
): Promise<InputEventResult> {
|
|
739
847
|
const handlers = this.#handlersByEvent.get("input") ?? [];
|
|
740
848
|
if (handlers.length === 0) return {};
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* - Register commands, keyboard shortcuts, and CLI flags
|
|
8
8
|
* - Interact with the user via UI primitives
|
|
9
9
|
*/
|
|
10
|
+
|
|
10
11
|
import type { AgentMessage, AgentToolResult, AgentToolUpdateCallback, ThinkingLevel } from "@gajae-code/agent-core";
|
|
11
12
|
import type { CompactionResult } from "@gajae-code/agent-core/compaction";
|
|
12
13
|
import type {
|
|
@@ -21,6 +22,7 @@ import type {
|
|
|
21
22
|
Static,
|
|
22
23
|
TextContent,
|
|
23
24
|
TSchema,
|
|
25
|
+
UsageReport,
|
|
24
26
|
} from "@gajae-code/ai";
|
|
25
27
|
import type { OAuthCredentials, OAuthLoginCallbacks } from "@gajae-code/ai/utils/oauth/types";
|
|
26
28
|
import type * as piCodingAgent from "@gajae-code/coding-agent";
|
|
@@ -32,8 +34,13 @@ import type { PythonResult } from "../../eval/py/executor";
|
|
|
32
34
|
import type { BashResult } from "../../exec/bash-executor";
|
|
33
35
|
import type { ExecOptions, ExecResult } from "../../exec/exec";
|
|
34
36
|
import type { CustomEditor } from "../../modes/components/custom-editor";
|
|
35
|
-
import type { WorkflowGateEmitter } from "../../modes/shared/agent-wire/
|
|
37
|
+
import type { WorkflowGateEmitter } from "../../modes/shared/agent-wire/workflow-gate-broker";
|
|
36
38
|
import type { Theme } from "../../modes/theme/theme";
|
|
39
|
+
import type {
|
|
40
|
+
ClientBridgePermissionOption,
|
|
41
|
+
ClientBridgePermissionOutcome,
|
|
42
|
+
ClientBridgePermissionToolCall,
|
|
43
|
+
} from "../../session/client-bridge";
|
|
37
44
|
import type { CustomMessage } from "../../session/messages";
|
|
38
45
|
import type { ReadonlySessionManager, SessionManager } from "../../session/session-manager";
|
|
39
46
|
import type {
|
|
@@ -114,7 +121,7 @@ export interface ExtensionUIDialogOptions {
|
|
|
114
121
|
/**
|
|
115
122
|
* For interactive TUI select dialogs, render the focused option across
|
|
116
123
|
* multiple rows instead of truncating it. This is a select-only rendering
|
|
117
|
-
* hint; non-TUI
|
|
124
|
+
* hint; non-TUI clients (SDK, ACP) drop it and do not serialize it.
|
|
118
125
|
*/
|
|
119
126
|
wrapFocused?: boolean;
|
|
120
127
|
/**
|
|
@@ -128,7 +135,7 @@ export interface ExtensionUIDialogOptions {
|
|
|
128
135
|
* inline: selecting it keeps the title and option list on screen and opens
|
|
129
136
|
* a free-text input below the list. Submitting calls `onSubmit` with the
|
|
130
137
|
* typed text and resolves the select with `optionLabel`; Escape returns to
|
|
131
|
-
* option selection. Non-TUI
|
|
138
|
+
* option selection. Non-TUI clients (SDK, ACP) drop it; callers must keep
|
|
132
139
|
* a fallback path for selects that resolve `optionLabel` without invoking
|
|
133
140
|
* `onSubmit`.
|
|
134
141
|
*/
|
|
@@ -164,7 +171,7 @@ export type ExtensionWidgetContent = string[] | ExtensionUiComponentFactory | un
|
|
|
164
171
|
|
|
165
172
|
/**
|
|
166
173
|
* UI context for extensions to request interactive UI.
|
|
167
|
-
*
|
|
174
|
+
* Interactive, SDK, and headless callers provide their own implementation.
|
|
168
175
|
*/
|
|
169
176
|
// fallow-ignore-next-line code-duplication
|
|
170
177
|
// Parallel to HookUIContext: extensions expose a strictly larger UI surface
|
|
@@ -272,6 +279,14 @@ export interface ExtensionUIContext {
|
|
|
272
279
|
// Extension Context
|
|
273
280
|
// ============================================================================
|
|
274
281
|
|
|
282
|
+
export interface ExtensionTranscriptEntry {
|
|
283
|
+
id: string;
|
|
284
|
+
role: string;
|
|
285
|
+
textSummary: string;
|
|
286
|
+
ts: string;
|
|
287
|
+
body?: string;
|
|
288
|
+
}
|
|
289
|
+
|
|
275
290
|
export interface ContextUsage {
|
|
276
291
|
/** Context tokens, or null if unknown (e.g. right after compaction, before next LLM response). */
|
|
277
292
|
tokens: number | null;
|
|
@@ -309,7 +324,7 @@ export interface ExtensionContext {
|
|
|
309
324
|
getContextUsage(): ContextUsage | undefined;
|
|
310
325
|
/** Compact the session context (interactive mode shows UI). */
|
|
311
326
|
compact(instructionsOrOptions?: string | CompactOptions): Promise<void>;
|
|
312
|
-
/** Whether UI is available
|
|
327
|
+
/** Whether an interactive UI is available */
|
|
313
328
|
hasUI: boolean;
|
|
314
329
|
/** Current working directory */
|
|
315
330
|
cwd: string;
|
|
@@ -327,17 +342,65 @@ export interface ExtensionContext {
|
|
|
327
342
|
abort(): void;
|
|
328
343
|
/** Whether there are queued messages waiting */
|
|
329
344
|
hasPendingMessages(): boolean;
|
|
345
|
+
/** Typed pending-message counts per queue (steering, follow-up, next-turn). */
|
|
346
|
+
getPendingMessageCounts(): { steering: number; followUp: number; nextTurn: number };
|
|
347
|
+
/** Read-only session data exposed to extensions and the SDK host. */
|
|
348
|
+
getTranscript(): ExtensionTranscriptEntry[];
|
|
349
|
+
getTranscriptBody(entryId: string): string | undefined;
|
|
350
|
+
getGoalState(): unknown;
|
|
351
|
+
getTodoState(): unknown;
|
|
352
|
+
getQueuedMessages(): unknown[];
|
|
353
|
+
getActiveTools(): string[];
|
|
354
|
+
getAllTools(): string[];
|
|
355
|
+
/** Session control seams used by the SDK host. */
|
|
356
|
+
cycleModel(): Promise<{ model: Model; thinkingLevel: ThinkingLevel | undefined } | undefined>;
|
|
357
|
+
cycleThinkingLevel(): ThinkingLevel | undefined;
|
|
358
|
+
setQueueMode(kind: "steering" | "follow_up" | "interrupt", mode: unknown): boolean;
|
|
359
|
+
getSkillState(): unknown;
|
|
360
|
+
getConfigItems(): unknown;
|
|
361
|
+
getBranchCandidates(): unknown;
|
|
362
|
+
getExtensions(): unknown;
|
|
363
|
+
getArtifact(id: string): Uint8Array | string | undefined | Promise<Uint8Array | string | undefined>;
|
|
364
|
+
getArtifactRange?(
|
|
365
|
+
id: string,
|
|
366
|
+
offset: number,
|
|
367
|
+
length: number,
|
|
368
|
+
):
|
|
369
|
+
| { bytes: Uint8Array; totalBytes: number }
|
|
370
|
+
| undefined
|
|
371
|
+
| Promise<{ bytes: Uint8Array; totalBytes: number } | undefined>;
|
|
372
|
+
|
|
373
|
+
getJobs(): unknown;
|
|
374
|
+
/** Typed skill and mode controls exposed to the SDK host. */
|
|
375
|
+
invokeSkill?(name: string, args?: string): Promise<unknown>;
|
|
376
|
+
setPlanMode?(on: boolean): unknown;
|
|
377
|
+
operateGoal?(op: "create" | "get" | "resume" | "pause" | "complete" | "drop", objective?: string): Promise<unknown>;
|
|
378
|
+
|
|
379
|
+
/** Typed nonvisual session controls exposed to the SDK host. */
|
|
380
|
+
sdkControl?(operation: string, input: Record<string, unknown>): unknown | Promise<unknown>;
|
|
381
|
+
/** Install a permission callback backed by a live SDK reverse provider lease. */
|
|
382
|
+
setSdkPermissionProvider?(
|
|
383
|
+
provider:
|
|
384
|
+
| ((
|
|
385
|
+
toolCall: ClientBridgePermissionToolCall,
|
|
386
|
+
options: ClientBridgePermissionOption[],
|
|
387
|
+
signal?: AbortSignal,
|
|
388
|
+
) => Promise<ClientBridgePermissionOutcome>)
|
|
389
|
+
| undefined,
|
|
390
|
+
): void;
|
|
391
|
+
/** Names of session SDK seams actually installed by the active runtime. */
|
|
392
|
+
sdkBindings?(): readonly string[];
|
|
393
|
+
|
|
330
394
|
/** Gracefully shutdown and exit. */
|
|
331
395
|
shutdown(): void;
|
|
332
396
|
/** Get the current effective system prompt. */
|
|
333
397
|
getSystemPrompt(): string[];
|
|
334
398
|
/** @deprecated Use hasPendingMessages() instead */
|
|
335
399
|
hasQueuedMessages(): boolean;
|
|
336
|
-
/**
|
|
337
|
-
* Unattended workflow-gate bridge. Present only when the session runs in
|
|
338
|
-
* unattended/RPC mode; `undefined` in interactive/TUI mode (notify-only).
|
|
339
|
-
*/
|
|
400
|
+
/** SDK workflow-gate bridge, when a session has a remote gate responder. */
|
|
340
401
|
workflowGate?: WorkflowGateEmitter;
|
|
402
|
+
/** Clear the active conversation while preserving the saved session identity. */
|
|
403
|
+
clearContext(): Promise<boolean>;
|
|
341
404
|
}
|
|
342
405
|
|
|
343
406
|
/**
|
|
@@ -611,12 +674,12 @@ export interface UserPythonEvent {
|
|
|
611
674
|
// Input Events
|
|
612
675
|
// ============================================================================
|
|
613
676
|
|
|
614
|
-
/** Fired when
|
|
677
|
+
/** Fired when input enters through an interactive, SDK, or extension source. */
|
|
615
678
|
export interface InputEvent {
|
|
616
679
|
type: "input";
|
|
617
680
|
text: string;
|
|
618
681
|
images?: ImageContent[];
|
|
619
|
-
source: "interactive" | "
|
|
682
|
+
source: "interactive" | "sdk" | "extension";
|
|
620
683
|
}
|
|
621
684
|
|
|
622
685
|
// ============================================================================
|
|
@@ -1026,8 +1089,8 @@ export interface ExtensionAPI {
|
|
|
1026
1089
|
/** Send a user message to the agent, or queue it when deliverAs is set. */
|
|
1027
1090
|
sendUserMessage(
|
|
1028
1091
|
content: string | (TextContent | ImageContent)[],
|
|
1029
|
-
options?: { deliverAs?: "steer" | "followUp" },
|
|
1030
|
-
): void
|
|
1092
|
+
options?: { deliverAs?: "steer" | "followUp"; onPreflightAccepted?: () => void },
|
|
1093
|
+
): Promise<void>;
|
|
1031
1094
|
|
|
1032
1095
|
/** Append a custom entry to the session for state persistence (not sent to LLM). */
|
|
1033
1096
|
appendEntry<T = unknown>(customType: string, data?: T): void;
|
|
@@ -1054,7 +1117,31 @@ export interface ExtensionAPI {
|
|
|
1054
1117
|
getThinkingLevel(): ThinkingLevel | undefined;
|
|
1055
1118
|
|
|
1056
1119
|
/** Set thinking level for the current session. */
|
|
1057
|
-
setThinkingLevel(level: ThinkingLevel): void;
|
|
1120
|
+
setThinkingLevel(level: ThinkingLevel, persist?: boolean): void;
|
|
1121
|
+
|
|
1122
|
+
/** Get whether thinking output is visible in the current session. */
|
|
1123
|
+
getThinkingVisibility(): "visible" | "hidden";
|
|
1124
|
+
|
|
1125
|
+
/** Set whether thinking output is visible for the current session. */
|
|
1126
|
+
setThinkingVisibility(visibility: "visible" | "hidden", persist?: boolean): void;
|
|
1127
|
+
|
|
1128
|
+
/** Cycle the current model's available thinking levels. */
|
|
1129
|
+
cycleThinkingLevel(): ThinkingLevel | undefined;
|
|
1130
|
+
|
|
1131
|
+
/** Set thinking level from a session or durable global control surface. */
|
|
1132
|
+
setThinkingLevelForControl(level: ThinkingLevel, persist: boolean): Promise<void>;
|
|
1133
|
+
|
|
1134
|
+
/** Set thinking visibility from a session or durable global control surface. */
|
|
1135
|
+
setThinkingVisibilityForControl(visibility: "visible" | "hidden", persist: boolean): Promise<void>;
|
|
1136
|
+
|
|
1137
|
+
/** Set the model for this session only. Returns false when it is unavailable. */
|
|
1138
|
+
setModelTemporaryForControl(model: Model, expectedSessionId?: string): Promise<boolean>;
|
|
1139
|
+
|
|
1140
|
+
/** Fetch provider usage through the session's canonical provider resolution. */
|
|
1141
|
+
fetchUsageReportsForControl(): Promise<UsageReport[] | null>;
|
|
1142
|
+
|
|
1143
|
+
/** Report whether the current effort follows global config or a session override. */
|
|
1144
|
+
getThinkingScopeForControl(): "session" | "global config";
|
|
1058
1145
|
|
|
1059
1146
|
/** Get the current session name. */
|
|
1060
1147
|
getSessionName(): string | undefined;
|
|
@@ -1209,8 +1296,8 @@ export type SendMessageHandler = <T = unknown>(
|
|
|
1209
1296
|
|
|
1210
1297
|
export type SendUserMessageHandler = (
|
|
1211
1298
|
content: string | (TextContent | ImageContent)[],
|
|
1212
|
-
options?: { deliverAs?: "steer" | "followUp" },
|
|
1213
|
-
) => void
|
|
1299
|
+
options?: { deliverAs?: "steer" | "followUp"; onPreflightAccepted?: () => void },
|
|
1300
|
+
) => void | Promise<void>;
|
|
1214
1301
|
|
|
1215
1302
|
export type AppendEntryHandler = <T = unknown>(customType: string, data?: T) => void;
|
|
1216
1303
|
|
|
@@ -1224,10 +1311,29 @@ export type SetActiveToolsHandler = (toolNames: string[]) => Promise<void>;
|
|
|
1224
1311
|
|
|
1225
1312
|
export type SetModelHandler = (model: Model) => Promise<boolean>;
|
|
1226
1313
|
|
|
1314
|
+
export type CycleThinkingLevelHandler = () => ThinkingLevel | undefined;
|
|
1315
|
+
|
|
1316
|
+
export type SetThinkingLevelForControlHandler = (level: ThinkingLevel, persist: boolean) => Promise<void>;
|
|
1317
|
+
|
|
1318
|
+
export type SetThinkingVisibilityForControlHandler = (
|
|
1319
|
+
visibility: "visible" | "hidden",
|
|
1320
|
+
persist: boolean,
|
|
1321
|
+
) => Promise<void>;
|
|
1322
|
+
|
|
1323
|
+
export type SetModelTemporaryForControlHandler = (model: Model, expectedSessionId?: string) => Promise<boolean>;
|
|
1324
|
+
|
|
1325
|
+
export type FetchUsageReportsForControlHandler = () => Promise<UsageReport[] | null>;
|
|
1326
|
+
|
|
1327
|
+
export type GetThinkingScopeForControlHandler = () => "session" | "global config";
|
|
1328
|
+
|
|
1227
1329
|
export type GetThinkingLevelHandler = () => ThinkingLevel | undefined;
|
|
1228
1330
|
|
|
1229
1331
|
export type SetThinkingLevelHandler = (level: ThinkingLevel, persist?: boolean) => void;
|
|
1230
1332
|
|
|
1333
|
+
export type GetThinkingVisibilityHandler = () => "visible" | "hidden";
|
|
1334
|
+
|
|
1335
|
+
export type SetThinkingVisibilityHandler = (visibility: "visible" | "hidden", persist?: boolean) => void;
|
|
1336
|
+
|
|
1231
1337
|
/** Shared state created by loader, used during registration and runtime. */
|
|
1232
1338
|
export interface ExtensionRuntimeState {
|
|
1233
1339
|
flagValues: Map<string, boolean | string>;
|
|
@@ -1248,6 +1354,14 @@ export interface ExtensionActions {
|
|
|
1248
1354
|
setModel: SetModelHandler;
|
|
1249
1355
|
getThinkingLevel: GetThinkingLevelHandler;
|
|
1250
1356
|
setThinkingLevel: SetThinkingLevelHandler;
|
|
1357
|
+
getThinkingVisibility: GetThinkingVisibilityHandler;
|
|
1358
|
+
setThinkingVisibility: SetThinkingVisibilityHandler;
|
|
1359
|
+
cycleThinkingLevel: CycleThinkingLevelHandler;
|
|
1360
|
+
setThinkingLevelForControl: SetThinkingLevelForControlHandler;
|
|
1361
|
+
setThinkingVisibilityForControl: SetThinkingVisibilityForControlHandler;
|
|
1362
|
+
setModelTemporaryForControl: SetModelTemporaryForControlHandler;
|
|
1363
|
+
fetchUsageReportsForControl: FetchUsageReportsForControlHandler;
|
|
1364
|
+
getThinkingScopeForControl: GetThinkingScopeForControlHandler;
|
|
1251
1365
|
getSessionName: () => string | undefined;
|
|
1252
1366
|
setSessionName: (name: string) => Promise<void>;
|
|
1253
1367
|
}
|
|
@@ -1258,12 +1372,57 @@ export interface ExtensionContextActions {
|
|
|
1258
1372
|
isIdle: () => boolean;
|
|
1259
1373
|
abort: () => void;
|
|
1260
1374
|
hasPendingMessages: () => boolean;
|
|
1375
|
+
/** Typed pending-message counts per queue; optional for embedders without a counted queue. */
|
|
1376
|
+
getPendingMessageCounts?: () => { steering: number; followUp: number; nextTurn: number };
|
|
1377
|
+
getTranscript?: () => ExtensionTranscriptEntry[];
|
|
1378
|
+
getTranscriptBody?: (entryId: string) => string | undefined;
|
|
1379
|
+
getGoalState?: () => unknown;
|
|
1380
|
+
getTodoState?: () => unknown;
|
|
1381
|
+
getQueuedMessages?: () => unknown[];
|
|
1382
|
+
getActiveTools?: () => string[];
|
|
1383
|
+
getAllTools?: () => string[];
|
|
1261
1384
|
shutdown: () => void;
|
|
1262
1385
|
getContextUsage: () => ContextUsage | undefined;
|
|
1263
1386
|
compact: (instructionsOrOptions?: string | CompactOptions) => Promise<void>;
|
|
1264
1387
|
getSystemPrompt: () => string[];
|
|
1265
|
-
/**
|
|
1388
|
+
/** SDK workflow-gate bridge, when a session has a remote gate responder. */
|
|
1266
1389
|
getWorkflowGate?: () => WorkflowGateEmitter | undefined;
|
|
1390
|
+
/** Clear the active conversation while preserving the saved session identity. */
|
|
1391
|
+
clearContext?: () => Promise<boolean>;
|
|
1392
|
+
/** Session control and query seams exposed to the per-session SDK host. */
|
|
1393
|
+
cycleModel?: () => Promise<{ model: Model; thinkingLevel: ThinkingLevel | undefined } | undefined>;
|
|
1394
|
+
cycleThinkingLevel?: () => ThinkingLevel | undefined;
|
|
1395
|
+
setQueueMode?: (kind: "steering" | "follow_up" | "interrupt", mode: unknown) => boolean;
|
|
1396
|
+
getSkillState?: () => unknown;
|
|
1397
|
+
getConfigItems?: () => unknown;
|
|
1398
|
+
getBranchCandidates?: () => unknown;
|
|
1399
|
+
getExtensions?: () => unknown;
|
|
1400
|
+
getArtifact?: (id: string) => Uint8Array | string | undefined | Promise<Uint8Array | string | undefined>;
|
|
1401
|
+
getArtifactRange?: (
|
|
1402
|
+
id: string,
|
|
1403
|
+
offset: number,
|
|
1404
|
+
length: number,
|
|
1405
|
+
) =>
|
|
1406
|
+
| { bytes: Uint8Array; totalBytes: number }
|
|
1407
|
+
| undefined
|
|
1408
|
+
| Promise<{ bytes: Uint8Array; totalBytes: number } | undefined>;
|
|
1409
|
+
getJobs?: () => unknown;
|
|
1410
|
+
setSdkPermissionProvider?: (
|
|
1411
|
+
provider:
|
|
1412
|
+
| ((
|
|
1413
|
+
toolCall: ClientBridgePermissionToolCall,
|
|
1414
|
+
options: ClientBridgePermissionOption[],
|
|
1415
|
+
signal?: AbortSignal,
|
|
1416
|
+
) => Promise<ClientBridgePermissionOutcome>)
|
|
1417
|
+
| undefined,
|
|
1418
|
+
) => void;
|
|
1419
|
+
sdkControl?: (operation: string, input: Record<string, unknown>) => unknown | Promise<unknown>;
|
|
1420
|
+
invokeSkill?: (name: string, args?: string) => Promise<unknown>;
|
|
1421
|
+
setPlanMode?: (on: boolean) => unknown;
|
|
1422
|
+
operateGoal?: (
|
|
1423
|
+
op: "create" | "get" | "resume" | "pause" | "complete" | "drop",
|
|
1424
|
+
objective?: string,
|
|
1425
|
+
) => Promise<unknown>;
|
|
1267
1426
|
}
|
|
1268
1427
|
|
|
1269
1428
|
/** Actions for ExtensionCommandContext (ctx.* in command handlers). */
|
|
@@ -45,7 +45,7 @@ export type { ExecOptions, ExecResult } from "../../exec/exec";
|
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
47
|
* UI context for hooks to request interactive UI from the harness.
|
|
48
|
-
*
|
|
48
|
+
* Interactive and headless callers provide their own implementation.
|
|
49
49
|
*/
|
|
50
50
|
// fallow-ignore-next-line code-duplication
|
|
51
51
|
// Parallel to ExtensionUIContext: hooks expose a deliberately narrower UI
|
|
@@ -35,7 +35,7 @@ function buildArgumentCompletions(subcommands: SubcommandDef[]): (prefix: string
|
|
|
35
35
|
if (argumentPrefix.includes(" ")) return null; // past the subcommand
|
|
36
36
|
const lower = argumentPrefix.toLowerCase();
|
|
37
37
|
const matches = subcommands
|
|
38
|
-
.filter(s => s.name.startsWith(lower))
|
|
38
|
+
.filter(s => s.name.toLowerCase().startsWith(lower))
|
|
39
39
|
.map(s => ({
|
|
40
40
|
value: `${s.name} `,
|
|
41
41
|
label: s.name,
|
|
@@ -59,7 +59,7 @@ function buildSubcommandInlineHint(subcommands: SubcommandDef[]): (argumentText:
|
|
|
59
59
|
// Still typing subcommand name — show remaining chars + usage
|
|
60
60
|
const prefix = trimmed.toLowerCase();
|
|
61
61
|
if (prefix.length === 0) return null;
|
|
62
|
-
const match = subcommands.find(s => s.name.startsWith(prefix));
|
|
62
|
+
const match = subcommands.find(s => s.name.toLowerCase().startsWith(prefix));
|
|
63
63
|
if (!match) return null;
|
|
64
64
|
const remaining = match.name.slice(prefix.length);
|
|
65
65
|
return remaining + (match.usage ? ` ${match.usage}` : "");
|
|
@@ -68,7 +68,7 @@ function buildSubcommandInlineHint(subcommands: SubcommandDef[]): (argumentText:
|
|
|
68
68
|
// Subcommand typed — show remaining usage params
|
|
69
69
|
const subName = trimmed.slice(0, spaceIndex).toLowerCase();
|
|
70
70
|
const afterSub = trimmed.slice(spaceIndex + 1);
|
|
71
|
-
const sub = subcommands.find(s => s.name === subName);
|
|
71
|
+
const sub = subcommands.find(s => s.name.toLowerCase() === subName);
|
|
72
72
|
if (!sub?.usage) return null;
|
|
73
73
|
|
|
74
74
|
if (afterSub.length > 0) {
|