@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
|
@@ -6,9 +6,9 @@ import { HEARTBEAT_TTL_MS } from "./daemon-paths";
|
|
|
6
6
|
import { type DaemonTransitionLock, type NotificationEndpointFile, type NotificationEndpointFileIdentity, type NotificationExactUnlinkResult } from "./notification-service";
|
|
7
7
|
import { type DaemonProcessReference } from "./telegram-daemon-control";
|
|
8
8
|
import { type TelegramSetupPreflight } from "./telegram-setup";
|
|
9
|
-
export { DAEMON_GENERATION, NOTIFICATION_PROTOCOL_VERSION, SERVING_EPOCH } from "./telegram-daemon-contract";
|
|
10
|
-
import { type
|
|
11
|
-
import type
|
|
9
|
+
export { DAEMON_GENERATION, NOTIFICATION_EVENT_SCHEMA_VERSION, NOTIFICATION_PROTOCOL_VERSION, SDK_LIFECYCLE_ROUTER_PROTOCOL_VERSION, SERVING_EPOCH, TELEGRAM_TRANSPORT_GENERATION, } from "./telegram-daemon-contract";
|
|
10
|
+
import { type AgentDirSessionLifecycleService } from "../lifecycle/client";
|
|
11
|
+
import { type NotificationSubscription, type SessionRouterProviderDeps } from "../router/session-router";
|
|
12
12
|
import { NotificationOperatorRuntime } from "./operator-runtime";
|
|
13
13
|
import { type AliasTable, type CallbackRoute } from "./telegram-reference";
|
|
14
14
|
import { type TopicEndpointBinding, type TopicRegistryCasAuthority, type TopicRegistryState } from "./topic-registry";
|
|
@@ -29,7 +29,6 @@ export interface DaemonState {
|
|
|
29
29
|
chatId: string;
|
|
30
30
|
startedAt: number;
|
|
31
31
|
heartbeatAt: number;
|
|
32
|
-
roots: string[];
|
|
33
32
|
/**
|
|
34
33
|
* Present only for the Windows source-launch handoff. `pid` starts as this
|
|
35
34
|
* short-lived launcher PID and may be rebound exactly once to the daemon PID.
|
|
@@ -82,8 +81,8 @@ export interface TelegramDaemonFs {
|
|
|
82
81
|
lstat?(path: string, opts: {
|
|
83
82
|
bigint: true;
|
|
84
83
|
}): Promise<ExactFileStat>;
|
|
85
|
-
readEndpointFile?(
|
|
86
|
-
exactUnlink?(
|
|
84
|
+
readEndpointFile?(file: string): Promise<NotificationEndpointFile>;
|
|
85
|
+
exactUnlink?(file: string, identity: NotificationEndpointFileIdentity): Promise<NotificationExactUnlinkResult>;
|
|
87
86
|
}
|
|
88
87
|
export interface SpawnResult {
|
|
89
88
|
pid?: number;
|
|
@@ -147,26 +146,7 @@ export declare function reloadReservationLockOptions(input: {
|
|
|
147
146
|
};
|
|
148
147
|
export declare const BTW_QUESTION_MAX_UNICODE_SCALARS = 4096;
|
|
149
148
|
export declare const BTW_QUESTION_MAX_UTF8_BYTES = 16384;
|
|
150
|
-
export declare function endpointAuthorityDigest(url: string, token: string, connectionIdentity?: string): string;
|
|
151
149
|
export { type DaemonPaths, daemonPaths } from "./daemon-paths";
|
|
152
|
-
export declare function deriveLifecycleAuditRedactionKey(botToken: string): Uint8Array;
|
|
153
|
-
/**
|
|
154
|
-
* Attach session-lifecycle control (create/close/resume) to the running daemon.
|
|
155
|
-
*
|
|
156
|
-
* Wires an already-started, authenticated control server to the lifecycle
|
|
157
|
-
* orchestrator with real daemon-side effects (tmux launcher / force-close /
|
|
158
|
-
* resume), a durable fsynced idempotency ledger + audit JSONL under the agent
|
|
159
|
-
* notifications dir, and strict paired-chat gating. The control server itself
|
|
160
|
-
* (NotificationControlServer) is owned/started by the daemon process; this
|
|
161
|
-
* function only connects it to policy. Returns the orchestrator deps for tests.
|
|
162
|
-
*/
|
|
163
|
-
export declare function startDaemonLifecycleControl(input: {
|
|
164
|
-
controlServer: ControlServerLike;
|
|
165
|
-
pairedChatId: string;
|
|
166
|
-
agentDir: string;
|
|
167
|
-
auditRedactionKey: Uint8Array;
|
|
168
|
-
env?: NodeJS.ProcessEnv;
|
|
169
|
-
}): OrchestratorDeps;
|
|
170
150
|
export declare class TopicRegistryDurabilityUnavailableError extends Error {
|
|
171
151
|
readonly code = "durability_unavailable";
|
|
172
152
|
constructor(cause: unknown);
|
|
@@ -326,119 +306,8 @@ export declare function renewOwnerHeartbeatSidecar(input: {
|
|
|
326
306
|
*/
|
|
327
307
|
attachedEndpoints?: number;
|
|
328
308
|
}): Promise<OwnerHeartbeatSidecarRenewal>;
|
|
329
|
-
export interface NotificationRootRegistration {
|
|
330
|
-
root?: string;
|
|
331
|
-
managed?: boolean;
|
|
332
|
-
token?: string;
|
|
333
|
-
}
|
|
334
|
-
export declare function readNotificationRootRegistration(input: {
|
|
335
|
-
settings: Settings;
|
|
336
|
-
sessionId: string;
|
|
337
|
-
fs?: TelegramDaemonFs;
|
|
338
|
-
}): Promise<NotificationRootRegistration>;
|
|
339
|
-
export interface RegisterNotificationRootResult {
|
|
340
|
-
root: string;
|
|
341
|
-
/** Per-registration ownership token fencing a stale same-session cleanup from deleting a live replacement registration. */
|
|
342
|
-
token: string;
|
|
343
|
-
}
|
|
344
|
-
export declare function registerNotificationRoot(input: {
|
|
345
|
-
settings: Settings;
|
|
346
|
-
cwd: string;
|
|
347
|
-
sessionId: string;
|
|
348
|
-
fs?: TelegramDaemonFs;
|
|
349
|
-
}): Promise<RegisterNotificationRootResult>;
|
|
350
|
-
export interface UnregisterNotificationRootResult {
|
|
351
|
-
root: string;
|
|
352
|
-
remainingRoots: number;
|
|
353
|
-
/** Opaque fingerprint of the exact registry written by this successful unregister. */
|
|
354
|
-
registryFingerprint?: string;
|
|
355
|
-
}
|
|
356
|
-
/** Remove one session's Telegram scan root without disturbing other live session roots. */
|
|
357
|
-
export declare function unregisterNotificationRoot(input: {
|
|
358
|
-
settings: Settings;
|
|
359
|
-
cwd: string;
|
|
360
|
-
sessionId: string;
|
|
361
|
-
fs?: TelegramDaemonFs;
|
|
362
|
-
/** Ownership token minted by this runtime's own registration; a stale cleanup presenting an older token never deletes a replacement registration. */
|
|
363
|
-
registrationToken?: string;
|
|
364
|
-
}): Promise<UnregisterNotificationRootResult>;
|
|
365
|
-
/** Run an action while the roots registry lock excludes any registration or unregister. */
|
|
366
|
-
export declare function withNotificationRootRegistryFence(input: {
|
|
367
|
-
settings: Settings;
|
|
368
|
-
registryFingerprint: string;
|
|
369
|
-
action: () => Promise<void>;
|
|
370
|
-
fs?: TelegramDaemonFs;
|
|
371
|
-
}): Promise<boolean>;
|
|
372
|
-
/**
|
|
373
|
-
* Leak artifact prefixes left when native exact-unlink cleanup is retained
|
|
374
|
-
* (#2956). Nothing previously reaped these; they accumulate in the notifications
|
|
375
|
-
* directory across ownership transitions.
|
|
376
|
-
*/
|
|
377
|
-
export declare const NOTIFICATION_LEAK_ARTIFACT_PREFIXES: readonly [".gjc-delete-daemon-transition-", ".gjc-exact-unlink-placeholder-", ".gjc-delete-notification-endpoint-", ".gjc-delete-notification-staging-temp-"];
|
|
378
|
-
/** Grace window before a leak artifact is reaped (covers in-flight unlinks). */
|
|
379
|
-
export declare const NOTIFICATION_LEAK_ARTIFACT_GRACE_MS: number;
|
|
380
309
|
/** True when a path is permanently gone (not a transient I/O blip). */
|
|
381
310
|
export declare function isPermanentMissingPathError(error: unknown): boolean;
|
|
382
|
-
/** A publication staging claim recovered from an abandoned temp's name. */
|
|
383
|
-
export interface NotificationStagingTempClaim {
|
|
384
|
-
/** Published sibling this temp was staged for. */
|
|
385
|
-
destination: string;
|
|
386
|
-
/** PID of the process that staged it. */
|
|
387
|
-
pid: number;
|
|
388
|
-
/** Wall-clock ms the publisher recorded when it staged the temp. */
|
|
389
|
-
stagedAtMs: number;
|
|
390
|
-
}
|
|
391
|
-
/**
|
|
392
|
-
* Recover the publication claim encoded in a staging temp's name, or
|
|
393
|
-
* `undefined` when `name` is not a staging temp or its PID/timestamp fields are
|
|
394
|
-
* not usable integers. An unparseable claim is never reaped.
|
|
395
|
-
*/
|
|
396
|
-
export declare function parseNotificationStagingTemp(name: string): NotificationStagingTempClaim | undefined;
|
|
397
|
-
export declare function isNotificationLeakArtifactName(name: string): boolean;
|
|
398
|
-
/**
|
|
399
|
-
* Drop permanently missing scan roots from the durable registry under the roots
|
|
400
|
-
* lock. Session map entries that pointed only at those roots are removed too.
|
|
401
|
-
*/
|
|
402
|
-
export declare function pruneMissingNotificationRoots(input: {
|
|
403
|
-
settings: Settings;
|
|
404
|
-
fs?: TelegramDaemonFs;
|
|
405
|
-
/** When set, only these roots are considered; otherwise every registered root is probed. */
|
|
406
|
-
candidates?: readonly string[];
|
|
407
|
-
}): Promise<{
|
|
408
|
-
pruned: string[];
|
|
409
|
-
remaining: number;
|
|
410
|
-
}>;
|
|
411
|
-
/**
|
|
412
|
-
* Reap retained exact-unlink / ownership-transition quarantine files older than
|
|
413
|
-
* the grace window from the notifications directory, plus publication staging
|
|
414
|
-
* temps whose publisher is provably dead.
|
|
415
|
-
*/
|
|
416
|
-
export declare function reapStaleNotificationArtifacts(input: {
|
|
417
|
-
settings: Settings;
|
|
418
|
-
fs?: TelegramDaemonFs;
|
|
419
|
-
now?: () => number;
|
|
420
|
-
graceMs?: number;
|
|
421
|
-
/** Liveness seam used to prove a staging temp's publisher is dead. */
|
|
422
|
-
pidAlive?: (pid: number) => boolean;
|
|
423
|
-
}): Promise<{
|
|
424
|
-
removed: string[];
|
|
425
|
-
skipped: number;
|
|
426
|
-
}>;
|
|
427
|
-
/**
|
|
428
|
-
* Startup / ownership self-heal: prune dead roots and reap leak artifacts so
|
|
429
|
-
* `gjc daemon reload` recovers a degraded install without manual surgery (#2956).
|
|
430
|
-
*/
|
|
431
|
-
export declare function healTelegramDaemonNotificationState(input: {
|
|
432
|
-
settings: Settings;
|
|
433
|
-
fs?: TelegramDaemonFs;
|
|
434
|
-
now?: () => number;
|
|
435
|
-
graceMs?: number;
|
|
436
|
-
/** Liveness seam used to prove a staging temp's publisher is dead. */
|
|
437
|
-
pidAlive?: (pid: number) => boolean;
|
|
438
|
-
}): Promise<{
|
|
439
|
-
prunedRoots: string[];
|
|
440
|
-
removedArtifacts: string[];
|
|
441
|
-
}>;
|
|
442
311
|
export declare function hasSafeDaemonStateShape(state: unknown): state is DaemonState;
|
|
443
312
|
type ParentDaemonStateBase = Omit<DaemonState, "incarnation" | "acquisitionId" | "ownershipPhase" | "generation" | "launcherPid"> & {
|
|
444
313
|
incarnation?: undefined;
|
|
@@ -504,7 +373,6 @@ export declare function isCurrentCompatibleOwner(input: {
|
|
|
504
373
|
}): boolean;
|
|
505
374
|
export declare function acquireDaemonOwnership(input: {
|
|
506
375
|
settings: Settings;
|
|
507
|
-
roots?: string[];
|
|
508
376
|
tokenFingerprint: string;
|
|
509
377
|
chatId: string;
|
|
510
378
|
fs?: TelegramDaemonFs;
|
|
@@ -648,8 +516,6 @@ export declare function markDaemonOwnerStopped(input: {
|
|
|
648
516
|
}): Promise<boolean>;
|
|
649
517
|
/** Read the persisted daemon ownership state (or undefined when absent). */
|
|
650
518
|
export declare function readDaemonState(settings: Pick<Settings, "getAgentDir">, fs?: TelegramDaemonFs): Promise<DaemonState | undefined>;
|
|
651
|
-
/** Read the persisted notification roots list. */
|
|
652
|
-
export declare function readDaemonRoots(settings: Pick<Settings, "getAgentDir">, fs?: TelegramDaemonFs): Promise<string[]>;
|
|
653
519
|
/** Injectable readers for {@link resolveTelegramSetupPreflight}, defaulting to the real OS/state probes. */
|
|
654
520
|
export interface ResolveTelegramSetupPreflightDeps {
|
|
655
521
|
readDaemonState?: (settings: Settings) => Promise<DaemonState | undefined>;
|
|
@@ -668,7 +534,6 @@ export interface ResolveTelegramSetupPreflightDeps {
|
|
|
668
534
|
export declare function resolveTelegramSetupPreflight(settings: Settings, deps?: ResolveTelegramSetupPreflightDeps): Promise<TelegramSetupPreflight>;
|
|
669
535
|
export interface TelegramSpawnOwnerInput {
|
|
670
536
|
settings: Settings;
|
|
671
|
-
roots?: string[];
|
|
672
537
|
tokenFingerprint: string;
|
|
673
538
|
chatId: string;
|
|
674
539
|
/** Ephemeral outbound-only validation destination for this owner launch. */
|
|
@@ -714,12 +579,7 @@ export declare function buildTelegramDaemonSpawnArgs(input: {
|
|
|
714
579
|
args: string[];
|
|
715
580
|
runtime: DaemonRuntimeInfo;
|
|
716
581
|
};
|
|
717
|
-
/**
|
|
718
|
-
* Acquire ownership for the given Telegram identity and, if acquired, spawn a
|
|
719
|
-
* fresh detached daemon process. Does NOT register notification roots; callers
|
|
720
|
-
* that own a session (autostart) register roots separately, while reload reuses
|
|
721
|
-
* already-persisted roots.
|
|
722
|
-
*/
|
|
582
|
+
/** Acquire ownership for the configured Telegram daemon and spawn a detached owner. */
|
|
723
583
|
export declare function spawnTelegramDaemonOwner(input: TelegramSpawnOwnerInput, deps?: TelegramDaemonDeps): Promise<TelegramSpawnOwnerResult>;
|
|
724
584
|
/**
|
|
725
585
|
* Owner-bound reclamation of a confirmed-dead daemon owner, mirroring the
|
|
@@ -733,37 +593,23 @@ export type DeadOwnerRecoveryResult = {
|
|
|
733
593
|
reason: "cleared";
|
|
734
594
|
} | {
|
|
735
595
|
recovered: false;
|
|
736
|
-
reason: "not-confirmed-dead" | "unsafe-lock" | "transition-contended" | "
|
|
596
|
+
reason: "not-confirmed-dead" | "unsafe-lock" | "transition-contended" | "lock-changed";
|
|
737
597
|
};
|
|
738
|
-
/** Preflight cleanup for a confirmed-dead owner
|
|
598
|
+
/** Preflight cleanup for a confirmed-dead owner. */
|
|
739
599
|
export declare function reclaimDeadDaemonOwner(input: {
|
|
740
600
|
settings: Settings;
|
|
741
|
-
endpointDir?: string;
|
|
742
601
|
fs?: TelegramDaemonFs;
|
|
743
602
|
now?: () => number;
|
|
744
603
|
pidAlive?: (pid: number) => boolean;
|
|
745
604
|
pidIncarnation?: (pid: number) => string | undefined;
|
|
746
605
|
}): Promise<DeadOwnerRecoveryResult>;
|
|
747
|
-
/**
|
|
748
|
-
* Ensure a configured daemon owns this session root, preserving ownership safety
|
|
749
|
-
* while exposing whether a #2028 generation handoff was required.
|
|
750
|
-
*/
|
|
606
|
+
/** Ensure the configured Telegram owner is running. */
|
|
751
607
|
export declare function ensureTelegramDaemonRunningDetailed(input: {
|
|
752
608
|
settings: Settings;
|
|
753
|
-
cwd: string;
|
|
754
|
-
sessionId: string;
|
|
755
|
-
registerRoot?: boolean;
|
|
756
|
-
/** Receives each registration this ensure operation minted so the caller can fence its own later cleanup. */
|
|
757
|
-
onRegistered?: (registration: RegisterNotificationRootResult) => void;
|
|
758
609
|
}, deps?: TelegramDaemonDeps): Promise<EnsureTelegramDaemonDetailedResult>;
|
|
759
|
-
/**
|
|
760
|
-
* Legacy compatibility mapping for callers that only distinguish ownership from
|
|
761
|
-
* attachment. New orchestration should use {@link ensureTelegramDaemonRunningDetailed}.
|
|
762
|
-
*/
|
|
610
|
+
/** Map owner startup to the public daemon result. */
|
|
763
611
|
export declare function ensureTelegramDaemonRunning(input: {
|
|
764
612
|
settings: Settings;
|
|
765
|
-
cwd: string;
|
|
766
|
-
sessionId: string;
|
|
767
613
|
}, deps?: TelegramDaemonDeps): Promise<EnsureDaemonResult>;
|
|
768
614
|
export interface BotApi {
|
|
769
615
|
call(method: string, body: unknown, opts?: {
|
|
@@ -775,7 +621,7 @@ export interface TelegramTransportOptions {
|
|
|
775
621
|
botToken: string;
|
|
776
622
|
apiBase?: string;
|
|
777
623
|
fetchImpl?: typeof fetch;
|
|
778
|
-
setTimeoutImpl?:
|
|
624
|
+
setTimeoutImpl?: (callback: () => void, ms?: number) => Timer | NodeJS.Timeout;
|
|
779
625
|
}
|
|
780
626
|
/** Telegram Bot API transport: HTTP JSON/multipart details stay out of daemon orchestration. */
|
|
781
627
|
export declare class TelegramBotTransport implements BotApi {
|
|
@@ -826,12 +672,15 @@ export declare class TelegramUpdatePoller {
|
|
|
826
672
|
pollOnceResult(signal?: AbortSignal): Promise<TelegramPollResult>;
|
|
827
673
|
}
|
|
828
674
|
/** Mutable dispatch state shared by session frames and inbound Telegram updates. */
|
|
675
|
+
export type InboundReactionAction = "none" | "queued" | "consumed" | "retract";
|
|
676
|
+
/** Exact daemon reaction correction for a session-side inbound acknowledgement. */
|
|
677
|
+
export declare function inboundReactionAction(state: unknown, hasTarget: boolean): InboundReactionAction;
|
|
829
678
|
export declare class TelegramEventDispatchState {
|
|
830
679
|
readonly busy: Set<string>;
|
|
831
680
|
readonly inboundReactions: Map<number, {
|
|
832
681
|
messageId: number;
|
|
833
682
|
socketLease?: {
|
|
834
|
-
session:
|
|
683
|
+
session: AttachmentSession;
|
|
835
684
|
token: number;
|
|
836
685
|
logicalSessionId: string;
|
|
837
686
|
};
|
|
@@ -863,9 +712,8 @@ export interface TelegramDaemonOptions {
|
|
|
863
712
|
apiBase?: string;
|
|
864
713
|
fetchImpl?: typeof fetch;
|
|
865
714
|
fs?: TelegramDaemonFs;
|
|
866
|
-
WebSocketImpl?: typeof WebSocket;
|
|
867
715
|
now?: () => number;
|
|
868
|
-
setTimeoutImpl?:
|
|
716
|
+
setTimeoutImpl?: (callback: () => void, ms?: number) => Timer | NodeJS.Timeout;
|
|
869
717
|
clearTimeoutImpl?: typeof clearTimeout;
|
|
870
718
|
setIntervalImpl?: typeof setInterval;
|
|
871
719
|
clearIntervalImpl?: typeof clearInterval;
|
|
@@ -875,30 +723,14 @@ export interface TelegramDaemonOptions {
|
|
|
875
723
|
idleTimeoutMs?: number;
|
|
876
724
|
/** TTL for durable topic-adoption intents (default 10 minutes). Observed, not a fixed contract. */
|
|
877
725
|
adoptionIntentTtlMs?: number;
|
|
878
|
-
scanIntervalMs?: number;
|
|
879
726
|
pid?: number;
|
|
880
|
-
/** Liveness probe for skipping dead-PID endpoint records in {@link TelegramNotificationDaemon.scanRoots}. */
|
|
881
|
-
pidAlive?: (pid: number) => boolean;
|
|
882
727
|
pidIncarnation?: (pid: number) => string | undefined;
|
|
883
728
|
botApi?: BotApi;
|
|
884
729
|
control?: DaemonControlHooks;
|
|
885
|
-
/**
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
* default applies (e.g. lifecycle control disabled), no control server starts.
|
|
890
|
-
*/
|
|
891
|
-
createLifecycleControlServer?: LifecycleControlServerFactory | null;
|
|
892
|
-
/**
|
|
893
|
-
* Test seam for observing the exact production lifecycle dependency input.
|
|
894
|
-
* Production defaults to {@link buildOrchestratorDeps}.
|
|
895
|
-
*/
|
|
896
|
-
createLifecycleOrchestratorDeps?: (input: {
|
|
897
|
-
pairedChatId: string;
|
|
898
|
-
agentNotificationsDir: string;
|
|
899
|
-
sessionsRoot: string;
|
|
900
|
-
auditRedactionKey: Uint8Array;
|
|
901
|
-
}) => OrchestratorDeps;
|
|
730
|
+
/** SDK-owned lifecycle service seam; production constructs it from agentDir. */
|
|
731
|
+
createLifecycleService?: (agentDir: string) => AgentDirSessionLifecycleService;
|
|
732
|
+
/** Narrow Router transport seams; provider callbacks are owned by Telegram. */
|
|
733
|
+
routerDeps?: SessionRouterProviderDeps;
|
|
902
734
|
/** Rich text promotion (enabled by default; see rich-render.ts). */
|
|
903
735
|
rich?: {
|
|
904
736
|
enabled: boolean;
|
|
@@ -914,13 +746,20 @@ export interface TelegramDaemonOptions {
|
|
|
914
746
|
/** Controls which Telegram sends play an audible notification. Defaults to all. */
|
|
915
747
|
sound?: "all" | "important" | "none";
|
|
916
748
|
/**
|
|
917
|
-
*
|
|
918
|
-
* `{
|
|
919
|
-
*
|
|
749
|
+
* Telegram forum-topic naming. `nameTemplate` supports the `{repo}`,
|
|
750
|
+
* `{branch}`, and `{title}` placeholders; unset uses the GJC session title
|
|
751
|
+
* and falls back to a short session id while the title is unavailable.
|
|
920
752
|
*/
|
|
921
753
|
topics?: {
|
|
922
754
|
nameTemplate?: string;
|
|
923
755
|
};
|
|
756
|
+
/**
|
|
757
|
+
* Require every connected session to explicitly advertise Telegram topic
|
|
758
|
+
* eligibility in its identity header. Production daemon owners MUST enable
|
|
759
|
+
* this; the default is permissive only for direct embedded legacy clients and
|
|
760
|
+
* tests, and is never a provenance input supplied by notification factories.
|
|
761
|
+
*/
|
|
762
|
+
requireTelegramTopicEligibility?: boolean;
|
|
924
763
|
/**
|
|
925
764
|
* Optional compare-and-set store for installations that share topic state
|
|
926
765
|
* across hosts. When configured, every publication is fenced by it.
|
|
@@ -928,44 +767,55 @@ export interface TelegramDaemonOptions {
|
|
|
928
767
|
topicRegistryAuthority?: TopicRegistryCasAuthority;
|
|
929
768
|
/** Stable host-local identity. Required whenever a shared authority is configured. */
|
|
930
769
|
installationHostId?: string;
|
|
770
|
+
/**
|
|
771
|
+
* Orphan-owner reconciliation seam. Production wires the bounded orphan reap
|
|
772
|
+
* (marker-registry-authorized process-group termination of superseded daemon
|
|
773
|
+
* owners) so the daemon fences stale pollers before it becomes poll-capable
|
|
774
|
+
* and re-runs reconciliation periodically. Injectable for deterministic tests.
|
|
775
|
+
*/
|
|
776
|
+
orphanReap?: () => Promise<void>;
|
|
777
|
+
/** Periodic reconciliation cadence; defaults to ORPHAN_REAP_INTERVAL_MS. */
|
|
778
|
+
orphanReapIntervalMs?: number;
|
|
931
779
|
}
|
|
932
|
-
interface
|
|
933
|
-
/**
|
|
780
|
+
interface AttachmentSession {
|
|
781
|
+
/** Provider presentation metadata bound to one provider-local subscription. */
|
|
934
782
|
sessionId: string;
|
|
935
|
-
/** Current logical session carried by valid threaded frames on this transport. */
|
|
936
783
|
logicalSessionId: string;
|
|
937
|
-
/**
|
|
784
|
+
/**
|
|
785
|
+
* True only when the connected host explicitly owns a Telegram forum topic;
|
|
786
|
+
* only such producer-admitted sessions may own forum topics.
|
|
787
|
+
*/
|
|
788
|
+
telegramTopicsEnabled: boolean;
|
|
938
789
|
logicalSessionIdTrusted: boolean;
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
790
|
+
readonly subscription: NotificationSubscription;
|
|
791
|
+
readonly transport: {
|
|
792
|
+
readyState: number;
|
|
793
|
+
send(data: string): Promise<void>;
|
|
794
|
+
close(): void;
|
|
795
|
+
};
|
|
796
|
+
/** Opaque local identity used only to fence presentation state. */
|
|
797
|
+
attachmentKey: string;
|
|
798
|
+
/** Immutable SDK lifecycle generation from Router; never changed by replay payloads. */
|
|
799
|
+
lifecycleGeneration: number;
|
|
800
|
+
/** Telegram event/replay generation used only for cursor and publication ids. */
|
|
801
|
+
replayGeneration: number;
|
|
946
802
|
pending: Map<string, {
|
|
947
803
|
sessionId: string;
|
|
948
804
|
actionId: string;
|
|
949
805
|
}>;
|
|
950
|
-
/** True once the server advertised the `client_ping_pong` capability. */
|
|
951
806
|
capable: boolean;
|
|
952
807
|
ephemeralCapable: boolean;
|
|
953
|
-
/** Tool activity contract advertised by the connected host. */
|
|
954
808
|
toolActivityCapability?: "v1" | "v2";
|
|
955
|
-
/** Timestamp (via opts.now) of the last received pong; seeds the TTL window. */
|
|
956
809
|
lastPongAt: number;
|
|
957
|
-
/** Nonce of the most recent in-flight ping, if any. */
|
|
958
810
|
awaitingNonce: string | undefined;
|
|
959
|
-
|
|
960
|
-
pingTimer: ReturnType<typeof setInterval> | undefined;
|
|
961
|
-
/** Correlation id for the startup replay barrier. */
|
|
811
|
+
pingTimer: NodeJS.Timeout | undefined;
|
|
962
812
|
replayId: string;
|
|
963
|
-
/** Sequence cursor sent by the current startup replay request. */
|
|
964
|
-
replaySinceSeq: number;
|
|
965
|
-
/** Queues live frames until startup replay is applied. */
|
|
966
813
|
replayPending: boolean;
|
|
967
|
-
replayQueue:
|
|
968
|
-
|
|
814
|
+
replayQueue: Array<{
|
|
815
|
+
frame: Record<string, unknown>;
|
|
816
|
+
publicationId?: string;
|
|
817
|
+
}>;
|
|
818
|
+
activePublicationId?: string;
|
|
969
819
|
recoveryLease?: {
|
|
970
820
|
state: "pending" | "authorized" | "rejected";
|
|
971
821
|
logicalSessionId: string;
|
|
@@ -996,9 +846,8 @@ export declare class TelegramNotificationDaemon {
|
|
|
996
846
|
private readonly replayToolActivityEpochs;
|
|
997
847
|
private toolShutdownBarrier;
|
|
998
848
|
private toolActivityAmbiguous;
|
|
999
|
-
readonly sessions: Map<string,
|
|
849
|
+
readonly sessions: Map<string, AttachmentSession>;
|
|
1000
850
|
private readonly runtime;
|
|
1001
|
-
private readonly sessionRouter;
|
|
1002
851
|
private readonly pollConflictBackoff;
|
|
1003
852
|
private readonly loopBackoff;
|
|
1004
853
|
private running;
|
|
@@ -1010,11 +859,7 @@ export declare class TelegramNotificationDaemon {
|
|
|
1010
859
|
private readonly topics;
|
|
1011
860
|
/** Stable host-local identity; never persisted in shared topic authority. */
|
|
1012
861
|
private installationHostId;
|
|
1013
|
-
/** Serializes registry snapshots so an older atomic write cannot overwrite newer rename state. */
|
|
1014
|
-
/** Legacy sockets have no durable token, so explicit teardown is their revocation fence. */
|
|
1015
|
-
private readonly droppedSessions;
|
|
1016
862
|
private topicsPersistQueue;
|
|
1017
|
-
/** Serializes recovery compare/write/publish claims so competing endpoint migrations cannot durably diverge. */
|
|
1018
863
|
private recoveryBindingClaimQueue;
|
|
1019
864
|
/** Durable compensation fences retry under supervision until persistence succeeds. */
|
|
1020
865
|
private readonly compensationFenceRetries;
|
|
@@ -1035,16 +880,12 @@ export declare class TelegramNotificationDaemon {
|
|
|
1035
880
|
private readonly draftStream;
|
|
1036
881
|
/** Identity-bearing sessions by repo/branch surface, used to avoid transient duplicate topics. */
|
|
1037
882
|
private readonly topicOwnerByIdentity;
|
|
1038
|
-
/** Ephemeral legacy topic owners retained across a same-socket config rekey. */
|
|
1039
|
-
private readonly legacyTopicOwners;
|
|
1040
883
|
/** Preserved initiator topics must not route through a rekeyed transport. */
|
|
1041
884
|
private readonly preservedInitiatorTopics;
|
|
1042
885
|
/** Non-identity frames held until identity creates the correct thread. */
|
|
1043
886
|
private readonly pendingThreadedFrames;
|
|
1044
887
|
/** Durable endpoint leases for sessions that already sent an authorized session_closed. */
|
|
1045
888
|
private readonly closedEndpointKeys;
|
|
1046
|
-
/** Exactly one authorized transport may route each recovered logical session. */
|
|
1047
|
-
private readonly logicalSessionOwners;
|
|
1048
889
|
private nextSocketLeaseToken;
|
|
1049
890
|
/** True once the daemon has nudged the user to enable Threaded Mode. */
|
|
1050
891
|
private threadedFallbackNoticeSent;
|
|
@@ -1060,22 +901,6 @@ export declare class TelegramNotificationDaemon {
|
|
|
1060
901
|
private get busy();
|
|
1061
902
|
/** Inbound update id → originating Telegram message, for delivery reactions. */
|
|
1062
903
|
private get inboundReactions();
|
|
1063
|
-
/**
|
|
1064
|
-
* The owner-bound session-lifecycle control server (create/close/resume).
|
|
1065
|
-
* Started in {@link run} after ownership is confirmed (so exactly one owner
|
|
1066
|
-
* ever runs one), stopped in run()'s finally on any exit path.
|
|
1067
|
-
*/
|
|
1068
|
-
private controlServer;
|
|
1069
|
-
/** True while lifecycle control is active, so the loop keeps polling at idle. */
|
|
1070
|
-
private lifecycleControlActive;
|
|
1071
|
-
/** Control token (in-memory) the loopback client presents; never persisted/logged. */
|
|
1072
|
-
private controlToken;
|
|
1073
|
-
/** Loopback WS client to the daemon's own control endpoint (Option A real wire path). */
|
|
1074
|
-
private controlClient;
|
|
1075
|
-
/** Pending lifecycle responses awaiting a control-endpoint reply, by requestId. */
|
|
1076
|
-
private readonly pendingLifecycle;
|
|
1077
|
-
/** Monotonic counter for unique lifecycle request ids. */
|
|
1078
|
-
private lifecycleSeq;
|
|
1079
904
|
/** Attempt tombstones live for the daemon lifetime so a commit key can never send twice. */
|
|
1080
905
|
private readonly selectedAckCache;
|
|
1081
906
|
private cacheSelectedAck;
|
|
@@ -1087,42 +912,44 @@ export declare class TelegramNotificationDaemon {
|
|
|
1087
912
|
* ~25s getUpdates timeout. Safe to call from a signal handler.
|
|
1088
913
|
*/
|
|
1089
914
|
requestStop(_reason?: "reload" | "stop" | "signal"): void;
|
|
1090
|
-
/**
|
|
1091
|
-
* Start the owner-bound lifecycle control server and wire it to the
|
|
1092
|
-
* orchestrator. Called from {@link run} ONLY after ownership is confirmed, so
|
|
1093
|
-
* exactly one owner ever starts exactly one control server (no second poller
|
|
1094
|
-
* / 409). A control-server failure degrades gracefully: the daemon keeps
|
|
1095
|
-
* serving notifications without lifecycle control. Returns true when started.
|
|
1096
|
-
*/
|
|
1097
|
-
private startLifecycleControl;
|
|
1098
|
-
/** Stop the lifecycle control server (idempotent); called from run()'s finally. */
|
|
1099
|
-
private stopLifecycleControl;
|
|
1100
|
-
/**
|
|
1101
|
-
* Connect the loopback control client and resolve responses by requestId.
|
|
1102
|
-
* Resolves true once the socket is OPEN (bounded), false on error/timeout, so
|
|
1103
|
-
* the caller only marks lifecycle control active when commands can be sent.
|
|
1104
|
-
*/
|
|
1105
|
-
private connectControlClient;
|
|
1106
|
-
/** Send a lifecycle frame over the loopback client and await the response. */
|
|
1107
|
-
private submitLifecycleFrame;
|
|
1108
|
-
private nextLifecycleRequestId;
|
|
1109
|
-
/** Build an authenticated lifecycle frame from a parsed command + identity. */
|
|
1110
|
-
private buildLifecycleFrame;
|
|
1111
|
-
/**
|
|
1112
|
-
* Handle a paired-chat /session_* command: validate (shared validator),
|
|
1113
|
-
* route to the control endpoint, and reply with the outcome. Returns true
|
|
1114
|
-
* when the message was a lifecycle command (so the caller stops processing).
|
|
1115
|
-
*/
|
|
915
|
+
/** Handle a paired-chat /session_* command through the SDK lifecycle service. */
|
|
1116
916
|
private handleLifecycleCommand;
|
|
1117
917
|
private refreshBotIdentity;
|
|
1118
|
-
/** Map a lifecycle response/error to a user-facing message (G010 surfacing). */
|
|
1119
|
-
private formatLifecycleResponse;
|
|
1120
918
|
private callBotApi;
|
|
1121
919
|
private validationTopicDestination;
|
|
1122
920
|
private readonly callBotApiClassified;
|
|
1123
|
-
private botApiWithOutcomeCollector;
|
|
1124
921
|
constructor(opts: TelegramDaemonOptions);
|
|
1125
|
-
|
|
922
|
+
/** @internal Test-only access to durable publication receipt transitions. */
|
|
923
|
+
publicationReceiptHarnessForTest(): {
|
|
924
|
+
claimPublication: (publicationId: string) => Promise<void>;
|
|
925
|
+
markPublicationAttempted: (publicationId: string) => Promise<void>;
|
|
926
|
+
markPublicationDelivered: (publicationId: string) => Promise<void>;
|
|
927
|
+
markPublicationRejected: (publicationId: string, definitiveProviderRejection?: boolean) => Promise<void>;
|
|
928
|
+
loadPresentationState: () => Promise<void>;
|
|
929
|
+
publicationShouldSuppress: (publicationId: string) => boolean;
|
|
930
|
+
publicationSettlement: (publicationId: string) => PromiseWithResolvers<void>;
|
|
931
|
+
settlePublication: (publicationId: string) => void;
|
|
932
|
+
drainPersistence: () => Promise<void>;
|
|
933
|
+
};
|
|
934
|
+
/** @internal Test-only access to attachment routing lifecycle transitions. */
|
|
935
|
+
attachmentRoutingHarnessForTest(): {
|
|
936
|
+
attach: (subscription: NotificationSubscription) => void;
|
|
937
|
+
remove: (subscription: NotificationSubscription, reason: "removed" | "replaced" | "replaced_same_generation") => Promise<void>;
|
|
938
|
+
ownsLogicalSession: (sessionId: string) => boolean;
|
|
939
|
+
cleanupReceipts: () => {
|
|
940
|
+
sessionId: string;
|
|
941
|
+
subscriptionId: string;
|
|
942
|
+
state: "pending" | "failed" | "completed";
|
|
943
|
+
reason?: string;
|
|
944
|
+
}[];
|
|
945
|
+
};
|
|
946
|
+
/** @internal Test-only access to the durable archive retry drain. */
|
|
947
|
+
archiveReconciliationHarnessForTest(): {
|
|
948
|
+
reconcilePendingTopicDeletes: () => Promise<void>;
|
|
949
|
+
archiveAuthorizedTopics: () => Promise<void>;
|
|
950
|
+
};
|
|
951
|
+
/** @internal Test-only access to explicit durable archive reconciliation. */
|
|
952
|
+
private archiveAuthorizedTopicsForTest;
|
|
1126
953
|
loadAliases(): Promise<void>;
|
|
1127
954
|
persistAliases(): Promise<void>;
|
|
1128
955
|
loadSeenUpdateIds(): Promise<void>;
|
|
@@ -1131,29 +958,12 @@ export declare class TelegramNotificationDaemon {
|
|
|
1131
958
|
private rememberSeenUpdateId;
|
|
1132
959
|
private reserveSeenUpdateId;
|
|
1133
960
|
private releaseSeenUpdateId;
|
|
1134
|
-
|
|
1135
|
-
connectSession(sessionId: string, url: string, token: string): SessionSocket;
|
|
1136
|
-
/**
|
|
1137
|
-
* Start ack-based liveness for a session whose server advertised the
|
|
1138
|
-
* `client_ping_pong` capability. Each interval drops the session when no pong
|
|
1139
|
-
* has arrived within the TTL (the half-open case the socket never signals via
|
|
1140
|
-
* `close`), otherwise sends a fresh application-level ping. The timer is bound
|
|
1141
|
-
* to this exact session object.
|
|
1142
|
-
*/
|
|
1143
|
-
private startLiveness;
|
|
1144
|
-
/**
|
|
1145
|
-
* Idempotent, identity-guarded session teardown. Clears the liveness timer,
|
|
1146
|
-
* removes the map entry only when it still points at this exact session object
|
|
1147
|
-
* (so a delayed old close cannot delete a replacement), and best-effort closes
|
|
1148
|
-
* the socket. `scanRoots()` then reconnects the session.
|
|
1149
|
-
*/
|
|
961
|
+
/** Idempotent, identity-guarded attachment teardown. */
|
|
1150
962
|
private enqueueToolTerminalization;
|
|
1151
|
-
private scheduleVisibleToolTerminalization;
|
|
1152
963
|
private beginToolActivityShutdown;
|
|
1153
|
-
private dropSession;
|
|
1154
964
|
private deleteMessageRoutes;
|
|
1155
965
|
revokeCallbackAliases(socketLease: {
|
|
1156
|
-
session:
|
|
966
|
+
session: AttachmentSession;
|
|
1157
967
|
token: number;
|
|
1158
968
|
logicalSessionId: string;
|
|
1159
969
|
}): void;
|
|
@@ -1165,7 +975,7 @@ export declare class TelegramNotificationDaemon {
|
|
|
1165
975
|
* usable template applies so the caller uses the built-in composition. The
|
|
1166
976
|
* template is honored only if it is non-blank AND every placeholder it
|
|
1167
977
|
* references (`{repo}`, `{branch}`, `{title}`) has a value for this session,
|
|
1168
|
-
* which preserves the default title
|
|
978
|
+
* which preserves the default session-title fallback and prevents
|
|
1169
979
|
* half-filled names with dangling separators. Unknown placeholders are left
|
|
1170
980
|
* verbatim.
|
|
1171
981
|
*/
|
|
@@ -1195,7 +1005,6 @@ export declare class TelegramNotificationDaemon {
|
|
|
1195
1005
|
private topicLeaseIsCurrent;
|
|
1196
1006
|
/** Best-effort re-assertion for a durable user-owned topic name. */
|
|
1197
1007
|
private reconcileUserTopicName;
|
|
1198
|
-
private rememberPendingThreadedFrame;
|
|
1199
1008
|
private flushPendingThreadedFrames;
|
|
1200
1009
|
/**
|
|
1201
1010
|
* Resolve (creating once via `createForumTopic`) the forum topic for a
|
|
@@ -1204,8 +1013,6 @@ export declare class TelegramNotificationDaemon {
|
|
|
1204
1013
|
* one-time nudge) or drop fail-closed for a non-private chat.
|
|
1205
1014
|
*/
|
|
1206
1015
|
private ensureTopic;
|
|
1207
|
-
private topicPastOrphanGrace;
|
|
1208
|
-
private observeOrphanedTopic;
|
|
1209
1016
|
/** Best-effort delete of a session topic once its local notification endpoint shuts down. */
|
|
1210
1017
|
/** Join all close, compensation, orphan, and restart callers for one session. */
|
|
1211
1018
|
private archiveTopic;
|
|
@@ -1219,8 +1026,10 @@ export declare class TelegramNotificationDaemon {
|
|
|
1219
1026
|
loadAdoptionIntents(): Promise<void>;
|
|
1220
1027
|
private startAdoptionSweepTimer;
|
|
1221
1028
|
private stopAdoptionSweepTimer;
|
|
1222
|
-
/** Retry crash-interrupted topic archives only when the durable backoff permits it. */
|
|
1029
|
+
/** Retry crash-interrupted or ambiguous topic archives only when the durable backoff permits it. */
|
|
1223
1030
|
private reconcilePendingTopicDeletes;
|
|
1031
|
+
private startArchiveRetryTimer;
|
|
1032
|
+
private stopArchiveRetryTimer;
|
|
1224
1033
|
/** Download one Telegram file with the Bot API's 20 MiB ceiling and one end-to-end deadline. */
|
|
1225
1034
|
private downloadTelegramFile;
|
|
1226
1035
|
/**
|
|
@@ -1254,7 +1063,6 @@ export declare class TelegramNotificationDaemon {
|
|
|
1254
1063
|
*/
|
|
1255
1064
|
private flushChain;
|
|
1256
1065
|
private flushPool;
|
|
1257
|
-
/** Drain the shared rate-limit pool and deliver each granted send to its topic. */
|
|
1258
1066
|
private submitPool;
|
|
1259
1067
|
private flushPoolInner;
|
|
1260
1068
|
/**
|
|
@@ -1295,35 +1103,36 @@ export declare class TelegramNotificationDaemon {
|
|
|
1295
1103
|
*/
|
|
1296
1104
|
private attachedEndpointCount;
|
|
1297
1105
|
private renewOwnershipHeartbeat;
|
|
1106
|
+
private renewActiveTopicLeases;
|
|
1298
1107
|
/**
|
|
1299
1108
|
* Ownership must be renewed independently of Telegram's 25-second long poll:
|
|
1300
1109
|
* the ownership TTL is shorter than a single poll request.
|
|
1301
1110
|
*/
|
|
1302
1111
|
private startOwnershipHeartbeatTimer;
|
|
1303
1112
|
private stopOwnershipHeartbeatTimer;
|
|
1113
|
+
private startTopicReconcileTimer;
|
|
1114
|
+
private stopTopicReconcileTimer;
|
|
1304
1115
|
/**
|
|
1305
|
-
*
|
|
1306
|
-
*
|
|
1307
|
-
*
|
|
1308
|
-
*
|
|
1309
|
-
* fires and forgets, and the run loop awaits without a handler. A rejection
|
|
1310
|
-
* escaping either one (a shared topic authority whose lock or compare-and-set
|
|
1311
|
-
* is momentarily unavailable is the observed case) reaches the process-level
|
|
1312
|
-
* handler, which exits the daemon: every session topic is then left as an
|
|
1313
|
-
* unarchived shell that answers nothing, and the sessions that were still
|
|
1314
|
-
* live lose notifications too. Report the failure and let the next scan
|
|
1315
|
-
* retry instead.
|
|
1116
|
+
* Periodic orphan-owner reconciliation. The daemon re-runs the bounded orphan
|
|
1117
|
+
* reap on a fixed cadence so a stale poller that survived the startup sweep
|
|
1118
|
+
* (or appeared after it) is eventually fenced. Failures are logged, never
|
|
1119
|
+
* fatal: reconciliation is convergence work, not a run precondition.
|
|
1316
1120
|
*/
|
|
1317
|
-
private
|
|
1318
|
-
private
|
|
1319
|
-
private stopScanTimer;
|
|
1121
|
+
private startOrphanReapTimer;
|
|
1122
|
+
private stopOrphanReapTimer;
|
|
1320
1123
|
/** Send a single `typing` chat action into a busy session's topic (best-effort). */
|
|
1321
1124
|
private sendTyping;
|
|
1322
1125
|
/** Set a native reaction on an inbound thread message (best-effort). */
|
|
1323
1126
|
private setReaction;
|
|
1127
|
+
/**
|
|
1128
|
+
* Retract a native reaction by sending the empty reaction list the Bot API
|
|
1129
|
+
* requires; an empty `emoji` string is not a valid reaction and is silently
|
|
1130
|
+
* rejected, leaving the stale queued marker visible.
|
|
1131
|
+
*/
|
|
1132
|
+
private retractReaction;
|
|
1324
1133
|
private startTypingTimer;
|
|
1325
1134
|
private stopTypingTimer;
|
|
1326
|
-
handleSessionMessage(session:
|
|
1135
|
+
handleSessionMessage(session: AttachmentSession, msg: any, publicationId?: string): Promise<void>;
|
|
1327
1136
|
private answerCallbackQueryBestEffort;
|
|
1328
1137
|
private sendStaleGuidance;
|
|
1329
1138
|
/**
|