@gajae-code/coding-agent 0.13.2 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +215 -8
- package/README.md +2 -0
- package/bin/gajaessi.js +4 -0
- package/dist/types/async/job-manager.d.ts +55 -2
- package/dist/types/async/support.d.ts +14 -0
- package/dist/types/capability/mcp.d.ts +6 -0
- package/dist/types/capability/types.d.ts +6 -0
- package/dist/types/cli/accounts-cli.d.ts +19 -0
- package/dist/types/cli/args.d.ts +3 -0
- package/dist/types/cli/config-cli.d.ts +6 -0
- package/dist/types/cli/crash-cli.d.ts +10 -0
- package/dist/types/cli/customize-doctor.d.ts +145 -0
- package/dist/types/cli/daemon-cli.d.ts +3 -1
- package/dist/types/cli/mcp-cli.d.ts +11 -0
- package/dist/types/cli/notify-cli.d.ts +1 -1
- package/dist/types/cli/root-flags.d.ts +12 -0
- package/dist/types/cli/setup-cli.d.ts +3 -1
- package/dist/types/cli/skills-cli.d.ts +2 -1
- package/dist/types/cli/update-cli.d.ts +19 -1
- package/dist/types/cli.d.ts +6 -0
- package/dist/types/commands/accounts.d.ts +40 -0
- package/dist/types/commands/crash.d.ts +24 -0
- package/dist/types/commands/customize.d.ts +22 -0
- package/dist/types/commands/daemon.d.ts +1 -1
- package/dist/types/commands/launch.d.ts +6 -0
- package/dist/types/commands/setup.d.ts +6 -0
- package/dist/types/commands/skills.d.ts +6 -1
- package/dist/types/commands/update.d.ts +7 -0
- package/dist/types/config/atomic-yaml-patch-worker.d.ts +25 -0
- package/dist/types/config/atomic-yaml-patch.d.ts +62 -2
- package/dist/types/config/config-schema-version.d.ts +10 -0
- package/dist/types/config/file-lock.d.ts +18 -0
- package/dist/types/config/model-profile-activation.d.ts +3 -1
- package/dist/types/config/model-registry.d.ts +10 -1
- package/dist/types/config/models-config-schema.d.ts +2 -0
- package/dist/types/config/settings-schema.d.ts +73 -9
- package/dist/types/config/settings.d.ts +63 -0
- package/dist/types/config/skill-settings-defaults.d.ts +26 -0
- package/dist/types/config/task-delegation.d.ts +39 -0
- package/dist/types/config/update-channel.d.ts +10 -0
- package/dist/types/coordinator-mcp/server.d.ts +5 -1
- package/dist/types/crash/index-store.d.ts +87 -0
- package/dist/types/crash/nudge.d.ts +50 -0
- package/dist/types/crash/record-loader.d.ts +17 -0
- package/dist/types/crash/report.d.ts +134 -0
- package/dist/types/crash/sanitize.d.ts +25 -0
- package/dist/types/cursor.d.ts +13 -2
- package/dist/types/customization/import.d.ts +37 -0
- package/dist/types/customization/index.d.ts +4 -0
- package/dist/types/customization/inventory.d.ts +25 -0
- package/dist/types/customization/mutations.d.ts +32 -0
- package/dist/types/customization/types.d.ts +115 -0
- package/dist/types/daemon/control-types.d.ts +8 -1
- package/dist/types/daemon/operator-contract.d.ts +4 -4
- package/dist/types/discovery/claude.d.ts +39 -1
- package/dist/types/discovery/codex.d.ts +39 -1
- package/dist/types/discovery/index.d.ts +2 -0
- package/dist/types/discovery/mcp-compat.d.ts +30 -0
- package/dist/types/edit/renderer.d.ts +23 -0
- package/dist/types/extensibility/extensions/runner.d.ts +3 -0
- package/dist/types/extensibility/extensions/types.d.ts +21 -4
- package/dist/types/extensibility/gjc-plugins/observability.d.ts +6 -1
- package/dist/types/extensibility/gjc-plugins/registry.d.ts +8 -1
- package/dist/types/extensibility/hooks/loader.d.ts +19 -5
- package/dist/types/extensibility/runtime-skill-discovery.d.ts +22 -1
- package/dist/types/extensibility/skill-management.d.ts +107 -0
- package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +3 -1
- package/dist/types/gjc-runtime/launch-worktree.d.ts +8 -0
- package/dist/types/gjc-runtime/linux-proc.d.ts +3 -0
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +10 -6
- package/dist/types/gjc-runtime/session-state-lock.d.ts +104 -0
- package/dist/types/gjc-runtime/session-state-sidecar.d.ts +120 -2
- package/dist/types/gjc-runtime/state-writer.d.ts +10 -1
- package/dist/types/gjc-runtime/ultragoal-guard.d.ts +4 -2
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -6
- package/dist/types/gjc-runtime/workflow-settings.d.ts +109 -0
- package/dist/types/hooks/events.d.ts +60 -0
- package/dist/types/hooks/normalize.d.ts +83 -0
- package/dist/types/hooks/skill-state.d.ts +9 -2
- package/dist/types/main.d.ts +2 -1
- package/dist/types/modes/acp/abort-scope.d.ts +13 -0
- package/dist/types/modes/acp/acp-agent.d.ts +7 -4
- package/dist/types/modes/components/customization/customization-dashboard.d.ts +44 -0
- package/dist/types/modes/components/customization/import-wizard.d.ts +21 -0
- package/dist/types/modes/components/customization/index.d.ts +1 -0
- package/dist/types/modes/components/dynamic-theme-text.d.ts +9 -0
- package/dist/types/modes/components/gajae-pet-widget.d.ts +6 -28
- package/dist/types/modes/components/irc-sidebar.d.ts +1 -0
- package/dist/types/modes/components/iterm-pet-transport.d.ts +122 -0
- package/dist/types/modes/components/oauth-selector.d.ts +10 -4
- package/dist/types/modes/components/pet-capability.d.ts +7 -21
- package/dist/types/modes/components/settings-selector.d.ts +5 -0
- package/dist/types/modes/components/status-line/gh.d.ts +6 -2
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -1
- package/dist/types/modes/controllers/selector-controller.d.ts +7 -8
- package/dist/types/modes/controllers/stt-controller.d.ts +1 -1
- package/dist/types/modes/interactive-mode.d.ts +1 -0
- package/dist/types/modes/theme/defaults/index.d.ts +118 -0
- package/dist/types/modes/types.d.ts +1 -0
- package/dist/types/modes/utils/injected-user-submission.d.ts +10 -0
- package/dist/types/runtime-mcp/config.d.ts +9 -0
- package/dist/types/runtime-mcp/manager.d.ts +26 -1
- package/dist/types/runtime-mcp/oauth-discovery.d.ts +4 -0
- package/dist/types/runtime-mcp/oauth-flow.d.ts +24 -1
- package/dist/types/runtime-mcp/pool-key.d.ts +2 -0
- package/dist/types/runtime-mcp/protocol.d.ts +278 -0
- package/dist/types/runtime-mcp/scope-config.d.ts +29 -0
- package/dist/types/runtime-mcp/tool-bridge.d.ts +15 -13
- package/dist/types/runtime-mcp/transports/http.d.ts +9 -0
- package/dist/types/runtime-mcp/types.d.ts +102 -10
- package/dist/types/sdk/acp/adapter.d.ts +26 -5
- package/dist/types/sdk/broker/broker.d.ts +3 -55
- package/dist/types/sdk/broker/lifecycle.d.ts +18 -12
- package/dist/types/sdk/broker/session-index.d.ts +14 -5
- package/dist/types/sdk/broker/startup-failure.d.ts +16 -1
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +51 -1
- package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +4 -41
- package/dist/types/sdk/bus/config.d.ts +11 -0
- package/dist/types/sdk/bus/conversation-store.d.ts +0 -1
- package/dist/types/sdk/bus/daemon-paths.d.ts +6 -0
- package/dist/types/sdk/bus/discord-conversation.d.ts +2 -0
- package/dist/types/sdk/bus/discord-daemon.d.ts +17 -12
- package/dist/types/sdk/bus/existing-thread-readiness.d.ts +4 -34
- package/dist/types/sdk/bus/inbound-reaction-ordering.d.ts +61 -0
- package/dist/types/sdk/bus/index.d.ts +85 -99
- package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +29 -7
- package/dist/types/sdk/bus/managed-daemon.d.ts +2 -32
- package/dist/types/sdk/bus/notification-service.d.ts +52 -0
- package/dist/types/sdk/bus/operator-runtime.d.ts +1 -1
- package/dist/types/sdk/bus/prompt-reconciliation.d.ts +16 -5
- package/dist/types/sdk/bus/reconciliation-store.d.ts +113 -5
- package/dist/types/sdk/bus/session-control.d.ts +25 -1
- package/dist/types/sdk/bus/slack-conversation.d.ts +4 -0
- package/dist/types/sdk/bus/slack-daemon.d.ts +9 -17
- package/dist/types/sdk/bus/slack-live-provider.d.ts +3 -1
- package/dist/types/sdk/bus/slack-provider.d.ts +4 -0
- package/dist/types/sdk/bus/slack-thread-binding.d.ts +6 -40
- package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +30 -104
- package/dist/types/sdk/bus/telegram-daemon-cli.d.ts +10 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +262 -19
- package/dist/types/sdk/bus/telegram-daemon-orphan-reap.d.ts +125 -0
- package/dist/types/sdk/bus/telegram-daemon-owner-registry.d.ts +22 -0
- package/dist/types/sdk/bus/telegram-daemon.d.ts +119 -310
- package/dist/types/sdk/bus/telegram-reference.d.ts +1 -47
- package/dist/types/sdk/bus/threaded-render.d.ts +1 -0
- package/dist/types/sdk/bus/topic-registry.d.ts +33 -17
- package/dist/types/sdk/cli/rows.d.ts +2 -11
- package/dist/types/sdk/cli/session-cli.d.ts +15 -25
- package/dist/types/sdk/client/client.d.ts +97 -1
- package/dist/types/sdk/host/control/dispatch.d.ts +0 -7
- package/dist/types/sdk/host/control/index.d.ts +1 -1
- package/dist/types/sdk/host/control/operations.d.ts +18 -5
- package/dist/types/sdk/host/control/runtime-gate.d.ts +19 -0
- package/dist/types/sdk/host/host.d.ts +15 -1
- package/dist/types/sdk/host/query/handlers.d.ts +5 -0
- package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
- package/dist/types/sdk/host/session-runtime.d.ts +127 -7
- package/dist/types/sdk/host/types.d.ts +1 -1
- package/dist/types/sdk/host/websocket-transport.d.ts +1 -1
- package/dist/types/sdk/index.d.ts +2 -1
- package/dist/types/sdk/lifecycle/broker-client.d.ts +8 -0
- package/dist/types/sdk/lifecycle/client.d.ts +59 -0
- package/dist/types/sdk/lifecycle/index.d.ts +3 -0
- package/dist/types/sdk/lifecycle/service.d.ts +232 -0
- package/dist/types/sdk/mcp/server.d.ts +9 -6
- package/dist/types/sdk/prompt-deadline-lease.d.ts +43 -0
- package/dist/types/sdk/prompt-deadline-manager.d.ts +28 -0
- package/dist/types/sdk/prompt-status.d.ts +10 -3
- package/dist/types/sdk/protocol/operation-registry.d.ts +5 -0
- package/dist/types/sdk/receipt-state.d.ts +17 -0
- package/dist/types/sdk/reconciliation-extensions.d.ts +2 -0
- package/dist/types/sdk/router/index.d.ts +1 -0
- package/dist/types/sdk/router/session-router.d.ts +152 -0
- package/dist/types/sdk/session-list.d.ts +22 -0
- package/dist/types/sdk/session-reconnect.d.ts +43 -1
- package/dist/types/sdk/session.d.ts +34 -1
- package/dist/types/sdk/transport/serve-cli.d.ts +1 -4
- package/dist/types/session/account-inventory.d.ts +86 -0
- package/dist/types/session/agent-session.d.ts +145 -6
- package/dist/types/session/agent-storage.d.ts +10 -0
- package/dist/types/session/coordinator-tool-label.d.ts +28 -0
- package/dist/types/session/internal/managed-session-storage.d.ts +23 -4
- package/dist/types/session/messages.d.ts +1 -1
- package/dist/types/session/secure-token-file.d.ts +3 -0
- package/dist/types/session/session-manager.d.ts +47 -1
- package/dist/types/session/startup-auth-config.d.ts +44 -0
- package/dist/types/session/terminal-abort.d.ts +378 -0
- package/dist/types/session/yield-queue.d.ts +7 -0
- package/dist/types/session-import/claude.d.ts +26 -0
- package/dist/types/session-import/codex.d.ts +88 -0
- package/dist/types/session-import/command.d.ts +35 -0
- package/dist/types/session-import/detect.d.ts +22 -0
- package/dist/types/session-import/index.d.ts +7 -0
- package/dist/types/session-import/provider-codex.d.ts +22 -0
- package/dist/types/session-import/provider-service.d.ts +38 -0
- package/dist/types/session-import/redact.d.ts +23 -0
- package/dist/types/session-import/service.d.ts +47 -0
- package/dist/types/session-import/types.d.ts +120 -0
- package/dist/types/setup/paseo/check.d.ts +16 -0
- package/dist/types/setup/paseo/install-saga.d.ts +115 -0
- package/dist/types/setup/paseo/json-publisher.d.ts +76 -0
- package/dist/types/setup/paseo/orchestration-preferences.d.ts +24 -0
- package/dist/types/setup/paseo/paseo-ownership.d.ts +87 -0
- package/dist/types/setup/paseo/paseo-setup.d.ts +29 -0
- package/dist/types/setup/paseo/provider-config.d.ts +35 -0
- package/dist/types/setup/paseo/remove.d.ts +14 -0
- package/dist/types/setup/paseo/result-types.d.ts +59 -0
- package/dist/types/setup/paseo/setup-deps.d.ts +73 -0
- package/dist/types/setup/paseo/skills-bridge.d.ts +44 -0
- package/dist/types/skill-state/active-state.d.ts +5 -1
- package/dist/types/slash-commands/acp-builtins.d.ts +5 -1
- package/dist/types/slash-commands/builtin-registry.d.ts +2 -0
- package/dist/types/slash-commands/helpers/credential-switch.d.ts +12 -0
- package/dist/types/slash-commands/helpers/usage-report.d.ts +5 -6
- package/dist/types/slash-commands/types.d.ts +7 -1
- package/dist/types/task/executor.d.ts +10 -0
- package/dist/types/task/index.d.ts +3 -1
- package/dist/types/tools/ask-answer-registry.d.ts +6 -3
- package/dist/types/tools/bash-sleep-advisory.d.ts +14 -0
- package/dist/types/tools/bash.d.ts +2 -6
- package/dist/types/tools/browser/attach.d.ts +11 -0
- package/dist/types/tools/browser/launch.d.ts +20 -0
- package/dist/types/tools/browser/profile-discovery.d.ts +6 -0
- package/dist/types/tools/browser/render.d.ts +1 -0
- package/dist/types/tools/browser.d.ts +3 -1
- package/dist/types/tools/image-gen.d.ts +10 -2
- package/dist/types/tools/index.d.ts +8 -0
- package/dist/types/tools/monitor.d.ts +1 -1
- package/dist/types/tools/skill-discovery.d.ts +8 -1
- package/dist/types/tools/subagent.d.ts +2 -0
- package/dist/types/tools/ultragoal-ask-guard.d.ts +2 -2
- package/dist/types/utils/herdr-pane.d.ts +76 -0
- package/package.json +19 -9
- package/scripts/build-binary.ts +2 -1
- package/scripts/build-sdk-package-smoke.ts +2 -13
- package/scripts/capture-sticky-viewport-showcase.ts +0 -1
- package/scripts/compile-args.ts +2 -0
- package/scripts/generate-sdk-adapter-parity-manifest.ts +31 -16
- package/scripts/generate-sdk-operation-inventory.ts +28 -0
- package/scripts/generate-telegram-baseline-manifest.ts +1 -0
- package/scripts/generate-tool-catalog.ts +6 -4
- package/scripts/verify-gjc-sdk-canonicalization.ts +5 -39
- package/src/async/job-manager.ts +352 -17
- package/src/async/support.ts +25 -0
- package/src/autoresearch/dashboard.ts +28 -13
- package/src/capability/index.ts +3 -1
- package/src/capability/mcp.ts +6 -0
- package/src/capability/types.ts +6 -0
- package/src/cli/accounts-cli.ts +395 -0
- package/src/cli/args.ts +23 -0
- package/src/cli/auth-broker-cli.ts +136 -66
- package/src/cli/auth-gateway-cli.ts +94 -70
- package/src/cli/config-cli.ts +27 -2
- package/src/cli/crash-cli.ts +78 -0
- package/src/cli/customize-doctor.ts +1605 -0
- package/src/cli/daemon-cli.ts +12 -3
- package/src/cli/fast-help.ts +1 -0
- package/src/cli/mcp-cli.ts +128 -60
- package/src/cli/notify-cli.ts +8 -14
- package/src/cli/root-flags.ts +8 -0
- package/src/cli/setup-cli.ts +145 -0
- package/src/cli/skills-cli.ts +38 -2
- package/src/cli/update-cli.ts +167 -12
- package/src/cli.ts +4 -0
- package/src/commands/accounts.ts +71 -0
- package/src/commands/crash.ts +35 -0
- package/src/commands/customize.ts +84 -0
- package/src/commands/daemon.ts +2 -2
- package/src/commands/deep-interview.ts +2 -0
- package/src/commands/launch.ts +1 -0
- package/src/commands/mcp.ts +12 -7
- package/src/commands/ralplan.ts +2 -0
- package/src/commands/sdk.ts +65 -32
- package/src/commands/setup.ts +5 -0
- package/src/commands/skills.ts +14 -4
- package/src/commands/ultragoal.ts +10 -1
- package/src/commands/update.ts +26 -15
- package/src/config/atomic-yaml-patch-worker.ts +57 -0
- package/src/config/atomic-yaml-patch.ts +769 -29
- package/src/config/config-schema-version.ts +10 -0
- package/src/config/file-lock.ts +70 -1
- package/src/config/mcp-schema.json +52 -14
- package/src/config/model-profile-activation.ts +23 -2
- package/src/config/model-profiles.ts +88 -21
- package/src/config/model-registry.ts +147 -21
- package/src/config/models-config-schema.ts +1 -1
- package/src/config/settings-schema.ts +77 -7
- package/src/config/settings.ts +4038 -199
- package/src/config/skill-settings-defaults.ts +41 -3
- package/src/config/task-delegation.ts +87 -0
- package/src/config/update-channel.ts +23 -0
- package/src/coordinator-mcp/server.ts +377 -308
- package/src/crash/index-store.ts +723 -0
- package/src/crash/nudge.ts +89 -0
- package/src/crash/record-loader.ts +149 -0
- package/src/crash/report.ts +551 -0
- package/src/crash/sanitize.ts +129 -0
- package/src/cursor.ts +36 -10
- package/src/customization/import.ts +946 -0
- package/src/customization/index.ts +4 -0
- package/src/customization/inventory.ts +335 -0
- package/src/customization/mutations.ts +141 -0
- package/src/customization/types.ts +223 -0
- package/src/daemon/control-types.ts +8 -1
- package/src/daemon/operator-contract.ts +6 -6
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/models/catalog.ts +31 -6
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +11 -22
- package/src/defaults/gjc/skills/ralplan/SKILL.md +36 -23
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +16 -0
- package/src/discovery/claude-hooks.ts +38 -0
- package/src/discovery/claude.ts +142 -209
- package/src/discovery/codex-hooks.ts +38 -0
- package/src/discovery/codex.ts +132 -198
- package/src/discovery/helpers.ts +8 -1
- package/src/discovery/index.ts +2 -0
- package/src/discovery/mcp-compat.ts +234 -0
- package/src/discovery/mcp-json.ts +6 -0
- package/src/edit/renderer.ts +40 -0
- package/src/edit/streaming.ts +4 -2
- package/src/exec/bash-executor.ts +24 -20
- package/src/export/html/index.ts +51 -2
- package/src/extensibility/extensions/loader.ts +9 -1
- package/src/extensibility/extensions/runner.ts +17 -4
- package/src/extensibility/extensions/types.ts +31 -6
- package/src/extensibility/gjc-plugins/constrained-hooks.ts +33 -0
- package/src/extensibility/gjc-plugins/installer.ts +9 -5
- package/src/extensibility/gjc-plugins/observability.ts +8 -2
- package/src/extensibility/gjc-plugins/registry.ts +13 -2
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +3 -1
- package/src/extensibility/gjc-plugins/schema.ts +222 -39
- package/src/extensibility/hooks/loader.ts +154 -10
- package/src/extensibility/runtime-skill-discovery.ts +257 -60
- package/src/extensibility/skill-management.ts +368 -0
- package/src/extensibility/skills.ts +52 -16
- package/src/gjc-runtime/deep-interview-runtime.ts +45 -61
- package/src/gjc-runtime/launch-worktree.ts +56 -2
- package/src/gjc-runtime/linux-proc.ts +7 -1
- package/src/gjc-runtime/ralplan-runtime.ts +100 -164
- package/src/gjc-runtime/session-state-lock.ts +992 -0
- package/src/gjc-runtime/session-state-sidecar.ts +644 -142
- package/src/gjc-runtime/state-writer.ts +39 -14
- package/src/gjc-runtime/tmux-owner-isolation.ts +5 -4
- package/src/gjc-runtime/ultragoal-guard.ts +11 -4
- package/src/gjc-runtime/ultragoal-runtime.ts +44 -41
- package/src/gjc-runtime/workflow-settings.ts +596 -0
- package/src/goals/tools/goal-tool.ts +6 -1
- package/src/hooks/events.ts +291 -0
- package/src/hooks/native-skill-hook.ts +4 -0
- package/src/hooks/normalize.ts +369 -0
- package/src/hooks/skill-state.ts +165 -46
- package/src/internal-urls/docs-index.generated.ts +41 -32
- package/src/main.ts +36 -5
- package/src/migrate/mcp-mapper.ts +25 -2
- package/src/modes/acp/abort-scope.ts +29 -0
- package/src/modes/acp/acp-agent.ts +423 -98
- package/src/modes/components/assistant-message.ts +6 -1
- package/src/modes/components/chrome.ts +4 -3
- package/src/modes/components/customization/customization-dashboard.ts +443 -0
- package/src/modes/components/customization/import-wizard.ts +372 -0
- package/src/modes/components/customization/index.ts +1 -0
- package/src/modes/components/dynamic-theme-text.ts +22 -0
- package/src/modes/components/gajae-pet-widget.ts +607 -193
- package/src/modes/components/irc-sidebar.ts +11 -0
- package/src/modes/components/iterm-pet-transport.ts +585 -0
- package/src/modes/components/model-selector.ts +1 -6
- package/src/modes/components/oauth-selector.ts +277 -86
- package/src/modes/components/pet-capability.ts +35 -31
- package/src/modes/components/settings-selector.ts +29 -5
- package/src/modes/components/status-line/gh.ts +45 -1
- package/src/modes/components/status-line/segments.ts +19 -4
- package/src/modes/components/tool-status-header.ts +13 -3
- package/src/modes/controllers/command-controller.ts +20 -8
- package/src/modes/controllers/extension-ui-controller.ts +56 -257
- package/src/modes/controllers/input-controller.ts +10 -0
- package/src/modes/controllers/runtime-mcp-command-controller.ts +16 -3
- package/src/modes/controllers/selector-controller.ts +238 -77
- package/src/modes/controllers/stt-controller.ts +3 -3
- package/src/modes/interactive-mode.ts +88 -16
- package/src/modes/print-mode.ts +35 -6
- package/src/modes/runtime-init.ts +21 -68
- package/src/modes/theme/defaults/index.ts +2 -0
- package/src/modes/theme/defaults/ouroboros.json +118 -0
- package/src/modes/types.ts +1 -0
- package/src/modes/utils/injected-user-submission.ts +25 -0
- package/src/modes/utils/terminal-bell.ts +15 -1
- package/src/prompts/agent-fragments/ralplan-persistence.md +1 -1
- package/src/prompts/agent-fragments/restricted-bash.md +1 -1
- package/src/prompts/agents/critic.md +1 -1
- package/src/prompts/system/rlm-research.md +1 -1
- package/src/prompts/system/system-prompt.md +0 -2
- package/src/prompts/tools/bash.md +7 -1
- package/src/prompts/tools/browser.md +1 -1
- package/src/prompts/tools/cron.md +6 -6
- package/src/prompts/tools/read.md +0 -2
- package/src/prompts/tools/skill-discovery.md +4 -2
- package/src/runtime-mcp/client.ts +427 -23
- package/src/runtime-mcp/config.ts +37 -5
- package/src/runtime-mcp/manager-pool.test.ts +56 -0
- package/src/runtime-mcp/manager.ts +52 -2
- package/src/runtime-mcp/oauth-discovery.ts +13 -0
- package/src/runtime-mcp/oauth-flow.ts +46 -1
- package/src/runtime-mcp/pool-key.ts +5 -1
- package/src/runtime-mcp/pool.test.ts +9 -0
- package/src/runtime-mcp/protocol.test.ts +353 -0
- package/src/runtime-mcp/protocol.ts +624 -0
- package/src/runtime-mcp/scope-config.ts +78 -0
- package/src/runtime-mcp/tool-bridge.ts +44 -10
- package/src/runtime-mcp/transports/http.ts +84 -13
- package/src/runtime-mcp/types.ts +123 -12
- package/src/sdk/acp/adapter.ts +328 -97
- package/src/sdk/broker/broker.ts +160 -741
- package/src/sdk/broker/ensure.ts +9 -1
- package/src/sdk/broker/lifecycle.ts +510 -116
- package/src/sdk/broker/operation-receipt-ledger.ts +11 -2
- package/src/sdk/broker/process-incarnation.ts +19 -0
- package/src/sdk/broker/session-index.ts +516 -117
- package/src/sdk/broker/startup-failure.ts +28 -5
- package/src/sdk/broker/transport.ts +1 -13
- package/src/sdk/bus/chat-daemon-cli.ts +4 -2
- package/src/sdk/bus/chat-daemon-control.ts +67 -6
- package/src/sdk/bus/chat-daemon-runtime.ts +183 -859
- package/src/sdk/bus/config.ts +13 -0
- package/src/sdk/bus/conversation-store.ts +59 -171
- package/src/sdk/bus/daemon-paths.ts +20 -0
- package/src/sdk/bus/discord-conversation.ts +2 -0
- package/src/sdk/bus/discord-daemon.ts +524 -126
- package/src/sdk/bus/discord-live-provider.ts +206 -79
- package/src/sdk/bus/existing-thread-readiness.ts +4 -97
- package/src/sdk/bus/inbound-reaction-ordering.ts +122 -0
- package/src/sdk/bus/index.ts +2480 -456
- package/src/sdk/bus/kind-aware-reconciliation.ts +204 -34
- package/src/sdk/bus/lifecycle-commands.ts +2 -2
- package/src/sdk/bus/managed-daemon.ts +2 -145
- package/src/sdk/bus/notification-service.ts +196 -0
- package/src/sdk/bus/operator-runtime.ts +1 -1
- package/src/sdk/bus/prompt-reconciliation.ts +24 -15
- package/src/sdk/bus/reconciliation-store.ts +553 -24
- package/src/sdk/bus/session-control.ts +49 -3
- package/src/sdk/bus/slack-conversation.ts +4 -0
- package/src/sdk/bus/slack-daemon.ts +733 -134
- package/src/sdk/bus/slack-live-provider.ts +65 -15
- package/src/sdk/bus/slack-provider.ts +4 -0
- package/src/sdk/bus/slack-thread-binding.ts +9 -104
- package/src/sdk/bus/telegram-adoption-intent.ts +299 -209
- package/src/sdk/bus/telegram-daemon-cli.ts +194 -7
- package/src/sdk/bus/telegram-daemon-contract.ts +265 -19
- package/src/sdk/bus/telegram-daemon-control.ts +3 -13
- package/src/sdk/bus/telegram-daemon-orphan-reap.ts +498 -0
- package/src/sdk/bus/telegram-daemon-owner-registry.ts +176 -0
- package/src/sdk/bus/telegram-daemon.ts +2552 -2280
- package/src/sdk/bus/telegram-reference.ts +1 -226
- package/src/sdk/bus/telegram-setup.ts +2 -2
- package/src/sdk/bus/threaded-render.ts +1 -0
- package/src/sdk/bus/topic-registry.ts +279 -146
- package/src/sdk/cli/rows.ts +2 -35
- package/src/sdk/cli/session-cli.ts +776 -700
- package/src/sdk/client/client.ts +892 -1
- package/src/sdk/host/control/dispatch.ts +93 -58
- package/src/sdk/host/control/index.ts +1 -1
- package/src/sdk/host/control/operations.ts +18 -10
- package/src/sdk/host/control/runtime-gate.ts +40 -0
- package/src/sdk/host/host.ts +63 -12
- package/src/sdk/host/query/handlers.ts +66 -7
- package/src/sdk/host/reverse-leases.ts +2 -2
- package/src/sdk/host/sdk-surface-parity.test.ts +1 -1
- package/src/sdk/host/session-runtime.test.ts +2787 -34
- package/src/sdk/host/session-runtime.ts +1489 -101
- package/src/sdk/host/surface-policy.ts +12 -8
- package/src/sdk/host/types.ts +1 -1
- package/src/sdk/host/websocket-transport.lifecycle.test.ts +31 -59
- package/src/sdk/host/websocket-transport.ts +85 -50
- package/src/sdk/index.ts +2 -1
- package/src/sdk/lifecycle/broker-client.ts +53 -0
- package/src/sdk/lifecycle/client.ts +234 -0
- package/src/sdk/lifecycle/index.ts +3 -0
- package/src/sdk/{bus/recent-activity.ts → lifecycle/recent-sessions.ts} +5 -2
- package/src/sdk/lifecycle/service.ts +720 -0
- package/src/sdk/mcp/server.ts +226 -188
- package/src/sdk/prompt-deadline-lease.ts +55 -0
- package/src/sdk/prompt-deadline-manager.ts +148 -0
- package/src/sdk/prompt-status.ts +11 -3
- package/src/sdk/protocol/operation-inventory.generated.json +272 -129
- package/src/sdk/protocol/operation-registry.ts +71 -8
- package/src/sdk/receipt-state.ts +43 -0
- package/src/sdk/reconciliation-extensions.ts +14 -0
- package/src/sdk/router/index.ts +1 -0
- package/src/sdk/router/session-router.ts +1658 -0
- package/src/sdk/session-list.ts +93 -0
- package/src/sdk/session-reconnect.ts +45 -1
- package/src/sdk/session.ts +716 -120
- package/src/sdk/transport/serve-cli.ts +18 -34
- package/src/session/account-inventory.ts +603 -0
- package/src/session/agent-session.ts +2873 -559
- package/src/session/agent-storage.ts +35 -0
- package/src/session/blob-store.ts +32 -1
- package/src/session/coordinator-tool-label.ts +40 -0
- package/src/session/internal/managed-session-scope.ts +4 -0
- package/src/session/internal/managed-session-storage.ts +199 -31
- package/src/session/messages.ts +1 -1
- package/src/session/secure-token-file.ts +80 -0
- package/src/session/session-manager.ts +757 -57
- package/src/session/session-storage.ts +25 -16
- package/src/session/startup-auth-config.ts +297 -0
- package/src/session/terminal-abort.ts +1253 -0
- package/src/session/yield-queue.ts +57 -15
- package/src/session-import/claude.ts +334 -0
- package/src/session-import/codex.ts +1033 -0
- package/src/session-import/command.ts +77 -0
- package/src/session-import/detect.ts +133 -0
- package/src/session-import/index.ts +7 -0
- package/src/session-import/provider-codex.ts +327 -0
- package/src/session-import/provider-service.ts +457 -0
- package/src/session-import/redact.ts +128 -0
- package/src/session-import/service.ts +1264 -0
- package/src/session-import/types.ts +148 -0
- package/src/setup/paseo/check.ts +213 -0
- package/src/setup/paseo/install-saga.ts +293 -0
- package/src/setup/paseo/json-publisher.ts +263 -0
- package/src/setup/paseo/orchestration-preferences.ts +86 -0
- package/src/setup/paseo/paseo-ownership.ts +224 -0
- package/src/setup/paseo/paseo-setup.ts +253 -0
- package/src/setup/paseo/provider-config.ts +139 -0
- package/src/setup/paseo/remove.ts +183 -0
- package/src/setup/paseo/result-types.ts +79 -0
- package/src/setup/paseo/setup-deps.ts +175 -0
- package/src/setup/paseo/skills-bridge.ts +260 -0
- package/src/skill-state/active-state.ts +21 -11
- package/src/slash-commands/acp-builtins.ts +9 -1
- package/src/slash-commands/builtin-registry.ts +117 -19
- package/src/slash-commands/helpers/credential-switch.ts +143 -0
- package/src/slash-commands/helpers/mcp.ts +9 -3
- package/src/slash-commands/helpers/usage-report.ts +61 -56
- package/src/slash-commands/types.ts +7 -2
- package/src/task/executor.ts +30 -11
- package/src/task/index.ts +66 -7
- package/src/task/render.ts +23 -9
- package/src/tools/ask-answer-registry.ts +23 -7
- package/src/tools/ask.ts +8 -4
- package/src/tools/bash-sleep-advisory.ts +115 -0
- package/src/tools/bash.ts +98 -18
- package/src/tools/browser/attach.ts +71 -3
- package/src/tools/browser/launch.ts +86 -13
- package/src/tools/browser/profile-discovery.ts +57 -7
- package/src/tools/browser/render.ts +8 -1
- package/src/tools/browser.ts +130 -21
- package/src/tools/computer.enforcement.test.ts +1 -1
- package/src/tools/computer.ts +3 -2
- package/src/tools/cron.ts +12 -1
- package/src/tools/image-gen.ts +349 -142
- package/src/tools/index.ts +8 -0
- package/src/tools/job.ts +33 -6
- package/src/tools/monitor.ts +41 -2
- package/src/tools/skill-discovery.ts +21 -29
- package/src/tools/subagent.ts +142 -24
- package/src/tools/todo-contract.ts +55 -3
- package/src/tools/todo-write.ts +4 -3
- package/src/tools/tool-catalog.generated.ts +6 -6
- package/src/tools/ultragoal-ask-guard.ts +10 -3
- package/src/utils/herdr-pane.ts +345 -0
- package/src/utils/title-generator.ts +2 -0
- package/src/web/scrapers/index.ts +6 -4
- package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
- package/dist/types/defaults/gjc-defaults.test.d.ts +0 -1
- package/dist/types/memory-backend/lazy-loading.test.d.ts +0 -1
- package/dist/types/runtime/boot-ordering.test.d.ts +0 -1
- package/dist/types/runtime/lazy-service.test.d.ts +0 -1
- package/dist/types/runtime/network-prewarm-service.test.d.ts +0 -1
- package/dist/types/runtime/workspace-tree-service.test.d.ts +0 -1
- package/dist/types/runtime-mcp/config.test.d.ts +0 -1
- package/dist/types/runtime-mcp/http.test.d.ts +0 -1
- package/dist/types/runtime-mcp/manager-pool.test.d.ts +0 -1
- package/dist/types/runtime-mcp/pool-key.test.d.ts +0 -1
- package/dist/types/runtime-mcp/pool.test.d.ts +0 -1
- package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +0 -117
- package/dist/types/sdk/bus/lifecycle-orchestrator.d.ts +0 -141
- package/dist/types/sdk/bus/telegram-cli.d.ts +0 -31
- package/dist/types/sdk/elevation/allowlist.d.ts +0 -20
- package/dist/types/sdk/elevation/audit.d.ts +0 -93
- package/dist/types/sdk/elevation/capability.d.ts +0 -3
- package/dist/types/sdk/elevation/digest.d.ts +0 -72
- package/dist/types/sdk/elevation/dispatch-receipt.d.ts +0 -85
- package/dist/types/sdk/elevation/grant-ledger.d.ts +0 -163
- package/dist/types/sdk/elevation/owner.d.ts +0 -48
- package/dist/types/sdk/host/import-graph.test.d.ts +0 -1
- package/dist/types/sdk/host/sdk-surface-parity.test.d.ts +0 -1
- package/dist/types/sdk/host/session-runtime.test.d.ts +0 -1
- package/dist/types/sdk/host/websocket-transport.lifecycle.test.d.ts +0 -1
- package/dist/types/session/auth-broker-config.d.ts +0 -13
- package/dist/types/session/heap-eviction-artifacts.test.d.ts +0 -1
- package/dist/types/skills/skills.test.d.ts +0 -1
- package/dist/types/slash-commands/notify-command.test.d.ts +0 -1
- package/dist/types/task/token-log.test.d.ts +0 -1
- package/dist/types/tools/computer.enforcement.test.d.ts +0 -1
- package/dist/types/tools/descriptors.test.d.ts +0 -1
- package/scripts/g005-daemon-smoke.ts +0 -180
- package/scripts/g011-daemon-path-smoke.ts +0 -153
- package/src/sdk/bus/lifecycle-control-runtime.ts +0 -1733
- package/src/sdk/bus/lifecycle-orchestrator.ts +0 -489
- package/src/sdk/bus/telegram-cli.ts +0 -212
- package/src/sdk/elevation/allowlist.ts +0 -54
- package/src/sdk/elevation/audit.ts +0 -208
- package/src/sdk/elevation/capability.ts +0 -41
- package/src/sdk/elevation/digest.ts +0 -129
- package/src/sdk/elevation/dispatch-receipt.ts +0 -184
- package/src/sdk/elevation/grant-ledger.ts +0 -1142
- package/src/sdk/elevation/owner.ts +0 -109
- package/src/session/auth-broker-config.ts +0 -109
- /package/dist/types/{ai-core-import-gate.test.d.ts → discovery/claude-hooks.d.ts} +0 -0
- /package/dist/types/{cli/fixture-report.test.d.ts → discovery/codex-hooks.d.ts} +0 -0
- /package/dist/types/sdk/{bus/recent-activity.d.ts → lifecycle/recent-sessions.d.ts} +0 -0
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import { SDK_STATE_VERSION } from "../broker/state-version";
|
|
2
|
-
import { type ElevationOperation } from "./digest";
|
|
3
|
-
import { type ElevationAnswerAuthority, type ElevationClaimIdentity, type ElevationDispatchOutcome, type ElevationDispatchReceipt } from "./dispatch-receipt";
|
|
4
|
-
import { type BrokerOwnerPrincipal, classifyProcessIncarnationLiveness } from "./owner";
|
|
5
|
-
/**
|
|
6
|
-
* Broker-owned elevation grant ledger.
|
|
7
|
-
*
|
|
8
|
-
* Durable state machine (per elevation request):
|
|
9
|
-
* `requested -> granted -> claimed -> dispatched(outcome)`; terminal
|
|
10
|
-
* `denied`/`expired`/`misused`/`target_unavailable`; crash truth
|
|
11
|
-
* `consumed` (claimed but outcome unknown). Grants are single-use: the claim
|
|
12
|
-
* CAS consumes the grant before dispatch, and a crash between consume and
|
|
13
|
-
* dispatch is replayed truthfully as `consumed` with outcome `unknown`
|
|
14
|
-
* (retry requires a new grant — fail closed).
|
|
15
|
-
*
|
|
16
|
-
* All mutations and reads serialize on one elevation-local
|
|
17
|
-
* `withFileLock` transaction covering grants (`grants.jsonl`), dispatch
|
|
18
|
-
* receipts (`receipts.jsonl`), the issue index (`index.json`), and the
|
|
19
|
-
* audit trail (`audit.jsonl`), so a claim, its receipt, and the issue
|
|
20
|
-
* sequence commit together.
|
|
21
|
-
*
|
|
22
|
-
* The answer boundary is internal operator-only: there is no public
|
|
23
|
-
* `elevation.answer` operation; answers are admitted only from the internal
|
|
24
|
-
* operator attestation, so requester self-approval is impossible by
|
|
25
|
-
* construction.
|
|
26
|
-
*/
|
|
27
|
-
export type ElevationGrantState = "requested" | "granted" | "claimed" | "dispatched" | "consumed" | "denied" | "expired" | "misused" | "target_unavailable";
|
|
28
|
-
export interface ElevationSessionIdentity {
|
|
29
|
-
sessionId: string;
|
|
30
|
-
/** Exact endpoint state root bound at issue time; never the repo root. */
|
|
31
|
-
endpointStateRoot: string;
|
|
32
|
-
endpointGeneration: number;
|
|
33
|
-
endpointIncarnation: string;
|
|
34
|
-
}
|
|
35
|
-
/** Audit-only requester binding; never an identity claim. */
|
|
36
|
-
export interface ElevationRequester {
|
|
37
|
-
source: "broker_connection";
|
|
38
|
-
connectionId: string;
|
|
39
|
-
}
|
|
40
|
-
export interface ElevationGrantRecord {
|
|
41
|
-
version: typeof SDK_STATE_VERSION;
|
|
42
|
-
/** Durable correlation ID; UUID, path-safe. */
|
|
43
|
-
elevationRequestId: string;
|
|
44
|
-
/** Monotonic path-safe issue sequence, allocated under the ledger lock. */
|
|
45
|
-
issueIndex: number;
|
|
46
|
-
state: ElevationGrantState;
|
|
47
|
-
operation: ElevationOperation;
|
|
48
|
-
requestDigest: string;
|
|
49
|
-
sessionIdentity: ElevationSessionIdentity;
|
|
50
|
-
principal: BrokerOwnerPrincipal;
|
|
51
|
-
requester: ElevationRequester;
|
|
52
|
-
requestedAt: number;
|
|
53
|
-
expiresAt: number;
|
|
54
|
-
outcome?: ElevationDispatchOutcome;
|
|
55
|
-
ts: number;
|
|
56
|
-
}
|
|
57
|
-
export type ElevationErrorCode = "not_found" | "invalid_input" | "idempotency_conflict" | "grant_spent" | "elevation_claim_in_progress" | "elevation_required" | "elevation_unavailable" | "elevation_not_required" | "endpoint_stale" | "target_unavailable" | "expired" | "misused" | "duplicate_answer" | "terminal_uncertain" | (string & {});
|
|
58
|
-
export type ElevationResult<T> = {
|
|
59
|
-
ok: true;
|
|
60
|
-
value: T;
|
|
61
|
-
} | {
|
|
62
|
-
ok: false;
|
|
63
|
-
error: {
|
|
64
|
-
code: ElevationErrorCode;
|
|
65
|
-
message: string;
|
|
66
|
-
};
|
|
67
|
-
};
|
|
68
|
-
export interface ElevationIssueParams {
|
|
69
|
-
/** Optional caller-supplied correlation ID for idempotent retry; the broker generates a UUID otherwise. */
|
|
70
|
-
elevationRequestId?: string;
|
|
71
|
-
operation: ElevationOperation;
|
|
72
|
-
input: Record<string, unknown>;
|
|
73
|
-
sessionIdentity: ElevationSessionIdentity;
|
|
74
|
-
principal: BrokerOwnerPrincipal;
|
|
75
|
-
requester: ElevationRequester;
|
|
76
|
-
expiresInMs?: number;
|
|
77
|
-
}
|
|
78
|
-
export interface ElevationIssueValue {
|
|
79
|
-
replay: boolean;
|
|
80
|
-
elevationRequestId: string;
|
|
81
|
-
issueIndex: number;
|
|
82
|
-
requestDigest: string;
|
|
83
|
-
state: ElevationGrantState;
|
|
84
|
-
requestedAt: number;
|
|
85
|
-
expiresAt: number;
|
|
86
|
-
grant: ElevationGrantRecord;
|
|
87
|
-
}
|
|
88
|
-
export interface ElevationAnswerParams {
|
|
89
|
-
elevationRequestId: string;
|
|
90
|
-
answer: "approve" | "deny";
|
|
91
|
-
/** Digest the answering surface presented from the gate payload. */
|
|
92
|
-
presentedDigest: string;
|
|
93
|
-
/** Broker-owner principal attesting the answer authority. */
|
|
94
|
-
principal: BrokerOwnerPrincipal;
|
|
95
|
-
answerer: ElevationAnswerAuthority;
|
|
96
|
-
/** Current broker-resolved target identity; undefined means the session is unreachable. */
|
|
97
|
-
currentSessionIdentity?: ElevationSessionIdentity;
|
|
98
|
-
}
|
|
99
|
-
export type ElevationAnswerOutcome = "granted" | "denied" | "expired" | "misused" | "target_unavailable" | "duplicate_answer";
|
|
100
|
-
export interface ElevationAnswerValue {
|
|
101
|
-
outcome: ElevationAnswerOutcome;
|
|
102
|
-
grant: ElevationGrantRecord;
|
|
103
|
-
}
|
|
104
|
-
export interface ElevationClaimParams {
|
|
105
|
-
elevationRequestId: string;
|
|
106
|
-
claimIdentity: ElevationClaimIdentity;
|
|
107
|
-
/** Current broker-resolved target identity; undefined means the session is unreachable. */
|
|
108
|
-
currentSessionIdentity?: ElevationSessionIdentity;
|
|
109
|
-
}
|
|
110
|
-
export interface ElevationClaimValue {
|
|
111
|
-
grant: ElevationGrantRecord;
|
|
112
|
-
receipt: ElevationDispatchReceipt;
|
|
113
|
-
}
|
|
114
|
-
export interface ElevationDispatchParams {
|
|
115
|
-
elevationRequestId: string;
|
|
116
|
-
dispatchIdentity: ElevationClaimIdentity;
|
|
117
|
-
outcome: ElevationDispatchOutcome;
|
|
118
|
-
}
|
|
119
|
-
export interface ElevationDispatchValue {
|
|
120
|
-
grant: ElevationGrantRecord;
|
|
121
|
-
receipt: ElevationDispatchReceipt;
|
|
122
|
-
}
|
|
123
|
-
export interface ElevationReadValue {
|
|
124
|
-
grant: ElevationGrantRecord;
|
|
125
|
-
receipt?: ElevationDispatchReceipt;
|
|
126
|
-
}
|
|
127
|
-
export interface ElevationListValue {
|
|
128
|
-
grants: ElevationReadValue[];
|
|
129
|
-
}
|
|
130
|
-
export interface ElevationLedgerOptions {
|
|
131
|
-
/** Defaults to the GJC_SDK_ELEVATION_ENABLED environment flag. */
|
|
132
|
-
enabled?: boolean;
|
|
133
|
-
/** Request lifetime before the grant expires. */
|
|
134
|
-
ttlMs?: number;
|
|
135
|
-
/** Injectable clock. */
|
|
136
|
-
now?: () => number;
|
|
137
|
-
/**
|
|
138
|
-
* Injectable tri-state process-incarnation liveness classifier (defaults to
|
|
139
|
-
* `classifyProcessIncarnationLiveness`). Test seam for crash-state replay:
|
|
140
|
-
* "unknown" must always fail closed as `elevation_claim_in_progress`.
|
|
141
|
-
*/
|
|
142
|
-
classifyLiveness?: typeof classifyProcessIncarnationLiveness;
|
|
143
|
-
}
|
|
144
|
-
declare function isElevationOperation(value: unknown): value is ElevationOperation;
|
|
145
|
-
declare function isElevationGrantRecord(value: unknown): value is ElevationGrantRecord;
|
|
146
|
-
export declare class ElevationLedger {
|
|
147
|
-
#private;
|
|
148
|
-
constructor(agentDir: string, options?: ElevationLedgerOptions);
|
|
149
|
-
get warnings(): readonly string[];
|
|
150
|
-
open(): Promise<this>;
|
|
151
|
-
assertSupportedStateVersions(): Promise<void>;
|
|
152
|
-
issue(params: ElevationIssueParams): Promise<ElevationResult<ElevationIssueValue>>;
|
|
153
|
-
answer(params: ElevationAnswerParams): Promise<ElevationResult<ElevationAnswerValue>>;
|
|
154
|
-
claim(params: ElevationClaimParams): Promise<ElevationResult<ElevationClaimValue>>;
|
|
155
|
-
dispatch(params: ElevationDispatchParams): Promise<ElevationResult<ElevationDispatchValue>>;
|
|
156
|
-
/** Pure read without reconciliation writes; used before actions. */
|
|
157
|
-
get(elevationRequestId: string): Promise<ElevationResult<ElevationReadValue>>;
|
|
158
|
-
/** Truthful read: reconciles expiry and crash-state claims before returning. */
|
|
159
|
-
resolve(elevationRequestId: string, claimIdentity: ElevationClaimIdentity): Promise<ElevationResult<ElevationReadValue>>;
|
|
160
|
-
/** Truthful listing: reconciles every grant before returning. */
|
|
161
|
-
list(claimIdentity: ElevationClaimIdentity): Promise<ElevationResult<ElevationListValue>>;
|
|
162
|
-
}
|
|
163
|
-
export { isElevationGrantRecord, isElevationOperation };
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Broker-owner principal.
|
|
3
|
-
*
|
|
4
|
-
* The elevation authority is the broker itself under the existing loopback
|
|
5
|
-
* trust model: one local OS-user/broker authority derived entirely from
|
|
6
|
-
* broker-owned state, never from caller input. `agentDirUid` is the uid that
|
|
7
|
-
* owns the agent directory, `brokerPid`/`brokerIncarnation` identify the
|
|
8
|
-
* broker process tenure so a restarted broker cannot attest the same
|
|
9
|
-
* authority.
|
|
10
|
-
*/
|
|
11
|
-
export interface BrokerOwnerPrincipal {
|
|
12
|
-
kind: "broker_owner";
|
|
13
|
-
owner: {
|
|
14
|
-
agentDirUid: number;
|
|
15
|
-
brokerPid: number;
|
|
16
|
-
brokerIncarnation: string;
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export declare function isBrokerOwnerPrincipal(value: unknown): value is BrokerOwnerPrincipal;
|
|
20
|
-
export declare function sameBrokerOwnerPrincipal(left: BrokerOwnerPrincipal, right: BrokerOwnerPrincipal): boolean;
|
|
21
|
-
/**
|
|
22
|
-
* Reads the broker-owner principal from broker-owned state. Throws when the
|
|
23
|
-
* broker cannot attest a canonical process incarnation (the broker refuses to
|
|
24
|
-
* start in that case anyway), so callers treat a throw as "authority
|
|
25
|
-
* unavailable".
|
|
26
|
-
*/
|
|
27
|
-
export declare function readBrokerOwnerPrincipal(agentDir: string, brokerPid: number, brokerIncarnation: string): Promise<BrokerOwnerPrincipal>;
|
|
28
|
-
export type ProcessIncarnationLiveness = "alive" | "dead" | "unknown";
|
|
29
|
-
/**
|
|
30
|
-
* Tri-state liveness of a process incarnation.
|
|
31
|
-
*
|
|
32
|
-
* - `alive`: the pid is running and its current incarnation matches the
|
|
33
|
-
* stored one, so the original process tenure is still live.
|
|
34
|
-
* - `dead`: ESRCH (the pid is provably gone — independent of any persisted
|
|
35
|
-
* incarnation text), or the pid is running under a *different* canonical
|
|
36
|
-
* incarnation (PID reuse), which provably means the original process
|
|
37
|
-
* ended.
|
|
38
|
-
* - `unknown`: the pid is malformed, the persisted or observed incarnation
|
|
39
|
-
* is malformed/undefined, or the current incarnation cannot be read.
|
|
40
|
-
* Unknown never implies death: elevation claims must fail closed with
|
|
41
|
-
* `elevation_claim_in_progress` instead of terminalizing state on
|
|
42
|
-
* unprovable liveness.
|
|
43
|
-
*
|
|
44
|
-
* ESRCH is independent positive death proof: a pid that provably does not
|
|
45
|
-
* exist is dead regardless of the persisted incarnation text, so a corrupt
|
|
46
|
-
* persisted incarnation can never stall recovery forever.
|
|
47
|
-
*/
|
|
48
|
-
export declare function classifyProcessIncarnationLiveness(pid: unknown, incarnation: unknown): ProcessIncarnationLiveness;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export interface AuthBrokerClientConfig {
|
|
2
|
-
url: string;
|
|
3
|
-
token: string;
|
|
4
|
-
}
|
|
5
|
-
/** Path to the local bearer token file. Created on the broker host by `gjc auth-broker token`. */
|
|
6
|
-
export declare function getAuthBrokerTokenFilePath(): string;
|
|
7
|
-
/**
|
|
8
|
-
* Read broker configuration. Returns null when the URL is missing
|
|
9
|
-
* (broker disabled — local store is used). Throws when URL is set but no
|
|
10
|
-
* token is available — the caller cannot fall back silently because the
|
|
11
|
-
* user explicitly asked to use the broker.
|
|
12
|
-
*/
|
|
13
|
-
export declare function resolveAuthBrokerConfig(): Promise<AuthBrokerClientConfig | null>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
// G005 real end-to-end daemon-orchestration smoke.
|
|
2
|
-
//
|
|
3
|
-
// Drives the lifecycle orchestrator's create -> close path with REAL effects:
|
|
4
|
-
// a real fsynced file-backed idempotency ledger, a real audit JSONL, and a real
|
|
5
|
-
// tmux session spawned/closed via the actual tmux helpers. Proves the daemon
|
|
6
|
-
// orchestration turns a `session_create` frame into a genuinely-spawned,
|
|
7
|
-
// GJC-tagged tmux session and a `session_close` frame into a real hard-close,
|
|
8
|
-
// with idempotent re-ack. Not part of the unit suite.
|
|
9
|
-
import assert from "node:assert";
|
|
10
|
-
import * as fs from "node:fs";
|
|
11
|
-
import * as os from "node:os";
|
|
12
|
-
import * as path from "node:path";
|
|
13
|
-
|
|
14
|
-
import {
|
|
15
|
-
buildGjcTmuxExactOptionTarget,
|
|
16
|
-
buildGjcTmuxProfileCommands,
|
|
17
|
-
resolveGjcTmuxCommand,
|
|
18
|
-
} from "../src/gjc-runtime/tmux-common";
|
|
19
|
-
import { forceCloseGjcTmuxSession, statusGjcTmuxSession } from "../src/gjc-runtime/tmux-sessions";
|
|
20
|
-
import type { SessionCloseFrame, SessionCreateFrame } from "../src/sdk/bus/index";
|
|
21
|
-
import {
|
|
22
|
-
type AuditEvent,
|
|
23
|
-
handleLifecycleRequest,
|
|
24
|
-
type LedgerDoc,
|
|
25
|
-
type LedgerStore,
|
|
26
|
-
type OrchestratorDeps,
|
|
27
|
-
} from "../src/sdk/bus/lifecycle-orchestrator";
|
|
28
|
-
|
|
29
|
-
const tmux = resolveGjcTmuxCommand(process.env);
|
|
30
|
-
const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), "gjc-g005-"));
|
|
31
|
-
const ledgerPath = path.join(tmpRoot, "idempotency.json");
|
|
32
|
-
const auditPath = path.join(tmpRoot, "audit.jsonl");
|
|
33
|
-
const created: string[] = [];
|
|
34
|
-
|
|
35
|
-
function sh(args: string[]): number {
|
|
36
|
-
return Bun.spawnSync([tmux, ...args], { stdout: "pipe", stderr: "pipe" }).exitCode;
|
|
37
|
-
}
|
|
38
|
-
function exists(name: string): boolean {
|
|
39
|
-
return sh(["has-session", "-t", `=${name}`]) === 0;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Real fsynced + atomic file ledger store.
|
|
43
|
-
const store: LedgerStore = {
|
|
44
|
-
async read(): Promise<LedgerDoc> {
|
|
45
|
-
try {
|
|
46
|
-
return JSON.parse(fs.readFileSync(ledgerPath, "utf8")) as LedgerDoc;
|
|
47
|
-
} catch {
|
|
48
|
-
return { version: 1, entries: {} };
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
async write(doc: LedgerDoc): Promise<void> {
|
|
52
|
-
const tmp = `${ledgerPath}.${process.pid}.tmp`;
|
|
53
|
-
const fd = fs.openSync(tmp, "w", 0o600);
|
|
54
|
-
fs.writeSync(fd, JSON.stringify(doc));
|
|
55
|
-
fs.fsyncSync(fd);
|
|
56
|
-
fs.closeSync(fd);
|
|
57
|
-
fs.renameSync(tmp, ledgerPath);
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
const auditLines: AuditEvent[] = [];
|
|
62
|
-
const deps: OrchestratorDeps = {
|
|
63
|
-
pairedChatId: "42",
|
|
64
|
-
auditRedactionKey: new Uint8Array(32).fill(5),
|
|
65
|
-
isPsmuxProvider: () => false,
|
|
66
|
-
now: () => Date.now(),
|
|
67
|
-
store,
|
|
68
|
-
audit: e => {
|
|
69
|
-
auditLines.push(e);
|
|
70
|
-
fs.appendFileSync(auditPath, `${JSON.stringify(e)}\n`, { mode: 0o600 });
|
|
71
|
-
},
|
|
72
|
-
allowCreate: () => true,
|
|
73
|
-
writeStartupPrompt: async (requestId, prompt) => {
|
|
74
|
-
if (prompt === undefined) return undefined;
|
|
75
|
-
const ref = path.join(tmpRoot, `prompt-${requestId}`);
|
|
76
|
-
const fd = fs.openSync(ref, "w", 0o600);
|
|
77
|
-
fs.writeSync(fd, prompt);
|
|
78
|
-
fs.fsyncSync(fd);
|
|
79
|
-
fs.closeSync(fd);
|
|
80
|
-
return ref;
|
|
81
|
-
},
|
|
82
|
-
// REAL spawn: create a GJC-tagged tmux session carrying the authoritative id.
|
|
83
|
-
spawnCreate: async (_frame, ids) => {
|
|
84
|
-
const name = `gjc_g005_${ids.intendedSessionId}`;
|
|
85
|
-
created.push(name);
|
|
86
|
-
if (sh(["new-session", "-d", "-s", name, "sleep 600"]) !== 0) {
|
|
87
|
-
throw new Error(`tmux spawn failed for ${name}`);
|
|
88
|
-
}
|
|
89
|
-
const target = buildGjcTmuxExactOptionTarget(name);
|
|
90
|
-
for (const cmd of buildGjcTmuxProfileCommands(target, process.env, {
|
|
91
|
-
sessionId: ids.intendedSessionId,
|
|
92
|
-
})) {
|
|
93
|
-
if (sh(cmd.args) !== 0) throw new Error(`tag failed for ${name}`);
|
|
94
|
-
}
|
|
95
|
-
return {
|
|
96
|
-
sessionId: ids.intendedSessionId,
|
|
97
|
-
tmuxSession: name,
|
|
98
|
-
endpointUrl: "ws://127.0.0.1:0",
|
|
99
|
-
topicThreadId: "1",
|
|
100
|
-
};
|
|
101
|
-
},
|
|
102
|
-
// REAL close: hard-close the GJC-managed tmux session, id-matched.
|
|
103
|
-
closeSession: async target => {
|
|
104
|
-
forceCloseGjcTmuxSession(target.tmuxSession ?? "", process.env, target.sessionId);
|
|
105
|
-
return { processGone: !exists(target.tmuxSession ?? "") };
|
|
106
|
-
},
|
|
107
|
-
resumeSession: async () => ({ ambiguous: [] }),
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
const createFrame: SessionCreateFrame = {
|
|
111
|
-
type: "session_create",
|
|
112
|
-
requestId: "lc_g005",
|
|
113
|
-
lifecycleRequestId: "lc_g005",
|
|
114
|
-
intendedSessionId: `g005${Date.now().toString(36)}`,
|
|
115
|
-
updateId: 100,
|
|
116
|
-
chatId: "42",
|
|
117
|
-
token: "control-token",
|
|
118
|
-
target: { kind: "existing_path", path: tmpRoot },
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
async function main(): Promise<void> {
|
|
122
|
-
// 1. CREATE -> real tmux session spawned + GJC-tagged with the authoritative id.
|
|
123
|
-
const createOut = await handleLifecycleRequest(createFrame, deps);
|
|
124
|
-
assert.equal(createOut.status, "ok", "create must succeed");
|
|
125
|
-
const session = createOut.status === "ok" ? createOut.entry.tmuxSession! : "";
|
|
126
|
-
assert.ok(exists(session), "real tmux session must exist after create");
|
|
127
|
-
const status = statusGjcTmuxSession(session);
|
|
128
|
-
assert.equal(status.profile, "1", "spawned session must be GJC-managed");
|
|
129
|
-
assert.equal(status.sessionId, createFrame.intendedSessionId, "authoritative session id propagated to tmux tag");
|
|
130
|
-
console.log(`[g005] CREATE -> live tmux session ${session} (id=${status.sessionId})`);
|
|
131
|
-
|
|
132
|
-
// 2. Idempotent re-ack: same updateId+body must NOT spawn a second session.
|
|
133
|
-
const before = created.length;
|
|
134
|
-
const dupOut = await handleLifecycleRequest(createFrame, deps);
|
|
135
|
-
assert.equal(dupOut.status, "ok", "duplicate create re-acks ok");
|
|
136
|
-
assert.equal(created.length, before, "duplicate create must NOT spawn a second session");
|
|
137
|
-
console.log("[g005] DUPLICATE create re-acked, no second spawn (idempotent)");
|
|
138
|
-
|
|
139
|
-
// 3. CLOSE -> real hard-close of the GJC-managed session, id-matched.
|
|
140
|
-
const closeFrame: SessionCloseFrame = {
|
|
141
|
-
type: "session_close",
|
|
142
|
-
requestId: "lc_g005_close",
|
|
143
|
-
updateId: 101,
|
|
144
|
-
chatId: "42",
|
|
145
|
-
token: "control-token",
|
|
146
|
-
target: { sessionId: createFrame.intendedSessionId, tmuxSession: session },
|
|
147
|
-
force: true,
|
|
148
|
-
};
|
|
149
|
-
const closeOut = await handleLifecycleRequest(closeFrame, deps);
|
|
150
|
-
assert.equal(closeOut.status, "ok", "close must succeed");
|
|
151
|
-
assert.ok(!exists(session), "real tmux session must be gone after close");
|
|
152
|
-
console.log(`[g005] CLOSE -> hard-closed ${session} (id-matched)`);
|
|
153
|
-
|
|
154
|
-
// 4. Durable ledger + audit redaction.
|
|
155
|
-
const doc = JSON.parse(fs.readFileSync(ledgerPath, "utf8")) as LedgerDoc;
|
|
156
|
-
assert.equal(doc.entries["42:100"]?.state, "success");
|
|
157
|
-
assert.equal(doc.entries["42:101"]?.state, "success");
|
|
158
|
-
const auditBlob = fs.readFileSync(auditPath, "utf8");
|
|
159
|
-
assert.ok(!auditBlob.includes("control-token"), "audit must never contain the control token");
|
|
160
|
-
assert.ok(
|
|
161
|
-
auditLines.some(a => a.event === "spawn_started"),
|
|
162
|
-
"audit records spawn_started",
|
|
163
|
-
);
|
|
164
|
-
console.log("[g005] durable fsynced ledger + token-redacted audit verified");
|
|
165
|
-
|
|
166
|
-
console.log("[g005] PASS: real create->close daemon orchestration over live tmux");
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
main()
|
|
170
|
-
.then(() => {
|
|
171
|
-
for (const n of created) sh(["kill-session", "-t", `=${n}`]);
|
|
172
|
-
fs.rmSync(tmpRoot, { recursive: true, force: true });
|
|
173
|
-
process.exit(0);
|
|
174
|
-
})
|
|
175
|
-
.catch(err => {
|
|
176
|
-
for (const n of created) sh(["kill-session", "-t", `=${n}`]);
|
|
177
|
-
fs.rmSync(tmpRoot, { recursive: true, force: true });
|
|
178
|
-
console.error("[g005] FAIL", err);
|
|
179
|
-
process.exit(1);
|
|
180
|
-
});
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
// G011 real daemon-path smoke.
|
|
2
|
-
//
|
|
3
|
-
// Drives a PARSED /session_* command through the LIVE native
|
|
4
|
-
// NotificationControlServer + a real loopback WebSocket client (NO injected/fake
|
|
5
|
-
// seams), wired to the real orchestrator (with stubbed spawn/close effects so the
|
|
6
|
-
// focus is the authenticated wire path, not tmux). Asserts:
|
|
7
|
-
// - a wrong-token handshake is rejected (control token gates the endpoint);
|
|
8
|
-
// - a valid frame is forwarded with the control token STRIPPED from payloadJson;
|
|
9
|
-
// - the host response is routed back to the client by requestId;
|
|
10
|
-
// - control discovery exists while running and is removed after stop.
|
|
11
|
-
import assert from "node:assert";
|
|
12
|
-
import * as crypto from "node:crypto";
|
|
13
|
-
import * as fs from "node:fs";
|
|
14
|
-
import * as os from "node:os";
|
|
15
|
-
import * as path from "node:path";
|
|
16
|
-
import WebSocket from "ws";
|
|
17
|
-
|
|
18
|
-
// Import the WORKTREE native build directly (not @gajae-code/natives, which can
|
|
19
|
-
// resolve to a different checkout in this dev environment).
|
|
20
|
-
import { NotificationControlServer } from "../../natives/native/index.js";
|
|
21
|
-
import { parseLifecycleCommand } from "../src/sdk/bus/lifecycle-commands";
|
|
22
|
-
import { attachLifecycleControl, fileAudit, fileLedgerStore } from "../src/sdk/bus/lifecycle-control-runtime";
|
|
23
|
-
import type { OrchestratorDeps } from "../src/sdk/bus/lifecycle-orchestrator";
|
|
24
|
-
|
|
25
|
-
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "gjc-g011-"));
|
|
26
|
-
const token = crypto.randomBytes(32).toString("base64url");
|
|
27
|
-
const ownerId = "daemon-g011";
|
|
28
|
-
const closed: string[] = [];
|
|
29
|
-
|
|
30
|
-
function deps(): OrchestratorDeps {
|
|
31
|
-
return {
|
|
32
|
-
pairedChatId: "42",
|
|
33
|
-
auditRedactionKey: new Uint8Array(32).fill(11),
|
|
34
|
-
isPsmuxProvider: () => false,
|
|
35
|
-
now: () => Date.now(),
|
|
36
|
-
store: fileLedgerStore(path.join(tmp, "idempotency.json")),
|
|
37
|
-
audit: fileAudit(path.join(tmp, "audit.jsonl")),
|
|
38
|
-
allowCreate: () => true,
|
|
39
|
-
writeStartupPrompt: async () => undefined,
|
|
40
|
-
// Stubbed effects: this smoke proves the WIRE path, not tmux (covered by g005).
|
|
41
|
-
spawnCreate: async (_f, ids) => ({
|
|
42
|
-
sessionId: ids.intendedSessionId,
|
|
43
|
-
tmuxSession: `gjc-${ids.intendedSessionId}`,
|
|
44
|
-
endpointUrl: "ws://127.0.0.1:0",
|
|
45
|
-
topicThreadId: "1",
|
|
46
|
-
}),
|
|
47
|
-
closeSession: async t => {
|
|
48
|
-
closed.push(t.sessionId);
|
|
49
|
-
return { processGone: true };
|
|
50
|
-
},
|
|
51
|
-
resumeSession: async () => ({ ambiguous: [] }),
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function send(ws: WebSocket, frame: unknown): void {
|
|
56
|
-
ws.send(JSON.stringify(frame));
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
async function main(): Promise<void> {
|
|
60
|
-
const server = new NotificationControlServer(token, ownerId, tmp);
|
|
61
|
-
|
|
62
|
-
// Wire the real orchestrator to the real native control server.
|
|
63
|
-
const d = deps();
|
|
64
|
-
attachLifecycleControl(server as never, d);
|
|
65
|
-
|
|
66
|
-
const ep = (await server.start()) as { url: string };
|
|
67
|
-
assert.ok(ep.url.startsWith("ws://127.0.0.1:"), `loopback url, got ${ep.url}`);
|
|
68
|
-
const controlJson = path.join(tmp, "notifications", "control.json");
|
|
69
|
-
assert.ok(fs.existsSync(controlJson), "control discovery must exist while running");
|
|
70
|
-
// The control discovery file MUST NOT persist the privileged control token:
|
|
71
|
-
// the daemon holds it in memory and is the only client.
|
|
72
|
-
const controlRaw = fs.readFileSync(controlJson, "utf8");
|
|
73
|
-
assert.ok(!controlRaw.includes(token), "control token MUST NOT be persisted in control.json");
|
|
74
|
-
assert.ok(
|
|
75
|
-
!("token" in (JSON.parse(controlRaw) as Record<string, unknown>)),
|
|
76
|
-
"control.json must omit any token field",
|
|
77
|
-
);
|
|
78
|
-
console.log(`[g011] live control endpoint ${ep.url}; discovery present, no persisted token`);
|
|
79
|
-
|
|
80
|
-
// 1. Wrong-token handshake must be rejected.
|
|
81
|
-
await new Promise<void>(resolve => {
|
|
82
|
-
const bad = new WebSocket(`${ep.url}/?token=wrong`);
|
|
83
|
-
bad.on("open", () => {
|
|
84
|
-
throw new Error("wrong-token handshake must NOT open");
|
|
85
|
-
});
|
|
86
|
-
bad.on("error", () => {
|
|
87
|
-
console.log("[g011] wrong-token handshake rejected (expected)");
|
|
88
|
-
resolve();
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
// 2. Valid client: send a PARSED /session_close command through the real wire.
|
|
93
|
-
const parsed = parseLifecycleCommand("/session_close sess-g011");
|
|
94
|
-
assert.equal(parsed.kind, "close", "parser must yield a close command");
|
|
95
|
-
const requestId = "lc-g011-1";
|
|
96
|
-
const frame = {
|
|
97
|
-
type: "session_close",
|
|
98
|
-
requestId,
|
|
99
|
-
updateId: 1,
|
|
100
|
-
chatId: "42",
|
|
101
|
-
token,
|
|
102
|
-
target: parsed.kind === "close" ? parsed.target : { sessionId: "sess-g011" },
|
|
103
|
-
force: true,
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
const response = await new Promise<Record<string, unknown>>((resolve, reject) => {
|
|
107
|
-
const ws = new WebSocket(`${ep.url}/?token=${token}`);
|
|
108
|
-
const timer = setTimeout(() => reject(new Error("timed out")), 5000);
|
|
109
|
-
ws.on("open", () => send(ws, frame));
|
|
110
|
-
ws.on("message", data => {
|
|
111
|
-
clearTimeout(timer);
|
|
112
|
-
ws.close();
|
|
113
|
-
resolve(JSON.parse(String(data)) as Record<string, unknown>);
|
|
114
|
-
});
|
|
115
|
-
ws.on("error", reject);
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
assert.equal(response.type, "session_close_response", "response routed back to client");
|
|
119
|
-
assert.equal(response.requestId, requestId, "response correlated by requestId");
|
|
120
|
-
assert.equal(response.sessionId, "sess-g011");
|
|
121
|
-
assert.deepEqual(closed, ["sess-g011"], "orchestrator close effect ran exactly once");
|
|
122
|
-
console.log("[g011] parsed command -> real wire -> orchestrator -> routed response OK");
|
|
123
|
-
|
|
124
|
-
// 3. The real orchestrator path must NOT leak the control token into its
|
|
125
|
-
// durable audit log or idempotency ledger (g002 separately proves the native
|
|
126
|
-
// payloadJson boundary is token-stripped).
|
|
127
|
-
for (const f of ["audit.jsonl", "idempotency.json"]) {
|
|
128
|
-
const p = path.join(tmp, f);
|
|
129
|
-
if (fs.existsSync(p)) {
|
|
130
|
-
assert.ok(!fs.readFileSync(p, "utf8").includes(token), `control token leaked into ${f}`);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
console.log("[g011] no control-token leak in audit/ledger on the real path");
|
|
134
|
-
|
|
135
|
-
// 4. Stop removes control discovery.
|
|
136
|
-
server.stop();
|
|
137
|
-
await new Promise(r => setTimeout(r, 50));
|
|
138
|
-
assert.ok(!fs.existsSync(controlJson), "control discovery removed after stop");
|
|
139
|
-
console.log("[g011] control discovery removed after stop");
|
|
140
|
-
|
|
141
|
-
console.log("[g011] PASS: real daemon-path (parse -> native control endpoint -> orchestrator -> reply)");
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
main()
|
|
145
|
-
.then(() => {
|
|
146
|
-
fs.rmSync(tmp, { recursive: true, force: true });
|
|
147
|
-
process.exit(0);
|
|
148
|
-
})
|
|
149
|
-
.catch(err => {
|
|
150
|
-
fs.rmSync(tmp, { recursive: true, force: true });
|
|
151
|
-
console.error("[g011] FAIL", err);
|
|
152
|
-
process.exit(1);
|
|
153
|
-
});
|