@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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type AgentMessage } from "@gajae-code/agent-core";
|
|
2
|
+
import type { ConfiguredModelChainEntry as SharedConfiguredModelChainEntry } from "@gajae-code/agent-core/compaction";
|
|
2
3
|
import type { ImageContent, Message, MessageAttribution, ServiceTier, TextContent } from "@gajae-code/ai";
|
|
3
4
|
import type { TtsrInjectionRecord } from "../export/ttsr";
|
|
4
5
|
import { ArtifactManager } from "./artifacts";
|
|
@@ -97,6 +98,9 @@ export interface ModelChangeEntry extends SessionEntryBase {
|
|
|
97
98
|
/** Effective thinking level when the change was recorded. */
|
|
98
99
|
thinkingLevel?: string | null;
|
|
99
100
|
}
|
|
101
|
+
/** Persisted configured fallback chain for one model role. */
|
|
102
|
+
export type ConfiguredModelChainEntry = SharedConfiguredModelChainEntry;
|
|
103
|
+
export type ConfiguredModelChain = Pick<ConfiguredModelChainEntry, "role" | "entries" | "origin" | "identity" | "explicitHead" | "cleared">;
|
|
100
104
|
export interface ServiceTierChangeEntry extends SessionEntryBase {
|
|
101
105
|
type: "service_tier_change";
|
|
102
106
|
serviceTier: ServiceTier | null;
|
|
@@ -206,9 +210,27 @@ export interface CustomMessageEntry<T = unknown> extends SessionEntryBase {
|
|
|
206
210
|
evictedContent?: EvictedContentMarker;
|
|
207
211
|
}
|
|
208
212
|
/** Session entry - has id/parentId for tree structure (returned by "read" methods in SessionManager) */
|
|
209
|
-
export type SessionEntry = SessionMessageEntry | ThinkingLevelChangeEntry | ModelChangeEntry | ServiceTierChangeEntry | CompactionEntry | BranchSummaryEntry | CustomEntry | CustomMessageEntry | LabelEntry | TtsrInjectionEntry | MCPToolSelectionEntry | SessionInitEntry | ModeChangeEntry;
|
|
213
|
+
export type SessionEntry = SessionMessageEntry | ThinkingLevelChangeEntry | ModelChangeEntry | ServiceTierChangeEntry | CompactionEntry | BranchSummaryEntry | CustomEntry | CustomMessageEntry | LabelEntry | TtsrInjectionEntry | MCPToolSelectionEntry | SessionInitEntry | ModeChangeEntry | ConfiguredModelChainEntry;
|
|
210
214
|
/** Raw file entry (includes header) */
|
|
211
215
|
export type FileEntry = SessionHeader | SessionEntry;
|
|
216
|
+
export type DefaultModelSelectionStage = {
|
|
217
|
+
readonly entryRevision: number;
|
|
218
|
+
readonly headerExportRevision: number;
|
|
219
|
+
readonly sessionId: string;
|
|
220
|
+
readonly sessionFile: string | undefined;
|
|
221
|
+
readonly entries: readonly FileEntry[];
|
|
222
|
+
readonly tempPath: string | undefined;
|
|
223
|
+
readonly persistsToExistingFile: boolean;
|
|
224
|
+
};
|
|
225
|
+
export type DefaultModelSelectionPromotion = {
|
|
226
|
+
readonly kind: "promoted";
|
|
227
|
+
} | {
|
|
228
|
+
readonly kind: "not_promoted";
|
|
229
|
+
readonly error?: Error;
|
|
230
|
+
} | {
|
|
231
|
+
readonly kind: "unknown";
|
|
232
|
+
readonly error: Error;
|
|
233
|
+
};
|
|
212
234
|
/** Tree node for getTree() - defensive copy of session structure */
|
|
213
235
|
export interface SessionTreeNode {
|
|
214
236
|
entry: SessionEntry;
|
|
@@ -222,6 +244,8 @@ export interface SessionContext {
|
|
|
222
244
|
serviceTier?: ServiceTier;
|
|
223
245
|
/** Model roles: { default: "provider/modelId", small: "provider/modelId", ... } */
|
|
224
246
|
models: Record<string, string>;
|
|
247
|
+
/** Configured fallback chains for model roles on the active branch. */
|
|
248
|
+
configuredModelChains: Record<string, ConfiguredModelChain>;
|
|
225
249
|
/** Names of TTSR rules that have been injected this session */
|
|
226
250
|
injectedTtsrRules: string[];
|
|
227
251
|
/** Rich TTSR rule injection records for repeat resume. */
|
|
@@ -269,6 +293,21 @@ export interface StrictSessionOpenFailure {
|
|
|
269
293
|
kind: "error";
|
|
270
294
|
reason: ResumeTailError["reason"] | "identity-mismatch";
|
|
271
295
|
}
|
|
296
|
+
/** Exact transcript bytes and authority captured from one descriptor-bound read. */
|
|
297
|
+
export interface CapturedSessionTranscriptSnapshot {
|
|
298
|
+
sourcePath: string;
|
|
299
|
+
identity: ResumeSessionIdentity;
|
|
300
|
+
content: Uint8Array;
|
|
301
|
+
storage: SessionStorage;
|
|
302
|
+
}
|
|
303
|
+
export type StrictSessionCaptureResult = {
|
|
304
|
+
kind: "captured";
|
|
305
|
+
snapshot: CapturedSessionTranscriptSnapshot;
|
|
306
|
+
} | ResumeTailError;
|
|
307
|
+
export type StrictSessionForkResult = {
|
|
308
|
+
kind: "forked";
|
|
309
|
+
manager: SessionManager;
|
|
310
|
+
} | StrictSessionOpenFailure;
|
|
272
311
|
/** Result of opening an inspected session without create-or-rewrite fallback. */
|
|
273
312
|
export type StrictSessionOpenResult = StrictSessionOpenSuccess | StrictSessionOpenFailure;
|
|
274
313
|
export interface SessionInfo {
|
|
@@ -410,6 +449,7 @@ interface SessionManagerStateSnapshot {
|
|
|
410
449
|
titleSource: "auto" | "user" | undefined;
|
|
411
450
|
sessionFile: string | undefined;
|
|
412
451
|
flushed: boolean;
|
|
452
|
+
ensuredOnDisk: boolean;
|
|
413
453
|
needsFullRewriteOnNextPersist: boolean;
|
|
414
454
|
fileEntries: FileEntry[];
|
|
415
455
|
materializedFileEntries: FileEntry[];
|
|
@@ -459,6 +499,11 @@ export declare class SessionManager {
|
|
|
459
499
|
*/
|
|
460
500
|
moveTo(newCwd: string): Promise<void>;
|
|
461
501
|
isPersisted(): boolean;
|
|
502
|
+
stageDefaultModelSelection(model: string, thinkingLevel: string | undefined, options?: {
|
|
503
|
+
readonly appendThinkingLevel: boolean;
|
|
504
|
+
}): Promise<DefaultModelSelectionStage>;
|
|
505
|
+
promoteDefaultModelSelection(stage: DefaultModelSelectionStage): DefaultModelSelectionPromotion;
|
|
506
|
+
discardDefaultModelSelectionStage(stage: DefaultModelSelectionStage): Promise<void>;
|
|
462
507
|
/**
|
|
463
508
|
* Force-persist all current entries to disk, even when no assistant message exists yet.
|
|
464
509
|
* Used by ACP mode where session/new must create a discoverable session immediately.
|
|
@@ -543,6 +588,8 @@ export declare class SessionManager {
|
|
|
543
588
|
*/
|
|
544
589
|
setSessionName(name: string, source?: "auto" | "user"): Promise<boolean>;
|
|
545
590
|
_persist(entry: SessionEntry): void;
|
|
591
|
+
/** Append a configured fallback chain as child of current leaf, then advance leaf. Returns entry id. */
|
|
592
|
+
appendConfiguredModelChain(chain: ConfiguredModelChain): string;
|
|
546
593
|
/** Append a message as child of current leaf, then advance leaf. Returns entry id.
|
|
547
594
|
* Does not allow writing CompactionSummaryMessage and BranchSummaryMessage directly.
|
|
548
595
|
* Reason: we want these to be top-level entries in the session, not message session entries,
|
|
@@ -713,6 +760,8 @@ export declare class SessionManager {
|
|
|
713
760
|
* Resolve the canonical default session directory for a cwd.
|
|
714
761
|
*/
|
|
715
762
|
static getDefaultSessionDir(cwd: string, agentDir?: string, storage?: SessionStorage): string;
|
|
763
|
+
/** Resolve the default session directory without creating or migrating storage. */
|
|
764
|
+
static getDefaultSessionDirReadOnly(cwd: string, agentDir?: string): string;
|
|
716
765
|
/**
|
|
717
766
|
* Create a new session.
|
|
718
767
|
* @param cwd Working directory (stored in session header)
|
|
@@ -734,6 +783,14 @@ export declare class SessionManager {
|
|
|
734
783
|
* List sessions for the resume picker without recovery or other maintenance writes.
|
|
735
784
|
*/
|
|
736
785
|
static listForResumePickerReadOnly(cwd: string, sessionDir?: string, storage?: SessionStorage): Promise<SessionInfo[]>;
|
|
786
|
+
/** Capture exact source content for a strict fork without granting write ownership. */
|
|
787
|
+
static captureTranscriptStrict(filePath: string, storage?: SessionStorage): StrictSessionCaptureResult;
|
|
788
|
+
/**
|
|
789
|
+
* Fork strictly from captured source bytes. The source pathname is used only to
|
|
790
|
+
* revalidate captured authority before destination initialization and transcript
|
|
791
|
+
* persistence; destination history always comes from the captured bytes.
|
|
792
|
+
*/
|
|
793
|
+
static forkFromCaptured(snapshot: CapturedSessionTranscriptSnapshot, cwd: string, sessionDir?: string): Promise<StrictSessionForkResult>;
|
|
737
794
|
/** Inspect a selected session without acquiring write-capable ownership. */
|
|
738
795
|
static inspectSessionTailReadOnly(filePath: string, storage?: SessionStorage): Promise<ResumeTailInspection>;
|
|
739
796
|
/**
|
|
@@ -2,9 +2,40 @@ import type { AuthCredentialIfAbsentReason, AuthCredentialIfAbsentSnapshotResult
|
|
|
2
2
|
import type { ModelRegistry } from "../config/model-registry";
|
|
3
3
|
import { type CredentialDiscoveryResult, type CredentialOrigin, type DiscoveryOptions, type ImportableCredential } from "./credential-import";
|
|
4
4
|
export declare const CREDENTIAL_AUTO_IMPORT_ROTATION_WARNING = "Refreshing in gjc may log out the Claude/Codex CLI because OAuth refresh tokens can rotate.";
|
|
5
|
+
export declare const CREDENTIAL_AUTO_IMPORT_PERSISTENCE_WARNING = "Credential import preference could not be saved; external credentials may be offered again.";
|
|
6
|
+
export declare const CREDENTIAL_AUTO_IMPORT_REFRESH_WARNING = "Imported credentials were saved, but provider availability could not be refreshed.";
|
|
7
|
+
export declare const CREDENTIAL_AUTO_IMPORT_DISCOVERY_WARNING = "External credential discovery could not be completed. Use /provider to import credentials manually.";
|
|
8
|
+
export declare const CREDENTIAL_AUTO_IMPORT_RETRY_WARNING = "Some external credentials could not be imported. Use /provider to retry.";
|
|
9
|
+
export declare const CREDENTIAL_AUTO_IMPORT_STATE_UNREADABLE_WARNING = "Credential import preference could not be read. External credential discovery was skipped; use /provider to import credentials manually.";
|
|
5
10
|
export type CredentialAutoImportSourceLabel = "claude-code-file" | "claude-code-keychain" | "codex-file";
|
|
6
11
|
export type CredentialAutoImportTrigger = "startup" | "bare-login" | "setup-cli";
|
|
12
|
+
export type InitialImportResolution = "accepted" | "declined";
|
|
13
|
+
export type CredentialAutoImportStateProblem = "invalid-initial-import-resolution" | "invalid-last-import-version" | "malformed-json" | "malformed-root";
|
|
14
|
+
export interface CredentialAutoImportStateFile {
|
|
15
|
+
lastImportVersion?: string;
|
|
16
|
+
initialImportResolution?: InitialImportResolution;
|
|
17
|
+
}
|
|
18
|
+
export interface CredentialAutoImportStateReadResult {
|
|
19
|
+
state: CredentialAutoImportStateFile;
|
|
20
|
+
problems: CredentialAutoImportStateProblem[];
|
|
21
|
+
unreadable: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface CredentialAutoImportStateMutation {
|
|
24
|
+
lastImportVersion?: string;
|
|
25
|
+
initialImportResolution?: InitialImportResolution;
|
|
26
|
+
}
|
|
27
|
+
export interface CredentialAutoImportStateStore {
|
|
28
|
+
read: () => Promise<CredentialAutoImportStateReadResult>;
|
|
29
|
+
write: (mutation: CredentialAutoImportStateMutation) => Promise<boolean>;
|
|
30
|
+
}
|
|
31
|
+
export interface CredentialAutoImportStateStoreDependencies {
|
|
32
|
+
withFileLock?: <T>(filePath: string, transaction: () => Promise<T>) => Promise<T>;
|
|
33
|
+
rename?: (oldPath: string, newPath: string) => Promise<void>;
|
|
34
|
+
}
|
|
7
35
|
export declare function getCredentialAutoImportStatePath(agentDir?: string): string;
|
|
36
|
+
export declare function createCredentialAutoImportStateStore(agentDir?: string, dependencies?: CredentialAutoImportStateStoreDependencies): CredentialAutoImportStateStore;
|
|
37
|
+
export declare function readCredentialAutoImportState(agentDir?: string): Promise<CredentialAutoImportStateReadResult>;
|
|
38
|
+
export declare function isCredentialAutoImportStateResolvedForVersion(state: CredentialAutoImportStateFile, version: string): boolean;
|
|
8
39
|
export declare function readCredentialImportMarker(agentDir?: string): Promise<string | undefined>;
|
|
9
40
|
export declare function writeCredentialImportMarker(version: string, agentDir?: string): Promise<boolean>;
|
|
10
41
|
export declare enum CredentialAutoImportFailureClass {
|
|
@@ -37,6 +68,9 @@ export interface CredentialAutoImportResult {
|
|
|
37
68
|
discovery?: CredentialDiscoveryResult;
|
|
38
69
|
globalDiscoveryFailure?: CredentialAutoImportFailure;
|
|
39
70
|
}
|
|
71
|
+
export declare function formatCredentialAutoImportCandidateLabel(candidate: Pick<ImportableCredential, "provider" | "origin">): string;
|
|
72
|
+
export declare function formatCredentialAutoImportPrompt(candidates: readonly Pick<ImportableCredential, "provider" | "origin">[]): string;
|
|
73
|
+
export declare function logCredentialAutoImportFailures(trigger: CredentialAutoImportTrigger, failures: readonly Pick<CredentialAutoImportFailure, "failureClass">[]): void;
|
|
40
74
|
export type CredentialAutoImportAuthStorage = Pick<AuthStorage, "importCredentialIfAbsent">;
|
|
41
75
|
export interface CredentialAutoImportOptions {
|
|
42
76
|
authStorage: CredentialAutoImportAuthStorage;
|
|
@@ -48,16 +82,12 @@ export interface CredentialAutoImportOptions {
|
|
|
48
82
|
export declare function runExternalCredentialAutoImport({ authStorage, discover, discoveryOptions, }: CredentialAutoImportOptions): Promise<CredentialAutoImportResult>;
|
|
49
83
|
export declare function buildCredentialAutoImportNotice(result: Pick<CredentialAutoImportResult, "imported">): string | undefined;
|
|
50
84
|
export declare function formatCredentialAutoImportResult(result: CredentialAutoImportResult): string[];
|
|
51
|
-
export interface CredentialImportMarkerStore {
|
|
52
|
-
read: () => Promise<string | undefined> | string | undefined;
|
|
53
|
-
write: (version: string) => Promise<boolean> | boolean;
|
|
54
|
-
}
|
|
55
85
|
export interface StartupCredentialAutoImportOptions {
|
|
56
86
|
authStorage: CredentialAutoImportOptions["authStorage"];
|
|
57
87
|
modelRegistry: Pick<ModelRegistry, "refresh">;
|
|
58
88
|
discover?: CredentialAutoImportOptions["discover"];
|
|
59
89
|
version?: string;
|
|
60
90
|
agentDir?: string;
|
|
61
|
-
|
|
91
|
+
stateStore?: CredentialAutoImportStateStore;
|
|
62
92
|
}
|
|
63
|
-
export declare function runStartupCredentialAutoImportIfNeeded({ authStorage: activeAuthStorage, modelRegistry: activeModelRegistry, discover, version, agentDir,
|
|
93
|
+
export declare function runStartupCredentialAutoImportIfNeeded({ authStorage: activeAuthStorage, modelRegistry: activeModelRegistry, discover, version, agentDir, stateStore, }: StartupCredentialAutoImportOptions): Promise<string | undefined>;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* through the extension/runner/controller wiring. A session has at most one
|
|
7
7
|
* source; registering returns a disposer.
|
|
8
8
|
*/
|
|
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 { AskAnswerSource } from "./index";
|
|
11
11
|
/** Register `source` for `sessionId`. Returns a disposer that clears it. */
|
|
12
12
|
export declare function registerAskAnswerSource(sessionId: string, source: AskAnswerSource): () => void;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline stealth-detector benchmark model.
|
|
3
|
+
*
|
|
4
|
+
* Pure, deterministic logic for the anti-detection benchmark suite: it converts
|
|
5
|
+
* a browser-collected fingerprint probe into a normalized per-detector verdict,
|
|
6
|
+
* implements the falsifiable CI gate (see plan Phase 1 / R-T3), and renders a
|
|
7
|
+
* before/after report. No browser or network access lives here so it can be
|
|
8
|
+
* unit-tested deterministically; the harness that drives the real browser tool
|
|
9
|
+
* against vendored detector fixtures feeds its output into these functions.
|
|
10
|
+
*/
|
|
11
|
+
export type SignalStatus = "pass" | "fail";
|
|
12
|
+
/** A single boolean fingerprint signal, e.g. "navigator.webdriver is undefined". */
|
|
13
|
+
export interface DetectorSignal {
|
|
14
|
+
/** Stable identifier, used to diff across runs. */
|
|
15
|
+
id: string;
|
|
16
|
+
/** Human-readable label for the report. */
|
|
17
|
+
label: string;
|
|
18
|
+
/** `pass` means the signal looks human; `fail` means it leaks automation. */
|
|
19
|
+
status: SignalStatus;
|
|
20
|
+
/** Optional observed value for debugging. */
|
|
21
|
+
detail?: string;
|
|
22
|
+
}
|
|
23
|
+
export type AutomatedVerdict = "human" | "bot" | "unknown";
|
|
24
|
+
/** Normalized result for one detector (e.g. bot.sannysoft, CreepJS). */
|
|
25
|
+
export interface DetectorResult {
|
|
26
|
+
detector: string;
|
|
27
|
+
signals: DetectorSignal[];
|
|
28
|
+
/** Overall automated/not classification when the detector exposes one. */
|
|
29
|
+
automatedVerdict: AutomatedVerdict;
|
|
30
|
+
/** Absolute trust score (observability-only, never a hard gate). */
|
|
31
|
+
trustScore: number | null;
|
|
32
|
+
}
|
|
33
|
+
/** Shape emitted by the offline probe fixture on `window.__stealthProbe`. */
|
|
34
|
+
export interface RawProbe {
|
|
35
|
+
detector: string;
|
|
36
|
+
signals: Array<{
|
|
37
|
+
id: string;
|
|
38
|
+
label: string;
|
|
39
|
+
pass: boolean;
|
|
40
|
+
detail?: string;
|
|
41
|
+
}>;
|
|
42
|
+
automatedVerdict?: AutomatedVerdict;
|
|
43
|
+
trustScore?: number | null;
|
|
44
|
+
}
|
|
45
|
+
/** Convert a raw browser-collected probe into a normalized {@link DetectorResult}. */
|
|
46
|
+
export declare function parseProbe(raw: RawProbe): DetectorResult;
|
|
47
|
+
export interface GateOutcome {
|
|
48
|
+
pass: boolean;
|
|
49
|
+
reasons: string[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Falsifiable CI gate (plan Phase 1 / R-T3, R-C1, R-C2):
|
|
53
|
+
* (a) zero failing signals in the current run, AND
|
|
54
|
+
* current pass-count >= baseline pass-count (no silent regression), AND
|
|
55
|
+
* (b) either at least one signal that failed at baseline now passes,
|
|
56
|
+
* OR the baseline was already all-green (empty-gap regression lock).
|
|
57
|
+
* The absolute `trustScore` is never consulted here; it is observability-only.
|
|
58
|
+
*/
|
|
59
|
+
export declare function evaluateGate(baseline: DetectorResult, current: DetectorResult): GateOutcome;
|
|
60
|
+
/** Aggregate gate across every detector; passes only when all detectors pass. */
|
|
61
|
+
export declare function evaluateSuiteGate(baseline: readonly DetectorResult[], current: readonly DetectorResult[]): GateOutcome;
|
|
62
|
+
/** Render a deterministic before/after markdown report for one run. */
|
|
63
|
+
export declare function renderReport(baseline: readonly DetectorResult[], current: readonly DetectorResult[]): string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline stealth benchmark harness (plan Phase 1).
|
|
3
|
+
*
|
|
4
|
+
* Drives a puppeteer Page (already stealth-patched by the browser tool) against
|
|
5
|
+
* self-contained offline detector fixtures and collects normalized results. The
|
|
6
|
+
* navigation/evaluation is injected so this stays unit-testable without a real
|
|
7
|
+
* browser; the integration test wires a live puppeteer Page.
|
|
8
|
+
*/
|
|
9
|
+
import type { Page } from "puppeteer-core";
|
|
10
|
+
import type { DetectorResult } from "./detector-report";
|
|
11
|
+
/** Minimal surface of a puppeteer Page that the harness needs. */
|
|
12
|
+
export type SuitePage = Pick<Page, "goto" | "evaluate">;
|
|
13
|
+
export interface SuiteFixture {
|
|
14
|
+
/** file:// (or http://) URL of the offline detector fixture. */
|
|
15
|
+
url: string;
|
|
16
|
+
}
|
|
17
|
+
/** Navigate to each fixture and collect a normalized DetectorResult per fixture. */
|
|
18
|
+
export declare function runOfflineSuite(page: SuitePage, fixtures: readonly SuiteFixture[]): Promise<DetectorResult[]>;
|
|
@@ -20,6 +20,25 @@ export interface LaunchHeadlessOptions {
|
|
|
20
20
|
height: number;
|
|
21
21
|
deviceScaleFactor?: number;
|
|
22
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* Optional isolated warm-up profile directory (see profile-reuse.ts). When
|
|
25
|
+
* set, the headless browser launches against this isolated copy of the user's
|
|
26
|
+
* real Chrome profile so sessions inherit real cookies/storage/cache for
|
|
27
|
+
* stronger stealth. Callers resolve this via resolveProfileReuse and MUST
|
|
28
|
+
* pass an isolated copy, never a live profile dir.
|
|
29
|
+
*/
|
|
30
|
+
profileWarmupDir?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Optional opt-in geo alignment (see settings browser.geo.*). When set, the
|
|
33
|
+
* browser is launched with a matching timezone (TZ env) and/or UI language
|
|
34
|
+
* (--lang) at the source. Default unset = strict no-op: the real environment
|
|
35
|
+
* timezone/locale are preserved (never half-spoof). Only align these to a
|
|
36
|
+
* coherent value (e.g. one matching a configured proxy egress).
|
|
37
|
+
*/
|
|
38
|
+
geo?: {
|
|
39
|
+
timezone?: string;
|
|
40
|
+
locale?: string;
|
|
41
|
+
};
|
|
23
42
|
}
|
|
24
43
|
export declare function launchHeadlessBrowser(opts: LaunchHeadlessOptions): Promise<Browser>;
|
|
25
44
|
export declare function applyViewport(page: Page, viewport?: {
|
|
@@ -54,6 +73,9 @@ export declare function buildStealthInjectionScriptForTest(scripts?: readonly st
|
|
|
54
73
|
export declare function applyStealthPatches(browser: Browser, page: Page, state: {
|
|
55
74
|
browserSession: CDPSession | null;
|
|
56
75
|
override: UserAgentOverride | null;
|
|
76
|
+
}, geo?: {
|
|
77
|
+
readonly timezone?: string;
|
|
78
|
+
readonly locale?: string;
|
|
57
79
|
}): Promise<void>;
|
|
58
80
|
export declare function targetSupportsUserAgentOverrideForTest(target: Target): boolean;
|
|
59
81
|
export declare function configureUserAgentTargetsForTest(browser: Browser, state: {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default Chrome profile discovery (plan Phase 2 wiring).
|
|
3
|
+
*
|
|
4
|
+
* Locates the user's real Chrome "Default" profile directory per OS so the
|
|
5
|
+
* default headless launch path can warm up synthetic sessions from an isolated
|
|
6
|
+
* copy of it (see profile-warmup.ts + profile-posture.ts). Pure path logic with
|
|
7
|
+
* an injectable existence check, so it is unit-testable without touching the
|
|
8
|
+
* real filesystem.
|
|
9
|
+
*/
|
|
10
|
+
export interface DiscoveryEnv {
|
|
11
|
+
platform: NodeJS.Platform;
|
|
12
|
+
home: string;
|
|
13
|
+
/** Injectable for tests; defaults to fs.existsSync at call sites. */
|
|
14
|
+
exists: (p: string) => boolean;
|
|
15
|
+
/** Windows LOCALAPPDATA override (tests / non-default installs). */
|
|
16
|
+
localAppData?: string;
|
|
17
|
+
}
|
|
18
|
+
/** Candidate Chrome user-data roots for the platform (most common first). */
|
|
19
|
+
export declare function chromeUserDataRoots(env: DiscoveryEnv): string[];
|
|
20
|
+
export interface DiscoveredProfile {
|
|
21
|
+
userDataDir: string;
|
|
22
|
+
profileDirectory: string;
|
|
23
|
+
profileDir: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Discover the default Chrome profile, or null when none is present.
|
|
27
|
+
* Only returns a profile whose directory actually exists.
|
|
28
|
+
*/
|
|
29
|
+
export declare function discoverDefaultChromeProfile(env: DiscoveryEnv, profileDirectory?: string): DiscoveredProfile | null;
|
|
30
|
+
/** Convenience wrapper using the live OS environment + fs. */
|
|
31
|
+
export declare function defaultDiscoveryEnv(exists: (p: string) => boolean): DiscoveryEnv;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-default profile-reuse posture decision (plan Phase 2, Intent Reconciliation).
|
|
3
|
+
*
|
|
4
|
+
* User-confirmed policy: when a usable real Chrome profile is available, the
|
|
5
|
+
* browser tool uses it automatically (AUTO), emits a warning, and falls back to
|
|
6
|
+
* synthetic stealth when unavailable. The posture is overridable via a setting.
|
|
7
|
+
* This is pure decision logic (no browser, no filesystem side effects) so the
|
|
8
|
+
* launch/attach layer can call it and it can be unit-tested deterministically.
|
|
9
|
+
*/
|
|
10
|
+
/** Configured posture: `auto` (default) prefers the real profile; `opt-in` stays synthetic unless explicitly asked. */
|
|
11
|
+
export type ProfileReusePosture = "auto" | "opt-in";
|
|
12
|
+
export declare const DEFAULT_PROFILE_REUSE_POSTURE: ProfileReusePosture;
|
|
13
|
+
export interface PostureInputs {
|
|
14
|
+
/** Configured posture; defaults to `auto` when unset. */
|
|
15
|
+
posture?: ProfileReusePosture;
|
|
16
|
+
/** A usable real Chrome profile was detected and is attachable/safe to copy. */
|
|
17
|
+
realProfileAvailable: boolean;
|
|
18
|
+
/** Caller explicitly requested real-profile reuse for this run (e.g. app.browser === "chrome"). */
|
|
19
|
+
explicitlyRequested?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface PostureDecision {
|
|
22
|
+
/** `real` = use the (isolated copy of the) real profile; `synthetic` = synthetic stealth session. */
|
|
23
|
+
mode: "real" | "synthetic";
|
|
24
|
+
/** User-facing warning to emit when real credentials/state are about to be used. */
|
|
25
|
+
warning: string | null;
|
|
26
|
+
/** Machine-readable reason for logs/audit. */
|
|
27
|
+
reason: "auto-real" | "explicit-real" | "synthetic-fallback" | "synthetic-opt-in";
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Decide whether to reuse the real profile or run synthetic.
|
|
31
|
+
*
|
|
32
|
+
* - `auto` + available -> real (with warning)
|
|
33
|
+
* - `opt-in` + explicitly asked -> real (with warning)
|
|
34
|
+
* - `opt-in` (no explicit ask) -> synthetic
|
|
35
|
+
* - not available -> synthetic (fallback), even under `auto`
|
|
36
|
+
*/
|
|
37
|
+
export declare function decideProfilePosture(inputs: PostureInputs): PostureDecision;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Profile-reuse orchestration (plan Phase 2 wiring).
|
|
3
|
+
*
|
|
4
|
+
* Single entry point the launch path calls to decide, for a default headless
|
|
5
|
+
* session, whether to warm up from an isolated copy of the user's real Chrome
|
|
6
|
+
* profile. Ties together discovery + posture + isolated warm-up. Filesystem
|
|
7
|
+
* effects (the copy) are performed only when the posture resolves to `real`.
|
|
8
|
+
* The heavy pieces are injectable so this is unit-testable without a browser.
|
|
9
|
+
*/
|
|
10
|
+
import { type DiscoveredProfile, type DiscoveryEnv } from "./profile-discovery";
|
|
11
|
+
import { type ProfileReusePosture } from "./profile-posture";
|
|
12
|
+
import { type WarmupManifest } from "./profile-warmup";
|
|
13
|
+
export interface ResolveProfileReuseInputs {
|
|
14
|
+
posture?: ProfileReusePosture;
|
|
15
|
+
/** Caller explicitly requested real-profile reuse (e.g. app.browser === "chrome"). */
|
|
16
|
+
explicitlyRequested?: boolean;
|
|
17
|
+
discoveryEnv: DiscoveryEnv;
|
|
18
|
+
/** Destination for the isolated warm-up copy; defaults to an ephemeral temp dir. */
|
|
19
|
+
destDir?: string;
|
|
20
|
+
/** Injectable copier (defaults to collectWarmupArtifacts). */
|
|
21
|
+
copy?: (sourceProfileDir: string, destDir: string) => WarmupManifest;
|
|
22
|
+
/** Injectable temp-dir factory (defaults to fs.mkdtemp under os.tmpdir()). */
|
|
23
|
+
makeTempDir?: () => string;
|
|
24
|
+
}
|
|
25
|
+
export interface ProfileReuseResult {
|
|
26
|
+
mode: "real" | "synthetic";
|
|
27
|
+
reason: string;
|
|
28
|
+
warning: string | null;
|
|
29
|
+
discovered: DiscoveredProfile | null;
|
|
30
|
+
/** Isolated copy directory when mode === "real", else null. */
|
|
31
|
+
warmupDir: string | null;
|
|
32
|
+
manifest: WarmupManifest | null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Resolve profile reuse for a default session. When the posture resolves to
|
|
36
|
+
* `real`, copies an allowlisted, lock-free subset of the discovered profile
|
|
37
|
+
* into an isolated dir and returns that dir for the launcher to use.
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveProfileReuse(inputs: ResolveProfileReuseInputs): ProfileReuseResult;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Isolated profile warm-up (plan Phase 2, R-C3).
|
|
3
|
+
*
|
|
4
|
+
* Aggressive real-profile reuse seeds a session with the user's cookies /
|
|
5
|
+
* localStorage / cache. To stay safe (never lock or corrupt the live browser
|
|
6
|
+
* session) we NEVER bind the source profile directly: we copy an allowlisted
|
|
7
|
+
* subset of artifacts into an ephemeral, isolated directory and drive Chromium
|
|
8
|
+
* against that copy. Chromium single-instance lock files (SingletonLock/Socket/
|
|
9
|
+
* Cookie) are explicitly excluded so the isolated copy can never contend with a
|
|
10
|
+
* running browser.
|
|
11
|
+
*
|
|
12
|
+
* This module is pure filesystem logic (no browser, no network) so it is
|
|
13
|
+
* deterministically unit-testable.
|
|
14
|
+
*/
|
|
15
|
+
/** Chromium single-instance lock artifacts — must never be copied. */
|
|
16
|
+
export declare const CHROME_LOCK_ARTIFACTS: readonly ["SingletonLock", "SingletonSocket", "SingletonCookie"];
|
|
17
|
+
/**
|
|
18
|
+
* Profile-relative artifacts worth seeding for warm-up. Kept intentionally
|
|
19
|
+
* small: session state (cookies, storage) plus a light cache. Anything not
|
|
20
|
+
* listed is skipped, which also keeps the isolated copy cheap.
|
|
21
|
+
*/
|
|
22
|
+
export declare const WARMUP_ARTIFACTS: readonly ["Cookies", "Cookies-journal", "Local Storage", "Session Storage", "IndexedDB", "Network", "Preferences"];
|
|
23
|
+
export interface WarmupManifest {
|
|
24
|
+
sourceProfileDir: string;
|
|
25
|
+
destDir: string;
|
|
26
|
+
copied: string[];
|
|
27
|
+
skippedMissing: string[];
|
|
28
|
+
/** Always empty unless a lock artifact was seen (never copied). */
|
|
29
|
+
excludedLocks: string[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Copy warm-up artifacts from `sourceProfileDir` into an isolated `destDir`.
|
|
33
|
+
*
|
|
34
|
+
* Guarantees:
|
|
35
|
+
* - The source profile is only ever read, never written or locked.
|
|
36
|
+
* - Chromium lock artifacts are never copied (recorded in `excludedLocks`).
|
|
37
|
+
* - Missing artifacts are skipped, not fatal (recorded in `skippedMissing`).
|
|
38
|
+
*/
|
|
39
|
+
export declare function collectWarmupArtifacts(sourceProfileDir: string, destDir: string): WarmupManifest;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Subprocess } from "bun";
|
|
2
2
|
import type { Browser, CDPSession } from "puppeteer-core";
|
|
3
3
|
import { type UserAgentOverride } from "./launch";
|
|
4
|
+
import type { ProfileReusePosture } from "./profile-posture";
|
|
4
5
|
export type BrowserKind = {
|
|
5
6
|
kind: "headless";
|
|
6
7
|
headless: boolean;
|
|
@@ -20,9 +21,14 @@ export type BrowserKind = {
|
|
|
20
21
|
cdpUrl: string;
|
|
21
22
|
};
|
|
22
23
|
export type BrowserKindTag = BrowserKind["kind"];
|
|
24
|
+
export interface BrowserGeo {
|
|
25
|
+
readonly timezone?: string;
|
|
26
|
+
readonly locale?: string;
|
|
27
|
+
}
|
|
23
28
|
export interface BrowserHandle {
|
|
24
29
|
key: string;
|
|
25
30
|
kind: BrowserKind;
|
|
31
|
+
readonly geo?: BrowserGeo;
|
|
26
32
|
browser: Browser;
|
|
27
33
|
cdpUrl?: string;
|
|
28
34
|
pid?: number;
|
|
@@ -45,7 +51,20 @@ export interface AcquireBrowserOptions {
|
|
|
45
51
|
};
|
|
46
52
|
appArgs?: string[];
|
|
47
53
|
signal?: AbortSignal;
|
|
54
|
+
/**
|
|
55
|
+
* Profile-reuse posture for the default headless path (from settings
|
|
56
|
+
* `browser.profileReuse`, resolved by the settings-aware caller). When set,
|
|
57
|
+
* the headless browser may warm up from an isolated copy of the user's real
|
|
58
|
+
* Chrome profile (see profile-reuse.ts). Omitted = synthetic session.
|
|
59
|
+
*/
|
|
60
|
+
profileReuse?: ProfileReusePosture;
|
|
61
|
+
/**
|
|
62
|
+
* Opt-in geo alignment for the default headless path (from settings
|
|
63
|
+
* `browser.geo.*`). Default unset = no-op (real timezone/locale preserved).
|
|
64
|
+
*/
|
|
65
|
+
geo?: BrowserGeo;
|
|
48
66
|
}
|
|
67
|
+
export declare function browserKeyForTest(kind: BrowserKind, opts: Pick<AcquireBrowserOptions, "geo" | "profileReuse">): string;
|
|
49
68
|
export declare function acquireBrowser(kind: BrowserKind, opts: AcquireBrowserOptions): Promise<BrowserHandle>;
|
|
50
69
|
export declare function buildChromeProfileLaunchArgs(kind: SpawnedChromeProfileKind, appArgs: readonly string[] | undefined, port: number): string[];
|
|
51
70
|
export declare function buildChromeProfileLaunchArgsForTest(kind: SpawnedChromeProfileKind, appArgs: readonly string[] | undefined, port: number): string[];
|
|
@@ -47,6 +47,10 @@ export type WorkerInitPayload = {
|
|
|
47
47
|
height: number;
|
|
48
48
|
deviceScaleFactor?: number;
|
|
49
49
|
};
|
|
50
|
+
geo?: {
|
|
51
|
+
readonly timezone?: string;
|
|
52
|
+
readonly locale?: string;
|
|
53
|
+
};
|
|
50
54
|
dialogs?: "accept" | "dismiss";
|
|
51
55
|
url?: string;
|
|
52
56
|
waitUntil?: "load" | "domcontentloaded" | "networkidle0" | "networkidle2";
|
|
@@ -5,7 +5,7 @@ import type { Settings } from "../config/settings";
|
|
|
5
5
|
import type { Skill } from "../extensibility/skills";
|
|
6
6
|
import type { GoalModeState, GoalRuntime } from "../goals";
|
|
7
7
|
import type { HindsightSessionState } from "../hindsight/state";
|
|
8
|
-
import type { WorkflowGateEmitter } from "../modes/shared/agent-wire/
|
|
8
|
+
import type { WorkflowGateEmitter } from "../modes/shared/agent-wire/workflow-gate-broker";
|
|
9
9
|
import type { PlanModeState } from "../plan-mode/state";
|
|
10
10
|
import type { AgentRegistry } from "../registry/agent-registry";
|
|
11
11
|
import type { ForkContextSeed, ForkContextSeedOptions, PurgeQueuedCustomMessagesResult } from "../session/agent-session";
|
|
@@ -125,9 +125,10 @@ export interface AskRemoteReceipt {
|
|
|
125
125
|
}
|
|
126
126
|
export type AskAnswerSourceResult = AskRemoteReceipt | string | undefined;
|
|
127
127
|
/**
|
|
128
|
-
* Source of remote answers. `awaitAnswer` remains the legacy
|
|
129
|
-
* integrations; typed sources opt into `awaitAnswerRequest`.
|
|
130
|
-
* string-only source from accidentally acquiring acknowledgement
|
|
128
|
+
* Source of remote answers for interactive asks. `awaitAnswer` remains the legacy
|
|
129
|
+
* wire for existing integrations; typed sources opt into `awaitAnswerRequest`.
|
|
130
|
+
* This keeps a string-only source from accidentally acquiring acknowledgement
|
|
131
|
+
* authority while allowing SDK-routed interactions to settle durably.
|
|
131
132
|
*/
|
|
132
133
|
export interface AskAnswerSource {
|
|
133
134
|
awaitAnswer(question: string, options: string[], signal?: AbortSignal): Promise<string | undefined>;
|
|
@@ -232,12 +233,11 @@ export interface ToolSession {
|
|
|
232
233
|
getPlanModeState?: () => PlanModeState | undefined;
|
|
233
234
|
/** Goal mode state (if active or paused) */
|
|
234
235
|
getGoalModeState?: () => GoalModeState | undefined;
|
|
235
|
-
/**
|
|
236
|
+
/** SDK workflow-gate emitter, when a remote gate responder is connected. */
|
|
236
237
|
getWorkflowGateEmitter?: () => WorkflowGateEmitter | undefined;
|
|
237
238
|
/**
|
|
238
|
-
* Optional
|
|
239
|
-
* tool races the local UI selection against
|
|
240
|
-
* reply via the notifications SDK) so asks can be answered without RPC mode.
|
|
239
|
+
* Optional SDK-routed answer source for interactive asks. When present, the
|
|
240
|
+
* tool races the local UI selection against the remote SDK answer.
|
|
241
241
|
* No-op when undefined: the ask path behaves exactly as before.
|
|
242
242
|
*/
|
|
243
243
|
getAskAnswerSource?: () => AskAnswerSource | undefined;
|
|
@@ -11,6 +11,7 @@ import type { Component } from "@gajae-code/tui";
|
|
|
11
11
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
12
12
|
import type { Theme } from "../modes/theme/theme";
|
|
13
13
|
import { type SubagentToolDetails } from "./subagent";
|
|
14
|
+
export { subagentAwaitRenderedStateSignature } from "./subagent";
|
|
14
15
|
/** Test-only seam (PR3 deterministic cache-hit assertions). */
|
|
15
16
|
export declare const subagentBodyCacheTestHooks: {
|
|
16
17
|
readonly bodyRenders: number;
|
|
@@ -56,8 +56,13 @@ export interface SubagentSnapshot {
|
|
|
56
56
|
/** True when the requested model lacked credentials and fell back to the parent model. */
|
|
57
57
|
modelFellBack?: boolean;
|
|
58
58
|
}
|
|
59
|
+
export type SubagentAwaitOutcome = "completed" | "timed_out" | "interrupted";
|
|
59
60
|
export interface SubagentToolDetails {
|
|
60
61
|
subagents: SubagentSnapshot[];
|
|
62
|
+
/** Await outcome for a live await receipt; omitted when no wait was started. */
|
|
63
|
+
awaitOutcome?: SubagentAwaitOutcome;
|
|
64
|
+
/** True only when the parent await was interrupted; the child was not cancelled. */
|
|
65
|
+
interrupted?: true;
|
|
61
66
|
}
|
|
62
67
|
export declare class SubagentTool implements AgentTool<typeof subagentSchema, SubagentToolDetails> {
|
|
63
68
|
#private;
|
|
@@ -113,5 +118,5 @@ export declare class SubagentTool implements AgentTool<typeof subagentSchema, Su
|
|
|
113
118
|
* countdown ticking is sacrificed by design; every real transition still changes
|
|
114
119
|
* the signature.
|
|
115
120
|
*/
|
|
116
|
-
export declare function subagentAwaitRenderedStateSignature(subagents: readonly SubagentSnapshot[]): string;
|
|
121
|
+
export declare function subagentAwaitRenderedStateSignature(subagents: readonly SubagentSnapshot[], receipt?: Pick<SubagentToolDetails, "awaitOutcome" | "interrupted">): string;
|
|
117
122
|
export {};
|