@gajae-code/coding-agent 0.13.3 → 0.14.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 +184 -2
- package/README.md +2 -0
- package/bin/gajaessi.js +4 -0
- package/dist/types/async/job-manager.d.ts +55 -2
- package/dist/types/async/support.d.ts +14 -0
- package/dist/types/capability/mcp.d.ts +6 -0
- package/dist/types/capability/types.d.ts +6 -0
- package/dist/types/cli/accounts-cli.d.ts +19 -0
- package/dist/types/cli/args.d.ts +3 -0
- package/dist/types/cli/config-cli.d.ts +6 -0
- package/dist/types/cli/crash-cli.d.ts +10 -0
- package/dist/types/cli/customize-doctor.d.ts +145 -0
- package/dist/types/cli/daemon-cli.d.ts +3 -1
- package/dist/types/cli/mcp-cli.d.ts +11 -0
- package/dist/types/cli/notify-cli.d.ts +1 -1
- package/dist/types/cli/root-flags.d.ts +12 -0
- package/dist/types/cli/setup-cli.d.ts +3 -1
- package/dist/types/cli/skills-cli.d.ts +2 -1
- package/dist/types/cli/update-cli.d.ts +19 -1
- package/dist/types/cli.d.ts +6 -0
- package/dist/types/commands/accounts.d.ts +40 -0
- package/dist/types/commands/crash.d.ts +24 -0
- package/dist/types/commands/customize.d.ts +22 -0
- package/dist/types/commands/daemon.d.ts +1 -1
- package/dist/types/commands/launch.d.ts +6 -0
- package/dist/types/commands/setup.d.ts +6 -0
- package/dist/types/commands/skills.d.ts +6 -1
- package/dist/types/commands/update.d.ts +7 -0
- package/dist/types/config/atomic-yaml-patch-worker.d.ts +25 -0
- package/dist/types/config/atomic-yaml-patch.d.ts +62 -2
- package/dist/types/config/config-schema-version.d.ts +10 -0
- package/dist/types/config/file-lock.d.ts +18 -0
- package/dist/types/config/model-profile-activation.d.ts +3 -1
- package/dist/types/config/model-registry.d.ts +9 -1
- package/dist/types/config/models-config-schema.d.ts +2 -0
- package/dist/types/config/settings-schema.d.ts +70 -6
- package/dist/types/config/settings.d.ts +63 -0
- package/dist/types/config/skill-settings-defaults.d.ts +26 -0
- package/dist/types/config/task-delegation.d.ts +39 -0
- package/dist/types/config/update-channel.d.ts +10 -0
- package/dist/types/coordinator-mcp/server.d.ts +5 -1
- package/dist/types/crash/index-store.d.ts +87 -0
- package/dist/types/crash/nudge.d.ts +50 -0
- package/dist/types/crash/record-loader.d.ts +17 -0
- package/dist/types/crash/report.d.ts +134 -0
- package/dist/types/crash/sanitize.d.ts +25 -0
- package/dist/types/cursor.d.ts +13 -2
- package/dist/types/customization/import.d.ts +37 -0
- package/dist/types/customization/index.d.ts +4 -0
- package/dist/types/customization/inventory.d.ts +25 -0
- package/dist/types/customization/mutations.d.ts +32 -0
- package/dist/types/customization/types.d.ts +115 -0
- package/dist/types/daemon/control-types.d.ts +8 -1
- package/dist/types/daemon/operator-contract.d.ts +4 -4
- package/dist/types/discovery/claude.d.ts +39 -1
- package/dist/types/discovery/codex.d.ts +39 -1
- package/dist/types/discovery/index.d.ts +2 -0
- package/dist/types/discovery/mcp-compat.d.ts +30 -0
- package/dist/types/edit/renderer.d.ts +23 -0
- package/dist/types/extensibility/extensions/runner.d.ts +3 -0
- package/dist/types/extensibility/extensions/types.d.ts +21 -4
- package/dist/types/extensibility/gjc-plugins/observability.d.ts +6 -1
- package/dist/types/extensibility/gjc-plugins/registry.d.ts +8 -1
- package/dist/types/extensibility/hooks/loader.d.ts +19 -5
- package/dist/types/extensibility/runtime-skill-discovery.d.ts +22 -1
- package/dist/types/extensibility/skill-management.d.ts +107 -0
- package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +3 -1
- package/dist/types/gjc-runtime/launch-worktree.d.ts +8 -0
- package/dist/types/gjc-runtime/linux-proc.d.ts +3 -0
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +10 -6
- package/dist/types/gjc-runtime/session-state-lock.d.ts +104 -0
- package/dist/types/gjc-runtime/session-state-sidecar.d.ts +120 -2
- package/dist/types/gjc-runtime/state-writer.d.ts +10 -1
- package/dist/types/gjc-runtime/ultragoal-guard.d.ts +4 -2
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -6
- package/dist/types/gjc-runtime/workflow-settings.d.ts +109 -0
- package/dist/types/hooks/events.d.ts +60 -0
- package/dist/types/hooks/normalize.d.ts +83 -0
- package/dist/types/hooks/skill-state.d.ts +9 -2
- package/dist/types/main.d.ts +1 -1
- package/dist/types/modes/acp/abort-scope.d.ts +13 -0
- package/dist/types/modes/acp/acp-agent.d.ts +7 -4
- package/dist/types/modes/components/customization/customization-dashboard.d.ts +44 -0
- package/dist/types/modes/components/customization/import-wizard.d.ts +21 -0
- package/dist/types/modes/components/customization/index.d.ts +1 -0
- package/dist/types/modes/components/gajae-pet-widget.d.ts +8 -30
- package/dist/types/modes/components/irc-sidebar.d.ts +1 -0
- package/dist/types/modes/components/iterm-pet-transport.d.ts +122 -0
- package/dist/types/modes/components/oauth-selector.d.ts +10 -4
- package/dist/types/modes/components/pet-capability.d.ts +11 -25
- package/dist/types/modes/components/status-line/gh.d.ts +6 -2
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -1
- package/dist/types/modes/controllers/selector-controller.d.ts +7 -8
- package/dist/types/modes/controllers/stt-controller.d.ts +1 -1
- package/dist/types/modes/interactive-mode.d.ts +1 -0
- package/dist/types/modes/types.d.ts +1 -0
- package/dist/types/modes/utils/injected-user-submission.d.ts +10 -0
- package/dist/types/runtime-mcp/config.d.ts +9 -0
- package/dist/types/runtime-mcp/manager.d.ts +26 -1
- package/dist/types/runtime-mcp/oauth-discovery.d.ts +4 -0
- package/dist/types/runtime-mcp/oauth-flow.d.ts +24 -1
- package/dist/types/runtime-mcp/pool-key.d.ts +2 -0
- package/dist/types/runtime-mcp/protocol.d.ts +278 -0
- package/dist/types/runtime-mcp/scope-config.d.ts +29 -0
- package/dist/types/runtime-mcp/tool-bridge.d.ts +15 -13
- package/dist/types/runtime-mcp/transports/http.d.ts +9 -0
- package/dist/types/runtime-mcp/types.d.ts +102 -10
- package/dist/types/sdk/acp/adapter.d.ts +26 -5
- package/dist/types/sdk/broker/broker.d.ts +3 -55
- package/dist/types/sdk/broker/lifecycle.d.ts +18 -12
- package/dist/types/sdk/broker/session-index.d.ts +14 -5
- package/dist/types/sdk/broker/startup-failure.d.ts +16 -1
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +51 -1
- package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +4 -41
- package/dist/types/sdk/bus/config.d.ts +11 -0
- package/dist/types/sdk/bus/conversation-store.d.ts +0 -1
- package/dist/types/sdk/bus/daemon-paths.d.ts +6 -0
- package/dist/types/sdk/bus/discord-conversation.d.ts +2 -0
- package/dist/types/sdk/bus/discord-daemon.d.ts +17 -12
- package/dist/types/sdk/bus/existing-thread-readiness.d.ts +4 -34
- package/dist/types/sdk/bus/inbound-reaction-ordering.d.ts +61 -0
- package/dist/types/sdk/bus/index.d.ts +85 -99
- package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +29 -7
- package/dist/types/sdk/bus/managed-daemon.d.ts +2 -32
- package/dist/types/sdk/bus/notification-service.d.ts +52 -0
- package/dist/types/sdk/bus/operator-runtime.d.ts +1 -1
- package/dist/types/sdk/bus/prompt-reconciliation.d.ts +16 -5
- package/dist/types/sdk/bus/reconciliation-store.d.ts +113 -5
- package/dist/types/sdk/bus/session-control.d.ts +25 -1
- package/dist/types/sdk/bus/slack-conversation.d.ts +4 -0
- package/dist/types/sdk/bus/slack-daemon.d.ts +9 -17
- package/dist/types/sdk/bus/slack-live-provider.d.ts +3 -1
- package/dist/types/sdk/bus/slack-provider.d.ts +4 -0
- package/dist/types/sdk/bus/slack-thread-binding.d.ts +6 -40
- package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +30 -104
- package/dist/types/sdk/bus/telegram-daemon-cli.d.ts +10 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +262 -19
- package/dist/types/sdk/bus/telegram-daemon-orphan-reap.d.ts +125 -0
- package/dist/types/sdk/bus/telegram-daemon-owner-registry.d.ts +22 -0
- package/dist/types/sdk/bus/telegram-daemon.d.ts +119 -310
- package/dist/types/sdk/bus/telegram-reference.d.ts +1 -47
- package/dist/types/sdk/bus/threaded-render.d.ts +1 -0
- package/dist/types/sdk/bus/topic-registry.d.ts +33 -17
- package/dist/types/sdk/cli/rows.d.ts +2 -11
- package/dist/types/sdk/cli/session-cli.d.ts +15 -25
- package/dist/types/sdk/client/client.d.ts +97 -1
- package/dist/types/sdk/host/control/dispatch.d.ts +0 -7
- package/dist/types/sdk/host/control/index.d.ts +1 -1
- package/dist/types/sdk/host/control/operations.d.ts +18 -5
- package/dist/types/sdk/host/control/runtime-gate.d.ts +19 -0
- package/dist/types/sdk/host/host.d.ts +15 -1
- package/dist/types/sdk/host/query/handlers.d.ts +5 -0
- package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
- package/dist/types/sdk/host/session-runtime.d.ts +127 -7
- package/dist/types/sdk/host/types.d.ts +1 -1
- package/dist/types/sdk/host/websocket-transport.d.ts +1 -1
- package/dist/types/sdk/index.d.ts +2 -1
- package/dist/types/sdk/lifecycle/broker-client.d.ts +8 -0
- package/dist/types/sdk/lifecycle/client.d.ts +59 -0
- package/dist/types/sdk/lifecycle/index.d.ts +3 -0
- package/dist/types/sdk/lifecycle/service.d.ts +232 -0
- package/dist/types/sdk/mcp/server.d.ts +9 -6
- package/dist/types/sdk/prompt-deadline-lease.d.ts +43 -0
- package/dist/types/sdk/prompt-deadline-manager.d.ts +28 -0
- package/dist/types/sdk/prompt-status.d.ts +10 -3
- package/dist/types/sdk/protocol/operation-registry.d.ts +5 -0
- package/dist/types/sdk/receipt-state.d.ts +17 -0
- package/dist/types/sdk/reconciliation-extensions.d.ts +2 -0
- package/dist/types/sdk/router/index.d.ts +1 -0
- package/dist/types/sdk/router/session-router.d.ts +152 -0
- package/dist/types/sdk/session-list.d.ts +22 -0
- package/dist/types/sdk/session-reconnect.d.ts +43 -1
- package/dist/types/sdk/session.d.ts +34 -1
- package/dist/types/sdk/transport/serve-cli.d.ts +1 -4
- package/dist/types/session/account-inventory.d.ts +86 -0
- package/dist/types/session/agent-session.d.ts +145 -6
- package/dist/types/session/agent-storage.d.ts +10 -0
- package/dist/types/session/coordinator-tool-label.d.ts +28 -0
- package/dist/types/session/internal/managed-session-storage.d.ts +23 -4
- package/dist/types/session/messages.d.ts +1 -1
- package/dist/types/session/secure-token-file.d.ts +3 -0
- package/dist/types/session/session-manager.d.ts +40 -1
- package/dist/types/session/startup-auth-config.d.ts +44 -0
- package/dist/types/session/terminal-abort.d.ts +378 -0
- package/dist/types/session/yield-queue.d.ts +7 -0
- package/dist/types/session-import/claude.d.ts +26 -0
- package/dist/types/session-import/codex.d.ts +88 -0
- package/dist/types/session-import/command.d.ts +35 -0
- package/dist/types/session-import/detect.d.ts +22 -0
- package/dist/types/session-import/index.d.ts +7 -0
- package/dist/types/session-import/provider-codex.d.ts +22 -0
- package/dist/types/session-import/provider-service.d.ts +38 -0
- package/dist/types/session-import/redact.d.ts +23 -0
- package/dist/types/session-import/service.d.ts +47 -0
- package/dist/types/session-import/types.d.ts +120 -0
- package/dist/types/setup/paseo/check.d.ts +16 -0
- package/dist/types/setup/paseo/install-saga.d.ts +115 -0
- package/dist/types/setup/paseo/json-publisher.d.ts +76 -0
- package/dist/types/setup/paseo/orchestration-preferences.d.ts +24 -0
- package/dist/types/setup/paseo/paseo-ownership.d.ts +87 -0
- package/dist/types/setup/paseo/paseo-setup.d.ts +29 -0
- package/dist/types/setup/paseo/provider-config.d.ts +35 -0
- package/dist/types/setup/paseo/remove.d.ts +14 -0
- package/dist/types/setup/paseo/result-types.d.ts +59 -0
- package/dist/types/setup/paseo/setup-deps.d.ts +73 -0
- package/dist/types/setup/paseo/skills-bridge.d.ts +44 -0
- package/dist/types/skill-state/active-state.d.ts +5 -1
- package/dist/types/slash-commands/acp-builtins.d.ts +5 -1
- package/dist/types/slash-commands/builtin-registry.d.ts +2 -0
- package/dist/types/slash-commands/helpers/credential-switch.d.ts +12 -0
- package/dist/types/slash-commands/helpers/usage-report.d.ts +5 -6
- package/dist/types/slash-commands/types.d.ts +7 -1
- package/dist/types/task/executor.d.ts +10 -0
- package/dist/types/task/index.d.ts +3 -1
- package/dist/types/tools/ask-answer-registry.d.ts +6 -3
- package/dist/types/tools/bash-sleep-advisory.d.ts +14 -0
- package/dist/types/tools/bash.d.ts +2 -6
- package/dist/types/tools/browser/attach.d.ts +11 -0
- package/dist/types/tools/browser/launch.d.ts +20 -0
- package/dist/types/tools/browser/profile-discovery.d.ts +6 -0
- package/dist/types/tools/browser/render.d.ts +1 -0
- package/dist/types/tools/browser.d.ts +3 -1
- package/dist/types/tools/image-gen.d.ts +9 -2
- package/dist/types/tools/index.d.ts +8 -0
- package/dist/types/tools/monitor.d.ts +1 -1
- package/dist/types/tools/skill-discovery.d.ts +8 -1
- package/dist/types/tools/subagent.d.ts +2 -0
- package/dist/types/tools/ultragoal-ask-guard.d.ts +2 -2
- package/dist/types/utils/herdr-pane.d.ts +76 -0
- package/package.json +19 -9
- package/scripts/build-binary.ts +2 -1
- package/scripts/build-sdk-package-smoke.ts +2 -13
- package/scripts/capture-sticky-viewport-showcase.ts +0 -1
- package/scripts/compile-args.ts +2 -0
- package/scripts/generate-sdk-adapter-parity-manifest.ts +31 -16
- package/scripts/generate-sdk-operation-inventory.ts +28 -0
- package/scripts/generate-telegram-baseline-manifest.ts +1 -0
- package/scripts/generate-tool-catalog.ts +6 -4
- package/scripts/verify-gjc-sdk-canonicalization.ts +5 -39
- package/src/async/job-manager.ts +352 -17
- package/src/async/support.ts +25 -0
- package/src/autoresearch/dashboard.ts +28 -13
- package/src/capability/index.ts +3 -1
- package/src/capability/mcp.ts +6 -0
- package/src/capability/types.ts +6 -0
- package/src/cli/accounts-cli.ts +395 -0
- package/src/cli/args.ts +23 -0
- package/src/cli/auth-broker-cli.ts +136 -66
- package/src/cli/auth-gateway-cli.ts +94 -70
- package/src/cli/config-cli.ts +27 -2
- package/src/cli/crash-cli.ts +78 -0
- package/src/cli/customize-doctor.ts +1605 -0
- package/src/cli/daemon-cli.ts +12 -3
- package/src/cli/fast-help.ts +1 -0
- package/src/cli/mcp-cli.ts +128 -60
- package/src/cli/notify-cli.ts +8 -14
- package/src/cli/root-flags.ts +8 -0
- package/src/cli/setup-cli.ts +145 -0
- package/src/cli/skills-cli.ts +38 -2
- package/src/cli/update-cli.ts +167 -12
- package/src/cli.ts +4 -0
- package/src/commands/accounts.ts +71 -0
- package/src/commands/crash.ts +35 -0
- package/src/commands/customize.ts +84 -0
- package/src/commands/daemon.ts +2 -2
- package/src/commands/deep-interview.ts +2 -0
- package/src/commands/launch.ts +1 -0
- package/src/commands/mcp.ts +12 -7
- package/src/commands/ralplan.ts +2 -0
- package/src/commands/sdk.ts +65 -32
- package/src/commands/setup.ts +5 -0
- package/src/commands/skills.ts +14 -4
- package/src/commands/ultragoal.ts +10 -1
- package/src/commands/update.ts +26 -15
- package/src/config/atomic-yaml-patch-worker.ts +57 -0
- package/src/config/atomic-yaml-patch.ts +769 -29
- package/src/config/config-schema-version.ts +10 -0
- package/src/config/file-lock.ts +70 -1
- package/src/config/mcp-schema.json +52 -14
- package/src/config/model-profile-activation.ts +20 -1
- package/src/config/model-profiles.ts +29 -19
- package/src/config/model-registry.ts +132 -21
- package/src/config/models-config-schema.ts +1 -1
- package/src/config/settings-schema.ts +76 -6
- package/src/config/settings.ts +4038 -199
- package/src/config/skill-settings-defaults.ts +41 -3
- package/src/config/task-delegation.ts +87 -0
- package/src/config/update-channel.ts +23 -0
- package/src/coordinator-mcp/server.ts +377 -308
- package/src/crash/index-store.ts +723 -0
- package/src/crash/nudge.ts +89 -0
- package/src/crash/record-loader.ts +149 -0
- package/src/crash/report.ts +551 -0
- package/src/crash/sanitize.ts +129 -0
- package/src/cursor.ts +36 -10
- package/src/customization/import.ts +946 -0
- package/src/customization/index.ts +4 -0
- package/src/customization/inventory.ts +335 -0
- package/src/customization/mutations.ts +141 -0
- package/src/customization/types.ts +223 -0
- package/src/daemon/control-types.ts +8 -1
- package/src/daemon/operator-contract.ts +6 -6
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +11 -22
- package/src/defaults/gjc/skills/ralplan/SKILL.md +36 -23
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +16 -0
- package/src/discovery/claude-hooks.ts +38 -0
- package/src/discovery/claude.ts +142 -209
- package/src/discovery/codex-hooks.ts +38 -0
- package/src/discovery/codex.ts +132 -198
- package/src/discovery/helpers.ts +8 -1
- package/src/discovery/index.ts +2 -0
- package/src/discovery/mcp-compat.ts +234 -0
- package/src/discovery/mcp-json.ts +6 -0
- package/src/edit/renderer.ts +40 -0
- package/src/edit/streaming.ts +4 -2
- package/src/exec/bash-executor.ts +24 -20
- package/src/export/html/index.ts +51 -2
- package/src/extensibility/extensions/loader.ts +9 -1
- package/src/extensibility/extensions/runner.ts +17 -4
- package/src/extensibility/extensions/types.ts +31 -6
- package/src/extensibility/gjc-plugins/constrained-hooks.ts +33 -0
- package/src/extensibility/gjc-plugins/installer.ts +9 -5
- package/src/extensibility/gjc-plugins/observability.ts +8 -2
- package/src/extensibility/gjc-plugins/registry.ts +13 -2
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +3 -1
- package/src/extensibility/gjc-plugins/schema.ts +222 -39
- package/src/extensibility/hooks/loader.ts +154 -10
- package/src/extensibility/runtime-skill-discovery.ts +257 -60
- package/src/extensibility/skill-management.ts +368 -0
- package/src/extensibility/skills.ts +52 -16
- package/src/gjc-runtime/deep-interview-runtime.ts +45 -61
- package/src/gjc-runtime/launch-worktree.ts +56 -2
- package/src/gjc-runtime/linux-proc.ts +7 -1
- package/src/gjc-runtime/ralplan-runtime.ts +100 -164
- package/src/gjc-runtime/session-state-lock.ts +992 -0
- package/src/gjc-runtime/session-state-sidecar.ts +644 -142
- package/src/gjc-runtime/state-writer.ts +39 -14
- package/src/gjc-runtime/tmux-owner-isolation.ts +5 -4
- package/src/gjc-runtime/ultragoal-guard.ts +11 -4
- package/src/gjc-runtime/ultragoal-runtime.ts +44 -41
- package/src/gjc-runtime/workflow-settings.ts +596 -0
- package/src/goals/tools/goal-tool.ts +6 -1
- package/src/hooks/events.ts +291 -0
- package/src/hooks/native-skill-hook.ts +4 -0
- package/src/hooks/normalize.ts +369 -0
- package/src/hooks/skill-state.ts +165 -46
- package/src/internal-urls/docs-index.generated.ts +40 -32
- package/src/main.ts +32 -5
- package/src/migrate/mcp-mapper.ts +25 -2
- package/src/modes/acp/abort-scope.ts +29 -0
- package/src/modes/acp/acp-agent.ts +423 -98
- package/src/modes/components/assistant-message.ts +6 -1
- package/src/modes/components/customization/customization-dashboard.ts +443 -0
- package/src/modes/components/customization/import-wizard.ts +372 -0
- package/src/modes/components/customization/index.ts +1 -0
- package/src/modes/components/gajae-pet-widget.ts +539 -213
- package/src/modes/components/irc-sidebar.ts +11 -0
- package/src/modes/components/iterm-pet-transport.ts +585 -0
- package/src/modes/components/oauth-selector.ts +277 -86
- package/src/modes/components/pet-capability.ts +39 -40
- package/src/modes/components/settings-selector.ts +9 -0
- package/src/modes/components/status-line/gh.ts +45 -1
- package/src/modes/components/status-line/segments.ts +16 -1
- package/src/modes/components/tool-status-header.ts +13 -3
- package/src/modes/controllers/command-controller.ts +20 -8
- package/src/modes/controllers/extension-ui-controller.ts +56 -257
- package/src/modes/controllers/input-controller.ts +10 -0
- package/src/modes/controllers/runtime-mcp-command-controller.ts +16 -3
- package/src/modes/controllers/selector-controller.ts +177 -72
- package/src/modes/controllers/stt-controller.ts +3 -3
- package/src/modes/interactive-mode.ts +88 -16
- package/src/modes/print-mode.ts +35 -6
- package/src/modes/runtime-init.ts +21 -68
- package/src/modes/types.ts +1 -0
- package/src/modes/utils/injected-user-submission.ts +25 -0
- package/src/modes/utils/terminal-bell.ts +15 -1
- package/src/prompts/agent-fragments/ralplan-persistence.md +1 -1
- package/src/prompts/agent-fragments/restricted-bash.md +1 -1
- package/src/prompts/agents/critic.md +1 -1
- package/src/prompts/system/rlm-research.md +1 -1
- package/src/prompts/system/system-prompt.md +0 -2
- package/src/prompts/tools/bash.md +7 -1
- package/src/prompts/tools/browser.md +1 -1
- package/src/prompts/tools/cron.md +6 -6
- package/src/prompts/tools/read.md +0 -2
- package/src/prompts/tools/skill-discovery.md +4 -2
- package/src/runtime-mcp/client.ts +427 -23
- package/src/runtime-mcp/config.ts +37 -5
- package/src/runtime-mcp/manager-pool.test.ts +56 -0
- package/src/runtime-mcp/manager.ts +52 -2
- package/src/runtime-mcp/oauth-discovery.ts +13 -0
- package/src/runtime-mcp/oauth-flow.ts +46 -1
- package/src/runtime-mcp/pool-key.ts +5 -1
- package/src/runtime-mcp/pool.test.ts +9 -0
- package/src/runtime-mcp/protocol.test.ts +353 -0
- package/src/runtime-mcp/protocol.ts +624 -0
- package/src/runtime-mcp/scope-config.ts +78 -0
- package/src/runtime-mcp/tool-bridge.ts +44 -10
- package/src/runtime-mcp/transports/http.ts +84 -13
- package/src/runtime-mcp/types.ts +123 -12
- package/src/sdk/acp/adapter.ts +328 -97
- package/src/sdk/broker/broker.ts +160 -741
- package/src/sdk/broker/ensure.ts +9 -1
- package/src/sdk/broker/lifecycle.ts +510 -116
- package/src/sdk/broker/operation-receipt-ledger.ts +11 -2
- package/src/sdk/broker/process-incarnation.ts +19 -0
- package/src/sdk/broker/session-index.ts +516 -117
- package/src/sdk/broker/startup-failure.ts +28 -5
- package/src/sdk/broker/transport.ts +1 -13
- package/src/sdk/bus/chat-daemon-cli.ts +4 -2
- package/src/sdk/bus/chat-daemon-control.ts +67 -6
- package/src/sdk/bus/chat-daemon-runtime.ts +183 -859
- package/src/sdk/bus/config.ts +13 -0
- package/src/sdk/bus/conversation-store.ts +59 -171
- package/src/sdk/bus/daemon-paths.ts +20 -0
- package/src/sdk/bus/discord-conversation.ts +2 -0
- package/src/sdk/bus/discord-daemon.ts +524 -126
- package/src/sdk/bus/discord-live-provider.ts +206 -79
- package/src/sdk/bus/existing-thread-readiness.ts +4 -97
- package/src/sdk/bus/inbound-reaction-ordering.ts +122 -0
- package/src/sdk/bus/index.ts +2480 -456
- package/src/sdk/bus/kind-aware-reconciliation.ts +204 -34
- package/src/sdk/bus/lifecycle-commands.ts +2 -2
- package/src/sdk/bus/managed-daemon.ts +2 -145
- package/src/sdk/bus/notification-service.ts +196 -0
- package/src/sdk/bus/operator-runtime.ts +1 -1
- package/src/sdk/bus/prompt-reconciliation.ts +24 -15
- package/src/sdk/bus/reconciliation-store.ts +553 -24
- package/src/sdk/bus/session-control.ts +49 -3
- package/src/sdk/bus/slack-conversation.ts +4 -0
- package/src/sdk/bus/slack-daemon.ts +733 -134
- package/src/sdk/bus/slack-live-provider.ts +65 -15
- package/src/sdk/bus/slack-provider.ts +4 -0
- package/src/sdk/bus/slack-thread-binding.ts +9 -104
- package/src/sdk/bus/telegram-adoption-intent.ts +299 -209
- package/src/sdk/bus/telegram-daemon-cli.ts +194 -7
- package/src/sdk/bus/telegram-daemon-contract.ts +265 -19
- package/src/sdk/bus/telegram-daemon-control.ts +3 -13
- package/src/sdk/bus/telegram-daemon-orphan-reap.ts +498 -0
- package/src/sdk/bus/telegram-daemon-owner-registry.ts +176 -0
- package/src/sdk/bus/telegram-daemon.ts +2552 -2280
- package/src/sdk/bus/telegram-reference.ts +1 -226
- package/src/sdk/bus/telegram-setup.ts +2 -2
- package/src/sdk/bus/threaded-render.ts +1 -0
- package/src/sdk/bus/topic-registry.ts +279 -146
- package/src/sdk/cli/rows.ts +2 -35
- package/src/sdk/cli/session-cli.ts +776 -700
- package/src/sdk/client/client.ts +892 -1
- package/src/sdk/host/control/dispatch.ts +93 -58
- package/src/sdk/host/control/index.ts +1 -1
- package/src/sdk/host/control/operations.ts +18 -10
- package/src/sdk/host/control/runtime-gate.ts +40 -0
- package/src/sdk/host/host.ts +63 -12
- package/src/sdk/host/query/handlers.ts +66 -7
- package/src/sdk/host/reverse-leases.ts +2 -2
- package/src/sdk/host/sdk-surface-parity.test.ts +1 -1
- package/src/sdk/host/session-runtime.test.ts +2787 -34
- package/src/sdk/host/session-runtime.ts +1489 -101
- package/src/sdk/host/surface-policy.ts +12 -8
- package/src/sdk/host/types.ts +1 -1
- package/src/sdk/host/websocket-transport.lifecycle.test.ts +31 -59
- package/src/sdk/host/websocket-transport.ts +85 -50
- package/src/sdk/index.ts +2 -1
- package/src/sdk/lifecycle/broker-client.ts +53 -0
- package/src/sdk/lifecycle/client.ts +234 -0
- package/src/sdk/lifecycle/index.ts +3 -0
- package/src/sdk/{bus/recent-activity.ts → lifecycle/recent-sessions.ts} +5 -2
- package/src/sdk/lifecycle/service.ts +720 -0
- package/src/sdk/mcp/server.ts +226 -188
- package/src/sdk/prompt-deadline-lease.ts +55 -0
- package/src/sdk/prompt-deadline-manager.ts +148 -0
- package/src/sdk/prompt-status.ts +11 -3
- package/src/sdk/protocol/operation-inventory.generated.json +272 -129
- package/src/sdk/protocol/operation-registry.ts +71 -8
- package/src/sdk/receipt-state.ts +43 -0
- package/src/sdk/reconciliation-extensions.ts +14 -0
- package/src/sdk/router/index.ts +1 -0
- package/src/sdk/router/session-router.ts +1658 -0
- package/src/sdk/session-list.ts +93 -0
- package/src/sdk/session-reconnect.ts +45 -1
- package/src/sdk/session.ts +716 -120
- package/src/sdk/transport/serve-cli.ts +18 -34
- package/src/session/account-inventory.ts +603 -0
- package/src/session/agent-session.ts +2857 -582
- package/src/session/agent-storage.ts +35 -0
- package/src/session/blob-store.ts +32 -1
- package/src/session/coordinator-tool-label.ts +40 -0
- package/src/session/internal/managed-session-scope.ts +4 -0
- package/src/session/internal/managed-session-storage.ts +173 -12
- package/src/session/messages.ts +1 -1
- package/src/session/secure-token-file.ts +80 -0
- package/src/session/session-manager.ts +730 -58
- package/src/session/session-storage.ts +25 -16
- package/src/session/startup-auth-config.ts +297 -0
- package/src/session/terminal-abort.ts +1253 -0
- package/src/session/yield-queue.ts +57 -15
- package/src/session-import/claude.ts +334 -0
- package/src/session-import/codex.ts +1033 -0
- package/src/session-import/command.ts +77 -0
- package/src/session-import/detect.ts +133 -0
- package/src/session-import/index.ts +7 -0
- package/src/session-import/provider-codex.ts +327 -0
- package/src/session-import/provider-service.ts +457 -0
- package/src/session-import/redact.ts +128 -0
- package/src/session-import/service.ts +1264 -0
- package/src/session-import/types.ts +148 -0
- package/src/setup/paseo/check.ts +213 -0
- package/src/setup/paseo/install-saga.ts +293 -0
- package/src/setup/paseo/json-publisher.ts +263 -0
- package/src/setup/paseo/orchestration-preferences.ts +86 -0
- package/src/setup/paseo/paseo-ownership.ts +224 -0
- package/src/setup/paseo/paseo-setup.ts +253 -0
- package/src/setup/paseo/provider-config.ts +139 -0
- package/src/setup/paseo/remove.ts +183 -0
- package/src/setup/paseo/result-types.ts +79 -0
- package/src/setup/paseo/setup-deps.ts +175 -0
- package/src/setup/paseo/skills-bridge.ts +260 -0
- package/src/skill-state/active-state.ts +21 -11
- package/src/slash-commands/acp-builtins.ts +9 -1
- package/src/slash-commands/builtin-registry.ts +98 -16
- package/src/slash-commands/helpers/credential-switch.ts +143 -0
- package/src/slash-commands/helpers/mcp.ts +9 -3
- package/src/slash-commands/helpers/usage-report.ts +61 -56
- package/src/slash-commands/types.ts +7 -2
- package/src/task/executor.ts +30 -11
- package/src/task/index.ts +66 -7
- package/src/task/render.ts +23 -9
- package/src/tools/ask-answer-registry.ts +23 -7
- package/src/tools/ask.ts +8 -4
- package/src/tools/bash-sleep-advisory.ts +115 -0
- package/src/tools/bash.ts +98 -18
- package/src/tools/browser/attach.ts +71 -3
- package/src/tools/browser/launch.ts +86 -13
- package/src/tools/browser/profile-discovery.ts +57 -7
- package/src/tools/browser/render.ts +8 -1
- package/src/tools/browser.ts +130 -21
- package/src/tools/computer.enforcement.test.ts +1 -1
- package/src/tools/computer.ts +3 -2
- package/src/tools/cron.ts +12 -1
- package/src/tools/image-gen.ts +27 -16
- package/src/tools/index.ts +8 -0
- package/src/tools/job.ts +33 -6
- package/src/tools/monitor.ts +41 -2
- package/src/tools/skill-discovery.ts +21 -29
- package/src/tools/subagent.ts +142 -24
- package/src/tools/tool-catalog.generated.ts +6 -6
- package/src/tools/ultragoal-ask-guard.ts +10 -3
- package/src/utils/herdr-pane.ts +345 -0
- package/src/utils/title-generator.ts +2 -0
- package/src/web/scrapers/index.ts +6 -4
- package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
- package/dist/types/defaults/gjc-defaults.test.d.ts +0 -1
- package/dist/types/memory-backend/lazy-loading.test.d.ts +0 -1
- package/dist/types/runtime/boot-ordering.test.d.ts +0 -1
- package/dist/types/runtime/lazy-service.test.d.ts +0 -1
- package/dist/types/runtime/network-prewarm-service.test.d.ts +0 -1
- package/dist/types/runtime/workspace-tree-service.test.d.ts +0 -1
- package/dist/types/runtime-mcp/config.test.d.ts +0 -1
- package/dist/types/runtime-mcp/http.test.d.ts +0 -1
- package/dist/types/runtime-mcp/manager-pool.test.d.ts +0 -1
- package/dist/types/runtime-mcp/pool-key.test.d.ts +0 -1
- package/dist/types/runtime-mcp/pool.test.d.ts +0 -1
- package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +0 -117
- package/dist/types/sdk/bus/lifecycle-orchestrator.d.ts +0 -141
- package/dist/types/sdk/bus/telegram-cli.d.ts +0 -31
- package/dist/types/sdk/elevation/allowlist.d.ts +0 -20
- package/dist/types/sdk/elevation/audit.d.ts +0 -93
- package/dist/types/sdk/elevation/capability.d.ts +0 -3
- package/dist/types/sdk/elevation/digest.d.ts +0 -72
- package/dist/types/sdk/elevation/dispatch-receipt.d.ts +0 -85
- package/dist/types/sdk/elevation/grant-ledger.d.ts +0 -163
- package/dist/types/sdk/elevation/owner.d.ts +0 -48
- package/dist/types/sdk/host/import-graph.test.d.ts +0 -1
- package/dist/types/sdk/host/sdk-surface-parity.test.d.ts +0 -1
- package/dist/types/sdk/host/session-runtime.test.d.ts +0 -1
- package/dist/types/sdk/host/websocket-transport.lifecycle.test.d.ts +0 -1
- package/dist/types/session/auth-broker-config.d.ts +0 -13
- package/dist/types/session/heap-eviction-artifacts.test.d.ts +0 -1
- package/dist/types/skills/skills.test.d.ts +0 -1
- package/dist/types/slash-commands/notify-command.test.d.ts +0 -1
- package/dist/types/task/token-log.test.d.ts +0 -1
- package/dist/types/tools/computer.enforcement.test.d.ts +0 -1
- package/dist/types/tools/descriptors.test.d.ts +0 -1
- package/scripts/g005-daemon-smoke.ts +0 -180
- package/scripts/g011-daemon-path-smoke.ts +0 -153
- package/src/sdk/bus/lifecycle-control-runtime.ts +0 -1733
- package/src/sdk/bus/lifecycle-orchestrator.ts +0 -489
- package/src/sdk/bus/telegram-cli.ts +0 -212
- package/src/sdk/elevation/allowlist.ts +0 -54
- package/src/sdk/elevation/audit.ts +0 -208
- package/src/sdk/elevation/capability.ts +0 -41
- package/src/sdk/elevation/digest.ts +0 -129
- package/src/sdk/elevation/dispatch-receipt.ts +0 -184
- package/src/sdk/elevation/grant-ledger.ts +0 -1142
- package/src/sdk/elevation/owner.ts +0 -109
- package/src/session/auth-broker-config.ts +0 -109
- /package/dist/types/{ai-core-import-gate.test.d.ts → discovery/claude-hooks.d.ts} +0 -0
- /package/dist/types/{cli/fixture-report.test.d.ts → discovery/codex-hooks.d.ts} +0 -0
- /package/dist/types/sdk/{bus/recent-activity.d.ts → lifecycle/recent-sessions.d.ts} +0 -0
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
setServerDisabled,
|
|
19
19
|
updateMCPServer,
|
|
20
20
|
} from "../../runtime-mcp/config-writer";
|
|
21
|
-
import { MCPOAuthFlow } from "../../runtime-mcp/oauth-flow";
|
|
21
|
+
import { canonicalMCPResourceUri, MCPOAuthFlow } from "../../runtime-mcp/oauth-flow";
|
|
22
22
|
import {
|
|
23
23
|
clearSmitheryApiKey,
|
|
24
24
|
createSmitheryCliAuthSession,
|
|
@@ -434,6 +434,7 @@ export class MCPCommandController {
|
|
|
434
434
|
finalConfig.oauth?.callbackPort,
|
|
435
435
|
finalConfig.oauth?.callbackPath,
|
|
436
436
|
finalConfig.oauth?.redirectUri,
|
|
437
|
+
{ issuer: oauth.issuer, issuerResponseIssSupported: oauth.authorizationResponseIssSupported },
|
|
437
438
|
);
|
|
438
439
|
const persistedClientId = oauthResult.clientId ?? oauth.clientId ?? finalConfig.oauth?.clientId;
|
|
439
440
|
const persistedClientSecret = oauthResult.clientSecret ?? finalConfig.oauth?.clientSecret;
|
|
@@ -522,6 +523,7 @@ export class MCPCommandController {
|
|
|
522
523
|
callbackPort?: number,
|
|
523
524
|
callbackPath?: string,
|
|
524
525
|
redirectUri?: string,
|
|
526
|
+
oauthMeta?: { issuer?: string; issuerResponseIssSupported?: boolean },
|
|
525
527
|
): Promise<OAuthFlowResult> {
|
|
526
528
|
const authStorage = this.ctx.session.modelRegistry.authStorage;
|
|
527
529
|
let parsedAuthUrl: URL;
|
|
@@ -553,6 +555,13 @@ export class MCPCommandController {
|
|
|
553
555
|
redirectUri,
|
|
554
556
|
callbackPort,
|
|
555
557
|
callbackPath,
|
|
558
|
+
// RFC 8707 canonical MCP server resource on auth + token requests.
|
|
559
|
+
...(canonicalMCPResourceUri(endpointUrl) ? { resource: canonicalMCPResourceUri(endpointUrl) } : {}),
|
|
560
|
+
// RFC 9207 issuer validation (recorded from validated discovery metadata).
|
|
561
|
+
...(oauthMeta?.issuer ? { issuer: oauthMeta.issuer } : {}),
|
|
562
|
+
...(oauthMeta?.issuerResponseIssSupported !== undefined
|
|
563
|
+
? { issuerResponseIssSupported: oauthMeta.issuerResponseIssSupported }
|
|
564
|
+
: {}),
|
|
556
565
|
},
|
|
557
566
|
{
|
|
558
567
|
onAuth: (info: { url: string; instructions?: string }) => {
|
|
@@ -738,6 +747,8 @@ export class MCPCommandController {
|
|
|
738
747
|
tokenUrl: string;
|
|
739
748
|
clientId?: string;
|
|
740
749
|
scopes?: string;
|
|
750
|
+
issuer?: string;
|
|
751
|
+
authorizationResponseIssSupported?: boolean;
|
|
741
752
|
}> {
|
|
742
753
|
// First test if server actually needs auth by connecting without OAuth
|
|
743
754
|
let connectionSucceeded = false;
|
|
@@ -1358,6 +1369,7 @@ export class MCPCommandController {
|
|
|
1358
1369
|
found.config.oauth?.callbackPort,
|
|
1359
1370
|
found.config.oauth?.callbackPath,
|
|
1360
1371
|
found.config.oauth?.redirectUri,
|
|
1372
|
+
{ issuer: oauth.issuer, issuerResponseIssSupported: oauth.authorizationResponseIssSupported },
|
|
1361
1373
|
);
|
|
1362
1374
|
|
|
1363
1375
|
const persistedClientId = oauthResult.clientId ?? oauth.clientId ?? found.config.oauth?.clientId;
|
|
@@ -1466,8 +1478,9 @@ export class MCPCommandController {
|
|
|
1466
1478
|
// Disconnect all existing servers
|
|
1467
1479
|
await this.ctx.mcpManager.disconnectAll();
|
|
1468
1480
|
|
|
1469
|
-
// Rediscover and connect
|
|
1470
|
-
|
|
1481
|
+
// Rediscover and connect (native `.gjc` scopes only: Claude Code/Codex
|
|
1482
|
+
// MCP files are explicit import sources, not runtime authorities).
|
|
1483
|
+
const result = await this.ctx.mcpManager.discoverAndConnect({ nativeOnly: true });
|
|
1471
1484
|
await this.ctx.session.refreshMCPTools(this.ctx.mcpManager.getTools());
|
|
1472
1485
|
|
|
1473
1486
|
// Show any connection errors
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import * as path from "node:path";
|
|
2
2
|
import { ThinkingLevel } from "@gajae-code/agent-core";
|
|
3
|
-
import
|
|
3
|
+
import {
|
|
4
|
+
type Api,
|
|
5
|
+
type AuthCredentialSelector,
|
|
6
|
+
type CredentialRemovalTarget,
|
|
7
|
+
type Model,
|
|
8
|
+
resolveOAuthStorageProvider,
|
|
9
|
+
} from "@gajae-code/ai/core";
|
|
4
10
|
import { getOAuthProviders } from "@gajae-code/ai/utils/oauth";
|
|
5
11
|
import type { OAuthProvider } from "@gajae-code/ai/utils/oauth/types";
|
|
6
12
|
import type { Component, OverlayHandle, SlashCommand } from "@gajae-code/tui";
|
|
@@ -85,19 +91,13 @@ import {
|
|
|
85
91
|
sendNotificationTest,
|
|
86
92
|
} from "../../sdk/bus/notification-service";
|
|
87
93
|
import type { NotificationSessionStatus } from "../../sdk/bus/session-control";
|
|
88
|
-
import {
|
|
89
|
-
ensureTelegramDaemonRunningDetailed,
|
|
90
|
-
readNotificationRootRegistration,
|
|
91
|
-
resolveTelegramSetupPreflight,
|
|
92
|
-
unregisterNotificationRoot,
|
|
93
|
-
withNotificationRootRegistryFence,
|
|
94
|
-
} from "../../sdk/bus/telegram-daemon";
|
|
94
|
+
import { ensureTelegramDaemonRunningDetailed, resolveTelegramSetupPreflight } from "../../sdk/bus/telegram-daemon";
|
|
95
95
|
import { TelegramDaemonController } from "../../sdk/bus/telegram-daemon-control";
|
|
96
96
|
import { runTelegramSetup, type TelegramSetupPreflight } from "../../sdk/bus/telegram-setup";
|
|
97
|
+
import { clearPersistentPinForRemovedRows } from "../../session/account-inventory";
|
|
97
98
|
import type { DefaultFallbackRuntimeState } from "../../session/agent-session";
|
|
98
99
|
import { type SessionInfo, SessionManager } from "../../session/session-manager";
|
|
99
100
|
import { getTreeForInternalRead } from "../../session/session-manager-internal";
|
|
100
|
-
|
|
101
101
|
import { FileSessionStorage } from "../../session/session-storage";
|
|
102
102
|
import {
|
|
103
103
|
CREDENTIAL_AUTO_IMPORT_DISCOVERY_WARNING,
|
|
@@ -147,6 +147,7 @@ import {
|
|
|
147
147
|
type CustomModelPresetWizardSubmit,
|
|
148
148
|
} from "../components/custom-model-preset-wizard";
|
|
149
149
|
import { CustomProviderWizardComponent, type CustomProviderWizardSubmit } from "../components/custom-provider-wizard";
|
|
150
|
+
import { CustomizationDashboard } from "../components/customization";
|
|
150
151
|
import { ExtensionDashboard } from "../components/extensions";
|
|
151
152
|
import type { PetMode } from "../components/gajae-pet-widget";
|
|
152
153
|
import { HistorySearchComponent } from "../components/history-search";
|
|
@@ -270,13 +271,6 @@ export interface NotificationsEditorOperationDependencies {
|
|
|
270
271
|
reconcileCommittedTelegramConfiguration: typeof reconcileCommittedTelegramConfiguration;
|
|
271
272
|
saveTelegramInactive: typeof saveTelegramInactive;
|
|
272
273
|
removeTelegramConfiguration: typeof removeTelegramConfiguration;
|
|
273
|
-
readNotificationRootRegistration: typeof readNotificationRootRegistration;
|
|
274
|
-
unregisterNotificationRoot: typeof unregisterNotificationRoot;
|
|
275
|
-
stopTelegramDaemonIfRootRegistryFenceMatches(input: {
|
|
276
|
-
settings: Settings;
|
|
277
|
-
registryFingerprint: string;
|
|
278
|
-
stop: () => Promise<TelegramDaemonStopResult>;
|
|
279
|
-
}): Promise<boolean>;
|
|
280
274
|
|
|
281
275
|
reloadTelegramDaemon(settings: Settings): Promise<{ ok: boolean; message: string }>;
|
|
282
276
|
restartTelegramDaemon(settings: Settings): Promise<{ ok: boolean; message: string }>;
|
|
@@ -300,17 +294,6 @@ const notificationEditorOperationDependencies: NotificationsEditorOperationDepen
|
|
|
300
294
|
reconcileCommittedTelegramConfiguration,
|
|
301
295
|
saveTelegramInactive,
|
|
302
296
|
removeTelegramConfiguration,
|
|
303
|
-
readNotificationRootRegistration,
|
|
304
|
-
unregisterNotificationRoot,
|
|
305
|
-
stopTelegramDaemonIfRootRegistryFenceMatches: async input =>
|
|
306
|
-
await withNotificationRootRegistryFence({
|
|
307
|
-
settings: input.settings,
|
|
308
|
-
registryFingerprint: input.registryFingerprint,
|
|
309
|
-
action: async () => {
|
|
310
|
-
const stopped = await input.stop();
|
|
311
|
-
if (!stopped.ok) throw new Error(stopped.message);
|
|
312
|
-
},
|
|
313
|
-
}),
|
|
314
297
|
|
|
315
298
|
reloadTelegramDaemon: async settings =>
|
|
316
299
|
await new TelegramDaemonController(settings).reload({ spawnIfStopped: false }),
|
|
@@ -361,12 +344,7 @@ export function createNotificationsEditorOperations(
|
|
|
361
344
|
const notifyAfterDurableCommit = async (): Promise<void> => {
|
|
362
345
|
await ctx.notifyConfigChanged?.();
|
|
363
346
|
};
|
|
364
|
-
const reconnect = async () =>
|
|
365
|
-
await services.ensureTelegramDaemonRunningDetailed({
|
|
366
|
-
settings: ctx.settings,
|
|
367
|
-
cwd: ctx.sessionManager.getCwd(),
|
|
368
|
-
sessionId: ctx.sessionManager.getSessionId(),
|
|
369
|
-
});
|
|
347
|
+
const reconnect = async () => await services.ensureTelegramDaemonRunningDetailed({ settings: ctx.settings });
|
|
370
348
|
const telegramSetupPreflight = async (): Promise<TelegramSetupPreflight> =>
|
|
371
349
|
await services.resolveTelegramSetupPreflight(ctx.settings);
|
|
372
350
|
const providerRuntime: NotificationProviderRuntimeAuthority = services.providerRuntime ?? {
|
|
@@ -1041,23 +1019,8 @@ export function createNotificationsEditorOperations(
|
|
|
1041
1019
|
stopAndUnregister: async () => {
|
|
1042
1020
|
if (controller) await controller.enterBlockedRuntime(sessionContext());
|
|
1043
1021
|
runtimePrepared = true;
|
|
1044
|
-
const
|
|
1045
|
-
|
|
1046
|
-
sessionId: ctx.sessionManager.getSessionId(),
|
|
1047
|
-
});
|
|
1048
|
-
const unregistered = await services.unregisterNotificationRoot({
|
|
1049
|
-
settings: ctx.settings,
|
|
1050
|
-
cwd: ctx.sessionManager.getCwd(),
|
|
1051
|
-
sessionId: ctx.sessionManager.getSessionId(),
|
|
1052
|
-
registrationToken: registration.token,
|
|
1053
|
-
});
|
|
1054
|
-
if (unregistered.registryFingerprint !== undefined) {
|
|
1055
|
-
await services.stopTelegramDaemonIfRootRegistryFenceMatches({
|
|
1056
|
-
settings: ctx.settings,
|
|
1057
|
-
registryFingerprint: unregistered.registryFingerprint,
|
|
1058
|
-
stop: () => services.stopTelegramDaemon(ctx.settings),
|
|
1059
|
-
});
|
|
1060
|
-
}
|
|
1022
|
+
const stopped = await services.stopTelegramDaemon(ctx.settings);
|
|
1023
|
+
if (!stopped.ok) throw new Error(stopped.message);
|
|
1061
1024
|
},
|
|
1062
1025
|
},
|
|
1063
1026
|
});
|
|
@@ -2011,6 +1974,31 @@ export class SelectorController {
|
|
|
2011
1974
|
});
|
|
2012
1975
|
}
|
|
2013
1976
|
|
|
1977
|
+
/**
|
|
1978
|
+
* Show the `/extensions` umbrella local-customization dashboard (skills,
|
|
1979
|
+
* hooks, MCPs, import) — a separate surface from the provider-focused
|
|
1980
|
+
* Extension Control Center above (issue #4291).
|
|
1981
|
+
*/
|
|
1982
|
+
async showCustomizationDashboard(): Promise<void> {
|
|
1983
|
+
let dashboard: CustomizationDashboard;
|
|
1984
|
+
try {
|
|
1985
|
+
dashboard = await CustomizationDashboard.create(getProjectDir(), this.ctx.settings);
|
|
1986
|
+
} catch (error) {
|
|
1987
|
+
this.ctx.showError(`Failed to open /extensions: ${error instanceof Error ? error.message : String(error)}`);
|
|
1988
|
+
return;
|
|
1989
|
+
}
|
|
1990
|
+
this.showSelector(done => {
|
|
1991
|
+
dashboard.onClose = () => {
|
|
1992
|
+
done();
|
|
1993
|
+
this.ctx.ui.requestRender();
|
|
1994
|
+
};
|
|
1995
|
+
dashboard.onRequestRender = () => {
|
|
1996
|
+
this.ctx.ui.requestRender();
|
|
1997
|
+
};
|
|
1998
|
+
return { component: dashboard, focus: dashboard };
|
|
1999
|
+
});
|
|
2000
|
+
}
|
|
2001
|
+
|
|
2014
2002
|
/**
|
|
2015
2003
|
* Show the Agent Control Center dashboard.
|
|
2016
2004
|
*/
|
|
@@ -3210,18 +3198,60 @@ export class SelectorController {
|
|
|
3210
3198
|
}
|
|
3211
3199
|
}
|
|
3212
3200
|
|
|
3213
|
-
async #handleOAuthLogout(providerId: string): Promise<void> {
|
|
3201
|
+
async #handleOAuthLogout(providerId: string, targets?: readonly CredentialRemovalTarget[]): Promise<void> {
|
|
3214
3202
|
try {
|
|
3215
|
-
|
|
3216
|
-
|
|
3217
|
-
|
|
3218
|
-
|
|
3219
|
-
|
|
3203
|
+
const authStorage = this.ctx.session.modelRegistry.authStorage;
|
|
3204
|
+
const inventory = authStorage.listCredentialInventory(providerId);
|
|
3205
|
+
const oauthRows = inventory.filter(row => row.provider === providerId && row.credentialKind === "oauth");
|
|
3206
|
+
const removalTargetsById = new Map(
|
|
3207
|
+
authStorage.listCredentialRemovalTargets(providerId).map(target => [target.id, target]),
|
|
3220
3208
|
);
|
|
3221
|
-
|
|
3222
|
-
|
|
3209
|
+
const oauthRemovalTargets = oauthRows
|
|
3210
|
+
.map(row => removalTargetsById.get(row.id))
|
|
3211
|
+
.filter((target): target is CredentialRemovalTarget => target !== undefined);
|
|
3212
|
+
if (oauthRows.length > 0 && oauthRemovalTargets.length === 0) {
|
|
3213
|
+
this.ctx.showError(
|
|
3214
|
+
`Logout is broker-managed for ${providerId}; run \`gjc auth-broker logout ${providerId}\` on the broker host.`,
|
|
3215
|
+
);
|
|
3216
|
+
return;
|
|
3217
|
+
}
|
|
3218
|
+
if (targets) {
|
|
3219
|
+
if (targets.length === 0) {
|
|
3220
|
+
this.ctx.showError(
|
|
3221
|
+
`No OAuth accounts to remove for ${providerId}; API-key credentials are not managed here.`,
|
|
3222
|
+
);
|
|
3223
|
+
return;
|
|
3224
|
+
}
|
|
3225
|
+
const result = authStorage.removeAuthCredentialsHard(providerId, targets);
|
|
3226
|
+
if (result.kind !== "removed") {
|
|
3227
|
+
this.ctx.showError(
|
|
3228
|
+
"Logout failed: account inventory changed; no credentials were removed. Retry /logout.",
|
|
3229
|
+
);
|
|
3230
|
+
return;
|
|
3231
|
+
}
|
|
3232
|
+
await clearPersistentPinForRemovedRows(this.ctx.settings, providerId, inventory, result.ids);
|
|
3233
|
+
await this.ctx.session.modelRegistry.refresh();
|
|
3234
|
+
this.ctx.showStatus(
|
|
3235
|
+
`Successfully removed ${result.ids.length} OAuth account${result.ids.length === 1 ? "" : "s"} from ${providerId}.`,
|
|
3236
|
+
);
|
|
3237
|
+
return;
|
|
3238
|
+
}
|
|
3239
|
+
if (oauthRemovalTargets.length === 0) {
|
|
3240
|
+
this.ctx.showError(
|
|
3241
|
+
`No OAuth accounts to remove for ${providerId}; API-key credentials are not managed here.`,
|
|
3242
|
+
);
|
|
3243
|
+
return;
|
|
3244
|
+
}
|
|
3245
|
+
const result = authStorage.removeAuthCredentialsHard(providerId, oauthRemovalTargets);
|
|
3246
|
+
if (result.kind !== "removed") {
|
|
3247
|
+
this.ctx.showError("Logout failed: account inventory changed; no credentials were removed. Retry /logout.");
|
|
3248
|
+
return;
|
|
3249
|
+
}
|
|
3250
|
+
await clearPersistentPinForRemovedRows(this.ctx.settings, providerId, inventory, result.ids);
|
|
3251
|
+
await this.ctx.session.modelRegistry.refresh();
|
|
3252
|
+
this.ctx.showStatus(
|
|
3253
|
+
`Successfully removed ${result.ids.length} OAuth account${result.ids.length === 1 ? "" : "s"} from ${providerId}.`,
|
|
3223
3254
|
);
|
|
3224
|
-
this.ctx.ui.requestRender();
|
|
3225
3255
|
} catch (error: unknown) {
|
|
3226
3256
|
this.ctx.showError(`Logout failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
3227
3257
|
}
|
|
@@ -3233,16 +3263,95 @@ export class SelectorController {
|
|
|
3233
3263
|
options?: OAuthSelectorOptions,
|
|
3234
3264
|
): Promise<void> {
|
|
3235
3265
|
if (providerId) {
|
|
3236
|
-
const
|
|
3237
|
-
|
|
3238
|
-
|
|
3266
|
+
const selectedProviderId = mode === "logout" ? resolveOAuthStorageProvider(providerId) : providerId;
|
|
3267
|
+
const oauthProvider = getOAuthProviders().find(provider => provider.id === selectedProviderId);
|
|
3268
|
+
if (!oauthProvider && !this.ctx.session.modelRegistry.getModelProfiles().has(selectedProviderId)) {
|
|
3269
|
+
this.ctx.showError(`Unknown OAuth provider: ${selectedProviderId}`);
|
|
3270
|
+
return;
|
|
3271
|
+
}
|
|
3272
|
+
const authStorage = this.ctx.session.modelRegistry.authStorage;
|
|
3273
|
+
const hasOAuthInventory = authStorage
|
|
3274
|
+
.listCredentialInventory(selectedProviderId)
|
|
3275
|
+
.some(row => row.provider === selectedProviderId && row.credentialKind === "oauth");
|
|
3276
|
+
const hasRemovableOAuth = authStorage
|
|
3277
|
+
.listCredentialRemovalTargets(selectedProviderId)
|
|
3278
|
+
.some(target => target.provider === selectedProviderId);
|
|
3279
|
+
if (mode === "logout" && hasOAuthInventory && !hasRemovableOAuth) {
|
|
3280
|
+
await this.#handleOAuthLogout(selectedProviderId);
|
|
3281
|
+
return;
|
|
3282
|
+
}
|
|
3283
|
+
if (hasOAuthInventory && !options?.manualCode) {
|
|
3284
|
+
this.showSelector(done => {
|
|
3285
|
+
let selector: OAuthSelectorComponent;
|
|
3286
|
+
selector = new OAuthSelectorComponent(
|
|
3287
|
+
mode,
|
|
3288
|
+
authStorage,
|
|
3289
|
+
() => undefined,
|
|
3290
|
+
() => {
|
|
3291
|
+
selector.stopValidation();
|
|
3292
|
+
done();
|
|
3293
|
+
this.ctx.ui.requestRender();
|
|
3294
|
+
},
|
|
3295
|
+
{
|
|
3296
|
+
accountProviderId: selectedProviderId,
|
|
3297
|
+
onAccountSelect: async (selectorValue: AuthCredentialSelector) => {
|
|
3298
|
+
await this.ctx.session.setCredentialPin(selectedProviderId, selectorValue);
|
|
3299
|
+
selector.stopValidation();
|
|
3300
|
+
done();
|
|
3301
|
+
this.ctx.showStatus(`Pinned OAuth account for ${selectedProviderId} to this session.`);
|
|
3302
|
+
},
|
|
3303
|
+
onAutoSelect: async () => {
|
|
3304
|
+
await this.ctx.session.setCredentialAuto(selectedProviderId);
|
|
3305
|
+
selector.stopValidation();
|
|
3306
|
+
done();
|
|
3307
|
+
this.ctx.showStatus(`Using AUTO (ranked) OAuth accounts for ${selectedProviderId}.`);
|
|
3308
|
+
},
|
|
3309
|
+
onAddAccount: async () => {
|
|
3310
|
+
selector.stopValidation();
|
|
3311
|
+
done();
|
|
3312
|
+
await this.#handleOAuthLogin(selectedProviderId, options);
|
|
3313
|
+
},
|
|
3314
|
+
onAccountRemove: async targets => {
|
|
3315
|
+
await this.#handleOAuthLogout(selectedProviderId, targets);
|
|
3316
|
+
selector.stopValidation();
|
|
3317
|
+
done();
|
|
3318
|
+
},
|
|
3319
|
+
},
|
|
3320
|
+
);
|
|
3321
|
+
return { component: selector, focus: selector };
|
|
3322
|
+
});
|
|
3239
3323
|
return;
|
|
3240
3324
|
}
|
|
3241
3325
|
if (mode === "login") {
|
|
3242
|
-
await this.#handleOAuthLogin(
|
|
3243
|
-
|
|
3244
|
-
|
|
3326
|
+
await this.#handleOAuthLogin(selectedProviderId, options);
|
|
3327
|
+
return;
|
|
3328
|
+
}
|
|
3329
|
+
if (!hasRemovableOAuth) {
|
|
3330
|
+
await this.#handleOAuthLogout(selectedProviderId);
|
|
3331
|
+
return;
|
|
3245
3332
|
}
|
|
3333
|
+
this.showSelector(done => {
|
|
3334
|
+
let selector: OAuthSelectorComponent;
|
|
3335
|
+
selector = new OAuthSelectorComponent(
|
|
3336
|
+
"logout",
|
|
3337
|
+
authStorage,
|
|
3338
|
+
() => undefined,
|
|
3339
|
+
() => {
|
|
3340
|
+
selector.stopValidation();
|
|
3341
|
+
done();
|
|
3342
|
+
this.ctx.ui.requestRender();
|
|
3343
|
+
},
|
|
3344
|
+
{
|
|
3345
|
+
accountProviderId: selectedProviderId,
|
|
3346
|
+
onAccountRemove: async targets => {
|
|
3347
|
+
await this.#handleOAuthLogout(selectedProviderId, targets);
|
|
3348
|
+
selector.stopValidation();
|
|
3349
|
+
done();
|
|
3350
|
+
},
|
|
3351
|
+
},
|
|
3352
|
+
);
|
|
3353
|
+
return { component: selector, focus: selector };
|
|
3354
|
+
});
|
|
3246
3355
|
return;
|
|
3247
3356
|
}
|
|
3248
3357
|
|
|
@@ -3384,16 +3493,12 @@ export class SelectorController {
|
|
|
3384
3493
|
async (selectedProviderId: string) => {
|
|
3385
3494
|
selector.stopValidation();
|
|
3386
3495
|
done();
|
|
3387
|
-
|
|
3388
|
-
await this.#handleOAuthLogin(selectedProviderId);
|
|
3389
|
-
} else {
|
|
3390
|
-
await this.#handleOAuthLogout(selectedProviderId);
|
|
3391
|
-
}
|
|
3496
|
+
await this.showOAuthSelector(mode, selectedProviderId);
|
|
3392
3497
|
},
|
|
3393
3498
|
() => {
|
|
3394
3499
|
selector.stopValidation();
|
|
3395
3500
|
done();
|
|
3396
|
-
this.ctx.ui.
|
|
3501
|
+
this.ctx.ui.requestLayoutRender("oauth-selector-close");
|
|
3397
3502
|
},
|
|
3398
3503
|
{
|
|
3399
3504
|
validateAuth: async (selectedProviderId: string) => {
|
|
@@ -3404,7 +3509,7 @@ export class SelectorController {
|
|
|
3404
3509
|
return !!apiKey;
|
|
3405
3510
|
},
|
|
3406
3511
|
requestRender: () => {
|
|
3407
|
-
this.ctx.ui.
|
|
3512
|
+
this.ctx.ui.requestLayoutRender("oauth-selector-spinner");
|
|
3408
3513
|
},
|
|
3409
3514
|
externalCredentialCandidates,
|
|
3410
3515
|
},
|
|
@@ -12,7 +12,7 @@ interface SttEditor {
|
|
|
12
12
|
|
|
13
13
|
interface SttUi {
|
|
14
14
|
getShowHardwareCursor(): boolean;
|
|
15
|
-
|
|
15
|
+
requestLayoutRender(source?: string): void;
|
|
16
16
|
setShowHardwareCursor(enabled: boolean): void;
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -59,7 +59,7 @@ export class SttModeController {
|
|
|
59
59
|
this.#cleanupAnimation(ctx);
|
|
60
60
|
}
|
|
61
61
|
ctx.updateEditorChrome();
|
|
62
|
-
ctx.ui.
|
|
62
|
+
ctx.ui.requestLayoutRender("stt-state");
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
#setMicCursor(editor: SttEditor, color: { r: number; g: number; b: number }): void {
|
|
@@ -74,7 +74,7 @@ export class SttModeController {
|
|
|
74
74
|
this.#animationInterval = setInterval(() => {
|
|
75
75
|
this.#hue = (this.#hue + 8) % 360;
|
|
76
76
|
this.#updateMicIcon(ctx.editor);
|
|
77
|
-
ctx.ui.
|
|
77
|
+
ctx.ui.requestLayoutRender("stt-animation");
|
|
78
78
|
}, 60);
|
|
79
79
|
}
|
|
80
80
|
|
|
@@ -25,6 +25,8 @@ import {
|
|
|
25
25
|
type KeyDisplayContext,
|
|
26
26
|
} from "../config/keybindings";
|
|
27
27
|
import { isSettingsInitialized, type Settings, settings } from "../config/settings";
|
|
28
|
+
import { compactCrashIndex, resolveCrashStatePaths } from "../crash/index-store";
|
|
29
|
+
import { crashNudgeGate, maybeShowCrashNudge } from "../crash/nudge";
|
|
28
30
|
import { DEFAULT_GJC_DEFINITION_NAMES } from "../defaults/gjc-defaults";
|
|
29
31
|
import type {
|
|
30
32
|
ExtensionUIContext,
|
|
@@ -67,10 +69,14 @@ import {
|
|
|
67
69
|
IrcLeftLaneComponent,
|
|
68
70
|
IrcSplitViewComponent,
|
|
69
71
|
} from "./components/irc-sidebar";
|
|
72
|
+
import { createNativePetTransport, type ItermPetTransport } from "./components/iterm-pet-transport";
|
|
70
73
|
import {
|
|
74
|
+
getItermPetAvailability,
|
|
75
|
+
getItermPetUnavailableReason,
|
|
71
76
|
getPetUnavailableWarning,
|
|
72
77
|
isPetAvailable,
|
|
73
78
|
isPetCapabilityProbePending,
|
|
79
|
+
setVerifiedItermPetAvailability,
|
|
74
80
|
warnWhenPetCapabilitySettled,
|
|
75
81
|
} from "./components/pet-capability";
|
|
76
82
|
import type { ToolExecutionHandle } from "./components/tool-execution";
|
|
@@ -432,6 +438,20 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
432
438
|
#resolvedSlashCommands: SlashCommand[] = [];
|
|
433
439
|
#baseReservedSlashCommandNames: Set<string> = new Set();
|
|
434
440
|
#cleanupUnsubscribe?: () => void;
|
|
441
|
+
#itermPetTransport?: ItermPetTransport;
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Pet-unavailable warning text. The iTerm transport reason is parenthesized
|
|
445
|
+
* only when a transport actually reported one; non-iTerm terminals and a
|
|
446
|
+
* probe still in flight keep the plain warning instead of "(unknown)".
|
|
447
|
+
*/
|
|
448
|
+
#petUnavailableStatusText(): string {
|
|
449
|
+
if (!this.#itermPetTransport || getItermPetAvailability() === undefined) return getPetUnavailableWarning();
|
|
450
|
+
const reason = getItermPetUnavailableReason();
|
|
451
|
+
return reason === undefined ? getPetUnavailableWarning() : `${getPetUnavailableWarning()} (${reason})`;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
#petTransportAvailabilityUnsubscribe?: () => void;
|
|
435
455
|
#subprocessTeardownUnsubscribe?: () => void;
|
|
436
456
|
#petProtocolUnsubscribe?: () => void;
|
|
437
457
|
/** Cancels a startup pet-unavailable warning still awaiting probe settlement. */
|
|
@@ -618,6 +638,18 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
618
638
|
}
|
|
619
639
|
},
|
|
620
640
|
});
|
|
641
|
+
this.#itermPetTransport = createNativePetTransport({ ui: this.ui });
|
|
642
|
+
if (this.#itermPetTransport) {
|
|
643
|
+
this.#petTransportAvailabilityUnsubscribe = this.#itermPetTransport.subscribe(availability => {
|
|
644
|
+
if (!availability.available) void this.petWidget?.suspendItermCapability();
|
|
645
|
+
setVerifiedItermPetAvailability(availability);
|
|
646
|
+
if (availability.available) {
|
|
647
|
+
if (availability.mode === "managed") this.ui.refreshImageCellSize();
|
|
648
|
+
const saved = settings.get("pet.mode");
|
|
649
|
+
if (saved !== "off" && this.petWidget && this.petWidget.mode === "off") this.petWidget.setMode(saved);
|
|
650
|
+
}
|
|
651
|
+
});
|
|
652
|
+
}
|
|
621
653
|
this.ui.setClearOnShrink(settings.get("clearOnShrink"));
|
|
622
654
|
this.chatContainer = new Container();
|
|
623
655
|
this.#ircSplitView = new IrcSplitViewComponent(this.chatContainer, this.ircLedger, () => theme);
|
|
@@ -810,26 +842,15 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
810
842
|
// appears without the user re-running /pet.
|
|
811
843
|
this.#petProtocolUnsubscribe?.();
|
|
812
844
|
this.#petProtocolUnsubscribe = onImageProtocolChanged(protocol => {
|
|
813
|
-
if (!protocol)
|
|
845
|
+
if (!protocol) {
|
|
846
|
+
void this.petWidget?.suspendItermCapability();
|
|
847
|
+
return;
|
|
848
|
+
}
|
|
814
849
|
const saved = settings.get("pet.mode");
|
|
815
850
|
if (saved !== "off" && this.petWidget && this.petWidget.mode === "off") {
|
|
816
851
|
this.petWidget.setMode(saved);
|
|
817
852
|
}
|
|
818
853
|
});
|
|
819
|
-
if (configuredPetMode !== "off" && !isPetAvailable()) {
|
|
820
|
-
// The async Sixel capability probe (started by TUI.start()) may still
|
|
821
|
-
// enable graphics; warn only once the capability question is settled
|
|
822
|
-
// so a supported terminal is never told it is incompatible.
|
|
823
|
-
this.#petUnavailableWarningDisposer?.();
|
|
824
|
-
this.#petUnavailableWarningDisposer = warnWhenPetCapabilitySettled({
|
|
825
|
-
probePending: isPetCapabilityProbePending(),
|
|
826
|
-
onUnavailable: () => {
|
|
827
|
-
this.showStatus(theme.fg("warning", getPetUnavailableWarning()), { dim: false });
|
|
828
|
-
this.ui.requestRender();
|
|
829
|
-
},
|
|
830
|
-
});
|
|
831
|
-
}
|
|
832
|
-
|
|
833
854
|
this.#inputController.setupKeyHandlers();
|
|
834
855
|
this.#inputController.setupEditorSubmitHandler();
|
|
835
856
|
this.editor.onViewportPageScroll = direction => {
|
|
@@ -878,6 +899,23 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
878
899
|
|
|
879
900
|
// Start the UI
|
|
880
901
|
this.ui.start();
|
|
902
|
+
if (this.#itermPetTransport) {
|
|
903
|
+
if (this.#itermPetTransport.availability.mode === "direct") void this.#itermPetTransport.probe();
|
|
904
|
+
else this.#itermPetTransport.startManagedPolling();
|
|
905
|
+
}
|
|
906
|
+
if (configuredPetMode !== "off" && !isPetAvailable()) {
|
|
907
|
+
// An async terminal capability probe may still enable graphics; warn only once
|
|
908
|
+
// the capability question is settled so a supported terminal is never told it
|
|
909
|
+
// is incompatible.
|
|
910
|
+
this.#petUnavailableWarningDisposer?.();
|
|
911
|
+
this.#petUnavailableWarningDisposer = warnWhenPetCapabilitySettled({
|
|
912
|
+
probePending: this.#itermPetTransport !== undefined || isPetCapabilityProbePending(),
|
|
913
|
+
onUnavailable: () => {
|
|
914
|
+
this.showStatus(theme.fg("warning", this.#petUnavailableStatusText()), { dim: false });
|
|
915
|
+
this.ui.requestRender();
|
|
916
|
+
},
|
|
917
|
+
});
|
|
918
|
+
}
|
|
881
919
|
pushTerminalTitle();
|
|
882
920
|
setSessionTerminalTitle(this.sessionManager.getSessionName(), this.sessionManager.getCwd());
|
|
883
921
|
this.updateEditorChrome();
|
|
@@ -928,6 +966,26 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
928
966
|
}),
|
|
929
967
|
);
|
|
930
968
|
}
|
|
969
|
+
// Crash nudge (interactive-only, local-only). Runs after the first render
|
|
970
|
+
// and routes through the centralized status surface — never `console.*`.
|
|
971
|
+
if (crashNudgeGate({ enabled: settings.get("crashReport.nudge"), interactive: true, quiet: startupQuiet })) {
|
|
972
|
+
const crashNudgeTimer = setTimeout(() => {
|
|
973
|
+
void (async () => {
|
|
974
|
+
try {
|
|
975
|
+
const paths = resolveCrashStatePaths();
|
|
976
|
+
const index = await compactCrashIndex({ paths });
|
|
977
|
+
if (this.#stopped) return;
|
|
978
|
+
await maybeShowCrashNudge(message => this.showStatus(message, { dim: true }), { paths, index });
|
|
979
|
+
} catch (error) {
|
|
980
|
+
logger.debug("Crash nudge skipped", {
|
|
981
|
+
error: error instanceof Error ? error.message : String(error),
|
|
982
|
+
});
|
|
983
|
+
}
|
|
984
|
+
})();
|
|
985
|
+
}, 0);
|
|
986
|
+
crashNudgeTimer.unref?.();
|
|
987
|
+
}
|
|
988
|
+
|
|
931
989
|
if (starReminderGate.schedule) {
|
|
932
990
|
scheduleLaunchStarReminderAfterFirstRender({
|
|
933
991
|
confirm: (title, message) =>
|
|
@@ -1301,7 +1359,8 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
1301
1359
|
*/
|
|
1302
1360
|
#commitPetMode(mode: PetMode, apply: (mode: PetMode) => void): boolean {
|
|
1303
1361
|
if (mode !== "off" && !isPetAvailable()) {
|
|
1304
|
-
this
|
|
1362
|
+
void this.#itermPetTransport?.retry();
|
|
1363
|
+
this.showStatus(theme.fg("warning", this.#petUnavailableStatusText()), { dim: false });
|
|
1305
1364
|
this.ui.requestRender();
|
|
1306
1365
|
return false;
|
|
1307
1366
|
}
|
|
@@ -1362,6 +1421,8 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
1362
1421
|
getComposerBottomOffset: () =>
|
|
1363
1422
|
this.petFloorContainer.render(this.ui.terminal.columns).length +
|
|
1364
1423
|
this.hookWidgetContainerBelow.render(this.ui.terminal.columns).length,
|
|
1424
|
+
syncManagedItermCursor: (row, column) =>
|
|
1425
|
+
this.#itermPetTransport?.refreshManagedClient(row, column) ?? Promise.resolve(false),
|
|
1365
1426
|
});
|
|
1366
1427
|
}
|
|
1367
1428
|
|
|
@@ -1515,6 +1576,11 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
1515
1576
|
this.#petUnavailableWarningDisposer = undefined;
|
|
1516
1577
|
this.petWidget?.dispose();
|
|
1517
1578
|
this.petWidget = undefined;
|
|
1579
|
+
this.#petTransportAvailabilityUnsubscribe?.();
|
|
1580
|
+
this.#petTransportAvailabilityUnsubscribe = undefined;
|
|
1581
|
+
void this.#itermPetTransport?.dispose();
|
|
1582
|
+
this.#itermPetTransport = undefined;
|
|
1583
|
+
setVerifiedItermPetAvailability(undefined);
|
|
1518
1584
|
this.#welcomeComponent?.dispose();
|
|
1519
1585
|
this.#welcomeComponent = undefined;
|
|
1520
1586
|
if (this.#sttController) {
|
|
@@ -1585,6 +1651,8 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
1585
1651
|
// This prevents escape sequences from leaking to the parent shell over slow SSH.
|
|
1586
1652
|
await this.ui.terminal.drainInput(1000);
|
|
1587
1653
|
popTerminalTitle();
|
|
1654
|
+
await this.petWidget?.disposeAsync();
|
|
1655
|
+
await this.#itermPetTransport?.dispose();
|
|
1588
1656
|
this.stop();
|
|
1589
1657
|
|
|
1590
1658
|
// Print resumption hint if this is a persisted session
|
|
@@ -2249,6 +2317,10 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
2249
2317
|
void this.#selectorController.showExtensionsDashboard();
|
|
2250
2318
|
}
|
|
2251
2319
|
|
|
2320
|
+
showCustomizationDashboard(): void {
|
|
2321
|
+
void this.#selectorController.showCustomizationDashboard();
|
|
2322
|
+
}
|
|
2323
|
+
|
|
2252
2324
|
showAgentsDashboard(): void {
|
|
2253
2325
|
void this.#selectorController.showAgentsDashboard();
|
|
2254
2326
|
}
|