@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/daemon-cli.ts
CHANGED
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
} from "../daemon/operator-contract";
|
|
23
23
|
import { runChatDaemonInternal } from "../sdk/bus/chat-daemon-cli";
|
|
24
24
|
|
|
25
|
-
export type DaemonCliAction = "list" | "status" | "stop" | "
|
|
25
|
+
export type DaemonCliAction = "list" | "status" | "stop" | "restart";
|
|
26
26
|
export type DaemonInternalCliAction = "discord-internal" | "slack-internal";
|
|
27
27
|
export type DaemonCommandAction = DaemonCliAction | DaemonInternalCliAction;
|
|
28
28
|
|
|
@@ -49,6 +49,7 @@ export interface DaemonCommandArgs {
|
|
|
49
49
|
gracefulTimeoutMs?: number;
|
|
50
50
|
killTimeoutMs?: number;
|
|
51
51
|
spawnIfStopped?: boolean;
|
|
52
|
+
allowDisabledNoop?: boolean;
|
|
52
53
|
smoke?: boolean;
|
|
53
54
|
ownerId?: string;
|
|
54
55
|
agentDir?: string;
|
|
@@ -59,6 +60,7 @@ export interface DaemonCommandArgs {
|
|
|
59
60
|
export interface DaemonCommandDeps {
|
|
60
61
|
settings?: Settings;
|
|
61
62
|
controllers?: BuiltInDaemonController[];
|
|
63
|
+
setExitCode?: (code: number) => void;
|
|
62
64
|
}
|
|
63
65
|
|
|
64
66
|
const INTERNAL_ACTIONS: DaemonInternalCliAction[] = ["discord-internal", "slack-internal"];
|
|
@@ -147,15 +149,22 @@ export async function runDaemonCommand(cmd: DaemonCommandArgs, deps: DaemonComma
|
|
|
147
149
|
killTimeoutMs: cmd.killTimeoutMs,
|
|
148
150
|
force: cmd.force,
|
|
149
151
|
spawnIfStopped: cmd.spawnIfStopped,
|
|
152
|
+
allowDisabledNoop: cmd.allowDisabledNoop,
|
|
150
153
|
};
|
|
151
154
|
const results: DaemonOperationResult[] = [];
|
|
152
155
|
for (const controller of controllers) {
|
|
153
|
-
results.push(cmd.action === "
|
|
156
|
+
results.push(cmd.action === "restart" ? await controller.reload(opts) : await controller.stop(opts));
|
|
154
157
|
}
|
|
155
158
|
if (cmd.json) {
|
|
156
159
|
process.stdout.write(`${JSON.stringify(results, null, 2)}\n`);
|
|
157
160
|
} else {
|
|
158
161
|
process.stdout.write(`${results.map(formatDaemonResult).join("\n")}\n`);
|
|
159
162
|
}
|
|
160
|
-
if (results.some(r => !r.ok))
|
|
163
|
+
if (results.some(r => !r.ok))
|
|
164
|
+
(
|
|
165
|
+
deps.setExitCode ??
|
|
166
|
+
(code => {
|
|
167
|
+
process.exitCode = code;
|
|
168
|
+
})
|
|
169
|
+
)(DAEMON_EXIT.failure);
|
|
161
170
|
}
|
package/src/cli/fast-help.ts
CHANGED
|
@@ -8,6 +8,7 @@ export function getExtraHelpText(): string {
|
|
|
8
8
|
${APP_NAME} session - List, inspect, create, remove, or attach sessions
|
|
9
9
|
${APP_NAME} state - Inspect or manage persisted GJC state
|
|
10
10
|
${APP_NAME} auth-broker - Manage the auth-broker (credential vault)
|
|
11
|
+
${APP_NAME} accounts - List, check, pin, and remove stored OAuth accounts
|
|
11
12
|
${APP_NAME} auth-gateway - Run an auth-gateway forward proxy
|
|
12
13
|
${APP_NAME} harness - Run harness control-plane commands
|
|
13
14
|
${APP_NAME} coordinator - Manage coordinator/runtime coordination helpers
|
package/src/cli/mcp-cli.ts
CHANGED
|
@@ -2,12 +2,24 @@
|
|
|
2
2
|
* Direct MCP server registration CLI helpers.
|
|
3
3
|
*
|
|
4
4
|
* This surface only writes explicit user-provided server definitions to GJC's
|
|
5
|
-
* own MCP config
|
|
5
|
+
* own native MCP config (project `./.gjc/mcp.json` or user `~/.gjc/agent/mcp.json`)
|
|
6
|
+
* through the canonical scope-aware reader/writer. It never imports or inherits
|
|
7
|
+
* live configs from other agents. Registrations written here are consumed by
|
|
8
|
+
* ordinary standalone sessions at startup (conventional autoload) unless
|
|
9
|
+
* disabled or opted out via `--no-mcp`.
|
|
6
10
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import { getMCPServer, readMCPConfigFile, removeMCPServer, upsertMCPServer } from "../runtime-mcp/config-writer";
|
|
11
|
+
import { getProjectDir } from "@gajae-code/utils";
|
|
9
12
|
import { redactMCPEndpoint } from "../runtime-mcp/redaction";
|
|
10
|
-
import
|
|
13
|
+
import {
|
|
14
|
+
getScopeMCPServer,
|
|
15
|
+
type MCPConfigScope,
|
|
16
|
+
readScopeDisabledServers,
|
|
17
|
+
readScopeMCPConfig,
|
|
18
|
+
removeScopeMCPServer,
|
|
19
|
+
resolveScopeMCPConfigPath,
|
|
20
|
+
upsertScopeMCPServer,
|
|
21
|
+
} from "../runtime-mcp/scope-config";
|
|
22
|
+
import type { MCPServerConfig } from "../runtime-mcp/types";
|
|
11
23
|
|
|
12
24
|
export type MCPAction = "add" | "list" | "remove";
|
|
13
25
|
|
|
@@ -35,35 +47,62 @@ export interface MCPCommandArgs {
|
|
|
35
47
|
export class MCPArgsError extends Error {}
|
|
36
48
|
|
|
37
49
|
interface ScopedPath {
|
|
38
|
-
scope:
|
|
50
|
+
scope: MCPConfigScope;
|
|
39
51
|
path: string;
|
|
40
52
|
}
|
|
41
53
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
runtimeLoadedByStandalone: false;
|
|
45
|
-
runtimeNote: string;
|
|
46
|
-
}
|
|
54
|
+
/** Runtime status of a stored registration for conventional autoload. */
|
|
55
|
+
type AutoloadStatus = "autoload" | "autoload-off" | "disabled";
|
|
47
56
|
|
|
48
57
|
interface RedactedServerEntry {
|
|
49
58
|
name: string;
|
|
50
59
|
config: MCPServerConfig;
|
|
51
60
|
}
|
|
52
61
|
|
|
53
|
-
interface
|
|
62
|
+
interface RuntimeServerEntry extends RedactedServerEntry {
|
|
63
|
+
scope: "user" | "project";
|
|
64
|
+
path: string;
|
|
65
|
+
/** Whether ordinary standalone sessions load this registration at startup. */
|
|
66
|
+
runtimeStatus: AutoloadStatus;
|
|
67
|
+
/** Human-readable explanation of the runtime status. */
|
|
68
|
+
runtimeNote: string;
|
|
69
|
+
}
|
|
54
70
|
|
|
55
71
|
const REDACTED = "<redacted>";
|
|
56
72
|
const SENSITIVE_KEY_PATTERN =
|
|
57
73
|
/(?:token|secret|key|credential|password|passwd|pwd|authorization|auth|bearer|cookie|session)/i;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Compute the conventional-autoload status of a stored server.
|
|
77
|
+
*
|
|
78
|
+
* - `autoload-off`: the server opted out of startup connection via `autoload: false`.
|
|
79
|
+
* - `disabled`: the server is disabled via `enabled: false` or the `disabledServers` list.
|
|
80
|
+
* - `autoload`: connected by ordinary standalone sessions at startup.
|
|
81
|
+
*/
|
|
82
|
+
export function computeAutoloadStatus(
|
|
83
|
+
name: string,
|
|
84
|
+
config: MCPServerConfig,
|
|
85
|
+
disabledServers: ReadonlySet<string>,
|
|
86
|
+
): AutoloadStatus {
|
|
87
|
+
if (config.enabled === false || disabledServers.has(name)) return "disabled";
|
|
88
|
+
if (config.autoload === false) return "autoload-off";
|
|
89
|
+
return "autoload";
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function autoloadStatusNote(status: AutoloadStatus): string {
|
|
93
|
+
switch (status) {
|
|
94
|
+
case "autoload":
|
|
95
|
+
return "Loaded by ordinary standalone gjc sessions at startup.";
|
|
96
|
+
case "autoload-off":
|
|
97
|
+
return "Configured but not auto-loaded at startup (autoload: false); connect on demand via /mcp.";
|
|
98
|
+
case "disabled":
|
|
99
|
+
return "Disabled; not loaded by sessions. Re-enable to autoload.";
|
|
100
|
+
}
|
|
101
|
+
}
|
|
63
102
|
|
|
64
103
|
function resolvePath(args: MCPCommandArgs): ScopedPath {
|
|
65
|
-
const scope = args.flags.project ? "project" : "user";
|
|
66
|
-
return { scope, path:
|
|
104
|
+
const scope: MCPConfigScope = args.flags.project ? "project" : "user";
|
|
105
|
+
return { scope, path: resolveScopeMCPConfigPath(scope, args.cwd ?? getProjectDir()) };
|
|
67
106
|
}
|
|
68
107
|
|
|
69
108
|
function parsePairs(values: string[] | undefined, label: string): Record<string, string> | undefined {
|
|
@@ -211,14 +250,32 @@ export function redactMCPServerConfig(config: MCPServerConfig): MCPServerConfig
|
|
|
211
250
|
return redacted;
|
|
212
251
|
}
|
|
213
252
|
|
|
214
|
-
function withRuntimeDisclosure<T extends object>(
|
|
215
|
-
|
|
253
|
+
function withRuntimeDisclosure<T extends object>(
|
|
254
|
+
value: T,
|
|
255
|
+
status: AutoloadStatus,
|
|
256
|
+
): T & { runtimeStatus: AutoloadStatus; runtimeNote: string } {
|
|
257
|
+
return { ...value, runtimeStatus: status, runtimeNote: autoloadStatusNote(status) };
|
|
216
258
|
}
|
|
217
259
|
|
|
218
|
-
function collectEntries(
|
|
219
|
-
|
|
260
|
+
async function collectEntries(scoped: ScopedPath, cwd?: string): Promise<RuntimeServerEntry[]> {
|
|
261
|
+
const [config, disabled] = await Promise.all([
|
|
262
|
+
readScopeMCPConfig(scoped.scope, cwd),
|
|
263
|
+
readScopeDisabledServers(scoped.scope, cwd),
|
|
264
|
+
]);
|
|
265
|
+
const disabledSet = new Set(disabled);
|
|
266
|
+
return Object.entries(config.config.mcpServers ?? {})
|
|
220
267
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
221
|
-
.map(([name, serverConfig]) =>
|
|
268
|
+
.map(([name, serverConfig]) => {
|
|
269
|
+
const runtimeStatus = computeAutoloadStatus(name, serverConfig, disabledSet);
|
|
270
|
+
return {
|
|
271
|
+
name,
|
|
272
|
+
scope: scoped.scope,
|
|
273
|
+
path: scoped.path,
|
|
274
|
+
runtimeStatus,
|
|
275
|
+
runtimeNote: autoloadStatusNote(runtimeStatus),
|
|
276
|
+
config: redactMCPServerConfig(serverConfig),
|
|
277
|
+
};
|
|
278
|
+
});
|
|
222
279
|
}
|
|
223
280
|
|
|
224
281
|
function writeJson(value: unknown): void {
|
|
@@ -241,78 +298,89 @@ function renderDetails(entry: RedactedServerEntry): string {
|
|
|
241
298
|
async function runAdd(args: MCPCommandArgs, scoped: ScopedPath): Promise<void> {
|
|
242
299
|
if (!args.name) throw new MCPArgsError("`gjc mcp add` requires a server name.");
|
|
243
300
|
const config = buildServerConfig(args);
|
|
244
|
-
const result
|
|
301
|
+
const { result, config: storedConfig } = await upsertScopeMCPServer(
|
|
302
|
+
scoped.scope,
|
|
303
|
+
args.name,
|
|
304
|
+
config,
|
|
305
|
+
{
|
|
306
|
+
force: args.flags.force,
|
|
307
|
+
},
|
|
308
|
+
args.cwd,
|
|
309
|
+
);
|
|
245
310
|
const redacted = redactMCPServerConfig(config);
|
|
311
|
+
const disabled = new Set(storedConfig.disabledServers ?? (await readScopeDisabledServers(scoped.scope, args.cwd)));
|
|
312
|
+
const runtimeStatus = computeAutoloadStatus(args.name, config, disabled);
|
|
246
313
|
if (args.flags.json) {
|
|
247
314
|
writeJson(
|
|
248
|
-
withRuntimeDisclosure(
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
315
|
+
withRuntimeDisclosure(
|
|
316
|
+
{
|
|
317
|
+
action: "add",
|
|
318
|
+
status: result.status,
|
|
319
|
+
name: args.name,
|
|
320
|
+
scope: scoped.scope,
|
|
321
|
+
path: scoped.path,
|
|
322
|
+
config: redacted,
|
|
323
|
+
},
|
|
324
|
+
runtimeStatus,
|
|
325
|
+
),
|
|
256
326
|
);
|
|
257
327
|
return;
|
|
258
328
|
}
|
|
259
329
|
if (result.status === "skipped") {
|
|
260
330
|
process.stdout.write(
|
|
261
331
|
`MCP server "${args.name}" already exists in ${scoped.scope} config. Pass --force to overwrite. ` +
|
|
262
|
-
|
|
332
|
+
`Runtime: ${autoloadStatusNote(runtimeStatus)}\n`,
|
|
263
333
|
);
|
|
264
334
|
return;
|
|
265
335
|
}
|
|
266
336
|
process.stdout.write(
|
|
267
|
-
`MCP server "${args.name}" ${result.status} in ${scoped.scope} config: ${scoped.path}\
|
|
337
|
+
`MCP server "${args.name}" ${result.status} in ${scoped.scope} config: ${scoped.path}\n` +
|
|
338
|
+
`Runtime: ${autoloadStatusNote(runtimeStatus)}\n`,
|
|
268
339
|
);
|
|
269
340
|
}
|
|
270
341
|
|
|
271
342
|
async function runList(args: MCPCommandArgs, scoped: ScopedPath): Promise<void> {
|
|
272
|
-
const
|
|
273
|
-
const entries = collectEntries(config);
|
|
343
|
+
const entries = await collectEntries(scoped, args.cwd);
|
|
274
344
|
if (args.flags.json) {
|
|
275
|
-
writeJson(
|
|
345
|
+
writeJson({
|
|
346
|
+
action: "list",
|
|
347
|
+
scope: scoped.scope,
|
|
348
|
+
path: scoped.path,
|
|
349
|
+
servers: entries,
|
|
350
|
+
});
|
|
276
351
|
return;
|
|
277
352
|
}
|
|
278
353
|
if (entries.length === 0) {
|
|
279
|
-
process.stdout.write(
|
|
280
|
-
`No MCP servers registered in ${scoped.scope} config: ${scoped.path}\nStatus: storage-only; normal standalone gjc sessions do not load stored MCP registrations today.\n`,
|
|
281
|
-
);
|
|
354
|
+
process.stdout.write(`No MCP servers registered in ${scoped.scope} config: ${scoped.path}\n`);
|
|
282
355
|
return;
|
|
283
356
|
}
|
|
284
|
-
process.stdout.write(
|
|
285
|
-
`MCP servers in ${scoped.scope} config: ${scoped.path}\nStatus: storage-only; normal standalone gjc sessions do not load stored MCP registrations today.\n`,
|
|
286
|
-
);
|
|
357
|
+
process.stdout.write(`MCP servers in ${scoped.scope} config: ${scoped.path}\n`);
|
|
287
358
|
for (const entry of entries) {
|
|
288
359
|
process.stdout.write(`${renderDetails(entry)}\n`);
|
|
360
|
+
process.stdout.write(`Runtime: ${entry.runtimeNote}\n`);
|
|
289
361
|
}
|
|
290
362
|
}
|
|
291
363
|
|
|
292
364
|
async function runRemove(args: MCPCommandArgs, scoped: ScopedPath): Promise<void> {
|
|
293
365
|
if (!args.name) throw new MCPArgsError("`gjc mcp remove` requires a server name.");
|
|
294
|
-
const existing = await
|
|
295
|
-
if (!existing) {
|
|
366
|
+
const existing = await getScopeMCPServer(scoped.scope, args.name, args.cwd);
|
|
367
|
+
if (!existing.config) {
|
|
296
368
|
throw new MCPArgsError(`MCP server "${args.name}" not found in ${scoped.scope} config.`);
|
|
297
369
|
}
|
|
298
|
-
await
|
|
299
|
-
const entry = { name: args.name, config: redactMCPServerConfig(existing) };
|
|
370
|
+
await removeScopeMCPServer(scoped.scope, args.name, args.cwd);
|
|
371
|
+
const entry = { name: args.name, config: redactMCPServerConfig(existing.config) };
|
|
300
372
|
if (args.flags.json) {
|
|
301
|
-
writeJson(
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
}),
|
|
310
|
-
);
|
|
373
|
+
writeJson({
|
|
374
|
+
action: "remove",
|
|
375
|
+
status: "removed",
|
|
376
|
+
name: args.name,
|
|
377
|
+
scope: scoped.scope,
|
|
378
|
+
path: scoped.path,
|
|
379
|
+
removed: entry,
|
|
380
|
+
});
|
|
311
381
|
return;
|
|
312
382
|
}
|
|
313
|
-
process.stdout.write(
|
|
314
|
-
`Removed MCP server "${args.name}" from ${scoped.scope} config: ${scoped.path}\nStatus: storage-only; normal standalone gjc sessions do not load stored MCP registrations today.\n`,
|
|
315
|
-
);
|
|
383
|
+
process.stdout.write(`Removed MCP server "${args.name}" from ${scoped.scope} config: ${scoped.path}\n`);
|
|
316
384
|
process.stdout.write(`${renderDetails(entry)}\n`);
|
|
317
385
|
}
|
|
318
386
|
|
package/src/cli/notify-cli.ts
CHANGED
|
@@ -7,7 +7,6 @@ import { createInterface } from "node:readline/promises";
|
|
|
7
7
|
import { APP_NAME } from "@gajae-code/utils/dirs";
|
|
8
8
|
import chalk from "chalk";
|
|
9
9
|
import { Settings, type SettingsAtomicPatch } from "../config/settings";
|
|
10
|
-
import { SessionIndex } from "../sdk/broker/session-index";
|
|
11
10
|
import {
|
|
12
11
|
ChatDaemonController,
|
|
13
12
|
type EnsureChatDaemonResult,
|
|
@@ -15,7 +14,6 @@ import {
|
|
|
15
14
|
ensureSlackDaemon,
|
|
16
15
|
} from "../sdk/bus/chat-daemon-control";
|
|
17
16
|
import { getNotificationConfig, maskToken, tokenFingerprint } from "../sdk/bus/config";
|
|
18
|
-
import { type ActivatedPreparedSession, activatePreparedSession } from "../sdk/bus/existing-thread-readiness";
|
|
19
17
|
import {
|
|
20
18
|
clearTelegramActivationMarker,
|
|
21
19
|
createTelegramActivationMarker,
|
|
@@ -56,6 +54,8 @@ import {
|
|
|
56
54
|
type TelegramSetupPreflight,
|
|
57
55
|
type TelegramSetupTimers,
|
|
58
56
|
} from "../sdk/bus/telegram-setup";
|
|
57
|
+
import { SessionRouter } from "../sdk/router";
|
|
58
|
+
import type { ActivatedPreparedSession } from "../sdk/session-activation";
|
|
59
59
|
|
|
60
60
|
export type NotifyAction =
|
|
61
61
|
| "setup"
|
|
@@ -548,12 +548,7 @@ async function runTelegramSetup(cmd: NotifyCommandArgs, deps: NotifyCommandDeps)
|
|
|
548
548
|
reconnect: async () =>
|
|
549
549
|
deps.ensureTelegramDaemon
|
|
550
550
|
? await deps.ensureTelegramDaemon(settings)
|
|
551
|
-
: await ensureTelegramDaemonRunningDetailed({
|
|
552
|
-
settings,
|
|
553
|
-
cwd: process.cwd(),
|
|
554
|
-
sessionId: `notify-cli-${process.pid}`,
|
|
555
|
-
registerRoot: false,
|
|
556
|
-
}),
|
|
551
|
+
: await ensureTelegramDaemonRunningDetailed({ settings }),
|
|
557
552
|
persistInactive: async marker => await persistTelegramActivationMarker(settings, marker),
|
|
558
553
|
clearInactive: async marker => await clearTelegramActivationMarker(settings, marker),
|
|
559
554
|
marker: activationMarker,
|
|
@@ -929,11 +924,10 @@ async function runActivateThread(cmd: NotifyCommandArgs, deps: NotifyCommandDeps
|
|
|
929
924
|
const { sessionId } = assertStrictActivateThreadInvocation(cmd);
|
|
930
925
|
const activate =
|
|
931
926
|
deps.activatePreparedSession ??
|
|
932
|
-
(async (input: { settings: Settings; sessionId: string }) =>
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
}));
|
|
927
|
+
(async (input: { settings: Settings; sessionId: string }) => {
|
|
928
|
+
const router = new SessionRouter({ agentDir: input.settings.getAgentDir() });
|
|
929
|
+
return await router.activatePreparedSession(input.sessionId);
|
|
930
|
+
});
|
|
937
931
|
const activated = await activate({ settings: await getSettings(deps), sessionId });
|
|
938
932
|
process.stdout.write(`${formatActivatedSession(activated)}\n`);
|
|
939
933
|
}
|
|
@@ -987,7 +981,7 @@ ${chalk.bold("Examples:")}
|
|
|
987
981
|
${APP_NAME} notify activate-thread --session-id 01J...
|
|
988
982
|
|
|
989
983
|
${chalk.bold("Threaded Mode:")}
|
|
990
|
-
GJC uses Telegram private-chat topics for
|
|
984
|
+
GJC uses Telegram private-chat topics for coordinator/lifecycle sessions only. Setup verifies the bot
|
|
991
985
|
capability via getMe.has_topics_enabled. Enable Threaded Mode in @BotFather > Bot Settings
|
|
992
986
|
> Threads Settings; bots cannot toggle it through the Bot API. If Telegram refuses topic
|
|
993
987
|
creation at runtime, GJC delivers flat to the paired private chat with outbound notifications
|
package/src/cli/root-flags.ts
CHANGED
|
@@ -16,9 +16,17 @@ export const ROOT_LAUNCH_FLAGS = {
|
|
|
16
16
|
description:
|
|
17
17
|
"Stored credential selector: email:<addr>, id:<n>, account:<id>, project:<id>, or provider/email:<addr>",
|
|
18
18
|
}),
|
|
19
|
+
"prefer-credential": Flags.string({
|
|
20
|
+
description:
|
|
21
|
+
"Preferred stored credential with quota fallback: email:<addr>, id:<n>, account:<id>, project:<id>, or provider/id:<n>",
|
|
22
|
+
}),
|
|
19
23
|
"system-prompt": Flags.string({ description: "System prompt (default: coding assistant prompt)" }),
|
|
20
24
|
"append-system-prompt": Flags.string({ description: "Append text or file contents to the system prompt" }),
|
|
21
25
|
"mcp-config": Flags.string({ description: "Tools-only MCP config file (absolute path)" }),
|
|
26
|
+
"no-mcp": Flags.boolean({
|
|
27
|
+
description:
|
|
28
|
+
"Disable conventional MCP autoload (native user ~/.gjc/agent/mcp.json and project .gjc/mcp.json registrations)",
|
|
29
|
+
}),
|
|
22
30
|
"clipboard-transport": Flags.string({
|
|
23
31
|
description: "Clipboard transport: auto (default), native, osc52, or ssh",
|
|
24
32
|
options: ["auto", "native", "osc52", "ssh"],
|
package/src/cli/setup-cli.ts
CHANGED
|
@@ -30,6 +30,14 @@ import {
|
|
|
30
30
|
runHermesSetup,
|
|
31
31
|
} from "../setup/hermes-setup";
|
|
32
32
|
import { buildHostPluginSetup, formatHostPluginSetup, type HostPluginKind } from "../setup/host-plugin-setup";
|
|
33
|
+
import {
|
|
34
|
+
type PaseoSetupFlags,
|
|
35
|
+
type PaseoSetupOutcome,
|
|
36
|
+
PaseoSetupUsageError,
|
|
37
|
+
runPaseoSetup,
|
|
38
|
+
} from "../setup/paseo/paseo-setup";
|
|
39
|
+
import { checkExitCode } from "../setup/paseo/result-types";
|
|
40
|
+
import { createDefaultPaseoSetupDependencies } from "../setup/paseo/setup-deps";
|
|
33
41
|
import {
|
|
34
42
|
addApiCompatibleProvider,
|
|
35
43
|
formatProviderPresetList,
|
|
@@ -44,6 +52,7 @@ export type SetupComponent =
|
|
|
44
52
|
| "defaults"
|
|
45
53
|
| "hermes"
|
|
46
54
|
| "hooks"
|
|
55
|
+
| "paseo"
|
|
47
56
|
| "provider"
|
|
48
57
|
| "python"
|
|
49
58
|
| "stt";
|
|
@@ -67,6 +76,8 @@ export interface SetupCommandArgs {
|
|
|
67
76
|
repo?: string;
|
|
68
77
|
profile?: string;
|
|
69
78
|
sessionCommand?: string;
|
|
79
|
+
remove?: boolean;
|
|
80
|
+
mpreset?: string;
|
|
70
81
|
noWorktree?: boolean;
|
|
71
82
|
worktreeName?: string;
|
|
72
83
|
stateRoot?: string;
|
|
@@ -89,11 +100,31 @@ const VALID_COMPONENTS: SetupComponent[] = [
|
|
|
89
100
|
"defaults",
|
|
90
101
|
"hermes",
|
|
91
102
|
"hooks",
|
|
103
|
+
"paseo",
|
|
92
104
|
"provider",
|
|
93
105
|
"python",
|
|
94
106
|
"stt",
|
|
95
107
|
];
|
|
96
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Flags introduced by the `paseo` component.
|
|
111
|
+
*
|
|
112
|
+
* Deliberately narrow: `--check`, `--json`, and `--force` are pre-existing
|
|
113
|
+
* shared setup flags and are NOT relabeled here, so no other component's
|
|
114
|
+
* behavior changes.
|
|
115
|
+
*/
|
|
116
|
+
const PASEO_ONLY_FLAGS: readonly (keyof SetupCommandArgs["flags"])[] = ["remove", "mpreset"];
|
|
117
|
+
|
|
118
|
+
function rejectPaseoFlagsOutsidePaseo(component: SetupComponent, flags: SetupCommandArgs["flags"]): void {
|
|
119
|
+
if (component === "paseo") return;
|
|
120
|
+
const offending = PASEO_ONLY_FLAGS.filter(flag => flags[flag] !== undefined);
|
|
121
|
+
if (offending.length === 0) return;
|
|
122
|
+
const flagList = offending.map(flag => `--${flag}`);
|
|
123
|
+
process.stderr.write(`${chalk.red(`${flagList.join(", ")} require the explicit \`paseo\` component.`)}\n`);
|
|
124
|
+
process.stderr.write(`${chalk.dim(`Run: ${APP_NAME} setup paseo ${flagList.join(" ")}`)}\n`);
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
|
|
97
128
|
function hasProviderSetupFlags(flags: SetupCommandArgs["flags"]): boolean {
|
|
98
129
|
return (
|
|
99
130
|
flags.compat !== undefined ||
|
|
@@ -194,6 +225,10 @@ export function parseSetupArgs(args: string[]): SetupCommandArgs | undefined {
|
|
|
194
225
|
flags.model = [...(flags.model ?? []), args[++i] ?? ""];
|
|
195
226
|
} else if (arg === "--models-path") {
|
|
196
227
|
flags.modelsPath = args[++i];
|
|
228
|
+
} else if (arg === "--remove") {
|
|
229
|
+
flags.remove = true;
|
|
230
|
+
} else if (arg === "--mpreset") {
|
|
231
|
+
flags.mpreset = args[++i];
|
|
197
232
|
} else if (!componentSeen && VALID_COMPONENTS.includes(arg as SetupComponent)) {
|
|
198
233
|
component = arg as SetupComponent;
|
|
199
234
|
componentSeen = true;
|
|
@@ -205,6 +240,7 @@ export function parseSetupArgs(args: string[]): SetupCommandArgs | undefined {
|
|
|
205
240
|
}
|
|
206
241
|
|
|
207
242
|
rejectProviderFlagsOutsideProvider(component, flags);
|
|
243
|
+
rejectPaseoFlagsOutsidePaseo(component, flags);
|
|
208
244
|
|
|
209
245
|
return {
|
|
210
246
|
component,
|
|
@@ -262,6 +298,7 @@ async function checkPythonSetup(): Promise<PythonCheckResult> {
|
|
|
262
298
|
*/
|
|
263
299
|
export async function runSetupCommand(cmd: SetupCommandArgs): Promise<void> {
|
|
264
300
|
rejectProviderFlagsOutsideProvider(cmd.component, cmd.flags);
|
|
301
|
+
rejectPaseoFlagsOutsidePaseo(cmd.component, cmd.flags);
|
|
265
302
|
switch (cmd.component) {
|
|
266
303
|
case "claude":
|
|
267
304
|
handleHostPluginSetup("claude", cmd.flags);
|
|
@@ -278,6 +315,9 @@ export async function runSetupCommand(cmd: SetupCommandArgs): Promise<void> {
|
|
|
278
315
|
case "hooks":
|
|
279
316
|
await handleHooksSetup(cmd.flags);
|
|
280
317
|
break;
|
|
318
|
+
case "paseo":
|
|
319
|
+
await handlePaseoSetup(cmd.flags);
|
|
320
|
+
break;
|
|
281
321
|
case "provider":
|
|
282
322
|
await handleProviderSetup(cmd.flags);
|
|
283
323
|
break;
|
|
@@ -382,6 +422,105 @@ async function handleProviderSetup(flags: {
|
|
|
382
422
|
}
|
|
383
423
|
}
|
|
384
424
|
|
|
425
|
+
/**
|
|
426
|
+
* Register GJC with Paseo, diagnose that registration, or roll it back.
|
|
427
|
+
*
|
|
428
|
+
* Every write target belongs to another application, so failures are reported
|
|
429
|
+
* rather than worked around: a refusal here means the user's files were left
|
|
430
|
+
* exactly as they were.
|
|
431
|
+
*/
|
|
432
|
+
async function handlePaseoSetup(flags: SetupCommandArgs["flags"]): Promise<void> {
|
|
433
|
+
const paseoFlags: PaseoSetupFlags = {
|
|
434
|
+
check: flags.check,
|
|
435
|
+
json: flags.json,
|
|
436
|
+
force: flags.force,
|
|
437
|
+
remove: flags.remove,
|
|
438
|
+
mpreset: flags.mpreset,
|
|
439
|
+
};
|
|
440
|
+
try {
|
|
441
|
+
const outcome = await runPaseoSetup(paseoFlags, createDefaultPaseoSetupDependencies());
|
|
442
|
+
if (flags.json) {
|
|
443
|
+
process.stdout.write(`${JSON.stringify(outcome.result, null, 2)}\n`);
|
|
444
|
+
process.exitCode = paseoExitCode(outcome);
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
writePaseoHumanOutput(outcome);
|
|
448
|
+
} catch (error) {
|
|
449
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
450
|
+
if (flags.json) {
|
|
451
|
+
process.stdout.write(`${JSON.stringify({ ok: false, error: message }, null, 2)}\n`);
|
|
452
|
+
} else {
|
|
453
|
+
process.stderr.write(`${chalk.red(`${theme.status.error} Paseo setup failed`)}\n`);
|
|
454
|
+
process.stderr.write(`${chalk.dim(message)}\n`);
|
|
455
|
+
}
|
|
456
|
+
process.exit(error instanceof PaseoSetupUsageError ? 2 : 1);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
function paseoExitCode(outcome: PaseoSetupOutcome): number {
|
|
461
|
+
if (outcome.kind === "check") return checkExitCode(outcome.result);
|
|
462
|
+
if (outcome.kind === "install") return outcome.result.outcome === "installed" ? 0 : 1;
|
|
463
|
+
return outcome.result.outcome === "partial-removal" ? 1 : 0;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
function writePaseoHumanOutput(outcome: PaseoSetupOutcome): void {
|
|
467
|
+
if (outcome.kind === "check") {
|
|
468
|
+
const result = outcome.result;
|
|
469
|
+
switch (result.status) {
|
|
470
|
+
case "drift":
|
|
471
|
+
process.stderr.write(`${chalk.red(`${theme.status.error} Paseo setup has drifted`)}\n`);
|
|
472
|
+
for (const reason of result.reasons) {
|
|
473
|
+
process.stderr.write(`${chalk.dim(` ${reason.code}: ${reason.subject} -- ${reason.detail}`)}\n`);
|
|
474
|
+
}
|
|
475
|
+
process.exitCode = 1;
|
|
476
|
+
return;
|
|
477
|
+
case "stale":
|
|
478
|
+
process.stdout.write(`${chalk.yellow(`${theme.status.warning} Paseo has not picked up the change yet`)}\n`);
|
|
479
|
+
if (result.guidance) process.stdout.write(`${chalk.dim(result.guidance)}\n`);
|
|
480
|
+
return;
|
|
481
|
+
case "skipped":
|
|
482
|
+
process.stdout.write(`${chalk.green(`${theme.status.success} Paseo setup files are correct`)}\n`);
|
|
483
|
+
process.stdout.write(
|
|
484
|
+
`${chalk.dim("The Paseo daemon did not respond, so its live provider list was not verified.")}\n`,
|
|
485
|
+
);
|
|
486
|
+
return;
|
|
487
|
+
case "pass":
|
|
488
|
+
process.stdout.write(`${chalk.green(`${theme.status.success} GJC is registered with Paseo`)}\n`);
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
if (outcome.kind === "install") {
|
|
494
|
+
if (outcome.result.outcome === "installed") {
|
|
495
|
+
process.stdout.write(`${chalk.green(`${theme.status.success} GJC registered with Paseo`)}\n`);
|
|
496
|
+
for (const entry of outcome.result.changed) process.stdout.write(`${chalk.dim(` updated ${entry}`)}\n`);
|
|
497
|
+
process.stdout.write(
|
|
498
|
+
`${chalk.dim("Restart the Paseo daemon when convenient so it picks up the new provider.")}\n`,
|
|
499
|
+
);
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
502
|
+
process.stderr.write(`${chalk.red(`${theme.status.error} Paseo setup did not complete`)}\n`);
|
|
503
|
+
process.stderr.write(`${chalk.dim(outcome.result.evidence.detail)}\n`);
|
|
504
|
+
process.exitCode = 1;
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
switch (outcome.result.outcome) {
|
|
509
|
+
case "removed":
|
|
510
|
+
process.stdout.write(`${chalk.green(`${theme.status.success} GJC unregistered from Paseo`)}\n`);
|
|
511
|
+
for (const entry of outcome.result.removed) process.stdout.write(`${chalk.dim(` reverted ${entry}`)}\n`);
|
|
512
|
+
return;
|
|
513
|
+
case "nothing-to-remove":
|
|
514
|
+
process.stdout.write(`${chalk.dim("GJC has nothing recorded to remove from Paseo.")}\n`);
|
|
515
|
+
return;
|
|
516
|
+
case "partial-removal":
|
|
517
|
+
process.stderr.write(`${chalk.red(`${theme.status.error} Paseo removal did not complete`)}\n`);
|
|
518
|
+
process.stderr.write(`${chalk.dim(outcome.result.evidence.detail)}\n`);
|
|
519
|
+
process.exitCode = 1;
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
385
524
|
async function handleHooksSetup(flags: { json?: boolean; check?: boolean }): Promise<void> {
|
|
386
525
|
const hooksPath = getDefaultCodexHooksPath();
|
|
387
526
|
const existingContent = await Bun.file(hooksPath)
|
|
@@ -724,6 +863,7 @@ ${chalk.bold("Components:")}
|
|
|
724
863
|
defaults Install bundled GJC default workflow skills (default)
|
|
725
864
|
hermes Optional: render/install a Hermes MCP bridge setup package
|
|
726
865
|
hooks Optional: install GJC native Codex UserPromptSubmit/Stop skill-state hooks
|
|
866
|
+
paseo Optional: register GJC as a Paseo ACP provider and bridge Paseo's skills
|
|
727
867
|
provider Optional: add a preset, OpenAI-compatible, or Anthropic-compatible API provider
|
|
728
868
|
python Optional: verify a Python 3 interpreter is reachable for code execution
|
|
729
869
|
stt Optional: install speech-to-text dependencies (openai-whisper, recording tools)
|
|
@@ -770,6 +910,8 @@ ${chalk.bold("Options:")}
|
|
|
770
910
|
--dry-run Preview discovered credentials without importing (credentials)
|
|
771
911
|
-y, --yes Import discovered credentials without an interactive prompt (credentials)
|
|
772
912
|
--keychain Include Claude macOS Keychain when discovering credentials
|
|
913
|
+
--remove Roll back the Paseo registration GJC created (paseo)
|
|
914
|
+
--mpreset Register an additional gjc-<preset> Paseo provider (paseo)
|
|
773
915
|
|
|
774
916
|
${chalk.bold("Examples:")}
|
|
775
917
|
${APP_NAME} setup Install bundled GJC default workflow skills
|
|
@@ -785,5 +927,8 @@ ${chalk.bold("Examples:")}
|
|
|
785
927
|
${APP_NAME} setup credentials Discover & import existing Claude/Codex credentials
|
|
786
928
|
${APP_NAME} setup credentials --dry-run Preview importable credentials (redacted)
|
|
787
929
|
${APP_NAME} setup credentials --yes Import without an interactive prompt
|
|
930
|
+
${APP_NAME} setup paseo Register GJC as a Paseo ACP provider
|
|
931
|
+
${APP_NAME} setup paseo --check Diagnose the Paseo registration
|
|
932
|
+
${APP_NAME} setup paseo --remove Roll back the Paseo registration
|
|
788
933
|
`);
|
|
789
934
|
}
|