@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
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ImageProtocol,
|
|
3
|
+
isUnderTerminalMultiplexer,
|
|
4
|
+
onImageProtocolChanged,
|
|
5
|
+
type SelectItem,
|
|
6
|
+
shouldProbeSixelCapability,
|
|
7
|
+
TERMINAL,
|
|
8
|
+
} from "@gajae-code/tui";
|
|
9
|
+
|
|
10
|
+
export type PetPixelProtocol = "sixel" | "kitty";
|
|
11
|
+
|
|
12
|
+
export const PET_UNAVAILABLE_DESCRIPTION = "Unavailable: requires compatible Kitty or Sixel overlay rendering";
|
|
13
|
+
export const PET_SAVED_UNAVAILABLE_DESCRIPTION =
|
|
14
|
+
"Saved, unavailable — requires compatible Kitty or Sixel overlay rendering";
|
|
15
|
+
export const PET_UNAVAILABLE_WARNING =
|
|
16
|
+
"⚠ Pets aren’t available in this terminal. Its image support isn’t compatible with Gajae Pet’s overlay rendering yet. Try Kitty, Ghostty, WezTerm, or a terminal with compatible Sixel support.";
|
|
17
|
+
const PET_MULTIPLEXER_UNAVAILABLE_WARNING =
|
|
18
|
+
"⚠ Gajae Pet graphics are unavailable inside tmux, screen, or zellij because image escapes are not forwarded end to end. Run gjc outside the multiplexer, or set PI_FORCE_IMAGE_PROTOCOL=sixel only when the full terminal chain supports Sixel.";
|
|
19
|
+
|
|
20
|
+
export function getPetUnavailableWarning(env: NodeJS.ProcessEnv = Bun.env): string {
|
|
21
|
+
return isUnderTerminalMultiplexer(env) ? PET_MULTIPLEXER_UNAVAILABLE_WARNING : PET_UNAVAILABLE_WARNING;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function getPetPixelProtocol(): PetPixelProtocol | null {
|
|
25
|
+
if (TERMINAL.imageProtocol === ImageProtocol.Kitty) return "kitty";
|
|
26
|
+
if (TERMINAL.imageProtocol === ImageProtocol.Sixel) return "sixel";
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function isPetAvailable(): boolean {
|
|
31
|
+
return getPetPixelProtocol() !== null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function createPetSelectItems(
|
|
35
|
+
options: ReadonlyArray<SelectItem>,
|
|
36
|
+
currentValue: string,
|
|
37
|
+
available: boolean,
|
|
38
|
+
): SelectItem[] {
|
|
39
|
+
return options.map(option => {
|
|
40
|
+
const disabled = !available && option.value !== "off";
|
|
41
|
+
const current = option.value === currentValue;
|
|
42
|
+
const savedUnavailable = disabled && current;
|
|
43
|
+
let description = `${option.description ?? ""}${current ? " (current)" : ""}`;
|
|
44
|
+
if (disabled) {
|
|
45
|
+
description = savedUnavailable ? PET_SAVED_UNAVAILABLE_DESCRIPTION : PET_UNAVAILABLE_DESCRIPTION;
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
...option,
|
|
49
|
+
label: savedUnavailable ? `${option.label} (saved)` : option.label,
|
|
50
|
+
description,
|
|
51
|
+
disabled,
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Grace period before declaring the terminal pet-incapable at startup. The
|
|
58
|
+
* asynchronous Sixel capability probe starts inside `TUI.start()` and answers
|
|
59
|
+
* within its own 250 ms deadline; this margin covers probe scheduling so a
|
|
60
|
+
* supported terminal is never told it is incompatible while the probe is
|
|
61
|
+
* still in flight.
|
|
62
|
+
*/
|
|
63
|
+
export const PET_CAPABILITY_SETTLE_MS = 1_000;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Whether the asynchronous startup Sixel capability probe may still enable
|
|
67
|
+
* graphics for this session, meaning current unavailability is not final.
|
|
68
|
+
*/
|
|
69
|
+
export function isPetCapabilityProbePending(
|
|
70
|
+
env: NodeJS.ProcessEnv = Bun.env,
|
|
71
|
+
platform: NodeJS.Platform = process.platform,
|
|
72
|
+
): boolean {
|
|
73
|
+
if (TERMINAL.imageProtocol !== null) return false;
|
|
74
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) return false;
|
|
75
|
+
return shouldProbeSixelCapability(env, platform);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Deliver the pet-unavailable startup warning only once the capability
|
|
80
|
+
* question is settled. With no probe pending, unavailability is final and
|
|
81
|
+
* `onUnavailable` fires immediately. While a probe may still enable
|
|
82
|
+
* graphics, the warning is deferred: a protocol-change event cancels it (the
|
|
83
|
+
* saved pet re-applies through the existing subscription), and only the
|
|
84
|
+
* settle deadline passing with the terminal still unavailable emits it.
|
|
85
|
+
* Returns a disposer that cancels the pending decision.
|
|
86
|
+
*/
|
|
87
|
+
export function warnWhenPetCapabilitySettled(options: {
|
|
88
|
+
probePending: boolean;
|
|
89
|
+
isAvailable?: () => boolean;
|
|
90
|
+
onUnavailable: () => void;
|
|
91
|
+
settleMs?: number;
|
|
92
|
+
}): () => void {
|
|
93
|
+
if (!options.probePending) {
|
|
94
|
+
options.onUnavailable();
|
|
95
|
+
return () => {};
|
|
96
|
+
}
|
|
97
|
+
const isAvailable = options.isAvailable ?? isPetAvailable;
|
|
98
|
+
let settled = false;
|
|
99
|
+
const finish = () => {
|
|
100
|
+
if (settled) return;
|
|
101
|
+
settled = true;
|
|
102
|
+
clearTimeout(timer);
|
|
103
|
+
unsubscribe();
|
|
104
|
+
};
|
|
105
|
+
const unsubscribe = onImageProtocolChanged(protocol => {
|
|
106
|
+
if (!protocol) return;
|
|
107
|
+
finish();
|
|
108
|
+
});
|
|
109
|
+
const timer = setTimeout(() => {
|
|
110
|
+
finish();
|
|
111
|
+
if (!isAvailable()) options.onUnavailable();
|
|
112
|
+
}, options.settleMs ?? PET_CAPABILITY_SETTLE_MS);
|
|
113
|
+
timer.unref?.();
|
|
114
|
+
return finish;
|
|
115
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Container, PET_SKIN_IDS, PET_SKINS,
|
|
1
|
+
import { Container, PET_SKIN_IDS, PET_SKINS, SelectList } from "@gajae-code/tui";
|
|
2
2
|
import { getSelectListTheme } from "../theme/theme";
|
|
3
3
|
import { DynamicBorder } from "./dynamic-border";
|
|
4
4
|
import type { PetMode } from "./gajae-pet-widget";
|
|
5
|
+
import { createPetSelectItems } from "./pet-capability";
|
|
5
6
|
|
|
6
7
|
const PET_OPTIONS: { value: PetMode; label: string; description: string }[] = [
|
|
7
8
|
{ value: "off", label: "Off", description: "No pet" },
|
|
@@ -24,14 +25,11 @@ export class PetSelectorComponent extends Container {
|
|
|
24
25
|
onSelect: (mode: PetMode) => void,
|
|
25
26
|
onCancel: () => void,
|
|
26
27
|
onPreview: (mode: PetMode) => void,
|
|
28
|
+
available: boolean,
|
|
27
29
|
) {
|
|
28
30
|
super();
|
|
29
31
|
|
|
30
|
-
const items
|
|
31
|
-
value: option.value,
|
|
32
|
-
label: option.label,
|
|
33
|
-
description: option.value === current ? `${option.description} (current)` : option.description,
|
|
34
|
-
}));
|
|
32
|
+
const items = createPetSelectItems(PET_OPTIONS, current, available);
|
|
35
33
|
|
|
36
34
|
this.addChild(new DynamicBorder());
|
|
37
35
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ThinkingLevel, type ThinkingLevel as ThinkingLevelValue } from "@gajae-code/agent-core";
|
|
2
2
|
import type { Effort } from "@gajae-code/ai";
|
|
3
3
|
import {
|
|
4
|
+
type Component,
|
|
4
5
|
Container,
|
|
5
6
|
Input,
|
|
6
7
|
matchesKey,
|
|
@@ -25,6 +26,11 @@ import { getCurrentThemeName, getSelectListTheme, getSettingsListTheme, theme }
|
|
|
25
26
|
import { matchesAppInterrupt } from "../../modes/utils/keybinding-matchers";
|
|
26
27
|
import { getTabBarTheme } from "../shared";
|
|
27
28
|
import { DynamicBorder } from "./dynamic-border";
|
|
29
|
+
import {
|
|
30
|
+
type NotificationsEditorOperations,
|
|
31
|
+
NotificationsSettingsEditorComponent,
|
|
32
|
+
} from "./notifications-settings-editor";
|
|
33
|
+
import { createPetSelectItems, getPetUnavailableWarning, isPetAvailable } from "./pet-capability";
|
|
28
34
|
import { handleInputOrEscape, PluginSettingsComponent } from "./plugin-settings";
|
|
29
35
|
import { getSettingsForTab, type SettingDef } from "./settings-defs";
|
|
30
36
|
import type { StatusLineSegmentOptions } from "./status-line";
|
|
@@ -661,6 +667,8 @@ export interface SettingsRuntimeContext {
|
|
|
661
667
|
availableModelProfiles: string[];
|
|
662
668
|
/** Working directory for plugins tab */
|
|
663
669
|
cwd: string;
|
|
670
|
+
/** Whether this terminal can render the pet overlay. */
|
|
671
|
+
petAvailable?: boolean;
|
|
664
672
|
}
|
|
665
673
|
|
|
666
674
|
/** Status line settings subset for preview */
|
|
@@ -684,6 +692,13 @@ export interface SettingsCallbacks {
|
|
|
684
692
|
onThemePreviewCancel?: (theme: string) => void | Promise<void>;
|
|
685
693
|
/** Called to live-preview the gajae pet skin while browsing the pet setting. */
|
|
686
694
|
onPetPreview?: (mode: string) => void;
|
|
695
|
+
/**
|
|
696
|
+
* Commit a pet mode through the shared result-returning policy. The policy
|
|
697
|
+
* rechecks capability immediately before mutation and owns persistence, so
|
|
698
|
+
* the settings surface never persists `pet.mode` ahead of acceptance.
|
|
699
|
+
* Returns whether the commit was accepted.
|
|
700
|
+
*/
|
|
701
|
+
onPetCommit?: (mode: string) => boolean;
|
|
687
702
|
/** Called for status line preview while configuring */
|
|
688
703
|
onStatusLinePreview?: (settings: StatusLinePreviewSettings) => void;
|
|
689
704
|
/** Get current rendered status line for inline preview */
|
|
@@ -702,6 +717,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
702
717
|
#tabBar: TabBar;
|
|
703
718
|
#currentList: SettingsList | null = null;
|
|
704
719
|
#pluginComponent: PluginSettingsComponent | null = null;
|
|
720
|
+
#notificationsEditor: NotificationsSettingsEditorComponent | null = null;
|
|
705
721
|
#statusPreviewContainer: Container | null = null;
|
|
706
722
|
#statusPreviewText: Text | null = null;
|
|
707
723
|
#currentTabId: SettingTab | "plugins" = "appearance";
|
|
@@ -710,6 +726,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
710
726
|
constructor(
|
|
711
727
|
private readonly context: SettingsRuntimeContext,
|
|
712
728
|
private readonly callbacks: SettingsCallbacks,
|
|
729
|
+
private readonly notificationsOperations?: NotificationsEditorOperations,
|
|
713
730
|
) {
|
|
714
731
|
super();
|
|
715
732
|
|
|
@@ -721,6 +738,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
721
738
|
this.#tabBar.onTabChange = () => {
|
|
722
739
|
this.#switchToTab(this.#tabBar.getActiveTab().id as SettingTab | "plugins");
|
|
723
740
|
};
|
|
741
|
+
|
|
724
742
|
this.addChild(this.#tabBar);
|
|
725
743
|
|
|
726
744
|
// Spacer after tab bar
|
|
@@ -734,6 +752,9 @@ export class SettingsSelectorComponent extends Container {
|
|
|
734
752
|
}
|
|
735
753
|
|
|
736
754
|
#switchToTab(tabId: SettingTab | "plugins"): void {
|
|
755
|
+
if (this.#currentTabId === "notifications" && tabId !== "notifications" && !this.#disposeNotificationsEditor()) {
|
|
756
|
+
return;
|
|
757
|
+
}
|
|
737
758
|
this.#currentTabId = tabId;
|
|
738
759
|
|
|
739
760
|
// Remove current content
|
|
@@ -757,6 +778,8 @@ export class SettingsSelectorComponent extends Container {
|
|
|
757
778
|
|
|
758
779
|
if (tabId === "plugins") {
|
|
759
780
|
this.#showPluginsTab();
|
|
781
|
+
} else if (tabId === "notifications") {
|
|
782
|
+
this.#showNotificationsTab();
|
|
760
783
|
} else {
|
|
761
784
|
this.#showSettingsTab(tabId);
|
|
762
785
|
}
|
|
@@ -765,6 +788,16 @@ export class SettingsSelectorComponent extends Container {
|
|
|
765
788
|
this.addChild(bottomBorder);
|
|
766
789
|
}
|
|
767
790
|
|
|
791
|
+
#disposeNotificationsEditor(): boolean {
|
|
792
|
+
const editor = this.#notificationsEditor;
|
|
793
|
+
if (!editor) return true;
|
|
794
|
+
if (editor.navigationLocked) return false;
|
|
795
|
+
editor.dispose();
|
|
796
|
+
this.removeChild(editor);
|
|
797
|
+
this.#notificationsEditor = null;
|
|
798
|
+
return true;
|
|
799
|
+
}
|
|
800
|
+
|
|
768
801
|
/**
|
|
769
802
|
* Convert a setting definition to a SettingItem for the UI.
|
|
770
803
|
*/
|
|
@@ -857,6 +890,14 @@ export class SettingsSelectorComponent extends Container {
|
|
|
857
890
|
if (def.path === "statusLine.preset") {
|
|
858
891
|
options = options.filter(option => option.value !== "custom");
|
|
859
892
|
}
|
|
893
|
+
let description = def.description;
|
|
894
|
+
if (def.path === "pet.mode") {
|
|
895
|
+
const petAvailable = this.context.petAvailable ?? isPetAvailable();
|
|
896
|
+
options = createPetSelectItems(options, currentValue, petAvailable);
|
|
897
|
+
// Unsupported terminals must see the same actionable guidance the
|
|
898
|
+
// startup notice and /pet show, not only dimmed option descriptions.
|
|
899
|
+
if (!petAvailable) description = getPetUnavailableWarning();
|
|
900
|
+
}
|
|
860
901
|
// Preview handlers
|
|
861
902
|
let onPreview: ((value: string) => void | Promise<void>) | undefined;
|
|
862
903
|
let onPreviewCancel: (() => void) | undefined;
|
|
@@ -943,10 +984,18 @@ export class SettingsSelectorComponent extends Container {
|
|
|
943
984
|
|
|
944
985
|
return new SelectSubmenu(
|
|
945
986
|
def.label,
|
|
946
|
-
|
|
987
|
+
description,
|
|
947
988
|
options,
|
|
948
989
|
currentValue,
|
|
949
990
|
value => {
|
|
991
|
+
if (def.path === "pet.mode") {
|
|
992
|
+
// The shared pet commit policy rechecks capability immediately
|
|
993
|
+
// before mutation and persists only on acceptance; the settings
|
|
994
|
+
// surface must not persist ahead of that result.
|
|
995
|
+
const accepted = this.callbacks.onPetCommit?.(value) ?? false;
|
|
996
|
+
done(accepted ? value : undefined);
|
|
997
|
+
return;
|
|
998
|
+
}
|
|
950
999
|
this.#setSettingValue(def.path, value);
|
|
951
1000
|
this.callbacks.onChange(def.path, value);
|
|
952
1001
|
done(value);
|
|
@@ -1007,6 +1056,14 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1007
1056
|
}
|
|
1008
1057
|
}
|
|
1009
1058
|
|
|
1059
|
+
#showNotificationsTab(): void {
|
|
1060
|
+
if (!this.notificationsOperations) return;
|
|
1061
|
+
this.#notificationsEditor = new NotificationsSettingsEditorComponent(this.notificationsOperations, {
|
|
1062
|
+
onCancel: () => this.callbacks.onCancel(),
|
|
1063
|
+
});
|
|
1064
|
+
this.addChild(this.#notificationsEditor);
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1010
1067
|
/**
|
|
1011
1068
|
* Show a settings tab using definitions.
|
|
1012
1069
|
*/
|
|
@@ -1171,21 +1228,39 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1171
1228
|
this.addChild(this.#pluginComponent);
|
|
1172
1229
|
}
|
|
1173
1230
|
|
|
1174
|
-
getFocusComponent():
|
|
1175
|
-
|
|
1176
|
-
|
|
1231
|
+
getFocusComponent(): Component {
|
|
1232
|
+
return (this.#currentList || this.#pluginComponent || this.#notificationsEditor)!;
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
override dispose(): void {
|
|
1236
|
+
if (this.#notificationsEditor?.navigationLocked) return;
|
|
1237
|
+
this.#notificationsEditor?.dispose();
|
|
1238
|
+
this.#notificationsEditor = null;
|
|
1239
|
+
super.dispose();
|
|
1177
1240
|
}
|
|
1178
1241
|
|
|
1179
1242
|
handleInput(data: string): void {
|
|
1243
|
+
const tabNavigation =
|
|
1244
|
+
matchesKey(data, "tab") ||
|
|
1245
|
+
matchesKey(data, "shift+tab") ||
|
|
1246
|
+
matchesKey(data, "left") ||
|
|
1247
|
+
matchesKey(data, "right");
|
|
1248
|
+
if (this.#notificationsEditor && this.#currentTabId === "notifications") {
|
|
1249
|
+
if (tabNavigation) {
|
|
1250
|
+
if (this.#notificationsEditor.navigationLocked) {
|
|
1251
|
+
this.#notificationsEditor.handleInput(data);
|
|
1252
|
+
return;
|
|
1253
|
+
}
|
|
1254
|
+
this.#tabBar.handleInput(data);
|
|
1255
|
+
return;
|
|
1256
|
+
}
|
|
1257
|
+
this.#notificationsEditor.handleInput(data);
|
|
1258
|
+
return;
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1180
1261
|
// Handle tab switching — but NOT when a text input is active, since
|
|
1181
1262
|
// arrow keys must reach the cursor and Tab must not switch tabs.
|
|
1182
|
-
if (
|
|
1183
|
-
!this.#textInputActive &&
|
|
1184
|
-
(matchesKey(data, "tab") ||
|
|
1185
|
-
matchesKey(data, "shift+tab") ||
|
|
1186
|
-
matchesKey(data, "left") ||
|
|
1187
|
-
matchesKey(data, "right"))
|
|
1188
|
-
) {
|
|
1263
|
+
if (!this.#textInputActive && tabNavigation) {
|
|
1189
1264
|
this.#tabBar.handleInput(data);
|
|
1190
1265
|
return;
|
|
1191
1266
|
}
|
|
@@ -10,7 +10,7 @@ export interface RecentSession {
|
|
|
10
10
|
|
|
11
11
|
export interface LspServerInfo {
|
|
12
12
|
name: string;
|
|
13
|
-
status: "ready" | "error" | "connecting";
|
|
13
|
+
status: "idle" | "ready" | "error" | "connecting";
|
|
14
14
|
fileTypes: string[];
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -172,9 +172,9 @@ export class WelcomeComponent implements Component {
|
|
|
172
172
|
const icon =
|
|
173
173
|
server.status === "ready"
|
|
174
174
|
? theme.styledSymbol("status.success", "success")
|
|
175
|
-
: server.status === "
|
|
176
|
-
? theme.styledSymbol("status.
|
|
177
|
-
: theme.styledSymbol("status.
|
|
175
|
+
: server.status === "error"
|
|
176
|
+
? theme.styledSymbol("status.error", "error")
|
|
177
|
+
: theme.styledSymbol("status.pending", "muted");
|
|
178
178
|
const exts = server.fileTypes.slice(0, 3).join(" ");
|
|
179
179
|
lspLines.push(` ${icon} ${theme.fg("muted", server.name)} ${theme.fg("dim", exts)}`);
|
|
180
180
|
}
|
|
@@ -450,8 +450,7 @@ export class CommandController {
|
|
|
450
450
|
if (this.ctx.lspServers && this.ctx.lspServers.length > 0) {
|
|
451
451
|
info += `\n${theme.bold("LSP Servers")}\n`;
|
|
452
452
|
for (const server of this.ctx.lspServers) {
|
|
453
|
-
const statusColor =
|
|
454
|
-
server.status === "ready" ? "success" : server.status === "connecting" ? "warning" : "error";
|
|
453
|
+
const statusColor = server.status === "ready" ? "success" : server.status === "error" ? "error" : "warning";
|
|
455
454
|
const statusText =
|
|
456
455
|
server.status === "error" && server.error ? `${server.status}: ${server.error}` : server.status;
|
|
457
456
|
info += `${theme.fg("dim", `${server.name}:`)} ${theme.fg(statusColor, statusText)} ${theme.fg("dim", `(${server.fileTypes.join(", ")})`)}\n`;
|
|
@@ -16,9 +16,9 @@ import { ToolExecutionComponent } from "../../modes/components/tool-execution";
|
|
|
16
16
|
import { TtsrNotificationComponent } from "../../modes/components/ttsr-notification";
|
|
17
17
|
import { getSymbolTheme, theme } from "../../modes/theme/theme";
|
|
18
18
|
import type { InteractiveModeContext, TodoPhase } from "../../modes/types";
|
|
19
|
-
import { completionNotifyDisabledByEnv } from "../../notifications/config";
|
|
20
|
-
import { summaryFromMessage } from "../../notifications/helpers";
|
|
21
19
|
import type { PlanApprovalDetails } from "../../plan-mode/approved-plan";
|
|
20
|
+
import { completionNotifyDisabledByEnv } from "../../sdk/bus/config";
|
|
21
|
+
import { summaryFromMessage } from "../../sdk/bus/helpers";
|
|
22
22
|
import type { AgentSessionEvent } from "../../session/agent-session";
|
|
23
23
|
import { type CustomMessage, isSilentAbort, readPendingDisplayTag } from "../../session/messages";
|
|
24
24
|
import { transferSessionMessageIdentity } from "../../session/session-manager";
|
|
@@ -135,14 +135,13 @@ export class EventController {
|
|
|
135
135
|
auto_compaction_end: e => this.#handleAutoCompactionEnd(e),
|
|
136
136
|
auto_retry_start: e => this.#handleAutoRetryStart(e),
|
|
137
137
|
auto_retry_end: e => this.#handleAutoRetryEnd(e),
|
|
138
|
-
retry_fallback_applied: e => this.#handleRetryFallbackApplied(e),
|
|
139
|
-
retry_fallback_succeeded: e => this.#handleRetryFallbackSucceeded(e),
|
|
140
138
|
ttsr_triggered: e => this.#handleTtsrTriggered(e),
|
|
141
139
|
todo_reminder: e => this.#handleTodoReminder(e),
|
|
142
140
|
todo_auto_clear: e => this.#handleTodoAutoClear(e),
|
|
143
141
|
irc_message: e => this.#handleIrcMessage(e),
|
|
144
142
|
subagent_steer_message: e => this.#handleSubagentSteerMessage(e),
|
|
145
143
|
notice: e => this.#handleNotice(e),
|
|
144
|
+
model_fallback_switched: e => this.#handleModelFallbackSwitched(e),
|
|
146
145
|
thinking_level_changed: async () => {},
|
|
147
146
|
goal_updated: async () => {},
|
|
148
147
|
} satisfies AgentSessionEventHandlers;
|
|
@@ -497,6 +496,14 @@ export class EventController {
|
|
|
497
496
|
this.ctx.ui.requestRender();
|
|
498
497
|
}
|
|
499
498
|
|
|
499
|
+
async #handleModelFallbackSwitched(
|
|
500
|
+
event: Extract<AgentSessionEvent, { type: "model_fallback_switched" }>,
|
|
501
|
+
): Promise<void> {
|
|
502
|
+
this.ctx.showStatus(`Fallback model: ${event.from} → ${event.to}`);
|
|
503
|
+
this.ctx.statusLine.invalidate();
|
|
504
|
+
this.ctx.ui.requestRender();
|
|
505
|
+
}
|
|
506
|
+
|
|
500
507
|
async #handleNotice(event: Extract<AgentSessionEvent, { type: "notice" }>): Promise<void> {
|
|
501
508
|
const message = event.source ? `${event.source}: ${event.message}` : event.message;
|
|
502
509
|
if (event.level === "error") {
|
|
@@ -977,18 +984,6 @@ export class EventController {
|
|
|
977
984
|
this.ctx.ui.requestRender();
|
|
978
985
|
}
|
|
979
986
|
|
|
980
|
-
async #handleRetryFallbackApplied(
|
|
981
|
-
event: Extract<AgentSessionEvent, { type: "retry_fallback_applied" }>,
|
|
982
|
-
): Promise<void> {
|
|
983
|
-
this.ctx.showWarning(`Fallback: ${event.from} -> ${event.to}`);
|
|
984
|
-
}
|
|
985
|
-
|
|
986
|
-
async #handleRetryFallbackSucceeded(
|
|
987
|
-
event: Extract<AgentSessionEvent, { type: "retry_fallback_succeeded" }>,
|
|
988
|
-
): Promise<void> {
|
|
989
|
-
this.ctx.showStatus(`Fallback succeeded on ${event.model}`);
|
|
990
|
-
}
|
|
991
|
-
|
|
992
987
|
async #handleTtsrTriggered(event: Extract<AgentSessionEvent, { type: "ttsr_triggered" }>): Promise<void> {
|
|
993
988
|
const component = new TtsrNotificationComponent(event.rules);
|
|
994
989
|
component.setExpanded(this.ctx.toolOutputExpanded);
|