@gajae-code/coding-agent 0.13.2 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +215 -8
- package/README.md +2 -0
- package/bin/gajaessi.js +4 -0
- package/dist/types/async/job-manager.d.ts +55 -2
- package/dist/types/async/support.d.ts +14 -0
- package/dist/types/capability/mcp.d.ts +6 -0
- package/dist/types/capability/types.d.ts +6 -0
- package/dist/types/cli/accounts-cli.d.ts +19 -0
- package/dist/types/cli/args.d.ts +3 -0
- package/dist/types/cli/config-cli.d.ts +6 -0
- package/dist/types/cli/crash-cli.d.ts +10 -0
- package/dist/types/cli/customize-doctor.d.ts +145 -0
- package/dist/types/cli/daemon-cli.d.ts +3 -1
- package/dist/types/cli/mcp-cli.d.ts +11 -0
- package/dist/types/cli/notify-cli.d.ts +1 -1
- package/dist/types/cli/root-flags.d.ts +12 -0
- package/dist/types/cli/setup-cli.d.ts +3 -1
- package/dist/types/cli/skills-cli.d.ts +2 -1
- package/dist/types/cli/update-cli.d.ts +19 -1
- package/dist/types/cli.d.ts +6 -0
- package/dist/types/commands/accounts.d.ts +40 -0
- package/dist/types/commands/crash.d.ts +24 -0
- package/dist/types/commands/customize.d.ts +22 -0
- package/dist/types/commands/daemon.d.ts +1 -1
- package/dist/types/commands/launch.d.ts +6 -0
- package/dist/types/commands/setup.d.ts +6 -0
- package/dist/types/commands/skills.d.ts +6 -1
- package/dist/types/commands/update.d.ts +7 -0
- package/dist/types/config/atomic-yaml-patch-worker.d.ts +25 -0
- package/dist/types/config/atomic-yaml-patch.d.ts +62 -2
- package/dist/types/config/config-schema-version.d.ts +10 -0
- package/dist/types/config/file-lock.d.ts +18 -0
- package/dist/types/config/model-profile-activation.d.ts +3 -1
- package/dist/types/config/model-registry.d.ts +10 -1
- package/dist/types/config/models-config-schema.d.ts +2 -0
- package/dist/types/config/settings-schema.d.ts +73 -9
- package/dist/types/config/settings.d.ts +63 -0
- package/dist/types/config/skill-settings-defaults.d.ts +26 -0
- package/dist/types/config/task-delegation.d.ts +39 -0
- package/dist/types/config/update-channel.d.ts +10 -0
- package/dist/types/coordinator-mcp/server.d.ts +5 -1
- package/dist/types/crash/index-store.d.ts +87 -0
- package/dist/types/crash/nudge.d.ts +50 -0
- package/dist/types/crash/record-loader.d.ts +17 -0
- package/dist/types/crash/report.d.ts +134 -0
- package/dist/types/crash/sanitize.d.ts +25 -0
- package/dist/types/cursor.d.ts +13 -2
- package/dist/types/customization/import.d.ts +37 -0
- package/dist/types/customization/index.d.ts +4 -0
- package/dist/types/customization/inventory.d.ts +25 -0
- package/dist/types/customization/mutations.d.ts +32 -0
- package/dist/types/customization/types.d.ts +115 -0
- package/dist/types/daemon/control-types.d.ts +8 -1
- package/dist/types/daemon/operator-contract.d.ts +4 -4
- package/dist/types/discovery/claude.d.ts +39 -1
- package/dist/types/discovery/codex.d.ts +39 -1
- package/dist/types/discovery/index.d.ts +2 -0
- package/dist/types/discovery/mcp-compat.d.ts +30 -0
- package/dist/types/edit/renderer.d.ts +23 -0
- package/dist/types/extensibility/extensions/runner.d.ts +3 -0
- package/dist/types/extensibility/extensions/types.d.ts +21 -4
- package/dist/types/extensibility/gjc-plugins/observability.d.ts +6 -1
- package/dist/types/extensibility/gjc-plugins/registry.d.ts +8 -1
- package/dist/types/extensibility/hooks/loader.d.ts +19 -5
- package/dist/types/extensibility/runtime-skill-discovery.d.ts +22 -1
- package/dist/types/extensibility/skill-management.d.ts +107 -0
- package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +3 -1
- package/dist/types/gjc-runtime/launch-worktree.d.ts +8 -0
- package/dist/types/gjc-runtime/linux-proc.d.ts +3 -0
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +10 -6
- package/dist/types/gjc-runtime/session-state-lock.d.ts +104 -0
- package/dist/types/gjc-runtime/session-state-sidecar.d.ts +120 -2
- package/dist/types/gjc-runtime/state-writer.d.ts +10 -1
- package/dist/types/gjc-runtime/ultragoal-guard.d.ts +4 -2
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -6
- package/dist/types/gjc-runtime/workflow-settings.d.ts +109 -0
- package/dist/types/hooks/events.d.ts +60 -0
- package/dist/types/hooks/normalize.d.ts +83 -0
- package/dist/types/hooks/skill-state.d.ts +9 -2
- package/dist/types/main.d.ts +2 -1
- package/dist/types/modes/acp/abort-scope.d.ts +13 -0
- package/dist/types/modes/acp/acp-agent.d.ts +7 -4
- package/dist/types/modes/components/customization/customization-dashboard.d.ts +44 -0
- package/dist/types/modes/components/customization/import-wizard.d.ts +21 -0
- package/dist/types/modes/components/customization/index.d.ts +1 -0
- package/dist/types/modes/components/dynamic-theme-text.d.ts +9 -0
- package/dist/types/modes/components/gajae-pet-widget.d.ts +6 -28
- package/dist/types/modes/components/irc-sidebar.d.ts +1 -0
- package/dist/types/modes/components/iterm-pet-transport.d.ts +122 -0
- package/dist/types/modes/components/oauth-selector.d.ts +10 -4
- package/dist/types/modes/components/pet-capability.d.ts +7 -21
- package/dist/types/modes/components/settings-selector.d.ts +5 -0
- package/dist/types/modes/components/status-line/gh.d.ts +6 -2
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -1
- package/dist/types/modes/controllers/selector-controller.d.ts +7 -8
- package/dist/types/modes/controllers/stt-controller.d.ts +1 -1
- package/dist/types/modes/interactive-mode.d.ts +1 -0
- package/dist/types/modes/theme/defaults/index.d.ts +118 -0
- package/dist/types/modes/types.d.ts +1 -0
- package/dist/types/modes/utils/injected-user-submission.d.ts +10 -0
- package/dist/types/runtime-mcp/config.d.ts +9 -0
- package/dist/types/runtime-mcp/manager.d.ts +26 -1
- package/dist/types/runtime-mcp/oauth-discovery.d.ts +4 -0
- package/dist/types/runtime-mcp/oauth-flow.d.ts +24 -1
- package/dist/types/runtime-mcp/pool-key.d.ts +2 -0
- package/dist/types/runtime-mcp/protocol.d.ts +278 -0
- package/dist/types/runtime-mcp/scope-config.d.ts +29 -0
- package/dist/types/runtime-mcp/tool-bridge.d.ts +15 -13
- package/dist/types/runtime-mcp/transports/http.d.ts +9 -0
- package/dist/types/runtime-mcp/types.d.ts +102 -10
- package/dist/types/sdk/acp/adapter.d.ts +26 -5
- package/dist/types/sdk/broker/broker.d.ts +3 -55
- package/dist/types/sdk/broker/lifecycle.d.ts +18 -12
- package/dist/types/sdk/broker/session-index.d.ts +14 -5
- package/dist/types/sdk/broker/startup-failure.d.ts +16 -1
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +51 -1
- package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +4 -41
- package/dist/types/sdk/bus/config.d.ts +11 -0
- package/dist/types/sdk/bus/conversation-store.d.ts +0 -1
- package/dist/types/sdk/bus/daemon-paths.d.ts +6 -0
- package/dist/types/sdk/bus/discord-conversation.d.ts +2 -0
- package/dist/types/sdk/bus/discord-daemon.d.ts +17 -12
- package/dist/types/sdk/bus/existing-thread-readiness.d.ts +4 -34
- package/dist/types/sdk/bus/inbound-reaction-ordering.d.ts +61 -0
- package/dist/types/sdk/bus/index.d.ts +85 -99
- package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +29 -7
- package/dist/types/sdk/bus/managed-daemon.d.ts +2 -32
- package/dist/types/sdk/bus/notification-service.d.ts +52 -0
- package/dist/types/sdk/bus/operator-runtime.d.ts +1 -1
- package/dist/types/sdk/bus/prompt-reconciliation.d.ts +16 -5
- package/dist/types/sdk/bus/reconciliation-store.d.ts +113 -5
- package/dist/types/sdk/bus/session-control.d.ts +25 -1
- package/dist/types/sdk/bus/slack-conversation.d.ts +4 -0
- package/dist/types/sdk/bus/slack-daemon.d.ts +9 -17
- package/dist/types/sdk/bus/slack-live-provider.d.ts +3 -1
- package/dist/types/sdk/bus/slack-provider.d.ts +4 -0
- package/dist/types/sdk/bus/slack-thread-binding.d.ts +6 -40
- package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +30 -104
- package/dist/types/sdk/bus/telegram-daemon-cli.d.ts +10 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +262 -19
- package/dist/types/sdk/bus/telegram-daemon-orphan-reap.d.ts +125 -0
- package/dist/types/sdk/bus/telegram-daemon-owner-registry.d.ts +22 -0
- package/dist/types/sdk/bus/telegram-daemon.d.ts +119 -310
- package/dist/types/sdk/bus/telegram-reference.d.ts +1 -47
- package/dist/types/sdk/bus/threaded-render.d.ts +1 -0
- package/dist/types/sdk/bus/topic-registry.d.ts +33 -17
- package/dist/types/sdk/cli/rows.d.ts +2 -11
- package/dist/types/sdk/cli/session-cli.d.ts +15 -25
- package/dist/types/sdk/client/client.d.ts +97 -1
- package/dist/types/sdk/host/control/dispatch.d.ts +0 -7
- package/dist/types/sdk/host/control/index.d.ts +1 -1
- package/dist/types/sdk/host/control/operations.d.ts +18 -5
- package/dist/types/sdk/host/control/runtime-gate.d.ts +19 -0
- package/dist/types/sdk/host/host.d.ts +15 -1
- package/dist/types/sdk/host/query/handlers.d.ts +5 -0
- package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
- package/dist/types/sdk/host/session-runtime.d.ts +127 -7
- package/dist/types/sdk/host/types.d.ts +1 -1
- package/dist/types/sdk/host/websocket-transport.d.ts +1 -1
- package/dist/types/sdk/index.d.ts +2 -1
- package/dist/types/sdk/lifecycle/broker-client.d.ts +8 -0
- package/dist/types/sdk/lifecycle/client.d.ts +59 -0
- package/dist/types/sdk/lifecycle/index.d.ts +3 -0
- package/dist/types/sdk/lifecycle/service.d.ts +232 -0
- package/dist/types/sdk/mcp/server.d.ts +9 -6
- package/dist/types/sdk/prompt-deadline-lease.d.ts +43 -0
- package/dist/types/sdk/prompt-deadline-manager.d.ts +28 -0
- package/dist/types/sdk/prompt-status.d.ts +10 -3
- package/dist/types/sdk/protocol/operation-registry.d.ts +5 -0
- package/dist/types/sdk/receipt-state.d.ts +17 -0
- package/dist/types/sdk/reconciliation-extensions.d.ts +2 -0
- package/dist/types/sdk/router/index.d.ts +1 -0
- package/dist/types/sdk/router/session-router.d.ts +152 -0
- package/dist/types/sdk/session-list.d.ts +22 -0
- package/dist/types/sdk/session-reconnect.d.ts +43 -1
- package/dist/types/sdk/session.d.ts +34 -1
- package/dist/types/sdk/transport/serve-cli.d.ts +1 -4
- package/dist/types/session/account-inventory.d.ts +86 -0
- package/dist/types/session/agent-session.d.ts +145 -6
- package/dist/types/session/agent-storage.d.ts +10 -0
- package/dist/types/session/coordinator-tool-label.d.ts +28 -0
- package/dist/types/session/internal/managed-session-storage.d.ts +23 -4
- package/dist/types/session/messages.d.ts +1 -1
- package/dist/types/session/secure-token-file.d.ts +3 -0
- package/dist/types/session/session-manager.d.ts +47 -1
- package/dist/types/session/startup-auth-config.d.ts +44 -0
- package/dist/types/session/terminal-abort.d.ts +378 -0
- package/dist/types/session/yield-queue.d.ts +7 -0
- package/dist/types/session-import/claude.d.ts +26 -0
- package/dist/types/session-import/codex.d.ts +88 -0
- package/dist/types/session-import/command.d.ts +35 -0
- package/dist/types/session-import/detect.d.ts +22 -0
- package/dist/types/session-import/index.d.ts +7 -0
- package/dist/types/session-import/provider-codex.d.ts +22 -0
- package/dist/types/session-import/provider-service.d.ts +38 -0
- package/dist/types/session-import/redact.d.ts +23 -0
- package/dist/types/session-import/service.d.ts +47 -0
- package/dist/types/session-import/types.d.ts +120 -0
- package/dist/types/setup/paseo/check.d.ts +16 -0
- package/dist/types/setup/paseo/install-saga.d.ts +115 -0
- package/dist/types/setup/paseo/json-publisher.d.ts +76 -0
- package/dist/types/setup/paseo/orchestration-preferences.d.ts +24 -0
- package/dist/types/setup/paseo/paseo-ownership.d.ts +87 -0
- package/dist/types/setup/paseo/paseo-setup.d.ts +29 -0
- package/dist/types/setup/paseo/provider-config.d.ts +35 -0
- package/dist/types/setup/paseo/remove.d.ts +14 -0
- package/dist/types/setup/paseo/result-types.d.ts +59 -0
- package/dist/types/setup/paseo/setup-deps.d.ts +73 -0
- package/dist/types/setup/paseo/skills-bridge.d.ts +44 -0
- package/dist/types/skill-state/active-state.d.ts +5 -1
- package/dist/types/slash-commands/acp-builtins.d.ts +5 -1
- package/dist/types/slash-commands/builtin-registry.d.ts +2 -0
- package/dist/types/slash-commands/helpers/credential-switch.d.ts +12 -0
- package/dist/types/slash-commands/helpers/usage-report.d.ts +5 -6
- package/dist/types/slash-commands/types.d.ts +7 -1
- package/dist/types/task/executor.d.ts +10 -0
- package/dist/types/task/index.d.ts +3 -1
- package/dist/types/tools/ask-answer-registry.d.ts +6 -3
- package/dist/types/tools/bash-sleep-advisory.d.ts +14 -0
- package/dist/types/tools/bash.d.ts +2 -6
- package/dist/types/tools/browser/attach.d.ts +11 -0
- package/dist/types/tools/browser/launch.d.ts +20 -0
- package/dist/types/tools/browser/profile-discovery.d.ts +6 -0
- package/dist/types/tools/browser/render.d.ts +1 -0
- package/dist/types/tools/browser.d.ts +3 -1
- package/dist/types/tools/image-gen.d.ts +10 -2
- package/dist/types/tools/index.d.ts +8 -0
- package/dist/types/tools/monitor.d.ts +1 -1
- package/dist/types/tools/skill-discovery.d.ts +8 -1
- package/dist/types/tools/subagent.d.ts +2 -0
- package/dist/types/tools/ultragoal-ask-guard.d.ts +2 -2
- package/dist/types/utils/herdr-pane.d.ts +76 -0
- package/package.json +19 -9
- package/scripts/build-binary.ts +2 -1
- package/scripts/build-sdk-package-smoke.ts +2 -13
- package/scripts/capture-sticky-viewport-showcase.ts +0 -1
- package/scripts/compile-args.ts +2 -0
- package/scripts/generate-sdk-adapter-parity-manifest.ts +31 -16
- package/scripts/generate-sdk-operation-inventory.ts +28 -0
- package/scripts/generate-telegram-baseline-manifest.ts +1 -0
- package/scripts/generate-tool-catalog.ts +6 -4
- package/scripts/verify-gjc-sdk-canonicalization.ts +5 -39
- package/src/async/job-manager.ts +352 -17
- package/src/async/support.ts +25 -0
- package/src/autoresearch/dashboard.ts +28 -13
- package/src/capability/index.ts +3 -1
- package/src/capability/mcp.ts +6 -0
- package/src/capability/types.ts +6 -0
- package/src/cli/accounts-cli.ts +395 -0
- package/src/cli/args.ts +23 -0
- package/src/cli/auth-broker-cli.ts +136 -66
- package/src/cli/auth-gateway-cli.ts +94 -70
- package/src/cli/config-cli.ts +27 -2
- package/src/cli/crash-cli.ts +78 -0
- package/src/cli/customize-doctor.ts +1605 -0
- package/src/cli/daemon-cli.ts +12 -3
- package/src/cli/fast-help.ts +1 -0
- package/src/cli/mcp-cli.ts +128 -60
- package/src/cli/notify-cli.ts +8 -14
- package/src/cli/root-flags.ts +8 -0
- package/src/cli/setup-cli.ts +145 -0
- package/src/cli/skills-cli.ts +38 -2
- package/src/cli/update-cli.ts +167 -12
- package/src/cli.ts +4 -0
- package/src/commands/accounts.ts +71 -0
- package/src/commands/crash.ts +35 -0
- package/src/commands/customize.ts +84 -0
- package/src/commands/daemon.ts +2 -2
- package/src/commands/deep-interview.ts +2 -0
- package/src/commands/launch.ts +1 -0
- package/src/commands/mcp.ts +12 -7
- package/src/commands/ralplan.ts +2 -0
- package/src/commands/sdk.ts +65 -32
- package/src/commands/setup.ts +5 -0
- package/src/commands/skills.ts +14 -4
- package/src/commands/ultragoal.ts +10 -1
- package/src/commands/update.ts +26 -15
- package/src/config/atomic-yaml-patch-worker.ts +57 -0
- package/src/config/atomic-yaml-patch.ts +769 -29
- package/src/config/config-schema-version.ts +10 -0
- package/src/config/file-lock.ts +70 -1
- package/src/config/mcp-schema.json +52 -14
- package/src/config/model-profile-activation.ts +23 -2
- package/src/config/model-profiles.ts +88 -21
- package/src/config/model-registry.ts +147 -21
- package/src/config/models-config-schema.ts +1 -1
- package/src/config/settings-schema.ts +77 -7
- package/src/config/settings.ts +4038 -199
- package/src/config/skill-settings-defaults.ts +41 -3
- package/src/config/task-delegation.ts +87 -0
- package/src/config/update-channel.ts +23 -0
- package/src/coordinator-mcp/server.ts +377 -308
- package/src/crash/index-store.ts +723 -0
- package/src/crash/nudge.ts +89 -0
- package/src/crash/record-loader.ts +149 -0
- package/src/crash/report.ts +551 -0
- package/src/crash/sanitize.ts +129 -0
- package/src/cursor.ts +36 -10
- package/src/customization/import.ts +946 -0
- package/src/customization/index.ts +4 -0
- package/src/customization/inventory.ts +335 -0
- package/src/customization/mutations.ts +141 -0
- package/src/customization/types.ts +223 -0
- package/src/daemon/control-types.ts +8 -1
- package/src/daemon/operator-contract.ts +6 -6
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/models/catalog.ts +31 -6
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +11 -22
- package/src/defaults/gjc/skills/ralplan/SKILL.md +36 -23
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +16 -0
- package/src/discovery/claude-hooks.ts +38 -0
- package/src/discovery/claude.ts +142 -209
- package/src/discovery/codex-hooks.ts +38 -0
- package/src/discovery/codex.ts +132 -198
- package/src/discovery/helpers.ts +8 -1
- package/src/discovery/index.ts +2 -0
- package/src/discovery/mcp-compat.ts +234 -0
- package/src/discovery/mcp-json.ts +6 -0
- package/src/edit/renderer.ts +40 -0
- package/src/edit/streaming.ts +4 -2
- package/src/exec/bash-executor.ts +24 -20
- package/src/export/html/index.ts +51 -2
- package/src/extensibility/extensions/loader.ts +9 -1
- package/src/extensibility/extensions/runner.ts +17 -4
- package/src/extensibility/extensions/types.ts +31 -6
- package/src/extensibility/gjc-plugins/constrained-hooks.ts +33 -0
- package/src/extensibility/gjc-plugins/installer.ts +9 -5
- package/src/extensibility/gjc-plugins/observability.ts +8 -2
- package/src/extensibility/gjc-plugins/registry.ts +13 -2
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +3 -1
- package/src/extensibility/gjc-plugins/schema.ts +222 -39
- package/src/extensibility/hooks/loader.ts +154 -10
- package/src/extensibility/runtime-skill-discovery.ts +257 -60
- package/src/extensibility/skill-management.ts +368 -0
- package/src/extensibility/skills.ts +52 -16
- package/src/gjc-runtime/deep-interview-runtime.ts +45 -61
- package/src/gjc-runtime/launch-worktree.ts +56 -2
- package/src/gjc-runtime/linux-proc.ts +7 -1
- package/src/gjc-runtime/ralplan-runtime.ts +100 -164
- package/src/gjc-runtime/session-state-lock.ts +992 -0
- package/src/gjc-runtime/session-state-sidecar.ts +644 -142
- package/src/gjc-runtime/state-writer.ts +39 -14
- package/src/gjc-runtime/tmux-owner-isolation.ts +5 -4
- package/src/gjc-runtime/ultragoal-guard.ts +11 -4
- package/src/gjc-runtime/ultragoal-runtime.ts +44 -41
- package/src/gjc-runtime/workflow-settings.ts +596 -0
- package/src/goals/tools/goal-tool.ts +6 -1
- package/src/hooks/events.ts +291 -0
- package/src/hooks/native-skill-hook.ts +4 -0
- package/src/hooks/normalize.ts +369 -0
- package/src/hooks/skill-state.ts +165 -46
- package/src/internal-urls/docs-index.generated.ts +41 -32
- package/src/main.ts +36 -5
- package/src/migrate/mcp-mapper.ts +25 -2
- package/src/modes/acp/abort-scope.ts +29 -0
- package/src/modes/acp/acp-agent.ts +423 -98
- package/src/modes/components/assistant-message.ts +6 -1
- package/src/modes/components/chrome.ts +4 -3
- package/src/modes/components/customization/customization-dashboard.ts +443 -0
- package/src/modes/components/customization/import-wizard.ts +372 -0
- package/src/modes/components/customization/index.ts +1 -0
- package/src/modes/components/dynamic-theme-text.ts +22 -0
- package/src/modes/components/gajae-pet-widget.ts +607 -193
- package/src/modes/components/irc-sidebar.ts +11 -0
- package/src/modes/components/iterm-pet-transport.ts +585 -0
- package/src/modes/components/model-selector.ts +1 -6
- package/src/modes/components/oauth-selector.ts +277 -86
- package/src/modes/components/pet-capability.ts +35 -31
- package/src/modes/components/settings-selector.ts +29 -5
- package/src/modes/components/status-line/gh.ts +45 -1
- package/src/modes/components/status-line/segments.ts +19 -4
- package/src/modes/components/tool-status-header.ts +13 -3
- package/src/modes/controllers/command-controller.ts +20 -8
- package/src/modes/controllers/extension-ui-controller.ts +56 -257
- package/src/modes/controllers/input-controller.ts +10 -0
- package/src/modes/controllers/runtime-mcp-command-controller.ts +16 -3
- package/src/modes/controllers/selector-controller.ts +238 -77
- package/src/modes/controllers/stt-controller.ts +3 -3
- package/src/modes/interactive-mode.ts +88 -16
- package/src/modes/print-mode.ts +35 -6
- package/src/modes/runtime-init.ts +21 -68
- package/src/modes/theme/defaults/index.ts +2 -0
- package/src/modes/theme/defaults/ouroboros.json +118 -0
- package/src/modes/types.ts +1 -0
- package/src/modes/utils/injected-user-submission.ts +25 -0
- package/src/modes/utils/terminal-bell.ts +15 -1
- package/src/prompts/agent-fragments/ralplan-persistence.md +1 -1
- package/src/prompts/agent-fragments/restricted-bash.md +1 -1
- package/src/prompts/agents/critic.md +1 -1
- package/src/prompts/system/rlm-research.md +1 -1
- package/src/prompts/system/system-prompt.md +0 -2
- package/src/prompts/tools/bash.md +7 -1
- package/src/prompts/tools/browser.md +1 -1
- package/src/prompts/tools/cron.md +6 -6
- package/src/prompts/tools/read.md +0 -2
- package/src/prompts/tools/skill-discovery.md +4 -2
- package/src/runtime-mcp/client.ts +427 -23
- package/src/runtime-mcp/config.ts +37 -5
- package/src/runtime-mcp/manager-pool.test.ts +56 -0
- package/src/runtime-mcp/manager.ts +52 -2
- package/src/runtime-mcp/oauth-discovery.ts +13 -0
- package/src/runtime-mcp/oauth-flow.ts +46 -1
- package/src/runtime-mcp/pool-key.ts +5 -1
- package/src/runtime-mcp/pool.test.ts +9 -0
- package/src/runtime-mcp/protocol.test.ts +353 -0
- package/src/runtime-mcp/protocol.ts +624 -0
- package/src/runtime-mcp/scope-config.ts +78 -0
- package/src/runtime-mcp/tool-bridge.ts +44 -10
- package/src/runtime-mcp/transports/http.ts +84 -13
- package/src/runtime-mcp/types.ts +123 -12
- package/src/sdk/acp/adapter.ts +328 -97
- package/src/sdk/broker/broker.ts +160 -741
- package/src/sdk/broker/ensure.ts +9 -1
- package/src/sdk/broker/lifecycle.ts +510 -116
- package/src/sdk/broker/operation-receipt-ledger.ts +11 -2
- package/src/sdk/broker/process-incarnation.ts +19 -0
- package/src/sdk/broker/session-index.ts +516 -117
- package/src/sdk/broker/startup-failure.ts +28 -5
- package/src/sdk/broker/transport.ts +1 -13
- package/src/sdk/bus/chat-daemon-cli.ts +4 -2
- package/src/sdk/bus/chat-daemon-control.ts +67 -6
- package/src/sdk/bus/chat-daemon-runtime.ts +183 -859
- package/src/sdk/bus/config.ts +13 -0
- package/src/sdk/bus/conversation-store.ts +59 -171
- package/src/sdk/bus/daemon-paths.ts +20 -0
- package/src/sdk/bus/discord-conversation.ts +2 -0
- package/src/sdk/bus/discord-daemon.ts +524 -126
- package/src/sdk/bus/discord-live-provider.ts +206 -79
- package/src/sdk/bus/existing-thread-readiness.ts +4 -97
- package/src/sdk/bus/inbound-reaction-ordering.ts +122 -0
- package/src/sdk/bus/index.ts +2480 -456
- package/src/sdk/bus/kind-aware-reconciliation.ts +204 -34
- package/src/sdk/bus/lifecycle-commands.ts +2 -2
- package/src/sdk/bus/managed-daemon.ts +2 -145
- package/src/sdk/bus/notification-service.ts +196 -0
- package/src/sdk/bus/operator-runtime.ts +1 -1
- package/src/sdk/bus/prompt-reconciliation.ts +24 -15
- package/src/sdk/bus/reconciliation-store.ts +553 -24
- package/src/sdk/bus/session-control.ts +49 -3
- package/src/sdk/bus/slack-conversation.ts +4 -0
- package/src/sdk/bus/slack-daemon.ts +733 -134
- package/src/sdk/bus/slack-live-provider.ts +65 -15
- package/src/sdk/bus/slack-provider.ts +4 -0
- package/src/sdk/bus/slack-thread-binding.ts +9 -104
- package/src/sdk/bus/telegram-adoption-intent.ts +299 -209
- package/src/sdk/bus/telegram-daemon-cli.ts +194 -7
- package/src/sdk/bus/telegram-daemon-contract.ts +265 -19
- package/src/sdk/bus/telegram-daemon-control.ts +3 -13
- package/src/sdk/bus/telegram-daemon-orphan-reap.ts +498 -0
- package/src/sdk/bus/telegram-daemon-owner-registry.ts +176 -0
- package/src/sdk/bus/telegram-daemon.ts +2552 -2280
- package/src/sdk/bus/telegram-reference.ts +1 -226
- package/src/sdk/bus/telegram-setup.ts +2 -2
- package/src/sdk/bus/threaded-render.ts +1 -0
- package/src/sdk/bus/topic-registry.ts +279 -146
- package/src/sdk/cli/rows.ts +2 -35
- package/src/sdk/cli/session-cli.ts +776 -700
- package/src/sdk/client/client.ts +892 -1
- package/src/sdk/host/control/dispatch.ts +93 -58
- package/src/sdk/host/control/index.ts +1 -1
- package/src/sdk/host/control/operations.ts +18 -10
- package/src/sdk/host/control/runtime-gate.ts +40 -0
- package/src/sdk/host/host.ts +63 -12
- package/src/sdk/host/query/handlers.ts +66 -7
- package/src/sdk/host/reverse-leases.ts +2 -2
- package/src/sdk/host/sdk-surface-parity.test.ts +1 -1
- package/src/sdk/host/session-runtime.test.ts +2787 -34
- package/src/sdk/host/session-runtime.ts +1489 -101
- package/src/sdk/host/surface-policy.ts +12 -8
- package/src/sdk/host/types.ts +1 -1
- package/src/sdk/host/websocket-transport.lifecycle.test.ts +31 -59
- package/src/sdk/host/websocket-transport.ts +85 -50
- package/src/sdk/index.ts +2 -1
- package/src/sdk/lifecycle/broker-client.ts +53 -0
- package/src/sdk/lifecycle/client.ts +234 -0
- package/src/sdk/lifecycle/index.ts +3 -0
- package/src/sdk/{bus/recent-activity.ts → lifecycle/recent-sessions.ts} +5 -2
- package/src/sdk/lifecycle/service.ts +720 -0
- package/src/sdk/mcp/server.ts +226 -188
- package/src/sdk/prompt-deadline-lease.ts +55 -0
- package/src/sdk/prompt-deadline-manager.ts +148 -0
- package/src/sdk/prompt-status.ts +11 -3
- package/src/sdk/protocol/operation-inventory.generated.json +272 -129
- package/src/sdk/protocol/operation-registry.ts +71 -8
- package/src/sdk/receipt-state.ts +43 -0
- package/src/sdk/reconciliation-extensions.ts +14 -0
- package/src/sdk/router/index.ts +1 -0
- package/src/sdk/router/session-router.ts +1658 -0
- package/src/sdk/session-list.ts +93 -0
- package/src/sdk/session-reconnect.ts +45 -1
- package/src/sdk/session.ts +716 -120
- package/src/sdk/transport/serve-cli.ts +18 -34
- package/src/session/account-inventory.ts +603 -0
- package/src/session/agent-session.ts +2873 -559
- package/src/session/agent-storage.ts +35 -0
- package/src/session/blob-store.ts +32 -1
- package/src/session/coordinator-tool-label.ts +40 -0
- package/src/session/internal/managed-session-scope.ts +4 -0
- package/src/session/internal/managed-session-storage.ts +199 -31
- package/src/session/messages.ts +1 -1
- package/src/session/secure-token-file.ts +80 -0
- package/src/session/session-manager.ts +757 -57
- package/src/session/session-storage.ts +25 -16
- package/src/session/startup-auth-config.ts +297 -0
- package/src/session/terminal-abort.ts +1253 -0
- package/src/session/yield-queue.ts +57 -15
- package/src/session-import/claude.ts +334 -0
- package/src/session-import/codex.ts +1033 -0
- package/src/session-import/command.ts +77 -0
- package/src/session-import/detect.ts +133 -0
- package/src/session-import/index.ts +7 -0
- package/src/session-import/provider-codex.ts +327 -0
- package/src/session-import/provider-service.ts +457 -0
- package/src/session-import/redact.ts +128 -0
- package/src/session-import/service.ts +1264 -0
- package/src/session-import/types.ts +148 -0
- package/src/setup/paseo/check.ts +213 -0
- package/src/setup/paseo/install-saga.ts +293 -0
- package/src/setup/paseo/json-publisher.ts +263 -0
- package/src/setup/paseo/orchestration-preferences.ts +86 -0
- package/src/setup/paseo/paseo-ownership.ts +224 -0
- package/src/setup/paseo/paseo-setup.ts +253 -0
- package/src/setup/paseo/provider-config.ts +139 -0
- package/src/setup/paseo/remove.ts +183 -0
- package/src/setup/paseo/result-types.ts +79 -0
- package/src/setup/paseo/setup-deps.ts +175 -0
- package/src/setup/paseo/skills-bridge.ts +260 -0
- package/src/skill-state/active-state.ts +21 -11
- package/src/slash-commands/acp-builtins.ts +9 -1
- package/src/slash-commands/builtin-registry.ts +117 -19
- package/src/slash-commands/helpers/credential-switch.ts +143 -0
- package/src/slash-commands/helpers/mcp.ts +9 -3
- package/src/slash-commands/helpers/usage-report.ts +61 -56
- package/src/slash-commands/types.ts +7 -2
- package/src/task/executor.ts +30 -11
- package/src/task/index.ts +66 -7
- package/src/task/render.ts +23 -9
- package/src/tools/ask-answer-registry.ts +23 -7
- package/src/tools/ask.ts +8 -4
- package/src/tools/bash-sleep-advisory.ts +115 -0
- package/src/tools/bash.ts +98 -18
- package/src/tools/browser/attach.ts +71 -3
- package/src/tools/browser/launch.ts +86 -13
- package/src/tools/browser/profile-discovery.ts +57 -7
- package/src/tools/browser/render.ts +8 -1
- package/src/tools/browser.ts +130 -21
- package/src/tools/computer.enforcement.test.ts +1 -1
- package/src/tools/computer.ts +3 -2
- package/src/tools/cron.ts +12 -1
- package/src/tools/image-gen.ts +349 -142
- package/src/tools/index.ts +8 -0
- package/src/tools/job.ts +33 -6
- package/src/tools/monitor.ts +41 -2
- package/src/tools/skill-discovery.ts +21 -29
- package/src/tools/subagent.ts +142 -24
- package/src/tools/todo-contract.ts +55 -3
- package/src/tools/todo-write.ts +4 -3
- package/src/tools/tool-catalog.generated.ts +6 -6
- package/src/tools/ultragoal-ask-guard.ts +10 -3
- package/src/utils/herdr-pane.ts +345 -0
- package/src/utils/title-generator.ts +2 -0
- package/src/web/scrapers/index.ts +6 -4
- package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
- package/dist/types/defaults/gjc-defaults.test.d.ts +0 -1
- package/dist/types/memory-backend/lazy-loading.test.d.ts +0 -1
- package/dist/types/runtime/boot-ordering.test.d.ts +0 -1
- package/dist/types/runtime/lazy-service.test.d.ts +0 -1
- package/dist/types/runtime/network-prewarm-service.test.d.ts +0 -1
- package/dist/types/runtime/workspace-tree-service.test.d.ts +0 -1
- package/dist/types/runtime-mcp/config.test.d.ts +0 -1
- package/dist/types/runtime-mcp/http.test.d.ts +0 -1
- package/dist/types/runtime-mcp/manager-pool.test.d.ts +0 -1
- package/dist/types/runtime-mcp/pool-key.test.d.ts +0 -1
- package/dist/types/runtime-mcp/pool.test.d.ts +0 -1
- package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +0 -117
- package/dist/types/sdk/bus/lifecycle-orchestrator.d.ts +0 -141
- package/dist/types/sdk/bus/telegram-cli.d.ts +0 -31
- package/dist/types/sdk/elevation/allowlist.d.ts +0 -20
- package/dist/types/sdk/elevation/audit.d.ts +0 -93
- package/dist/types/sdk/elevation/capability.d.ts +0 -3
- package/dist/types/sdk/elevation/digest.d.ts +0 -72
- package/dist/types/sdk/elevation/dispatch-receipt.d.ts +0 -85
- package/dist/types/sdk/elevation/grant-ledger.d.ts +0 -163
- package/dist/types/sdk/elevation/owner.d.ts +0 -48
- package/dist/types/sdk/host/import-graph.test.d.ts +0 -1
- package/dist/types/sdk/host/sdk-surface-parity.test.d.ts +0 -1
- package/dist/types/sdk/host/session-runtime.test.d.ts +0 -1
- package/dist/types/sdk/host/websocket-transport.lifecycle.test.d.ts +0 -1
- package/dist/types/session/auth-broker-config.d.ts +0 -13
- package/dist/types/session/heap-eviction-artifacts.test.d.ts +0 -1
- package/dist/types/skills/skills.test.d.ts +0 -1
- package/dist/types/slash-commands/notify-command.test.d.ts +0 -1
- package/dist/types/task/token-log.test.d.ts +0 -1
- package/dist/types/tools/computer.enforcement.test.d.ts +0 -1
- package/dist/types/tools/descriptors.test.d.ts +0 -1
- package/scripts/g005-daemon-smoke.ts +0 -180
- package/scripts/g011-daemon-path-smoke.ts +0 -153
- package/src/sdk/bus/lifecycle-control-runtime.ts +0 -1733
- package/src/sdk/bus/lifecycle-orchestrator.ts +0 -489
- package/src/sdk/bus/telegram-cli.ts +0 -212
- package/src/sdk/elevation/allowlist.ts +0 -54
- package/src/sdk/elevation/audit.ts +0 -208
- package/src/sdk/elevation/capability.ts +0 -41
- package/src/sdk/elevation/digest.ts +0 -129
- package/src/sdk/elevation/dispatch-receipt.ts +0 -184
- package/src/sdk/elevation/grant-ledger.ts +0 -1142
- package/src/sdk/elevation/owner.ts +0 -109
- package/src/session/auth-broker-config.ts +0 -109
- /package/dist/types/{ai-core-import-gate.test.d.ts → discovery/claude-hooks.d.ts} +0 -0
- /package/dist/types/{cli/fixture-report.test.d.ts → discovery/codex-hooks.d.ts} +0 -0
- /package/dist/types/sdk/{bus/recent-activity.d.ts → lifecycle/recent-sessions.d.ts} +0 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types and scope resolution for the `/extensions` umbrella local
|
|
3
|
+
* customization surface (issue #4291, parent #4283).
|
|
4
|
+
*
|
|
5
|
+
* `.gjc` is the canonical persisted authority at two scopes:
|
|
6
|
+
* - project-local: `<project>/.gjc/`
|
|
7
|
+
* - user-global: `~/.gjc/agent/`
|
|
8
|
+
*
|
|
9
|
+
* Claude Code and Codex layouts are import sources only — never a parallel
|
|
10
|
+
* runtime authority. This module defines the narrow contract types the UI
|
|
11
|
+
* and import flow consume without coupling to sibling ownership internals
|
|
12
|
+
* or to the provider/extension-module ExtensionDashboard.
|
|
13
|
+
*/
|
|
14
|
+
import * as path from "node:path";
|
|
15
|
+
import { getAgentDir, getMCPConfigPath, getProjectAgentDir } from "@gajae-code/utils";
|
|
16
|
+
import type { MigrateSource } from "../migrate/types";
|
|
17
|
+
import type { MCPServerConfig } from "../runtime-mcp/types";
|
|
18
|
+
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Scope
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
|
|
23
|
+
export type GjcScope = "project" | "global";
|
|
24
|
+
|
|
25
|
+
export interface GjcScopePaths {
|
|
26
|
+
scope: GjcScope;
|
|
27
|
+
/** Root directory: `<project>/.gjc` or `~/.gjc/agent` */
|
|
28
|
+
root: string;
|
|
29
|
+
/** MCP config: `<root>/mcp.json` */
|
|
30
|
+
mcpConfigPath: string;
|
|
31
|
+
/** Skills directory: `<root>/skills/` */
|
|
32
|
+
skillsDir: string;
|
|
33
|
+
/** Hooks directory: `<root>/hooks/` */
|
|
34
|
+
hooksDir: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function resolveScopePaths(scope: GjcScope, projectCwd: string): GjcScopePaths {
|
|
38
|
+
if (scope === "project") {
|
|
39
|
+
const root = getProjectAgentDir(projectCwd);
|
|
40
|
+
return {
|
|
41
|
+
scope,
|
|
42
|
+
root,
|
|
43
|
+
mcpConfigPath: getMCPConfigPath("project", projectCwd),
|
|
44
|
+
skillsDir: path.join(root, "skills"),
|
|
45
|
+
hooksDir: path.join(root, "hooks"),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const root = getAgentDir();
|
|
49
|
+
return {
|
|
50
|
+
scope,
|
|
51
|
+
root,
|
|
52
|
+
mcpConfigPath: getMCPConfigPath("user", projectCwd),
|
|
53
|
+
skillsDir: path.join(root, "skills"),
|
|
54
|
+
hooksDir: path.join(root, "hooks"),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function scopeLabel(scope: GjcScope): string {
|
|
59
|
+
return scope === "project" ? "Project .gjc" : "Global .gjc";
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Customization surfaces
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
|
|
66
|
+
export type CustomizationSurface = "skills" | "hooks" | "mcps";
|
|
67
|
+
|
|
68
|
+
export const CUSTOMIZATION_SURFACES: readonly CustomizationSurface[] = ["skills", "hooks", "mcps"];
|
|
69
|
+
|
|
70
|
+
export function surfaceLabel(surface: CustomizationSurface): string {
|
|
71
|
+
switch (surface) {
|
|
72
|
+
case "skills":
|
|
73
|
+
return "Skills";
|
|
74
|
+
case "hooks":
|
|
75
|
+
return "Hooks";
|
|
76
|
+
case "mcps":
|
|
77
|
+
return "MCPs";
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
// Import source
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
|
|
85
|
+
export type ImportProduct = Exclude<MigrateSource, "opencode">;
|
|
86
|
+
export type ImportSourceScope = "project" | "user";
|
|
87
|
+
|
|
88
|
+
export const IMPORT_PRODUCTS: readonly ImportProduct[] = ["claude-code", "codex"];
|
|
89
|
+
export const IMPORT_SOURCE_SCOPES: readonly ImportSourceScope[] = ["project", "user"];
|
|
90
|
+
|
|
91
|
+
export function productLabel(product: ImportProduct): string {
|
|
92
|
+
switch (product) {
|
|
93
|
+
case "claude-code":
|
|
94
|
+
return "Claude Code";
|
|
95
|
+
case "codex":
|
|
96
|
+
return "Codex";
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function sourceScopeLabel(scope: ImportSourceScope): string {
|
|
101
|
+
return scope === "project" ? "Project-local" : "User-global";
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export function sourceConfigDir(
|
|
105
|
+
product: ImportProduct,
|
|
106
|
+
sourceScope: ImportSourceScope,
|
|
107
|
+
projectCwd: string,
|
|
108
|
+
homeDir: string,
|
|
109
|
+
): string {
|
|
110
|
+
if (product === "claude-code") {
|
|
111
|
+
return sourceScope === "project" ? path.join(projectCwd, ".claude") : path.join(homeDir, ".claude");
|
|
112
|
+
}
|
|
113
|
+
return sourceScope === "project" ? path.join(projectCwd, ".codex") : path.join(homeDir, ".codex");
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
// Inventory row — provenance/status model for the dashboard
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
|
|
120
|
+
export type InventoryStatus =
|
|
121
|
+
| "enabled"
|
|
122
|
+
| "disabled"
|
|
123
|
+
| "invalid"
|
|
124
|
+
| "shadowed"
|
|
125
|
+
| "quarantined"
|
|
126
|
+
| "imported"
|
|
127
|
+
| "restart-required";
|
|
128
|
+
|
|
129
|
+
export interface InventoryRow {
|
|
130
|
+
/** Stable row identity: `<surface>:<scope>:<path>` */
|
|
131
|
+
id: string;
|
|
132
|
+
/** Surface kind */
|
|
133
|
+
surface: CustomizationSurface;
|
|
134
|
+
/** Entry name */
|
|
135
|
+
name: string;
|
|
136
|
+
/** Display name */
|
|
137
|
+
displayName: string;
|
|
138
|
+
/** Effective status */
|
|
139
|
+
status: InventoryStatus;
|
|
140
|
+
/** Provenance — which scope/convention discovered it */
|
|
141
|
+
provenance: string;
|
|
142
|
+
/** Absolute discovered path — the exact identity mutations act on */
|
|
143
|
+
path: string;
|
|
144
|
+
/** Scope that persists this row (project `.gjc` or global `.gjc`) */
|
|
145
|
+
scope: GjcScope;
|
|
146
|
+
/** Short description (no secrets) */
|
|
147
|
+
description?: string;
|
|
148
|
+
/** Diagnostics/remediation detail for invalid/conflicted rows */
|
|
149
|
+
diagnostics?: string[];
|
|
150
|
+
/** Redacted inspector payload (never contains secret values) */
|
|
151
|
+
raw: unknown;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
// Normalized import preview
|
|
156
|
+
// ---------------------------------------------------------------------------
|
|
157
|
+
|
|
158
|
+
export type ImportCollisionPolicy = "skip" | "rename" | "overwrite";
|
|
159
|
+
|
|
160
|
+
export type ImportEntryStatus = "add" | "conflict" | "unsupported" | "redacted" | "overwrite";
|
|
161
|
+
|
|
162
|
+
export interface ImportPreviewEntry {
|
|
163
|
+
surface: CustomizationSurface;
|
|
164
|
+
/** Source name in the foreign layout */
|
|
165
|
+
sourceName: string;
|
|
166
|
+
/** Destination name in `.gjc` (may differ under rename policy) */
|
|
167
|
+
destinationName: string;
|
|
168
|
+
status: ImportEntryStatus;
|
|
169
|
+
/** Source path category (file, section, etc.) */
|
|
170
|
+
sourceCategory: string;
|
|
171
|
+
/** Redacted description for the preview UI */
|
|
172
|
+
description: string;
|
|
173
|
+
/** Reason for conflict/unsupported/redaction if applicable */
|
|
174
|
+
reason?: string;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export interface NormalizedPayload {
|
|
178
|
+
mcp?: { name: string; config: MCPServerConfig };
|
|
179
|
+
skill?: { slug: string; content: string };
|
|
180
|
+
hook?: { phase: "pre" | "post"; fileName: string; content: string };
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export interface ImportPreview {
|
|
184
|
+
product: ImportProduct;
|
|
185
|
+
sourceScope: ImportSourceScope;
|
|
186
|
+
destinationScope: GjcScope;
|
|
187
|
+
surfaces: CustomizationSurface[];
|
|
188
|
+
entries: ImportPreviewEntry[];
|
|
189
|
+
/** Aggregate warnings across all entries */
|
|
190
|
+
warnings: string[];
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Validated apply plan produced alongside the redacted preview. `payloads` is
|
|
195
|
+
* parallel to `preview.entries` (undefined for entries that carry no write).
|
|
196
|
+
* It is deliberately separate from the preview DTO: the preview is safe to
|
|
197
|
+
* serialize and display, while the plan holds full file contents and MCP
|
|
198
|
+
* secret values and is only consumed by the apply transaction.
|
|
199
|
+
*/
|
|
200
|
+
export interface ImportPlan {
|
|
201
|
+
preview: ImportPreview;
|
|
202
|
+
payloads: readonly (NormalizedPayload | undefined)[];
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// ---------------------------------------------------------------------------
|
|
206
|
+
// Import result
|
|
207
|
+
// ---------------------------------------------------------------------------
|
|
208
|
+
|
|
209
|
+
export type ImportOutcome = "imported" | "skipped" | "renamed" | "overwritten" | "failed";
|
|
210
|
+
|
|
211
|
+
export interface ImportResultEntry {
|
|
212
|
+
surface: CustomizationSurface;
|
|
213
|
+
sourceName: string;
|
|
214
|
+
destinationName: string;
|
|
215
|
+
outcome: ImportOutcome;
|
|
216
|
+
reason?: string;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export interface ImportResult {
|
|
220
|
+
entries: ImportResultEntry[];
|
|
221
|
+
/** True if all entries succeeded (imported/skipped/renamed/overwritten) */
|
|
222
|
+
ok: boolean;
|
|
223
|
+
}
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
export type DaemonKind = "telegram" | "discord" | "slack";
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
/** `reload` remains the controller result verb; `restart` is the CLI canonical action. */
|
|
12
|
+
export type DaemonAction = "list" | "status" | "stop" | "restart" | "reload";
|
|
12
13
|
|
|
13
14
|
export type DaemonHealth = "not_configured" | "stopped" | "running" | "stale" | "stopping" | "error";
|
|
14
15
|
|
|
@@ -45,6 +46,12 @@ export interface DaemonOperationOptions {
|
|
|
45
46
|
force?: boolean;
|
|
46
47
|
/** For reload: spawn a fresh owner even when none is currently running. */
|
|
47
48
|
spawnIfStopped?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* A post-update recovery has already force-stopped every selected daemon.
|
|
51
|
+
* When global delivery is disabled, acknowledge its canonical restart stage
|
|
52
|
+
* without spawning a transport that would resume delivery.
|
|
53
|
+
*/
|
|
54
|
+
allowDisabledNoop?: boolean;
|
|
48
55
|
}
|
|
49
56
|
|
|
50
57
|
export interface DaemonRecovery {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* One source of truth for the beginner-safe operational vocabulary so the
|
|
5
5
|
* guided human surface and the machine-readable JSON never drift:
|
|
6
|
-
* - the terse action verbs plus
|
|
6
|
+
* - the terse action verbs plus the retired `reload` operator alias,
|
|
7
7
|
* - process exit codes,
|
|
8
8
|
* - concise vs. `--verbose` human rendering of statuses and results, and
|
|
9
9
|
* - actionable recovery guidance for a token/chat ownership mismatch.
|
|
@@ -15,15 +15,15 @@
|
|
|
15
15
|
import type { DaemonAction, DaemonOperationResult, DaemonRecovery, DaemonStatus } from "./control-types";
|
|
16
16
|
|
|
17
17
|
/** Canonical daemon actions accepted as the leading verb. */
|
|
18
|
-
export const DAEMON_CANONICAL_ACTIONS: readonly DaemonAction[] = ["list", "status", "stop", "
|
|
18
|
+
export const DAEMON_CANONICAL_ACTIONS: readonly DaemonAction[] = ["list", "status", "stop", "restart"];
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
21
|
+
* `restart` is the routine "reload if running, otherwise start" verb. Keep
|
|
22
|
+
* `reload` only as an input compatibility token; internal callers must use
|
|
23
|
+
* the canonical restart action.
|
|
24
24
|
*/
|
|
25
25
|
export const DAEMON_ACTION_ALIASES: Readonly<Record<string, DaemonAction>> = {
|
|
26
|
-
|
|
26
|
+
reload: "restart",
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
/** Every token accepted in the leading action position (canonical + aliases). */
|
|
@@ -9,6 +9,7 @@ const COST_BUILD = { input: 1, output: 2, cacheRead: 0.2, cacheWrite: 0.2 };
|
|
|
9
9
|
const COST_COMPOSER_FAST = { input: 3, output: 15, cacheRead: 0.5, cacheWrite: 0 };
|
|
10
10
|
const COST_43 = { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0 };
|
|
11
11
|
const COST_45 = { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0 };
|
|
12
|
+
const COST_46 = { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0 };
|
|
12
13
|
const COST_420 = { input: 2, output: 6, cacheRead: 0.2, cacheWrite: 0 };
|
|
13
14
|
|
|
14
15
|
// ─── Model type ───────────────────────────────────────────────────────────────
|
|
@@ -73,6 +74,18 @@ const FALLBACK_MODELS: GrokCliModelConfig[] = [
|
|
|
73
74
|
contextWindow: 1_000_000,
|
|
74
75
|
maxTokens: 30_000,
|
|
75
76
|
},
|
|
77
|
+
{
|
|
78
|
+
// Official metadata and pricing: https://docs.x.ai/developers/models/grok-4.6
|
|
79
|
+
id: 'grok-4.6',
|
|
80
|
+
name: 'Grok 4.6',
|
|
81
|
+
reasoning: true,
|
|
82
|
+
input: ['text', 'image'],
|
|
83
|
+
cost: COST_46,
|
|
84
|
+
contextWindow: 500_000,
|
|
85
|
+
maxTokens: 30_000,
|
|
86
|
+
// https://docs.x.ai/developers/model-capabilities/text/reasoning: xhigh is 4.6 and later.
|
|
87
|
+
maxReasoningEffort: Effort.XHigh,
|
|
88
|
+
},
|
|
76
89
|
{
|
|
77
90
|
// Official metadata and pricing: https://docs.x.ai/developers/models/grok-4.5
|
|
78
91
|
id: 'grok-4.5',
|
|
@@ -122,8 +135,9 @@ const FALLBACK_MODELS: GrokCliModelConfig[] = [
|
|
|
122
135
|
},
|
|
123
136
|
];
|
|
124
137
|
|
|
125
|
-
// Official aliases: https://docs.x.ai/developers/models/grok-4.
|
|
138
|
+
// Official aliases: https://docs.x.ai/developers/models/grok-4.6
|
|
126
139
|
const MODEL_ALIASES: Readonly<Record<string, string>> = {
|
|
140
|
+
'grok-4.6-latest': 'grok-4.6',
|
|
127
141
|
'grok-4.5-latest': 'grok-4.5',
|
|
128
142
|
'grok-build-latest': 'grok-4.5',
|
|
129
143
|
};
|
|
@@ -138,18 +152,29 @@ function getCanonicalModelName(modelId: string): string {
|
|
|
138
152
|
return MODEL_ALIASES[name] ?? name;
|
|
139
153
|
}
|
|
140
154
|
|
|
155
|
+
function matchesModelFamily(name: string, modelId: string): boolean {
|
|
156
|
+
if (name === modelId) return true;
|
|
157
|
+
const suffix = name.slice(modelId.length + 1);
|
|
158
|
+
return name.startsWith(`${modelId}-`) && /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(suffix);
|
|
159
|
+
}
|
|
160
|
+
|
|
141
161
|
export function getMaxReasoningEffort(modelId: string): Effort | undefined {
|
|
142
162
|
const name = getCanonicalModelName(modelId);
|
|
143
|
-
return FALLBACK_MODELS.find(
|
|
144
|
-
|
|
145
|
-
)?.maxReasoningEffort;
|
|
163
|
+
return FALLBACK_MODELS.find((model) => matchesModelFamily(name, model.id.toLowerCase()))
|
|
164
|
+
?.maxReasoningEffort;
|
|
146
165
|
}
|
|
147
166
|
|
|
148
|
-
const EFFORT_CAPABLE_PREFIXES = [
|
|
167
|
+
const EFFORT_CAPABLE_PREFIXES = [
|
|
168
|
+
'grok-3-mini',
|
|
169
|
+
'grok-4.20-multi-agent',
|
|
170
|
+
'grok-4.3',
|
|
171
|
+
'grok-4.5',
|
|
172
|
+
'grok-4.6',
|
|
173
|
+
];
|
|
149
174
|
|
|
150
175
|
export function supportsReasoningEffort(modelId: string): boolean {
|
|
151
176
|
const name = getCanonicalModelName(modelId);
|
|
152
|
-
if (!EFFORT_CAPABLE_PREFIXES.some((prefix) => name
|
|
177
|
+
if (!EFFORT_CAPABLE_PREFIXES.some((prefix) => matchesModelFamily(name, prefix))) {
|
|
153
178
|
return false;
|
|
154
179
|
}
|
|
155
180
|
const model = resolveModels().find((entry) => getCanonicalModelName(entry.id) === name);
|
|
@@ -104,14 +104,14 @@ Complete this phase before Phase 1, before brownfield exploration, before GJC st
|
|
|
104
104
|
1. **Prefer pre-resolved native state**:
|
|
105
105
|
- First inspect active deep-interview state with `gjc deep-interview read --json`.
|
|
106
106
|
- If state contains a finite numeric `threshold` and a non-empty `threshold_source`, use those values, set `<resolvedThreshold>`, `<resolvedThresholdPercent>`, and `<resolvedThresholdSource>`, and skip optional settings-file reads. This is the normal `/skill:deep-interview` path because the native hook already resolved settings quietly before loading the skill.
|
|
107
|
-
2. **Only if native state lacks a resolved threshold, read threshold settings in runtime precedence order
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
107
|
+
2. **Only if native state lacks a resolved threshold, read threshold settings in the runtime precedence order** (one shared resolver; first valid value wins):
|
|
108
|
+
1. project `.gjc/config.yml`
|
|
109
|
+
2. user `<agentDir>/config.yml` (normally `~/.gjc/agent/config.yml`, honoring `GJC_CODING_AGENT_DIR`/`PI_CODING_AGENT_DIR`; XDG variables apply only to categorized data/state/cache subdirectories, never to the workflow config path)
|
|
110
|
+
3. built-in default (`0.05` before resolution-flag fallback)
|
|
111
|
+
- `config.yml` uses the nested (schema) form - `gjc: { deepInterview: { ambiguityThreshold } }`. Project configuration beats user configuration. The reported `threshold_source` is the canonical path of the winning file, or the default. `config.yml` is the ONLY settings surface: the legacy `settings.json` files' workflow keys are retired: the config-root `~/.gjc/settings.json` is migrated once into the default global agent `config.yml` and its source removed, while the project `.gjc/settings.json` is retained for non-workflow settings (only its workflow keys are migrated into project `.gjc/config.yml` and no longer read unless a migration target is absent - a migration that could not publish (e.g. a read-only `.gjc`) leaves the retained legacy value effective as the previously configured override until it can publish). Invalid optional settings files continue to the next layer or the default (tolerant) — never a failed `Read`; do not probe arbitrary ancestor candidates.
|
|
112
112
|
3. **Resolve threshold and source**:
|
|
113
113
|
- Use the first valid configured value in the precedence order above; otherwise use the mode default when a resolution flag was passed: `--quick` = `0.6`, `--standard` = `0.5`, `--deep` = `0.35`; with no resolution flag, use the base default `0.05`.
|
|
114
|
-
- Set these run variables exactly: `<resolvedThreshold>`, `<resolvedThresholdPercent>`, and `<resolvedThresholdSource>` (for example
|
|
114
|
+
- Set these run variables exactly: `<resolvedThreshold>`, `<resolvedThresholdPercent>`, and `<resolvedThresholdSource>` (for example `./.gjc/config.yml`, `<agentDir>/config.yml` such as `~/.gjc/agent/config.yml`, or the selected mode default).
|
|
115
115
|
4. **Emit the required first line to the user before any other interview announcement**:
|
|
116
116
|
|
|
117
117
|
```
|
|
@@ -984,23 +984,12 @@ Why bad: 45% ambiguity means nearly half the requirements are unclear. The mathe
|
|
|
984
984
|
<Advanced>
|
|
985
985
|
## Configuration
|
|
986
986
|
|
|
987
|
-
Optional settings in `.gjc/
|
|
987
|
+
Optional settings in `.gjc/config.yml`:
|
|
988
988
|
|
|
989
|
-
```
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
"ambiguityThreshold": <resolvedThreshold>,
|
|
994
|
-
"maxRounds": 100,
|
|
995
|
-
"softWarningRounds": 16,
|
|
996
|
-
"minRoundsBeforeExit": 3,
|
|
997
|
-
"enableChallengeAgents": true,
|
|
998
|
-
"autoExecuteOnComplete": false,
|
|
999
|
-
"defaultExecutionMode": null,
|
|
1000
|
-
"scoringModel": "opus"
|
|
1001
|
-
}
|
|
1002
|
-
}
|
|
1003
|
-
}
|
|
989
|
+
```yaml
|
|
990
|
+
gjc:
|
|
991
|
+
deepInterview:
|
|
992
|
+
ambiguityThreshold: 0.7
|
|
1004
993
|
```
|
|
1005
994
|
|
|
1006
995
|
## Resume
|
|
@@ -91,7 +91,7 @@ The consensus workflow:
|
|
|
91
91
|
e. Re-join Architect and Critic verdicts for the same revised Planner artifact/pass (including a fresh disposition stage if new conflicts appear)
|
|
92
92
|
f. Repeat this loop until Critic returns `OKAY` **and** Architect is `CLEAR`/`APPROVE` for the same Planner artifact/pass, or 5 iterations are reached
|
|
93
93
|
g. If 5 iterations are reached without Critic `OKAY` plus Architect `CLEAR`/`APPROVE`, **stop opening further planner/revision passes**. Preserve the best version as a terminal `PLANNING-STUCK` result; do not route it to automatic or explicit execution.
|
|
94
|
-
h. **Runtime budget (#3165):** native `gjc ralplan --write` refuses a new `planner`/`revision` that would open consensus iteration **> max** (default **5**, overridable via `gjc.ralplan.maxIterations
|
|
94
|
+
h. **Runtime budget (#3165):** native `gjc ralplan --write` refuses a new `planner`/`revision` that would open consensus iteration **> max** (default **5**, overridable via `gjc.ralplan.maxIterations`, integer 1..20, using the workflow-settings precedence below). Cap uses the same iteration definition as the HUD (`planner`/`revision` openers in `index.jsonl`). Overflow exits **3**, prints operator-visible **`PLANNING-STUCK`** on stdout (and stderr detail; JSON includes `planning_stuck: true`), and still allows `architect`/`critic` within an already-opened pass plus `post-interview`/`adr`/`final` so the best plan can be escalated to `pending approval` without dispatch. A new `--run-id` starts a fresh budget.
|
|
95
95
|
6. **Post-ralplan interview** (intent reconciliation gate): After the review join gate has both Critic `OKAY` and Architect `CLEAR`/`APPROVE` for the same Planner artifact/pass, and before the plan is finalized, reconcile the consensus plan against the user's actual intent. The goal is to make sure ralplan did not silently bake in assumptions that conflict with what the user wants.
|
|
96
96
|
a. **Collect open items** from the run: every assumption the Planner/Architect/Critic resolved by assumption rather than by stated fact, every ambiguity flagged during review, and every decision the loop made without explicit user input. Source these from the persisted `planner`/`architect`/`critic`/`revision` stage artifacts, not from memory.
|
|
97
97
|
b. **Cross-check prior context for conflicts**: glob `.gjc/_session-{sessionid}/specs/deep-interview-*.md` and other prior specs/plans/context relevant by topic. For each, list points where the consensus plan contradicts, weakens, or expands beyond a previously crystallized decision, constraint, or non-goal. Cite the conflicting artifact and line/section.
|
|
@@ -126,38 +126,51 @@ The consensus workflow:
|
|
|
126
126
|
- On cap: exit code **3**, marker **`PLANNING-STUCK`** (stdout), no silent re-loop, no automatic or explicit ultragoal/team dispatch. Opener budget is `max(index.jsonl openers, on-disk stage-*-{planner,revision}.md count)` so a missing/empty/malformed ledger cannot fail open after prior openers.
|
|
127
127
|
- Headless/CI: treat `PLANNING-STUCK` / exit 3 as terminal planning failure for orchestration/watchdogs.
|
|
128
128
|
- Interactive: retain the best existing plan as a terminal planning result; residual critic findings stay as caveats.
|
|
129
|
-
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
129
|
+
- **Workflow settings precedence** — ralplan reads all of its settings
|
|
130
|
+
(`gjc.ralplan.maxIterations`, `gjc.ralplan.maxReviewPassesPerLane`,
|
|
131
|
+
`gjc.ralplan.autoHandoff`) through one shared resolver in this exact order
|
|
132
|
+
(first valid value wins):
|
|
133
|
+
1. project `.gjc/config.yml`
|
|
134
|
+
2. user `<agentDir>/config.yml` (normally `~/.gjc/agent/config.yml`, honoring
|
|
135
|
+
`GJC_CODING_AGENT_DIR`/`PI_CODING_AGENT_DIR`; XDG applies only to categorized data/state/cache subdirs, never the workflow config path)
|
|
136
|
+
3. built-in default
|
|
137
|
+
|
|
138
|
+
`config.yml` uses the nested (schema) form — `gjc: { ralplan: { maxIterations } }`.
|
|
139
|
+
Project configuration beats user configuration. The reported `source` is the
|
|
140
|
+
canonical path of the winning file, or `default`. `config.yml` is the ONLY
|
|
141
|
+
settings surface: the legacy `settings.json` files (project and config-root)
|
|
142
|
+
are retired: the config-root `~/.gjc/settings.json` is migrated once into the
|
|
143
|
+
default global agent `config.yml` and its source removed, while the project
|
|
144
|
+
`.gjc/settings.json` is retained for non-workflow settings (only its workflow
|
|
145
|
+
keys are migrated into project `.gjc/config.yml` and no longer read unless a migration target is absent - a migration that could not publish (e.g. a read-only `.gjc`) leaves the retained legacy value effective as the previously configured override until it can publish). **Malformed or
|
|
146
|
+
invalid explicit settings in any layer exit 2**
|
|
147
|
+
(`invalid ralplan settings at <path>: <reason>`) — including
|
|
148
|
+
`gjc.ralplan.maxIterations`, whose former silent fallback to the default is
|
|
149
|
+
removed.
|
|
150
|
+
- Override example (project `.gjc/config.yml`):
|
|
151
|
+
|
|
152
|
+
```yaml
|
|
153
|
+
gjc:
|
|
154
|
+
ralplan:
|
|
155
|
+
maxIterations: 3
|
|
139
156
|
```
|
|
140
157
|
|
|
141
158
|
## Per-lane review budget (operator contract)
|
|
142
159
|
|
|
143
160
|
- Default: **1** Architect pass and **1** Critic pass per opener iteration.
|
|
144
|
-
- Override via `gjc.ralplan.maxReviewPassesPerLane
|
|
161
|
+
- Override via `gjc.ralplan.maxReviewPassesPerLane` (integer **1..10**, registered in the public settings schema) using the workflow-settings precedence above; project overrides user.
|
|
145
162
|
- On overflow: exit code **3** with the **`PLANNING-STUCK`** marker and lane-specific JSON/stderr detail.
|
|
146
163
|
- `post-interview`, `adr`, and `final` are always allowed.
|
|
147
164
|
- Identical re-writes dedupe without stuck-signaling — including after a crash between artifact write and ledger append: the identical retry repairs the missing ledger row and returns the dedupe receipt.
|
|
148
165
|
- A new `--run-id` starts a fresh budget.
|
|
149
166
|
- A rule-2-justified blocker routes through a Planner `revision` opener (new iteration, fresh lane budget), never a second same-iteration review pass.
|
|
150
|
-
- Override example (project `.gjc/
|
|
151
|
-
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
"maxReviewPassesPerLane": 2
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
167
|
+
- Override example (project `.gjc/config.yml`):
|
|
168
|
+
|
|
169
|
+
```yaml
|
|
170
|
+
gjc:
|
|
171
|
+
ralplan:
|
|
172
|
+
maxIterations: 3
|
|
173
|
+
maxReviewPassesPerLane: 2
|
|
161
174
|
```
|
|
162
175
|
|
|
163
176
|
|
|
@@ -18,6 +18,22 @@ Use when the user asks for `ultragoal`, `create-goals`, `complete-goals`, durabl
|
|
|
18
18
|
- `.gjc/_session-{sessionid}/ultragoal/ledger.jsonl` (checkpoint and structured steering audit events)
|
|
19
19
|
|
|
20
20
|
Existing aggregate plans with the legacy enumerated objective are migrated to the stable pointer objective on read, persisted to `goals.json`, retained in `gjcObjectiveAliases` for already-active hidden goal reconciliation, and audited with an `aggregate_objective_migrated` ledger entry.
|
|
21
|
+
- **Nudge budget setting** — the per-story give-up budget
|
|
22
|
+
(`gjc.ultragoal.nudgeBudget`, default **10**, non-negative integer) is read
|
|
23
|
+
through one shared resolver in this exact order (first valid value wins):
|
|
24
|
+
1. project `.gjc/config.yml`
|
|
25
|
+
2. user `<agentDir>/config.yml` (normally `~/.gjc/agent/config.yml`, honoring
|
|
26
|
+
`GJC_CODING_AGENT_DIR`/`PI_CODING_AGENT_DIR`; XDG applies only to categorized data/state/cache subdirs, never the workflow config path)
|
|
27
|
+
3. built-in default
|
|
28
|
+
`config.yml` uses the nested (schema) form - `gjc: { ultragoal: { nudgeBudget } }`.
|
|
29
|
+
Project configuration beats user configuration. The reported `source` is the
|
|
30
|
+
canonical path of the winning file, or `default`. `config.yml` is the ONLY
|
|
31
|
+
settings surface: the legacy `settings.json` files (project and config-root)
|
|
32
|
+
are retired: the config-root `~/.gjc/settings.json` is migrated once into the
|
|
33
|
+
default global agent `config.yml` and its source removed, while the project
|
|
34
|
+
`.gjc/settings.json` is retained for non-workflow settings (only its workflow
|
|
35
|
+
keys are migrated into project `.gjc/config.yml` and no longer read unless a migration target is absent - a migration that could not publish (e.g. a read-only `.gjc`) leaves the retained legacy value effective as the previously configured override until it can publish). Invalid optional settings
|
|
36
|
+
files continue to the next layer or the default (tolerant).
|
|
21
37
|
|
|
22
38
|
## Corrupt current-session state recovery
|
|
23
39
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
import { registerProvider } from "../capability";
|
|
3
|
+
import { type Hook, hookCapability } from "../capability/hook";
|
|
4
|
+
import type { LoadContext, LoadResult } from "../capability/types";
|
|
5
|
+
import { createSourceMeta, loadFilesFromDir, SOURCE_PATHS } from "./helpers";
|
|
6
|
+
|
|
7
|
+
const PROVIDER_ID = "claude";
|
|
8
|
+
const DISPLAY_NAME = "Anthropic Claude";
|
|
9
|
+
const PRIORITY = 80;
|
|
10
|
+
|
|
11
|
+
async function loadHooks(ctx: LoadContext): Promise<LoadResult<Hook>> {
|
|
12
|
+
const items: Hook[] = [];
|
|
13
|
+
const warnings: string[] = [];
|
|
14
|
+
const projectHooksDir = path.join(ctx.cwd, SOURCE_PATHS.claude.projectDir, "hooks");
|
|
15
|
+
for (const hookType of ["pre", "post"] as const) {
|
|
16
|
+
const result = await loadFilesFromDir<Hook>(ctx, path.join(projectHooksDir, hookType), PROVIDER_ID, "project", {
|
|
17
|
+
transform: (name, _content, filePath) => ({
|
|
18
|
+
name,
|
|
19
|
+
path: filePath,
|
|
20
|
+
type: hookType,
|
|
21
|
+
tool: name.replace(/\.(sh|bash|zsh|fish|ts|js)$/, ""),
|
|
22
|
+
level: "project",
|
|
23
|
+
_source: createSourceMeta(PROVIDER_ID, filePath, "project"),
|
|
24
|
+
}),
|
|
25
|
+
});
|
|
26
|
+
items.push(...result.items);
|
|
27
|
+
warnings.push(...(result.warnings ?? []));
|
|
28
|
+
}
|
|
29
|
+
return { items, warnings };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
registerProvider<Hook>(hookCapability.id, {
|
|
33
|
+
id: PROVIDER_ID,
|
|
34
|
+
displayName: DISPLAY_NAME,
|
|
35
|
+
description: "Load hooks from project .claude/hooks/pre/ and .claude/hooks/post/",
|
|
36
|
+
priority: PRIORITY,
|
|
37
|
+
load: loadHooks,
|
|
38
|
+
});
|