@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
|
@@ -24,7 +24,6 @@ export interface ConversationStoreFs {
|
|
|
24
24
|
mode: number;
|
|
25
25
|
}): Promise<void>;
|
|
26
26
|
rename(from: string, to: string): Promise<void>;
|
|
27
|
-
link(from: string, to: string): Promise<void>;
|
|
28
27
|
unlink(file: string): Promise<void>;
|
|
29
28
|
open(file: string, flags: string): Promise<ConversationStoreFileHandle>;
|
|
30
29
|
stat?(file: string): Promise<{
|
|
@@ -16,5 +16,11 @@ export interface DaemonPaths {
|
|
|
16
16
|
diagnostic: string;
|
|
17
17
|
aliases: string;
|
|
18
18
|
seenUpdates: string;
|
|
19
|
+
ownerRegistry: string;
|
|
20
|
+
recoveryReceipt: string;
|
|
19
21
|
}
|
|
22
|
+
export declare function agentDirDigest(agentDir: string): string;
|
|
23
|
+
export declare function telegramDaemonOwnerMarkerPath(agentDir: string, acquisitionId: string): string;
|
|
24
|
+
export declare const daemonOwnerMarkerPath: typeof telegramDaemonOwnerMarkerPath;
|
|
25
|
+
export declare const telegramDaemonProcessMarkerPath: typeof telegramDaemonOwnerMarkerPath;
|
|
20
26
|
export declare function daemonPaths(agentDir: string): DaemonPaths;
|
|
@@ -8,6 +8,7 @@ export interface DiscordInboundDispatchReceipt {
|
|
|
8
8
|
actionId?: string;
|
|
9
9
|
actionNonce?: string;
|
|
10
10
|
endpointGeneration: number;
|
|
11
|
+
attachmentAuthorityId?: string;
|
|
11
12
|
effectId: string;
|
|
12
13
|
idempotencyKey: string;
|
|
13
14
|
}
|
|
@@ -25,6 +26,7 @@ export interface DiscordConversation extends ConversationRecord {
|
|
|
25
26
|
createOwner?: string;
|
|
26
27
|
createLeaseExpiresAt?: number;
|
|
27
28
|
endpointGeneration?: number;
|
|
29
|
+
attachmentAuthorityId?: string;
|
|
28
30
|
/** Immutable lineage for archive and resume provider effects. */
|
|
29
31
|
effectIncarnationId?: string;
|
|
30
32
|
/** Current archive operation authority. */
|
|
@@ -1,32 +1,27 @@
|
|
|
1
|
+
import { type SessionAttachment } from "../router";
|
|
1
2
|
import { type DiscordConversation } from "./discord-conversation";
|
|
2
3
|
import type { DiscordInboundEvent, DiscordProvider } from "./discord-provider";
|
|
3
|
-
export declare class
|
|
4
|
+
export declare class DiscordAttachmentBindingError extends Error {
|
|
4
5
|
constructor(message?: string);
|
|
5
6
|
}
|
|
6
|
-
/** A captured live SDK transport. `isCurrent` must fail closed after replacement or removal. */
|
|
7
|
-
export interface DiscordEndpointBinding {
|
|
8
|
-
generation: number;
|
|
9
|
-
isCurrent(): boolean;
|
|
10
|
-
send(frame: Record<string, unknown>): void | Promise<void>;
|
|
11
|
-
}
|
|
12
7
|
export interface DiscordLeaseRecoveryScheduler {
|
|
13
8
|
setTimeout(callback: () => void | Promise<void>, delayMs: number): unknown;
|
|
14
9
|
clearTimeout(handle: unknown): void;
|
|
15
10
|
}
|
|
16
11
|
export interface DiscordNotificationDaemonOptions {
|
|
17
12
|
agentDir: string;
|
|
18
|
-
repo: string;
|
|
19
13
|
guildId: string;
|
|
20
14
|
parentChannelId: string;
|
|
21
15
|
provider: DiscordProvider;
|
|
22
16
|
now?: () => number;
|
|
23
17
|
leaseRecoveryScheduler?: DiscordLeaseRecoveryScheduler;
|
|
24
|
-
|
|
25
|
-
onCommand?: (sessionId: string, content: string,
|
|
18
|
+
resolveAttachment: (sessionId: string, expectedGeneration?: number) => SessionAttachment | null | Promise<SessionAttachment | null>;
|
|
19
|
+
onCommand?: (sessionId: string, content: string, attachment: SessionAttachment, idempotencyKey: string) => Promise<boolean>;
|
|
26
20
|
}
|
|
27
21
|
export interface DiscordNotificationInput {
|
|
28
22
|
sessionId: string;
|
|
29
23
|
endpointGeneration: number;
|
|
24
|
+
attachmentAuthorityId?: string;
|
|
30
25
|
content: string;
|
|
31
26
|
threadName?: string;
|
|
32
27
|
actionId?: string;
|
|
@@ -38,14 +33,24 @@ export declare class DiscordNotificationDaemon {
|
|
|
38
33
|
#private;
|
|
39
34
|
private readonly options;
|
|
40
35
|
constructor(options: DiscordNotificationDaemonOptions);
|
|
36
|
+
restartBlocked(): boolean;
|
|
41
37
|
start(): Promise<void>;
|
|
42
38
|
stop(): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Frame-driven publication work is tracked like inbound events so that stop()
|
|
41
|
+
* drains it while the Router still holds attachment authority. A session
|
|
42
|
+
* replayed during teardown otherwise reaches its post-provider binding
|
|
43
|
+
* revalidation only after Router.stop() has revoked the attachment, turning a
|
|
44
|
+
* legitimate create into a spurious teardown rejection.
|
|
45
|
+
*/
|
|
43
46
|
notify(input: DiscordNotificationInput): Promise<DiscordConversation>;
|
|
44
47
|
/** Posts a safe command outcome to the active mapped conversation. */
|
|
45
48
|
postCommandResult(sessionId: string, content: string): Promise<boolean>;
|
|
46
|
-
close(sessionId: string): Promise<void>;
|
|
49
|
+
close(sessionId: string, endpointGeneration?: number): Promise<void>;
|
|
50
|
+
recoverCleanup(sessionId: string, endpointGeneration: number): Promise<void>;
|
|
51
|
+
retireAttachment(sessionId: string, endpointGeneration: number): Promise<void>;
|
|
47
52
|
archive(sessionId: string): Promise<void>;
|
|
48
|
-
resume(sessionId: string, endpointGeneration: number): Promise<DiscordConversation | undefined>;
|
|
53
|
+
resume(sessionId: string, endpointGeneration: number, attachmentAuthorityId?: string): Promise<DiscordConversation | undefined>;
|
|
49
54
|
resolveAction(sessionId: string, actionId: string): Promise<void>;
|
|
50
55
|
handleInbound(event: DiscordInboundEvent): Promise<void>;
|
|
51
56
|
}
|
|
@@ -4,19 +4,14 @@
|
|
|
4
4
|
* Stock startup publishes a session's readiness immediately, so the running
|
|
5
5
|
* chat daemon surfaces the session and creates its own root before an operator
|
|
6
6
|
* could ever name an existing one. A session that opts in is *prepared*
|
|
7
|
-
* instead:
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* and the daemon adopts the bound root instead of replacing it.
|
|
7
|
+
* instead: readiness stays withheld while the provider applies its one root
|
|
8
|
+
* claim. The SessionRouter owns endpoint authority and activation; this module
|
|
9
|
+
* only proves that the provider mapping authorizes readiness publication.
|
|
11
10
|
*
|
|
12
11
|
* Nothing here mutates a mapping. The gate only reads the daemon-owned store to
|
|
13
|
-
* prove a binding exists
|
|
14
|
-
* host to publish the readiness it withheld.
|
|
12
|
+
* prove a binding exists for the exact session and endpoint generation.
|
|
15
13
|
*/
|
|
16
|
-
import type { SessionIndex } from "../broker/session-index";
|
|
17
|
-
import type { SdkSessionEndpoint, SdkSessionEndpointScope } from "../client/discovery";
|
|
18
14
|
import type { SessionActivationGate } from "../host";
|
|
19
|
-
import { type ActivatedPreparedSession, type PreparedSessionActivationClient } from "../session-activation";
|
|
20
15
|
import type { ConversationStore } from "./conversation-store";
|
|
21
16
|
import type { SlackConversation } from "./slack-conversation";
|
|
22
17
|
/** Explicit, session-scoped opt-in for withholding readiness until a root is bound. */
|
|
@@ -44,28 +39,3 @@ export interface SlackBindingActivationInput {
|
|
|
44
39
|
* caller reports unavailable authority instead of an authorization.
|
|
45
40
|
*/
|
|
46
41
|
export declare function createSlackBindingActivationGate(input: SlackBindingActivationInput): SessionActivationGate;
|
|
47
|
-
export type { ActivatedPreparedSession, PreparedSessionActivationClient, SessionActivationErrorCode, } from "../session-activation";
|
|
48
|
-
export { requestPreparedSessionActivation, SessionActivationError } from "../session-activation";
|
|
49
|
-
export interface PreparedSessionActivationInput {
|
|
50
|
-
sessionIndex: SessionIndex;
|
|
51
|
-
sessionId: string;
|
|
52
|
-
}
|
|
53
|
-
export interface PreparedSessionActivationDeps {
|
|
54
|
-
readEndpoint?: (repo: string, sessionId: string, scope?: SdkSessionEndpointScope) => Promise<SdkSessionEndpoint | null>;
|
|
55
|
-
connect?: (endpoint: {
|
|
56
|
-
url: string;
|
|
57
|
-
token: string;
|
|
58
|
-
}) => Promise<PreparedSessionActivationClient>;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Ask a prepared session to publish the readiness it withheld.
|
|
62
|
-
*
|
|
63
|
-
* The same discovery authority the binding requires is resolved first, so an
|
|
64
|
-
* unindexed, terminated, or endpoint-rolled session is refused before any
|
|
65
|
-
* connection is opened. The request names the exact session and endpoint
|
|
66
|
-
* generation, and the answer is accepted only when it proves both, so a
|
|
67
|
-
* replacement session can never be activated in place of the requested one.
|
|
68
|
-
* Activation is idempotent: an exact retry answers `already` without a second
|
|
69
|
-
* readiness signal.
|
|
70
|
-
*/
|
|
71
|
-
export declare function activatePreparedSession(input: PreparedSessionActivationInput, deps?: PreparedSessionActivationDeps): Promise<ActivatedPreparedSession>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure per-update inbound reaction transition ordering.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from the Telegram daemon so the serialization and terminal-state
|
|
5
|
+
* contract is testable without daemon/attachment/topic-lease infrastructure.
|
|
6
|
+
* The production router dispatches notification frames without awaiting prior
|
|
7
|
+
* callbacks, so an `accepted` handler can still be in flight when the
|
|
8
|
+
* `consumed` handler runs. Chaining every transition for one update through a
|
|
9
|
+
* single promise keeps effects ordered, and skipping nonterminal transitions
|
|
10
|
+
* after a terminal one makes the terminal state monotonic: a late queued
|
|
11
|
+
* marker can never overwrite an already-sent consumed marker or retraction.
|
|
12
|
+
*/
|
|
13
|
+
/** A single ordered Bot API reaction transition for one update id. */
|
|
14
|
+
export interface InboundReactionTransition {
|
|
15
|
+
/** Serialized in submission order per update id. */
|
|
16
|
+
readonly effect: () => Promise<void>;
|
|
17
|
+
/** Terminal transitions (consumed / retraction) close the update. */
|
|
18
|
+
readonly terminal: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Terminal tombstones are retained only for a bounded window of recent update
|
|
22
|
+
* ids. Telegram update ids are monotonically increasing per bot, so a stale
|
|
23
|
+
* `accepted` ack that could overwrite a terminal state always carries an id at
|
|
24
|
+
* or below the terminal one; ids far below the window are long-expired updates
|
|
25
|
+
* whose correction target no longer exists, so the daemon's own target lookup
|
|
26
|
+
* already ignores them.
|
|
27
|
+
*/
|
|
28
|
+
export declare const INBOUND_REACTION_TOMBSTONE_WINDOW = 512;
|
|
29
|
+
export declare class InboundReactionSequencer {
|
|
30
|
+
#private;
|
|
31
|
+
/** True once a terminal transition completed for this update. */
|
|
32
|
+
isTerminal(updateId: number): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Enqueue one transition. The returned promise settles when the transition
|
|
35
|
+
* has run (or was skipped because a terminal state already closed it).
|
|
36
|
+
*/
|
|
37
|
+
apply(updateId: number, transition: InboundReactionTransition): Promise<void>;
|
|
38
|
+
/** @internal Test-only: number of retained per-update chains. */
|
|
39
|
+
debugChainCount(): number;
|
|
40
|
+
/** @internal Test-only: number of retained terminal tombstones. */
|
|
41
|
+
debugTombstoneCount(): number;
|
|
42
|
+
}
|
|
43
|
+
/** Body for setting an emoji reaction on an inbound Telegram message. */
|
|
44
|
+
export declare function inboundReactionSetPayload(chatId: string, messageId: number, emoji: string): {
|
|
45
|
+
chat_id: string;
|
|
46
|
+
message_id: number;
|
|
47
|
+
reaction: Array<{
|
|
48
|
+
type: "emoji";
|
|
49
|
+
emoji: string;
|
|
50
|
+
}>;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Body for retracting a reaction. The Bot API clears a bot reaction with the
|
|
54
|
+
* empty reaction list; an empty `emoji` string is not a valid reaction and is
|
|
55
|
+
* silently rejected, leaving the stale queued marker visible.
|
|
56
|
+
*/
|
|
57
|
+
export declare function inboundReactionRetractPayload(chatId: string, messageId: number): {
|
|
58
|
+
chat_id: string;
|
|
59
|
+
message_id: number;
|
|
60
|
+
reaction: [];
|
|
61
|
+
};
|
|
@@ -29,13 +29,30 @@ import type { AskAnswerSource, AskAnswerSourceResult, AskRemoteControl } from ".
|
|
|
29
29
|
import { type SessionHostRuntimePublication } from "../broker/lifecycle";
|
|
30
30
|
import { type SessionSdkHost } from "../host";
|
|
31
31
|
import { CursorRegistry, RevisionStore } from "../host/query";
|
|
32
|
+
import type { SdkFrame } from "../host/types";
|
|
32
33
|
import { type SdkPromptTerminalOutcome } from "../prompt-status";
|
|
33
34
|
import { type SdkStartupFailure } from "../startup-capability";
|
|
34
35
|
import { type NotificationConfig } from "./config";
|
|
35
36
|
import { NotificationSessionController } from "./session-control";
|
|
36
|
-
import { type EnsureDaemonResult
|
|
37
|
+
import { type EnsureDaemonResult } from "./telegram-daemon";
|
|
37
38
|
export type { IdentityControlSuccessPathInput, IdentityControlTerminalPathInput, TerminalSendOutcome, } from "./control-drain-lease";
|
|
38
39
|
export { isNativeControlDrainAvailable, runIdentityControlSuccessPath, runIdentityControlTerminalPath, } from "./control-drain-lease";
|
|
40
|
+
export type NotificationInboundAdmission = {
|
|
41
|
+
outcome: "accept";
|
|
42
|
+
} | {
|
|
43
|
+
outcome: "drop";
|
|
44
|
+
reason: "inbound_fenced" | "policy_suspended";
|
|
45
|
+
} | {
|
|
46
|
+
outcome: "defer";
|
|
47
|
+
reason: "policy_suspended";
|
|
48
|
+
};
|
|
49
|
+
/** Exact production admission decision for daemon-originated session inbound. */
|
|
50
|
+
export declare function notificationInboundAdmission(input: {
|
|
51
|
+
inboundFenced: boolean;
|
|
52
|
+
policySuspended: boolean;
|
|
53
|
+
notificationOrigin: boolean;
|
|
54
|
+
controlCommand: boolean;
|
|
55
|
+
}): NotificationInboundAdmission;
|
|
39
56
|
type PromptTerminalDiagnostic = {
|
|
40
57
|
reason?: unknown;
|
|
41
58
|
loopStopReason?: string;
|
|
@@ -70,10 +87,6 @@ export type SessionCreateTarget = {
|
|
|
70
87
|
/** Identifies the session a `session_close` targets. */
|
|
71
88
|
export interface SessionCloseTarget {
|
|
72
89
|
sessionId: string;
|
|
73
|
-
/** Expected GJC-managed tmux session name (defense-in-depth match). */
|
|
74
|
-
tmuxSession?: string;
|
|
75
|
-
/** Expected `@gjc-session-state-file` tag (defense-in-depth match). */
|
|
76
|
-
sessionStateFile?: string;
|
|
77
90
|
}
|
|
78
91
|
/** Identifies the session a `session_resume` targets. */
|
|
79
92
|
export interface SessionResumeTarget {
|
|
@@ -81,107 +94,34 @@ export interface SessionResumeTarget {
|
|
|
81
94
|
/** Optional repo/working-dir hint to disambiguate matches. */
|
|
82
95
|
path?: string;
|
|
83
96
|
}
|
|
84
|
-
/** Create a new session. */
|
|
85
|
-
export interface SessionCreateFrame {
|
|
86
|
-
type: "session_create";
|
|
87
|
-
requestId: string;
|
|
88
|
-
/** Deterministic lifecycle marker preallocated by the daemon before spawn. */
|
|
89
|
-
lifecycleRequestId: string;
|
|
90
|
-
/** Session id the daemon preallocated and propagates to the child. */
|
|
91
|
-
intendedSessionId: string;
|
|
92
|
-
/** Telegram update id (idempotency key on the daemon side). */
|
|
93
|
-
updateId: number;
|
|
94
|
-
chatId: string;
|
|
95
|
-
/** Control-endpoint token authorizing this frame. */
|
|
96
|
-
token: string;
|
|
97
|
-
target: SessionCreateTarget;
|
|
98
|
-
/** Reserved for a future capability transport; any supplied value is rejected before lifecycle acceptance. */
|
|
99
|
-
startupPromptRef?: string;
|
|
100
|
-
/** Model profile preset to activate for the spawned session (--mpreset). */
|
|
101
|
-
modelPreset?: string;
|
|
102
|
-
}
|
|
103
|
-
/** Close (hard-kill, history preserved) a session. */
|
|
104
|
-
export interface SessionCloseFrame {
|
|
105
|
-
type: "session_close";
|
|
106
|
-
requestId: string;
|
|
107
|
-
updateId: number;
|
|
108
|
-
chatId: string;
|
|
109
|
-
token: string;
|
|
110
|
-
target: SessionCloseTarget;
|
|
111
|
-
/** Required force-only close flag; false/omitted is rejected by daemon policy. */
|
|
112
|
-
force?: boolean;
|
|
113
|
-
}
|
|
114
|
-
/** Resume a session (reattach if alive, else cold-restart from history). */
|
|
115
|
-
export interface SessionResumeFrame {
|
|
116
|
-
type: "session_resume";
|
|
117
|
-
requestId: string;
|
|
118
|
-
updateId: number;
|
|
119
|
-
chatId: string;
|
|
120
|
-
token: string;
|
|
121
|
-
target: SessionResumeTarget;
|
|
122
|
-
/** Reserved for a future capability transport; any supplied value is rejected before lifecycle acceptance. */
|
|
123
|
-
startupPromptRef?: string;
|
|
124
|
-
}
|
|
125
|
-
/** Any client -> ingress lifecycle request frame. */
|
|
126
|
-
export type SessionLifecycleRequest = SessionCreateFrame | SessionCloseFrame | SessionResumeFrame;
|
|
127
|
-
/** Terminal status of a lifecycle request. */
|
|
128
97
|
export type LifecycleStatus = "ok" | "error";
|
|
129
|
-
/** A connected session's per-session endpoint, returned to the control client. */
|
|
130
|
-
export interface LifecycleEndpoint {
|
|
131
|
-
url: string;
|
|
132
|
-
token: string;
|
|
133
|
-
}
|
|
134
|
-
/** The Telegram topic/thread a session is surfaced in. */
|
|
135
|
-
export interface LifecycleTopic {
|
|
136
|
-
chatId: string;
|
|
137
|
-
threadId: string;
|
|
138
|
-
}
|
|
139
|
-
/** How a create request was correlated to its spawned session. */
|
|
140
|
-
export type MatchedBy = "spawn_marker" | "session_ready";
|
|
141
|
-
/** Response to a successful `session_create`. */
|
|
142
98
|
export interface SessionCreateResponseFrame {
|
|
143
99
|
type: "session_create_response";
|
|
144
100
|
requestId: string;
|
|
145
101
|
status: LifecycleStatus;
|
|
146
|
-
lifecycleRequestId: string;
|
|
147
102
|
sessionId: string;
|
|
148
|
-
matchedBy: MatchedBy;
|
|
149
|
-
endpoint: LifecycleEndpoint;
|
|
150
|
-
topic: LifecycleTopic;
|
|
151
103
|
target: SessionCreateTarget;
|
|
152
104
|
}
|
|
153
|
-
/** Response to a successful `session_close`. */
|
|
154
105
|
export interface SessionCloseResponseFrame {
|
|
155
106
|
type: "session_close_response";
|
|
156
107
|
requestId: string;
|
|
157
108
|
status: LifecycleStatus;
|
|
158
109
|
sessionId: string;
|
|
159
|
-
processGone: boolean;
|
|
160
|
-
historyPreserved: boolean;
|
|
161
|
-
endpointStale: boolean;
|
|
162
110
|
}
|
|
163
|
-
/** Whether a resume reattached to a live session or cold-restarted a dead one. */
|
|
164
111
|
export type ResumeMode = "reattached" | "cold_restarted";
|
|
165
|
-
/** Response to a successful `session_resume`. */
|
|
166
112
|
export interface SessionResumeResponseFrame {
|
|
167
113
|
type: "session_resume_response";
|
|
168
114
|
requestId: string;
|
|
169
115
|
status: LifecycleStatus;
|
|
170
116
|
sessionId: string;
|
|
171
117
|
mode: ResumeMode;
|
|
172
|
-
endpoint: LifecycleEndpoint;
|
|
173
|
-
topic: LifecycleTopic;
|
|
174
118
|
}
|
|
175
|
-
/** Machine-readable reason a lifecycle request failed. */
|
|
176
119
|
export type LifecycleErrorReason = "unauthorized" | "rate_limited" | "duplicate_conflict" | "invalid_target" | "ambiguous_target" | "spawn_failed" | "discovery_timeout" | "readiness_timeout" | "close_refused" | "not_found" | "terminal_uncertain" | "unsupported_platform";
|
|
177
|
-
/** A candidate returned with an `ambiguous_target` resume error. */
|
|
178
120
|
export interface ResumeCandidate {
|
|
179
121
|
sessionId: string;
|
|
180
122
|
path?: string;
|
|
181
|
-
/** Last-activity epoch-millis (session history file mtime), if known. */
|
|
182
123
|
mtimeMs?: number;
|
|
183
124
|
}
|
|
184
|
-
/** A structured lifecycle error frame. */
|
|
185
125
|
export interface SessionLifecycleErrorFrame {
|
|
186
126
|
type: "session_lifecycle_error";
|
|
187
127
|
requestId: string;
|
|
@@ -190,7 +130,6 @@ export interface SessionLifecycleErrorFrame {
|
|
|
190
130
|
message: string;
|
|
191
131
|
candidates?: ResumeCandidate[];
|
|
192
132
|
}
|
|
193
|
-
/** Any ingress -> client lifecycle response frame. */
|
|
194
133
|
export type SessionLifecycleResponse = SessionCreateResponseFrame | SessionCloseResponseFrame | SessionResumeResponseFrame | SessionLifecycleErrorFrame;
|
|
195
134
|
/**
|
|
196
135
|
* Replayable per-session readiness signal (mirror of the Rust `session_ready`
|
|
@@ -327,6 +266,9 @@ export declare class PresentationArbiter {
|
|
|
327
266
|
interface SessionRuntime {
|
|
328
267
|
server: NotificationServer;
|
|
329
268
|
host: SessionSdkHost;
|
|
269
|
+
/** Delivers one ring-positioned event envelope to every attached subscriber
|
|
270
|
+
* connection, applying the same capability gate as event replay. */
|
|
271
|
+
broadcastEventFrame: (event: SdkFrame) => void;
|
|
330
272
|
/** Owns stateRoot-backed revisions and removes their spills on terminal shutdown. */
|
|
331
273
|
revisions: RevisionStore;
|
|
332
274
|
/** Releases all snapshot pins before the revision store is closed. */
|
|
@@ -336,6 +278,8 @@ interface SessionRuntime {
|
|
|
336
278
|
/** Discovery scope is fixed before publication; a live default endpoint is never rotated in place. */
|
|
337
279
|
endpointScope: "default" | "chat";
|
|
338
280
|
idleSeq: number;
|
|
281
|
+
/** Stops delayed session-name observation when this runtime loses authority. */
|
|
282
|
+
stopSessionNameObserver: () => void;
|
|
339
283
|
/** Interactive asks awaiting a remote answer, by action id. */
|
|
340
284
|
pendingInteractive: Map<string, PendingInteractiveAsk>;
|
|
341
285
|
/** Deregisters this session's ask answer source. */
|
|
@@ -348,6 +292,12 @@ interface SessionRuntime {
|
|
|
348
292
|
notificationsActive: boolean;
|
|
349
293
|
/** Provider ownership state is independent from the already-published core SDK runtime. */
|
|
350
294
|
notificationOwnerState: "ready" | "retry" | "blocked";
|
|
295
|
+
/**
|
|
296
|
+
* Ownership-relevant configuration identity this runtime's owner state was
|
|
297
|
+
* proved under. A settled outcome may only be applied while it still matches,
|
|
298
|
+
* so a credential/destination/enablement change forces a re-proof.
|
|
299
|
+
*/
|
|
300
|
+
notificationOwnerKey?: string;
|
|
351
301
|
/** Rejects new SDK frames while a leased terminal response drains. */
|
|
352
302
|
inboundFenced: boolean;
|
|
353
303
|
/** Set as soon as terminal teardown is requested, before startup settles. */
|
|
@@ -381,12 +331,6 @@ interface SessionRuntime {
|
|
|
381
331
|
/** This runtime's own host-liveness publication; only its teardown may retract it. */
|
|
382
332
|
evidencePublication?: SessionHostRuntimePublication;
|
|
383
333
|
brokerRegistrationReleased: boolean;
|
|
384
|
-
/** Managed Telegram root registration released during terminal teardown. */
|
|
385
|
-
notificationRootRegistration?: {
|
|
386
|
-
settings: Settings;
|
|
387
|
-
cwd: string;
|
|
388
|
-
registrationToken: string;
|
|
389
|
-
};
|
|
390
334
|
verbosity: "lean" | "verbose";
|
|
391
335
|
sessionTag: string;
|
|
392
336
|
/** Whether the agent loop is currently running (drives the typing indicator). */
|
|
@@ -396,6 +340,11 @@ interface SessionRuntime {
|
|
|
396
340
|
commandId: string;
|
|
397
341
|
turnId: string;
|
|
398
342
|
}>;
|
|
343
|
+
/** SDK run tokens bind an accepted queued follow-up to only its matching agent_start. */
|
|
344
|
+
pendingPromptCorrelationsBySdkRunToken: Map<string, {
|
|
345
|
+
commandId: string;
|
|
346
|
+
turnId: string;
|
|
347
|
+
}>;
|
|
399
348
|
/** Identity bound to the agent lifecycle currently in flight. */
|
|
400
349
|
activePromptCorrelation?: {
|
|
401
350
|
commandId: string;
|
|
@@ -425,7 +374,7 @@ interface SessionRuntime {
|
|
|
425
374
|
} | {
|
|
426
375
|
type: "agent_failed";
|
|
427
376
|
error: unknown;
|
|
428
|
-
}) => void
|
|
377
|
+
}) => void | Promise<void>;
|
|
429
378
|
/** Settles and emits one sanitized correlated prompt failure. */
|
|
430
379
|
emitPromptFailure: (correlation: {
|
|
431
380
|
commandId: string;
|
|
@@ -473,17 +422,33 @@ interface SessionRuntime {
|
|
|
473
422
|
turnClosed?: boolean;
|
|
474
423
|
/** Finalized while provisional policy was held; flush exactly once on stable activation. */
|
|
475
424
|
pendingFinal?: {
|
|
476
|
-
|
|
477
|
-
|
|
425
|
+
window: number;
|
|
426
|
+
receipts: Array<{
|
|
427
|
+
text: string;
|
|
428
|
+
messageRef?: string;
|
|
429
|
+
origin: "user" | "autonomous" | "continuation";
|
|
430
|
+
}>;
|
|
478
431
|
};
|
|
432
|
+
/** Monotonic user-request boundary for deferred lean delivery. */
|
|
433
|
+
settlementWindow: number;
|
|
434
|
+
/** Provenance of the currently executing assistant turn. */
|
|
435
|
+
currentTurnSettlementOrigin?: "user" | "autonomous" | "continuation";
|
|
436
|
+
/** Immutable settlement boundary captured when the current turn begins. */
|
|
437
|
+
currentTurnSettlementWindow?: number;
|
|
479
438
|
/**
|
|
480
|
-
* Lean-mode deferred
|
|
481
|
-
*
|
|
482
|
-
*
|
|
439
|
+
* Lean-mode deferred receipts for the current user-request settlement window.
|
|
440
|
+
* Ordinary tool-loop turns retain latest-turn-wins behaviour. An autonomous
|
|
441
|
+
* continuation has no new user request, so it appends instead of erasing the
|
|
442
|
+
* prior receipt. The small fixed receipt bound prevents an unbounded idle wait
|
|
443
|
+
* from retaining the full transcript.
|
|
483
444
|
*/
|
|
484
445
|
pendingSettled?: {
|
|
485
|
-
|
|
486
|
-
|
|
446
|
+
window: number;
|
|
447
|
+
receipts: Array<{
|
|
448
|
+
text: string;
|
|
449
|
+
messageRef?: string;
|
|
450
|
+
origin: "user" | "autonomous" | "continuation";
|
|
451
|
+
}>;
|
|
487
452
|
};
|
|
488
453
|
/** SDK control frames received during provisional ownership; replayed only after stable activation. */
|
|
489
454
|
deferredInboundControls: Array<() => void>;
|
|
@@ -594,9 +559,13 @@ export declare class EphemeralTurnHost {
|
|
|
594
559
|
evictTerminalEvents(): void;
|
|
595
560
|
}
|
|
596
561
|
/**
|
|
597
|
-
* Ensures every configured chat-provider daemon is ready
|
|
598
|
-
*
|
|
599
|
-
*
|
|
562
|
+
* Ensures every configured chat-provider daemon is ready.
|
|
563
|
+
*
|
|
564
|
+
* This runs strictly AFTER the SDK publishes session identity and its core
|
|
565
|
+
* endpoint, through the detached ownership coordinator: chat providers are
|
|
566
|
+
* optional notification adapters, never session authority. A rejected ensure
|
|
567
|
+
* therefore degrades notification delivery only — the coordinator records it
|
|
568
|
+
* as `failed`, adapters stay withheld, and a later reconcile re-attempts.
|
|
600
569
|
*/
|
|
601
570
|
export declare function ensureConfiguredProviderDaemons(settings: Settings, cfg: NotificationConfig, ensureProviderDaemon?: (provider: "discord" | "slack", settings: Settings) => Promise<unknown>): Promise<void>;
|
|
602
571
|
/**
|
|
@@ -614,9 +583,6 @@ export declare function createNotificationsExtension(api: ExtensionAPI, options?
|
|
|
614
583
|
settings?: Settings;
|
|
615
584
|
ensureTelegramDaemon?: (input: {
|
|
616
585
|
settings: Settings;
|
|
617
|
-
cwd: string;
|
|
618
|
-
sessionId: string;
|
|
619
|
-
onRegistered?: (registration: RegisterNotificationRootResult) => void;
|
|
620
586
|
}) => Promise<EnsureDaemonResult>;
|
|
621
587
|
ensureProviderDaemon?: (provider: "discord" | "slack", settings: Settings) => Promise<unknown>;
|
|
622
588
|
/** Suppress auto-delivery for a GJC-spawned child under `sessionScope=primary`. */
|
|
@@ -635,4 +601,24 @@ export declare function createNotificationsExtension(api: ExtensionAPI, options?
|
|
|
635
601
|
}) => void;
|
|
636
602
|
readNotificationFile?: (path: string) => Promise<Buffer>;
|
|
637
603
|
readNotificationDiffStat?: (cwd: string) => Promise<string | undefined>;
|
|
604
|
+
/**
|
|
605
|
+
* INTERNAL terminal-abort session seams, threaded directly from the owning
|
|
606
|
+
* session — deliberately NOT on the public ExtensionContext so third-party
|
|
607
|
+
* extensions cannot observe attempt epochs or cancel the session-global
|
|
608
|
+
* preflight outside the durable admission path (review thread P2).
|
|
609
|
+
*/
|
|
610
|
+
terminalAbortSeams?: {
|
|
611
|
+
getTerminalTurnEpoch: () => number | undefined;
|
|
612
|
+
cancelPendingPreflightForTerminalAbort: () => void;
|
|
613
|
+
captureTerminalAbortSteeringSnapshot?: () => void;
|
|
614
|
+
discardTerminalAbortSteeringSnapshot?: (token: number) => void;
|
|
615
|
+
rebindTerminalAbortSteeringSnapshot?: (token: number) => void;
|
|
616
|
+
abortPromptAndWaitWithTerminal: (handle: string, options: {
|
|
617
|
+
graceMs: number;
|
|
618
|
+
terminal?: {
|
|
619
|
+
scope: "turn" | "owned";
|
|
620
|
+
expectedEpoch?: number;
|
|
621
|
+
};
|
|
622
|
+
}) => Promise<RunSettlementProof>;
|
|
623
|
+
};
|
|
638
624
|
}): void;
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Kind-aware invocation reconciliation (prompt | skill) with optional durable store.
|
|
3
|
-
* Preserves Q26 admit/first-terminal/capacity/TTL semantics; indexes and caps are per-kind.
|
|
4
|
-
*/
|
|
5
1
|
import type { PromptReconciliationStatus, SdkPromptTerminalOutcome, TurnPromptReconciliation } from "../prompt-status";
|
|
2
|
+
import type { ReceiptState } from "../receipt-state";
|
|
6
3
|
import { type TurnResultContent, type TurnResultPage } from "../turn-result";
|
|
7
4
|
import { type PromptCorrelation } from "./prompt-reconciliation";
|
|
8
5
|
import type { ReconciliationKind, ReconciliationStore } from "./reconciliation-store";
|
|
@@ -11,6 +8,18 @@ export interface KindCorrelation extends PromptCorrelation {
|
|
|
11
8
|
kind: ReconciliationKind;
|
|
12
9
|
content?: TurnResultContent;
|
|
13
10
|
}
|
|
11
|
+
export interface SteerReconciliationResult {
|
|
12
|
+
commandId: string;
|
|
13
|
+
turnId: string;
|
|
14
|
+
clientRef: string;
|
|
15
|
+
status: "accepted" | "rejected" | "uncertain";
|
|
16
|
+
acceptedAt: number;
|
|
17
|
+
terminalAt?: number;
|
|
18
|
+
error?: {
|
|
19
|
+
code: string;
|
|
20
|
+
message: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
14
23
|
export interface KindAwareReconciliation {
|
|
15
24
|
admit(kind: ReconciliationKind, clientRef?: string): void;
|
|
16
25
|
releaseAdmission(kind: ReconciliationKind, clientRef?: string): void;
|
|
@@ -25,12 +34,12 @@ export interface KindAwareReconciliation {
|
|
|
25
34
|
error: unknown;
|
|
26
35
|
content?: TurnResultContent;
|
|
27
36
|
}): Promise<void>;
|
|
28
|
-
claimPendingOutcome(correlation: PromptCorrelation, outcome: SdkPromptTerminalOutcome): Promise<SdkPromptTerminalOutcome>;
|
|
29
|
-
|
|
37
|
+
claimPendingOutcome(kind: ReconciliationKind, correlation: PromptCorrelation, outcome: SdkPromptTerminalOutcome, receiptState?: Extract<ReceiptState, "present" | "missing">): Promise<SdkPromptTerminalOutcome>;
|
|
38
|
+
finalizeOutcome(kind: ReconciliationKind, correlation: PromptCorrelation, outcome?: SdkPromptTerminalOutcome, recordError?: {
|
|
30
39
|
code: string;
|
|
31
40
|
message: string;
|
|
32
41
|
}, content?: unknown): Promise<void>;
|
|
33
|
-
peekPendingOutcome(correlation: PromptCorrelation): SdkPromptTerminalOutcome | undefined;
|
|
42
|
+
peekPendingOutcome(kind: ReconciliationKind, correlation: PromptCorrelation): SdkPromptTerminalOutcome | undefined;
|
|
34
43
|
lookup(kind: ReconciliationKind, selector: {
|
|
35
44
|
commandId?: string;
|
|
36
45
|
turnId?: string;
|
|
@@ -41,6 +50,19 @@ export interface KindAwareReconciliation {
|
|
|
41
50
|
turnId?: string;
|
|
42
51
|
clientRef?: string;
|
|
43
52
|
}): TurnResultPage;
|
|
53
|
+
reserveSteer(clientRef: string, text: string): Promise<{
|
|
54
|
+
replay: boolean;
|
|
55
|
+
result: SteerReconciliationResult;
|
|
56
|
+
}>;
|
|
57
|
+
settleSteer(clientRef: string, status: "accepted" | "rejected" | "uncertain", error?: unknown): Promise<SteerReconciliationResult>;
|
|
58
|
+
lookupSteer(selector: string | {
|
|
59
|
+
commandId?: string;
|
|
60
|
+
turnId?: string;
|
|
61
|
+
clientRef?: string;
|
|
62
|
+
}): SteerReconciliationResult | {
|
|
63
|
+
clientRef?: string;
|
|
64
|
+
status: "unknown";
|
|
65
|
+
};
|
|
44
66
|
cleanup(): void;
|
|
45
67
|
activeCount(kind: ReconciliationKind): number;
|
|
46
68
|
/** Hydrate from durable store (call once at session host start). */
|
|
@@ -1,48 +1,18 @@
|
|
|
1
|
-
import type { Settings } from "../../config/settings";
|
|
2
1
|
import { RateLimitPool } from "./rate-limit-pool";
|
|
3
2
|
import { type ThreadedSend } from "./threaded-render";
|
|
4
|
-
|
|
5
|
-
readdir(path: string): Promise<string[]>;
|
|
6
|
-
}
|
|
7
|
-
export interface ManagedSessionSocket {
|
|
8
|
-
sessionId: string;
|
|
9
|
-
token: string;
|
|
10
|
-
ws: WebSocket;
|
|
11
|
-
pending: Map<string, {
|
|
12
|
-
sessionId: string;
|
|
13
|
-
actionId: string;
|
|
14
|
-
}>;
|
|
15
|
-
capable: boolean;
|
|
16
|
-
lastPongAt: number;
|
|
17
|
-
awaitingNonce: string | undefined;
|
|
18
|
-
pingTimer: ReturnType<typeof setInterval> | undefined;
|
|
19
|
-
}
|
|
3
|
+
/** Shared presentation engine for managed notification providers. */
|
|
20
4
|
export interface ManagedNotificationDaemonOptions {
|
|
21
|
-
settings: Settings;
|
|
22
|
-
fs: ManagedNotificationDaemonFs;
|
|
23
|
-
WebSocketImpl?: typeof WebSocket;
|
|
24
5
|
now?: () => number;
|
|
25
|
-
setIntervalImpl?: typeof setInterval;
|
|
26
|
-
clearIntervalImpl?: typeof clearInterval;
|
|
27
6
|
rateLimitPool?: RateLimitPool<{
|
|
28
7
|
send: ThreadedSend;
|
|
29
8
|
topicId?: string;
|
|
30
9
|
}>;
|
|
31
10
|
}
|
|
32
11
|
export declare abstract class ManagedNotificationDaemon {
|
|
33
|
-
protected readonly opts: ManagedNotificationDaemonOptions;
|
|
34
|
-
readonly sessions: Map<string, ManagedSessionSocket>;
|
|
35
12
|
readonly pool: RateLimitPool<{
|
|
36
13
|
send: ThreadedSend;
|
|
37
14
|
topicId?: string;
|
|
38
15
|
}>;
|
|
39
|
-
protected constructor(opts
|
|
40
|
-
scanRoots(): Promise<void>;
|
|
41
|
-
connectSession(sessionId: string, url: string, token: string): ManagedSessionSocket;
|
|
42
|
-
protected handleSessionMessage(session: ManagedSessionSocket, msg: Record<string, unknown>): Promise<boolean>;
|
|
16
|
+
protected constructor(opts?: ManagedNotificationDaemonOptions);
|
|
43
17
|
protected renderFrame(frame: Record<string, unknown>): ThreadedSend | undefined;
|
|
44
|
-
protected dropSession(session: ManagedSessionSocket): void;
|
|
45
|
-
protected abstract readRoots(): Promise<string[]>;
|
|
46
|
-
private sendHello;
|
|
47
|
-
private startLiveness;
|
|
48
18
|
}
|