pi-harness-runtime 1.1.398 → 1.1.402

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.
Files changed (613) hide show
  1. package/AGENTS.md +44 -2
  2. package/CHANGELOG.md +21 -0
  3. package/RULES.md +28 -0
  4. package/harness/agent-handoff.ts +2 -3
  5. package/harness/autonomous-review.ts +1 -1
  6. package/harness/blackboard.ts +2 -3
  7. package/harness/context-compact-orchestrator.ts +1 -1
  8. package/harness/context-window-manager.ts +2 -2
  9. package/harness/e2e/playwright-runner.ts +6 -4
  10. package/harness/herdr-agents.ts +1 -1
  11. package/harness/job-state-machine.ts +1 -1
  12. package/harness/langchain/daemon.ts +3 -3
  13. package/harness/langchain/graph.ts +2 -2
  14. package/harness/langchain/ping-pong-middleware.ts +2 -2
  15. package/harness/loop-code-agent.ts +6 -4
  16. package/harness/loop-controller.ts +1 -1
  17. package/harness/loop-review-agent.ts +1 -1
  18. package/harness/loop-types.ts +1 -1
  19. package/harness/master-planner.ts +1 -1
  20. package/harness/project-detector/detector.ts +1 -2
  21. package/harness/repair-engine.ts +2 -4
  22. package/harness/service-diagnostics.ts +1 -1
  23. package/harness/skill-sync.ts +3 -3
  24. package/index.ts +276 -55
  25. package/mirror.ts +1 -1
  26. package/package.json +5 -3
  27. package/packages/a2a-adapter/dist/discovery.d.ts.map +1 -1
  28. package/packages/a2a-adapter/dist/discovery.js +0 -1
  29. package/packages/a2a-adapter/dist/discovery.js.map +1 -1
  30. package/packages/a2a-adapter/package.json +1 -1
  31. package/packages/a2a-adapter/src/discovery.ts +0 -1
  32. package/packages/agent-policy/package.json +1 -1
  33. package/packages/architecture-generator/package.json +1 -1
  34. package/packages/auth/dist/index.d.ts +9 -0
  35. package/packages/auth/dist/index.d.ts.map +1 -0
  36. package/packages/auth/dist/index.js +9 -0
  37. package/packages/auth/dist/index.js.map +1 -0
  38. package/packages/auth/package.json +1 -1
  39. package/packages/auth/src/index.ts +9 -0
  40. package/packages/autonomous-refactor/package.json +1 -1
  41. package/packages/autonomous-runtime/package.json +1 -1
  42. package/packages/cache-strategy/package.json +1 -1
  43. package/packages/capability-registry/package.json +1 -1
  44. package/packages/checkpoint/package.json +1 -1
  45. package/packages/cli-plugin-sdk/package.json +1 -1
  46. package/packages/clipboard/package.json +1 -1
  47. package/packages/clipboard-plugin/package.json +1 -1
  48. package/packages/code-generation/package.json +1 -1
  49. package/packages/code-review/package.json +1 -1
  50. package/packages/codex-adapter/package.json +1 -1
  51. package/packages/codex-watcher/package.json +1 -1
  52. package/packages/config-capture/dist/index.d.ts +52 -0
  53. package/packages/config-capture/dist/index.d.ts.map +1 -0
  54. package/packages/config-capture/dist/index.js +261 -0
  55. package/packages/config-capture/dist/index.js.map +1 -0
  56. package/packages/config-capture/package.json +1 -1
  57. package/packages/connection-runtime/package.json +1 -1
  58. package/packages/context-compiler/package.json +1 -1
  59. package/packages/context-discovery/package.json +1 -1
  60. package/packages/context-manager/package.json +1 -1
  61. package/packages/contracts/package.json +1 -1
  62. package/packages/cookie-sanitizer/package.json +1 -1
  63. package/packages/cost-optimizer/package.json +1 -1
  64. package/packages/dependency-analyzer/package.json +1 -1
  65. package/packages/django-plugin/package.json +1 -1
  66. package/packages/doc-generator/package.json +1 -1
  67. package/packages/durable-review/package.json +1 -1
  68. package/packages/e2e-tester/package.json +1 -1
  69. package/packages/evaluation-engine/package.json +1 -1
  70. package/packages/evaluation-runner/package.json +1 -1
  71. package/packages/event-bus/package.json +1 -1
  72. package/packages/event-sink/package.json +1 -1
  73. package/packages/event-store/package.json +1 -1
  74. package/packages/experience-replay/package.json +1 -1
  75. package/packages/feedback-collector/package.json +1 -1
  76. package/packages/file-copy-helper/dist/extension.d.ts +15 -0
  77. package/packages/file-copy-helper/dist/extension.d.ts.map +1 -0
  78. package/packages/file-copy-helper/dist/extension.debug.d.ts +15 -0
  79. package/packages/file-copy-helper/dist/extension.debug.d.ts.map +1 -0
  80. package/packages/file-copy-helper/dist/extension.debug.js +215 -0
  81. package/packages/file-copy-helper/dist/extension.debug.js.map +1 -0
  82. package/packages/file-copy-helper/dist/extension.js +222 -0
  83. package/packages/file-copy-helper/dist/extension.js.map +1 -0
  84. package/packages/file-copy-helper/dist/index.d.ts +3 -0
  85. package/packages/file-copy-helper/dist/index.d.ts.map +1 -0
  86. package/packages/file-copy-helper/dist/index.js +3 -0
  87. package/packages/file-copy-helper/dist/index.js.map +1 -0
  88. package/packages/file-copy-helper/dist/intent-detector.d.ts +21 -0
  89. package/packages/file-copy-helper/dist/intent-detector.d.ts.map +1 -0
  90. package/packages/file-copy-helper/dist/intent-detector.js +348 -0
  91. package/packages/file-copy-helper/dist/intent-detector.js.map +1 -0
  92. package/packages/file-copy-helper/package.json +1 -1
  93. package/packages/framework-detector/package.json +1 -1
  94. package/packages/framework-plugin-sdk/package.json +1 -1
  95. package/packages/frappe-plugin/package.json +1 -1
  96. package/packages/generic-web-plugin/package.json +1 -1
  97. package/packages/health-monitor/package.json +1 -1
  98. package/packages/intent-analyzer/package.json +1 -1
  99. package/packages/jev-judge/dist/auto-continue.d.ts +161 -2
  100. package/packages/jev-judge/dist/auto-continue.d.ts.map +1 -1
  101. package/packages/jev-judge/dist/auto-continue.js +267 -22
  102. package/packages/jev-judge/dist/auto-continue.js.map +1 -1
  103. package/packages/jev-judge/dist/index.d.ts +2 -0
  104. package/packages/jev-judge/dist/index.d.ts.map +1 -1
  105. package/packages/jev-judge/dist/index.js +2 -0
  106. package/packages/jev-judge/dist/index.js.map +1 -1
  107. package/packages/jev-judge/dist/question-risk.d.ts +50 -0
  108. package/packages/jev-judge/dist/question-risk.d.ts.map +1 -0
  109. package/packages/jev-judge/dist/question-risk.js +100 -0
  110. package/packages/jev-judge/dist/question-risk.js.map +1 -0
  111. package/packages/jev-judge/package.json +1 -1
  112. package/packages/jev-judge/src/auto-continue.ts +426 -29
  113. package/packages/jev-judge/src/index.ts +4 -0
  114. package/packages/jev-judge/src/question-risk.ts +151 -0
  115. package/packages/jev-judge/tests/auto-continue-context.test.ts +221 -0
  116. package/packages/jev-judge/tests/outcome-application.test.ts +132 -0
  117. package/packages/jev-judge/tests/question-risk.test.ts +116 -0
  118. package/packages/knowledge-graph/package.json +1 -1
  119. package/packages/knowledge-retrieval/package.json +1 -1
  120. package/packages/laravel-plugin/package.json +1 -1
  121. package/packages/learning-engine/package.json +1 -1
  122. package/packages/logging/README.md +36 -3
  123. package/packages/logging/dist/config.d.ts +7 -0
  124. package/packages/logging/dist/config.d.ts.map +1 -1
  125. package/packages/logging/dist/config.js +14 -0
  126. package/packages/logging/dist/config.js.map +1 -1
  127. package/packages/logging/dist/incidents/schema.d.ts +111 -0
  128. package/packages/logging/dist/incidents/schema.d.ts.map +1 -0
  129. package/packages/logging/dist/incidents/schema.js +0 -0
  130. package/packages/logging/dist/incidents/schema.js.map +1 -0
  131. package/packages/logging/dist/index.d.ts +2 -0
  132. package/packages/logging/dist/index.d.ts.map +1 -1
  133. package/packages/logging/dist/index.js +2 -0
  134. package/packages/logging/dist/index.js.map +1 -1
  135. package/packages/logging/dist/server/http.d.ts +4 -3
  136. package/packages/logging/dist/server/http.d.ts.map +1 -1
  137. package/packages/logging/dist/server/http.js +35 -3
  138. package/packages/logging/dist/server/http.js.map +1 -1
  139. package/packages/logging/dist/server/incident-qdrant.d.ts +83 -0
  140. package/packages/logging/dist/server/incident-qdrant.d.ts.map +1 -0
  141. package/packages/logging/dist/server/incident-qdrant.js +129 -0
  142. package/packages/logging/dist/server/incident-qdrant.js.map +1 -0
  143. package/packages/logging/dist/server/incident-store.d.ts +76 -0
  144. package/packages/logging/dist/server/incident-store.d.ts.map +1 -0
  145. package/packages/logging/dist/server/incident-store.js +157 -0
  146. package/packages/logging/dist/server/incident-store.js.map +1 -0
  147. package/packages/logging/dist/server/index.d.ts +4 -0
  148. package/packages/logging/dist/server/index.d.ts.map +1 -1
  149. package/packages/logging/dist/server/index.js +2 -0
  150. package/packages/logging/dist/server/index.js.map +1 -1
  151. package/packages/logging/dist/server/service.d.ts +33 -0
  152. package/packages/logging/dist/server/service.d.ts.map +1 -1
  153. package/packages/logging/dist/server/service.js +63 -0
  154. package/packages/logging/dist/server/service.js.map +1 -1
  155. package/packages/logging/dist/shipper.d.ts +74 -3
  156. package/packages/logging/dist/shipper.d.ts.map +1 -1
  157. package/packages/logging/dist/shipper.js +88 -5
  158. package/packages/logging/dist/shipper.js.map +1 -1
  159. package/packages/logging/dist/singleton.d.ts.map +1 -1
  160. package/packages/logging/dist/singleton.js +1 -0
  161. package/packages/logging/dist/singleton.js.map +1 -1
  162. package/packages/logging/package.json +1 -1
  163. package/packages/logging/src/config.ts +22 -0
  164. package/packages/logging/src/incidents/schema.ts +0 -0
  165. package/packages/logging/src/index.ts +17 -0
  166. package/packages/logging/src/server/http.ts +42 -3
  167. package/packages/logging/src/server/incident-qdrant.ts +177 -0
  168. package/packages/logging/src/server/incident-store.ts +192 -0
  169. package/packages/logging/src/server/index.ts +21 -0
  170. package/packages/logging/src/server/service.ts +79 -0
  171. package/packages/logging/src/shipper.ts +120 -5
  172. package/packages/logging/src/singleton.ts +1 -0
  173. package/packages/logging/test/fanout.test.ts +186 -0
  174. package/packages/logging/test/incidents.test.ts +404 -0
  175. package/packages/mcp-adapter/package.json +1 -1
  176. package/packages/memory-engine/package.json +1 -1
  177. package/packages/milestone-manager/package.json +1 -1
  178. package/packages/model-registry/package.json +1 -1
  179. package/packages/nextjs-plugin/package.json +1 -1
  180. package/packages/notification/dist/adapters/detail-format.d.ts +10 -2
  181. package/packages/notification/dist/adapters/detail-format.d.ts.map +1 -1
  182. package/packages/notification/dist/adapters/detail-format.js +39 -0
  183. package/packages/notification/dist/adapters/detail-format.js.map +1 -1
  184. package/packages/notification/dist/adapters/line-adapter.d.ts +33 -0
  185. package/packages/notification/dist/adapters/line-adapter.d.ts.map +1 -1
  186. package/packages/notification/dist/adapters/line-adapter.js +84 -7
  187. package/packages/notification/dist/adapters/line-adapter.js.map +1 -1
  188. package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +1 -1
  189. package/packages/notification/dist/adapters/telegram-adapter.js +6 -2
  190. package/packages/notification/dist/adapters/telegram-adapter.js.map +1 -1
  191. package/packages/notification/dist/notification-center.d.ts.map +1 -1
  192. package/packages/notification/dist/notification-center.js +59 -7
  193. package/packages/notification/dist/notification-center.js.map +1 -1
  194. package/packages/notification/dist/pending-question.d.ts +69 -2
  195. package/packages/notification/dist/pending-question.d.ts.map +1 -1
  196. package/packages/notification/dist/pending-question.js +88 -2
  197. package/packages/notification/dist/pending-question.js.map +1 -1
  198. package/packages/notification/dist/types.d.ts +18 -0
  199. package/packages/notification/dist/types.d.ts.map +1 -1
  200. package/packages/notification/package.json +1 -1
  201. package/packages/notification/src/adapters/detail-format.ts +42 -2
  202. package/packages/notification/src/adapters/line-adapter.ts +94 -7
  203. package/packages/notification/src/adapters/telegram-adapter.ts +6 -2
  204. package/packages/notification/src/notification-center.ts +65 -8
  205. package/packages/notification/src/pending-question.ts +160 -8
  206. package/packages/notification/src/types.ts +18 -0
  207. package/packages/notification/test/approval-payload.test.ts +269 -0
  208. package/packages/notification/test/pending-question-lifecycle.test.ts +195 -0
  209. package/packages/observability/package.json +1 -1
  210. package/packages/okf-indexer/dist/index.d.ts +9 -0
  211. package/packages/okf-indexer/dist/index.d.ts.map +1 -0
  212. package/packages/okf-indexer/dist/index.js +9 -0
  213. package/packages/okf-indexer/dist/index.js.map +1 -0
  214. package/packages/okf-indexer/package.json +1 -1
  215. package/packages/okf-indexer/src/index.ts +9 -0
  216. package/packages/paperclip-integration/package.json +1 -1
  217. package/packages/performance-optimizer/package.json +1 -1
  218. package/packages/permission-mode/package.json +1 -1
  219. package/packages/privilege-broker/package.json +1 -1
  220. package/packages/project-analyzer/package.json +1 -1
  221. package/packages/project-bootstrap/package.json +1 -1
  222. package/packages/projection-engine/package.json +1 -1
  223. package/packages/prompt-compiler/package.json +1 -1
  224. package/packages/prompt-versioning/package.json +1 -1
  225. package/packages/provider-adapter-sdk/package.json +1 -1
  226. package/packages/provider-router/dist/provider-router.d.ts.map +1 -1
  227. package/packages/provider-router/dist/types.d.ts +2 -2
  228. package/packages/provider-router/dist/types.d.ts.map +1 -1
  229. package/packages/provider-router/dist/types.js +1 -1
  230. package/packages/provider-router/package.json +1 -1
  231. package/packages/provider-router/src/types.ts +2 -2
  232. package/packages/provider-selector/package.json +1 -1
  233. package/packages/providers/package.json +1 -1
  234. package/packages/qdrant-skills/package.json +1 -1
  235. package/packages/quota-manager/package.json +1 -1
  236. package/packages/rate-limiter/package.json +1 -1
  237. package/packages/react-vite-plugin/package.json +1 -1
  238. package/packages/relay/package.json +1 -1
  239. package/packages/release-manager/package.json +1 -1
  240. package/packages/requirement-compiler/package.json +1 -1
  241. package/packages/runtime/package.json +1 -1
  242. package/packages/scheduler/dist/index.d.ts +9 -0
  243. package/packages/scheduler/dist/index.d.ts.map +1 -0
  244. package/packages/scheduler/dist/index.js +9 -0
  245. package/packages/scheduler/dist/index.js.map +1 -0
  246. package/packages/scheduler/dist/scheduler.d.ts +17 -0
  247. package/packages/scheduler/dist/scheduler.d.ts.map +1 -0
  248. package/packages/scheduler/dist/scheduler.js +41 -0
  249. package/packages/scheduler/dist/scheduler.js.map +1 -0
  250. package/packages/scheduler/package.json +1 -1
  251. package/packages/scheduler/src/index.ts +9 -0
  252. package/packages/scheduler-adapter/package.json +1 -1
  253. package/packages/session/package.json +1 -1
  254. package/packages/session-api/package.json +1 -1
  255. package/packages/session-export/package.json +1 -1
  256. package/packages/shared-context/dist/index.d.ts +7 -0
  257. package/packages/shared-context/dist/index.d.ts.map +1 -0
  258. package/packages/shared-context/dist/index.js +7 -0
  259. package/packages/shared-context/dist/index.js.map +1 -0
  260. package/packages/shared-context/dist/shared-context.d.ts +12 -0
  261. package/packages/shared-context/dist/shared-context.d.ts.map +1 -0
  262. package/packages/shared-context/dist/shared-context.js +39 -0
  263. package/packages/shared-context/dist/shared-context.js.map +1 -0
  264. package/packages/shared-context/package.json +1 -1
  265. package/packages/skill-mcp-client/dist/client.d.ts +56 -0
  266. package/packages/skill-mcp-client/dist/client.d.ts.map +1 -0
  267. package/packages/skill-mcp-client/dist/client.js +101 -0
  268. package/packages/skill-mcp-client/dist/client.js.map +1 -0
  269. package/packages/skill-mcp-client/dist/errors.d.ts +44 -0
  270. package/packages/skill-mcp-client/dist/errors.d.ts.map +1 -0
  271. package/packages/skill-mcp-client/dist/errors.js +68 -0
  272. package/packages/skill-mcp-client/dist/errors.js.map +1 -0
  273. package/packages/skill-mcp-client/dist/index.d.ts +9 -0
  274. package/packages/skill-mcp-client/dist/index.d.ts.map +1 -0
  275. package/packages/skill-mcp-client/dist/index.js +9 -0
  276. package/packages/skill-mcp-client/dist/index.js.map +1 -0
  277. package/packages/skill-mcp-client/dist/types.d.ts +106 -0
  278. package/packages/skill-mcp-client/dist/types.d.ts.map +1 -0
  279. package/packages/skill-mcp-client/dist/types.js +14 -0
  280. package/packages/skill-mcp-client/dist/types.js.map +1 -0
  281. package/packages/skill-mcp-client/package.json +1 -1
  282. package/packages/skill-registry/package.json +1 -1
  283. package/packages/skills/package.json +1 -5
  284. package/packages/sprint-planner/package.json +1 -1
  285. package/packages/subscription-engine/package.json +1 -1
  286. package/packages/task-compiler/package.json +1 -1
  287. package/packages/telegram/package.json +1 -1
  288. package/packages/telegram/src/agent-messages.d.ts +28 -0
  289. package/packages/telegram/src/agent-messages.js +90 -0
  290. package/packages/telegram/src/bindings.d.ts +296 -0
  291. package/packages/telegram/src/bindings.js +1086 -0
  292. package/packages/telegram/src/bus.d.ts +759 -0
  293. package/packages/telegram/src/bus.js +2732 -0
  294. package/packages/telegram/src/commands.d.ts +761 -0
  295. package/packages/telegram/src/commands.js +2622 -0
  296. package/packages/telegram/src/config.d.ts +222 -0
  297. package/packages/telegram/src/config.js +844 -0
  298. package/packages/telegram/src/delivery.d.ts +161 -0
  299. package/packages/telegram/src/delivery.js +550 -0
  300. package/packages/telegram/src/extension.d.ts +7 -0
  301. package/packages/telegram/src/extension.js +2444 -0
  302. package/packages/telegram/src/inbound.d.ts +94 -0
  303. package/packages/telegram/src/inbound.js +478 -0
  304. package/packages/telegram/src/index.d.ts +6 -0
  305. package/packages/telegram/src/index.js +6 -0
  306. package/packages/telegram/src/keyboard.d.ts +21 -0
  307. package/packages/telegram/src/keyboard.js +37 -0
  308. package/packages/telegram/src/lifecycle.d.ts +210 -0
  309. package/packages/telegram/src/lifecycle.js +538 -0
  310. package/packages/telegram/src/pi.d.ts +76 -0
  311. package/packages/telegram/src/pi.js +130 -0
  312. package/packages/telegram/src/polling.d.ts +332 -0
  313. package/packages/telegram/src/polling.js +1219 -0
  314. package/packages/telegram/src/replies.d.ts +210 -0
  315. package/packages/telegram/src/replies.js +752 -0
  316. package/packages/telegram/src/routing.d.ts +388 -0
  317. package/packages/telegram/src/routing.js +7886 -0
  318. package/packages/telegram/src/runtime.d.ts +159 -0
  319. package/packages/telegram/src/runtime.js +351 -0
  320. package/packages/telegram/src/telegram-api.d.ts +564 -0
  321. package/packages/telegram/src/telegram-api.js +1332 -0
  322. package/packages/telegram/src/turns.d.ts +108 -0
  323. package/packages/telegram/src/turns.js +482 -0
  324. package/packages/telegram/src/updates.d.ts +1545 -0
  325. package/packages/telegram/src/updates.js +6420 -0
  326. package/packages/tencentdb-memory/package.json +1 -1
  327. package/packages/tencentdb-sync/package.json +1 -1
  328. package/packages/test-data-generator/package.json +1 -1
  329. package/packages/test-generator/package.json +1 -1
  330. package/packages/todo-bd-sync/dist/detector.d.ts +54 -0
  331. package/packages/todo-bd-sync/dist/detector.d.ts.map +1 -0
  332. package/packages/todo-bd-sync/dist/detector.js +132 -0
  333. package/packages/todo-bd-sync/dist/detector.js.map +1 -0
  334. package/packages/todo-bd-sync/dist/extension.d.ts +30 -0
  335. package/packages/todo-bd-sync/dist/extension.d.ts.map +1 -0
  336. package/packages/todo-bd-sync/dist/extension.js +35 -0
  337. package/packages/todo-bd-sync/dist/extension.js.map +1 -0
  338. package/packages/todo-bd-sync/dist/index.d.ts +87 -0
  339. package/packages/todo-bd-sync/dist/index.d.ts.map +1 -0
  340. package/packages/todo-bd-sync/dist/index.js +296 -0
  341. package/packages/todo-bd-sync/dist/index.js.map +1 -0
  342. package/packages/todo-bd-sync/dist/sync.d.ts +72 -0
  343. package/packages/todo-bd-sync/dist/sync.d.ts.map +1 -0
  344. package/packages/todo-bd-sync/dist/sync.js +290 -0
  345. package/packages/todo-bd-sync/dist/sync.js.map +1 -0
  346. package/packages/todo-bd-sync/dist/task-analyzer.d.ts +49 -0
  347. package/packages/todo-bd-sync/dist/task-analyzer.d.ts.map +1 -0
  348. package/packages/todo-bd-sync/dist/task-analyzer.js +240 -0
  349. package/packages/todo-bd-sync/dist/task-analyzer.js.map +1 -0
  350. package/packages/todo-bd-sync/dist/todo-reminder.d.ts +126 -0
  351. package/packages/todo-bd-sync/dist/todo-reminder.d.ts.map +1 -0
  352. package/packages/todo-bd-sync/dist/todo-reminder.js +329 -0
  353. package/packages/todo-bd-sync/dist/todo-reminder.js.map +1 -0
  354. package/packages/todo-bd-sync/dist/types.d.ts +65 -0
  355. package/packages/todo-bd-sync/dist/types.d.ts.map +1 -0
  356. package/packages/todo-bd-sync/dist/types.js +67 -0
  357. package/packages/todo-bd-sync/dist/types.js.map +1 -0
  358. package/packages/todo-bd-sync/package.json +1 -1
  359. package/packages/token-estimation/dist/index.d.ts +94 -0
  360. package/packages/token-estimation/dist/index.d.ts.map +1 -0
  361. package/packages/token-estimation/dist/index.js +115 -0
  362. package/packages/token-estimation/dist/index.js.map +1 -0
  363. package/packages/token-estimation/package.json +1 -1
  364. package/packages/token-optimizer/package.json +1 -1
  365. package/packages/trajectory/package.json +1 -1
  366. package/packages/tui/package.json +1 -1
  367. package/packages/types/dist/ai-providers.d.ts +36 -0
  368. package/packages/types/dist/ai-providers.d.ts.map +1 -0
  369. package/packages/types/dist/ai-providers.js +66 -0
  370. package/packages/types/dist/ai-providers.js.map +1 -0
  371. package/packages/types/dist/index.d.ts +12 -0
  372. package/packages/types/dist/index.d.ts.map +1 -0
  373. package/packages/types/dist/index.js +12 -0
  374. package/packages/types/dist/index.js.map +1 -0
  375. package/packages/types/package.json +5 -5
  376. package/packages/types/src/index.ts +12 -0
  377. package/packages/voice-api/package.json +1 -1
  378. package/packages/webmcp-tester/package.json +1 -1
  379. package/packages/wiki/package.json +1 -1
  380. package/packages/workflow-events/package.json +1 -1
  381. package/packages/workspace-scanner/package.json +1 -1
  382. package/packages/worktree/package.json +1 -1
  383. package/packages/worktree/worktree.ts +1 -1
  384. package/packages/write-review/package.json +1 -1
  385. package/renderer.ts +1 -1
  386. package/scripts/build-packages.ts +162 -0
  387. package/scripts/relay-client.ts +2 -2
  388. package/scripts/typecheck-packages.mjs +3 -3
  389. package/scripts/unified-webhook-server.ts +22 -10
  390. package/scripts/verify-package-contents.ts +345 -0
  391. package/scripts/ws-server.ts +1 -1
  392. package/tracker.ts +1 -1
  393. package/harness/browser-scrapers/base-browser-scraper.d.ts +0 -91
  394. package/harness/browser-scrapers/chrome-profile-manager.d.ts +0 -80
  395. package/harness/browser-scrapers/codex-browser-scraper.d.ts +0 -60
  396. package/harness/browser-scrapers/index.d.ts +0 -29
  397. package/harness/browser-scrapers/zai-browser-scraper.d.ts +0 -79
  398. package/harness/e2e/browser-scrapers/base-browser-scraper.d.ts +0 -92
  399. package/harness/e2e/browser-scrapers/chrome-profile-manager.d.ts +0 -81
  400. package/harness/e2e/browser-scrapers/codex-browser-scraper.d.ts +0 -61
  401. package/harness/e2e/browser-scrapers/index.d.ts +0 -30
  402. package/harness/e2e/browser-scrapers/zai-browser-scraper.d.ts +0 -80
  403. package/harness/langchain/agents.d.ts +0 -143
  404. package/harness/langchain/agents.test.d.ts +0 -2
  405. package/harness/langchain/checkpointer.d.ts +0 -48
  406. package/harness/langchain/checkpointer.test.d.ts +0 -8
  407. package/harness/langchain/cron-cli.d.ts +0 -12
  408. package/harness/langchain/daemon.d.ts +0 -161
  409. package/harness/langchain/daemon.test.d.ts +0 -11
  410. package/harness/langchain/file-tools.d.ts +0 -97
  411. package/harness/langchain/graph.d.ts +0 -706
  412. package/harness/langchain/model-router.d.ts +0 -63
  413. package/harness/langchain/model-router.test.d.ts +0 -2
  414. package/harness/langchain/models.d.ts +0 -72
  415. package/harness/langchain/ping-pong-middleware.d.ts +0 -28
  416. package/harness/langchain/ping-pong-middleware.test.d.ts +0 -2
  417. package/harness/langchain/run.d.ts +0 -15
  418. package/harness/langchain/scoreboard.test.d.ts +0 -13
  419. package/harness/langchain/status-line.d.ts +0 -91
  420. package/harness/langchain/status-line.test.d.ts +0 -8
  421. package/harness/langchain/surge.d.ts +0 -111
  422. package/harness/langchain/surge.test.d.ts +0 -10
  423. package/harness/langchain/widget.d.ts +0 -105
  424. package/harness/langchain/widget.test.d.ts +0 -8
  425. package/packages/autonomous-runtime/dist/worker.d.ts +0 -63
  426. package/packages/autonomous-runtime/dist/worker.js +0 -133
  427. package/packages/capability-registry/src/types.d.ts +0 -47
  428. package/packages/clipboard/dist/clipboard.d.ts +0 -11
  429. package/packages/clipboard/dist/clipboard.js +0 -40
  430. package/packages/clipboard/dist/index.d.ts +0 -2
  431. package/packages/clipboard/dist/index.js +0 -2
  432. package/packages/clipboard/dist/types.d.ts +0 -13
  433. package/packages/clipboard/dist/types.js +0 -5
  434. package/packages/context-discovery/dist/discover.d.ts +0 -3
  435. package/packages/context-discovery/dist/discover.js +0 -42
  436. package/packages/context-discovery/dist/discovery.d.ts +0 -28
  437. package/packages/context-discovery/dist/discovery.js +0 -21
  438. package/packages/context-discovery/dist/index.d.ts +0 -3
  439. package/packages/context-discovery/dist/index.js +0 -2
  440. package/packages/context-discovery/dist/types.d.ts +0 -16
  441. package/packages/context-discovery/dist/types.js +0 -2
  442. package/packages/event-bus/dist/bus.d.ts +0 -15
  443. package/packages/event-bus/dist/bus.js +0 -90
  444. package/packages/event-bus/dist/index.d.ts +0 -4
  445. package/packages/event-bus/dist/index.js +0 -3
  446. package/packages/event-bus/dist/test/bus.test.js +0 -52
  447. package/packages/event-bus/dist/types.d.ts +0 -27
  448. package/packages/event-bus/dist/types.js +0 -10
  449. package/packages/event-store/dist/index.d.ts +0 -3
  450. package/packages/event-store/dist/index.js +0 -2
  451. package/packages/event-store/dist/store.d.ts +0 -15
  452. package/packages/event-store/dist/store.js +0 -131
  453. package/packages/event-store/dist/test/store.test.js +0 -57
  454. package/packages/event-store/dist/types.d.ts +0 -48
  455. package/packages/event-store/dist/types.js +0 -5
  456. package/packages/event-store/src/types.d.ts +0 -48
  457. package/packages/file-copy-helper/dist/src/extension.js +0 -186
  458. package/packages/model-registry/src/types.d.ts +0 -63
  459. package/packages/notification/dist/src/adapters/email-adapter.d.ts +0 -17
  460. package/packages/notification/dist/src/adapters/email-adapter.d.ts.map +0 -1
  461. package/packages/notification/dist/src/adapters/email-adapter.js +0 -89
  462. package/packages/notification/dist/src/adapters/email-adapter.js.map +0 -1
  463. package/packages/notification/dist/src/adapters/line-adapter.d.ts +0 -17
  464. package/packages/notification/dist/src/adapters/line-adapter.d.ts.map +0 -1
  465. package/packages/notification/dist/src/adapters/line-adapter.js +0 -99
  466. package/packages/notification/dist/src/adapters/line-adapter.js.map +0 -1
  467. package/packages/notification/dist/src/adapters/ntfy-adapter.d.ts +0 -17
  468. package/packages/notification/dist/src/adapters/ntfy-adapter.d.ts.map +0 -1
  469. package/packages/notification/dist/src/adapters/ntfy-adapter.js +0 -84
  470. package/packages/notification/dist/src/adapters/ntfy-adapter.js.map +0 -1
  471. package/packages/notification/dist/src/adapters/telegram-adapter.d.ts +0 -56
  472. package/packages/notification/dist/src/adapters/telegram-adapter.d.ts.map +0 -1
  473. package/packages/notification/dist/src/adapters/telegram-adapter.js +0 -251
  474. package/packages/notification/dist/src/adapters/telegram-adapter.js.map +0 -1
  475. package/packages/notification/dist/src/adapters/webhook-adapter.d.ts +0 -15
  476. package/packages/notification/dist/src/adapters/webhook-adapter.d.ts.map +0 -1
  477. package/packages/notification/dist/src/adapters/webhook-adapter.js +0 -64
  478. package/packages/notification/dist/src/adapters/webhook-adapter.js.map +0 -1
  479. package/packages/notification/dist/src/base-adapter.d.ts +0 -36
  480. package/packages/notification/dist/src/base-adapter.d.ts.map +0 -1
  481. package/packages/notification/dist/src/base-adapter.js +0 -39
  482. package/packages/notification/dist/src/base-adapter.js.map +0 -1
  483. package/packages/notification/dist/src/index.d.ts +0 -12
  484. package/packages/notification/dist/src/index.d.ts.map +0 -1
  485. package/packages/notification/dist/src/index.js +0 -12
  486. package/packages/notification/dist/src/index.js.map +0 -1
  487. package/packages/notification/dist/src/notification-center.d.ts +0 -89
  488. package/packages/notification/dist/src/notification-center.d.ts.map +0 -1
  489. package/packages/notification/dist/src/notification-center.js +0 -356
  490. package/packages/notification/dist/src/notification-center.js.map +0 -1
  491. package/packages/notification/dist/src/notification-policy.d.ts +0 -66
  492. package/packages/notification/dist/src/notification-policy.d.ts.map +0 -1
  493. package/packages/notification/dist/src/notification-policy.js +0 -153
  494. package/packages/notification/dist/src/notification-policy.js.map +0 -1
  495. package/packages/notification/dist/src/telegram-webhook-handler.d.ts +0 -86
  496. package/packages/notification/dist/src/telegram-webhook-handler.d.ts.map +0 -1
  497. package/packages/notification/dist/src/telegram-webhook-handler.js +0 -149
  498. package/packages/notification/dist/src/telegram-webhook-handler.js.map +0 -1
  499. package/packages/notification/dist/src/types.d.ts +0 -106
  500. package/packages/notification/dist/src/types.d.ts.map +0 -1
  501. package/packages/notification/dist/src/types.js +0 -7
  502. package/packages/notification/dist/src/types.js.map +0 -1
  503. package/packages/projection-engine/dist/engine.d.ts +0 -61
  504. package/packages/projection-engine/dist/engine.js +0 -76
  505. package/packages/projection-engine/dist/index.d.ts +0 -2
  506. package/packages/projection-engine/dist/index.js +0 -2
  507. package/packages/projection-engine/dist/project.d.ts +0 -3
  508. package/packages/projection-engine/dist/project.js +0 -24
  509. package/packages/projection-engine/dist/types.d.ts +0 -55
  510. package/packages/projection-engine/dist/types.js +0 -5
  511. package/packages/projection-engine/src/types.d.ts +0 -55
  512. package/packages/provider-adapter-sdk/dist/src/builder.d.ts +0 -140
  513. package/packages/provider-adapter-sdk/dist/src/builder.d.ts.map +0 -1
  514. package/packages/provider-adapter-sdk/dist/src/builder.js +0 -332
  515. package/packages/provider-adapter-sdk/dist/src/builder.js.map +0 -1
  516. package/packages/provider-adapter-sdk/dist/src/errors.d.ts +0 -71
  517. package/packages/provider-adapter-sdk/dist/src/errors.d.ts.map +0 -1
  518. package/packages/provider-adapter-sdk/dist/src/errors.js +0 -111
  519. package/packages/provider-adapter-sdk/dist/src/errors.js.map +0 -1
  520. package/packages/provider-adapter-sdk/dist/src/index.d.ts +0 -15
  521. package/packages/provider-adapter-sdk/dist/src/index.d.ts.map +0 -1
  522. package/packages/provider-adapter-sdk/dist/src/index.js +0 -19
  523. package/packages/provider-adapter-sdk/dist/src/index.js.map +0 -1
  524. package/packages/provider-adapter-sdk/dist/src/registry.d.ts +0 -108
  525. package/packages/provider-adapter-sdk/dist/src/registry.d.ts.map +0 -1
  526. package/packages/provider-adapter-sdk/dist/src/registry.js +0 -301
  527. package/packages/provider-adapter-sdk/dist/src/registry.js.map +0 -1
  528. package/packages/provider-adapter-sdk/dist/src/tester.d.ts +0 -71
  529. package/packages/provider-adapter-sdk/dist/src/tester.d.ts.map +0 -1
  530. package/packages/provider-adapter-sdk/dist/src/tester.js +0 -392
  531. package/packages/provider-adapter-sdk/dist/src/tester.js.map +0 -1
  532. package/packages/provider-adapter-sdk/dist/src/types.d.ts +0 -182
  533. package/packages/provider-adapter-sdk/dist/src/types.d.ts.map +0 -1
  534. package/packages/provider-adapter-sdk/dist/src/types.js +0 -11
  535. package/packages/provider-adapter-sdk/dist/src/types.js.map +0 -1
  536. package/packages/provider-router/dist/capability-registry/src/types.d.ts +0 -47
  537. package/packages/provider-router/dist/capability-registry/src/types.d.ts.map +0 -1
  538. package/packages/provider-router/dist/capability-registry/src/types.js +0 -10
  539. package/packages/provider-router/dist/capability-registry/src/types.js.map +0 -1
  540. package/packages/provider-router/dist/provider-router/src/index.d.ts +0 -23
  541. package/packages/provider-router/dist/provider-router/src/index.d.ts.map +0 -1
  542. package/packages/provider-router/dist/provider-router/src/index.js +0 -25
  543. package/packages/provider-router/dist/provider-router/src/index.js.map +0 -1
  544. package/packages/provider-router/dist/provider-router/src/policy.d.ts +0 -10
  545. package/packages/provider-router/dist/provider-router/src/policy.d.ts.map +0 -1
  546. package/packages/provider-router/dist/provider-router/src/policy.js +0 -45
  547. package/packages/provider-router/dist/provider-router/src/policy.js.map +0 -1
  548. package/packages/provider-router/dist/provider-router/src/provider-router.d.ts +0 -56
  549. package/packages/provider-router/dist/provider-router/src/provider-router.d.ts.map +0 -1
  550. package/packages/provider-router/dist/provider-router/src/provider-router.js +0 -222
  551. package/packages/provider-router/dist/provider-router/src/provider-router.js.map +0 -1
  552. package/packages/provider-router/dist/provider-router/src/strategies.d.ts +0 -19
  553. package/packages/provider-router/dist/provider-router/src/strategies.d.ts.map +0 -1
  554. package/packages/provider-router/dist/provider-router/src/strategies.js +0 -110
  555. package/packages/provider-router/dist/provider-router/src/strategies.js.map +0 -1
  556. package/packages/provider-router/dist/provider-router/src/types.d.ts +0 -91
  557. package/packages/provider-router/dist/provider-router/src/types.d.ts.map +0 -1
  558. package/packages/provider-router/dist/provider-router/src/types.js +0 -10
  559. package/packages/provider-router/dist/provider-router/src/types.js.map +0 -1
  560. package/packages/provider-router/dist/src/index.d.ts +0 -23
  561. package/packages/provider-router/dist/src/index.d.ts.map +0 -1
  562. package/packages/provider-router/dist/src/index.js +0 -25
  563. package/packages/provider-router/dist/src/index.js.map +0 -1
  564. package/packages/provider-router/dist/src/policy.d.ts +0 -10
  565. package/packages/provider-router/dist/src/policy.d.ts.map +0 -1
  566. package/packages/provider-router/dist/src/policy.js +0 -45
  567. package/packages/provider-router/dist/src/policy.js.map +0 -1
  568. package/packages/provider-router/dist/src/provider-router.d.ts +0 -56
  569. package/packages/provider-router/dist/src/provider-router.d.ts.map +0 -1
  570. package/packages/provider-router/dist/src/provider-router.js +0 -222
  571. package/packages/provider-router/dist/src/provider-router.js.map +0 -1
  572. package/packages/provider-router/dist/src/strategies.d.ts +0 -19
  573. package/packages/provider-router/dist/src/strategies.d.ts.map +0 -1
  574. package/packages/provider-router/dist/src/strategies.js +0 -110
  575. package/packages/provider-router/dist/src/strategies.js.map +0 -1
  576. package/packages/provider-router/dist/src/types.d.ts +0 -91
  577. package/packages/provider-router/dist/src/types.d.ts.map +0 -1
  578. package/packages/provider-router/dist/src/types.js +0 -10
  579. package/packages/provider-router/dist/src/types.js.map +0 -1
  580. package/packages/provider-router/dist/types/src/runtime-types.d.ts +0 -412
  581. package/packages/provider-router/dist/types/src/runtime-types.d.ts.map +0 -1
  582. package/packages/provider-router/dist/types/src/runtime-types.js +0 -2
  583. package/packages/provider-router/dist/types/src/runtime-types.js.map +0 -1
  584. package/packages/session-api/dist/api.d.ts +0 -83
  585. package/packages/session-api/dist/api.js +0 -35
  586. package/packages/session-api/dist/index.d.ts +0 -2
  587. package/packages/session-api/dist/index.js +0 -2
  588. package/packages/session-api/dist/types.d.ts +0 -22
  589. package/packages/session-api/dist/types.js +0 -5
  590. package/packages/session-export/dist/exporter.d.ts +0 -28
  591. package/packages/session-export/dist/exporter.js +0 -38
  592. package/packages/session-export/dist/index.d.ts +0 -2
  593. package/packages/session-export/dist/index.js +0 -2
  594. package/packages/session-export/dist/types.d.ts +0 -20
  595. package/packages/session-export/dist/types.js +0 -5
  596. package/packages/subscription-engine/dist/engine.d.ts +0 -13
  597. package/packages/subscription-engine/dist/engine.js +0 -40
  598. package/packages/subscription-engine/dist/index.d.ts +0 -2
  599. package/packages/subscription-engine/dist/index.js +0 -2
  600. package/packages/subscription-engine/dist/subscriptions.d.ts +0 -19
  601. package/packages/subscription-engine/dist/subscriptions.js +0 -32
  602. package/packages/subscription-engine/dist/types.d.ts +0 -24
  603. package/packages/subscription-engine/dist/types.js +0 -5
  604. package/packages/trajectory/test/store.test.d.ts +0 -2
  605. package/packages/workflow-events/dist/events.d.ts +0 -38
  606. package/packages/workflow-events/dist/events.js +0 -46
  607. package/packages/workflow-events/dist/index.d.ts +0 -2
  608. package/packages/workflow-events/dist/index.js +0 -2
  609. package/packages/workflow-events/dist/pipeline.d.ts +0 -21
  610. package/packages/workflow-events/dist/pipeline.js +0 -27
  611. package/packages/workflow-events/dist/types.d.ts +0 -110
  612. package/packages/workflow-events/dist/types.js +0 -5
  613. package/packages/workflow-events/src/types.d.ts +0 -110
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Telegram inbound handler pipeline
3
+ * Zones: telegram inbound, command templates, prompt preparation
4
+ * Owns MIME/type matching, command-template execution, fallback handling, and prompt injection before prompt enqueueing
5
+ */
6
+ import { type CommandTemplateConfig, type CommandTemplateObjectConfig } from "./command-templates.ts";
7
+ type TelegramInboundCommandTemplateConfig = string | CommandTemplateObjectConfig;
8
+ export interface TelegramInboundHandlerConfig {
9
+ match?: string | string[];
10
+ mime?: string | string[];
11
+ type?: string | string[];
12
+ template?: string | TelegramInboundCommandTemplateConfig[];
13
+ /** Falsy skips this handler so selection continues with the next match. */
14
+ when?: CommandTemplateObjectConfig["when"];
15
+ args?: string[];
16
+ defaults?: Record<string, unknown>;
17
+ timeout?: number | string;
18
+ retry?: CommandTemplateObjectConfig["retry"];
19
+ recover?: CommandTemplateObjectConfig["recover"];
20
+ }
21
+ export interface TelegramInboundHandlerFile {
22
+ path: string;
23
+ fileName?: string;
24
+ mimeType?: string;
25
+ kind?: string;
26
+ isImage?: boolean;
27
+ }
28
+ export interface TelegramInboundHandlerOutput {
29
+ file: TelegramInboundHandlerFile;
30
+ output: string;
31
+ handler: TelegramInboundHandlerConfig;
32
+ }
33
+ export interface TelegramInboundHandlerProcessResult<TFile extends TelegramInboundHandlerFile = TelegramInboundHandlerFile> {
34
+ rawText: string;
35
+ promptFiles: TFile[];
36
+ handlerOutputs: string[];
37
+ handledFiles: TelegramInboundHandlerOutput[];
38
+ }
39
+ export interface TelegramInboundHandlerExecOptions {
40
+ cwd?: string;
41
+ timeout?: number;
42
+ signal?: AbortSignal;
43
+ stdin?: string;
44
+ retry?: number;
45
+ recover?: () => Promise<void>;
46
+ }
47
+ export interface TelegramInboundHandlerExecResult {
48
+ stdout: string;
49
+ stderr: string;
50
+ code: number;
51
+ killed: boolean;
52
+ }
53
+ export interface TelegramInboundHandlerRuntimeDeps<TContext> {
54
+ getHandlers: () => TelegramInboundHandlerConfig[] | undefined;
55
+ execCommand: (command: string, args: string[], options?: TelegramInboundHandlerExecOptions) => Promise<TelegramInboundHandlerExecResult>;
56
+ getCwd: (ctx: TContext) => string;
57
+ recordRuntimeEvent?: (category: string, error: unknown, details?: Record<string, unknown>) => void;
58
+ }
59
+ export interface TelegramInboundHandlerRuntime<TContext> {
60
+ process: <TFile extends TelegramInboundHandlerFile>(files: TFile[], rawText: string, ctx: TContext) => Promise<TelegramInboundHandlerProcessResult<TFile>>;
61
+ }
62
+ export type TelegramInboundProgrammaticHandlerResult = string | {
63
+ text: string;
64
+ } | undefined;
65
+ export interface TelegramInboundProgrammaticHandlerInput {
66
+ kind: string;
67
+ text?: string;
68
+ file?: TelegramInboundHandlerFile;
69
+ mimeType?: string;
70
+ }
71
+ export type TelegramInboundProgrammaticHandler = (input: TelegramInboundProgrammaticHandlerInput, options?: {
72
+ cwd?: string;
73
+ }) => Promise<TelegramInboundProgrammaticHandlerResult>;
74
+ export interface TelegramInboundHandlerRegistry {
75
+ handlers: Map<string, TelegramInboundProgrammaticHandler[]>;
76
+ }
77
+ interface InboundHandlerInvocation {
78
+ command: string;
79
+ args: string[];
80
+ }
81
+ export declare function registerTelegramInboundHandler(kind: string, handler: TelegramInboundProgrammaticHandler): () => void;
82
+ export declare function clearTelegramInboundHandlers(): void;
83
+ export declare function telegramInboundHandlerMatchesFile(handler: TelegramInboundHandlerConfig, file: TelegramInboundHandlerFile): boolean;
84
+ export declare function buildTelegramInboundHandlerInvocation(handler: CommandTemplateConfig, file: TelegramInboundHandlerFile, cwd: string, appendFileIfMissing?: boolean): InboundHandlerInvocation;
85
+ export declare function processTelegramInboundHandlers<TFile extends TelegramInboundHandlerFile>(options: {
86
+ files: TFile[];
87
+ rawText: string;
88
+ handlers?: TelegramInboundHandlerConfig[];
89
+ cwd: string;
90
+ execCommand: TelegramInboundHandlerRuntimeDeps<unknown>["execCommand"];
91
+ recordRuntimeEvent?: TelegramInboundHandlerRuntimeDeps<unknown>["recordRuntimeEvent"];
92
+ }): Promise<TelegramInboundHandlerProcessResult<TFile>>;
93
+ export declare function createTelegramInboundHandlerRuntime<TContext>(deps: TelegramInboundHandlerRuntimeDeps<TContext>): TelegramInboundHandlerRuntime<TContext>;
94
+ export {};
@@ -0,0 +1,478 @@
1
+ /**
2
+ * Telegram inbound handler pipeline
3
+ * Zones: telegram inbound, command templates, prompt preparation
4
+ * Owns MIME/type matching, command-template execution, fallback handling, and prompt injection before prompt enqueueing
5
+ */
6
+ import { readFile } from "node:fs/promises";
7
+ import { basename } from "node:path";
8
+ import { buildCommandTemplateInvocation, createCommandTemplateRecovery, getCommandTemplateCompositionSteps, getCommandTemplateConfiguredTimeout, getCommandTemplateStepTimeout, normalizeCommandTemplateConfig, resolveCommandTemplateNumericField, shouldRunCommandTemplateConfig, } from "./command-templates.js";
9
+ import { getTelegramVoiceTranscriptionProviders } from "./voice.js";
10
+ const DEFAULT_INBOUND_HANDLER_TIMEOUT_MS = 120_000;
11
+ const INBOUND_HANDLER_REGISTRY_KEY = "__piTelegramInboundHandlers__";
12
+ const MAX_INBOUND_HANDLER_OUTPUT_LENGTH = 24_000;
13
+ const MAX_INBOUND_HANDLER_FAILURE_STREAM_LENGTH = 4_000;
14
+ const BUILT_IN_TEXT_ATTACHMENT_MAX_BYTES = 1_000_000;
15
+ function getOrCreateInboundHandlerRegistry() {
16
+ const existing = globalThis[INBOUND_HANDLER_REGISTRY_KEY];
17
+ if (existing &&
18
+ typeof existing === "object" &&
19
+ existing !== null &&
20
+ "handlers" in existing &&
21
+ existing.handlers instanceof Map) {
22
+ return existing;
23
+ }
24
+ const registry = {
25
+ handlers: new Map(),
26
+ };
27
+ globalThis[INBOUND_HANDLER_REGISTRY_KEY] =
28
+ registry;
29
+ return registry;
30
+ }
31
+ export function registerTelegramInboundHandler(kind, handler) {
32
+ const normalizedKind = kind.trim() || "*";
33
+ const registry = getOrCreateInboundHandlerRegistry();
34
+ const list = registry.handlers.get(normalizedKind) ?? [];
35
+ list.push(handler);
36
+ registry.handlers.set(normalizedKind, list);
37
+ return () => {
38
+ const updated = registry.handlers.get(normalizedKind) ?? [];
39
+ const index = updated.indexOf(handler);
40
+ if (index !== -1) {
41
+ updated.splice(index, 1);
42
+ registry.handlers.set(normalizedKind, updated);
43
+ }
44
+ };
45
+ }
46
+ function getTelegramInboundProgrammaticHandlers(kind) {
47
+ const registry = getOrCreateInboundHandlerRegistry();
48
+ return [
49
+ ...(registry.handlers.get(kind) ?? []),
50
+ ...(kind === "*" ? [] : (registry.handlers.get("*") ?? [])),
51
+ ];
52
+ }
53
+ export function clearTelegramInboundHandlers() {
54
+ getOrCreateInboundHandlerRegistry().handlers.clear();
55
+ }
56
+ function truncateTelegramInboundText(text, maxLength) {
57
+ if (text.length <= maxLength)
58
+ return text;
59
+ return `${text.slice(0, maxLength).trimEnd()}… [truncated ${text.length - maxLength} chars]`;
60
+ }
61
+ function truncateTelegramInboundOutput(text) {
62
+ return truncateTelegramInboundText(text, MAX_INBOUND_HANDLER_OUTPUT_LENGTH);
63
+ }
64
+ function truncateTelegramInboundFailureStream(text) {
65
+ return truncateTelegramInboundText(text.trimEnd(), MAX_INBOUND_HANDLER_FAILURE_STREAM_LENGTH);
66
+ }
67
+ function normalizeInboundProgrammaticHandlerText(result) {
68
+ const text = typeof result === "string" ? result : result?.text;
69
+ const normalized = text?.trim();
70
+ return normalized ? truncateTelegramInboundOutput(normalized) : undefined;
71
+ }
72
+ function normalizeStringList(value) {
73
+ if (Array.isArray(value)) {
74
+ return value
75
+ .map(String)
76
+ .map((item) => item.trim())
77
+ .filter(Boolean);
78
+ }
79
+ if (typeof value === "string" && value.trim())
80
+ return [value.trim()];
81
+ return [];
82
+ }
83
+ function matchesWildcard(pattern, value) {
84
+ if (!value)
85
+ return false;
86
+ const normalizedPattern = pattern.toLowerCase();
87
+ const normalizedValue = value.toLowerCase();
88
+ if (normalizedPattern === "*")
89
+ return true;
90
+ const escaped = normalizedPattern
91
+ .replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
92
+ .replace(/\\\*/g, ".*");
93
+ return new RegExp(`^${escaped}$`).test(normalizedValue);
94
+ }
95
+ function handlerHasSelectors(handler) {
96
+ return (normalizeStringList(handler.match).length > 0 ||
97
+ normalizeStringList(handler.mime).length > 0 ||
98
+ normalizeStringList(handler.type).length > 0);
99
+ }
100
+ function matchesAnyPattern(patterns, value) {
101
+ return patterns.some((pattern) => matchesWildcard(pattern, value));
102
+ }
103
+ function isTelegramTextMimeType(mimeType) {
104
+ return matchesWildcard("text/*", mimeType);
105
+ }
106
+ export function telegramInboundHandlerMatchesFile(handler, file) {
107
+ if (!handlerHasSelectors(handler))
108
+ return true;
109
+ const matchPatterns = normalizeStringList(handler.match);
110
+ const mimePatterns = normalizeStringList(handler.mime);
111
+ const typePatterns = normalizeStringList(handler.type);
112
+ if (matchesAnyPattern(mimePatterns, file.mimeType))
113
+ return true;
114
+ if (matchesAnyPattern(typePatterns, file.kind))
115
+ return true;
116
+ if (matchesAnyPattern(matchPatterns, file.mimeType))
117
+ return true;
118
+ return matchesAnyPattern(matchPatterns, file.kind);
119
+ }
120
+ function findTelegramInboundHandlers(handlers, file) {
121
+ if (!Array.isArray(handlers))
122
+ return [];
123
+ return handlers.filter((handler) => !!handler &&
124
+ typeof handler === "object" &&
125
+ telegramInboundHandlerMatchesFile(handler, file));
126
+ }
127
+ function hasInboundFilePlaceholder(value) {
128
+ return /\{file\}/.test(value);
129
+ }
130
+ function getTelegramInboundHandlerTemplateValues(file, text = "") {
131
+ return {
132
+ file: file.path,
133
+ mime: file.mimeType ?? "",
134
+ text,
135
+ type: file.kind ?? "",
136
+ };
137
+ }
138
+ function buildTelegramInboundTemplateInvocation(handler, file, cwd, appendFileIfMissing = true) {
139
+ const values = getTelegramInboundHandlerTemplateValues(file);
140
+ const templateConfig = normalizeCommandTemplateConfig(handler);
141
+ const hadFilePlaceholder = typeof templateConfig.template === "string"
142
+ ? hasInboundFilePlaceholder(templateConfig.template)
143
+ : false;
144
+ const invocation = buildCommandTemplateInvocation(handler, values, cwd, {
145
+ emptyMessage: "Inbound handler template is empty",
146
+ missingLabel: "inbound handler template",
147
+ });
148
+ if (appendFileIfMissing && !hadFilePlaceholder)
149
+ invocation.args.push(file.path);
150
+ return invocation;
151
+ }
152
+ export function buildTelegramInboundHandlerInvocation(handler, file, cwd, appendFileIfMissing = true) {
153
+ const { template } = normalizeCommandTemplateConfig(handler);
154
+ if (!template)
155
+ throw new Error("Inbound handler template is required");
156
+ return buildTelegramInboundTemplateInvocation(handler, file, cwd, appendFileIfMissing);
157
+ }
158
+ function getTelegramInboundHandlerTimeout(handler) {
159
+ return (getCommandTemplateConfiguredTimeout(handler) ??
160
+ DEFAULT_INBOUND_HANDLER_TIMEOUT_MS);
161
+ }
162
+ function getTelegramInboundHandlerKind(handler) {
163
+ if (Array.isArray(handler.template))
164
+ return "composition";
165
+ if (handler.template)
166
+ return "template";
167
+ return "unknown";
168
+ }
169
+ function formatTelegramInboundHandlerFailure(result) {
170
+ const parts = [
171
+ `Inbound handler exited with code ${result.code}${result.killed ? " (killed)" : ""}`,
172
+ ];
173
+ if (result.stderr.trim())
174
+ parts.push(`stderr:\n${truncateTelegramInboundFailureStream(result.stderr)}`);
175
+ if (result.stdout.trim())
176
+ parts.push(`stdout:\n${truncateTelegramInboundFailureStream(result.stdout)}`);
177
+ return parts.join("\n\n");
178
+ }
179
+ function getTelegramInboundHandlerRetryOptions(handler, values, cwd, timeout, deps) {
180
+ if (typeof handler !== "object" || handler.retry === undefined)
181
+ return {};
182
+ const recover = createCommandTemplateRecovery(handler, values, {
183
+ cwd,
184
+ timeout,
185
+ execCommand: deps.execCommand,
186
+ });
187
+ return {
188
+ retry: resolveCommandTemplateNumericField(handler.retry, {}, "retry"),
189
+ ...(recover ? { recover } : {}),
190
+ };
191
+ }
192
+ async function executeTelegramInboundHandlerInvocation(handler, file, cwd, deps, appendFileIfMissing = true, timeout = getTelegramInboundHandlerTimeout(handler), stdin) {
193
+ const invocation = buildTelegramInboundHandlerInvocation(handler, file, cwd, appendFileIfMissing);
194
+ const result = await deps.execCommand(invocation.command, invocation.args, {
195
+ cwd,
196
+ timeout,
197
+ ...getTelegramInboundHandlerRetryOptions(handler, getTelegramInboundHandlerTemplateValues(file), cwd, timeout, deps),
198
+ ...(stdin !== undefined ? { stdin } : {}),
199
+ });
200
+ if (result.code !== 0)
201
+ throw new Error(formatTelegramInboundHandlerFailure(result));
202
+ return truncateTelegramInboundOutput(result.stdout);
203
+ }
204
+ function getTelegramTextHandlerFile() {
205
+ return {
206
+ path: "",
207
+ fileName: "message.txt",
208
+ mimeType: "text/plain",
209
+ kind: "text",
210
+ isImage: false,
211
+ };
212
+ }
213
+ function findTelegramTextHandlers(handlers) {
214
+ if (!Array.isArray(handlers))
215
+ return [];
216
+ const textFile = getTelegramTextHandlerFile();
217
+ return handlers.filter((handler) => !!handler &&
218
+ typeof handler === "object" &&
219
+ handlerHasSelectors(handler) &&
220
+ telegramInboundHandlerMatchesFile(handler, textFile));
221
+ }
222
+ function buildTelegramTextHandlerInvocation(handler, text, cwd) {
223
+ const values = getTelegramInboundHandlerTemplateValues(getTelegramTextHandlerFile(), text);
224
+ const { template } = normalizeCommandTemplateConfig(handler);
225
+ if (!template)
226
+ throw new Error("Text handler template is required");
227
+ return buildCommandTemplateInvocation(handler, values, cwd, {
228
+ emptyMessage: "Text handler template is empty",
229
+ missingLabel: "text handler template",
230
+ });
231
+ }
232
+ async function executeTelegramTextHandlerInvocation(handler, text, cwd, deps, timeout = getTelegramInboundHandlerTimeout(handler)) {
233
+ const invocation = buildTelegramTextHandlerInvocation(handler, text, cwd);
234
+ const result = await deps.execCommand(invocation.command, invocation.args, {
235
+ cwd,
236
+ timeout,
237
+ stdin: text,
238
+ ...getTelegramInboundHandlerRetryOptions(handler, getTelegramInboundHandlerTemplateValues(getTelegramTextHandlerFile(), text), cwd, timeout, deps),
239
+ });
240
+ if (result.code !== 0)
241
+ throw new Error(formatTelegramInboundHandlerFailure(result));
242
+ return truncateTelegramInboundOutput(result.stdout);
243
+ }
244
+ async function executeTelegramTextHandler(handler, text, cwd, deps) {
245
+ const steps = getCommandTemplateCompositionSteps(handler);
246
+ if (steps.length === 0) {
247
+ return (await executeTelegramTextHandlerInvocation(handler, text, cwd, deps)).trim();
248
+ }
249
+ const startedAt = Date.now();
250
+ let output = text;
251
+ for (const [index, step] of steps.entries()) {
252
+ if (!shouldRunCommandTemplateConfig(step, getTelegramInboundHandlerTemplateValues(getTelegramTextHandlerFile(), output)))
253
+ continue;
254
+ try {
255
+ output = await executeTelegramTextHandlerInvocation(step, output, cwd, deps, getCommandTemplateStepTimeout(getTelegramInboundHandlerTimeout(handler), step, index === 0 ? undefined : Date.now() - startedAt));
256
+ }
257
+ catch (error) {
258
+ if (typeof step === "object" && step.failure === "root")
259
+ throw error;
260
+ output = "";
261
+ }
262
+ if (index > 0 && !output)
263
+ output = text;
264
+ }
265
+ return output.trim();
266
+ }
267
+ async function processTelegramTextHandlers(options) {
268
+ if (!options.rawText)
269
+ return options.rawText;
270
+ let text = options.rawText;
271
+ for (const handler of findTelegramTextHandlers(options.handlers)) {
272
+ try {
273
+ // An unresolvable guard fails only this handler, like its command would.
274
+ if (!shouldRunCommandTemplateConfig(handler, getTelegramInboundHandlerTemplateValues(getTelegramTextHandlerFile(), text)))
275
+ continue;
276
+ const output = await executeTelegramTextHandler(handler, text, options.cwd, options);
277
+ if (output)
278
+ text = output;
279
+ }
280
+ catch (error) {
281
+ options.recordRuntimeEvent?.("inbound-text-handler", error, {
282
+ handler: getTelegramInboundHandlerKind(handler),
283
+ });
284
+ }
285
+ }
286
+ for (const handler of getTelegramInboundProgrammaticHandlers("text")) {
287
+ try {
288
+ const output = normalizeInboundProgrammaticHandlerText(await handler({ kind: "text", text, mimeType: "text/plain" }, { cwd: options.cwd }));
289
+ if (output)
290
+ text = output;
291
+ }
292
+ catch (error) {
293
+ options.recordRuntimeEvent?.("inbound-programmatic-handler", error, {
294
+ kind: "text",
295
+ });
296
+ }
297
+ }
298
+ return text;
299
+ }
300
+ function isTelegramVoiceLikeFile(file) {
301
+ return (file.kind === "voice" ||
302
+ file.kind === "audio" ||
303
+ matchesWildcard("audio/*", file.mimeType));
304
+ }
305
+ async function processTelegramFileWithProgrammaticHandlers(file, options) {
306
+ const kind = file.kind || "*";
307
+ for (const handler of getTelegramInboundProgrammaticHandlers(kind)) {
308
+ try {
309
+ const output = normalizeInboundProgrammaticHandlerText(await handler({
310
+ kind,
311
+ file,
312
+ mimeType: file.mimeType,
313
+ }, { cwd: options.cwd }));
314
+ if (output)
315
+ return output;
316
+ }
317
+ catch (error) {
318
+ options.recordRuntimeEvent?.("inbound-programmatic-handler", error, {
319
+ fileName: file.fileName || basename(file.path),
320
+ kind,
321
+ });
322
+ }
323
+ }
324
+ return undefined;
325
+ }
326
+ async function transcribeTelegramVoiceFileWithProviders(file, options) {
327
+ if (!isTelegramVoiceLikeFile(file))
328
+ return undefined;
329
+ for (const provider of getTelegramVoiceTranscriptionProviders()) {
330
+ try {
331
+ const result = await provider(file, {});
332
+ const text = typeof result === "string" ? result : result?.text;
333
+ if (text?.trim())
334
+ return truncateTelegramInboundOutput(text.trim());
335
+ }
336
+ catch (error) {
337
+ options.recordRuntimeEvent?.("voice-transcription-provider", error, {
338
+ fileName: file.fileName || basename(file.path),
339
+ });
340
+ }
341
+ }
342
+ return undefined;
343
+ }
344
+ async function readBuiltInTelegramTextAttachment(file) {
345
+ if (!isTelegramTextMimeType(file.mimeType))
346
+ return undefined;
347
+ const content = await readFile(file.path, "utf8");
348
+ const normalized = content.trim();
349
+ if (!normalized ||
350
+ Buffer.byteLength(normalized, "utf8") > BUILT_IN_TEXT_ATTACHMENT_MAX_BYTES) {
351
+ return undefined;
352
+ }
353
+ const name = file.fileName || basename(file.path);
354
+ return truncateTelegramInboundOutput(`[${name}]\n${normalized}`);
355
+ }
356
+ async function executeTelegramInboundHandler(handler, file, cwd, deps) {
357
+ const steps = getCommandTemplateCompositionSteps(handler);
358
+ if (steps.length === 0) {
359
+ const output = await executeTelegramInboundHandlerInvocation(handler, file, cwd, deps);
360
+ return output.trim();
361
+ }
362
+ const startedAt = Date.now();
363
+ const values = getTelegramInboundHandlerTemplateValues(file);
364
+ let output = "";
365
+ let started = false;
366
+ for (const step of steps) {
367
+ if (!shouldRunCommandTemplateConfig(step, values))
368
+ continue;
369
+ const first = !started;
370
+ started = true;
371
+ try {
372
+ output = await executeTelegramInboundHandlerInvocation(step, file, cwd, deps, false, getCommandTemplateStepTimeout(getTelegramInboundHandlerTimeout(handler), step, first ? undefined : Date.now() - startedAt), first ? undefined : output);
373
+ }
374
+ catch (error) {
375
+ if (typeof step === "object" && step.failure === "root")
376
+ throw error;
377
+ output = "";
378
+ }
379
+ }
380
+ return output.trim();
381
+ }
382
+ export async function processTelegramInboundHandlers(options) {
383
+ const rawText = await processTelegramTextHandlers({
384
+ rawText: options.rawText,
385
+ handlers: options.handlers,
386
+ cwd: options.cwd,
387
+ execCommand: options.execCommand,
388
+ recordRuntimeEvent: options.recordRuntimeEvent,
389
+ });
390
+ const promptFiles = [...options.files];
391
+ const outputs = [];
392
+ for (const file of options.files) {
393
+ let hasOutput = false;
394
+ const handlers = findTelegramInboundHandlers(options.handlers, file);
395
+ for (const handler of handlers) {
396
+ try {
397
+ if (!shouldRunCommandTemplateConfig(handler, getTelegramInboundHandlerTemplateValues(file)))
398
+ continue;
399
+ const output = await executeTelegramInboundHandler(handler, file, options.cwd, options);
400
+ if (output) {
401
+ outputs.push({ file, output, handler });
402
+ hasOutput = true;
403
+ }
404
+ break;
405
+ }
406
+ catch (error) {
407
+ options.recordRuntimeEvent?.("inbound-handler", error, {
408
+ fileName: file.fileName || basename(file.path),
409
+ handler: getTelegramInboundHandlerKind(handler),
410
+ });
411
+ }
412
+ }
413
+ if (!hasOutput) {
414
+ try {
415
+ const output = await processTelegramFileWithProgrammaticHandlers(file, {
416
+ cwd: options.cwd,
417
+ recordRuntimeEvent: options.recordRuntimeEvent,
418
+ });
419
+ if (output) {
420
+ outputs.push({ file, output, handler: { type: "programmatic" } });
421
+ hasOutput = true;
422
+ }
423
+ }
424
+ catch (error) {
425
+ options.recordRuntimeEvent?.("inbound-programmatic-handler", error, {
426
+ fileName: file.fileName || basename(file.path),
427
+ });
428
+ }
429
+ }
430
+ if (!hasOutput) {
431
+ try {
432
+ const output = await transcribeTelegramVoiceFileWithProviders(file, {
433
+ recordRuntimeEvent: options.recordRuntimeEvent,
434
+ });
435
+ if (output) {
436
+ outputs.push({ file, output, handler: { type: "voice-provider" } });
437
+ hasOutput = true;
438
+ }
439
+ }
440
+ catch (error) {
441
+ options.recordRuntimeEvent?.("voice-transcription-provider", error, {
442
+ fileName: file.fileName || basename(file.path),
443
+ });
444
+ }
445
+ }
446
+ if (!hasOutput) {
447
+ try {
448
+ const output = await readBuiltInTelegramTextAttachment(file);
449
+ if (output)
450
+ outputs.push({ file, output, handler: { type: "text" } });
451
+ }
452
+ catch (error) {
453
+ options.recordRuntimeEvent?.("inbound-handler", error, {
454
+ fileName: file.fileName || basename(file.path),
455
+ handler: "built-in-text",
456
+ });
457
+ }
458
+ }
459
+ }
460
+ return {
461
+ rawText,
462
+ promptFiles,
463
+ handlerOutputs: outputs.map((output) => output.output),
464
+ handledFiles: outputs,
465
+ };
466
+ }
467
+ export function createTelegramInboundHandlerRuntime(deps) {
468
+ return {
469
+ process: (files, rawText, ctx) => processTelegramInboundHandlers({
470
+ files,
471
+ rawText,
472
+ handlers: deps.getHandlers(),
473
+ cwd: deps.getCwd(ctx),
474
+ execCommand: deps.execCommand,
475
+ recordRuntimeEvent: deps.recordRuntimeEvent,
476
+ }),
477
+ };
478
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Telegram package entrypoint
3
+ * Zones: telegram, pi agent, public API
4
+ * Re-exports the extension composition root without owning runtime wiring.
5
+ */
6
+ export { default } from "./lib/extension.ts";
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Telegram package entrypoint
3
+ * Zones: telegram, pi agent, public API
4
+ * Re-exports the extension composition root without owning runtime wiring.
5
+ */
6
+ export { default } from "./extension.js";
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Telegram inline-keyboard structural contracts
3
+ * Zones: telegram ui, shared structure
4
+ * Owns the shared Bot API reply-markup shape while feature domains own their button semantics
5
+ */
6
+ export type TelegramInlineKeyboardButtonStyle = "danger" | "success" | "primary";
7
+ export type TelegramInlineKeyboardButton = {
8
+ text: string;
9
+ style?: TelegramInlineKeyboardButtonStyle;
10
+ } & ({
11
+ callback_data: string;
12
+ disabled?: never;
13
+ } | {
14
+ disabled: Record<string, never>;
15
+ callback_data?: never;
16
+ });
17
+ export interface TelegramInlineKeyboardMarkup {
18
+ inline_keyboard: TelegramInlineKeyboardButton[][];
19
+ }
20
+ export declare function assertTelegramCallbackData(callbackData: string, context?: string): string;
21
+ export declare function assertTelegramInlineKeyboardCallbackData(replyMarkup: unknown, context?: string): void;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Telegram inline-keyboard structural contracts
3
+ * Zones: telegram ui, shared structure
4
+ * Owns the shared Bot API reply-markup shape while feature domains own their button semantics
5
+ */
6
+ const TELEGRAM_CALLBACK_DATA_MAX_BYTES = 64;
7
+ function getTelegramCallbackDataByteLength(value) {
8
+ return new TextEncoder().encode(value).byteLength;
9
+ }
10
+ export function assertTelegramCallbackData(callbackData, context = "Telegram callback_data") {
11
+ const byteLength = getTelegramCallbackDataByteLength(callbackData);
12
+ if (byteLength > TELEGRAM_CALLBACK_DATA_MAX_BYTES) {
13
+ throw new Error(`${context} exceeds ${TELEGRAM_CALLBACK_DATA_MAX_BYTES} bytes (${byteLength}). Use a shorter action/payload or store state behind a compact key.`);
14
+ }
15
+ return callbackData;
16
+ }
17
+ export function assertTelegramInlineKeyboardCallbackData(replyMarkup, context = "Telegram inline keyboard callback_data") {
18
+ if (!replyMarkup || typeof replyMarkup !== "object")
19
+ return;
20
+ const keyboard = replyMarkup
21
+ .inline_keyboard;
22
+ if (!Array.isArray(keyboard))
23
+ return;
24
+ for (const row of keyboard) {
25
+ if (!Array.isArray(row))
26
+ continue;
27
+ for (const button of row) {
28
+ if (!button || typeof button !== "object")
29
+ continue;
30
+ const callbackData = button
31
+ .callback_data;
32
+ if (typeof callbackData !== "string")
33
+ continue;
34
+ assertTelegramCallbackData(callbackData, context);
35
+ }
36
+ }
37
+ }