@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
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { CodexImportError } from "./codex";
|
|
2
|
+
export type SessionImportErrorCode = CodexImportError["code"] | "invalid_request" | "binding_invalid" | "content_too_large" | "destination_conflict" | "publish_uncertain" | "atomic_unavailable" | "durability_not_provable" | "durability_failed" | "identity_mismatch" | "validation_failed" | "io_failed" | "internal_failed";
|
|
3
|
+
export interface SessionImportFailure {
|
|
4
|
+
status: "failed";
|
|
5
|
+
provider: "codex";
|
|
6
|
+
sourceSessionId?: string;
|
|
7
|
+
code: SessionImportErrorCode;
|
|
8
|
+
phase: string;
|
|
9
|
+
retryable: boolean;
|
|
10
|
+
message: string;
|
|
11
|
+
limitBytes?: number;
|
|
12
|
+
observedBytes?: number;
|
|
13
|
+
causeCode?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface SessionImportSuccess {
|
|
16
|
+
status: "imported" | "existing";
|
|
17
|
+
provider: "codex";
|
|
18
|
+
sourceSessionId: string;
|
|
19
|
+
targetSessionId: string;
|
|
20
|
+
targetPath: string;
|
|
21
|
+
sourceBytes: number;
|
|
22
|
+
transcriptBytes: number;
|
|
23
|
+
mappedEvents: number;
|
|
24
|
+
quarantinedEvents: number;
|
|
25
|
+
droppedEvents: number;
|
|
26
|
+
quarantineTruncated: boolean;
|
|
27
|
+
redactedValues: number;
|
|
28
|
+
}
|
|
29
|
+
export type SessionImportResult = SessionImportSuccess | SessionImportFailure;
|
|
30
|
+
export interface SessionImportBatchResult {
|
|
31
|
+
provider: "codex";
|
|
32
|
+
status: "success" | "partial" | "failed" | "existing";
|
|
33
|
+
results: SessionImportResult[];
|
|
34
|
+
}
|
|
35
|
+
export declare function importCodexSessions(cwd: string, requestedIds: readonly string[]): Promise<SessionImportBatchResult>;
|
|
36
|
+
export declare function formatSessionImportBatch(result: SessionImportBatchResult): string;
|
|
37
|
+
/**
|
|
38
|
+
* Provider-neutral session import service (issue #3709).
|
|
39
|
+
*
|
|
40
|
+
* Pipeline: bounded read-only source load → format detection → provider adapter
|
|
41
|
+
* → normalization + fail-closed redaction → head/tail bounding → persistence
|
|
42
|
+
* into a NEW GJC session through the public SessionManager API.
|
|
43
|
+
*
|
|
44
|
+
* The source file is never written, moved, or enumerated. The live session is
|
|
45
|
+
* never touched by this module; callers switch sessions explicitly after a
|
|
46
|
+
* successful materialization.
|
|
47
|
+
*/
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-neutral session-import contract (issue #3709).
|
|
3
|
+
*
|
|
4
|
+
* An import accepts ONE explicit user-selected Codex or Claude transcript/export
|
|
5
|
+
* file, normalizes it into the intermediate representation below, and rebuilds a
|
|
6
|
+
* bounded, redacted continuation context inside a NEW GJC session. The source
|
|
7
|
+
* file is only ever read; provider process state is never scraped.
|
|
8
|
+
*/
|
|
9
|
+
/** Providers with a first-party observable transcript/export format. */
|
|
10
|
+
export type SessionImportProviderId = "codex" | "claude";
|
|
11
|
+
/** Concrete on-disk format variants the adapters understand. */
|
|
12
|
+
export type SessionImportFormatId = "codex-rollout-jsonl" | "claude-code-jsonl" | "claude-export-json";
|
|
13
|
+
/** One normalized conversational unit produced by a provider adapter. */
|
|
14
|
+
export interface ImportedMessage {
|
|
15
|
+
/** Conversational role. Tool evidence is attached to assistant turns. */
|
|
16
|
+
role: "user" | "assistant";
|
|
17
|
+
/** Visible text (may be empty when only tool evidence exists). */
|
|
18
|
+
text: string;
|
|
19
|
+
/** ISO-8601 source timestamp when the record carried one. */
|
|
20
|
+
timestamp?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Bounded, already redacted tool/file evidence lines (e.g. `$ ls` → `ok`).
|
|
23
|
+
* Rendered inline after the text so completed work stays visible.
|
|
24
|
+
*/
|
|
25
|
+
toolEvidence?: string[];
|
|
26
|
+
}
|
|
27
|
+
/** Provider-neutral normalized conversation. */
|
|
28
|
+
export interface ImportedConversation {
|
|
29
|
+
provider: SessionImportProviderId;
|
|
30
|
+
format: SessionImportFormatId;
|
|
31
|
+
/** Source-side session/conversation identifier when the format carries one. */
|
|
32
|
+
sourceSessionId?: string;
|
|
33
|
+
/** Source title when the format carries one. */
|
|
34
|
+
title?: string;
|
|
35
|
+
/** Source workspace cwd when the format carries one. */
|
|
36
|
+
cwd?: string;
|
|
37
|
+
messages: ImportedMessage[];
|
|
38
|
+
}
|
|
39
|
+
/** Deterministic, actionable import failure codes. */
|
|
40
|
+
export type SessionImportErrorCode = "invalid_request" | "source_not_found" | "source_unreadable" | "source_changed" | "unsupported_format" | "format_mismatch" | "malformed_input" | "content_too_large" | "destination_conflict" | "io_failed";
|
|
41
|
+
/** Import pipeline phase a failure belongs to. */
|
|
42
|
+
export type SessionImportPhase = "request" | "read" | "detect" | "parse" | "normalize" | "persist" | "switch";
|
|
43
|
+
export declare class SessionImportError extends Error {
|
|
44
|
+
readonly code: SessionImportErrorCode;
|
|
45
|
+
readonly phase: SessionImportPhase;
|
|
46
|
+
readonly retryable: boolean;
|
|
47
|
+
readonly limitBytes?: number;
|
|
48
|
+
readonly observedBytes?: number;
|
|
49
|
+
constructor(code: SessionImportErrorCode, phase: SessionImportPhase, message: string, options?: {
|
|
50
|
+
retryable?: boolean;
|
|
51
|
+
limitBytes?: number;
|
|
52
|
+
observedBytes?: number;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/** One record the adapter could not map. Never carries raw content. */
|
|
56
|
+
export interface ImportQuarantineRecord {
|
|
57
|
+
/** 1-based record/line number in the source. */
|
|
58
|
+
record: number;
|
|
59
|
+
byteLength: number;
|
|
60
|
+
sha256: string;
|
|
61
|
+
reason: "invalid_json" | "unknown_record" | "missing_fields" | "oversized_record";
|
|
62
|
+
}
|
|
63
|
+
/** Bounded tallies reported to the user and persisted in provenance. */
|
|
64
|
+
export interface SessionImportCounts {
|
|
65
|
+
/** Records successfully mapped into the normalized conversation. */
|
|
66
|
+
mapped: number;
|
|
67
|
+
/** Records quarantined (never silently dropped). */
|
|
68
|
+
quarantined: number;
|
|
69
|
+
/** Secret/credential redactions applied to imported text. */
|
|
70
|
+
redacted: number;
|
|
71
|
+
/** Messages omitted from the rendered context by head/tail bounding. */
|
|
72
|
+
omitted: number;
|
|
73
|
+
}
|
|
74
|
+
/** Provenance persisted as a `custom` session entry on the import target. */
|
|
75
|
+
export interface SessionImportProvenance {
|
|
76
|
+
schemaVersion: 1;
|
|
77
|
+
customType: "session-import";
|
|
78
|
+
provider: SessionImportProviderId;
|
|
79
|
+
format: SessionImportFormatId;
|
|
80
|
+
/** Basename of the explicit user-selected source file (never a full path). */
|
|
81
|
+
sourceFileName: string;
|
|
82
|
+
sourceSessionId?: string;
|
|
83
|
+
sourceTitle?: string;
|
|
84
|
+
/** SHA-256 over the exact source bytes that were imported. */
|
|
85
|
+
sourceSha256: string;
|
|
86
|
+
sourceBytes: number;
|
|
87
|
+
/** RFC 4122 UUID of the GJC session that received the import. */
|
|
88
|
+
targetSessionId: string;
|
|
89
|
+
importedAt: string;
|
|
90
|
+
converterVersion: number;
|
|
91
|
+
sanitizerVersion: number;
|
|
92
|
+
counts: SessionImportCounts;
|
|
93
|
+
/** True when head/tail bounding elided part of the conversation. */
|
|
94
|
+
truncated: boolean;
|
|
95
|
+
quarantine: {
|
|
96
|
+
present: boolean;
|
|
97
|
+
truncated: boolean;
|
|
98
|
+
records: ImportQuarantineRecord[];
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/** Fully prepared import: parsed, normalized, redacted, bounded. No session state mutated yet. */
|
|
102
|
+
export interface PreparedSessionImport {
|
|
103
|
+
conversation: ImportedConversation;
|
|
104
|
+
/** Rendered continuation context for the `custom_message` entry. */
|
|
105
|
+
contextText: string;
|
|
106
|
+
provenance: Omit<SessionImportProvenance, "targetSessionId" | "importedAt">;
|
|
107
|
+
counts: SessionImportCounts;
|
|
108
|
+
/** Distinct redaction pattern ids that fired (for the user-facing summary). */
|
|
109
|
+
redactionKinds: string[];
|
|
110
|
+
sourcePath: string;
|
|
111
|
+
sourceSha256: string;
|
|
112
|
+
sourceBytes: number;
|
|
113
|
+
}
|
|
114
|
+
/** Result of a completed import into a freshly created session file. */
|
|
115
|
+
export interface SessionImportCompleted {
|
|
116
|
+
targetSessionId: string;
|
|
117
|
+
targetPath: string;
|
|
118
|
+
title: string;
|
|
119
|
+
prepared: PreparedSessionImport;
|
|
120
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SetupCheckResult } from "./result-types";
|
|
2
|
+
import { type PaseoSetupDependencies } from "./setup-deps";
|
|
3
|
+
export declare const STALE_GUIDANCE = "Paseo has not picked up the new provider entry yet. Paseo does not reload config.json automatically; restart the Paseo daemon yourself when convenient (GJC will not restart it for you).";
|
|
4
|
+
export interface CheckOptions {
|
|
5
|
+
readonly mpreset?: string;
|
|
6
|
+
readonly force?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Diagnose the installation.
|
|
10
|
+
*
|
|
11
|
+
* Precedence is total and the predicates are disjoint by construction:
|
|
12
|
+
* drift absorbs every non-clean L1 condition, and the remaining three states
|
|
13
|
+
* partition the L2 outcome space (reachable-with-entry / reachable-without-entry
|
|
14
|
+
* / unreachable).
|
|
15
|
+
*/
|
|
16
|
+
export declare function checkPaseoSetup(deps: PaseoSetupDependencies, options?: CheckOptions): Promise<SetupCheckResult>;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Four-step install saga with reverse-order compensation.
|
|
3
|
+
*
|
|
4
|
+
* GJC writes to four files it does not own, across two applications, with no
|
|
5
|
+
* distributed lock available. Nothing here can be made atomic across files, so
|
|
6
|
+
* the design is instead: refuse early, record enough to recover, and undo in
|
|
7
|
+
* reverse on failure.
|
|
8
|
+
*
|
|
9
|
+
* Forward order is fixed:
|
|
10
|
+
* 1. `~/.paseo/config.json` provider entry + provider-key provenance
|
|
11
|
+
* 2. `~/.paseo/orchestration-preferences.json` seeded roles + seeded-key provenance
|
|
12
|
+
* 3. `<agentDir>/paseo-skills/` symlink bridge
|
|
13
|
+
* 4. `~/.gjc/agent/config.yml` `skills.customDirectories` append
|
|
14
|
+
*
|
|
15
|
+
* Steps 1 and 2 each mutate a Paseo file AND the GJC provenance ledger. Those
|
|
16
|
+
* are separate files, so a durable intent record is written BEFORE either one,
|
|
17
|
+
* carrying preflight and expected-post identities for BOTH. Recovery classifies
|
|
18
|
+
* each file independently and refuses whenever the ledger diverged.
|
|
19
|
+
*/
|
|
20
|
+
import type { CasReceipt } from "../../config/atomic-yaml-patch";
|
|
21
|
+
import { type IntentStep, type ProvenanceLedger } from "./paseo-ownership";
|
|
22
|
+
import type { PartialInstallEvidence } from "./result-types";
|
|
23
|
+
/** One completed forward step, retaining exactly what its inverse needs. */
|
|
24
|
+
export interface CompletedStep {
|
|
25
|
+
readonly label: string;
|
|
26
|
+
/** Undo this step. Resolves to `"reverted"`, or `"conflict"` when the resource moved underneath us. */
|
|
27
|
+
undo(): Promise<StepUndoResult>;
|
|
28
|
+
}
|
|
29
|
+
export type StepUndoResult = {
|
|
30
|
+
readonly status: "reverted";
|
|
31
|
+
} | {
|
|
32
|
+
readonly status: "conflict";
|
|
33
|
+
readonly detail: string;
|
|
34
|
+
readonly retained: readonly string[];
|
|
35
|
+
};
|
|
36
|
+
export declare class SagaStepError extends Error {
|
|
37
|
+
readonly label: string;
|
|
38
|
+
readonly retained: readonly string[];
|
|
39
|
+
constructor(label: string, message: string, retained?: readonly string[]);
|
|
40
|
+
}
|
|
41
|
+
export interface CompensationOutcome {
|
|
42
|
+
readonly compensated: readonly string[];
|
|
43
|
+
readonly uncompensated: readonly string[];
|
|
44
|
+
readonly evidence: PartialInstallEvidence;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Undo completed steps newest-first, halting at the first inverse that reports
|
|
48
|
+
* a conflict.
|
|
49
|
+
*
|
|
50
|
+
* Halting is deliberate: once one resource has diverged, continuing to unwind
|
|
51
|
+
* the others would leave a stranger mix of reverted and live state that no
|
|
52
|
+
* later run could interpret. Stopping preserves an interpretable prefix.
|
|
53
|
+
*/
|
|
54
|
+
export declare function compensate(completed: readonly CompletedStep[], failure: SagaStepError): Promise<CompensationOutcome>;
|
|
55
|
+
export interface JsonStepInput {
|
|
56
|
+
readonly label: string;
|
|
57
|
+
readonly step: IntentStep;
|
|
58
|
+
readonly targetPath: string;
|
|
59
|
+
readonly provenancePath: string;
|
|
60
|
+
readonly intentPath: string;
|
|
61
|
+
readonly ownedKeys: readonly string[];
|
|
62
|
+
/** Mutates the parsed target in place. */
|
|
63
|
+
readonly mutate: (draft: Record<string, unknown>) => void;
|
|
64
|
+
/** Produces the ledger that must exist once this step commits. */
|
|
65
|
+
readonly nextLedger: (ledger: ProvenanceLedger) => ProvenanceLedger;
|
|
66
|
+
/** Reverts the target, removing only what this step added. */
|
|
67
|
+
readonly revert: (draft: Record<string, unknown>) => void;
|
|
68
|
+
/** Produces the ledger that must exist once this step is undone. */
|
|
69
|
+
readonly revertLedger: (ledger: ProvenanceLedger) => ProvenanceLedger;
|
|
70
|
+
readonly now: Date;
|
|
71
|
+
}
|
|
72
|
+
export interface JsonStepOutput {
|
|
73
|
+
readonly completed: CompletedStep;
|
|
74
|
+
readonly changed: boolean;
|
|
75
|
+
readonly backupPath?: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Run one JSON step: intent, target publish, ledger commit, intent clear.
|
|
79
|
+
*
|
|
80
|
+
* The intent is written first and cleared last. Between those points a crash is
|
|
81
|
+
* recoverable because the record alone identifies whether the target carries
|
|
82
|
+
* pre-write bytes, the exact bytes we intended, or something a third party
|
|
83
|
+
* produced.
|
|
84
|
+
*/
|
|
85
|
+
export declare function runJsonStep(input: JsonStepInput): Promise<JsonStepOutput>;
|
|
86
|
+
/** Wrap a `CasReceipt` as a compensable step. */
|
|
87
|
+
export declare function receiptStep(label: string, receipt: CasReceipt): CompletedStep;
|
|
88
|
+
export interface RecoverIntentOptions {
|
|
89
|
+
/**
|
|
90
|
+
* Act on the classification rather than only reporting it.
|
|
91
|
+
*
|
|
92
|
+
* Install passes `true`. `--check` passes `false` because it must stay
|
|
93
|
+
* read-only: it surfaces the lingering intent as drift and leaves the repair
|
|
94
|
+
* to the next install.
|
|
95
|
+
*/
|
|
96
|
+
readonly repair: boolean;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Classify a lingering intent left by an interrupted run, and optionally act.
|
|
100
|
+
*
|
|
101
|
+
* The outcome comes from classifying BOTH the target and the ledger:
|
|
102
|
+
*
|
|
103
|
+
* - `discard` the publish never landed, so nothing was mutated. Safe to clear.
|
|
104
|
+
* - `complete-ledger` the publish landed but the ledger commit did not. Re-running
|
|
105
|
+
* the same install re-derives and commits the identical provenance in step 1,
|
|
106
|
+
* so recovery is to PROCEED. The intent is deliberately left in place until
|
|
107
|
+
* that step overwrites it, because clearing it first would lose recoverability
|
|
108
|
+
* if the retry is interrupted too.
|
|
109
|
+
* - `refuse` a third party changed one of the files. Never replay a recorded
|
|
110
|
+
* write over someone else's change.
|
|
111
|
+
*/
|
|
112
|
+
export declare function recoverIntent(intentPath: string, options?: RecoverIntentOptions): Promise<{
|
|
113
|
+
recovered: boolean;
|
|
114
|
+
detail: string;
|
|
115
|
+
} | undefined>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/** Serialization Paseo itself produces. Verified byte-identical against the live config. */
|
|
2
|
+
export declare function serializeJson(value: unknown): string;
|
|
3
|
+
export declare function hashBytes(bytes: string): string;
|
|
4
|
+
/** Marker recorded when a target did not exist at preflight. */
|
|
5
|
+
export declare const ABSENT_IDENTITY = "absent";
|
|
6
|
+
export type PublishRefusal = {
|
|
7
|
+
readonly reason: "parse-refusal";
|
|
8
|
+
readonly detail: string;
|
|
9
|
+
} | {
|
|
10
|
+
readonly reason: "format-drift";
|
|
11
|
+
readonly detail: string;
|
|
12
|
+
} | {
|
|
13
|
+
readonly reason: "cas-conflict";
|
|
14
|
+
readonly expected: string;
|
|
15
|
+
readonly actual: string;
|
|
16
|
+
};
|
|
17
|
+
export declare class PaseoPublishError extends Error {
|
|
18
|
+
readonly refusal: PublishRefusal;
|
|
19
|
+
readonly targetPath: string;
|
|
20
|
+
constructor(targetPath: string, refusal: PublishRefusal);
|
|
21
|
+
}
|
|
22
|
+
export interface ReadTargetResult {
|
|
23
|
+
readonly exists: boolean;
|
|
24
|
+
/** Raw bytes as read, or `""` when absent. */
|
|
25
|
+
readonly raw: string;
|
|
26
|
+
/** Hash of `raw`, or `ABSENT_IDENTITY` when absent. */
|
|
27
|
+
readonly identity: string;
|
|
28
|
+
/** Parsed object; `{}` when absent. */
|
|
29
|
+
readonly parsed: Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Read and validate a target without writing anything.
|
|
33
|
+
*
|
|
34
|
+
* Throws `PaseoPublishError` on unparseable JSON or on a formatting mismatch,
|
|
35
|
+
* so callers never have to decide whether a file is safe to touch.
|
|
36
|
+
*/
|
|
37
|
+
export declare function readTarget(targetPath: string): Promise<ReadTargetResult>;
|
|
38
|
+
export interface PublishPlan {
|
|
39
|
+
/** Bytes that will be published. */
|
|
40
|
+
readonly nextRaw: string;
|
|
41
|
+
/** Hash of `nextRaw` -- the expected post-publish identity, computable before any rename. */
|
|
42
|
+
readonly expectedIdentity: string;
|
|
43
|
+
/** True when the mutation produced no change and publication can be skipped. */
|
|
44
|
+
readonly unchanged: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Apply `mutate` to a validated read and compute the exact bytes to publish.
|
|
48
|
+
*
|
|
49
|
+
* Split out from {@link publishPlan} so the install saga can record the expected
|
|
50
|
+
* post-publish identity in its durable intent BEFORE anything is written.
|
|
51
|
+
*/
|
|
52
|
+
export declare function planPublish(current: ReadTargetResult, mutate: (draft: Record<string, unknown>) => void): PublishPlan;
|
|
53
|
+
export interface PublishOptions {
|
|
54
|
+
/** Identity the target must still carry at publication time. */
|
|
55
|
+
readonly expectedIdentity: string;
|
|
56
|
+
/** Take a mode-0600 backup beside the original before replacing it. */
|
|
57
|
+
readonly backup: boolean;
|
|
58
|
+
readonly now: Date;
|
|
59
|
+
}
|
|
60
|
+
export interface PublishResult {
|
|
61
|
+
readonly published: boolean;
|
|
62
|
+
readonly backupPath?: string;
|
|
63
|
+
readonly identity: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Publish `plan.nextRaw` to `targetPath` under a compare-and-swap on
|
|
67
|
+
* `options.expectedIdentity`.
|
|
68
|
+
*
|
|
69
|
+
* The CAS is re-read immediately before the rename, which is the narrowest
|
|
70
|
+
* window GJC can achieve. It does not defend against Paseo re-writing the file
|
|
71
|
+
* later from its own stale in-memory copy -- Paseo exposes no lock or version
|
|
72
|
+
* API, so that remains a documented residual risk detected by `--check`.
|
|
73
|
+
*/
|
|
74
|
+
export declare function publishPlan(targetPath: string, plan: PublishPlan, options: PublishOptions): Promise<PublishResult>;
|
|
75
|
+
/** Current on-disk identity, or {@link ABSENT_IDENTITY} when the file does not exist. */
|
|
76
|
+
export declare function currentIdentity(targetPath: string): Promise<string>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Every newly seeded orchestration role points at the base provider this setup registers. */
|
|
2
|
+
export declare const SEEDED_ROLE_VALUE = "gjc";
|
|
3
|
+
export interface OrchestrationSeed {
|
|
4
|
+
readonly mutate: (draft: Record<string, unknown>) => void;
|
|
5
|
+
readonly seededKeys: readonly string[];
|
|
6
|
+
readonly seededValues: Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Plan the seeding of `providers.{impl,ui,research,planning,audit}`.
|
|
10
|
+
*
|
|
11
|
+
* Only empty roles are seeded. `preferences[]` and any other top-level key are
|
|
12
|
+
* never read or assigned, so an existing array keeps its identity and content.
|
|
13
|
+
*/
|
|
14
|
+
/** Read a role's current value, or `undefined` when unset. Shared by seeding and removal. */
|
|
15
|
+
export declare function readRoleValue(preferences: Record<string, unknown>, key: string): string | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Delete seeded roles from the nested `providers` map.
|
|
18
|
+
*
|
|
19
|
+
* `shouldDelete` gates each key on provenance, so a role the user reassigned
|
|
20
|
+
* after install is left alone. The `providers` object itself is removed only
|
|
21
|
+
* when it becomes empty, so a file GJC fully seeded returns to its prior shape.
|
|
22
|
+
*/
|
|
23
|
+
export declare function removeSeededRoles(draft: Record<string, unknown>, keys: readonly string[], shouldDelete: (key: string, currentValue: string | undefined) => boolean): void;
|
|
24
|
+
export declare function createOrchestrationSeed(preferences: Record<string, unknown>): OrchestrationSeed;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { ABSENT_IDENTITY } from "./json-publisher";
|
|
2
|
+
export declare const PROVENANCE_VERSION = 1;
|
|
3
|
+
export declare const INTENT_VERSION = 1;
|
|
4
|
+
export interface ProvenanceLedger {
|
|
5
|
+
readonly version: number;
|
|
6
|
+
/** `agents.providers` keys GJC created, mapped to the value hash it wrote. */
|
|
7
|
+
readonly providerKeys: Record<string, string>;
|
|
8
|
+
/** Orchestration role keys GJC actually seeded, mapped to the value it wrote. */
|
|
9
|
+
readonly seededOrchestrationKeys: Record<string, string>;
|
|
10
|
+
/** Bridge directory path GJC created, when it created it. */
|
|
11
|
+
readonly bridgePath?: string;
|
|
12
|
+
/** Bridge entries GJC created, so the inverse removes exactly those. */
|
|
13
|
+
readonly bridgeEntries?: readonly string[];
|
|
14
|
+
/** True when GJC created the bridge directory itself (as opposed to populating an existing one). */
|
|
15
|
+
readonly bridgeDirCreated?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const EMPTY_LEDGER: ProvenanceLedger;
|
|
18
|
+
export declare function readProvenance(provenancePath: string): Promise<ProvenanceLedger>;
|
|
19
|
+
export declare function writeProvenance(provenancePath: string, ledger: ProvenanceLedger): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* True only when GJC recorded this provider key AND the value still hashes to
|
|
22
|
+
* what GJC wrote. A user edit after install makes this false, which is what
|
|
23
|
+
* keeps `--remove` from destroying their change.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isProvenancedProvider(ledger: ProvenanceLedger, key: string, currentValueHash: string): boolean;
|
|
26
|
+
export declare function isProvenancedOrchestrationKey(ledger: ProvenanceLedger, key: string, currentValue: string): boolean;
|
|
27
|
+
/** Every `gjc`/`gjc-<preset>` key GJC recorded, so a plain `--remove` cleans up earlier `--mpreset` runs. */
|
|
28
|
+
export declare function provenancedProviderKeys(ledger: ProvenanceLedger): readonly string[];
|
|
29
|
+
export type IntentStep = "provider-config" | "orchestration-preferences";
|
|
30
|
+
/**
|
|
31
|
+
* Durable, credential-free intent record.
|
|
32
|
+
*
|
|
33
|
+
* Written before either the target publish or the ledger commit, and carrying
|
|
34
|
+
* BOTH identities for BOTH files, so recovery can classify each file as
|
|
35
|
+
* before / intended-after / divergent from this record alone. It stores only
|
|
36
|
+
* paths, key names, and hashes -- never file contents, diffs, or values -- so
|
|
37
|
+
* it stays credential-free even though `config.json` holds a bcrypt password.
|
|
38
|
+
*/
|
|
39
|
+
export interface IntentRecord {
|
|
40
|
+
readonly version: number;
|
|
41
|
+
readonly step: IntentStep;
|
|
42
|
+
readonly targetPath: string;
|
|
43
|
+
readonly ownedKeys: readonly string[];
|
|
44
|
+
readonly targetPreflightIdentity: string;
|
|
45
|
+
readonly targetExpectedIdentity: string;
|
|
46
|
+
readonly provenancePath: string;
|
|
47
|
+
readonly provenancePreflightIdentity: string;
|
|
48
|
+
readonly provenanceExpectedIdentity: string;
|
|
49
|
+
/**
|
|
50
|
+
* The exact ledger this step intended to commit.
|
|
51
|
+
*
|
|
52
|
+
* Carried so recovery can finish the commit without re-running the step. That
|
|
53
|
+
* matters for seed-if-empty work: once the target publish has landed the roles
|
|
54
|
+
* are no longer empty, so a retry would skip the step and the ledger would
|
|
55
|
+
* never be written. Contains only key names and hashes, never values from the
|
|
56
|
+
* user's files, so the record stays credential-free.
|
|
57
|
+
*/
|
|
58
|
+
readonly provenancePayload?: ProvenanceLedger;
|
|
59
|
+
readonly startedAt: string;
|
|
60
|
+
}
|
|
61
|
+
export declare function writeIntent(intentPath: string, intent: IntentRecord): Promise<void>;
|
|
62
|
+
export declare function readIntent(intentPath: string): Promise<IntentRecord | undefined>;
|
|
63
|
+
export declare function clearIntent(intentPath: string): Promise<void>;
|
|
64
|
+
/** Rebuild the ledger an interrupted step intended to commit, when it recorded one. */
|
|
65
|
+
export declare function pendingLedgerOf(intent: IntentRecord): ProvenanceLedger | undefined;
|
|
66
|
+
/** Where a file sits relative to an interrupted step. */
|
|
67
|
+
export type IntentFileState = "before" | "intended-after" | "divergent";
|
|
68
|
+
export declare function classifyIdentity(observed: string, preflight: string, expected: string): IntentFileState;
|
|
69
|
+
export type IntentRecovery = {
|
|
70
|
+
readonly action: "discard";
|
|
71
|
+
readonly detail: string;
|
|
72
|
+
} | {
|
|
73
|
+
readonly action: "complete-ledger";
|
|
74
|
+
readonly detail: string;
|
|
75
|
+
} | {
|
|
76
|
+
readonly action: "refuse";
|
|
77
|
+
readonly detail: string;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Classify BOTH the target and the ledger before deciding what to do.
|
|
81
|
+
*
|
|
82
|
+
* Deliberately exhaustive over the nine combinations: a divergent ledger always
|
|
83
|
+
* refuses, because replaying a recorded ledger output over a third party's
|
|
84
|
+
* change would destroy it.
|
|
85
|
+
*/
|
|
86
|
+
export declare function classifyIntent(intent: IntentRecord): Promise<IntentRecovery>;
|
|
87
|
+
export { ABSENT_IDENTITY };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { PaseoInstallResult, PaseoRemoveResult, SetupCheckResult } from "./result-types";
|
|
2
|
+
import type { PaseoSetupDependencies } from "./setup-deps";
|
|
3
|
+
export interface PaseoSetupFlags {
|
|
4
|
+
readonly check?: boolean;
|
|
5
|
+
readonly json?: boolean;
|
|
6
|
+
readonly force?: boolean;
|
|
7
|
+
readonly remove?: boolean;
|
|
8
|
+
readonly mpreset?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class PaseoSetupUsageError extends Error {
|
|
11
|
+
constructor(message: string);
|
|
12
|
+
}
|
|
13
|
+
export type PaseoSetupOutcome = {
|
|
14
|
+
readonly kind: "check";
|
|
15
|
+
readonly result: SetupCheckResult;
|
|
16
|
+
} | {
|
|
17
|
+
readonly kind: "install";
|
|
18
|
+
readonly result: PaseoInstallResult;
|
|
19
|
+
} | {
|
|
20
|
+
readonly kind: "remove";
|
|
21
|
+
readonly result: PaseoRemoveResult;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Reject flag combinations that have no coherent meaning.
|
|
25
|
+
*
|
|
26
|
+
* Rejected before any read or write so a misuse can never leave partial state.
|
|
27
|
+
*/
|
|
28
|
+
export declare function assertUsableFlags(flags: PaseoSetupFlags): void;
|
|
29
|
+
export declare function runPaseoSetup(flags: PaseoSetupFlags, deps: PaseoSetupDependencies): Promise<PaseoSetupOutcome>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type BuildChannel } from "../../build-metadata";
|
|
2
|
+
import { type ReadTargetResult } from "./json-publisher";
|
|
3
|
+
export interface PaseoProviderEntry {
|
|
4
|
+
extends: string;
|
|
5
|
+
label: string;
|
|
6
|
+
command: string[];
|
|
7
|
+
env: Record<string, string>;
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
}
|
|
10
|
+
export type GjcCommandResolution = {
|
|
11
|
+
readonly ok: true;
|
|
12
|
+
readonly command: string[];
|
|
13
|
+
readonly channel: BuildChannel;
|
|
14
|
+
} | {
|
|
15
|
+
readonly ok: false;
|
|
16
|
+
readonly channel: BuildChannel;
|
|
17
|
+
readonly detail: string;
|
|
18
|
+
};
|
|
19
|
+
export type ProviderConflict = {
|
|
20
|
+
readonly conflict: false;
|
|
21
|
+
} | {
|
|
22
|
+
readonly conflict: true;
|
|
23
|
+
readonly subject: string;
|
|
24
|
+
readonly detail: string;
|
|
25
|
+
};
|
|
26
|
+
export declare function resolveGjcCommand(): GjcCommandResolution;
|
|
27
|
+
export declare function providerKeyFor(mpreset?: string): string;
|
|
28
|
+
export declare function buildProviderEntry(command: string[], mpreset?: string): PaseoProviderEntry;
|
|
29
|
+
/**
|
|
30
|
+
* Produces the narrowly scoped mutation passed to {@link planPublish}. The
|
|
31
|
+
* read result is accepted so callers retain an explicit preflight-to-plan flow.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createProviderMutation(_current: ReadTargetResult, key: string, entry: PaseoProviderEntry): (draft: Record<string, unknown>) => void;
|
|
34
|
+
export declare function hasProviderConflict(config: Record<string, unknown>, key: string, entry: PaseoProviderEntry): ProviderConflict;
|
|
35
|
+
export declare function providerEntryHash(entry: PaseoProviderEntry): string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PaseoRemoveResult } from "./result-types";
|
|
2
|
+
import { type PaseoSetupDependencies } from "./setup-deps";
|
|
3
|
+
export interface RemoveOptions {
|
|
4
|
+
readonly now: Date;
|
|
5
|
+
/** Undo the config.yml `skills.customDirectories` append. Supplied by the orchestrator. */
|
|
6
|
+
readonly unregisterBridgeDirectory?: () => Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Remove every target GJC can prove it owns.
|
|
10
|
+
*
|
|
11
|
+
* Returns `nothing-to-remove` when the ledger holds no ownership at all, which
|
|
12
|
+
* is distinct from removing zero keys because the user edited all of them.
|
|
13
|
+
*/
|
|
14
|
+
export declare function removePaseoSetup(deps: PaseoSetupDependencies, options: RemoveOptions): Promise<PaseoRemoveResult>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result unions for `gjc setup paseo`.
|
|
3
|
+
*
|
|
4
|
+
* `SetupCheckResult` is deliberately four-valued. Parse failures, conflicts,
|
|
5
|
+
* missing executables, and partial-operation evidence are all `drift` carrying
|
|
6
|
+
* a structured reason -- they are NOT extra top-level statuses. Install and
|
|
7
|
+
* remove outcomes live in their own unions so command outcomes never leak into
|
|
8
|
+
* the diagnosis DTO.
|
|
9
|
+
*/
|
|
10
|
+
/** The four locked check states. Adding a fifth is a spec change, not an implementation detail. */
|
|
11
|
+
export type SetupCheckStatus = "pass" | "drift" | "stale" | "skipped";
|
|
12
|
+
/** Structured detail carried inside a `drift` result. */
|
|
13
|
+
export type DriftReasonCode = "parse-refusal" | "format-drift" | "owned-key-conflict" | "missing-executable" | "partial-install" | "partial-removal" | "orphan-skill" | "unlinked-skill" | "missing-provider-entry" | "missing-bridge-link" | "missing-skills-directory" | "unseeded-orchestration-role";
|
|
14
|
+
export interface DriftReason {
|
|
15
|
+
readonly code: DriftReasonCode;
|
|
16
|
+
/** Which owned path or key the reason concerns. Never a secret value. */
|
|
17
|
+
readonly subject: string;
|
|
18
|
+
readonly detail: string;
|
|
19
|
+
}
|
|
20
|
+
export interface SetupCheckResult {
|
|
21
|
+
readonly component: "paseo";
|
|
22
|
+
readonly status: SetupCheckStatus;
|
|
23
|
+
readonly reasons: readonly DriftReason[];
|
|
24
|
+
/** Human-facing next step, present for `stale` so the user knows a restart is theirs to make. */
|
|
25
|
+
readonly guidance?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface PartialInstallEvidence {
|
|
28
|
+
readonly failedStep: string;
|
|
29
|
+
readonly detail: string;
|
|
30
|
+
/** Paths whose state was preserved for recovery. Never file contents. */
|
|
31
|
+
readonly retained: readonly string[];
|
|
32
|
+
}
|
|
33
|
+
export type PaseoInstallResult = {
|
|
34
|
+
readonly outcome: "installed";
|
|
35
|
+
readonly changed: readonly string[];
|
|
36
|
+
} | {
|
|
37
|
+
readonly outcome: "partial-install";
|
|
38
|
+
readonly compensated: readonly string[];
|
|
39
|
+
readonly uncompensated: readonly string[];
|
|
40
|
+
readonly evidence: PartialInstallEvidence;
|
|
41
|
+
};
|
|
42
|
+
export interface PartialRemovalEvidence {
|
|
43
|
+
readonly failedStep: string;
|
|
44
|
+
readonly detail: string;
|
|
45
|
+
readonly retained: readonly string[];
|
|
46
|
+
}
|
|
47
|
+
export type PaseoRemoveResult = {
|
|
48
|
+
readonly outcome: "removed";
|
|
49
|
+
readonly removed: readonly string[];
|
|
50
|
+
} | {
|
|
51
|
+
readonly outcome: "nothing-to-remove";
|
|
52
|
+
} | {
|
|
53
|
+
readonly outcome: "partial-removal";
|
|
54
|
+
readonly removed: readonly string[];
|
|
55
|
+
readonly remaining: readonly string[];
|
|
56
|
+
readonly evidence: PartialRemovalEvidence;
|
|
57
|
+
};
|
|
58
|
+
/** Exit code for a check result. `stale` and `skipped` are not failures. */
|
|
59
|
+
export declare function checkExitCode(result: SetupCheckResult): number;
|