@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/hooks/skill-state.ts
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import { logger } from "@gajae-code/utils";
|
|
4
|
-
import type
|
|
4
|
+
import { resolveSkillScopeTrust, type SkillDiscoverySettings } from "../config/skill-settings-defaults";
|
|
5
5
|
import { detectDeepInterviewPlaintextAskLeak } from "../deep-interview/plaintext-gate-guard";
|
|
6
6
|
import { activeSnapshotPath, modeStatePath as sessionModeStatePath } from "../gjc-runtime/session-layout";
|
|
7
7
|
import { resolveGjcSessionForRead } from "../gjc-runtime/session-resolution";
|
|
8
8
|
import { ModeStateSchema, SkillActiveStateSchema } from "../gjc-runtime/state-schema";
|
|
9
9
|
import {
|
|
10
|
-
|
|
10
|
+
deleteIfOwned,
|
|
11
|
+
type GuardedStateWriteReceipt,
|
|
12
|
+
guardedStateWriteReceipt,
|
|
13
|
+
matchesGuardedStateWriteReceipt,
|
|
14
|
+
readActiveEntries,
|
|
15
|
+
rebuildActiveSnapshot,
|
|
16
|
+
writeActiveEntry,
|
|
11
17
|
writeGuardedJsonAtomic,
|
|
12
18
|
writeGuardedWorkflowEnvelopeAtomic,
|
|
13
19
|
} from "../gjc-runtime/state-writer";
|
|
@@ -19,6 +25,7 @@ import {
|
|
|
19
25
|
type SkillActiveEntry,
|
|
20
26
|
type SkillActiveState,
|
|
21
27
|
syncSkillActiveState,
|
|
28
|
+
upstreamPlanningPipelineSkills,
|
|
22
29
|
} from "../skill-state/active-state";
|
|
23
30
|
import { initialPhaseForSkill } from "../skill-state/initial-phase";
|
|
24
31
|
import { readWorkflowGuardContext } from "../skill-state/workflow-mutation-guard";
|
|
@@ -74,18 +81,22 @@ export function buildSanitizedEffectiveSkillConfigContext(input: EffectiveSkillC
|
|
|
74
81
|
(input.disabledExtensions ?? []).filter(extension => extension.startsWith("skill:")),
|
|
75
82
|
);
|
|
76
83
|
const customDirectoryCount = countNonEmptyStrings(settings.customDirectories);
|
|
84
|
+
const projectTrusted = resolveSkillScopeTrust(settings, "project");
|
|
85
|
+
const userTrusted = resolveSkillScopeTrust(settings, "user");
|
|
77
86
|
|
|
78
87
|
return [
|
|
79
88
|
"Sanitized effective skill config for filesystem/custom skill discovery; bundled GJC workflow activation remains available for exactly deep-interview, ralplan, ultragoal, team.",
|
|
80
89
|
`Skill discovery booleans: ${[
|
|
81
90
|
formatBoolean("enabled", settings.enabled),
|
|
82
91
|
formatBoolean("enableSkillCommands", settings.enableSkillCommands),
|
|
83
|
-
formatBoolean("
|
|
92
|
+
formatBoolean("trustProjectSkills", settings.trustProjectSkills),
|
|
93
|
+
formatBoolean("trustUserSkills", settings.trustUserSkills),
|
|
84
94
|
formatBoolean("enablePiProject", settings.enablePiProject),
|
|
95
|
+
formatBoolean("enablePiUser", settings.enablePiUser),
|
|
85
96
|
formatBoolean("enableCodexUser", settings.enableCodexUser),
|
|
86
97
|
formatBoolean("enableClaudeUser", settings.enableClaudeUser),
|
|
87
98
|
formatBoolean("enableClaudeProject", settings.enableClaudeProject),
|
|
88
|
-
].join(", ")}.`,
|
|
99
|
+
].join(", ")}. Effective scope trust: project=${projectTrusted}; user=${userTrusted}.`,
|
|
89
100
|
`Skill discovery filters: includeSkills.count=${includeSkillCount}; ignoredSkills.count=${ignoredSkillCount}; disabledSkillExtensions.count=${disabledSkillExtensionCount}.`,
|
|
90
101
|
`Custom skill directories: count=${customDirectoryCount}.`,
|
|
91
102
|
].join(" ");
|
|
@@ -360,6 +371,16 @@ interface SeedSkillActivationStateInput {
|
|
|
360
371
|
turnId?: string;
|
|
361
372
|
nowIso?: string;
|
|
362
373
|
stateDir?: string;
|
|
374
|
+
activeSubskills?: SkillActiveEntry["active_subskills"];
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
interface SeedSkillActivationWrite {
|
|
378
|
+
state: SkillActiveState;
|
|
379
|
+
modeWrite: GuardedStateWriteReceipt;
|
|
380
|
+
activeEntryWrite: GuardedStateWriteReceipt;
|
|
381
|
+
activeStateWrite?: GuardedStateWriteReceipt;
|
|
382
|
+
/** Active upstream pipeline entries superseded by this seed; rollback restores them. */
|
|
383
|
+
supersededEntries: SkillActiveEntry[];
|
|
363
384
|
}
|
|
364
385
|
|
|
365
386
|
async function seedSkillActivationState(
|
|
@@ -367,7 +388,7 @@ async function seedSkillActivationState(
|
|
|
367
388
|
keyword: string,
|
|
368
389
|
source: string,
|
|
369
390
|
input: SeedSkillActivationStateInput,
|
|
370
|
-
): Promise<
|
|
391
|
+
): Promise<SeedSkillActivationWrite> {
|
|
371
392
|
const resolvedSessionId = await resolveBoundarySessionId(input.cwd, input.sessionId);
|
|
372
393
|
const nowIso = input.nowIso ?? new Date().toISOString();
|
|
373
394
|
const phase = initialPhaseForSkill(skill);
|
|
@@ -381,6 +402,7 @@ async function seedSkillActivationState(
|
|
|
381
402
|
session_id: resolvedSessionId,
|
|
382
403
|
...(input.threadId ? { thread_id: input.threadId } : {}),
|
|
383
404
|
...(input.turnId ? { turn_id: input.turnId } : {}),
|
|
405
|
+
...(input.activeSubskills ? { active_subskills: input.activeSubskills } : {}),
|
|
384
406
|
};
|
|
385
407
|
const state: SkillActiveState = {
|
|
386
408
|
version: 1,
|
|
@@ -397,6 +419,7 @@ async function seedSkillActivationState(
|
|
|
397
419
|
initialized_mode: skill,
|
|
398
420
|
initialized_state_path: initializedStatePath,
|
|
399
421
|
active_skills: [entry],
|
|
422
|
+
...(input.activeSubskills ? { active_subskills: input.activeSubskills } : {}),
|
|
400
423
|
};
|
|
401
424
|
const modeState: ModeState = {
|
|
402
425
|
active: true,
|
|
@@ -414,30 +437,26 @@ async function seedSkillActivationState(
|
|
|
414
437
|
modeState.threshold_source = "default";
|
|
415
438
|
}
|
|
416
439
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
await writeGuardedWorkflowEnvelopeAtomic(initializedStatePath, modeState, {
|
|
420
|
-
cwd: input.cwd,
|
|
421
|
-
policy: "source",
|
|
422
|
-
expectedRevision,
|
|
423
|
-
receipt: {
|
|
440
|
+
const modeWrite = guardedStateWriteReceipt(
|
|
441
|
+
await writeGuardedWorkflowEnvelopeAtomic(initializedStatePath, modeState, {
|
|
424
442
|
cwd: input.cwd,
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
443
|
+
policy: "source",
|
|
444
|
+
expectedRevision: 0,
|
|
445
|
+
receipt: {
|
|
446
|
+
cwd: input.cwd,
|
|
447
|
+
skill,
|
|
448
|
+
owner: "gjc-hook",
|
|
449
|
+
command: source,
|
|
450
|
+
sessionId: resolvedSessionId,
|
|
451
|
+
},
|
|
452
|
+
audit: { category: "state", verb: "write", owner: "gjc-hook", skill, sessionId: resolvedSessionId },
|
|
453
|
+
}),
|
|
454
|
+
);
|
|
455
|
+
if (!modeWrite) throw new Error(`Workflow activation mode write was not persisted: ${initializedStatePath}`);
|
|
456
|
+
let supersededEntries: SkillActiveEntry[] = [];
|
|
439
457
|
try {
|
|
440
|
-
await
|
|
458
|
+
supersededEntries = await captureSupersededPlanningEntries(input.cwd, resolvedSessionId, skill);
|
|
459
|
+
const activeEntryResult = await syncSkillActiveState({
|
|
441
460
|
cwd: input.cwd,
|
|
442
461
|
skill,
|
|
443
462
|
active: true,
|
|
@@ -445,26 +464,79 @@ async function seedSkillActivationState(
|
|
|
445
464
|
sessionId: resolvedSessionId,
|
|
446
465
|
threadId: input.threadId,
|
|
447
466
|
turnId: input.turnId,
|
|
467
|
+
active_subskills: input.activeSubskills,
|
|
448
468
|
source,
|
|
449
469
|
receipt: undefined,
|
|
450
|
-
sourceRevision,
|
|
470
|
+
sourceRevision: modeWrite.revision,
|
|
451
471
|
nowIso,
|
|
472
|
+
bestEffortSnapshot: true,
|
|
452
473
|
});
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
474
|
+
const activeEntryWrite = activeEntryResult ? guardedStateWriteReceipt(activeEntryResult) : undefined;
|
|
475
|
+
if (!activeEntryWrite) throw new Error(`Workflow activation entry write was not persisted: ${skill}`);
|
|
476
|
+
let activeStateWrite: GuardedStateWriteReceipt | undefined;
|
|
477
|
+
try {
|
|
478
|
+
activeStateWrite = guardedStateWriteReceipt(
|
|
479
|
+
await writeGuardedJsonAtomic(skillStatePath(input.cwd, resolvedSessionId), state, {
|
|
480
|
+
cwd: input.cwd,
|
|
481
|
+
policy: "cache",
|
|
482
|
+
sourceRevision: modeWrite.revision + 1,
|
|
483
|
+
receipt: undefined,
|
|
484
|
+
audit: { category: "state", verb: "write", owner: "gjc-hook", sessionId: resolvedSessionId },
|
|
485
|
+
}),
|
|
486
|
+
);
|
|
487
|
+
} catch {
|
|
488
|
+
// Corrupt derived active-state is reported by recovery diagnostics; activation remains fail-open.
|
|
489
|
+
}
|
|
490
|
+
return { state, modeWrite, activeEntryWrite, activeStateWrite, supersededEntries };
|
|
491
|
+
} catch (error) {
|
|
492
|
+
// The invocation is being rejected: remove the owned mode receipt so a retry
|
|
493
|
+
// does not wedge on a revision-1 mode file with no visible active entry.
|
|
494
|
+
await deleteIfOwned(modeWrite.path, {
|
|
458
495
|
cwd: input.cwd,
|
|
459
|
-
|
|
460
|
-
sourceRevision: (sourceRevision ?? 0) + 1,
|
|
461
|
-
receipt: undefined,
|
|
462
|
-
audit: { category: "state", verb: "write", owner: "gjc-hook", sessionId: resolvedSessionId },
|
|
496
|
+
predicate: current => matchesGuardedStateWriteReceipt(current, modeWrite),
|
|
463
497
|
});
|
|
464
|
-
|
|
465
|
-
//
|
|
498
|
+
// syncSkillActiveState removes the upstream pipeline entries it supersedes
|
|
499
|
+
// before persisting; if a later write throws, restore them so a rejected
|
|
500
|
+
// invocation does not silently clear the prior workflow.
|
|
501
|
+
await restoreSupersededPlanningEntries(input.cwd, resolvedSessionId, supersededEntries);
|
|
502
|
+
throw error;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Snapshot the active upstream planning-pipeline entries that seeding `skill`
|
|
507
|
+
* will supersede (e.g. an active deep-interview when ralplan is seeded). The
|
|
508
|
+
* seed's rollback re-writes these entries so a prompt that was never accepted
|
|
509
|
+
* does not silently clear the existing workflow.
|
|
510
|
+
*/
|
|
511
|
+
async function captureSupersededPlanningEntries(
|
|
512
|
+
cwd: string,
|
|
513
|
+
sessionId: string,
|
|
514
|
+
skill: string,
|
|
515
|
+
): Promise<SkillActiveEntry[]> {
|
|
516
|
+
const upstream = upstreamPlanningPipelineSkills(skill);
|
|
517
|
+
if (upstream.length === 0) return [];
|
|
518
|
+
const visible = await readCanonicalVisibleSkillActiveState(cwd, sessionId);
|
|
519
|
+
if (!visible) return [];
|
|
520
|
+
return listActiveSkills(visible).filter(entry => upstream.includes(entry.skill));
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* Re-write superseded upstream pipeline entries that a seed removed, skipping
|
|
525
|
+
* skills that were re-seeded in the meantime. Shared by the seed error path and
|
|
526
|
+
* the returned rollback so a never-accepted prompt never clears a prior workflow.
|
|
527
|
+
*/
|
|
528
|
+
async function restoreSupersededPlanningEntries(
|
|
529
|
+
cwd: string,
|
|
530
|
+
sessionId: string,
|
|
531
|
+
superseded: readonly SkillActiveEntry[],
|
|
532
|
+
): Promise<void> {
|
|
533
|
+
if (superseded.length === 0) return;
|
|
534
|
+
const existingEntries = await readActiveEntries(cwd, { sessionId });
|
|
535
|
+
const existingSkills = new Set(existingEntries.map(entry => entry.skill));
|
|
536
|
+
for (const entry of superseded) {
|
|
537
|
+
if (existingSkills.has(entry.skill)) continue;
|
|
538
|
+
await writeActiveEntry(cwd, { sessionId }, entry.skill, entry);
|
|
466
539
|
}
|
|
467
|
-
return state;
|
|
468
540
|
}
|
|
469
541
|
|
|
470
542
|
// Fallback for native-hook prompts when SkillPromptDetails.subskillActivation is absent;
|
|
@@ -472,7 +544,7 @@ async function seedSkillActivationState(
|
|
|
472
544
|
export async function recordSkillActivation(input: RecordSkillActivationInput): Promise<SkillActiveState | null> {
|
|
473
545
|
const match = detectPrimarySkillKeyword(input.text);
|
|
474
546
|
if (!match) return null;
|
|
475
|
-
return await seedSkillActivationState(match.skill, match.keyword, "gjc-skill-state-hook", input);
|
|
547
|
+
return (await seedSkillActivationState(match.skill, match.keyword, "gjc-skill-state-hook", input)).state;
|
|
476
548
|
}
|
|
477
549
|
|
|
478
550
|
export interface EnsureWorkflowSkillActivationInput {
|
|
@@ -483,6 +555,13 @@ export interface EnsureWorkflowSkillActivationInput {
|
|
|
483
555
|
turnId?: string;
|
|
484
556
|
nowIso?: string;
|
|
485
557
|
stateDir?: string;
|
|
558
|
+
activeSubskills?: SkillActiveEntry["active_subskills"];
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
export interface WorkflowSkillActivationSeed {
|
|
562
|
+
state: SkillActiveState | null;
|
|
563
|
+
seeded: boolean;
|
|
564
|
+
rollback(): Promise<boolean>;
|
|
486
565
|
}
|
|
487
566
|
|
|
488
567
|
/**
|
|
@@ -496,11 +575,12 @@ export interface EnsureWorkflowSkillActivationInput {
|
|
|
496
575
|
* `handoff_from`/`handoff_at` lineage), nothing is written so lineage is
|
|
497
576
|
* preserved. Non-workflow skills are ignored.
|
|
498
577
|
*/
|
|
499
|
-
export async function
|
|
578
|
+
export async function ensureWorkflowSkillActivationSeed(
|
|
500
579
|
input: EnsureWorkflowSkillActivationInput,
|
|
501
|
-
): Promise<
|
|
580
|
+
): Promise<WorkflowSkillActivationSeed> {
|
|
502
581
|
const skill = input.skill.trim();
|
|
503
|
-
|
|
582
|
+
const noRollback = async () => false;
|
|
583
|
+
if (!isGjcWorkflowSkill(skill)) return { state: null, seeded: false, rollback: noRollback };
|
|
504
584
|
const resolvedSessionId = await resolveBoundarySessionId(input.cwd, input.sessionId);
|
|
505
585
|
const existing = await readVisibleSkillActiveState(input.cwd, resolvedSessionId, input.stateDir);
|
|
506
586
|
const alreadyActive = listActiveSkills(existing).some(
|
|
@@ -508,15 +588,54 @@ export async function ensureWorkflowSkillActivationState(
|
|
|
508
588
|
entry.skill === skill &&
|
|
509
589
|
(existing ? entryMatchesContext(entry, existing, resolvedSessionId, input.threadId) : true),
|
|
510
590
|
);
|
|
511
|
-
if (alreadyActive) return existing;
|
|
512
|
-
|
|
591
|
+
if (alreadyActive) return { state: existing, seeded: false, rollback: noRollback };
|
|
592
|
+
const seed = await seedSkillActivationState(skill, `/skill:${skill}`, "gjc-skill-invocation", {
|
|
513
593
|
cwd: input.cwd,
|
|
514
594
|
sessionId: resolvedSessionId,
|
|
515
595
|
threadId: input.threadId,
|
|
516
596
|
turnId: input.turnId,
|
|
517
597
|
nowIso: input.nowIso,
|
|
518
598
|
stateDir: input.stateDir,
|
|
599
|
+
activeSubskills: input.activeSubskills,
|
|
519
600
|
});
|
|
601
|
+
const state = seed.state;
|
|
602
|
+
return {
|
|
603
|
+
state,
|
|
604
|
+
seeded: true,
|
|
605
|
+
rollback: async () => {
|
|
606
|
+
const modeRemoved = await deleteIfOwned(seed.modeWrite.path, {
|
|
607
|
+
cwd: input.cwd,
|
|
608
|
+
predicate: current => matchesGuardedStateWriteReceipt(current, seed.modeWrite),
|
|
609
|
+
});
|
|
610
|
+
if (!modeRemoved.deleted) {
|
|
611
|
+
await rebuildActiveSnapshot(input.cwd, { sessionId: resolvedSessionId }, { cwd: input.cwd });
|
|
612
|
+
return false;
|
|
613
|
+
}
|
|
614
|
+
const entryRemoved = await deleteIfOwned(seed.activeEntryWrite.path, {
|
|
615
|
+
cwd: input.cwd,
|
|
616
|
+
predicate: current => matchesGuardedStateWriteReceipt(current, seed.activeEntryWrite),
|
|
617
|
+
});
|
|
618
|
+
if (seed.activeStateWrite) {
|
|
619
|
+
const activeStateWrite = seed.activeStateWrite;
|
|
620
|
+
await deleteIfOwned(activeStateWrite.path, {
|
|
621
|
+
cwd: input.cwd,
|
|
622
|
+
predicate: current => matchesGuardedStateWriteReceipt(current, activeStateWrite),
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
// Restore the upstream pipeline entries this seed superseded so a
|
|
626
|
+
// prompt that was never accepted does not silently clear the prior
|
|
627
|
+
// workflow; skills that were re-seeded in the meantime are skipped.
|
|
628
|
+
await restoreSupersededPlanningEntries(input.cwd, resolvedSessionId, seed.supersededEntries);
|
|
629
|
+
await rebuildActiveSnapshot(input.cwd, { sessionId: resolvedSessionId }, { cwd: input.cwd });
|
|
630
|
+
return entryRemoved.deleted;
|
|
631
|
+
},
|
|
632
|
+
};
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
export async function ensureWorkflowSkillActivationState(
|
|
636
|
+
input: EnsureWorkflowSkillActivationInput,
|
|
637
|
+
): Promise<SkillActiveState | null> {
|
|
638
|
+
return (await ensureWorkflowSkillActivationSeed(input)).state;
|
|
520
639
|
}
|
|
521
640
|
|
|
522
641
|
function isTerminalModeState(state: ModeState | null): boolean {
|