@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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as crypto from "node:crypto";
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
|
+
import * as os from "node:os";
|
|
3
4
|
import * as path from "node:path";
|
|
4
5
|
import { shortenPath } from "../tools/render-utils";
|
|
5
6
|
|
|
@@ -61,6 +62,60 @@ function sanitizePathToken(value: string): string {
|
|
|
61
62
|
return `${prefix}-${digest}`;
|
|
62
63
|
}
|
|
63
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Environment override for the directory that holds a repository's launch worktrees.
|
|
67
|
+
*
|
|
68
|
+
* The bucket is otherwise derived entirely from the repository path, so a machine that
|
|
69
|
+
* already keeps worktrees somewhere else — a dedicated volume, or a pre-existing
|
|
70
|
+
* `<repo>.worktrees` convention — has no way to say so and accumulates a second bucket
|
|
71
|
+
* beside the first.
|
|
72
|
+
*/
|
|
73
|
+
const WORKTREE_BUCKET_ENV = "GJC_WORKTREE_DIR";
|
|
74
|
+
/**
|
|
75
|
+
* Expands to the repository directory name.
|
|
76
|
+
*
|
|
77
|
+
* A single exported value therefore stays repo-scoped across every checkout, which is
|
|
78
|
+
* what keeps two repositories that share a branch name from resolving to one worktree.
|
|
79
|
+
*/
|
|
80
|
+
const REPO_NAME_PLACEHOLDER = "{repo}";
|
|
81
|
+
const DEFAULT_WORKTREE_BUCKET = `${REPO_NAME_PLACEHOLDER}.gajae-code-worktrees`;
|
|
82
|
+
|
|
83
|
+
function expandHomePrefix(value: string, home: string, pathApi: typeof path.posix): string {
|
|
84
|
+
if (value === "~") return home;
|
|
85
|
+
return value.startsWith(`~${pathApi.sep}`) || value.startsWith("~/") ? pathApi.join(home, value.slice(2)) : value;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Pure core of {@link resolveWorktreeBucket}, exported for tests.
|
|
90
|
+
*
|
|
91
|
+
* Injecting the home directory and path implementation lets tests exercise
|
|
92
|
+
* Windows drive/UNC/separator semantics (`path.win32`) on any host.
|
|
93
|
+
*/
|
|
94
|
+
export function resolveWorktreeBucketForPath(
|
|
95
|
+
repoRoot: string,
|
|
96
|
+
envValue: string | undefined,
|
|
97
|
+
home: string,
|
|
98
|
+
pathApi: typeof path.posix,
|
|
99
|
+
): string {
|
|
100
|
+
const configured = envValue?.trim();
|
|
101
|
+
const template = expandHomePrefix(configured || DEFAULT_WORKTREE_BUCKET, home, pathApi);
|
|
102
|
+
return pathApi.resolve(
|
|
103
|
+
pathApi.dirname(repoRoot),
|
|
104
|
+
template.replaceAll(REPO_NAME_PLACEHOLDER, pathApi.basename(repoRoot)),
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Directory that holds this repository's launch worktrees.
|
|
110
|
+
*
|
|
111
|
+
* A relative override resolves against the repository's PARENT directory, matching the
|
|
112
|
+
* default's own shape, so `{repo}.worktrees` adopts an existing sibling bucket and
|
|
113
|
+
* `.worktrees` parks a hidden bucket beside the repository. An absolute override is used verbatim.
|
|
114
|
+
*/
|
|
115
|
+
function resolveWorktreeBucket(repoRoot: string): string {
|
|
116
|
+
return resolveWorktreeBucketForPath(repoRoot, process.env[WORKTREE_BUCKET_ENV], os.homedir(), path);
|
|
117
|
+
}
|
|
118
|
+
|
|
64
119
|
function resolveSourceBranchSlug(repoRoot: string, baseRef: string): string {
|
|
65
120
|
const branch = tryRunGit(repoRoot, ["symbolic-ref", "--quiet", "--short", "HEAD"]);
|
|
66
121
|
if (branch) return sanitizePathToken(branch);
|
|
@@ -322,9 +377,8 @@ export function planLaunchWorktree(
|
|
|
322
377
|
const baseRef = runGit(repoRoot, ["rev-parse", "HEAD"]);
|
|
323
378
|
const branchName = mode.detached ? null : mode.name;
|
|
324
379
|
if (branchName) validateBranchName(repoRoot, branchName);
|
|
325
|
-
const bucket = `${path.basename(repoRoot)}.gajae-code-worktrees`;
|
|
326
380
|
const worktreeSlug = mode.detached ? resolveSourceBranchSlug(repoRoot, baseRef) : sanitizePathToken(mode.name);
|
|
327
|
-
const worktreePath = path.join(
|
|
381
|
+
const worktreePath = path.join(resolveWorktreeBucket(repoRoot), worktreeSlug);
|
|
328
382
|
return { enabled: true, repoRoot, worktreePath, detached: mode.detached, baseRef, branchName };
|
|
329
383
|
}
|
|
330
384
|
|
|
@@ -12,6 +12,7 @@ import * as nodeFsSync from "node:fs";
|
|
|
12
12
|
import * as nodeFs from "node:fs/promises";
|
|
13
13
|
|
|
14
14
|
export interface LinuxProcStatIdentity {
|
|
15
|
+
state?: string;
|
|
15
16
|
startTime: string;
|
|
16
17
|
ttyDevice: string;
|
|
17
18
|
}
|
|
@@ -40,7 +41,7 @@ function parseLinuxProcIdentity(stat: string | null | undefined): LinuxProcStatI
|
|
|
40
41
|
const ttyDevice = fields[4];
|
|
41
42
|
const startTime = fields[19];
|
|
42
43
|
if (!ttyDevice || !/^-?\d+$/.test(ttyDevice) || !/^\d+$/.test(startTime)) return null;
|
|
43
|
-
return { startTime, ttyDevice };
|
|
44
|
+
return { state: fields[0], startTime, ttyDevice };
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
function classifyProcReadError(error: unknown): Extract<LinuxProcPidProbeResult, { kind: "absent" | "unverifiable" }> {
|
|
@@ -60,6 +61,11 @@ export function parseLinuxProcTtyDevice(stat: string | null | undefined): string
|
|
|
60
61
|
return parseLinuxProcIdentity(stat)?.ttyDevice ?? null;
|
|
61
62
|
}
|
|
62
63
|
|
|
64
|
+
/** Parse field 3 (single-letter process state) from a `/proc/<pid>/stat` record. */
|
|
65
|
+
export function parseLinuxProcState(stat: string | null | undefined): string | null {
|
|
66
|
+
return parseLinuxProcIdentity(stat)?.state ?? null;
|
|
67
|
+
}
|
|
68
|
+
|
|
63
69
|
export function probeLinuxProcPidSync(pid: number): LinuxProcPidProbeResult {
|
|
64
70
|
if (!Number.isSafeInteger(pid) || pid <= 0) return { kind: "unverifiable", reason: "invalid_pid" };
|
|
65
71
|
if (process.platform !== "linux") return { kind: "unverifiable", reason: "unsupported_platform" };
|
|
@@ -2,7 +2,7 @@ import { createHash, randomBytes } from "node:crypto";
|
|
|
2
2
|
import type { Dirent } from "node:fs";
|
|
3
3
|
import * as fs from "node:fs/promises";
|
|
4
4
|
import * as path from "node:path";
|
|
5
|
-
import {
|
|
5
|
+
import { isSettingsInitialized, Settings } from "../config/settings";
|
|
6
6
|
import { syncSkillActiveState } from "../skill-state/active-state";
|
|
7
7
|
import { buildRalplanHudSummary } from "../skill-state/workflow-hud";
|
|
8
8
|
import { WORKFLOW_STATE_VERSION } from "../skill-state/workflow-state-contract";
|
|
@@ -43,6 +43,12 @@ import {
|
|
|
43
43
|
import { probeGjcTeamAvailability } from "./team-runtime";
|
|
44
44
|
import { assertSafePathComponent, CommandError, flagValue, hasFlag } from "./workflow-cli-common";
|
|
45
45
|
import { getSkillManifest } from "./workflow-manifest";
|
|
46
|
+
import {
|
|
47
|
+
resolveWorkflowSetting,
|
|
48
|
+
WorkflowSettingError,
|
|
49
|
+
type WorkflowSettingKey,
|
|
50
|
+
type WorkflowSettingParseResult,
|
|
51
|
+
} from "./workflow-settings";
|
|
46
52
|
/**
|
|
47
53
|
* Native implementation of `gjc ralplan`.
|
|
48
54
|
*
|
|
@@ -387,38 +393,69 @@ function parseMaxIterationsValue(value: unknown): number | null {
|
|
|
387
393
|
return parseBoundedPositiveInteger(value, RALPLAN_MAX_ITERATIONS_LIMIT);
|
|
388
394
|
}
|
|
389
395
|
|
|
390
|
-
|
|
396
|
+
/** Adapt a nullable parser to the shared resolver's parse-result shape. */
|
|
397
|
+
function workflowSettingParse<T>(
|
|
398
|
+
parse: (value: unknown) => T | null,
|
|
399
|
+
reason: string,
|
|
400
|
+
): (value: unknown) => WorkflowSettingParseResult<T> {
|
|
401
|
+
return value => {
|
|
402
|
+
const parsed = parse(value);
|
|
403
|
+
return parsed === null ? { kind: "invalid", reason } : { kind: "valid", value: parsed };
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Resolve a strict ralplan setting through the shared five-layer resolver.
|
|
409
|
+
* Malformed/invalid explicit sources in any layer/format fail closed (exit 2)
|
|
410
|
+
* and never fall through to a lower layer or the built-in default.
|
|
411
|
+
*/
|
|
412
|
+
async function resolveStrictRalplanSetting<T>(
|
|
413
|
+
cwd: string,
|
|
414
|
+
key: WorkflowSettingKey,
|
|
415
|
+
parse: (value: unknown) => WorkflowSettingParseResult<T>,
|
|
416
|
+
defaultValue: T,
|
|
417
|
+
agentDir?: string,
|
|
418
|
+
): Promise<{ value: T; source: string }> {
|
|
391
419
|
try {
|
|
392
|
-
const
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
420
|
+
const resolution = await resolveWorkflowSetting(cwd, key, {
|
|
421
|
+
defaultValue,
|
|
422
|
+
parse,
|
|
423
|
+
invalidPolicy: "throw",
|
|
424
|
+
// The session's effective agent profile: an SDK session created with
|
|
425
|
+
// `createAgentSession({ agentDir })` resolves against that directory
|
|
426
|
+
// instead of the process-global default.
|
|
427
|
+
agentDir: agentDir ?? (isSettingsInitialized() ? Settings.instance.getAgentDir() : undefined),
|
|
428
|
+
});
|
|
429
|
+
return { value: resolution.value, source: resolution.source };
|
|
430
|
+
} catch (error) {
|
|
431
|
+
if (error instanceof WorkflowSettingError) {
|
|
432
|
+
throw new RalplanCommandError(2, `invalid ralplan settings at ${error.path}: ${error.reason}`);
|
|
402
433
|
}
|
|
403
|
-
|
|
404
|
-
} catch {
|
|
405
|
-
return null;
|
|
434
|
+
throw error;
|
|
406
435
|
}
|
|
407
436
|
}
|
|
408
437
|
|
|
409
438
|
/**
|
|
410
|
-
* Resolve ralplan consensus iteration cap
|
|
411
|
-
*
|
|
439
|
+
* Resolve the ralplan consensus iteration cap through the shared resolver.
|
|
440
|
+
* Project `.gjc/config.yml` and `.gjc/settings.json` beat user layers.
|
|
412
441
|
*/
|
|
413
|
-
export async function resolveRalplanMaxIterations(
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
const
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
442
|
+
export async function resolveRalplanMaxIterations(
|
|
443
|
+
cwd: string,
|
|
444
|
+
agentDir?: string,
|
|
445
|
+
): Promise<{ maxIterations: number; source: string }> {
|
|
446
|
+
const { value, source } = await resolveStrictRalplanSetting(
|
|
447
|
+
cwd,
|
|
448
|
+
"gjc.ralplan.maxIterations",
|
|
449
|
+
workflowSettingParse(
|
|
450
|
+
parseMaxIterationsValue,
|
|
451
|
+
`expected gjc.ralplan.maxIterations to be an integer between 1 and ${RALPLAN_MAX_ITERATIONS_LIMIT}`,
|
|
452
|
+
),
|
|
453
|
+
RALPLAN_DEFAULT_MAX_ITERATIONS,
|
|
454
|
+
agentDir,
|
|
455
|
+
);
|
|
456
|
+
return { maxIterations: value, source };
|
|
421
457
|
}
|
|
458
|
+
|
|
422
459
|
function parseRalplanAutoHandoffTarget(value: unknown): RalplanAutoHandoffTarget | undefined {
|
|
423
460
|
return typeof value === "string" && RALPLAN_AUTO_HANDOFF_TARGETS.has(value as RalplanAutoHandoffTarget)
|
|
424
461
|
? (value as RalplanAutoHandoffTarget)
|
|
@@ -428,83 +465,29 @@ function parseRalplanAutoHandoffTarget(value: unknown): RalplanAutoHandoffTarget
|
|
|
428
465
|
type RalplanAutoHandoffOptions = {
|
|
429
466
|
planningStuck?: boolean;
|
|
430
467
|
teamAvailabilityProbe?: () => { available: true } | { available: false; reason: string };
|
|
468
|
+
/** The session's effective agent directory (see resolveWorkflowSetting). */
|
|
469
|
+
agentDir?: string;
|
|
431
470
|
};
|
|
432
471
|
|
|
433
|
-
|
|
434
|
-
| { kind: "absent" }
|
|
435
|
-
| { kind: "valid"; value: RalplanAutoHandoffTarget }
|
|
436
|
-
| { kind: "invalid"; reason: string };
|
|
437
|
-
|
|
438
|
-
function parsePresentRalplanAutoHandoff(value: unknown): RalplanAutoHandoffSetting {
|
|
472
|
+
function parsePresentRalplanAutoHandoff(value: unknown): WorkflowSettingParseResult<RalplanAutoHandoffTarget> {
|
|
439
473
|
const target = parseRalplanAutoHandoffTarget(value);
|
|
440
474
|
return target === undefined
|
|
441
|
-
? {
|
|
442
|
-
kind: "invalid",
|
|
443
|
-
reason: "expected gjc.ralplan.autoHandoff to be one of off, ultragoal, team",
|
|
444
|
-
}
|
|
475
|
+
? { kind: "invalid", reason: "expected gjc.ralplan.autoHandoff to be one of off, ultragoal, team" }
|
|
445
476
|
: { kind: "valid", value: target };
|
|
446
477
|
}
|
|
447
478
|
|
|
448
|
-
function parseRalplanAutoHandoffSettings(parsed: unknown): RalplanAutoHandoffSetting {
|
|
449
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return { kind: "absent" };
|
|
450
|
-
const settings = parsed as Record<string, unknown>;
|
|
451
|
-
if (Object.hasOwn(settings, "gjc.ralplan.autoHandoff")) {
|
|
452
|
-
return parsePresentRalplanAutoHandoff(settings["gjc.ralplan.autoHandoff"]);
|
|
453
|
-
}
|
|
454
|
-
const gjc = settings.gjc;
|
|
455
|
-
if (!gjc || typeof gjc !== "object" || Array.isArray(gjc)) return { kind: "absent" };
|
|
456
|
-
const ralplan = (gjc as Record<string, unknown>).ralplan;
|
|
457
|
-
if (!ralplan || typeof ralplan !== "object" || Array.isArray(ralplan)) return { kind: "absent" };
|
|
458
|
-
const ralplanSettings = ralplan as Record<string, unknown>;
|
|
459
|
-
if (!Object.hasOwn(ralplanSettings, "autoHandoff")) return { kind: "absent" };
|
|
460
|
-
return parsePresentRalplanAutoHandoff(ralplanSettings.autoHandoff);
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
async function readSettingsAutoHandoff(settingsPath: string): Promise<RalplanAutoHandoffSetting> {
|
|
464
|
-
let raw: string;
|
|
465
|
-
try {
|
|
466
|
-
raw = await Bun.file(settingsPath).text();
|
|
467
|
-
} catch (error) {
|
|
468
|
-
if (getErrorCode(error) === "ENOENT") return { kind: "absent" };
|
|
469
|
-
return {
|
|
470
|
-
kind: "invalid",
|
|
471
|
-
reason: `unable to read settings: ${error instanceof Error ? error.message : String(error)}`,
|
|
472
|
-
};
|
|
473
|
-
}
|
|
474
|
-
let parsed: unknown;
|
|
475
|
-
try {
|
|
476
|
-
parsed = JSON.parse(raw);
|
|
477
|
-
} catch (error) {
|
|
478
|
-
return {
|
|
479
|
-
kind: "invalid",
|
|
480
|
-
reason: `malformed JSON: ${error instanceof Error ? error.message : String(error)}`,
|
|
481
|
-
};
|
|
482
|
-
}
|
|
483
|
-
return parseRalplanAutoHandoffSettings(parsed);
|
|
484
|
-
}
|
|
485
|
-
|
|
486
479
|
export async function resolveRalplanAutoHandoff(
|
|
487
480
|
cwd: string,
|
|
488
481
|
options: RalplanAutoHandoffOptions = {},
|
|
489
482
|
): Promise<RalplanAutoHandoffResolution> {
|
|
490
|
-
const
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
return resolveRalplanAutoHandoffTarget(project.value, projectPath, options);
|
|
497
|
-
}
|
|
498
|
-
const userPath = path.join(getConfigRootDir(), "settings.json");
|
|
499
|
-
const user = await readSettingsAutoHandoff(userPath);
|
|
500
|
-
if (user.kind === "invalid") {
|
|
501
|
-
throw new RalplanCommandError(2, `invalid ralplan settings at ${userPath}: ${user.reason}`);
|
|
502
|
-
}
|
|
503
|
-
return resolveRalplanAutoHandoffTarget(
|
|
504
|
-
user.kind === "valid" ? user.value : "off",
|
|
505
|
-
user.kind === "valid" ? userPath : "default",
|
|
506
|
-
options,
|
|
483
|
+
const { value, source } = await resolveStrictRalplanSetting(
|
|
484
|
+
cwd,
|
|
485
|
+
"gjc.ralplan.autoHandoff",
|
|
486
|
+
parsePresentRalplanAutoHandoff,
|
|
487
|
+
"off",
|
|
488
|
+
options.agentDir,
|
|
507
489
|
);
|
|
490
|
+
return resolveRalplanAutoHandoffTarget(value, source, options);
|
|
508
491
|
}
|
|
509
492
|
|
|
510
493
|
function resolveRalplanAutoHandoffTarget(
|
|
@@ -533,78 +516,22 @@ function parseMaxReviewPassesPerLaneValue(value: unknown): number | null {
|
|
|
533
516
|
return parseBoundedPositiveInteger(value, RALPLAN_MAX_REVIEW_PASSES_PER_LANE_LIMIT);
|
|
534
517
|
}
|
|
535
518
|
|
|
536
|
-
|
|
537
|
-
| { kind: "absent" }
|
|
538
|
-
| { kind: "valid"; value: number }
|
|
539
|
-
| { kind: "invalid"; reason: string };
|
|
540
|
-
|
|
541
|
-
function parsePresentMaxReviewPassesPerLane(value: unknown): RalplanReviewPassesPerLaneSetting {
|
|
542
|
-
const parsed = parseMaxReviewPassesPerLaneValue(value);
|
|
543
|
-
return parsed === null
|
|
544
|
-
? {
|
|
545
|
-
kind: "invalid",
|
|
546
|
-
reason:
|
|
547
|
-
"expected gjc.ralplan.maxReviewPassesPerLane to be an integer between 1 and " +
|
|
548
|
-
RALPLAN_MAX_REVIEW_PASSES_PER_LANE_LIMIT,
|
|
549
|
-
}
|
|
550
|
-
: { kind: "valid", value: parsed };
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
function parseMaxReviewPassesPerLaneSettings(parsed: unknown): RalplanReviewPassesPerLaneSetting {
|
|
554
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return { kind: "absent" };
|
|
555
|
-
const settings = parsed as Record<string, unknown>;
|
|
556
|
-
if (Object.hasOwn(settings, "gjc.ralplan.maxReviewPassesPerLane")) {
|
|
557
|
-
return parsePresentMaxReviewPassesPerLane(settings["gjc.ralplan.maxReviewPassesPerLane"]);
|
|
558
|
-
}
|
|
559
|
-
const gjc = settings.gjc;
|
|
560
|
-
if (!gjc || typeof gjc !== "object" || Array.isArray(gjc)) return { kind: "absent" };
|
|
561
|
-
const ralplan = (gjc as Record<string, unknown>).ralplan;
|
|
562
|
-
if (!ralplan || typeof ralplan !== "object" || Array.isArray(ralplan)) return { kind: "absent" };
|
|
563
|
-
const ralplanSettings = ralplan as Record<string, unknown>;
|
|
564
|
-
if (!Object.hasOwn(ralplanSettings, "maxReviewPassesPerLane")) return { kind: "absent" };
|
|
565
|
-
return parsePresentMaxReviewPassesPerLane(ralplanSettings.maxReviewPassesPerLane);
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
async function readSettingsMaxReviewPassesPerLane(settingsPath: string): Promise<RalplanReviewPassesPerLaneSetting> {
|
|
569
|
-
let raw: string;
|
|
570
|
-
try {
|
|
571
|
-
raw = await Bun.file(settingsPath).text();
|
|
572
|
-
} catch (error) {
|
|
573
|
-
if (getErrorCode(error) === "ENOENT") return { kind: "absent" };
|
|
574
|
-
return {
|
|
575
|
-
kind: "invalid",
|
|
576
|
-
reason: `unable to read settings: ${error instanceof Error ? error.message : String(error)}`,
|
|
577
|
-
};
|
|
578
|
-
}
|
|
579
|
-
let parsed: unknown;
|
|
580
|
-
try {
|
|
581
|
-
parsed = JSON.parse(raw);
|
|
582
|
-
} catch (error) {
|
|
583
|
-
return {
|
|
584
|
-
kind: "invalid",
|
|
585
|
-
reason: `malformed JSON: ${error instanceof Error ? error.message : String(error)}`,
|
|
586
|
-
};
|
|
587
|
-
}
|
|
588
|
-
return parseMaxReviewPassesPerLaneSettings(parsed);
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
/** Resolve the per-lane review-pass budget with project-over-user precedence. */
|
|
519
|
+
/** Resolve the per-lane review-pass budget through the shared resolver. */
|
|
592
520
|
export async function resolveRalplanMaxReviewPassesPerLane(
|
|
593
521
|
cwd: string,
|
|
522
|
+
agentDir?: string,
|
|
594
523
|
): Promise<{ maxReviewPassesPerLane: number; source: string }> {
|
|
595
|
-
const
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
}
|
|
606
|
-
if (user.kind === "valid") return { maxReviewPassesPerLane: user.value, source: userPath };
|
|
607
|
-
return { maxReviewPassesPerLane: RALPLAN_DEFAULT_MAX_REVIEW_PASSES_PER_LANE, source: "default" };
|
|
524
|
+
const { value, source } = await resolveStrictRalplanSetting(
|
|
525
|
+
cwd,
|
|
526
|
+
"gjc.ralplan.maxReviewPassesPerLane",
|
|
527
|
+
workflowSettingParse(
|
|
528
|
+
parseMaxReviewPassesPerLaneValue,
|
|
529
|
+
`expected gjc.ralplan.maxReviewPassesPerLane to be an integer between 1 and ${RALPLAN_MAX_REVIEW_PASSES_PER_LANE_LIMIT}`,
|
|
530
|
+
),
|
|
531
|
+
RALPLAN_DEFAULT_MAX_REVIEW_PASSES_PER_LANE,
|
|
532
|
+
agentDir,
|
|
533
|
+
);
|
|
534
|
+
return { maxReviewPassesPerLane: value, source };
|
|
608
535
|
}
|
|
609
536
|
|
|
610
537
|
function buildPlanningStuckResult(input: {
|
|
@@ -1915,7 +1842,11 @@ function buildIndexedReviewArtifacts(indexText: string | undefined): Map<string,
|
|
|
1915
1842
|
return map;
|
|
1916
1843
|
}
|
|
1917
1844
|
|
|
1918
|
-
async function handleArtifactWrite(
|
|
1845
|
+
async function handleArtifactWrite(
|
|
1846
|
+
args: readonly string[],
|
|
1847
|
+
cwd: string,
|
|
1848
|
+
agentDir?: string,
|
|
1849
|
+
): Promise<RalplanCommandResult> {
|
|
1919
1850
|
const resolved = await resolveArtifactArgs(args, cwd);
|
|
1920
1851
|
const persistedRoleState = parsePersistedRoleStateArgs(args, resolved.stage);
|
|
1921
1852
|
const laneVerdict = parseLaneVerdictArgs(args, resolved.stage, resolved.stageN);
|
|
@@ -2019,8 +1950,8 @@ async function handleArtifactWrite(args: readonly string[], cwd: string): Promis
|
|
|
2019
1950
|
const [onDiskOpeners, onDiskLaneArtifacts, iterationLimit, laneLimit] = await Promise.all([
|
|
2020
1951
|
countRalplanOnDiskOpeners(cwd, resolved.sessionId, resolved.runId),
|
|
2021
1952
|
countRalplanOnDiskLaneArtifacts(cwd, resolved.sessionId, resolved.runId),
|
|
2022
|
-
resolveRalplanMaxIterations(cwd),
|
|
2023
|
-
resolveRalplanMaxReviewPassesPerLane(cwd),
|
|
1953
|
+
resolveRalplanMaxIterations(cwd, agentDir),
|
|
1954
|
+
resolveRalplanMaxReviewPassesPerLane(cwd, agentDir),
|
|
2024
1955
|
]);
|
|
2025
1956
|
const capDecision = evaluateRalplanIterationCap({
|
|
2026
1957
|
rows: indexLoad.rows,
|
|
@@ -2063,6 +1994,7 @@ async function handleArtifactWrite(args: readonly string[], cwd: string): Promis
|
|
|
2063
1994
|
// state write. The ledger row below is the durable receipt for deduplicated
|
|
2064
1995
|
// retries; state is only a current-session projection.
|
|
2065
1996
|
autoHandoff = await resolveRalplanAutoHandoff(cwd, {
|
|
1997
|
+
agentDir,
|
|
2066
1998
|
planningStuck: await readRalplanPlanningStuck(cwd, resolved.sessionId, resolved.runId),
|
|
2067
1999
|
});
|
|
2068
2000
|
}
|
|
@@ -2340,10 +2272,14 @@ async function handleDoctor(args: readonly string[], cwd: string): Promise<Ralpl
|
|
|
2340
2272
|
|
|
2341
2273
|
/* -------------------------------- entry --------------------------------- */
|
|
2342
2274
|
|
|
2343
|
-
export async function runNativeRalplanCommand(
|
|
2275
|
+
export async function runNativeRalplanCommand(
|
|
2276
|
+
args: string[],
|
|
2277
|
+
cwd = process.cwd(),
|
|
2278
|
+
options: { agentDir?: string } = {},
|
|
2279
|
+
): Promise<RalplanCommandResult> {
|
|
2344
2280
|
try {
|
|
2345
2281
|
if (isRalplanDoctorInvocation(args)) return await handleDoctor(args, cwd);
|
|
2346
|
-
if (isRalplanArtifactWriteInvocation(args)) return await handleArtifactWrite(args, cwd);
|
|
2282
|
+
if (isRalplanArtifactWriteInvocation(args)) return await handleArtifactWrite(args, cwd, options.agentDir);
|
|
2347
2283
|
return await handleConsensusHandoff(args, cwd);
|
|
2348
2284
|
} catch (error) {
|
|
2349
2285
|
if (error instanceof CommandError) return { status: error.exitStatus, stderr: `${error.message}\n` };
|