@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
package/src/cli/skills-cli.ts
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Handles `gjc skills` for inspecting bundled workflow
|
|
2
|
+
* Handles `gjc skills` for inspecting bundled workflow skills and
|
|
3
|
+
* filesystem-discovered custom skills.
|
|
3
4
|
*/
|
|
5
|
+
import { Settings } from "../config/settings";
|
|
4
6
|
import {
|
|
5
7
|
DEFAULT_GJC_DEFINITION_NAMES,
|
|
6
8
|
type EmbeddedDefaultGjcSkill,
|
|
7
9
|
getEmbeddedDefaultGjcSkills,
|
|
8
10
|
} from "../defaults/gjc-defaults";
|
|
11
|
+
import { discoverRuntimeSkills, type RuntimeSkillDiscoveryCandidate } from "../extensibility/runtime-skill-discovery";
|
|
9
12
|
|
|
10
|
-
export type SkillsAction = "list" | "read";
|
|
13
|
+
export type SkillsAction = "list" | "read" | "discover";
|
|
11
14
|
|
|
12
15
|
export interface SkillsCommandArgs {
|
|
13
16
|
action: SkillsAction;
|
|
14
17
|
name?: string;
|
|
15
18
|
flags?: {
|
|
16
19
|
json?: boolean;
|
|
20
|
+
source?: "all" | "project" | "user";
|
|
17
21
|
};
|
|
18
22
|
}
|
|
19
23
|
|
|
@@ -45,6 +49,11 @@ function writeJson(value: unknown): void {
|
|
|
45
49
|
process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
|
|
46
50
|
}
|
|
47
51
|
|
|
52
|
+
function formatCandidate(candidate: RuntimeSkillDiscoveryCandidate): string {
|
|
53
|
+
const useWhen = candidate.useWhen && candidate.useWhen.length > 0 ? ` [when: ${candidate.useWhen.join(", ")}]` : "";
|
|
54
|
+
return `${candidate.name}\t${candidate.source}\t${candidate.description}\t${candidate.path}${useWhen}`;
|
|
55
|
+
}
|
|
56
|
+
|
|
48
57
|
export async function runSkillsCommand(cmd: SkillsCommandArgs): Promise<void> {
|
|
49
58
|
if (cmd.action === "list") {
|
|
50
59
|
const skills = listEmbeddedSkills();
|
|
@@ -58,6 +67,33 @@ export async function runSkillsCommand(cmd: SkillsCommandArgs): Promise<void> {
|
|
|
58
67
|
return;
|
|
59
68
|
}
|
|
60
69
|
|
|
70
|
+
if (cmd.action === "discover") {
|
|
71
|
+
const source = cmd.flags?.source ?? "all";
|
|
72
|
+
const settings = await Settings.loadForScope({ cwd: process.cwd() });
|
|
73
|
+
const result = await discoverRuntimeSkills({
|
|
74
|
+
cwd: process.cwd(),
|
|
75
|
+
source,
|
|
76
|
+
policy: {
|
|
77
|
+
...settings.getGroup("skills"),
|
|
78
|
+
disabledExtensions: settings.get("disabledExtensions"),
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
if (cmd.flags?.json) {
|
|
82
|
+
writeJson({ candidates: result.candidates, diagnostics: result.diagnostics.messages });
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
for (const candidate of result.candidates) {
|
|
86
|
+
process.stdout.write(`${formatCandidate(candidate)}\n`);
|
|
87
|
+
}
|
|
88
|
+
if (result.diagnostics.messages.length > 0) {
|
|
89
|
+
process.stdout.write("\nDiagnostics:\n");
|
|
90
|
+
for (const message of result.diagnostics.messages) {
|
|
91
|
+
process.stdout.write(`- ${message}\n`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
|
|
61
97
|
const name = cmd.name?.trim();
|
|
62
98
|
if (!name) {
|
|
63
99
|
process.stderr.write(`error: skill name is required for read (${DEFAULT_GJC_DEFINITION_NAMES.join(", ")})\n`);
|
package/src/cli/update-cli.ts
CHANGED
|
@@ -10,15 +10,19 @@ import { pipeline } from "node:stream/promises";
|
|
|
10
10
|
import { $which, APP_NAME, isEnoent, VERSION } from "@gajae-code/utils";
|
|
11
11
|
import { $ } from "bun";
|
|
12
12
|
import chalk from "chalk";
|
|
13
|
+
import { Settings } from "../config/settings";
|
|
13
14
|
import { distTagForChannel, isUpdateChannel, UPDATE_CHANNELS, type UpdateChannel } from "../config/update-channel";
|
|
14
15
|
import { installDefaultGjcDefinitions } from "../defaults/gjc-defaults";
|
|
15
16
|
import { theme } from "../modes/theme/theme";
|
|
17
|
+
import { getNotificationConfig, type NotificationProvider, resolveNotificationProvider } from "../sdk/bus/config";
|
|
16
18
|
import {
|
|
17
19
|
DEFAULT_NPM_REGISTRY,
|
|
18
20
|
fetchLatestPackageVersion,
|
|
19
21
|
type Installer,
|
|
20
22
|
type NpmRegistryLookupOptions,
|
|
21
23
|
} from "../utils/npm-registry";
|
|
24
|
+
import { runDaemonCommand } from "./daemon-cli";
|
|
25
|
+
import { runNotifyCommand } from "./notify-cli";
|
|
22
26
|
|
|
23
27
|
const RELEASE_REPO = "Yeachan-Heo/gajae-code";
|
|
24
28
|
const PACKAGE = "@gajae-code/coding-agent";
|
|
@@ -602,9 +606,9 @@ async function updateViaPackageManager(options: PackageManagerUpdateOptions): Pr
|
|
|
602
606
|
/**
|
|
603
607
|
* Update via bun package manager.
|
|
604
608
|
*/
|
|
605
|
-
async function updateViaBun(expectedVersion: string): Promise<
|
|
609
|
+
async function updateViaBun(expectedVersion: string): Promise<InstalledVersionVerification> {
|
|
606
610
|
console.log(chalk.dim("Updating via bun..."));
|
|
607
|
-
await updateViaPackageManager({
|
|
611
|
+
return await updateViaPackageManager({
|
|
608
612
|
managerName: "bun",
|
|
609
613
|
expectedVersion,
|
|
610
614
|
runInstall: async version => await $`bun install -g ${PACKAGE}@${version}`.nothrow(),
|
|
@@ -612,9 +616,9 @@ async function updateViaBun(expectedVersion: string): Promise<void> {
|
|
|
612
616
|
});
|
|
613
617
|
}
|
|
614
618
|
|
|
615
|
-
async function updateViaNpm(packageName: string, expectedVersion: string): Promise<
|
|
619
|
+
async function updateViaNpm(packageName: string, expectedVersion: string): Promise<InstalledVersionVerification> {
|
|
616
620
|
console.log(chalk.dim(`Updating npm-managed install via npm (${packageName})...`));
|
|
617
|
-
await updateViaPackageManager({
|
|
621
|
+
return await updateViaPackageManager({
|
|
618
622
|
managerName: "npm",
|
|
619
623
|
expectedVersion,
|
|
620
624
|
runInstall: async version => await $`npm install -g ${packageName}@${version}`.nothrow(),
|
|
@@ -735,7 +739,11 @@ function formatRegistryProvenance(version: string, registry: string | undefined)
|
|
|
735
739
|
/**
|
|
736
740
|
* Download a release binary to a target path, replacing an existing file.
|
|
737
741
|
*/
|
|
738
|
-
async function updateViaBinaryAt(
|
|
742
|
+
async function updateViaBinaryAt(
|
|
743
|
+
targetPath: string,
|
|
744
|
+
expectedVersion: string,
|
|
745
|
+
registry?: string,
|
|
746
|
+
): Promise<InstalledVersionVerification> {
|
|
739
747
|
const binaryName = getBinaryName();
|
|
740
748
|
const url = buildReleaseBinaryUrl(expectedVersion);
|
|
741
749
|
const registryNote = formatRegistryProvenance(expectedVersion, registry);
|
|
@@ -753,6 +761,7 @@ async function updateViaBinaryAt(targetPath: string, expectedVersion: string, re
|
|
|
753
761
|
printVerifiedVersion(expectedVersion);
|
|
754
762
|
if (verification.cleanupWarning) console.warn(chalk.yellow(verification.cleanupWarning));
|
|
755
763
|
printRestartGuidance();
|
|
764
|
+
return verification;
|
|
756
765
|
}
|
|
757
766
|
|
|
758
767
|
/**
|
|
@@ -761,18 +770,151 @@ async function updateViaBinaryAt(targetPath: string, expectedVersion: string, re
|
|
|
761
770
|
export interface UpdateCommandDependencies {
|
|
762
771
|
getLatestRelease?: (options?: LatestReleaseLookupOptions) => Promise<ReleaseInfo>;
|
|
763
772
|
resolveUpdateTarget?: () => Promise<UpdateTarget>;
|
|
764
|
-
performUpdate?: (
|
|
773
|
+
performUpdate?: (
|
|
774
|
+
target: UpdateTarget,
|
|
775
|
+
expectedVersion: string,
|
|
776
|
+
registry?: string,
|
|
777
|
+
) => Promise<InstalledVersionVerification | undefined>;
|
|
765
778
|
refreshInstalledDefaultSkills?: () => Promise<void>;
|
|
779
|
+
settings?: () => Promise<Settings>;
|
|
780
|
+
stopDaemon?: (settings: Settings) => Promise<void>;
|
|
781
|
+
restartDaemon?: (settings: Settings) => Promise<void>;
|
|
782
|
+
recoverNotifications?: (settings: Settings) => Promise<void>;
|
|
783
|
+
runPostUpdateRecovery?: (runtimePath: string) => Promise<void>;
|
|
766
784
|
exit?: (code: number) => never;
|
|
767
785
|
}
|
|
768
786
|
|
|
769
|
-
|
|
787
|
+
export type PostUpdateRecoverySpawn = (argv: string[]) => Promise<number>;
|
|
788
|
+
export type PostUpdateRecoverySupportCheck = (runtimePath: string) => Promise<boolean>;
|
|
789
|
+
export type LegacyRecoveryDaemonKinds = () => Promise<NotificationProvider[]>;
|
|
790
|
+
|
|
791
|
+
/**
|
|
792
|
+
* A complete, non-quarantined provider with provider-level desired intent is a
|
|
793
|
+
* durable managed-notify setup. The global switch is deliberately excluded:
|
|
794
|
+
* disabling delivery must not leave credential-backed daemon locks unrecovered.
|
|
795
|
+
*/
|
|
796
|
+
export function hasManagedNotifySetup(settings: Settings): boolean {
|
|
797
|
+
return managedNotifyDaemonKinds(settings).length > 0;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
function managedNotifyDaemonKinds(settings: Settings): NotificationProvider[] {
|
|
801
|
+
const config = getNotificationConfig(settings);
|
|
802
|
+
return (["telegram", "discord", "slack"] as const).filter(provider => {
|
|
803
|
+
const resolution = resolveNotificationProvider(config, provider);
|
|
804
|
+
return resolution.configured && !resolution.quarantined && resolution.desiredEnabled;
|
|
805
|
+
});
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
async function stopManagedDaemon(settings: Settings): Promise<void> {
|
|
809
|
+
const kinds = managedNotifyDaemonKinds(settings);
|
|
810
|
+
let failed = false;
|
|
811
|
+
await runDaemonCommand(
|
|
812
|
+
{ action: "stop", kinds, all: false, json: false, force: true },
|
|
813
|
+
{
|
|
814
|
+
settings,
|
|
815
|
+
setExitCode: code => {
|
|
816
|
+
if (code !== 0) failed = true;
|
|
817
|
+
},
|
|
818
|
+
},
|
|
819
|
+
);
|
|
820
|
+
if (failed) throw new Error("daemon stop reported failure");
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
async function restartManagedDaemon(settings: Settings): Promise<void> {
|
|
824
|
+
const kinds = managedNotifyDaemonKinds(settings);
|
|
825
|
+
let failed = false;
|
|
826
|
+
await runDaemonCommand(
|
|
827
|
+
{ action: "restart", kinds, all: false, json: false, force: false, allowDisabledNoop: true },
|
|
828
|
+
{
|
|
829
|
+
settings,
|
|
830
|
+
setExitCode: code => {
|
|
831
|
+
if (code !== 0) failed = true;
|
|
832
|
+
},
|
|
833
|
+
},
|
|
834
|
+
);
|
|
835
|
+
if (failed) throw new Error("daemon restart reported failure");
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
async function recoverManagedNotifications(settings: Settings): Promise<void> {
|
|
839
|
+
await runNotifyCommand({ action: "recovery", rawArgs: [], forceDaemonLock: false }, { settings });
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
async function spawnPostUpdateRecovery(argv: string[]): Promise<number> {
|
|
843
|
+
const child = Bun.spawn(argv, { stdin: "inherit", stdout: "inherit", stderr: "inherit" });
|
|
844
|
+
return await child.exited;
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
async function supportsUpdateRecovery(runtimePath: string): Promise<boolean> {
|
|
848
|
+
const child = Bun.spawn([runtimePath, "update", "--help"], { stdout: "pipe", stderr: "pipe" });
|
|
849
|
+
const [exitCode, stdout] = await Promise.all([child.exited, new Response(child.stdout).text()]);
|
|
850
|
+
return exitCode === 0 && stdout.includes("update-recovery");
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
async function runLegacyPostUpdateRecovery(
|
|
854
|
+
runtimePath: string,
|
|
855
|
+
spawn: PostUpdateRecoverySpawn,
|
|
856
|
+
managedKinds: LegacyRecoveryDaemonKinds,
|
|
857
|
+
): Promise<void> {
|
|
858
|
+
const kinds = await managedKinds();
|
|
859
|
+
if (kinds.length === 0) return;
|
|
860
|
+
for (const [name, argv] of [
|
|
861
|
+
["daemon stop --force", [runtimePath, "daemon", "stop", ...kinds, "--force"]],
|
|
862
|
+
["daemon reload", [runtimePath, "daemon", "reload", ...kinds]],
|
|
863
|
+
["notify recovery", [runtimePath, "notify", "recovery"]],
|
|
864
|
+
] as const) {
|
|
865
|
+
const exitCode = await spawn([...argv]);
|
|
866
|
+
if (exitCode !== 0) throw new Error(`legacy post-update ${name} exited ${exitCode}`);
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
export async function runPostUpdateRecoveryForTest(
|
|
871
|
+
runtimePath: string,
|
|
872
|
+
spawn: PostUpdateRecoverySpawn = spawnPostUpdateRecovery,
|
|
873
|
+
supportsRecovery: PostUpdateRecoverySupportCheck = supportsUpdateRecovery,
|
|
874
|
+
managedKinds: LegacyRecoveryDaemonKinds = async () => managedNotifyDaemonKinds(await Settings.init()),
|
|
875
|
+
): Promise<void> {
|
|
876
|
+
if (!(await supportsRecovery(runtimePath))) {
|
|
877
|
+
await runLegacyPostUpdateRecovery(runtimePath, spawn, managedKinds);
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
const exitCode = await spawn([runtimePath, "update", "update-recovery"]);
|
|
881
|
+
if (exitCode !== 0) throw new Error(`the verified installed runtime exited ${exitCode}`);
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
async function runPostUpdateRecovery(runtimePath: string): Promise<void> {
|
|
885
|
+
await runPostUpdateRecoveryForTest(runtimePath);
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
export async function runManagedNotifyRecovery(
|
|
889
|
+
deps: Pick<UpdateCommandDependencies, "settings" | "stopDaemon" | "restartDaemon" | "recoverNotifications">,
|
|
890
|
+
): Promise<void> {
|
|
891
|
+
const settings = await (deps.settings ?? (() => Settings.init()))();
|
|
892
|
+
if (!hasManagedNotifySetup(settings)) return;
|
|
893
|
+
const stages: readonly [string, (settings: Settings) => Promise<void>][] = [
|
|
894
|
+
["daemon stop --force", deps.stopDaemon ?? stopManagedDaemon],
|
|
895
|
+
["daemon restart", deps.restartDaemon ?? restartManagedDaemon],
|
|
896
|
+
["notify recovery", deps.recoverNotifications ?? recoverManagedNotifications],
|
|
897
|
+
];
|
|
898
|
+
for (const [name, run] of stages) {
|
|
899
|
+
try {
|
|
900
|
+
await run(settings);
|
|
901
|
+
} catch (error) {
|
|
902
|
+
throw new Error(`Post-update ${name} failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
async function performUpdate(
|
|
908
|
+
target: UpdateTarget,
|
|
909
|
+
expectedVersion: string,
|
|
910
|
+
registry?: string,
|
|
911
|
+
): Promise<InstalledVersionVerification> {
|
|
770
912
|
if (target.method === "bun") {
|
|
771
|
-
await updateViaBun(expectedVersion);
|
|
913
|
+
return await updateViaBun(expectedVersion);
|
|
772
914
|
} else if (target.method === "npm") {
|
|
773
|
-
await updateViaNpm(target.packageName, expectedVersion);
|
|
915
|
+
return await updateViaNpm(target.packageName, expectedVersion);
|
|
774
916
|
} else {
|
|
775
|
-
await updateViaBinaryAt(target.path, expectedVersion, registry);
|
|
917
|
+
return await updateViaBinaryAt(target.path, expectedVersion, registry);
|
|
776
918
|
}
|
|
777
919
|
}
|
|
778
920
|
|
|
@@ -881,14 +1023,24 @@ export async function runUpdateCommand(
|
|
|
881
1023
|
|
|
882
1024
|
if (opts.check) return;
|
|
883
1025
|
|
|
1026
|
+
let installedVersion: string | undefined;
|
|
884
1027
|
try {
|
|
885
1028
|
const resolved = target ?? (await resolveTarget());
|
|
886
|
-
await update(resolved, release.version, release.registry);
|
|
1029
|
+
const verification = await update(resolved, release.version, release.registry);
|
|
1030
|
+
if (verification?.path) {
|
|
1031
|
+
installedVersion = release.version;
|
|
1032
|
+
await (deps.runPostUpdateRecovery ?? runPostUpdateRecovery)(verification.path);
|
|
1033
|
+
} else if (!deps.performUpdate) throw new Error("verified installed runtime path is unavailable");
|
|
887
1034
|
} catch (err) {
|
|
888
|
-
|
|
1035
|
+
const prefix = installedVersion
|
|
1036
|
+
? `Updated to ${installedVersion}, but post-update recovery failed`
|
|
1037
|
+
: "Update failed";
|
|
1038
|
+
console.error(chalk.red(`${prefix}: ${err}`));
|
|
889
1039
|
return exit(1);
|
|
890
1040
|
}
|
|
891
1041
|
|
|
1042
|
+
// The installed runtime completes recovery before this old updater process
|
|
1043
|
+
// refreshes opt-in local definitions, avoiding stale-module daemon control.
|
|
892
1044
|
await refreshDefaults();
|
|
893
1045
|
}
|
|
894
1046
|
|
|
@@ -927,6 +1079,9 @@ ${chalk.bold("Options:")}
|
|
|
927
1079
|
-f, --force Force reinstall even if up to date
|
|
928
1080
|
--channel <stable|nightly> Release channel to update from (default: stable or startup.updateChannel setting)
|
|
929
1081
|
|
|
1082
|
+
${chalk.bold("After a verified update:")}
|
|
1083
|
+
When a complete managed notification provider is configured, GJC serially stops the daemon with --force, restarts it, then runs notify recovery. Globally disabled delivery still receives this lock recovery.
|
|
1084
|
+
|
|
930
1085
|
${chalk.bold("Examples:")}
|
|
931
1086
|
${APP_NAME} update Update to latest version
|
|
932
1087
|
${APP_NAME} update --check Check if updates are available
|
package/src/cli.ts
CHANGED
|
@@ -39,11 +39,13 @@ export const commands: CommandEntry[] = [
|
|
|
39
39
|
{ name: "auth-gateway", load: () => import("./commands/auth-gateway").then(m => m.default) },
|
|
40
40
|
{ name: "skills", load: () => import("./commands/skills").then(m => m.default) },
|
|
41
41
|
{ name: "session", load: () => import("./commands/session").then(m => m.default) },
|
|
42
|
+
{ name: "accounts", load: () => import("./commands/accounts").then(m => m.default) },
|
|
42
43
|
{ name: "harness", load: () => import("./commands/harness").then(m => m.default) },
|
|
43
44
|
{ name: "coordinator", load: () => import("./commands/coordinator").then(m => m.default) },
|
|
44
45
|
{ name: "team", load: () => import("./commands/team").then(m => m.default) },
|
|
45
46
|
{ name: "ultragoal", load: () => import("./commands/ultragoal").then(m => m.default) },
|
|
46
47
|
{ name: "gc", load: () => import("./commands/gc").then(m => m.default) },
|
|
48
|
+
{ name: "crash", load: () => import("./commands/crash").then(m => m.default) },
|
|
47
49
|
{ name: "ralplan", load: () => import("./commands/ralplan").then(m => m.default) },
|
|
48
50
|
{ name: "config", load: () => import("./commands/config").then(m => m.default) },
|
|
49
51
|
{ name: "stats", load: () => import("./commands/stats").then(m => m.default) },
|
|
@@ -64,6 +66,7 @@ export const commands: CommandEntry[] = [
|
|
|
64
66
|
{ name: "rlm", load: () => import("./commands/rlm").then(m => m.default) },
|
|
65
67
|
{ name: "update", load: () => import("./commands/update").then(m => m.default) },
|
|
66
68
|
{ name: "read", load: () => import("./commands/read").then(m => m.default) },
|
|
69
|
+
{ name: "customize", load: () => import("./commands/customize").then(m => m.default) },
|
|
67
70
|
{ name: "plugin", load: () => import("./commands/plugin").then(m => m.default) },
|
|
68
71
|
{ name: "completion", load: () => import("./commands/completion").then(m => m.default) },
|
|
69
72
|
{ name: "launch", load: () => import("./commands/launch").then(m => m.default) },
|
|
@@ -302,6 +305,7 @@ export class RootHelpCommand extends Command {
|
|
|
302
305
|
`# Use different model (fuzzy matching)\n ${APP_NAME} --model opus "Help me refactor this code"`,
|
|
303
306
|
`# Limit model cycling to specific models\n ${APP_NAME} --models claude-sonnet,claude-haiku,gpt-4o`,
|
|
304
307
|
`# Pin a stored credential for this session\n ${APP_NAME} --credential email:me@example.com`,
|
|
308
|
+
`# Prefer a stored credential, falling back on quota limits\n ${APP_NAME} --prefer-credential id:15`,
|
|
305
309
|
`# Activate a model profile for this session\n ${APP_NAME} --mpreset codex-medium`,
|
|
306
310
|
`# Persist a model profile as the default\n ${APP_NAME} --mpreset opencodego --default`,
|
|
307
311
|
`# Export a session file to HTML\n ${APP_NAME} --export ~/.gjc/agent/sessions/--path--/session.jsonl`,
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/** Manage stored OAuth accounts without exposing credential payloads. */
|
|
2
|
+
import { Args, Command, Flags, renderCommandHelp } from "@gajae-code/utils/cli";
|
|
3
|
+
import {
|
|
4
|
+
ACCOUNTS_ACTIONS,
|
|
5
|
+
type AccountsAction,
|
|
6
|
+
type AccountsCommandArgs,
|
|
7
|
+
runAccountsCommand,
|
|
8
|
+
} from "../cli/accounts-cli";
|
|
9
|
+
|
|
10
|
+
export default class Accounts extends Command {
|
|
11
|
+
static description = "List, check, pin, and remove stored OAuth accounts";
|
|
12
|
+
static strict = true;
|
|
13
|
+
|
|
14
|
+
static args = {
|
|
15
|
+
action: Args.string({
|
|
16
|
+
description: "Account action",
|
|
17
|
+
required: false,
|
|
18
|
+
options: [...ACCOUNTS_ACTIONS],
|
|
19
|
+
}),
|
|
20
|
+
provider: Args.string({
|
|
21
|
+
description: "Provider id",
|
|
22
|
+
required: false,
|
|
23
|
+
}),
|
|
24
|
+
selector: Args.string({
|
|
25
|
+
description: "Account selector (bare email, id:, email:, or account:)",
|
|
26
|
+
required: false,
|
|
27
|
+
}),
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
static flags = {
|
|
31
|
+
json: Flags.boolean({ description: "Output safe machine-readable JSON" }),
|
|
32
|
+
persistent: Flags.boolean({ description: "Required for persistent pin changes" }),
|
|
33
|
+
clear: Flags.boolean({ description: "Clear the persistent pin" }),
|
|
34
|
+
account: Flags.string({ description: "Logout one account by row id or email" }),
|
|
35
|
+
all: Flags.boolean({ description: "Logout every OAuth account for the provider" }),
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
static examples = [
|
|
39
|
+
"gjc accounts list",
|
|
40
|
+
"gjc accounts list --json",
|
|
41
|
+
"gjc accounts check",
|
|
42
|
+
"gjc accounts check anthropic --json",
|
|
43
|
+
"gjc accounts pin anthropic me@example.com --persistent",
|
|
44
|
+
"gjc accounts pin anthropic id:42 --persistent",
|
|
45
|
+
"gjc accounts pin anthropic --clear --persistent",
|
|
46
|
+
"gjc accounts logout anthropic --account me@example.com",
|
|
47
|
+
"gjc accounts logout anthropic --all",
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
async run(): Promise<void> {
|
|
51
|
+
const { args, flags } = await this.parse(Accounts);
|
|
52
|
+
if (!args.action) {
|
|
53
|
+
renderCommandHelp("gjc", "accounts", Accounts);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const action = args.action as AccountsAction;
|
|
57
|
+
const cmd: AccountsCommandArgs = {
|
|
58
|
+
action,
|
|
59
|
+
provider: args.provider,
|
|
60
|
+
selector: args.selector,
|
|
61
|
+
flags: {
|
|
62
|
+
json: flags.json,
|
|
63
|
+
persistent: flags.persistent,
|
|
64
|
+
clear: flags.clear,
|
|
65
|
+
account: flags.account,
|
|
66
|
+
all: flags.all,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
await runAccountsCommand(cmd);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gjc crash` — inspect local crash signatures and file an assisted, fully
|
|
3
|
+
* consented bug report. Nothing leaves the machine without an explicit,
|
|
4
|
+
* digest-confirmed confirmation for that exact invocation.
|
|
5
|
+
*/
|
|
6
|
+
import { Args, Command, Flags } from "@gajae-code/utils/cli";
|
|
7
|
+
import { runCrashListCommand, runCrashReportCommand } from "../cli/crash-cli";
|
|
8
|
+
|
|
9
|
+
export default class Crash extends Command {
|
|
10
|
+
static description = "Inspect crash signatures and file an assisted bug report";
|
|
11
|
+
static args = {
|
|
12
|
+
action: Args.string({ description: "list | report", required: false }),
|
|
13
|
+
};
|
|
14
|
+
static flags = {
|
|
15
|
+
json: Flags.boolean({ char: "j", description: "Emit machine-readable JSON (list only)", default: false }),
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
static examples = ["gjc crash list", "gjc crash list --json", "gjc crash report"];
|
|
19
|
+
|
|
20
|
+
async run(): Promise<void> {
|
|
21
|
+
const { args, flags } = await this.parse(Crash);
|
|
22
|
+
const action = args.action ?? "list";
|
|
23
|
+
if (action === "list") {
|
|
24
|
+
await runCrashListCommand(flags.json === true);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (action !== "report") {
|
|
28
|
+
process.stderr.write(`Unknown action "${action}". Expected: list, report.\n`);
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const outcome = await runCrashReportCommand();
|
|
33
|
+
if (outcome.status === "refused" || outcome.status === "unmatchable") process.exitCode = 1;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gjc customize` — customization inspection commands.
|
|
3
|
+
*
|
|
4
|
+
* Currently exposes a single subcommand: `doctor`, a read-only provenance and
|
|
5
|
+
* status report over everything GJC discovers (MCP servers, skills, hooks,
|
|
6
|
+
* tools, extensions, slash commands, plugin bundles).
|
|
7
|
+
*/
|
|
8
|
+
import { getProjectDir } from "@gajae-code/utils";
|
|
9
|
+
import { Args, Command, Flags, renderCommandHelp } from "@gajae-code/utils/cli";
|
|
10
|
+
import { runCustomizeDoctorCommand } from "../cli/customize-doctor";
|
|
11
|
+
|
|
12
|
+
const ACTIONS = ["doctor"] as const;
|
|
13
|
+
|
|
14
|
+
export default class Customize extends Command {
|
|
15
|
+
static description = "Inspect discovered customizations (MCP, skills, hooks, tools, extensions, commands, plugins)";
|
|
16
|
+
static delegateHelp = true;
|
|
17
|
+
|
|
18
|
+
static examples = ["gjc customize doctor", "gjc customize doctor --json"];
|
|
19
|
+
|
|
20
|
+
static args = {
|
|
21
|
+
action: Args.string({
|
|
22
|
+
description: "Customize action",
|
|
23
|
+
required: false,
|
|
24
|
+
options: ACTIONS,
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
static flags = {
|
|
29
|
+
json: Flags.boolean({
|
|
30
|
+
char: "j",
|
|
31
|
+
description: "Emit machine-readable JSON with secrets redacted",
|
|
32
|
+
default: false,
|
|
33
|
+
}),
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
async run(): Promise<void> {
|
|
37
|
+
if (this.argv.includes("--help") || this.argv.includes("-h")) {
|
|
38
|
+
this.#printHelp();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const { args, flags } = await this.parse(Customize);
|
|
43
|
+
const action = (args.action ?? "doctor") as (typeof ACTIONS)[number];
|
|
44
|
+
if (action !== "doctor") {
|
|
45
|
+
renderCommandHelp("gjc", "customize", Customize);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
await runCustomizeDoctorCommand({ json: flags.json, cwd: getProjectDir() });
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
#printHelp(): void {
|
|
53
|
+
process.stdout.write(`Inspect discovered customizations and their runtime status
|
|
54
|
+
|
|
55
|
+
USAGE
|
|
56
|
+
$ gjc customize doctor [FLAGS]
|
|
57
|
+
|
|
58
|
+
COMMANDS
|
|
59
|
+
doctor Provenance and status report for MCP servers, skills, hooks, tools,
|
|
60
|
+
extensions, slash commands, and plugin bundles
|
|
61
|
+
|
|
62
|
+
FLAGS
|
|
63
|
+
-j, --json Emit machine-readable JSON with secrets redacted
|
|
64
|
+
|
|
65
|
+
EXAMPLES
|
|
66
|
+
$ gjc customize doctor
|
|
67
|
+
$ gjc customize doctor --json
|
|
68
|
+
|
|
69
|
+
WHAT IT REPORTS
|
|
70
|
+
For every discovered item: source convention and scope (gjc, Claude project,
|
|
71
|
+
Codex project, plugin, explicit config), effective precedence and shadowing,
|
|
72
|
+
runtime status (loaded/disabled/shadowed/rejected/quarantined/stored-only),
|
|
73
|
+
a bounded reason code, remediation commands, trust requirements, and whether
|
|
74
|
+
a new session is required for changes to take effect.
|
|
75
|
+
|
|
76
|
+
SAFETY
|
|
77
|
+
This command is read-only. It never executes hooks, never connects MCP
|
|
78
|
+
servers, and never prints credentials, endpoint tokens, auth headers, env
|
|
79
|
+
values, or raw config dumps. MCP env variable names (not values) and
|
|
80
|
+
redacted endpoints may appear; everything secret-shaped is replaced with
|
|
81
|
+
<redacted>.
|
|
82
|
+
`);
|
|
83
|
+
}
|
|
84
|
+
}
|
package/src/commands/daemon.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Manage GJC background daemons (status/list/stop/
|
|
2
|
+
* Manage GJC background daemons (status/list/stop/restart).
|
|
3
3
|
*/
|
|
4
4
|
import { Args, CliParseError, Command, Flags } from "@gajae-code/utils/cli";
|
|
5
5
|
import {
|
|
@@ -54,7 +54,7 @@ export default class Daemon extends Command {
|
|
|
54
54
|
force: Flags.boolean({ description: "Allow hard-kill escalation when graceful stop times out" }),
|
|
55
55
|
"graceful-timeout-ms": Flags.string({ description: "Cooperative stop timeout before escalation" }),
|
|
56
56
|
"kill-timeout-ms": Flags.string({ description: "Wait for old pid death after SIGKILL" }),
|
|
57
|
-
"spawn-if-stopped": Flags.boolean({ description: "On
|
|
57
|
+
"spawn-if-stopped": Flags.boolean({ description: "On restart, spawn even when no daemon is running" }),
|
|
58
58
|
smoke: Flags.boolean({ description: "Internal: run worker smoke without configuration or network" }),
|
|
59
59
|
"owner-id": Flags.string({ description: "Internal: daemon owner id" }),
|
|
60
60
|
"agent-dir": Flags.string({ description: "Internal: daemon state directory" }),
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Command, Flags } from "@gajae-code/utils/cli";
|
|
2
|
+
import { ensureWorkflowSettingsMigrated } from "../config/settings";
|
|
2
3
|
import { runNativeDeepInterviewCommand } from "../gjc-runtime/deep-interview-runtime";
|
|
3
4
|
|
|
4
5
|
export default class DeepInterview extends Command {
|
|
@@ -57,6 +58,7 @@ session_id, or GJC_SESSION_ID.`;
|
|
|
57
58
|
];
|
|
58
59
|
|
|
59
60
|
async run(): Promise<void> {
|
|
61
|
+
await ensureWorkflowSettingsMigrated(process.cwd());
|
|
60
62
|
const result = await runNativeDeepInterviewCommand(this.argv, process.cwd());
|
|
61
63
|
if (result.stdout) process.stdout.write(result.stdout);
|
|
62
64
|
if (result.stderr) process.stderr.write(result.stderr);
|
package/src/commands/launch.ts
CHANGED
|
@@ -82,6 +82,7 @@ export default class Index extends Command {
|
|
|
82
82
|
`# Use different model (fuzzy matching)\n ${APP_NAME} --model opus "Help me refactor this code"`,
|
|
83
83
|
`# Limit model cycling to specific models\n ${APP_NAME} --models claude-sonnet,claude-haiku,gpt-4o`,
|
|
84
84
|
`# Pin a stored credential for this session\n ${APP_NAME} --credential email:me@example.com`,
|
|
85
|
+
`# Prefer a stored credential, falling back on quota limits\n ${APP_NAME} --prefer-credential id:15`,
|
|
85
86
|
`# Activate a model profile for this session\n ${APP_NAME} --mpreset codex-medium`,
|
|
86
87
|
`# Persist a model profile as the default\n ${APP_NAME} --mpreset opencodego --default`,
|
|
87
88
|
`# Export a session file to HTML\n ${APP_NAME} --export ~/.gjc/agent/sessions/v2-<scope>/session.jsonl`,
|
package/src/commands/mcp.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { type MCPAction, type MCPCommandArgs, runMCPCommand } from "../cli/mcp-c
|
|
|
7
7
|
const ACTIONS: MCPAction[] = ["add", "list", "remove"];
|
|
8
8
|
|
|
9
9
|
export default class MCP extends Command {
|
|
10
|
-
static description = "
|
|
10
|
+
static description = "Register MCP servers that ordinary standalone sessions load at startup";
|
|
11
11
|
static delegateHelp = true;
|
|
12
12
|
|
|
13
13
|
static examples = [
|
|
@@ -87,15 +87,15 @@ export default class MCP extends Command {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
#printHelp(): void {
|
|
90
|
-
process.stdout.write(`
|
|
90
|
+
process.stdout.write(`Register MCP servers that ordinary standalone sessions load at startup
|
|
91
91
|
|
|
92
92
|
USAGE
|
|
93
93
|
$ gjc mcp [add|list|remove] [NAME] [COMMAND_OR_URL] [ARGS...] [FLAGS]
|
|
94
94
|
|
|
95
95
|
COMMANDS
|
|
96
|
-
add
|
|
97
|
-
list List
|
|
98
|
-
remove Remove a
|
|
96
|
+
add Register an explicit user-provided MCP server definition
|
|
97
|
+
list List registered servers with source, status, and env/header/auth values redacted
|
|
98
|
+
remove Remove a registered server and print the removed definition redacted
|
|
99
99
|
|
|
100
100
|
FLAGS
|
|
101
101
|
--project Use project scope (./.gjc/mcp.json) instead of user scope
|
|
@@ -117,8 +117,13 @@ EXAMPLES
|
|
|
117
117
|
$ gjc mcp list --json
|
|
118
118
|
$ gjc mcp remove context7
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
RUNTIME
|
|
121
|
+
Registrations are consumed by ordinary standalone gjc sessions at startup
|
|
122
|
+
(conventional autoload) unless disabled (enabled: false or the disabledServers
|
|
123
|
+
list), marked autoload: false, or the session opts out with --no-mcp. This
|
|
124
|
+
command stores only the definition supplied on this invocation; it does not
|
|
125
|
+
import or inherit Claude Code, Codex, OpenCode, or other live MCP configs.
|
|
126
|
+
Public output redacts env, header, auth, and OAuth credential values.
|
|
122
127
|
`);
|
|
123
128
|
}
|
|
124
129
|
}
|
package/src/commands/ralplan.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Command } from "@gajae-code/utils/cli";
|
|
2
|
+
import { ensureWorkflowSettingsMigrated } from "../config/settings";
|
|
2
3
|
import { runNativeRalplanCommand } from "../gjc-runtime/ralplan-runtime";
|
|
3
4
|
|
|
4
5
|
export default class Ralplan extends Command {
|
|
@@ -12,6 +13,7 @@ export default class Ralplan extends Command {
|
|
|
12
13
|
];
|
|
13
14
|
|
|
14
15
|
async run(): Promise<void> {
|
|
16
|
+
await ensureWorkflowSettingsMigrated(process.cwd());
|
|
15
17
|
const result = await runNativeRalplanCommand(this.argv, process.cwd());
|
|
16
18
|
if (result.stdout) process.stdout.write(result.stdout);
|
|
17
19
|
if (result.stderr) process.stderr.write(result.stderr);
|