@gajae-code/coding-agent 0.13.2 → 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 +215 -8
- 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 +10 -1
- package/dist/types/config/models-config-schema.d.ts +2 -0
- package/dist/types/config/settings-schema.d.ts +73 -9
- 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 +2 -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/dynamic-theme-text.d.ts +9 -0
- package/dist/types/modes/components/gajae-pet-widget.d.ts +6 -28
- 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 +7 -21
- package/dist/types/modes/components/settings-selector.d.ts +5 -0
- 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/theme/defaults/index.d.ts +118 -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 +47 -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 +10 -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 +23 -2
- package/src/config/model-profiles.ts +88 -21
- package/src/config/model-registry.ts +147 -21
- package/src/config/models-config-schema.ts +1 -1
- package/src/config/settings-schema.ts +77 -7
- 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/extensions/grok-cli-vendor/src/models/catalog.ts +31 -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 +41 -32
- package/src/main.ts +36 -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/chrome.ts +4 -3
- 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/dynamic-theme-text.ts +22 -0
- package/src/modes/components/gajae-pet-widget.ts +607 -193
- package/src/modes/components/irc-sidebar.ts +11 -0
- package/src/modes/components/iterm-pet-transport.ts +585 -0
- package/src/modes/components/model-selector.ts +1 -6
- package/src/modes/components/oauth-selector.ts +277 -86
- package/src/modes/components/pet-capability.ts +35 -31
- package/src/modes/components/settings-selector.ts +29 -5
- package/src/modes/components/status-line/gh.ts +45 -1
- package/src/modes/components/status-line/segments.ts +19 -4
- 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 +238 -77
- 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/theme/defaults/index.ts +2 -0
- package/src/modes/theme/defaults/ouroboros.json +118 -0
- 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 +2873 -559
- 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 +199 -31
- package/src/session/messages.ts +1 -1
- package/src/session/secure-token-file.ts +80 -0
- package/src/session/session-manager.ts +757 -57
- 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 +117 -19
- 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 +349 -142
- 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/todo-contract.ts +55 -3
- package/src/tools/todo-write.ts +4 -3
- 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
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
Container,
|
|
6
6
|
Input,
|
|
7
7
|
matchesKey,
|
|
8
|
+
resolvePetMode,
|
|
8
9
|
type SelectItem,
|
|
9
10
|
SelectList,
|
|
10
11
|
type SettingItem,
|
|
@@ -27,6 +28,7 @@ import { getCurrentThemeName, getSelectListTheme, getSettingsListTheme, theme }
|
|
|
27
28
|
import { matchesAppInterrupt } from "../../modes/utils/keybinding-matchers";
|
|
28
29
|
import { getTabBarTheme } from "../shared";
|
|
29
30
|
import { DynamicBorder } from "./dynamic-border";
|
|
31
|
+
import { DynamicThemeText } from "./dynamic-theme-text";
|
|
30
32
|
import { GjcBundleSettingsComponent } from "./gjc-bundle-settings";
|
|
31
33
|
import {
|
|
32
34
|
type NotificationsEditorOperations,
|
|
@@ -101,18 +103,18 @@ class SelectSubmenu extends Container {
|
|
|
101
103
|
super();
|
|
102
104
|
|
|
103
105
|
// Title
|
|
104
|
-
this.addChild(new
|
|
106
|
+
this.addChild(new DynamicThemeText(() => theme.bold(theme.fg("accent", title))));
|
|
105
107
|
|
|
106
108
|
// Description
|
|
107
109
|
if (description) {
|
|
108
110
|
this.addChild(new Spacer(1));
|
|
109
|
-
this.addChild(new
|
|
111
|
+
this.addChild(new DynamicThemeText(() => theme.fg("muted", description)));
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
// Preview (if provided)
|
|
113
115
|
if (getPreview) {
|
|
114
116
|
this.addChild(new Spacer(1));
|
|
115
|
-
this.addChild(new
|
|
117
|
+
this.addChild(new DynamicThemeText(() => theme.fg("muted", "Preview:")));
|
|
116
118
|
this.#previewText = new Text(getPreview(), 0, 0);
|
|
117
119
|
this.addChild(this.#previewText);
|
|
118
120
|
}
|
|
@@ -121,7 +123,7 @@ class SelectSubmenu extends Container {
|
|
|
121
123
|
this.addChild(new Spacer(1));
|
|
122
124
|
|
|
123
125
|
// Select list
|
|
124
|
-
this.#selectList = new SelectList(options, Math.min(options.length, 10), getSelectListTheme());
|
|
126
|
+
this.#selectList = new SelectList(options, Math.min(options.length, 10), () => getSelectListTheme());
|
|
125
127
|
|
|
126
128
|
// Pre-select current value
|
|
127
129
|
const currentIndex = options.findIndex(o => o.value === currentValue);
|
|
@@ -157,7 +159,7 @@ class SelectSubmenu extends Container {
|
|
|
157
159
|
|
|
158
160
|
// Hint
|
|
159
161
|
this.addChild(new Spacer(1));
|
|
160
|
-
this.addChild(new
|
|
162
|
+
this.addChild(new DynamicThemeText(() => theme.fg("dim", " Enter to select · Esc to go back")));
|
|
161
163
|
}
|
|
162
164
|
|
|
163
165
|
#updatePreview(): void {
|
|
@@ -708,6 +710,11 @@ export interface SettingsCallbacks {
|
|
|
708
710
|
onThemePreview?: (theme: string) => void | Promise<void>;
|
|
709
711
|
/** Called to restore the rendered theme when theme settings preview is cancelled */
|
|
710
712
|
onThemePreviewCancel?: (theme: string) => void | Promise<void>;
|
|
713
|
+
/**
|
|
714
|
+
* Atomically apply and persist a theme selection. Returns false when the
|
|
715
|
+
* candidate could not be loaded, leaving the submenu open.
|
|
716
|
+
*/
|
|
717
|
+
onThemeCommit?: (path: "theme.dark" | "theme.light", theme: string, previousTheme: string) => Promise<boolean>;
|
|
711
718
|
/** Called to live-preview the gajae pet skin while browsing the pet setting. */
|
|
712
719
|
onPetPreview?: (mode: string) => void;
|
|
713
720
|
/**
|
|
@@ -971,6 +978,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
971
978
|
}
|
|
972
979
|
let description = def.description;
|
|
973
980
|
if (def.path === "pet.mode") {
|
|
981
|
+
currentValue = resolvePetMode(currentValue);
|
|
974
982
|
const petAvailable = this.context.petAvailable ?? isPetAvailable();
|
|
975
983
|
options = createPetSelectItems(options, currentValue, petAvailable);
|
|
976
984
|
// Unsupported terminals must see the same actionable guidance the
|
|
@@ -1072,6 +1080,22 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1072
1080
|
done(value);
|
|
1073
1081
|
return;
|
|
1074
1082
|
}
|
|
1083
|
+
if (def.path === "theme.dark" || def.path === "theme.light") {
|
|
1084
|
+
// The theme commit persists through the controller, so it must honor
|
|
1085
|
+
// the same invalid-config guard as every other durable write: report
|
|
1086
|
+
// the repair error and leave the submenu open instead of no-oping.
|
|
1087
|
+
if (!settings.canWriteDurableConfig()) {
|
|
1088
|
+
this.callbacks.onError?.(
|
|
1089
|
+
"Cannot change settings while config.yml has invalid YAML syntax. Repair config.yml and reload settings.",
|
|
1090
|
+
);
|
|
1091
|
+
return;
|
|
1092
|
+
}
|
|
1093
|
+
if (!this.callbacks.onThemeCommit) return;
|
|
1094
|
+
void this.callbacks.onThemeCommit(def.path, value, currentValue).then(accepted => {
|
|
1095
|
+
if (accepted) done(value);
|
|
1096
|
+
});
|
|
1097
|
+
return;
|
|
1098
|
+
}
|
|
1075
1099
|
if (def.path === "pet.mode") {
|
|
1076
1100
|
// The shared pet commit policy rechecks capability immediately
|
|
1077
1101
|
// before mutation and persists only on acceptance; the settings
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import { type RunGh, runGhDefault } from "../../../utils/gh";
|
|
2
2
|
|
|
3
3
|
const STATUS_LINE_GH_TIMEOUT_MS = 5_000;
|
|
4
|
+
const STATUS_LINE_PR_CACHE_TTL_MS = 60_000;
|
|
4
5
|
const C0_C1_CONTROL_CHARACTERS = /[\u0000-\u001f\u007f-\u009f]/;
|
|
6
|
+
type CurrentPr = { number: number; url: string } | null;
|
|
7
|
+
|
|
8
|
+
interface PrCacheEntry {
|
|
9
|
+
value: CurrentPr;
|
|
10
|
+
expiresAt: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const prCache = new Map<string, PrCacheEntry>();
|
|
14
|
+
const prLookupsInFlight = new Map<string, Promise<CurrentPr>>();
|
|
5
15
|
|
|
6
16
|
function canonicalPrUrl(value: unknown, number: number): string | null {
|
|
7
17
|
if (typeof value !== "string" || C0_C1_CONTROL_CHARACTERS.test(value)) return null;
|
|
@@ -22,7 +32,7 @@ function canonicalPrUrl(value: unknown, number: number): string | null {
|
|
|
22
32
|
}
|
|
23
33
|
}
|
|
24
34
|
|
|
25
|
-
export async function lookupCurrentPr(runGh: RunGh = runGhDefault): Promise<
|
|
35
|
+
export async function lookupCurrentPr(runGh: RunGh = runGhDefault): Promise<CurrentPr> {
|
|
26
36
|
try {
|
|
27
37
|
const result = await runGh(["pr", "view", "--json", "number,url"], { timeoutMs: STATUS_LINE_GH_TIMEOUT_MS });
|
|
28
38
|
if (result.exitCode !== 0 || result.timedOut) return null;
|
|
@@ -35,3 +45,37 @@ export async function lookupCurrentPr(runGh: RunGh = runGhDefault): Promise<{ nu
|
|
|
35
45
|
return null;
|
|
36
46
|
}
|
|
37
47
|
}
|
|
48
|
+
|
|
49
|
+
export function lookupCurrentPrCached(
|
|
50
|
+
cacheKey: string,
|
|
51
|
+
runGh: RunGh = runGhDefault,
|
|
52
|
+
now: () => number = Date.now,
|
|
53
|
+
): Promise<CurrentPr> {
|
|
54
|
+
const cached = prCache.get(cacheKey);
|
|
55
|
+
if (cached && cached.expiresAt > now()) return Promise.resolve(cached.value);
|
|
56
|
+
|
|
57
|
+
const inFlight = prLookupsInFlight.get(cacheKey);
|
|
58
|
+
if (inFlight) return inFlight;
|
|
59
|
+
|
|
60
|
+
const lookup = lookupCurrentPr(runGh)
|
|
61
|
+
.then(value => {
|
|
62
|
+
// Bound process-lifetime memory: drop every expired entry on insert so
|
|
63
|
+
// the map holds only keys seen within one TTL window.
|
|
64
|
+
const timestamp = now();
|
|
65
|
+
for (const [key, entry] of prCache) {
|
|
66
|
+
if (entry.expiresAt <= timestamp) prCache.delete(key);
|
|
67
|
+
}
|
|
68
|
+
prCache.set(cacheKey, { value, expiresAt: timestamp + STATUS_LINE_PR_CACHE_TTL_MS });
|
|
69
|
+
return value;
|
|
70
|
+
})
|
|
71
|
+
.finally(() => {
|
|
72
|
+
if (prLookupsInFlight.get(cacheKey) === lookup) prLookupsInFlight.delete(cacheKey);
|
|
73
|
+
});
|
|
74
|
+
prLookupsInFlight.set(cacheKey, lookup);
|
|
75
|
+
return lookup;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function clearCurrentPrCache(): void {
|
|
79
|
+
prCache.clear();
|
|
80
|
+
prLookupsInFlight.clear();
|
|
81
|
+
}
|
|
@@ -21,7 +21,7 @@ function withIcon(icon: string, text: string): string {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
function stripDisplayRoot(pwd: string): string {
|
|
24
|
-
for (const root of
|
|
24
|
+
for (const root of displayRoots()) {
|
|
25
25
|
const relative = relativePathWithinRoot(root, pwd);
|
|
26
26
|
if (relative) return relative;
|
|
27
27
|
}
|
|
@@ -32,7 +32,15 @@ function normalizePremiumRequests(value: number): number {
|
|
|
32
32
|
return Math.round((value + Number.EPSILON) * 100) / 100;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
// Display roots take precedence over scratch classification: ~/Projects and
|
|
36
|
+
// /work are deliberate workspaces, never scratch, even when the home directory
|
|
37
|
+
// itself sits under a temp/scratch root (CI harnesses and containers redirect
|
|
38
|
+
// HOME beneath the OS temp dir). Resolved at render time so a preload-rewritten
|
|
39
|
+
// HOME is honored, matching scratchRoots().
|
|
40
|
+
function displayRoots(): readonly string[] {
|
|
41
|
+
return ["/work", path.join(os.homedir(), "Projects")];
|
|
42
|
+
}
|
|
43
|
+
function scratchRoots(): readonly string[] {
|
|
36
44
|
const roots = new Set<string>([os.tmpdir(), path.join(os.homedir(), "tmp")]);
|
|
37
45
|
if (process.platform === "win32") {
|
|
38
46
|
const { TEMP, TMP, SystemRoot } = process.env;
|
|
@@ -48,10 +56,17 @@ const SCRATCH_ROOTS: readonly string[] = (() => {
|
|
|
48
56
|
}
|
|
49
57
|
}
|
|
50
58
|
return [...roots];
|
|
51
|
-
}
|
|
59
|
+
}
|
|
52
60
|
|
|
53
61
|
function classifyProjectDir(pwd: string): { scratch: boolean; relative: string | null } {
|
|
54
|
-
|
|
62
|
+
// A deliberate display root wins over scratch ancestry: ~/Projects is a
|
|
63
|
+
// workspace even when HOME itself sits under the OS temp dir (CI and test
|
|
64
|
+
// harnesses redirect HOME beneath the scratch root). This is more precise
|
|
65
|
+
// than exempting all of HOME: ~/tmp stays scratch (it is in scratchRoots).
|
|
66
|
+
for (const root of displayRoots()) {
|
|
67
|
+
if (pathIsWithin(root, pwd)) return { scratch: false, relative: null };
|
|
68
|
+
}
|
|
69
|
+
for (const root of scratchRoots()) {
|
|
55
70
|
if (pathIsWithin(root, pwd)) {
|
|
56
71
|
return { scratch: true, relative: relativePathWithinRoot(root, pwd) };
|
|
57
72
|
}
|
|
@@ -19,7 +19,7 @@ import type { ActionRegistry, FocusDomain } from "../action-registry";
|
|
|
19
19
|
import { EMPTY_JOBS_SNAPSHOT, type JobsSnapshot } from "../jobs-observer";
|
|
20
20
|
import { sanitizeStatusText } from "../shared";
|
|
21
21
|
import { renderSkillHudBar } from "./skill-hud/render";
|
|
22
|
-
import {
|
|
22
|
+
import { lookupCurrentPrCached } from "./status-line/gh";
|
|
23
23
|
import {
|
|
24
24
|
canReuseCachedPr,
|
|
25
25
|
createPrCacheContext,
|
|
@@ -399,6 +399,10 @@ export class StatusLineComponent implements Component {
|
|
|
399
399
|
|
|
400
400
|
this.#prLookupInFlight = true;
|
|
401
401
|
const lookupContext = currentContext;
|
|
402
|
+
if (!lookupContext) {
|
|
403
|
+
this.#prLookupInFlight = false;
|
|
404
|
+
return stalePr ?? null;
|
|
405
|
+
}
|
|
402
406
|
|
|
403
407
|
// Fire async lookup, keep stale value visible until resolved
|
|
404
408
|
(async () => {
|
|
@@ -415,7 +419,7 @@ export class StatusLineComponent implements Component {
|
|
|
415
419
|
};
|
|
416
420
|
try {
|
|
417
421
|
// Requires `gh repo set-default` to be configured; fails gracefully if not
|
|
418
|
-
const pr = await
|
|
422
|
+
const pr = await lookupCurrentPrCached(`${lookupContext.repoId ?? ""}\0${lookupContext.branch}`);
|
|
419
423
|
setCachedPr(pr);
|
|
420
424
|
} finally {
|
|
421
425
|
this.#prLookupInFlight = false;
|
|
@@ -579,6 +583,8 @@ export class StatusLineComponent implements Component {
|
|
|
579
583
|
pushWindow(`${providerId ?? "provider"}:5h`, "5h", fraction, resetsAt, "m");
|
|
580
584
|
} else if (windowId === "7d" && !tier) {
|
|
581
585
|
pushWindow(`${providerId ?? "provider"}:7d`, "7d", fraction, resetsAt, "h");
|
|
586
|
+
} else if (providerId === "grok-build" && windowId === "weekly" && !tier) {
|
|
587
|
+
pushWindow("grok-build:weekly", "weekly", fraction, resetsAt, "h");
|
|
582
588
|
}
|
|
583
589
|
}
|
|
584
590
|
}
|
|
@@ -620,6 +626,10 @@ export class StatusLineComponent implements Component {
|
|
|
620
626
|
const contextPctSegmentActive =
|
|
621
627
|
effectiveSettings.leftSegments.includes("context_pct") ||
|
|
622
628
|
effectiveSettings.rightSegments.includes("context_pct");
|
|
629
|
+
// Never spawn a gh lookup when no pr segment is rendered; the pr segment
|
|
630
|
+
// treats a null value as hidden, so gating here is behavior-identical.
|
|
631
|
+
const prSegmentActive =
|
|
632
|
+
effectiveSettings.leftSegments.includes("pr") || effectiveSettings.rightSegments.includes("pr");
|
|
623
633
|
|
|
624
634
|
return {
|
|
625
635
|
session: this.session,
|
|
@@ -638,7 +648,7 @@ export class StatusLineComponent implements Component {
|
|
|
638
648
|
git: {
|
|
639
649
|
branch: this.#getCurrentBranch(),
|
|
640
650
|
status: this.#getGitStatus(),
|
|
641
|
-
pr: this.#lookupPr(),
|
|
651
|
+
pr: prSegmentActive ? this.#lookupPr() : null,
|
|
642
652
|
},
|
|
643
653
|
usage: this.#cachedUsage,
|
|
644
654
|
};
|
|
@@ -1588,20 +1588,20 @@ function formatWindowSuffix(label: string, windowLabel: string, uiTheme: typeof
|
|
|
1588
1588
|
return uiTheme.fg("dim", `(${windowLabel})`);
|
|
1589
1589
|
}
|
|
1590
1590
|
|
|
1591
|
-
function formatAccountLabel(limit: UsageLimit, report: UsageReport,
|
|
1591
|
+
function formatAccountLabel(limit: UsageLimit, report: UsageReport, reportIndex: number): string {
|
|
1592
1592
|
const email = (report.metadata?.email as string | undefined) ?? limit.scope.accountId;
|
|
1593
1593
|
if (email) return email;
|
|
1594
1594
|
const accountId = (report.metadata?.accountId as string | undefined) ?? limit.scope.accountId;
|
|
1595
1595
|
if (accountId) return accountId;
|
|
1596
|
-
return `account ${
|
|
1596
|
+
return `account ${reportIndex + 1}`;
|
|
1597
1597
|
}
|
|
1598
1598
|
|
|
1599
|
-
function formatUnlimitedReportLabel(report: UsageReport,
|
|
1599
|
+
function formatUnlimitedReportLabel(report: UsageReport, reportIndex: number): string {
|
|
1600
1600
|
const email = report.metadata?.email as string | undefined;
|
|
1601
1601
|
if (email) return email;
|
|
1602
1602
|
const accountId = report.metadata?.accountId as string | undefined;
|
|
1603
1603
|
if (accountId) return accountId;
|
|
1604
|
-
return `account ${
|
|
1604
|
+
return `account ${reportIndex + 1}`;
|
|
1605
1605
|
}
|
|
1606
1606
|
|
|
1607
1607
|
function formatResetShort(limit: UsageLimit, nowMs: number): string | undefined {
|
|
@@ -1614,6 +1614,7 @@ function formatResetShort(limit: UsageLimit, nowMs: number): string | undefined
|
|
|
1614
1614
|
function formatAccountHeaderRow(
|
|
1615
1615
|
limits: UsageLimit[],
|
|
1616
1616
|
reports: UsageReport[],
|
|
1617
|
+
reportIndexes: ReadonlyMap<UsageReport, number>,
|
|
1617
1618
|
nowMs: number,
|
|
1618
1619
|
columnWidth: number,
|
|
1619
1620
|
uiTheme: typeof theme,
|
|
@@ -1621,7 +1622,7 @@ function formatAccountHeaderRow(
|
|
|
1621
1622
|
const parts = limits.map((limit, index) => {
|
|
1622
1623
|
const reset = formatResetShort(limit, nowMs);
|
|
1623
1624
|
return {
|
|
1624
|
-
label: formatAccountLabel(limit, reports[index], index),
|
|
1625
|
+
label: formatAccountLabel(limit, reports[index], reportIndexes.get(reports[index]) ?? index),
|
|
1625
1626
|
suffix: reset ? `(${reset})` : "",
|
|
1626
1627
|
};
|
|
1627
1628
|
});
|
|
@@ -1780,6 +1781,7 @@ export function renderUsageReports(
|
|
|
1780
1781
|
for (const { provider, providerReports } of providerEntries) {
|
|
1781
1782
|
lines.push("");
|
|
1782
1783
|
const providerName = formatProviderName(provider);
|
|
1784
|
+
const reportIndexes = new Map(providerReports.map((report, index) => [report, index]));
|
|
1783
1785
|
|
|
1784
1786
|
const limitGroups = new Map<
|
|
1785
1787
|
string,
|
|
@@ -1811,10 +1813,13 @@ export function renderUsageReports(
|
|
|
1811
1813
|
const rankedAccounts = providerReports
|
|
1812
1814
|
.map(report => {
|
|
1813
1815
|
const [firstLimit] = report.limits;
|
|
1816
|
+
const reportIndex = reportIndexes.get(report) ?? 0;
|
|
1814
1817
|
return {
|
|
1815
1818
|
report,
|
|
1816
1819
|
total: report.limits.reduce((sum, limit) => sum + (resolveFraction(limit) ?? 0), 0),
|
|
1817
|
-
label: firstLimit
|
|
1820
|
+
label: firstLimit
|
|
1821
|
+
? formatAccountLabel(firstLimit, report, reportIndex)
|
|
1822
|
+
: formatUnlimitedReportLabel(report, reportIndex),
|
|
1818
1823
|
};
|
|
1819
1824
|
})
|
|
1820
1825
|
.sort((a, b) => (a.total !== b.total ? b.total - a.total : a.label.localeCompare(b.label)));
|
|
@@ -1850,7 +1855,14 @@ export function renderUsageReports(
|
|
|
1850
1855
|
|
|
1851
1856
|
const windowSuffix = formatWindowSuffix(group.label, group.windowLabel, uiTheme);
|
|
1852
1857
|
lines.push(`${statusIcon} ${uiTheme.bold(group.label)} ${windowSuffix}`.trim());
|
|
1853
|
-
const accountLabels = formatAccountHeaderRow(
|
|
1858
|
+
const accountLabels = formatAccountHeaderRow(
|
|
1859
|
+
sortedLimits,
|
|
1860
|
+
sortedReports,
|
|
1861
|
+
reportIndexes,
|
|
1862
|
+
nowMs,
|
|
1863
|
+
sectionColumnWidth,
|
|
1864
|
+
uiTheme,
|
|
1865
|
+
);
|
|
1854
1866
|
lines.push(` ${accountLabels.join(" ")}`.trimEnd());
|
|
1855
1867
|
const bars = sortedLimits.map(limit =>
|
|
1856
1868
|
padColumn(renderUsageBar(limit, uiTheme, sectionColumnWidth), sectionColumnWidth),
|
|
@@ -1869,7 +1881,7 @@ export function renderUsageReports(
|
|
|
1869
1881
|
// Render accounts with no rate limits (e.g. business/enterprise plans).
|
|
1870
1882
|
const unlimitedReports = providerReports.filter(report => report.limits.length === 0);
|
|
1871
1883
|
for (const report of unlimitedReports) {
|
|
1872
|
-
const label = formatUnlimitedReportLabel(report, 0);
|
|
1884
|
+
const label = formatUnlimitedReportLabel(report, reportIndexes.get(report) ?? 0);
|
|
1873
1885
|
const tier = report.metadata?.planType as string | undefined;
|
|
1874
1886
|
const tierSuffix = tier ? ` ${uiTheme.fg("dim", `(${tier})`)}` : "";
|
|
1875
1887
|
lines.push(
|