@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
|
@@ -50,7 +50,7 @@ export interface SlackLiveProviderOptions {
|
|
|
50
50
|
fetch?: (input: string, init?: RequestInit) => Promise<Response>;
|
|
51
51
|
webSocket?: (url: string) => SlackWebSocket;
|
|
52
52
|
now?: () => number;
|
|
53
|
-
sleep?: (milliseconds: number) => Promise<void>;
|
|
53
|
+
sleep?: (milliseconds: number, signal?: AbortSignal) => Promise<void>;
|
|
54
54
|
reconnectDelayMs?: number;
|
|
55
55
|
maxRateLimitRetries?: number;
|
|
56
56
|
maxRetryAfterMs?: number;
|
|
@@ -93,6 +93,27 @@ function retryAfterMilliseconds(response: Response, body: SlackApiResponse, maxi
|
|
|
93
93
|
return Math.min(Math.max(0, Number.isFinite(seconds) ? seconds * 1_000 : 1_000), maximum);
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
+
async function sleep(milliseconds: number, signal?: AbortSignal): Promise<void> {
|
|
97
|
+
if (!signal) {
|
|
98
|
+
await Bun.sleep(milliseconds);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
signal.throwIfAborted();
|
|
102
|
+
const settled = Promise.withResolvers<void>();
|
|
103
|
+
const timer = setTimeout(settled.resolve, milliseconds);
|
|
104
|
+
const abort = (): void => {
|
|
105
|
+
clearTimeout(timer);
|
|
106
|
+
settled.reject(signal.reason);
|
|
107
|
+
};
|
|
108
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
109
|
+
try {
|
|
110
|
+
await settled.promise;
|
|
111
|
+
} finally {
|
|
112
|
+
clearTimeout(timer);
|
|
113
|
+
signal.removeEventListener("abort", abort);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
96
117
|
function socketFromGlobal(url: string): SlackWebSocket {
|
|
97
118
|
return new WebSocket(url);
|
|
98
119
|
}
|
|
@@ -118,7 +139,7 @@ export class SlackLiveProvider implements SlackProviderClient, SlackDiagnosticPr
|
|
|
118
139
|
readonly #fetch: (input: string, init?: RequestInit) => Promise<Response>;
|
|
119
140
|
readonly #webSocket: (url: string) => SlackWebSocket;
|
|
120
141
|
readonly #now: () => number;
|
|
121
|
-
readonly #sleep: (milliseconds: number) => Promise<void>;
|
|
142
|
+
readonly #sleep: (milliseconds: number, signal?: AbortSignal) => Promise<void>;
|
|
122
143
|
readonly #reconnectDelayMs: number;
|
|
123
144
|
readonly #maxRateLimitRetries: number;
|
|
124
145
|
readonly #maxRetryAfterMs: number;
|
|
@@ -148,8 +169,7 @@ export class SlackLiveProvider implements SlackProviderClient, SlackDiagnosticPr
|
|
|
148
169
|
this.#fetch = options.fetch ?? fetch;
|
|
149
170
|
this.#webSocket = options.webSocket ?? socketFromGlobal;
|
|
150
171
|
this.#now = options.now ?? Date.now;
|
|
151
|
-
this.#sleep =
|
|
152
|
-
options.sleep ?? (async milliseconds => await new Promise<void>(resolve => setTimeout(resolve, milliseconds)));
|
|
172
|
+
this.#sleep = options.sleep ?? sleep;
|
|
153
173
|
this.#reconnectDelayMs = Math.max(0, options.reconnectDelayMs ?? DEFAULT_RECONNECT_DELAY_MS);
|
|
154
174
|
this.#maxRateLimitRetries = Math.max(0, options.maxRateLimitRetries ?? MAX_RATE_LIMIT_RETRIES);
|
|
155
175
|
this.#maxRetryAfterMs = Math.max(0, options.maxRetryAfterMs ?? MAX_RETRY_AFTER_MS);
|
|
@@ -255,13 +275,18 @@ export class SlackLiveProvider implements SlackProviderClient, SlackDiagnosticPr
|
|
|
255
275
|
text: string;
|
|
256
276
|
threadTs?: string;
|
|
257
277
|
clientMsgId: string;
|
|
278
|
+
signal?: AbortSignal;
|
|
258
279
|
}): Promise<SlackPostedMessage> {
|
|
259
|
-
const response = await this.#api(
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
280
|
+
const response = await this.#api(
|
|
281
|
+
"chat.postMessage",
|
|
282
|
+
{
|
|
283
|
+
channel: input.channel,
|
|
284
|
+
text: input.text,
|
|
285
|
+
thread_ts: input.threadTs,
|
|
286
|
+
client_msg_id: input.clientMsgId,
|
|
287
|
+
},
|
|
288
|
+
input.signal,
|
|
289
|
+
);
|
|
265
290
|
const message = this.#message(response);
|
|
266
291
|
// A successful HTTP response without a usable receipt can still represent a
|
|
267
292
|
// remote acceptance. The daemon must reconcile by client_msg_id before retrying.
|
|
@@ -273,11 +298,16 @@ export class SlackLiveProvider implements SlackProviderClient, SlackDiagnosticPr
|
|
|
273
298
|
channel: string;
|
|
274
299
|
clientMsgId: string;
|
|
275
300
|
threadTs?: string;
|
|
301
|
+
signal?: AbortSignal;
|
|
276
302
|
}): Promise<SlackMessageSearchResult | null> {
|
|
277
|
-
const response = await this.#api("conversations.history", { channel: input.channel });
|
|
303
|
+
const response = await this.#api("conversations.history", { channel: input.channel }, input.signal);
|
|
278
304
|
const fromHistory = this.#findMessage(response, input.clientMsgId, input.channel);
|
|
279
305
|
if (fromHistory || !input.threadTs) return fromHistory;
|
|
280
|
-
const replies = await this.#api(
|
|
306
|
+
const replies = await this.#api(
|
|
307
|
+
"conversations.replies",
|
|
308
|
+
{ channel: input.channel, ts: input.threadTs },
|
|
309
|
+
input.signal,
|
|
310
|
+
);
|
|
281
311
|
return this.#findMessage(replies, input.clientMsgId, input.channel);
|
|
282
312
|
}
|
|
283
313
|
|
|
@@ -393,12 +423,32 @@ export class SlackLiveProvider implements SlackProviderClient, SlackDiagnosticPr
|
|
|
393
423
|
return url;
|
|
394
424
|
}
|
|
395
425
|
|
|
396
|
-
async #api(
|
|
397
|
-
|
|
426
|
+
async #api(
|
|
427
|
+
operation: string,
|
|
428
|
+
body: Record<string, string | undefined>,
|
|
429
|
+
signal?: AbortSignal,
|
|
430
|
+
): Promise<SlackApiResponse> {
|
|
431
|
+
const result = await this.#request(operation, this.#botToken, body, true, signal);
|
|
398
432
|
if (result.ok === true) return result;
|
|
399
433
|
throw new SlackProviderError("web_api", operation);
|
|
400
434
|
}
|
|
401
435
|
|
|
436
|
+
async #sleepUntilAbort(milliseconds: number, signal?: AbortSignal): Promise<void> {
|
|
437
|
+
if (!signal) {
|
|
438
|
+
await this.#sleep(milliseconds);
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
signal.throwIfAborted();
|
|
442
|
+
const aborted = Promise.withResolvers<void>();
|
|
443
|
+
const abort = (): void => aborted.reject(signal.reason);
|
|
444
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
445
|
+
try {
|
|
446
|
+
await Promise.race([this.#sleep(milliseconds, signal), aborted.promise]);
|
|
447
|
+
} finally {
|
|
448
|
+
signal.removeEventListener("abort", abort);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
402
452
|
async #request(
|
|
403
453
|
operation: string,
|
|
404
454
|
token: string,
|
|
@@ -450,7 +500,7 @@ export class SlackLiveProvider implements SlackProviderClient, SlackDiagnosticPr
|
|
|
450
500
|
throw new SlackProviderError("rate_limited", operation, response.status, retryAfterMs);
|
|
451
501
|
}
|
|
452
502
|
const startedAt = this.#now();
|
|
453
|
-
await this.#
|
|
503
|
+
await this.#sleepUntilAbort(retryAfterMs, signal);
|
|
454
504
|
if (this.#now() - startedAt > this.#maxRetryAfterMs) {
|
|
455
505
|
throw new SlackProviderError("rate_limited", operation, response.status, retryAfterMs);
|
|
456
506
|
}
|
|
@@ -49,11 +49,13 @@ export interface SlackProviderClient {
|
|
|
49
49
|
text: string;
|
|
50
50
|
threadTs?: string;
|
|
51
51
|
clientMsgId: string;
|
|
52
|
+
signal?: AbortSignal;
|
|
52
53
|
}): Promise<SlackPostedMessage>;
|
|
53
54
|
findMessageByClientMsgId?(input: {
|
|
54
55
|
channel: string;
|
|
55
56
|
clientMsgId: string;
|
|
56
57
|
threadTs?: string;
|
|
58
|
+
signal?: AbortSignal;
|
|
57
59
|
}): Promise<SlackMessageSearchResult | null>;
|
|
58
60
|
/**
|
|
59
61
|
* Prove that an operator-supplied timestamp addresses a real message in the
|
|
@@ -92,6 +94,7 @@ export class SlackProvider {
|
|
|
92
94
|
text: string;
|
|
93
95
|
threadTs?: string;
|
|
94
96
|
clientMsgId: string;
|
|
97
|
+
signal?: AbortSignal;
|
|
95
98
|
}): Promise<SlackPostedMessage> {
|
|
96
99
|
return await this.client.postMessage(input);
|
|
97
100
|
}
|
|
@@ -100,6 +103,7 @@ export class SlackProvider {
|
|
|
100
103
|
channel: string;
|
|
101
104
|
clientMsgId: string;
|
|
102
105
|
threadTs?: string;
|
|
106
|
+
signal?: AbortSignal;
|
|
103
107
|
}): Promise<SlackMessageSearchResult | null> {
|
|
104
108
|
return (await this.client.findMessageByClientMsgId?.(input)) ?? null;
|
|
105
109
|
}
|
|
@@ -7,20 +7,16 @@
|
|
|
7
7
|
* 2. *Daemon*: only the running owner may mutate mappings, and only while it is
|
|
8
8
|
* still the exact owner (`ownerId`/`pid`/`incarnation`/daemon generation)
|
|
9
9
|
* captured before the request was published.
|
|
10
|
-
* 3. *Session*: the
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* 3. *Session*: the running daemon supplies a redacted Router authority proving
|
|
11
|
+
* the exact session and endpoint generation; this module never resolves an
|
|
12
|
+
* endpoint or retains its credentials.
|
|
13
13
|
*
|
|
14
14
|
* Provider verification happens before any lock is taken, and the mapping commit
|
|
15
|
-
* re-proves session authority inside the store lock, so an authority
|
|
16
|
-
* changes mid-flight leaves no mapping behind.
|
|
15
|
+
* re-proves daemon and session authority inside the store lock, so an authority
|
|
16
|
+
* that changes mid-flight leaves no mapping behind.
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
-
import * as fs from "node:fs/promises";
|
|
20
|
-
import * as path from "node:path";
|
|
21
19
|
import type { Settings } from "../../config/settings";
|
|
22
|
-
import type { SessionIndex } from "../broker/session-index";
|
|
23
|
-
import { readSdkSessionEndpoint, type SdkSessionEndpoint, type SdkSessionEndpointScope } from "../client/discovery";
|
|
24
20
|
import {
|
|
25
21
|
type ChatDaemonCommandOwner,
|
|
26
22
|
type ChatDaemonCommandSubmission,
|
|
@@ -116,100 +112,6 @@ export function assertBoundedSlackRootTs(rootTs: string): void {
|
|
|
116
112
|
);
|
|
117
113
|
}
|
|
118
114
|
|
|
119
|
-
/** Proven right to bind one session at one endpoint generation. */
|
|
120
|
-
async function defaultStatEndpoint(endpointPath: string): Promise<{ mtimeMs: number } | undefined> {
|
|
121
|
-
const stat = await fs.stat(endpointPath).catch(() => undefined);
|
|
122
|
-
return stat ? { mtimeMs: stat.mtimeMs } : undefined;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
export interface SlackSessionBindingAuthority {
|
|
126
|
-
sessionId: string;
|
|
127
|
-
endpointGeneration: number;
|
|
128
|
-
pid: number;
|
|
129
|
-
repo: string;
|
|
130
|
-
/**
|
|
131
|
-
* The exact endpoint this authority was proven against. Callers must use it
|
|
132
|
-
* rather than re-reading discovery: a second read can observe a different
|
|
133
|
-
* process whose endpoint generation happens to repeat, and the numeric
|
|
134
|
-
* generation alone cannot tell the two apart.
|
|
135
|
-
*/
|
|
136
|
-
endpoint: SdkSessionEndpoint;
|
|
137
|
-
scope: SdkSessionEndpointScope;
|
|
138
|
-
endpointMtimeMs: number;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export interface SessionBindingAuthorityInput {
|
|
142
|
-
sessionIndex: SessionIndex;
|
|
143
|
-
sessionId: string;
|
|
144
|
-
readEndpoint?: (
|
|
145
|
-
repo: string,
|
|
146
|
-
sessionId: string,
|
|
147
|
-
scope?: SdkSessionEndpointScope,
|
|
148
|
-
) => Promise<SdkSessionEndpoint | null>;
|
|
149
|
-
statEndpoint?: (endpointPath: string) => Promise<{ mtimeMs: number } | undefined>;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Resolve exact discovery/attachment authority for one session.
|
|
154
|
-
*
|
|
155
|
-
* `IndexedSession.live` alone is only pid liveness, which a terminated or
|
|
156
|
-
* unregistered session can still satisfy through pid reuse or a stale record.
|
|
157
|
-
* Adoption additionally requires an intact index replay, a non-terminal record,
|
|
158
|
-
* and a discovery endpoint that is present, well-formed, not marked stale, and
|
|
159
|
-
* owned by the same host pid the index recorded.
|
|
160
|
-
*/
|
|
161
|
-
export async function resolveSessionBindingAuthority(
|
|
162
|
-
input: SessionBindingAuthorityInput,
|
|
163
|
-
): Promise<SlackSessionBindingAuthority | undefined> {
|
|
164
|
-
await input.sessionIndex.refresh();
|
|
165
|
-
const listing = input.sessionIndex.listSessions();
|
|
166
|
-
// A truncated replay cannot prove the tail is free of a terminal or
|
|
167
|
-
// unregistration event, so a degraded index is never binding authority.
|
|
168
|
-
if (listing.warnings.length > 0) return undefined;
|
|
169
|
-
const session = listing.sessions.find(candidate => candidate.sessionId === input.sessionId);
|
|
170
|
-
if (!session?.live || session.terminalUncertain) return undefined;
|
|
171
|
-
if (!Number.isSafeInteger(session.endpointGeneration) || session.endpointGeneration <= 0) return undefined;
|
|
172
|
-
if (!Number.isSafeInteger(session.pid) || session.pid <= 0) return undefined;
|
|
173
|
-
// Same scope derivation the runtime's attach() fence uses. Reading a
|
|
174
|
-
// `.gjc/state/chat/sdk` session at the default scope would either miss it or
|
|
175
|
-
// prove the wrong endpoint, so an underivable scope is not authority.
|
|
176
|
-
const repo = path.resolve(session.locator.repo);
|
|
177
|
-
const defaultStateRoot = path.join(repo, ".gjc", "state");
|
|
178
|
-
const indexedStateRoot = path.resolve(session.locator.stateRoot);
|
|
179
|
-
const scope: SdkSessionEndpointScope | undefined =
|
|
180
|
-
indexedStateRoot === defaultStateRoot
|
|
181
|
-
? "default"
|
|
182
|
-
: indexedStateRoot === path.join(defaultStateRoot, "chat")
|
|
183
|
-
? "chat"
|
|
184
|
-
: undefined;
|
|
185
|
-
if (!scope || session.endpointMtimeMs === undefined) return undefined;
|
|
186
|
-
|
|
187
|
-
let endpoint: SdkSessionEndpoint | null;
|
|
188
|
-
try {
|
|
189
|
-
endpoint = await (input.readEndpoint ?? readSdkSessionEndpoint)(session.locator.repo, input.sessionId, scope);
|
|
190
|
-
} catch {
|
|
191
|
-
// A malformed discovery record is not authority for anything.
|
|
192
|
-
return undefined;
|
|
193
|
-
}
|
|
194
|
-
if (!endpoint || endpoint.stale === true || !endpoint.url || !endpoint.token) return undefined;
|
|
195
|
-
if (endpoint.pid === undefined || endpoint.pid !== session.pid) return undefined;
|
|
196
|
-
|
|
197
|
-
// The endpoint file must be the exact one the index observed. Without this
|
|
198
|
-
// the numeric generation is the only fence, and it repeats across processes.
|
|
199
|
-
const stat = await (input.statEndpoint ?? defaultStatEndpoint)(endpoint.path);
|
|
200
|
-
if (!stat || stat.mtimeMs !== session.endpointMtimeMs) return undefined;
|
|
201
|
-
|
|
202
|
-
return {
|
|
203
|
-
sessionId: input.sessionId,
|
|
204
|
-
endpointGeneration: session.endpointGeneration,
|
|
205
|
-
pid: session.pid,
|
|
206
|
-
repo: session.locator.repo,
|
|
207
|
-
endpoint,
|
|
208
|
-
scope,
|
|
209
|
-
endpointMtimeMs: session.endpointMtimeMs,
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
|
|
213
115
|
/** States in which a mapping still owns its session's root claim. */
|
|
214
116
|
function holdsRootClaim(record: SlackConversation): boolean {
|
|
215
117
|
return record.state === "active" || record.state === "posting_root" || record.state === "resumed_root";
|
|
@@ -224,6 +126,7 @@ export interface SlackThreadClaimInput {
|
|
|
224
126
|
sessionId: string;
|
|
225
127
|
rootTs: string;
|
|
226
128
|
endpointGeneration: number;
|
|
129
|
+
attachmentAuthorityId?: string;
|
|
227
130
|
/**
|
|
228
131
|
* Re-proves session authority inside the store lock, immediately before
|
|
229
132
|
* commit. It may be invoked more than once for one claim: authority here is
|
|
@@ -281,7 +184,8 @@ export async function claimSlackThreadBinding(input: SlackThreadClaimInput): Pro
|
|
|
281
184
|
bound?.state !== "active" ||
|
|
282
185
|
bound.sessionId !== input.sessionId ||
|
|
283
186
|
bound.rootTs !== input.rootTs ||
|
|
284
|
-
bound.endpointGeneration !== input.endpointGeneration
|
|
187
|
+
bound.endpointGeneration !== input.endpointGeneration ||
|
|
188
|
+
bound.attachmentAuthorityId !== input.attachmentAuthorityId
|
|
285
189
|
)
|
|
286
190
|
throw new SlackThreadBindingError("binding_failed", "Slack root binding could not be claimed.");
|
|
287
191
|
return bound;
|
|
@@ -380,6 +284,7 @@ function claimTransaction(
|
|
|
380
284
|
rootTs: input.rootTs,
|
|
381
285
|
sessionId: input.sessionId,
|
|
382
286
|
endpointGeneration: input.endpointGeneration,
|
|
287
|
+
...(input.attachmentAuthorityId === undefined ? {} : { attachmentAuthorityId: input.attachmentAuthorityId }),
|
|
383
288
|
updatedAt: now(),
|
|
384
289
|
seenEventIds: current?.seenEventIds ?? [],
|
|
385
290
|
seenContextIds: current?.seenContextIds ?? [],
|