@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
|
@@ -102,11 +102,23 @@ export type GuardedWriteResult =
|
|
|
102
102
|
| { path: string; written: true; revision: number; stamped: unknown }
|
|
103
103
|
| { path: string; written: false; reason: "stale-skip"; revision: number };
|
|
104
104
|
|
|
105
|
+
export interface GuardedStateWriteReceipt {
|
|
106
|
+
path: string;
|
|
107
|
+
revision: number;
|
|
108
|
+
stamped: unknown;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function guardedStateWriteReceipt(result: GuardedWriteResult): GuardedStateWriteReceipt | undefined {
|
|
112
|
+
return result.written ? { path: result.path, revision: result.revision, stamped: result.stamped } : undefined;
|
|
113
|
+
}
|
|
114
|
+
|
|
105
115
|
export interface StateWriterOptions {
|
|
106
116
|
cwd?: string;
|
|
107
117
|
receipt?: StateWriterReceiptContext;
|
|
108
118
|
audit?: StateWriterAuditContext;
|
|
109
119
|
sourceRevision?: number;
|
|
120
|
+
/** Advance a cache source revision under the target lock when the value carries none. */
|
|
121
|
+
advanceSourceRevision?: boolean;
|
|
110
122
|
/**
|
|
111
123
|
* Cross-process lock tuning for read-modify-write paths that route through
|
|
112
124
|
* `withWorkflowStateLock` / `updateJsonAtomic`. Omit for the hardened
|
|
@@ -442,6 +454,12 @@ function stampStateRevision(value: unknown, stateRevision: number, sourceRevisio
|
|
|
442
454
|
state_revision: stateRevision,
|
|
443
455
|
};
|
|
444
456
|
}
|
|
457
|
+
export function matchesGuardedStateWriteReceipt(current: unknown, receipt: GuardedStateWriteReceipt): boolean {
|
|
458
|
+
return (
|
|
459
|
+
persistedStateRevision(current) === receipt.revision &&
|
|
460
|
+
JSON.stringify(current) === JSON.stringify(receipt.stamped)
|
|
461
|
+
);
|
|
462
|
+
}
|
|
445
463
|
|
|
446
464
|
function withWorkflowReceipt(value: unknown, receipt: WorkflowStateReceipt | undefined): unknown {
|
|
447
465
|
if (!receipt || !value || typeof value !== "object" || Array.isArray(value)) return value;
|
|
@@ -531,8 +549,10 @@ async function writeGuardedResolvedJsonAtomic(
|
|
|
531
549
|
return { path: filePath, written: true, revision: currentRevision + 1, stamped: next };
|
|
532
550
|
}
|
|
533
551
|
|
|
552
|
+
const valueSourceRevision = isPlainObject(value) ? persistedSourceRevision(value) : 0;
|
|
534
553
|
const incomingSourceRevision =
|
|
535
|
-
options.sourceRevision ??
|
|
554
|
+
options.sourceRevision ??
|
|
555
|
+
(valueSourceRevision || (options.advanceSourceRevision ? persistedSourceRevision(current) + 1 : 0));
|
|
536
556
|
if (current !== undefined && incomingSourceRevision <= persistedSourceRevision(current)) {
|
|
537
557
|
return { path: filePath, written: false, reason: "stale-skip", revision: currentRevision };
|
|
538
558
|
}
|
|
@@ -960,12 +980,18 @@ export async function deleteIfOwned(
|
|
|
960
980
|
const options = typeof predicateOrOptions === "function" ? undefined : predicateOrOptions;
|
|
961
981
|
const predicate = typeof predicateOrOptions === "function" ? predicateOrOptions : predicateOrOptions?.predicate;
|
|
962
982
|
const filePath = resolveGjcTarget(targetPath, cwdForOptions(options));
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
983
|
+
return lockResolvedWorkflowTarget(
|
|
984
|
+
filePath,
|
|
985
|
+
async () => {
|
|
986
|
+
const current = await readJsonIfPresent(filePath);
|
|
987
|
+
if (current === undefined) return { path: filePath, deleted: false };
|
|
988
|
+
if (predicate && !(await predicate(current))) return { path: filePath, deleted: false };
|
|
989
|
+
const deleted = await atomicRemove(filePath);
|
|
990
|
+
if (deleted) await maybeAudit(filePath, options);
|
|
991
|
+
return { path: filePath, deleted };
|
|
992
|
+
},
|
|
993
|
+
options?.lock,
|
|
994
|
+
);
|
|
969
995
|
}
|
|
970
996
|
|
|
971
997
|
export async function removeFileAudited(targetPath: string, options?: StateWriterOptions): Promise<DeleteResult> {
|
|
@@ -987,20 +1013,19 @@ export async function writeActiveEntry(
|
|
|
987
1013
|
skill: string,
|
|
988
1014
|
entry: SkillActiveEntry,
|
|
989
1015
|
options?: StateWriterOptions,
|
|
990
|
-
): Promise<
|
|
1016
|
+
): Promise<GuardedWriteResult> {
|
|
991
1017
|
const filePath = activeEntryPath(path.resolve(cwd), sessionScope, skill);
|
|
992
|
-
await writeGuardedResolvedJsonAtomic(
|
|
1018
|
+
const result = await writeGuardedResolvedJsonAtomic(
|
|
993
1019
|
filePath,
|
|
994
1020
|
{ ...entry, skill },
|
|
995
1021
|
{
|
|
996
1022
|
...options,
|
|
997
1023
|
policy: "cache",
|
|
998
|
-
|
|
999
|
-
persistedSourceRevision(entry) || persistedSourceRevision(await readJsonIfPresent(filePath)) + 1,
|
|
1024
|
+
advanceSourceRevision: true,
|
|
1000
1025
|
},
|
|
1001
1026
|
);
|
|
1002
1027
|
invalidateActiveStateCacheForScope(cwd, sessionScope);
|
|
1003
|
-
return
|
|
1028
|
+
return result;
|
|
1004
1029
|
}
|
|
1005
1030
|
|
|
1006
1031
|
export async function removeActiveEntry(
|
|
@@ -1082,9 +1107,9 @@ export async function mergeActiveState(
|
|
|
1082
1107
|
entry: SkillActiveEntry,
|
|
1083
1108
|
options?: StateWriterOptions,
|
|
1084
1109
|
): Promise<ActiveEntryWriteResult> {
|
|
1085
|
-
const
|
|
1110
|
+
const entryWrite = await writeActiveEntry(cwd, sessionScope, skill, entry, options);
|
|
1086
1111
|
const snapshotPath = await rebuildActiveSnapshot(cwd, sessionScope, options);
|
|
1087
|
-
return { entryPath, snapshotPath };
|
|
1112
|
+
return { entryPath: entryWrite.path, snapshotPath };
|
|
1088
1113
|
}
|
|
1089
1114
|
|
|
1090
1115
|
export async function writeArtifact(
|
|
@@ -1503,15 +1503,16 @@ const liveOwnerTerminalObservations = new Map<string, Promise<OwnerVerdict>>();
|
|
|
1503
1503
|
export async function observeOwnerTerminal(request: ObserveTerminalRequest): Promise<OwnerVerdict> {
|
|
1504
1504
|
if (!isObserveTerminalRequest(request)) throw new Error("terminal_observation_invalid");
|
|
1505
1505
|
const paths = lifecyclePaths(request.state_dir, request.session_id, request.owner_generation);
|
|
1506
|
-
const
|
|
1506
|
+
const observationKey = JSON.stringify([paths.verdictFile, request.socket_key]);
|
|
1507
|
+
const existing = liveOwnerTerminalObservations.get(observationKey);
|
|
1507
1508
|
if (existing) return existing;
|
|
1508
1509
|
const observation = observeOwnerTerminalExclusive(request);
|
|
1509
|
-
liveOwnerTerminalObservations.set(
|
|
1510
|
+
liveOwnerTerminalObservations.set(observationKey, observation);
|
|
1510
1511
|
try {
|
|
1511
1512
|
return await observation;
|
|
1512
1513
|
} finally {
|
|
1513
|
-
if (liveOwnerTerminalObservations.get(
|
|
1514
|
-
liveOwnerTerminalObservations.delete(
|
|
1514
|
+
if (liveOwnerTerminalObservations.get(observationKey) === observation)
|
|
1515
|
+
liveOwnerTerminalObservations.delete(observationKey);
|
|
1515
1516
|
}
|
|
1516
1517
|
}
|
|
1517
1518
|
|
|
@@ -816,6 +816,8 @@ async function consumeUltragoalNudge(input: {
|
|
|
816
816
|
surface: UltragoalNudgeSurface;
|
|
817
817
|
currentGoal?: CurrentGoalLike | null;
|
|
818
818
|
sessionId?: string | null;
|
|
819
|
+
/** The session's effective agent directory (see resolveWorkflowSetting). */
|
|
820
|
+
agentDir?: string;
|
|
819
821
|
}): Promise<{ nudged: true; message: string } | { nudged: false }> {
|
|
820
822
|
const sessionId = input.sessionId?.trim() || (await ultragoalReadPaths(input.cwd)).sessionId;
|
|
821
823
|
if (!sessionId) return { nudged: false };
|
|
@@ -823,7 +825,7 @@ async function consumeUltragoalNudge(input: {
|
|
|
823
825
|
if (!plan) return { nudged: false };
|
|
824
826
|
const target = selectUltragoalNudgeTarget(plan, { currentGoalObjective: input.currentGoal?.objective });
|
|
825
827
|
if (!target) return { nudged: false };
|
|
826
|
-
const { budget } = await resolveUltragoalNudgeBudget(input.cwd);
|
|
828
|
+
const { budget } = await resolveUltragoalNudgeBudget(input.cwd, input.agentDir);
|
|
827
829
|
const outcome = await recordUltragoalNudgeIfBudgetRemaining({
|
|
828
830
|
cwd: input.cwd,
|
|
829
831
|
sessionId,
|
|
@@ -855,15 +857,17 @@ async function consumeUltragoalNudge(input: {
|
|
|
855
857
|
export async function consumeUltragoalAskNudge(
|
|
856
858
|
cwd: string,
|
|
857
859
|
sessionId?: string | null,
|
|
860
|
+
agentDir?: string,
|
|
858
861
|
): Promise<{ nudged: true; message: string } | { nudged: false }> {
|
|
859
862
|
if (!cwd) return { nudged: false };
|
|
860
|
-
return consumeUltragoalNudge({ cwd, surface: "ask", sessionId });
|
|
863
|
+
return consumeUltragoalNudge({ cwd, surface: "ask", sessionId, agentDir });
|
|
861
864
|
}
|
|
862
865
|
|
|
863
866
|
export async function assertCanCompleteCurrentGoal(input: {
|
|
864
867
|
cwd: string;
|
|
865
868
|
currentGoal?: CurrentGoalLike | null;
|
|
866
869
|
sessionId?: string | null;
|
|
870
|
+
agentDir?: string;
|
|
867
871
|
}): Promise<void> {
|
|
868
872
|
if (!input.cwd) return;
|
|
869
873
|
const diagnostic = await verifyUltragoalDurableCompletionState(input);
|
|
@@ -871,6 +875,7 @@ export async function assertCanCompleteCurrentGoal(input: {
|
|
|
871
875
|
const nudge = await consumeUltragoalNudge({
|
|
872
876
|
cwd: input.cwd,
|
|
873
877
|
surface: "premature_complete",
|
|
878
|
+
agentDir: input.agentDir,
|
|
874
879
|
currentGoal: input.currentGoal,
|
|
875
880
|
sessionId: input.sessionId,
|
|
876
881
|
});
|
|
@@ -969,9 +974,9 @@ export async function isUltragoalPauseBlocked(cwd: string): Promise<UltragoalPau
|
|
|
969
974
|
};
|
|
970
975
|
}
|
|
971
976
|
|
|
972
|
-
export async function assertUltragoalPauseAllowed(cwd: string): Promise<void> {
|
|
977
|
+
export async function assertUltragoalPauseAllowed(cwd: string, agentDir?: string): Promise<void> {
|
|
973
978
|
if (cwd) {
|
|
974
|
-
const nudge = await consumeUltragoalNudge({ cwd, surface: "pause" });
|
|
979
|
+
const nudge = await consumeUltragoalNudge({ cwd, surface: "pause", agentDir });
|
|
975
980
|
if (nudge.nudged) throw new Error(nudge.message);
|
|
976
981
|
}
|
|
977
982
|
const diagnostic = await isUltragoalPauseBlocked(cwd);
|
|
@@ -996,6 +1001,7 @@ export async function assertUltragoalDropAllowed(input: {
|
|
|
996
1001
|
cwd: string;
|
|
997
1002
|
currentGoal?: CurrentGoalLike | null;
|
|
998
1003
|
sessionId?: string | null;
|
|
1004
|
+
agentDir?: string;
|
|
999
1005
|
}): Promise<void> {
|
|
1000
1006
|
if (!input.cwd) return;
|
|
1001
1007
|
let paths: UltragoalPaths;
|
|
@@ -1041,6 +1047,7 @@ export async function assertUltragoalDropAllowed(input: {
|
|
|
1041
1047
|
const nudge = await consumeUltragoalNudge({
|
|
1042
1048
|
cwd: input.cwd,
|
|
1043
1049
|
surface: "drop",
|
|
1050
|
+
agentDir: input.agentDir,
|
|
1044
1051
|
currentGoal: input.currentGoal,
|
|
1045
1052
|
sessionId,
|
|
1046
1053
|
});
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as crypto from "node:crypto";
|
|
2
2
|
import * as fs from "node:fs/promises";
|
|
3
3
|
import * as path from "node:path";
|
|
4
|
-
import { getConfigRootDir } from "@gajae-code/utils";
|
|
5
4
|
import type { WorkflowHudSummary } from "../skill-state/active-state";
|
|
6
5
|
import { buildUltragoalHudSummary as buildWorkflowUltragoalHudSummary } from "../skill-state/workflow-hud";
|
|
7
6
|
import { renderCliWriteReceipt } from "./cli-write-receipt";
|
|
@@ -46,6 +45,7 @@ export {
|
|
|
46
45
|
terminalCriticGateOverridden,
|
|
47
46
|
} from "./ultragoal-receipt-freshness";
|
|
48
47
|
|
|
48
|
+
import { isSettingsInitialized, Settings } from "../config/settings";
|
|
49
49
|
import { gjcRoot, sessionUltragoalDir } from "./session-layout";
|
|
50
50
|
import {
|
|
51
51
|
resolveGjcSessionForRead,
|
|
@@ -62,6 +62,7 @@ import {
|
|
|
62
62
|
writeArtifact,
|
|
63
63
|
writeGuardedJsonAtomic,
|
|
64
64
|
} from "./state-writer";
|
|
65
|
+
import { resolveWorkflowSetting } from "./workflow-settings";
|
|
65
66
|
|
|
66
67
|
export {
|
|
67
68
|
captureUltragoalRecoverySnapshot,
|
|
@@ -387,39 +388,29 @@ function parseNudgeBudgetValue(value: unknown): number | null {
|
|
|
387
388
|
return typeof value === "number" && Number.isFinite(value) && Number.isInteger(value) && value >= 0 ? value : null;
|
|
388
389
|
}
|
|
389
390
|
|
|
390
|
-
async function readSettingsNudgeBudget(settingsPath: string): Promise<number | null> {
|
|
391
|
-
try {
|
|
392
|
-
const raw = await Bun.file(settingsPath).text();
|
|
393
|
-
const parsed = JSON.parse(raw) as Record<string, unknown>;
|
|
394
|
-
// Support both the flat dotted key and a nested gjc.ultragoal.nudgeBudget shape.
|
|
395
|
-
const flat = parseNudgeBudgetValue(parsed["gjc.ultragoal.nudgeBudget"]);
|
|
396
|
-
if (flat !== null) return flat;
|
|
397
|
-
const gjc = parsed.gjc;
|
|
398
|
-
if (gjc && typeof gjc === "object") {
|
|
399
|
-
const ultragoal = (gjc as Record<string, unknown>).ultragoal;
|
|
400
|
-
if (ultragoal && typeof ultragoal === "object") {
|
|
401
|
-
return parseNudgeBudgetValue((ultragoal as Record<string, unknown>).nudgeBudget);
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
return null;
|
|
405
|
-
} catch {
|
|
406
|
-
return null;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
|
|
410
391
|
/**
|
|
411
|
-
* Resolve the per-story nudge budget
|
|
412
|
-
*
|
|
413
|
-
*
|
|
392
|
+
* Resolve the per-story nudge budget through the shared five-layer resolver.
|
|
393
|
+
* Ultragoal stays tolerant: an invalid optional settings file continues to the
|
|
394
|
+
* next layer and finally to the built-in default (10).
|
|
414
395
|
*/
|
|
415
|
-
export async function resolveUltragoalNudgeBudget(
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
const
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
396
|
+
export async function resolveUltragoalNudgeBudget(
|
|
397
|
+
cwd: string,
|
|
398
|
+
agentDir?: string,
|
|
399
|
+
): Promise<{ budget: number; source: string }> {
|
|
400
|
+
const resolution = await resolveWorkflowSetting(cwd, "gjc.ultragoal.nudgeBudget", {
|
|
401
|
+
defaultValue: DEFAULT_ULTRAGOAL_NUDGE_BUDGET,
|
|
402
|
+
parse: value => {
|
|
403
|
+
const parsed = parseNudgeBudgetValue(value);
|
|
404
|
+
return parsed === null
|
|
405
|
+
? { kind: "invalid", reason: "expected gjc.ultragoal.nudgeBudget to be a non-negative integer" }
|
|
406
|
+
: { kind: "valid", value: parsed };
|
|
407
|
+
},
|
|
408
|
+
// The session's effective agent profile: an SDK session created with
|
|
409
|
+
// `createAgentSession({ agentDir })` resolves against that directory
|
|
410
|
+
// instead of the process-global default.
|
|
411
|
+
agentDir: agentDir ?? (isSettingsInitialized() ? Settings.instance.getAgentDir() : undefined),
|
|
412
|
+
});
|
|
413
|
+
return { budget: resolution.value, source: resolution.source };
|
|
423
414
|
}
|
|
424
415
|
|
|
425
416
|
/**
|
|
@@ -1024,7 +1015,11 @@ function emptyCounts(): Record<UltragoalGoalStatus, number> {
|
|
|
1024
1015
|
};
|
|
1025
1016
|
}
|
|
1026
1017
|
|
|
1027
|
-
export async function getUltragoalStatus(
|
|
1018
|
+
export async function getUltragoalStatus(
|
|
1019
|
+
cwd: string,
|
|
1020
|
+
sessionId?: string | null,
|
|
1021
|
+
agentDir?: string,
|
|
1022
|
+
): Promise<UltragoalStatusSummary> {
|
|
1028
1023
|
const resolvedSessionId =
|
|
1029
1024
|
sessionId?.trim() ||
|
|
1030
1025
|
(await resolveGjcSessionForRead(cwd, { envSessionId: process.env.GJC_SESSION_ID })).gjcSessionId;
|
|
@@ -1043,7 +1038,7 @@ export async function getUltragoalStatus(cwd: string, sessionId?: string | null)
|
|
|
1043
1038
|
const nudgeTarget = selectUltragoalNudgeTarget(plan, { currentGoalObjective: currentGoal?.objective });
|
|
1044
1039
|
let nudgeFields: Partial<UltragoalStatusSummary> = {};
|
|
1045
1040
|
if (nudgeTarget) {
|
|
1046
|
-
const { budget } = await resolveUltragoalNudgeBudget(cwd);
|
|
1041
|
+
const { budget } = await resolveUltragoalNudgeBudget(cwd, agentDir);
|
|
1047
1042
|
const ledger = await readUltragoalLedger(cwd, resolvedSessionId);
|
|
1048
1043
|
const nudgeCount = countUltragoalNudges(ledger, nudgeTarget.goalId);
|
|
1049
1044
|
nudgeFields = {
|
|
@@ -5072,7 +5067,11 @@ async function executeUltragoalSteeringCommand(args: readonly string[], cwd: str
|
|
|
5072
5067
|
}
|
|
5073
5068
|
}
|
|
5074
5069
|
|
|
5075
|
-
async function dispatchUltragoalCommand(
|
|
5070
|
+
async function dispatchUltragoalCommand(
|
|
5071
|
+
args: string[],
|
|
5072
|
+
cwd: string,
|
|
5073
|
+
agentDir?: string,
|
|
5074
|
+
): Promise<UltragoalCommandResult> {
|
|
5076
5075
|
// Help must not require a resolvable session; render it before session resolution.
|
|
5077
5076
|
const help = renderUltragoalHelp(args);
|
|
5078
5077
|
if (help) return { status: 0, stdout: help };
|
|
@@ -5090,7 +5089,7 @@ async function dispatchUltragoalCommand(args: string[], cwd: string): Promise<Ul
|
|
|
5090
5089
|
const json = hasFlag(args, "--json");
|
|
5091
5090
|
switch (command) {
|
|
5092
5091
|
case "status":
|
|
5093
|
-
return { status: 0, stdout: renderStatus(await getUltragoalStatus(cwd, sessionId), json) };
|
|
5092
|
+
return { status: 0, stdout: renderStatus(await getUltragoalStatus(cwd, sessionId, agentDir), json) };
|
|
5094
5093
|
case "create":
|
|
5095
5094
|
case "create-goals": {
|
|
5096
5095
|
const mode = flagValue(args, "--gjc-goal-mode") === "per-story" ? "per-story" : "aggregate";
|
|
@@ -5321,10 +5320,10 @@ const RECONCILE_COMMANDS = new Set([
|
|
|
5321
5320
|
* therefore a read PLUS a derived repair; it never mutates goals.json/ledger.jsonl
|
|
5322
5321
|
* beyond that reconcile-failure audit event.
|
|
5323
5322
|
*/
|
|
5324
|
-
async function reconcileUltragoalState(cwd: string): Promise<void> {
|
|
5323
|
+
async function reconcileUltragoalState(cwd: string, agentDir?: string): Promise<void> {
|
|
5325
5324
|
const sessionId = currentUltragoalSessionId(cwd);
|
|
5326
5325
|
try {
|
|
5327
|
-
const summary = await getUltragoalStatus(cwd, sessionId);
|
|
5326
|
+
const summary = await getUltragoalStatus(cwd, sessionId, agentDir);
|
|
5328
5327
|
const status = summary.status;
|
|
5329
5328
|
const active = summary.exists && status !== "complete";
|
|
5330
5329
|
const payload: Record<string, unknown> = {
|
|
@@ -5397,12 +5396,16 @@ async function reconcileUltragoalState(cwd: string): Promise<void> {
|
|
|
5397
5396
|
}
|
|
5398
5397
|
}
|
|
5399
5398
|
|
|
5400
|
-
export async function runNativeUltragoalCommand(
|
|
5399
|
+
export async function runNativeUltragoalCommand(
|
|
5400
|
+
args: string[],
|
|
5401
|
+
cwd = process.cwd(),
|
|
5402
|
+
options: { agentDir?: string } = {},
|
|
5403
|
+
): Promise<UltragoalCommandResult> {
|
|
5401
5404
|
const command = commandName(args);
|
|
5402
|
-
const result = await dispatchUltragoalCommand(args, cwd);
|
|
5405
|
+
const result = await dispatchUltragoalCommand(args, cwd, options.agentDir);
|
|
5403
5406
|
const isHelp = args.some(isHelpArg) || args[0] === "help";
|
|
5404
5407
|
if (!isHelp && result.status === 0 && RECONCILE_COMMANDS.has(command)) {
|
|
5405
|
-
await reconcileUltragoalState(cwd);
|
|
5408
|
+
await reconcileUltragoalState(cwd, options.agentDir);
|
|
5406
5409
|
}
|
|
5407
5410
|
return result;
|
|
5408
5411
|
}
|