pi-harness-runtime 1.1.398 → 1.1.403
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/AGENTS.md +44 -2
- package/CHANGELOG.md +28 -0
- package/RULES.md +28 -0
- package/harness/agent-handoff.ts +2 -3
- package/harness/autonomous-review.ts +1 -1
- package/harness/blackboard.ts +2 -3
- package/harness/context-compact-orchestrator.ts +1 -1
- package/harness/context-window-manager.ts +2 -2
- package/harness/e2e/playwright-runner.ts +6 -4
- package/harness/herdr-agents.ts +1 -1
- package/harness/job-state-machine.ts +1 -1
- package/harness/langchain/daemon.ts +3 -3
- package/harness/langchain/graph.ts +2 -2
- package/harness/langchain/ping-pong-middleware.ts +2 -2
- package/harness/loop-code-agent.ts +6 -4
- package/harness/loop-controller.ts +1 -1
- package/harness/loop-review-agent.ts +1 -1
- package/harness/loop-types.ts +1 -1
- package/harness/master-planner.ts +1 -1
- package/harness/project-detector/detector.ts +1 -2
- package/harness/repair-engine.ts +2 -4
- package/harness/service-diagnostics.ts +1 -1
- package/harness/skill-sync.ts +3 -3
- package/index.ts +276 -55
- package/mirror.ts +1 -1
- package/package.json +5 -3
- package/packages/a2a-adapter/dist/discovery.d.ts.map +1 -1
- package/packages/a2a-adapter/dist/discovery.js +0 -1
- package/packages/a2a-adapter/dist/discovery.js.map +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/a2a-adapter/src/discovery.ts +0 -1
- package/packages/agent-policy/package.json +1 -1
- package/packages/architecture-generator/package.json +1 -1
- package/packages/auth/dist/index.d.ts +9 -0
- package/packages/auth/dist/index.d.ts.map +1 -0
- package/packages/auth/dist/index.js +9 -0
- package/packages/auth/dist/index.js.map +1 -0
- package/packages/auth/package.json +1 -1
- package/packages/auth/src/index.ts +9 -0
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/package.json +1 -1
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/clipboard/package.json +1 -1
- package/packages/clipboard-plugin/package.json +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/codex-watcher/package.json +1 -1
- package/packages/config-capture/dist/index.d.ts +52 -0
- package/packages/config-capture/dist/index.d.ts.map +1 -0
- package/packages/config-capture/dist/index.js +261 -0
- package/packages/config-capture/dist/index.js.map +1 -0
- package/packages/config-capture/package.json +1 -1
- package/packages/connection-runtime/package.json +1 -1
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-discovery/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/contracts/package.json +1 -1
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/django-plugin/package.json +1 -1
- package/packages/doc-generator/package.json +1 -1
- package/packages/durable-review/package.json +1 -1
- package/packages/e2e-tester/package.json +1 -1
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/event-bus/package.json +1 -1
- package/packages/event-sink/package.json +1 -1
- package/packages/event-store/package.json +1 -1
- package/packages/experience-replay/package.json +1 -1
- package/packages/feedback-collector/package.json +1 -1
- package/packages/file-copy-helper/dist/extension.d.ts +15 -0
- package/packages/file-copy-helper/dist/extension.d.ts.map +1 -0
- package/packages/file-copy-helper/dist/extension.debug.d.ts +15 -0
- package/packages/file-copy-helper/dist/extension.debug.d.ts.map +1 -0
- package/packages/file-copy-helper/dist/extension.debug.js +215 -0
- package/packages/file-copy-helper/dist/extension.debug.js.map +1 -0
- package/packages/file-copy-helper/dist/extension.js +222 -0
- package/packages/file-copy-helper/dist/extension.js.map +1 -0
- package/packages/file-copy-helper/dist/index.d.ts +3 -0
- package/packages/file-copy-helper/dist/index.d.ts.map +1 -0
- package/packages/file-copy-helper/dist/index.js +3 -0
- package/packages/file-copy-helper/dist/index.js.map +1 -0
- package/packages/file-copy-helper/dist/intent-detector.d.ts +21 -0
- package/packages/file-copy-helper/dist/intent-detector.d.ts.map +1 -0
- package/packages/file-copy-helper/dist/intent-detector.js +348 -0
- package/packages/file-copy-helper/dist/intent-detector.js.map +1 -0
- package/packages/file-copy-helper/package.json +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/health-monitor/package.json +1 -1
- package/packages/intent-analyzer/package.json +1 -1
- package/packages/jev-judge/dist/auto-continue.d.ts +161 -2
- package/packages/jev-judge/dist/auto-continue.d.ts.map +1 -1
- package/packages/jev-judge/dist/auto-continue.js +267 -22
- package/packages/jev-judge/dist/auto-continue.js.map +1 -1
- package/packages/jev-judge/dist/index.d.ts +2 -0
- package/packages/jev-judge/dist/index.d.ts.map +1 -1
- package/packages/jev-judge/dist/index.js +2 -0
- package/packages/jev-judge/dist/index.js.map +1 -1
- package/packages/jev-judge/dist/question-risk.d.ts +53 -0
- package/packages/jev-judge/dist/question-risk.d.ts.map +1 -0
- package/packages/jev-judge/dist/question-risk.js +105 -0
- package/packages/jev-judge/dist/question-risk.js.map +1 -0
- package/packages/jev-judge/package.json +1 -1
- package/packages/jev-judge/src/auto-continue.ts +426 -29
- package/packages/jev-judge/src/index.ts +4 -0
- package/packages/jev-judge/src/question-risk.ts +155 -0
- package/packages/jev-judge/tests/auto-continue-context.test.ts +243 -0
- package/packages/jev-judge/tests/outcome-application.test.ts +132 -0
- package/packages/jev-judge/tests/question-risk.test.ts +129 -0
- package/packages/knowledge-graph/package.json +1 -1
- package/packages/knowledge-retrieval/package.json +1 -1
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/logging/README.md +36 -3
- package/packages/logging/dist/config.d.ts +7 -0
- package/packages/logging/dist/config.d.ts.map +1 -1
- package/packages/logging/dist/config.js +14 -0
- package/packages/logging/dist/config.js.map +1 -1
- package/packages/logging/dist/incidents/schema.d.ts +111 -0
- package/packages/logging/dist/incidents/schema.d.ts.map +1 -0
- package/packages/logging/dist/incidents/schema.js +0 -0
- package/packages/logging/dist/incidents/schema.js.map +1 -0
- package/packages/logging/dist/index.d.ts +2 -0
- package/packages/logging/dist/index.d.ts.map +1 -1
- package/packages/logging/dist/index.js +2 -0
- package/packages/logging/dist/index.js.map +1 -1
- package/packages/logging/dist/server/http.d.ts +4 -3
- package/packages/logging/dist/server/http.d.ts.map +1 -1
- package/packages/logging/dist/server/http.js +35 -3
- package/packages/logging/dist/server/http.js.map +1 -1
- package/packages/logging/dist/server/incident-qdrant.d.ts +83 -0
- package/packages/logging/dist/server/incident-qdrant.d.ts.map +1 -0
- package/packages/logging/dist/server/incident-qdrant.js +129 -0
- package/packages/logging/dist/server/incident-qdrant.js.map +1 -0
- package/packages/logging/dist/server/incident-store.d.ts +76 -0
- package/packages/logging/dist/server/incident-store.d.ts.map +1 -0
- package/packages/logging/dist/server/incident-store.js +157 -0
- package/packages/logging/dist/server/incident-store.js.map +1 -0
- package/packages/logging/dist/server/index.d.ts +4 -0
- package/packages/logging/dist/server/index.d.ts.map +1 -1
- package/packages/logging/dist/server/index.js +2 -0
- package/packages/logging/dist/server/index.js.map +1 -1
- package/packages/logging/dist/server/service.d.ts +33 -0
- package/packages/logging/dist/server/service.d.ts.map +1 -1
- package/packages/logging/dist/server/service.js +63 -0
- package/packages/logging/dist/server/service.js.map +1 -1
- package/packages/logging/dist/shipper.d.ts +74 -3
- package/packages/logging/dist/shipper.d.ts.map +1 -1
- package/packages/logging/dist/shipper.js +88 -5
- package/packages/logging/dist/shipper.js.map +1 -1
- package/packages/logging/dist/singleton.d.ts.map +1 -1
- package/packages/logging/dist/singleton.js +1 -0
- package/packages/logging/dist/singleton.js.map +1 -1
- package/packages/logging/package.json +1 -1
- package/packages/logging/src/config.ts +22 -0
- package/packages/logging/src/incidents/schema.ts +0 -0
- package/packages/logging/src/index.ts +17 -0
- package/packages/logging/src/server/http.ts +42 -3
- package/packages/logging/src/server/incident-qdrant.ts +177 -0
- package/packages/logging/src/server/incident-store.ts +192 -0
- package/packages/logging/src/server/index.ts +21 -0
- package/packages/logging/src/server/service.ts +79 -0
- package/packages/logging/src/shipper.ts +120 -5
- package/packages/logging/src/singleton.ts +1 -0
- package/packages/logging/test/fanout.test.ts +186 -0
- package/packages/logging/test/incidents.test.ts +404 -0
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/package.json +1 -1
- package/packages/milestone-manager/package.json +1 -1
- package/packages/model-registry/package.json +1 -1
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/notification/dist/adapters/detail-format.d.ts +10 -2
- package/packages/notification/dist/adapters/detail-format.d.ts.map +1 -1
- package/packages/notification/dist/adapters/detail-format.js +39 -0
- package/packages/notification/dist/adapters/detail-format.js.map +1 -1
- package/packages/notification/dist/adapters/line-adapter.d.ts +33 -0
- package/packages/notification/dist/adapters/line-adapter.d.ts.map +1 -1
- package/packages/notification/dist/adapters/line-adapter.js +84 -7
- package/packages/notification/dist/adapters/line-adapter.js.map +1 -1
- package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +1 -1
- package/packages/notification/dist/adapters/telegram-adapter.js +6 -2
- package/packages/notification/dist/adapters/telegram-adapter.js.map +1 -1
- package/packages/notification/dist/notification-center.d.ts.map +1 -1
- package/packages/notification/dist/notification-center.js +59 -7
- package/packages/notification/dist/notification-center.js.map +1 -1
- package/packages/notification/dist/pending-question.d.ts +69 -2
- package/packages/notification/dist/pending-question.d.ts.map +1 -1
- package/packages/notification/dist/pending-question.js +88 -2
- package/packages/notification/dist/pending-question.js.map +1 -1
- package/packages/notification/dist/types.d.ts +18 -0
- package/packages/notification/dist/types.d.ts.map +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/notification/src/adapters/detail-format.ts +42 -2
- package/packages/notification/src/adapters/line-adapter.ts +94 -7
- package/packages/notification/src/adapters/telegram-adapter.ts +6 -2
- package/packages/notification/src/notification-center.ts +65 -8
- package/packages/notification/src/pending-question.ts +160 -8
- package/packages/notification/src/types.ts +18 -0
- package/packages/notification/test/approval-payload.test.ts +269 -0
- package/packages/notification/test/pending-question-lifecycle.test.ts +195 -0
- package/packages/observability/package.json +1 -1
- package/packages/okf-indexer/dist/index.d.ts +9 -0
- package/packages/okf-indexer/dist/index.d.ts.map +1 -0
- package/packages/okf-indexer/dist/index.js +9 -0
- package/packages/okf-indexer/dist/index.js.map +1 -0
- package/packages/okf-indexer/package.json +1 -1
- package/packages/okf-indexer/src/index.ts +9 -0
- package/packages/paperclip-integration/package.json +1 -1
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/permission-mode/package.json +1 -1
- package/packages/privilege-broker/package.json +1 -1
- package/packages/project-analyzer/package.json +1 -1
- package/packages/project-bootstrap/package.json +1 -1
- package/packages/projection-engine/package.json +1 -1
- package/packages/prompt-compiler/package.json +1 -1
- package/packages/prompt-versioning/package.json +1 -1
- package/packages/provider-adapter-sdk/package.json +1 -1
- package/packages/provider-router/dist/provider-router.d.ts.map +1 -1
- package/packages/provider-router/dist/types.d.ts +2 -2
- package/packages/provider-router/dist/types.d.ts.map +1 -1
- package/packages/provider-router/dist/types.js +1 -1
- package/packages/provider-router/package.json +1 -1
- package/packages/provider-router/src/types.ts +2 -2
- package/packages/provider-selector/package.json +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/qdrant-skills/package.json +1 -1
- package/packages/quota-manager/package.json +1 -1
- package/packages/rate-limiter/package.json +1 -1
- package/packages/react-vite-plugin/package.json +1 -1
- package/packages/relay/package.json +1 -1
- package/packages/release-manager/package.json +1 -1
- package/packages/requirement-compiler/package.json +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/scheduler/dist/index.d.ts +9 -0
- package/packages/scheduler/dist/index.d.ts.map +1 -0
- package/packages/scheduler/dist/index.js +9 -0
- package/packages/scheduler/dist/index.js.map +1 -0
- package/packages/scheduler/dist/scheduler.d.ts +17 -0
- package/packages/scheduler/dist/scheduler.d.ts.map +1 -0
- package/packages/scheduler/dist/scheduler.js +41 -0
- package/packages/scheduler/dist/scheduler.js.map +1 -0
- package/packages/scheduler/package.json +1 -1
- package/packages/scheduler/src/index.ts +9 -0
- package/packages/scheduler-adapter/package.json +1 -1
- package/packages/session/package.json +1 -1
- package/packages/session-api/package.json +1 -1
- package/packages/session-export/package.json +1 -1
- package/packages/shared-context/dist/index.d.ts +7 -0
- package/packages/shared-context/dist/index.d.ts.map +1 -0
- package/packages/shared-context/dist/index.js +7 -0
- package/packages/shared-context/dist/index.js.map +1 -0
- package/packages/shared-context/dist/shared-context.d.ts +12 -0
- package/packages/shared-context/dist/shared-context.d.ts.map +1 -0
- package/packages/shared-context/dist/shared-context.js +39 -0
- package/packages/shared-context/dist/shared-context.js.map +1 -0
- package/packages/shared-context/package.json +1 -1
- package/packages/skill-mcp-client/dist/client.d.ts +56 -0
- package/packages/skill-mcp-client/dist/client.d.ts.map +1 -0
- package/packages/skill-mcp-client/dist/client.js +101 -0
- package/packages/skill-mcp-client/dist/client.js.map +1 -0
- package/packages/skill-mcp-client/dist/errors.d.ts +44 -0
- package/packages/skill-mcp-client/dist/errors.d.ts.map +1 -0
- package/packages/skill-mcp-client/dist/errors.js +68 -0
- package/packages/skill-mcp-client/dist/errors.js.map +1 -0
- package/packages/skill-mcp-client/dist/index.d.ts +9 -0
- package/packages/skill-mcp-client/dist/index.d.ts.map +1 -0
- package/packages/skill-mcp-client/dist/index.js +9 -0
- package/packages/skill-mcp-client/dist/index.js.map +1 -0
- package/packages/skill-mcp-client/dist/types.d.ts +106 -0
- package/packages/skill-mcp-client/dist/types.d.ts.map +1 -0
- package/packages/skill-mcp-client/dist/types.js +14 -0
- package/packages/skill-mcp-client/dist/types.js.map +1 -0
- package/packages/skill-mcp-client/package.json +1 -1
- package/packages/skill-registry/package.json +1 -1
- package/packages/skills/package.json +1 -5
- package/packages/sprint-planner/package.json +1 -1
- package/packages/subscription-engine/package.json +1 -1
- package/packages/task-compiler/package.json +1 -1
- package/packages/telegram/package.json +1 -1
- package/packages/telegram/src/agent-messages.d.ts +28 -0
- package/packages/telegram/src/agent-messages.js +90 -0
- package/packages/telegram/src/bindings.d.ts +296 -0
- package/packages/telegram/src/bindings.js +1086 -0
- package/packages/telegram/src/bus.d.ts +759 -0
- package/packages/telegram/src/bus.js +2732 -0
- package/packages/telegram/src/commands.d.ts +761 -0
- package/packages/telegram/src/commands.js +2622 -0
- package/packages/telegram/src/config.d.ts +222 -0
- package/packages/telegram/src/config.js +844 -0
- package/packages/telegram/src/delivery.d.ts +161 -0
- package/packages/telegram/src/delivery.js +550 -0
- package/packages/telegram/src/extension.d.ts +7 -0
- package/packages/telegram/src/extension.js +2444 -0
- package/packages/telegram/src/inbound.d.ts +94 -0
- package/packages/telegram/src/inbound.js +478 -0
- package/packages/telegram/src/index.d.ts +6 -0
- package/packages/telegram/src/index.js +6 -0
- package/packages/telegram/src/keyboard.d.ts +21 -0
- package/packages/telegram/src/keyboard.js +37 -0
- package/packages/telegram/src/lifecycle.d.ts +210 -0
- package/packages/telegram/src/lifecycle.js +538 -0
- package/packages/telegram/src/pi.d.ts +76 -0
- package/packages/telegram/src/pi.js +130 -0
- package/packages/telegram/src/polling.d.ts +332 -0
- package/packages/telegram/src/polling.js +1219 -0
- package/packages/telegram/src/replies.d.ts +210 -0
- package/packages/telegram/src/replies.js +752 -0
- package/packages/telegram/src/routing.d.ts +388 -0
- package/packages/telegram/src/routing.js +7886 -0
- package/packages/telegram/src/runtime.d.ts +159 -0
- package/packages/telegram/src/runtime.js +351 -0
- package/packages/telegram/src/telegram-api.d.ts +564 -0
- package/packages/telegram/src/telegram-api.js +1332 -0
- package/packages/telegram/src/turns.d.ts +108 -0
- package/packages/telegram/src/turns.js +482 -0
- package/packages/telegram/src/updates.d.ts +1545 -0
- package/packages/telegram/src/updates.js +6420 -0
- package/packages/tencentdb-memory/package.json +1 -1
- package/packages/tencentdb-sync/package.json +1 -1
- package/packages/test-data-generator/package.json +1 -1
- package/packages/test-generator/package.json +1 -1
- package/packages/todo-bd-sync/dist/detector.d.ts +54 -0
- package/packages/todo-bd-sync/dist/detector.d.ts.map +1 -0
- package/packages/todo-bd-sync/dist/detector.js +132 -0
- package/packages/todo-bd-sync/dist/detector.js.map +1 -0
- package/packages/todo-bd-sync/dist/extension.d.ts +30 -0
- package/packages/todo-bd-sync/dist/extension.d.ts.map +1 -0
- package/packages/todo-bd-sync/dist/extension.js +35 -0
- package/packages/todo-bd-sync/dist/extension.js.map +1 -0
- package/packages/todo-bd-sync/dist/index.d.ts +87 -0
- package/packages/todo-bd-sync/dist/index.d.ts.map +1 -0
- package/packages/todo-bd-sync/dist/index.js +296 -0
- package/packages/todo-bd-sync/dist/index.js.map +1 -0
- package/packages/todo-bd-sync/dist/sync.d.ts +72 -0
- package/packages/todo-bd-sync/dist/sync.d.ts.map +1 -0
- package/packages/todo-bd-sync/dist/sync.js +290 -0
- package/packages/todo-bd-sync/dist/sync.js.map +1 -0
- package/packages/todo-bd-sync/dist/task-analyzer.d.ts +49 -0
- package/packages/todo-bd-sync/dist/task-analyzer.d.ts.map +1 -0
- package/packages/todo-bd-sync/dist/task-analyzer.js +240 -0
- package/packages/todo-bd-sync/dist/task-analyzer.js.map +1 -0
- package/packages/todo-bd-sync/dist/todo-reminder.d.ts +126 -0
- package/packages/todo-bd-sync/dist/todo-reminder.d.ts.map +1 -0
- package/packages/todo-bd-sync/dist/todo-reminder.js +329 -0
- package/packages/todo-bd-sync/dist/todo-reminder.js.map +1 -0
- package/packages/todo-bd-sync/dist/types.d.ts +65 -0
- package/packages/todo-bd-sync/dist/types.d.ts.map +1 -0
- package/packages/todo-bd-sync/dist/types.js +67 -0
- package/packages/todo-bd-sync/dist/types.js.map +1 -0
- package/packages/todo-bd-sync/package.json +1 -1
- package/packages/token-estimation/dist/index.d.ts +94 -0
- package/packages/token-estimation/dist/index.d.ts.map +1 -0
- package/packages/token-estimation/dist/index.js +115 -0
- package/packages/token-estimation/dist/index.js.map +1 -0
- package/packages/token-estimation/package.json +1 -1
- package/packages/token-optimizer/package.json +1 -1
- package/packages/trajectory/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/types/dist/ai-providers.d.ts +36 -0
- package/packages/types/dist/ai-providers.d.ts.map +1 -0
- package/packages/types/dist/ai-providers.js +66 -0
- package/packages/types/dist/ai-providers.js.map +1 -0
- package/packages/types/dist/index.d.ts +12 -0
- package/packages/types/dist/index.d.ts.map +1 -0
- package/packages/types/dist/index.js +12 -0
- package/packages/types/dist/index.js.map +1 -0
- package/packages/types/package.json +5 -5
- package/packages/types/src/index.ts +12 -0
- package/packages/voice-api/package.json +1 -1
- package/packages/webmcp-tester/package.json +1 -1
- package/packages/wiki/package.json +1 -1
- package/packages/workflow-events/package.json +1 -1
- package/packages/workspace-scanner/package.json +1 -1
- package/packages/worktree/package.json +1 -1
- package/packages/worktree/worktree.ts +1 -1
- package/packages/write-review/package.json +1 -1
- package/renderer.ts +1 -1
- package/scripts/build-packages.ts +162 -0
- package/scripts/relay-client.ts +2 -2
- package/scripts/typecheck-packages.mjs +3 -3
- package/scripts/unified-webhook-server.ts +22 -10
- package/scripts/verify-package-contents.ts +345 -0
- package/scripts/ws-server.ts +1 -1
- package/tracker.ts +1 -1
- package/harness/browser-scrapers/base-browser-scraper.d.ts +0 -91
- package/harness/browser-scrapers/chrome-profile-manager.d.ts +0 -80
- package/harness/browser-scrapers/codex-browser-scraper.d.ts +0 -60
- package/harness/browser-scrapers/index.d.ts +0 -29
- package/harness/browser-scrapers/zai-browser-scraper.d.ts +0 -79
- package/harness/e2e/browser-scrapers/base-browser-scraper.d.ts +0 -92
- package/harness/e2e/browser-scrapers/chrome-profile-manager.d.ts +0 -81
- package/harness/e2e/browser-scrapers/codex-browser-scraper.d.ts +0 -61
- package/harness/e2e/browser-scrapers/index.d.ts +0 -30
- package/harness/e2e/browser-scrapers/zai-browser-scraper.d.ts +0 -80
- package/harness/langchain/agents.d.ts +0 -143
- package/harness/langchain/agents.test.d.ts +0 -2
- package/harness/langchain/checkpointer.d.ts +0 -48
- package/harness/langchain/checkpointer.test.d.ts +0 -8
- package/harness/langchain/cron-cli.d.ts +0 -12
- package/harness/langchain/daemon.d.ts +0 -161
- package/harness/langchain/daemon.test.d.ts +0 -11
- package/harness/langchain/file-tools.d.ts +0 -97
- package/harness/langchain/graph.d.ts +0 -706
- package/harness/langchain/model-router.d.ts +0 -63
- package/harness/langchain/model-router.test.d.ts +0 -2
- package/harness/langchain/models.d.ts +0 -72
- package/harness/langchain/ping-pong-middleware.d.ts +0 -28
- package/harness/langchain/ping-pong-middleware.test.d.ts +0 -2
- package/harness/langchain/run.d.ts +0 -15
- package/harness/langchain/scoreboard.test.d.ts +0 -13
- package/harness/langchain/status-line.d.ts +0 -91
- package/harness/langchain/status-line.test.d.ts +0 -8
- package/harness/langchain/surge.d.ts +0 -111
- package/harness/langchain/surge.test.d.ts +0 -10
- package/harness/langchain/widget.d.ts +0 -105
- package/harness/langchain/widget.test.d.ts +0 -8
- package/packages/autonomous-runtime/dist/worker.d.ts +0 -63
- package/packages/autonomous-runtime/dist/worker.js +0 -133
- package/packages/capability-registry/src/types.d.ts +0 -47
- package/packages/clipboard/dist/clipboard.d.ts +0 -11
- package/packages/clipboard/dist/clipboard.js +0 -40
- package/packages/clipboard/dist/index.d.ts +0 -2
- package/packages/clipboard/dist/index.js +0 -2
- package/packages/clipboard/dist/types.d.ts +0 -13
- package/packages/clipboard/dist/types.js +0 -5
- package/packages/context-discovery/dist/discover.d.ts +0 -3
- package/packages/context-discovery/dist/discover.js +0 -42
- package/packages/context-discovery/dist/discovery.d.ts +0 -28
- package/packages/context-discovery/dist/discovery.js +0 -21
- package/packages/context-discovery/dist/index.d.ts +0 -3
- package/packages/context-discovery/dist/index.js +0 -2
- package/packages/context-discovery/dist/types.d.ts +0 -16
- package/packages/context-discovery/dist/types.js +0 -2
- package/packages/event-bus/dist/bus.d.ts +0 -15
- package/packages/event-bus/dist/bus.js +0 -90
- package/packages/event-bus/dist/index.d.ts +0 -4
- package/packages/event-bus/dist/index.js +0 -3
- package/packages/event-bus/dist/test/bus.test.js +0 -52
- package/packages/event-bus/dist/types.d.ts +0 -27
- package/packages/event-bus/dist/types.js +0 -10
- package/packages/event-store/dist/index.d.ts +0 -3
- package/packages/event-store/dist/index.js +0 -2
- package/packages/event-store/dist/store.d.ts +0 -15
- package/packages/event-store/dist/store.js +0 -131
- package/packages/event-store/dist/test/store.test.js +0 -57
- package/packages/event-store/dist/types.d.ts +0 -48
- package/packages/event-store/dist/types.js +0 -5
- package/packages/event-store/src/types.d.ts +0 -48
- package/packages/file-copy-helper/dist/src/extension.js +0 -186
- package/packages/model-registry/src/types.d.ts +0 -63
- package/packages/notification/dist/src/adapters/email-adapter.d.ts +0 -17
- package/packages/notification/dist/src/adapters/email-adapter.d.ts.map +0 -1
- package/packages/notification/dist/src/adapters/email-adapter.js +0 -89
- package/packages/notification/dist/src/adapters/email-adapter.js.map +0 -1
- package/packages/notification/dist/src/adapters/line-adapter.d.ts +0 -17
- package/packages/notification/dist/src/adapters/line-adapter.d.ts.map +0 -1
- package/packages/notification/dist/src/adapters/line-adapter.js +0 -99
- package/packages/notification/dist/src/adapters/line-adapter.js.map +0 -1
- package/packages/notification/dist/src/adapters/ntfy-adapter.d.ts +0 -17
- package/packages/notification/dist/src/adapters/ntfy-adapter.d.ts.map +0 -1
- package/packages/notification/dist/src/adapters/ntfy-adapter.js +0 -84
- package/packages/notification/dist/src/adapters/ntfy-adapter.js.map +0 -1
- package/packages/notification/dist/src/adapters/telegram-adapter.d.ts +0 -56
- package/packages/notification/dist/src/adapters/telegram-adapter.d.ts.map +0 -1
- package/packages/notification/dist/src/adapters/telegram-adapter.js +0 -251
- package/packages/notification/dist/src/adapters/telegram-adapter.js.map +0 -1
- package/packages/notification/dist/src/adapters/webhook-adapter.d.ts +0 -15
- package/packages/notification/dist/src/adapters/webhook-adapter.d.ts.map +0 -1
- package/packages/notification/dist/src/adapters/webhook-adapter.js +0 -64
- package/packages/notification/dist/src/adapters/webhook-adapter.js.map +0 -1
- package/packages/notification/dist/src/base-adapter.d.ts +0 -36
- package/packages/notification/dist/src/base-adapter.d.ts.map +0 -1
- package/packages/notification/dist/src/base-adapter.js +0 -39
- package/packages/notification/dist/src/base-adapter.js.map +0 -1
- package/packages/notification/dist/src/index.d.ts +0 -12
- package/packages/notification/dist/src/index.d.ts.map +0 -1
- package/packages/notification/dist/src/index.js +0 -12
- package/packages/notification/dist/src/index.js.map +0 -1
- package/packages/notification/dist/src/notification-center.d.ts +0 -89
- package/packages/notification/dist/src/notification-center.d.ts.map +0 -1
- package/packages/notification/dist/src/notification-center.js +0 -356
- package/packages/notification/dist/src/notification-center.js.map +0 -1
- package/packages/notification/dist/src/notification-policy.d.ts +0 -66
- package/packages/notification/dist/src/notification-policy.d.ts.map +0 -1
- package/packages/notification/dist/src/notification-policy.js +0 -153
- package/packages/notification/dist/src/notification-policy.js.map +0 -1
- package/packages/notification/dist/src/telegram-webhook-handler.d.ts +0 -86
- package/packages/notification/dist/src/telegram-webhook-handler.d.ts.map +0 -1
- package/packages/notification/dist/src/telegram-webhook-handler.js +0 -149
- package/packages/notification/dist/src/telegram-webhook-handler.js.map +0 -1
- package/packages/notification/dist/src/types.d.ts +0 -106
- package/packages/notification/dist/src/types.d.ts.map +0 -1
- package/packages/notification/dist/src/types.js +0 -7
- package/packages/notification/dist/src/types.js.map +0 -1
- package/packages/projection-engine/dist/engine.d.ts +0 -61
- package/packages/projection-engine/dist/engine.js +0 -76
- package/packages/projection-engine/dist/index.d.ts +0 -2
- package/packages/projection-engine/dist/index.js +0 -2
- package/packages/projection-engine/dist/project.d.ts +0 -3
- package/packages/projection-engine/dist/project.js +0 -24
- package/packages/projection-engine/dist/types.d.ts +0 -55
- package/packages/projection-engine/dist/types.js +0 -5
- package/packages/projection-engine/src/types.d.ts +0 -55
- package/packages/provider-adapter-sdk/dist/src/builder.d.ts +0 -140
- package/packages/provider-adapter-sdk/dist/src/builder.d.ts.map +0 -1
- package/packages/provider-adapter-sdk/dist/src/builder.js +0 -332
- package/packages/provider-adapter-sdk/dist/src/builder.js.map +0 -1
- package/packages/provider-adapter-sdk/dist/src/errors.d.ts +0 -71
- package/packages/provider-adapter-sdk/dist/src/errors.d.ts.map +0 -1
- package/packages/provider-adapter-sdk/dist/src/errors.js +0 -111
- package/packages/provider-adapter-sdk/dist/src/errors.js.map +0 -1
- package/packages/provider-adapter-sdk/dist/src/index.d.ts +0 -15
- package/packages/provider-adapter-sdk/dist/src/index.d.ts.map +0 -1
- package/packages/provider-adapter-sdk/dist/src/index.js +0 -19
- package/packages/provider-adapter-sdk/dist/src/index.js.map +0 -1
- package/packages/provider-adapter-sdk/dist/src/registry.d.ts +0 -108
- package/packages/provider-adapter-sdk/dist/src/registry.d.ts.map +0 -1
- package/packages/provider-adapter-sdk/dist/src/registry.js +0 -301
- package/packages/provider-adapter-sdk/dist/src/registry.js.map +0 -1
- package/packages/provider-adapter-sdk/dist/src/tester.d.ts +0 -71
- package/packages/provider-adapter-sdk/dist/src/tester.d.ts.map +0 -1
- package/packages/provider-adapter-sdk/dist/src/tester.js +0 -392
- package/packages/provider-adapter-sdk/dist/src/tester.js.map +0 -1
- package/packages/provider-adapter-sdk/dist/src/types.d.ts +0 -182
- package/packages/provider-adapter-sdk/dist/src/types.d.ts.map +0 -1
- package/packages/provider-adapter-sdk/dist/src/types.js +0 -11
- package/packages/provider-adapter-sdk/dist/src/types.js.map +0 -1
- package/packages/provider-router/dist/capability-registry/src/types.d.ts +0 -47
- package/packages/provider-router/dist/capability-registry/src/types.d.ts.map +0 -1
- package/packages/provider-router/dist/capability-registry/src/types.js +0 -10
- package/packages/provider-router/dist/capability-registry/src/types.js.map +0 -1
- package/packages/provider-router/dist/provider-router/src/index.d.ts +0 -23
- package/packages/provider-router/dist/provider-router/src/index.d.ts.map +0 -1
- package/packages/provider-router/dist/provider-router/src/index.js +0 -25
- package/packages/provider-router/dist/provider-router/src/index.js.map +0 -1
- package/packages/provider-router/dist/provider-router/src/policy.d.ts +0 -10
- package/packages/provider-router/dist/provider-router/src/policy.d.ts.map +0 -1
- package/packages/provider-router/dist/provider-router/src/policy.js +0 -45
- package/packages/provider-router/dist/provider-router/src/policy.js.map +0 -1
- package/packages/provider-router/dist/provider-router/src/provider-router.d.ts +0 -56
- package/packages/provider-router/dist/provider-router/src/provider-router.d.ts.map +0 -1
- package/packages/provider-router/dist/provider-router/src/provider-router.js +0 -222
- package/packages/provider-router/dist/provider-router/src/provider-router.js.map +0 -1
- package/packages/provider-router/dist/provider-router/src/strategies.d.ts +0 -19
- package/packages/provider-router/dist/provider-router/src/strategies.d.ts.map +0 -1
- package/packages/provider-router/dist/provider-router/src/strategies.js +0 -110
- package/packages/provider-router/dist/provider-router/src/strategies.js.map +0 -1
- package/packages/provider-router/dist/provider-router/src/types.d.ts +0 -91
- package/packages/provider-router/dist/provider-router/src/types.d.ts.map +0 -1
- package/packages/provider-router/dist/provider-router/src/types.js +0 -10
- package/packages/provider-router/dist/provider-router/src/types.js.map +0 -1
- package/packages/provider-router/dist/src/index.d.ts +0 -23
- package/packages/provider-router/dist/src/index.d.ts.map +0 -1
- package/packages/provider-router/dist/src/index.js +0 -25
- package/packages/provider-router/dist/src/index.js.map +0 -1
- package/packages/provider-router/dist/src/policy.d.ts +0 -10
- package/packages/provider-router/dist/src/policy.d.ts.map +0 -1
- package/packages/provider-router/dist/src/policy.js +0 -45
- package/packages/provider-router/dist/src/policy.js.map +0 -1
- package/packages/provider-router/dist/src/provider-router.d.ts +0 -56
- package/packages/provider-router/dist/src/provider-router.d.ts.map +0 -1
- package/packages/provider-router/dist/src/provider-router.js +0 -222
- package/packages/provider-router/dist/src/provider-router.js.map +0 -1
- package/packages/provider-router/dist/src/strategies.d.ts +0 -19
- package/packages/provider-router/dist/src/strategies.d.ts.map +0 -1
- package/packages/provider-router/dist/src/strategies.js +0 -110
- package/packages/provider-router/dist/src/strategies.js.map +0 -1
- package/packages/provider-router/dist/src/types.d.ts +0 -91
- package/packages/provider-router/dist/src/types.d.ts.map +0 -1
- package/packages/provider-router/dist/src/types.js +0 -10
- package/packages/provider-router/dist/src/types.js.map +0 -1
- package/packages/provider-router/dist/types/src/runtime-types.d.ts +0 -412
- package/packages/provider-router/dist/types/src/runtime-types.d.ts.map +0 -1
- package/packages/provider-router/dist/types/src/runtime-types.js +0 -2
- package/packages/provider-router/dist/types/src/runtime-types.js.map +0 -1
- package/packages/session-api/dist/api.d.ts +0 -83
- package/packages/session-api/dist/api.js +0 -35
- package/packages/session-api/dist/index.d.ts +0 -2
- package/packages/session-api/dist/index.js +0 -2
- package/packages/session-api/dist/types.d.ts +0 -22
- package/packages/session-api/dist/types.js +0 -5
- package/packages/session-export/dist/exporter.d.ts +0 -28
- package/packages/session-export/dist/exporter.js +0 -38
- package/packages/session-export/dist/index.d.ts +0 -2
- package/packages/session-export/dist/index.js +0 -2
- package/packages/session-export/dist/types.d.ts +0 -20
- package/packages/session-export/dist/types.js +0 -5
- package/packages/subscription-engine/dist/engine.d.ts +0 -13
- package/packages/subscription-engine/dist/engine.js +0 -40
- package/packages/subscription-engine/dist/index.d.ts +0 -2
- package/packages/subscription-engine/dist/index.js +0 -2
- package/packages/subscription-engine/dist/subscriptions.d.ts +0 -19
- package/packages/subscription-engine/dist/subscriptions.js +0 -32
- package/packages/subscription-engine/dist/types.d.ts +0 -24
- package/packages/subscription-engine/dist/types.js +0 -5
- package/packages/trajectory/test/store.test.d.ts +0 -2
- package/packages/workflow-events/dist/events.d.ts +0 -38
- package/packages/workflow-events/dist/events.js +0 -46
- package/packages/workflow-events/dist/index.d.ts +0 -2
- package/packages/workflow-events/dist/index.js +0 -2
- package/packages/workflow-events/dist/pipeline.d.ts +0 -21
- package/packages/workflow-events/dist/pipeline.js +0 -27
- package/packages/workflow-events/dist/types.d.ts +0 -110
- package/packages/workflow-events/dist/types.js +0 -5
- package/packages/workflow-events/src/types.d.ts +0 -110
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telegram target-aware operational delivery and logical message lifecycle
|
|
3
|
+
* Zones: telegram delivery, extension API, runtime binding
|
|
4
|
+
* Owns the public extension delivery contract, authorized scope resolution, operational rendering adapter, per-target serialization, chunk reconciliation, generation-fenced logical handles, and process-local runtime membrane; composes the established reply renderer with bus-aware Telegram API ports and excludes bot clients, Pi contexts, and consumer-extension policy
|
|
5
|
+
*/
|
|
6
|
+
import { markTelegramBusAggregateDelivery } from "./bus.js";
|
|
7
|
+
import { assertTelegramInlineKeyboardCallbackData, } from "./keyboard.js";
|
|
8
|
+
import { renderTelegramMessage, withTelegramReplyParameters, } from "./replies.js";
|
|
9
|
+
import { areTelegramTargetsEqual as areDeliveryTargetsEqual, getTelegramTargetThreadParams, } from "./target.js";
|
|
10
|
+
import { getTelegramApiRetryAfterMs, isRetryableTelegramApiError, isTelegramApiCommitUnknownError, isTelegramMessageUnavailableError, } from "./telegram-api.js";
|
|
11
|
+
const TELEGRAM_DELIVERY_RUNTIME_KEY = "__piTelegramDeliveryRuntime__";
|
|
12
|
+
class TelegramDeliveryTransportGenerationError extends Error {
|
|
13
|
+
constructor() {
|
|
14
|
+
super("Telegram Delivery transport generation is no longer active.");
|
|
15
|
+
this.name = "TelegramDeliveryTransportGenerationError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** @internal */
|
|
19
|
+
export function createTelegramDeliveryLifecycleHooks(createRuntime) {
|
|
20
|
+
let runtime;
|
|
21
|
+
let unbind;
|
|
22
|
+
const stopCurrentRuntime = () => {
|
|
23
|
+
unbind?.();
|
|
24
|
+
unbind = undefined;
|
|
25
|
+
runtime?.shutdown();
|
|
26
|
+
runtime = undefined;
|
|
27
|
+
};
|
|
28
|
+
return {
|
|
29
|
+
hasPendingTarget: (target) => runtime?.hasPendingTarget?.(target),
|
|
30
|
+
onSessionStart: async () => {
|
|
31
|
+
stopCurrentRuntime();
|
|
32
|
+
runtime = createRuntime();
|
|
33
|
+
unbind = bindTelegramDeliveryRuntime(runtime);
|
|
34
|
+
},
|
|
35
|
+
onSessionShutdown: async () => {
|
|
36
|
+
stopCurrentRuntime();
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function createTelegramDeliveryGenerationSeed(instanceId) {
|
|
41
|
+
return `${instanceId}:${Date.now()}`;
|
|
42
|
+
}
|
|
43
|
+
/** @internal */
|
|
44
|
+
export function createTelegramBridgeDeliveryLifecycleHooks(deps) {
|
|
45
|
+
let generationSequence = 0;
|
|
46
|
+
return createTelegramDeliveryLifecycleHooks(() => {
|
|
47
|
+
const transportStamp = deps.getTransportStamp?.();
|
|
48
|
+
return createTelegramBridgeDeliveryRuntime({
|
|
49
|
+
...deps,
|
|
50
|
+
generation: `${deps.generationSeed}:${++generationSequence}`,
|
|
51
|
+
isTransportActive: transportStamp !== undefined && deps.isTransportStampActive
|
|
52
|
+
? () => deps.isTransportStampActive?.(transportStamp) ?? false
|
|
53
|
+
: undefined,
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function getTelegramDeliveryRuntimeRegistry() {
|
|
58
|
+
const globals = globalThis;
|
|
59
|
+
const existing = globals[TELEGRAM_DELIVERY_RUNTIME_KEY];
|
|
60
|
+
if (existing && typeof existing === "object" && "runtime" in existing) {
|
|
61
|
+
return existing;
|
|
62
|
+
}
|
|
63
|
+
const registry = {};
|
|
64
|
+
globals[TELEGRAM_DELIVERY_RUNTIME_KEY] = registry;
|
|
65
|
+
return registry;
|
|
66
|
+
}
|
|
67
|
+
function failure(reason, message, partial, retryAfterMs) {
|
|
68
|
+
const retry = retryAfterMs === undefined ? {} : { retryAfterMs };
|
|
69
|
+
return partial === undefined
|
|
70
|
+
? { ok: false, reason, message, ...retry }
|
|
71
|
+
: { ok: false, reason, message, partial, ...retry };
|
|
72
|
+
}
|
|
73
|
+
function classifyTelegramDeliveryTransportError(error) {
|
|
74
|
+
if (isTelegramApiCommitUnknownError(error))
|
|
75
|
+
return { reason: "commit-unknown" };
|
|
76
|
+
if (isTelegramMessageUnavailableError(error))
|
|
77
|
+
return { reason: "message-unavailable" };
|
|
78
|
+
const retryAfterMs = getTelegramApiRetryAfterMs(error);
|
|
79
|
+
if (retryAfterMs !== undefined)
|
|
80
|
+
return { reason: "rate-limited", retryAfterMs };
|
|
81
|
+
if (isRetryableTelegramApiError(error))
|
|
82
|
+
return { reason: "transport-retryable" };
|
|
83
|
+
return { reason: "transport-failed" };
|
|
84
|
+
}
|
|
85
|
+
/** @internal */
|
|
86
|
+
export function createTelegramDeliveryTargetPolicyRuntime(deps) {
|
|
87
|
+
return {
|
|
88
|
+
getTargetPolicyView() {
|
|
89
|
+
const ownsDirect = deps.ownsDirect();
|
|
90
|
+
return {
|
|
91
|
+
canDeliver: ownsDirect || deps.isFollowerRegistered(),
|
|
92
|
+
ownsDirect,
|
|
93
|
+
allowedChatId: deps.getAllowedChatId(),
|
|
94
|
+
followerTarget: deps.getFollowerTarget(),
|
|
95
|
+
leaderTarget: deps.getLeaderTarget(),
|
|
96
|
+
liveTargets: deps.listThreadRecords().map((record) => record.target),
|
|
97
|
+
};
|
|
98
|
+
},
|
|
99
|
+
getActiveTurnTarget() {
|
|
100
|
+
return deps.getActiveGuestQueryId()
|
|
101
|
+
? undefined
|
|
102
|
+
: deps.getActiveTurnTarget();
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/** @internal */
|
|
107
|
+
export function resolveTelegramDeliveryInstanceTarget(view) {
|
|
108
|
+
if (!view.canDeliver)
|
|
109
|
+
return undefined;
|
|
110
|
+
return (view.followerTarget ??
|
|
111
|
+
view.leaderTarget ??
|
|
112
|
+
(view.allowedChatId === undefined
|
|
113
|
+
? undefined
|
|
114
|
+
: { chatId: view.allowedChatId }));
|
|
115
|
+
}
|
|
116
|
+
/** @internal */
|
|
117
|
+
export function resolveTelegramDeliveryAggregateTarget(view) {
|
|
118
|
+
return !view.canDeliver || view.allowedChatId === undefined
|
|
119
|
+
? undefined
|
|
120
|
+
: { chatId: view.allowedChatId };
|
|
121
|
+
}
|
|
122
|
+
/** @internal */
|
|
123
|
+
export function isTelegramDeliveryExplicitTargetAuthorized(candidate, view) {
|
|
124
|
+
if (!view.canDeliver ||
|
|
125
|
+
view.allowedChatId === undefined ||
|
|
126
|
+
candidate.chatId !== view.allowedChatId) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
if (candidate.threadId === undefined)
|
|
130
|
+
return true;
|
|
131
|
+
if (view.followerTarget) {
|
|
132
|
+
return areDeliveryTargetsEqual(candidate, view.followerTarget);
|
|
133
|
+
}
|
|
134
|
+
if (!view.ownsDirect)
|
|
135
|
+
return false;
|
|
136
|
+
if (view.leaderTarget &&
|
|
137
|
+
areDeliveryTargetsEqual(candidate, view.leaderTarget)) {
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
return (view.liveTargets ?? []).some(function (target) {
|
|
141
|
+
return areDeliveryTargetsEqual(candidate, target);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
function cloneTarget(target) {
|
|
145
|
+
return target.threadId === undefined
|
|
146
|
+
? { chatId: target.chatId }
|
|
147
|
+
: { chatId: target.chatId, threadId: target.threadId };
|
|
148
|
+
}
|
|
149
|
+
function targetKey(target) {
|
|
150
|
+
return `${target.chatId}:${target.threadId ?? "root"}`;
|
|
151
|
+
}
|
|
152
|
+
function resolveTelegramDeliveryTarget(scope, deps) {
|
|
153
|
+
if (scope.kind === "target") {
|
|
154
|
+
if (!deps.isExplicitTargetAuthorized(scope.target)) {
|
|
155
|
+
return failure("target-unauthorized", "Telegram delivery target is not authorized for this runtime.");
|
|
156
|
+
}
|
|
157
|
+
return { ok: true, value: cloneTarget(scope.target) };
|
|
158
|
+
}
|
|
159
|
+
const target = scope.kind === "active-turn"
|
|
160
|
+
? deps.getActiveTurnTarget()
|
|
161
|
+
: scope.kind === "instance"
|
|
162
|
+
? deps.getInstanceTarget()
|
|
163
|
+
: deps.getAggregateTarget();
|
|
164
|
+
if (!target) {
|
|
165
|
+
return failure("target-unavailable", `Telegram delivery ${scope.kind} target is unavailable.`);
|
|
166
|
+
}
|
|
167
|
+
return { ok: true, value: cloneTarget(target) };
|
|
168
|
+
}
|
|
169
|
+
function createTelegramDeliveryTargetQueue() {
|
|
170
|
+
const queues = new Map();
|
|
171
|
+
async function run(target, operation) {
|
|
172
|
+
const key = targetKey(target);
|
|
173
|
+
const previous = queues.get(key) ?? Promise.resolve();
|
|
174
|
+
const current = previous.then(operation, operation);
|
|
175
|
+
const settled = current.then(() => { }, () => { });
|
|
176
|
+
queues.set(key, settled);
|
|
177
|
+
try {
|
|
178
|
+
return await current;
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
if (queues.get(key) === settled)
|
|
182
|
+
queues.delete(key);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
run,
|
|
187
|
+
hasPendingTarget: (target) => queues.has(targetKey(target)),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
function getChunkTransportOptions(view, index, chunkCount, replyToMessageId, editing = false) {
|
|
191
|
+
const isFirst = index === 0;
|
|
192
|
+
const isLast = index === chunkCount - 1;
|
|
193
|
+
return {
|
|
194
|
+
...(isFirst && replyToMessageId !== undefined ? { replyToMessageId } : {}),
|
|
195
|
+
...(isLast
|
|
196
|
+
? { replyMarkup: view.replyMarkup ?? (editing ? null : undefined) }
|
|
197
|
+
: editing
|
|
198
|
+
? { replyMarkup: null }
|
|
199
|
+
: {}),
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/** @internal */
|
|
203
|
+
export function createTelegramDeliveryRuntime(deps) {
|
|
204
|
+
let active = true;
|
|
205
|
+
const handleBindings = new WeakMap();
|
|
206
|
+
const targetQueue = createTelegramDeliveryTargetQueue();
|
|
207
|
+
const runForTarget = targetQueue.run;
|
|
208
|
+
const render = (view) => {
|
|
209
|
+
const chunks = deps.renderView(view);
|
|
210
|
+
if (chunks.length === 0 ||
|
|
211
|
+
chunks.some((chunk) => typeof chunk.text !== "string" || chunk.text.trim().length === 0)) {
|
|
212
|
+
return failure("invalid-view", "Telegram delivery view rendered no content.");
|
|
213
|
+
}
|
|
214
|
+
return { ok: true, value: chunks };
|
|
215
|
+
};
|
|
216
|
+
const inactive = () => failure("runtime-unavailable", "Telegram delivery runtime generation is inactive.");
|
|
217
|
+
const transportFailure = (operation, error, target, partial) => {
|
|
218
|
+
deps.recordFailure?.(operation, error, target);
|
|
219
|
+
if (error instanceof TelegramDeliveryTransportGenerationError) {
|
|
220
|
+
return inactive();
|
|
221
|
+
}
|
|
222
|
+
const classified = classifyTelegramDeliveryTransportError(error);
|
|
223
|
+
return failure(classified.reason, classified.reason === "commit-unknown"
|
|
224
|
+
? `Telegram delivery ${operation} may have committed before transport failed.`
|
|
225
|
+
: `Telegram delivery ${operation} failed.`, partial, classified.retryAfterMs);
|
|
226
|
+
};
|
|
227
|
+
const createHandle = (target, messageIds) => {
|
|
228
|
+
const canonicalTarget = Object.freeze(cloneTarget(target));
|
|
229
|
+
const canonicalMessageIds = Object.freeze([...messageIds]);
|
|
230
|
+
const handle = Object.freeze({
|
|
231
|
+
target: canonicalTarget,
|
|
232
|
+
messageIds: canonicalMessageIds,
|
|
233
|
+
generation: deps.generation,
|
|
234
|
+
});
|
|
235
|
+
handleBindings.set(handle, {
|
|
236
|
+
target: canonicalTarget,
|
|
237
|
+
messageIds: canonicalMessageIds,
|
|
238
|
+
});
|
|
239
|
+
return handle;
|
|
240
|
+
};
|
|
241
|
+
const resolveHandle = (handle) => {
|
|
242
|
+
if (!active)
|
|
243
|
+
return inactive();
|
|
244
|
+
const binding = handleBindings.get(handle);
|
|
245
|
+
if (!binding || handle.generation !== deps.generation) {
|
|
246
|
+
return failure("stale-handle", "Telegram delivery handle belongs to an inactive runtime generation.");
|
|
247
|
+
}
|
|
248
|
+
const authorized = resolveTelegramDeliveryTarget({ kind: "target", target: binding.target }, deps);
|
|
249
|
+
if (!authorized.ok) {
|
|
250
|
+
return failure(authorized.reason, authorized.message);
|
|
251
|
+
}
|
|
252
|
+
return { ok: true, value: binding };
|
|
253
|
+
};
|
|
254
|
+
return {
|
|
255
|
+
generation: deps.generation,
|
|
256
|
+
hasPendingTarget: targetQueue.hasPendingTarget,
|
|
257
|
+
shutdown() {
|
|
258
|
+
active = false;
|
|
259
|
+
},
|
|
260
|
+
async sendView(view, options) {
|
|
261
|
+
if (!active)
|
|
262
|
+
return inactive();
|
|
263
|
+
const resolved = resolveTelegramDeliveryTarget(options.scope, deps);
|
|
264
|
+
if (!resolved.ok)
|
|
265
|
+
return failure(resolved.reason, resolved.message);
|
|
266
|
+
const rendered = render(view);
|
|
267
|
+
if (!rendered.ok)
|
|
268
|
+
return failure(rendered.reason, rendered.message);
|
|
269
|
+
const target = resolved.value;
|
|
270
|
+
return runForTarget(target, async () => {
|
|
271
|
+
if (!active)
|
|
272
|
+
return inactive();
|
|
273
|
+
const messageIds = [];
|
|
274
|
+
try {
|
|
275
|
+
for (const [index, chunk] of rendered.value.entries()) {
|
|
276
|
+
if (!active)
|
|
277
|
+
return inactive();
|
|
278
|
+
const messageId = await deps.sendChunk(target, chunk, getChunkTransportOptions(view, index, rendered.value.length, options.replyToMessageId));
|
|
279
|
+
messageIds.push(messageId);
|
|
280
|
+
if (!active)
|
|
281
|
+
return inactive();
|
|
282
|
+
}
|
|
283
|
+
return { ok: true, value: createHandle(target, messageIds) };
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
return active
|
|
287
|
+
? transportFailure("send", error, target, messageIds.length > 0
|
|
288
|
+
? createHandle(target, messageIds)
|
|
289
|
+
: undefined)
|
|
290
|
+
: inactive();
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
},
|
|
294
|
+
async editView(handle, view) {
|
|
295
|
+
const resolved = resolveHandle(handle);
|
|
296
|
+
if (!resolved.ok)
|
|
297
|
+
return failure(resolved.reason, resolved.message);
|
|
298
|
+
const rendered = render(view);
|
|
299
|
+
if (!rendered.ok)
|
|
300
|
+
return failure(rendered.reason, rendered.message);
|
|
301
|
+
const target = resolved.value.target;
|
|
302
|
+
return runForTarget(target, async () => {
|
|
303
|
+
if (!active)
|
|
304
|
+
return inactive();
|
|
305
|
+
const visibleMessageIds = [...resolved.value.messageIds];
|
|
306
|
+
try {
|
|
307
|
+
const sharedCount = Math.min(visibleMessageIds.length, rendered.value.length);
|
|
308
|
+
for (let index = 0; index < sharedCount; index += 1) {
|
|
309
|
+
if (!active)
|
|
310
|
+
return inactive();
|
|
311
|
+
await deps.editChunk(target, visibleMessageIds[index], rendered.value[index], getChunkTransportOptions(view, index, rendered.value.length, undefined, true));
|
|
312
|
+
if (!active)
|
|
313
|
+
return inactive();
|
|
314
|
+
}
|
|
315
|
+
for (let index = sharedCount; index < rendered.value.length; index += 1) {
|
|
316
|
+
if (!active)
|
|
317
|
+
return inactive();
|
|
318
|
+
visibleMessageIds.push(await deps.sendChunk(target, rendered.value[index], getChunkTransportOptions(view, index, rendered.value.length)));
|
|
319
|
+
if (!active)
|
|
320
|
+
return inactive();
|
|
321
|
+
}
|
|
322
|
+
const removedMessageIds = visibleMessageIds.slice(rendered.value.length);
|
|
323
|
+
for (const messageId of removedMessageIds) {
|
|
324
|
+
if (!active)
|
|
325
|
+
return inactive();
|
|
326
|
+
await deps.deleteMessage(target, messageId);
|
|
327
|
+
visibleMessageIds.splice(visibleMessageIds.indexOf(messageId), 1);
|
|
328
|
+
if (!active)
|
|
329
|
+
return inactive();
|
|
330
|
+
}
|
|
331
|
+
return {
|
|
332
|
+
ok: true,
|
|
333
|
+
value: createHandle(target, visibleMessageIds),
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
catch (error) {
|
|
337
|
+
return active
|
|
338
|
+
? transportFailure("edit", error, target, createHandle(target, visibleMessageIds))
|
|
339
|
+
: inactive();
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
},
|
|
343
|
+
async deleteView(handle) {
|
|
344
|
+
const resolved = resolveHandle(handle);
|
|
345
|
+
if (!resolved.ok)
|
|
346
|
+
return failure(resolved.reason, resolved.message);
|
|
347
|
+
const target = resolved.value.target;
|
|
348
|
+
return runForTarget(target, async () => {
|
|
349
|
+
if (!active)
|
|
350
|
+
return inactive();
|
|
351
|
+
try {
|
|
352
|
+
for (const messageId of resolved.value.messageIds) {
|
|
353
|
+
if (!active)
|
|
354
|
+
return inactive();
|
|
355
|
+
await deps.deleteMessage(target, messageId);
|
|
356
|
+
if (!active)
|
|
357
|
+
return inactive();
|
|
358
|
+
}
|
|
359
|
+
return { ok: true, value: undefined };
|
|
360
|
+
}
|
|
361
|
+
catch (error) {
|
|
362
|
+
return active
|
|
363
|
+
? transportFailure("delete", error, target)
|
|
364
|
+
: inactive();
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
},
|
|
368
|
+
async sendChatAction(action, scope) {
|
|
369
|
+
if (!active)
|
|
370
|
+
return inactive();
|
|
371
|
+
const resolved = resolveTelegramDeliveryTarget(scope, deps);
|
|
372
|
+
if (!resolved.ok)
|
|
373
|
+
return failure(resolved.reason, resolved.message);
|
|
374
|
+
const target = resolved.value;
|
|
375
|
+
return runForTarget(target, async () => {
|
|
376
|
+
if (!active)
|
|
377
|
+
return inactive();
|
|
378
|
+
try {
|
|
379
|
+
await deps.sendChatAction(target, action);
|
|
380
|
+
if (!active)
|
|
381
|
+
return inactive();
|
|
382
|
+
return { ok: true, value: undefined };
|
|
383
|
+
}
|
|
384
|
+
catch (error) {
|
|
385
|
+
return active
|
|
386
|
+
? transportFailure("chat-action", error, target)
|
|
387
|
+
: inactive();
|
|
388
|
+
}
|
|
389
|
+
});
|
|
390
|
+
},
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
/** @internal */
|
|
394
|
+
export function createTelegramBridgeDeliveryRuntime(deps) {
|
|
395
|
+
const getPolicyView = deps.getTargetPolicyView;
|
|
396
|
+
const assertTransportActive = () => {
|
|
397
|
+
if (deps.isTransportActive?.() === false) {
|
|
398
|
+
throw new TelegramDeliveryTransportGenerationError();
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
return createTelegramDeliveryRuntime({
|
|
402
|
+
generation: deps.generation,
|
|
403
|
+
getActiveTurnTarget: deps.getActiveTurnTarget,
|
|
404
|
+
getInstanceTarget() {
|
|
405
|
+
return resolveTelegramDeliveryInstanceTarget(getPolicyView());
|
|
406
|
+
},
|
|
407
|
+
getAggregateTarget() {
|
|
408
|
+
return resolveTelegramDeliveryAggregateTarget(getPolicyView());
|
|
409
|
+
},
|
|
410
|
+
isExplicitTargetAuthorized(target) {
|
|
411
|
+
return isTelegramDeliveryExplicitTargetAuthorized(target, getPolicyView());
|
|
412
|
+
},
|
|
413
|
+
renderView(view) {
|
|
414
|
+
assertTelegramInlineKeyboardCallbackData(view.replyMarkup);
|
|
415
|
+
return renderTelegramMessage(view.text, {
|
|
416
|
+
mode: view.parseMode ?? "plain",
|
|
417
|
+
}).map(function (chunk) {
|
|
418
|
+
return {
|
|
419
|
+
text: chunk.text,
|
|
420
|
+
parseMode: chunk.parseMode === "HTML" ? "html" : "plain",
|
|
421
|
+
};
|
|
422
|
+
});
|
|
423
|
+
},
|
|
424
|
+
async sendChunk(target, chunk, options) {
|
|
425
|
+
assertTransportActive();
|
|
426
|
+
const sent = await withTelegramReplyParameters(target.chatId, options.replyToMessageId, target, (replyParameters) => {
|
|
427
|
+
const body = {
|
|
428
|
+
chat_id: target.chatId,
|
|
429
|
+
text: chunk.text,
|
|
430
|
+
...(chunk.parseMode === "html"
|
|
431
|
+
? { parse_mode: "HTML" }
|
|
432
|
+
: {}),
|
|
433
|
+
...getTelegramTargetThreadParams(target),
|
|
434
|
+
...(replyParameters ? { reply_parameters: replyParameters } : {}),
|
|
435
|
+
...(options.replyMarkup
|
|
436
|
+
? { reply_markup: options.replyMarkup }
|
|
437
|
+
: {}),
|
|
438
|
+
};
|
|
439
|
+
return deps.api.sendMessage(target.threadId === undefined
|
|
440
|
+
? markTelegramBusAggregateDelivery(body)
|
|
441
|
+
: body);
|
|
442
|
+
});
|
|
443
|
+
assertTransportActive();
|
|
444
|
+
deps.recordOwnership({
|
|
445
|
+
chatId: target.chatId,
|
|
446
|
+
messageId: sent.message_id,
|
|
447
|
+
target,
|
|
448
|
+
});
|
|
449
|
+
return sent.message_id;
|
|
450
|
+
},
|
|
451
|
+
async editChunk(target, messageId, chunk, options) {
|
|
452
|
+
assertTransportActive();
|
|
453
|
+
await deps.api.editMessageText({
|
|
454
|
+
chat_id: target.chatId,
|
|
455
|
+
message_id: messageId,
|
|
456
|
+
text: chunk.text,
|
|
457
|
+
...(chunk.parseMode === "html" ? { parse_mode: "HTML" } : {}),
|
|
458
|
+
reply_markup: options.replyMarkup === null
|
|
459
|
+
? { inline_keyboard: [] }
|
|
460
|
+
: options.replyMarkup,
|
|
461
|
+
});
|
|
462
|
+
},
|
|
463
|
+
deleteMessage(target, messageId) {
|
|
464
|
+
assertTransportActive();
|
|
465
|
+
return deps.api.deleteMessage(target.chatId, messageId);
|
|
466
|
+
},
|
|
467
|
+
async sendChatAction(target, action) {
|
|
468
|
+
assertTransportActive();
|
|
469
|
+
await deps.api.sendChatAction(target.chatId, action, {
|
|
470
|
+
message_thread_id: target.threadId,
|
|
471
|
+
});
|
|
472
|
+
},
|
|
473
|
+
recordFailure: deps.recordFailure,
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
function getBoundTelegramDeliveryRuntime() {
|
|
477
|
+
const runtime = getTelegramDeliveryRuntimeRegistry().runtime;
|
|
478
|
+
return (runtime ??
|
|
479
|
+
failure("runtime-unavailable", "Telegram delivery runtime is unavailable in this Pi session."));
|
|
480
|
+
}
|
|
481
|
+
function isFailure(value) {
|
|
482
|
+
return "ok" in value;
|
|
483
|
+
}
|
|
484
|
+
function validateView(view) {
|
|
485
|
+
if (typeof view.text !== "string" || view.text.trim().length === 0) {
|
|
486
|
+
return failure("invalid-view", "Telegram delivery view text is empty.");
|
|
487
|
+
}
|
|
488
|
+
return undefined;
|
|
489
|
+
}
|
|
490
|
+
async function runDeliveryOperation(operation) {
|
|
491
|
+
const runtime = getBoundTelegramDeliveryRuntime();
|
|
492
|
+
if (isFailure(runtime))
|
|
493
|
+
return runtime;
|
|
494
|
+
try {
|
|
495
|
+
return await operation(runtime);
|
|
496
|
+
}
|
|
497
|
+
catch {
|
|
498
|
+
return failure("transport-failed", "Telegram delivery failed.");
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
/** @internal */
|
|
502
|
+
export function bindTelegramDeliveryRuntime(runtime) {
|
|
503
|
+
const registry = getTelegramDeliveryRuntimeRegistry();
|
|
504
|
+
if (registry.runtime !== runtime)
|
|
505
|
+
registry.runtime?.shutdown();
|
|
506
|
+
registry.runtime = runtime;
|
|
507
|
+
return () => {
|
|
508
|
+
if (registry.runtime === runtime)
|
|
509
|
+
registry.runtime = undefined;
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
/** @internal */
|
|
513
|
+
export function clearTelegramDeliveryRuntime() {
|
|
514
|
+
const registry = getTelegramDeliveryRuntimeRegistry();
|
|
515
|
+
registry.runtime?.shutdown();
|
|
516
|
+
registry.runtime = undefined;
|
|
517
|
+
}
|
|
518
|
+
/** @internal */
|
|
519
|
+
export function isTelegramDeliveryHandleCurrent(handle) {
|
|
520
|
+
const runtime = getTelegramDeliveryRuntimeRegistry().runtime;
|
|
521
|
+
return runtime !== undefined && runtime.generation === handle.generation;
|
|
522
|
+
}
|
|
523
|
+
export async function sendTelegramView(view, options) {
|
|
524
|
+
const invalid = validateView(view);
|
|
525
|
+
if (invalid)
|
|
526
|
+
return invalid;
|
|
527
|
+
return runDeliveryOperation((runtime) => runtime.sendView(view, options));
|
|
528
|
+
}
|
|
529
|
+
export async function editTelegramView(handle, view) {
|
|
530
|
+
const invalid = validateView(view);
|
|
531
|
+
if (invalid)
|
|
532
|
+
return invalid;
|
|
533
|
+
return runDeliveryOperation((runtime) => {
|
|
534
|
+
if (runtime.generation !== handle.generation) {
|
|
535
|
+
return Promise.resolve(failure("stale-handle", "Telegram delivery handle belongs to an inactive runtime generation."));
|
|
536
|
+
}
|
|
537
|
+
return runtime.editView(handle, view);
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
export async function deleteTelegramView(handle) {
|
|
541
|
+
return runDeliveryOperation((runtime) => {
|
|
542
|
+
if (runtime.generation !== handle.generation) {
|
|
543
|
+
return Promise.resolve(failure("stale-handle", "Telegram delivery handle belongs to an inactive runtime generation."));
|
|
544
|
+
}
|
|
545
|
+
return runtime.deleteView(handle);
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
export async function sendTelegramChatAction(action, options) {
|
|
549
|
+
return runDeliveryOperation((runtime) => runtime.sendChatAction(action, options.scope));
|
|
550
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telegram bridge extension composition and orchestration layer
|
|
3
|
+
* Zones: telegram, pi agent, orchestration
|
|
4
|
+
* Keeps runtime wiring in one place while the package entrypoint remains a thin re-export
|
|
5
|
+
*/
|
|
6
|
+
import * as Pi from "./pi.ts";
|
|
7
|
+
export default function (pi: Pi.ExtensionAPI): void;
|