pi-harness-runtime 1.1.397 → 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 (624) 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/notification-events.ts +6 -6
  21. package/harness/project-detector/detector.ts +1 -2
  22. package/harness/repair-engine.ts +2 -4
  23. package/harness/service-diagnostics.ts +1 -1
  24. package/harness/skill-sync.ts +3 -3
  25. package/index.ts +276 -55
  26. package/mirror.ts +1 -1
  27. package/package.json +5 -3
  28. package/packages/a2a-adapter/dist/discovery.d.ts.map +1 -1
  29. package/packages/a2a-adapter/dist/discovery.js +0 -1
  30. package/packages/a2a-adapter/dist/discovery.js.map +1 -1
  31. package/packages/a2a-adapter/package.json +1 -1
  32. package/packages/a2a-adapter/src/discovery.ts +0 -1
  33. package/packages/agent-policy/package.json +1 -1
  34. package/packages/architecture-generator/package.json +1 -1
  35. package/packages/auth/dist/index.d.ts +9 -0
  36. package/packages/auth/dist/index.d.ts.map +1 -0
  37. package/packages/auth/dist/index.js +9 -0
  38. package/packages/auth/dist/index.js.map +1 -0
  39. package/packages/auth/package.json +1 -1
  40. package/packages/auth/src/index.ts +9 -0
  41. package/packages/autonomous-refactor/package.json +1 -1
  42. package/packages/autonomous-runtime/package.json +1 -1
  43. package/packages/cache-strategy/package.json +1 -1
  44. package/packages/capability-registry/package.json +1 -1
  45. package/packages/checkpoint/package.json +1 -1
  46. package/packages/cli-plugin-sdk/package.json +1 -1
  47. package/packages/clipboard/package.json +1 -1
  48. package/packages/clipboard-plugin/package.json +1 -1
  49. package/packages/code-generation/package.json +1 -1
  50. package/packages/code-review/package.json +1 -1
  51. package/packages/codex-adapter/package.json +1 -1
  52. package/packages/codex-watcher/package.json +1 -1
  53. package/packages/config-capture/dist/index.d.ts +52 -0
  54. package/packages/config-capture/dist/index.d.ts.map +1 -0
  55. package/packages/config-capture/dist/index.js +261 -0
  56. package/packages/config-capture/dist/index.js.map +1 -0
  57. package/packages/config-capture/package.json +1 -1
  58. package/packages/connection-runtime/package.json +1 -1
  59. package/packages/context-compiler/package.json +1 -1
  60. package/packages/context-discovery/package.json +1 -1
  61. package/packages/context-manager/package.json +1 -1
  62. package/packages/contracts/package.json +1 -1
  63. package/packages/cookie-sanitizer/package.json +1 -1
  64. package/packages/cost-optimizer/package.json +1 -1
  65. package/packages/dependency-analyzer/package.json +1 -1
  66. package/packages/django-plugin/package.json +1 -1
  67. package/packages/doc-generator/package.json +1 -1
  68. package/packages/durable-review/package.json +1 -1
  69. package/packages/e2e-tester/package.json +1 -1
  70. package/packages/evaluation-engine/package.json +1 -1
  71. package/packages/evaluation-runner/package.json +1 -1
  72. package/packages/event-bus/package.json +1 -1
  73. package/packages/event-sink/package.json +1 -1
  74. package/packages/event-store/package.json +1 -1
  75. package/packages/experience-replay/package.json +1 -1
  76. package/packages/feedback-collector/package.json +1 -1
  77. package/packages/file-copy-helper/dist/extension.d.ts +15 -0
  78. package/packages/file-copy-helper/dist/extension.d.ts.map +1 -0
  79. package/packages/file-copy-helper/dist/extension.debug.d.ts +15 -0
  80. package/packages/file-copy-helper/dist/extension.debug.d.ts.map +1 -0
  81. package/packages/file-copy-helper/dist/extension.debug.js +215 -0
  82. package/packages/file-copy-helper/dist/extension.debug.js.map +1 -0
  83. package/packages/file-copy-helper/dist/extension.js +222 -0
  84. package/packages/file-copy-helper/dist/extension.js.map +1 -0
  85. package/packages/file-copy-helper/dist/index.d.ts +3 -0
  86. package/packages/file-copy-helper/dist/index.d.ts.map +1 -0
  87. package/packages/file-copy-helper/dist/index.js +3 -0
  88. package/packages/file-copy-helper/dist/index.js.map +1 -0
  89. package/packages/file-copy-helper/dist/intent-detector.d.ts +21 -0
  90. package/packages/file-copy-helper/dist/intent-detector.d.ts.map +1 -0
  91. package/packages/file-copy-helper/dist/intent-detector.js +348 -0
  92. package/packages/file-copy-helper/dist/intent-detector.js.map +1 -0
  93. package/packages/file-copy-helper/package.json +1 -1
  94. package/packages/framework-detector/package.json +1 -1
  95. package/packages/framework-plugin-sdk/package.json +1 -1
  96. package/packages/frappe-plugin/package.json +1 -1
  97. package/packages/generic-web-plugin/package.json +1 -1
  98. package/packages/health-monitor/package.json +1 -1
  99. package/packages/intent-analyzer/package.json +1 -1
  100. package/packages/jev-judge/dist/auto-continue.d.ts +161 -2
  101. package/packages/jev-judge/dist/auto-continue.d.ts.map +1 -1
  102. package/packages/jev-judge/dist/auto-continue.js +267 -22
  103. package/packages/jev-judge/dist/auto-continue.js.map +1 -1
  104. package/packages/jev-judge/dist/index.d.ts +2 -0
  105. package/packages/jev-judge/dist/index.d.ts.map +1 -1
  106. package/packages/jev-judge/dist/index.js +2 -0
  107. package/packages/jev-judge/dist/index.js.map +1 -1
  108. package/packages/jev-judge/dist/question-risk.d.ts +50 -0
  109. package/packages/jev-judge/dist/question-risk.d.ts.map +1 -0
  110. package/packages/jev-judge/dist/question-risk.js +100 -0
  111. package/packages/jev-judge/dist/question-risk.js.map +1 -0
  112. package/packages/jev-judge/package.json +1 -1
  113. package/packages/jev-judge/src/auto-continue.ts +426 -29
  114. package/packages/jev-judge/src/index.ts +4 -0
  115. package/packages/jev-judge/src/question-risk.ts +151 -0
  116. package/packages/jev-judge/tests/auto-continue-context.test.ts +221 -0
  117. package/packages/jev-judge/tests/outcome-application.test.ts +132 -0
  118. package/packages/jev-judge/tests/question-risk.test.ts +116 -0
  119. package/packages/knowledge-graph/package.json +1 -1
  120. package/packages/knowledge-retrieval/package.json +1 -1
  121. package/packages/laravel-plugin/package.json +1 -1
  122. package/packages/learning-engine/package.json +1 -1
  123. package/packages/logging/README.md +36 -3
  124. package/packages/logging/dist/config.d.ts +7 -0
  125. package/packages/logging/dist/config.d.ts.map +1 -1
  126. package/packages/logging/dist/config.js +14 -0
  127. package/packages/logging/dist/config.js.map +1 -1
  128. package/packages/logging/dist/incidents/schema.d.ts +111 -0
  129. package/packages/logging/dist/incidents/schema.d.ts.map +1 -0
  130. package/packages/logging/dist/incidents/schema.js +0 -0
  131. package/packages/logging/dist/incidents/schema.js.map +1 -0
  132. package/packages/logging/dist/index.d.ts +2 -0
  133. package/packages/logging/dist/index.d.ts.map +1 -1
  134. package/packages/logging/dist/index.js +2 -0
  135. package/packages/logging/dist/index.js.map +1 -1
  136. package/packages/logging/dist/server/http.d.ts +4 -3
  137. package/packages/logging/dist/server/http.d.ts.map +1 -1
  138. package/packages/logging/dist/server/http.js +35 -3
  139. package/packages/logging/dist/server/http.js.map +1 -1
  140. package/packages/logging/dist/server/incident-qdrant.d.ts +83 -0
  141. package/packages/logging/dist/server/incident-qdrant.d.ts.map +1 -0
  142. package/packages/logging/dist/server/incident-qdrant.js +129 -0
  143. package/packages/logging/dist/server/incident-qdrant.js.map +1 -0
  144. package/packages/logging/dist/server/incident-store.d.ts +76 -0
  145. package/packages/logging/dist/server/incident-store.d.ts.map +1 -0
  146. package/packages/logging/dist/server/incident-store.js +157 -0
  147. package/packages/logging/dist/server/incident-store.js.map +1 -0
  148. package/packages/logging/dist/server/index.d.ts +4 -0
  149. package/packages/logging/dist/server/index.d.ts.map +1 -1
  150. package/packages/logging/dist/server/index.js +2 -0
  151. package/packages/logging/dist/server/index.js.map +1 -1
  152. package/packages/logging/dist/server/service.d.ts +33 -0
  153. package/packages/logging/dist/server/service.d.ts.map +1 -1
  154. package/packages/logging/dist/server/service.js +63 -0
  155. package/packages/logging/dist/server/service.js.map +1 -1
  156. package/packages/logging/dist/shipper.d.ts +74 -3
  157. package/packages/logging/dist/shipper.d.ts.map +1 -1
  158. package/packages/logging/dist/shipper.js +88 -5
  159. package/packages/logging/dist/shipper.js.map +1 -1
  160. package/packages/logging/dist/singleton.d.ts.map +1 -1
  161. package/packages/logging/dist/singleton.js +1 -0
  162. package/packages/logging/dist/singleton.js.map +1 -1
  163. package/packages/logging/package.json +1 -1
  164. package/packages/logging/src/config.ts +22 -0
  165. package/packages/logging/src/incidents/schema.ts +0 -0
  166. package/packages/logging/src/index.ts +17 -0
  167. package/packages/logging/src/server/http.ts +42 -3
  168. package/packages/logging/src/server/incident-qdrant.ts +177 -0
  169. package/packages/logging/src/server/incident-store.ts +192 -0
  170. package/packages/logging/src/server/index.ts +21 -0
  171. package/packages/logging/src/server/service.ts +79 -0
  172. package/packages/logging/src/shipper.ts +120 -5
  173. package/packages/logging/src/singleton.ts +1 -0
  174. package/packages/logging/test/fanout.test.ts +186 -0
  175. package/packages/logging/test/incidents.test.ts +404 -0
  176. package/packages/mcp-adapter/package.json +1 -1
  177. package/packages/memory-engine/package.json +1 -1
  178. package/packages/milestone-manager/package.json +1 -1
  179. package/packages/model-registry/package.json +1 -1
  180. package/packages/nextjs-plugin/package.json +1 -1
  181. package/packages/notification/dist/adapters/detail-format.d.ts +42 -0
  182. package/packages/notification/dist/adapters/detail-format.d.ts.map +1 -0
  183. package/packages/notification/dist/adapters/detail-format.js +94 -0
  184. package/packages/notification/dist/adapters/detail-format.js.map +1 -0
  185. package/packages/notification/dist/adapters/email-adapter.d.ts.map +1 -1
  186. package/packages/notification/dist/adapters/email-adapter.js +3 -2
  187. package/packages/notification/dist/adapters/email-adapter.js.map +1 -1
  188. package/packages/notification/dist/adapters/line-adapter.d.ts +33 -0
  189. package/packages/notification/dist/adapters/line-adapter.d.ts.map +1 -1
  190. package/packages/notification/dist/adapters/line-adapter.js +87 -9
  191. package/packages/notification/dist/adapters/line-adapter.js.map +1 -1
  192. package/packages/notification/dist/adapters/ntfy-adapter.d.ts.map +1 -1
  193. package/packages/notification/dist/adapters/ntfy-adapter.js +3 -2
  194. package/packages/notification/dist/adapters/ntfy-adapter.js.map +1 -1
  195. package/packages/notification/dist/adapters/telegram-adapter.d.ts +14 -0
  196. package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +1 -1
  197. package/packages/notification/dist/adapters/telegram-adapter.js +89 -69
  198. package/packages/notification/dist/adapters/telegram-adapter.js.map +1 -1
  199. package/packages/notification/dist/notification-center.d.ts.map +1 -1
  200. package/packages/notification/dist/notification-center.js +60 -7
  201. package/packages/notification/dist/notification-center.js.map +1 -1
  202. package/packages/notification/dist/pending-question.d.ts +69 -2
  203. package/packages/notification/dist/pending-question.d.ts.map +1 -1
  204. package/packages/notification/dist/pending-question.js +88 -2
  205. package/packages/notification/dist/pending-question.js.map +1 -1
  206. package/packages/notification/dist/types.d.ts +21 -0
  207. package/packages/notification/dist/types.d.ts.map +1 -1
  208. package/packages/notification/package.json +1 -1
  209. package/packages/notification/src/adapters/detail-format.ts +114 -0
  210. package/packages/notification/src/adapters/email-adapter.ts +3 -2
  211. package/packages/notification/src/adapters/line-adapter.ts +97 -9
  212. package/packages/notification/src/adapters/ntfy-adapter.ts +3 -2
  213. package/packages/notification/src/adapters/telegram-adapter.ts +98 -76
  214. package/packages/notification/src/notification-center.ts +66 -8
  215. package/packages/notification/src/pending-question.ts +160 -8
  216. package/packages/notification/src/types.ts +21 -0
  217. package/packages/notification/test/approval-payload.test.ts +269 -0
  218. package/packages/notification/test/detail-format.test.ts +106 -0
  219. package/packages/notification/test/pending-question-lifecycle.test.ts +195 -0
  220. package/packages/observability/package.json +1 -1
  221. package/packages/okf-indexer/dist/index.d.ts +9 -0
  222. package/packages/okf-indexer/dist/index.d.ts.map +1 -0
  223. package/packages/okf-indexer/dist/index.js +9 -0
  224. package/packages/okf-indexer/dist/index.js.map +1 -0
  225. package/packages/okf-indexer/package.json +1 -1
  226. package/packages/okf-indexer/src/index.ts +9 -0
  227. package/packages/paperclip-integration/package.json +1 -1
  228. package/packages/performance-optimizer/package.json +1 -1
  229. package/packages/permission-mode/package.json +1 -1
  230. package/packages/privilege-broker/package.json +1 -1
  231. package/packages/project-analyzer/package.json +1 -1
  232. package/packages/project-bootstrap/package.json +1 -1
  233. package/packages/projection-engine/package.json +1 -1
  234. package/packages/prompt-compiler/package.json +1 -1
  235. package/packages/prompt-versioning/package.json +1 -1
  236. package/packages/provider-adapter-sdk/package.json +1 -1
  237. package/packages/provider-router/dist/provider-router.d.ts.map +1 -1
  238. package/packages/provider-router/dist/types.d.ts +2 -2
  239. package/packages/provider-router/dist/types.d.ts.map +1 -1
  240. package/packages/provider-router/dist/types.js +1 -1
  241. package/packages/provider-router/package.json +1 -1
  242. package/packages/provider-router/src/types.ts +2 -2
  243. package/packages/provider-selector/package.json +1 -1
  244. package/packages/providers/package.json +1 -1
  245. package/packages/qdrant-skills/package.json +1 -1
  246. package/packages/quota-manager/package.json +1 -1
  247. package/packages/rate-limiter/package.json +1 -1
  248. package/packages/react-vite-plugin/package.json +1 -1
  249. package/packages/relay/package.json +1 -1
  250. package/packages/release-manager/package.json +1 -1
  251. package/packages/requirement-compiler/package.json +1 -1
  252. package/packages/runtime/package.json +1 -1
  253. package/packages/scheduler/dist/index.d.ts +9 -0
  254. package/packages/scheduler/dist/index.d.ts.map +1 -0
  255. package/packages/scheduler/dist/index.js +9 -0
  256. package/packages/scheduler/dist/index.js.map +1 -0
  257. package/packages/scheduler/dist/scheduler.d.ts +17 -0
  258. package/packages/scheduler/dist/scheduler.d.ts.map +1 -0
  259. package/packages/scheduler/dist/scheduler.js +41 -0
  260. package/packages/scheduler/dist/scheduler.js.map +1 -0
  261. package/packages/scheduler/package.json +1 -1
  262. package/packages/scheduler/src/index.ts +9 -0
  263. package/packages/scheduler-adapter/package.json +1 -1
  264. package/packages/session/package.json +1 -1
  265. package/packages/session-api/package.json +1 -1
  266. package/packages/session-export/package.json +1 -1
  267. package/packages/shared-context/dist/index.d.ts +7 -0
  268. package/packages/shared-context/dist/index.d.ts.map +1 -0
  269. package/packages/shared-context/dist/index.js +7 -0
  270. package/packages/shared-context/dist/index.js.map +1 -0
  271. package/packages/shared-context/dist/shared-context.d.ts +12 -0
  272. package/packages/shared-context/dist/shared-context.d.ts.map +1 -0
  273. package/packages/shared-context/dist/shared-context.js +39 -0
  274. package/packages/shared-context/dist/shared-context.js.map +1 -0
  275. package/packages/shared-context/package.json +1 -1
  276. package/packages/skill-mcp-client/dist/client.d.ts +56 -0
  277. package/packages/skill-mcp-client/dist/client.d.ts.map +1 -0
  278. package/packages/skill-mcp-client/dist/client.js +101 -0
  279. package/packages/skill-mcp-client/dist/client.js.map +1 -0
  280. package/packages/skill-mcp-client/dist/errors.d.ts +44 -0
  281. package/packages/skill-mcp-client/dist/errors.d.ts.map +1 -0
  282. package/packages/skill-mcp-client/dist/errors.js +68 -0
  283. package/packages/skill-mcp-client/dist/errors.js.map +1 -0
  284. package/packages/skill-mcp-client/dist/index.d.ts +9 -0
  285. package/packages/skill-mcp-client/dist/index.d.ts.map +1 -0
  286. package/packages/skill-mcp-client/dist/index.js +9 -0
  287. package/packages/skill-mcp-client/dist/index.js.map +1 -0
  288. package/packages/skill-mcp-client/dist/types.d.ts +106 -0
  289. package/packages/skill-mcp-client/dist/types.d.ts.map +1 -0
  290. package/packages/skill-mcp-client/dist/types.js +14 -0
  291. package/packages/skill-mcp-client/dist/types.js.map +1 -0
  292. package/packages/skill-mcp-client/package.json +1 -1
  293. package/packages/skill-registry/package.json +1 -1
  294. package/packages/skills/package.json +1 -5
  295. package/packages/sprint-planner/package.json +1 -1
  296. package/packages/subscription-engine/package.json +1 -1
  297. package/packages/task-compiler/package.json +1 -1
  298. package/packages/telegram/package.json +1 -1
  299. package/packages/telegram/src/agent-messages.d.ts +28 -0
  300. package/packages/telegram/src/agent-messages.js +90 -0
  301. package/packages/telegram/src/bindings.d.ts +296 -0
  302. package/packages/telegram/src/bindings.js +1086 -0
  303. package/packages/telegram/src/bus.d.ts +759 -0
  304. package/packages/telegram/src/bus.js +2732 -0
  305. package/packages/telegram/src/commands.d.ts +761 -0
  306. package/packages/telegram/src/commands.js +2622 -0
  307. package/packages/telegram/src/config.d.ts +222 -0
  308. package/packages/telegram/src/config.js +844 -0
  309. package/packages/telegram/src/delivery.d.ts +161 -0
  310. package/packages/telegram/src/delivery.js +550 -0
  311. package/packages/telegram/src/extension.d.ts +7 -0
  312. package/packages/telegram/src/extension.js +2444 -0
  313. package/packages/telegram/src/inbound.d.ts +94 -0
  314. package/packages/telegram/src/inbound.js +478 -0
  315. package/packages/telegram/src/index.d.ts +6 -0
  316. package/packages/telegram/src/index.js +6 -0
  317. package/packages/telegram/src/keyboard.d.ts +21 -0
  318. package/packages/telegram/src/keyboard.js +37 -0
  319. package/packages/telegram/src/lifecycle.d.ts +210 -0
  320. package/packages/telegram/src/lifecycle.js +538 -0
  321. package/packages/telegram/src/pi.d.ts +76 -0
  322. package/packages/telegram/src/pi.js +130 -0
  323. package/packages/telegram/src/polling.d.ts +332 -0
  324. package/packages/telegram/src/polling.js +1219 -0
  325. package/packages/telegram/src/replies.d.ts +210 -0
  326. package/packages/telegram/src/replies.js +752 -0
  327. package/packages/telegram/src/routing.d.ts +388 -0
  328. package/packages/telegram/src/routing.js +7886 -0
  329. package/packages/telegram/src/runtime.d.ts +159 -0
  330. package/packages/telegram/src/runtime.js +351 -0
  331. package/packages/telegram/src/telegram-api.d.ts +564 -0
  332. package/packages/telegram/src/telegram-api.js +1332 -0
  333. package/packages/telegram/src/turns.d.ts +108 -0
  334. package/packages/telegram/src/turns.js +482 -0
  335. package/packages/telegram/src/updates.d.ts +1545 -0
  336. package/packages/telegram/src/updates.js +6420 -0
  337. package/packages/tencentdb-memory/package.json +1 -1
  338. package/packages/tencentdb-sync/package.json +1 -1
  339. package/packages/test-data-generator/package.json +1 -1
  340. package/packages/test-generator/package.json +1 -1
  341. package/packages/todo-bd-sync/dist/detector.d.ts +54 -0
  342. package/packages/todo-bd-sync/dist/detector.d.ts.map +1 -0
  343. package/packages/todo-bd-sync/dist/detector.js +132 -0
  344. package/packages/todo-bd-sync/dist/detector.js.map +1 -0
  345. package/packages/todo-bd-sync/dist/extension.d.ts +30 -0
  346. package/packages/todo-bd-sync/dist/extension.d.ts.map +1 -0
  347. package/packages/todo-bd-sync/dist/extension.js +35 -0
  348. package/packages/todo-bd-sync/dist/extension.js.map +1 -0
  349. package/packages/todo-bd-sync/dist/index.d.ts +87 -0
  350. package/packages/todo-bd-sync/dist/index.d.ts.map +1 -0
  351. package/packages/todo-bd-sync/dist/index.js +296 -0
  352. package/packages/todo-bd-sync/dist/index.js.map +1 -0
  353. package/packages/todo-bd-sync/dist/sync.d.ts +72 -0
  354. package/packages/todo-bd-sync/dist/sync.d.ts.map +1 -0
  355. package/packages/todo-bd-sync/dist/sync.js +290 -0
  356. package/packages/todo-bd-sync/dist/sync.js.map +1 -0
  357. package/packages/todo-bd-sync/dist/task-analyzer.d.ts +49 -0
  358. package/packages/todo-bd-sync/dist/task-analyzer.d.ts.map +1 -0
  359. package/packages/todo-bd-sync/dist/task-analyzer.js +240 -0
  360. package/packages/todo-bd-sync/dist/task-analyzer.js.map +1 -0
  361. package/packages/todo-bd-sync/dist/todo-reminder.d.ts +126 -0
  362. package/packages/todo-bd-sync/dist/todo-reminder.d.ts.map +1 -0
  363. package/packages/todo-bd-sync/dist/todo-reminder.js +329 -0
  364. package/packages/todo-bd-sync/dist/todo-reminder.js.map +1 -0
  365. package/packages/todo-bd-sync/dist/types.d.ts +65 -0
  366. package/packages/todo-bd-sync/dist/types.d.ts.map +1 -0
  367. package/packages/todo-bd-sync/dist/types.js +67 -0
  368. package/packages/todo-bd-sync/dist/types.js.map +1 -0
  369. package/packages/todo-bd-sync/package.json +1 -1
  370. package/packages/token-estimation/dist/index.d.ts +94 -0
  371. package/packages/token-estimation/dist/index.d.ts.map +1 -0
  372. package/packages/token-estimation/dist/index.js +115 -0
  373. package/packages/token-estimation/dist/index.js.map +1 -0
  374. package/packages/token-estimation/package.json +1 -1
  375. package/packages/token-optimizer/package.json +1 -1
  376. package/packages/trajectory/package.json +1 -1
  377. package/packages/tui/package.json +1 -1
  378. package/packages/types/dist/ai-providers.d.ts +36 -0
  379. package/packages/types/dist/ai-providers.d.ts.map +1 -0
  380. package/packages/types/dist/ai-providers.js +66 -0
  381. package/packages/types/dist/ai-providers.js.map +1 -0
  382. package/packages/types/dist/index.d.ts +12 -0
  383. package/packages/types/dist/index.d.ts.map +1 -0
  384. package/packages/types/dist/index.js +12 -0
  385. package/packages/types/dist/index.js.map +1 -0
  386. package/packages/types/package.json +5 -5
  387. package/packages/types/src/index.ts +12 -0
  388. package/packages/voice-api/package.json +1 -1
  389. package/packages/webmcp-tester/package.json +1 -1
  390. package/packages/wiki/package.json +1 -1
  391. package/packages/workflow-events/package.json +1 -1
  392. package/packages/workspace-scanner/package.json +1 -1
  393. package/packages/worktree/package.json +1 -1
  394. package/packages/worktree/worktree.ts +1 -1
  395. package/packages/write-review/package.json +1 -1
  396. package/renderer.ts +1 -1
  397. package/scripts/build-packages.ts +162 -0
  398. package/scripts/relay-client.ts +2 -2
  399. package/scripts/typecheck-packages.mjs +3 -3
  400. package/scripts/unified-webhook-server.ts +22 -10
  401. package/scripts/verify-package-contents.ts +345 -0
  402. package/scripts/ws-server.ts +1 -1
  403. package/tracker.ts +1 -1
  404. package/harness/browser-scrapers/base-browser-scraper.d.ts +0 -91
  405. package/harness/browser-scrapers/chrome-profile-manager.d.ts +0 -80
  406. package/harness/browser-scrapers/codex-browser-scraper.d.ts +0 -60
  407. package/harness/browser-scrapers/index.d.ts +0 -29
  408. package/harness/browser-scrapers/zai-browser-scraper.d.ts +0 -79
  409. package/harness/e2e/browser-scrapers/base-browser-scraper.d.ts +0 -92
  410. package/harness/e2e/browser-scrapers/chrome-profile-manager.d.ts +0 -81
  411. package/harness/e2e/browser-scrapers/codex-browser-scraper.d.ts +0 -61
  412. package/harness/e2e/browser-scrapers/index.d.ts +0 -30
  413. package/harness/e2e/browser-scrapers/zai-browser-scraper.d.ts +0 -80
  414. package/harness/langchain/agents.d.ts +0 -143
  415. package/harness/langchain/agents.test.d.ts +0 -2
  416. package/harness/langchain/checkpointer.d.ts +0 -48
  417. package/harness/langchain/checkpointer.test.d.ts +0 -8
  418. package/harness/langchain/cron-cli.d.ts +0 -12
  419. package/harness/langchain/daemon.d.ts +0 -161
  420. package/harness/langchain/daemon.test.d.ts +0 -11
  421. package/harness/langchain/file-tools.d.ts +0 -97
  422. package/harness/langchain/graph.d.ts +0 -706
  423. package/harness/langchain/model-router.d.ts +0 -63
  424. package/harness/langchain/model-router.test.d.ts +0 -2
  425. package/harness/langchain/models.d.ts +0 -72
  426. package/harness/langchain/ping-pong-middleware.d.ts +0 -28
  427. package/harness/langchain/ping-pong-middleware.test.d.ts +0 -2
  428. package/harness/langchain/run.d.ts +0 -15
  429. package/harness/langchain/scoreboard.test.d.ts +0 -13
  430. package/harness/langchain/status-line.d.ts +0 -91
  431. package/harness/langchain/status-line.test.d.ts +0 -8
  432. package/harness/langchain/surge.d.ts +0 -111
  433. package/harness/langchain/surge.test.d.ts +0 -10
  434. package/harness/langchain/widget.d.ts +0 -105
  435. package/harness/langchain/widget.test.d.ts +0 -8
  436. package/packages/autonomous-runtime/dist/worker.d.ts +0 -63
  437. package/packages/autonomous-runtime/dist/worker.js +0 -133
  438. package/packages/capability-registry/src/types.d.ts +0 -47
  439. package/packages/clipboard/dist/clipboard.d.ts +0 -11
  440. package/packages/clipboard/dist/clipboard.js +0 -40
  441. package/packages/clipboard/dist/index.d.ts +0 -2
  442. package/packages/clipboard/dist/index.js +0 -2
  443. package/packages/clipboard/dist/types.d.ts +0 -13
  444. package/packages/clipboard/dist/types.js +0 -5
  445. package/packages/context-discovery/dist/discover.d.ts +0 -3
  446. package/packages/context-discovery/dist/discover.js +0 -42
  447. package/packages/context-discovery/dist/discovery.d.ts +0 -28
  448. package/packages/context-discovery/dist/discovery.js +0 -21
  449. package/packages/context-discovery/dist/index.d.ts +0 -3
  450. package/packages/context-discovery/dist/index.js +0 -2
  451. package/packages/context-discovery/dist/types.d.ts +0 -16
  452. package/packages/context-discovery/dist/types.js +0 -2
  453. package/packages/event-bus/dist/bus.d.ts +0 -15
  454. package/packages/event-bus/dist/bus.js +0 -90
  455. package/packages/event-bus/dist/index.d.ts +0 -4
  456. package/packages/event-bus/dist/index.js +0 -3
  457. package/packages/event-bus/dist/test/bus.test.js +0 -52
  458. package/packages/event-bus/dist/types.d.ts +0 -27
  459. package/packages/event-bus/dist/types.js +0 -10
  460. package/packages/event-store/dist/index.d.ts +0 -3
  461. package/packages/event-store/dist/index.js +0 -2
  462. package/packages/event-store/dist/store.d.ts +0 -15
  463. package/packages/event-store/dist/store.js +0 -131
  464. package/packages/event-store/dist/test/store.test.js +0 -57
  465. package/packages/event-store/dist/types.d.ts +0 -48
  466. package/packages/event-store/dist/types.js +0 -5
  467. package/packages/event-store/src/types.d.ts +0 -48
  468. package/packages/file-copy-helper/dist/src/extension.js +0 -186
  469. package/packages/model-registry/src/types.d.ts +0 -63
  470. package/packages/notification/dist/src/adapters/email-adapter.d.ts +0 -17
  471. package/packages/notification/dist/src/adapters/email-adapter.d.ts.map +0 -1
  472. package/packages/notification/dist/src/adapters/email-adapter.js +0 -89
  473. package/packages/notification/dist/src/adapters/email-adapter.js.map +0 -1
  474. package/packages/notification/dist/src/adapters/line-adapter.d.ts +0 -17
  475. package/packages/notification/dist/src/adapters/line-adapter.d.ts.map +0 -1
  476. package/packages/notification/dist/src/adapters/line-adapter.js +0 -99
  477. package/packages/notification/dist/src/adapters/line-adapter.js.map +0 -1
  478. package/packages/notification/dist/src/adapters/ntfy-adapter.d.ts +0 -17
  479. package/packages/notification/dist/src/adapters/ntfy-adapter.d.ts.map +0 -1
  480. package/packages/notification/dist/src/adapters/ntfy-adapter.js +0 -84
  481. package/packages/notification/dist/src/adapters/ntfy-adapter.js.map +0 -1
  482. package/packages/notification/dist/src/adapters/telegram-adapter.d.ts +0 -56
  483. package/packages/notification/dist/src/adapters/telegram-adapter.d.ts.map +0 -1
  484. package/packages/notification/dist/src/adapters/telegram-adapter.js +0 -251
  485. package/packages/notification/dist/src/adapters/telegram-adapter.js.map +0 -1
  486. package/packages/notification/dist/src/adapters/webhook-adapter.d.ts +0 -15
  487. package/packages/notification/dist/src/adapters/webhook-adapter.d.ts.map +0 -1
  488. package/packages/notification/dist/src/adapters/webhook-adapter.js +0 -64
  489. package/packages/notification/dist/src/adapters/webhook-adapter.js.map +0 -1
  490. package/packages/notification/dist/src/base-adapter.d.ts +0 -36
  491. package/packages/notification/dist/src/base-adapter.d.ts.map +0 -1
  492. package/packages/notification/dist/src/base-adapter.js +0 -39
  493. package/packages/notification/dist/src/base-adapter.js.map +0 -1
  494. package/packages/notification/dist/src/index.d.ts +0 -12
  495. package/packages/notification/dist/src/index.d.ts.map +0 -1
  496. package/packages/notification/dist/src/index.js +0 -12
  497. package/packages/notification/dist/src/index.js.map +0 -1
  498. package/packages/notification/dist/src/notification-center.d.ts +0 -89
  499. package/packages/notification/dist/src/notification-center.d.ts.map +0 -1
  500. package/packages/notification/dist/src/notification-center.js +0 -356
  501. package/packages/notification/dist/src/notification-center.js.map +0 -1
  502. package/packages/notification/dist/src/notification-policy.d.ts +0 -66
  503. package/packages/notification/dist/src/notification-policy.d.ts.map +0 -1
  504. package/packages/notification/dist/src/notification-policy.js +0 -153
  505. package/packages/notification/dist/src/notification-policy.js.map +0 -1
  506. package/packages/notification/dist/src/telegram-webhook-handler.d.ts +0 -86
  507. package/packages/notification/dist/src/telegram-webhook-handler.d.ts.map +0 -1
  508. package/packages/notification/dist/src/telegram-webhook-handler.js +0 -149
  509. package/packages/notification/dist/src/telegram-webhook-handler.js.map +0 -1
  510. package/packages/notification/dist/src/types.d.ts +0 -106
  511. package/packages/notification/dist/src/types.d.ts.map +0 -1
  512. package/packages/notification/dist/src/types.js +0 -7
  513. package/packages/notification/dist/src/types.js.map +0 -1
  514. package/packages/projection-engine/dist/engine.d.ts +0 -61
  515. package/packages/projection-engine/dist/engine.js +0 -76
  516. package/packages/projection-engine/dist/index.d.ts +0 -2
  517. package/packages/projection-engine/dist/index.js +0 -2
  518. package/packages/projection-engine/dist/project.d.ts +0 -3
  519. package/packages/projection-engine/dist/project.js +0 -24
  520. package/packages/projection-engine/dist/types.d.ts +0 -55
  521. package/packages/projection-engine/dist/types.js +0 -5
  522. package/packages/projection-engine/src/types.d.ts +0 -55
  523. package/packages/provider-adapter-sdk/dist/src/builder.d.ts +0 -140
  524. package/packages/provider-adapter-sdk/dist/src/builder.d.ts.map +0 -1
  525. package/packages/provider-adapter-sdk/dist/src/builder.js +0 -332
  526. package/packages/provider-adapter-sdk/dist/src/builder.js.map +0 -1
  527. package/packages/provider-adapter-sdk/dist/src/errors.d.ts +0 -71
  528. package/packages/provider-adapter-sdk/dist/src/errors.d.ts.map +0 -1
  529. package/packages/provider-adapter-sdk/dist/src/errors.js +0 -111
  530. package/packages/provider-adapter-sdk/dist/src/errors.js.map +0 -1
  531. package/packages/provider-adapter-sdk/dist/src/index.d.ts +0 -15
  532. package/packages/provider-adapter-sdk/dist/src/index.d.ts.map +0 -1
  533. package/packages/provider-adapter-sdk/dist/src/index.js +0 -19
  534. package/packages/provider-adapter-sdk/dist/src/index.js.map +0 -1
  535. package/packages/provider-adapter-sdk/dist/src/registry.d.ts +0 -108
  536. package/packages/provider-adapter-sdk/dist/src/registry.d.ts.map +0 -1
  537. package/packages/provider-adapter-sdk/dist/src/registry.js +0 -301
  538. package/packages/provider-adapter-sdk/dist/src/registry.js.map +0 -1
  539. package/packages/provider-adapter-sdk/dist/src/tester.d.ts +0 -71
  540. package/packages/provider-adapter-sdk/dist/src/tester.d.ts.map +0 -1
  541. package/packages/provider-adapter-sdk/dist/src/tester.js +0 -392
  542. package/packages/provider-adapter-sdk/dist/src/tester.js.map +0 -1
  543. package/packages/provider-adapter-sdk/dist/src/types.d.ts +0 -182
  544. package/packages/provider-adapter-sdk/dist/src/types.d.ts.map +0 -1
  545. package/packages/provider-adapter-sdk/dist/src/types.js +0 -11
  546. package/packages/provider-adapter-sdk/dist/src/types.js.map +0 -1
  547. package/packages/provider-router/dist/capability-registry/src/types.d.ts +0 -47
  548. package/packages/provider-router/dist/capability-registry/src/types.d.ts.map +0 -1
  549. package/packages/provider-router/dist/capability-registry/src/types.js +0 -10
  550. package/packages/provider-router/dist/capability-registry/src/types.js.map +0 -1
  551. package/packages/provider-router/dist/provider-router/src/index.d.ts +0 -23
  552. package/packages/provider-router/dist/provider-router/src/index.d.ts.map +0 -1
  553. package/packages/provider-router/dist/provider-router/src/index.js +0 -25
  554. package/packages/provider-router/dist/provider-router/src/index.js.map +0 -1
  555. package/packages/provider-router/dist/provider-router/src/policy.d.ts +0 -10
  556. package/packages/provider-router/dist/provider-router/src/policy.d.ts.map +0 -1
  557. package/packages/provider-router/dist/provider-router/src/policy.js +0 -45
  558. package/packages/provider-router/dist/provider-router/src/policy.js.map +0 -1
  559. package/packages/provider-router/dist/provider-router/src/provider-router.d.ts +0 -56
  560. package/packages/provider-router/dist/provider-router/src/provider-router.d.ts.map +0 -1
  561. package/packages/provider-router/dist/provider-router/src/provider-router.js +0 -222
  562. package/packages/provider-router/dist/provider-router/src/provider-router.js.map +0 -1
  563. package/packages/provider-router/dist/provider-router/src/strategies.d.ts +0 -19
  564. package/packages/provider-router/dist/provider-router/src/strategies.d.ts.map +0 -1
  565. package/packages/provider-router/dist/provider-router/src/strategies.js +0 -110
  566. package/packages/provider-router/dist/provider-router/src/strategies.js.map +0 -1
  567. package/packages/provider-router/dist/provider-router/src/types.d.ts +0 -91
  568. package/packages/provider-router/dist/provider-router/src/types.d.ts.map +0 -1
  569. package/packages/provider-router/dist/provider-router/src/types.js +0 -10
  570. package/packages/provider-router/dist/provider-router/src/types.js.map +0 -1
  571. package/packages/provider-router/dist/src/index.d.ts +0 -23
  572. package/packages/provider-router/dist/src/index.d.ts.map +0 -1
  573. package/packages/provider-router/dist/src/index.js +0 -25
  574. package/packages/provider-router/dist/src/index.js.map +0 -1
  575. package/packages/provider-router/dist/src/policy.d.ts +0 -10
  576. package/packages/provider-router/dist/src/policy.d.ts.map +0 -1
  577. package/packages/provider-router/dist/src/policy.js +0 -45
  578. package/packages/provider-router/dist/src/policy.js.map +0 -1
  579. package/packages/provider-router/dist/src/provider-router.d.ts +0 -56
  580. package/packages/provider-router/dist/src/provider-router.d.ts.map +0 -1
  581. package/packages/provider-router/dist/src/provider-router.js +0 -222
  582. package/packages/provider-router/dist/src/provider-router.js.map +0 -1
  583. package/packages/provider-router/dist/src/strategies.d.ts +0 -19
  584. package/packages/provider-router/dist/src/strategies.d.ts.map +0 -1
  585. package/packages/provider-router/dist/src/strategies.js +0 -110
  586. package/packages/provider-router/dist/src/strategies.js.map +0 -1
  587. package/packages/provider-router/dist/src/types.d.ts +0 -91
  588. package/packages/provider-router/dist/src/types.d.ts.map +0 -1
  589. package/packages/provider-router/dist/src/types.js +0 -10
  590. package/packages/provider-router/dist/src/types.js.map +0 -1
  591. package/packages/provider-router/dist/types/src/runtime-types.d.ts +0 -412
  592. package/packages/provider-router/dist/types/src/runtime-types.d.ts.map +0 -1
  593. package/packages/provider-router/dist/types/src/runtime-types.js +0 -2
  594. package/packages/provider-router/dist/types/src/runtime-types.js.map +0 -1
  595. package/packages/session-api/dist/api.d.ts +0 -83
  596. package/packages/session-api/dist/api.js +0 -35
  597. package/packages/session-api/dist/index.d.ts +0 -2
  598. package/packages/session-api/dist/index.js +0 -2
  599. package/packages/session-api/dist/types.d.ts +0 -22
  600. package/packages/session-api/dist/types.js +0 -5
  601. package/packages/session-export/dist/exporter.d.ts +0 -28
  602. package/packages/session-export/dist/exporter.js +0 -38
  603. package/packages/session-export/dist/index.d.ts +0 -2
  604. package/packages/session-export/dist/index.js +0 -2
  605. package/packages/session-export/dist/types.d.ts +0 -20
  606. package/packages/session-export/dist/types.js +0 -5
  607. package/packages/subscription-engine/dist/engine.d.ts +0 -13
  608. package/packages/subscription-engine/dist/engine.js +0 -40
  609. package/packages/subscription-engine/dist/index.d.ts +0 -2
  610. package/packages/subscription-engine/dist/index.js +0 -2
  611. package/packages/subscription-engine/dist/subscriptions.d.ts +0 -19
  612. package/packages/subscription-engine/dist/subscriptions.js +0 -32
  613. package/packages/subscription-engine/dist/types.d.ts +0 -24
  614. package/packages/subscription-engine/dist/types.js +0 -5
  615. package/packages/trajectory/test/store.test.d.ts +0 -2
  616. package/packages/workflow-events/dist/events.d.ts +0 -38
  617. package/packages/workflow-events/dist/events.js +0 -46
  618. package/packages/workflow-events/dist/index.d.ts +0 -2
  619. package/packages/workflow-events/dist/index.js +0 -2
  620. package/packages/workflow-events/dist/pipeline.d.ts +0 -21
  621. package/packages/workflow-events/dist/pipeline.js +0 -27
  622. package/packages/workflow-events/dist/types.d.ts +0 -110
  623. package/packages/workflow-events/dist/types.js +0 -5
  624. package/packages/workflow-events/src/types.d.ts +0 -110
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Shared rendering of the notification detail fields.
3
+ *
4
+ * `details.error` is reserved for events that represent an actual failure. A
5
+ * resume trigger ("provider-overload", "post-compact") or a quota detail is a
6
+ * reason, not an error, and must never be rendered under the "Error:" footer.
7
+ *
8
+ * Every adapter renders the detail fields through this module so the labels
9
+ * stay consistent across Telegram, LINE, ntfy and email.
10
+ */
11
+ /** Events whose `details.error` really is an error. */
12
+ export const ERROR_EVENTS = new Set([
13
+ "TaskFailed",
14
+ "E2EFailed",
15
+ "Error",
16
+ ]);
17
+ export function isErrorEvent(event) {
18
+ return ERROR_EVENTS.has(event);
19
+ }
20
+ /**
21
+ * Human wording for the known resume triggers.
22
+ *
23
+ * The raw code stays in the structured logs; the user facing message gets a
24
+ * wording a human can read.
25
+ */
26
+ const TRIGGER_LABELS = {
27
+ "post-compact": "Context compacted",
28
+ "context-compacted": "Context compacted",
29
+ "provider-overload": "Provider overload",
30
+ "quota-reset": "Quota reset",
31
+ "quota-paused": "Quota paused",
32
+ "output-limit": "Output limit reached",
33
+ "session-resume": "Session resumed",
34
+ "auto-resume": "Session auto-resume",
35
+ };
36
+ /**
37
+ * Turn a trigger code into a human wording.
38
+ *
39
+ * "provider-overload" becomes "Provider overload". An unknown code keeps its
40
+ * words, only the separators and the capitalisation are cleaned up.
41
+ */
42
+ export function formatTriggerValue(value) {
43
+ const trimmed = value.trim();
44
+ if (!trimmed)
45
+ return "";
46
+ const known = TRIGGER_LABELS[trimmed.toLowerCase()];
47
+ if (known)
48
+ return known;
49
+ const words = trimmed.replace(/[_-]+/g, " ").replace(/\s+/g, " ").trim();
50
+ if (!words)
51
+ return trimmed;
52
+ return words.charAt(0).toUpperCase() + words.slice(1);
53
+ }
54
+ function readString(value) {
55
+ if (typeof value !== "string")
56
+ return undefined;
57
+ const trimmed = value.trim();
58
+ return trimmed.length > 0 ? trimmed : undefined;
59
+ }
60
+ /**
61
+ * Render the detail fields of a payload as footer lines.
62
+ *
63
+ * - `details.trigger` becomes "Trigger: ..." in a human wording.
64
+ * - `details.reason` becomes "Reason: ..." for every event.
65
+ * - `details.error` becomes "Error: ..." for the error events only.
66
+ * - A legacy `details.error` on a non-error event becomes "Reason: ..." so the
67
+ * information survives when a producer still uses the old field.
68
+ */
69
+ export function formatDetailLines(details, event) {
70
+ const lines = [];
71
+ const trigger = readString(details?.trigger);
72
+ const reason = readString(details?.reason);
73
+ const error = readString(details?.error);
74
+ if (trigger) {
75
+ lines.push({ label: "Trigger", value: formatTriggerValue(trigger) });
76
+ }
77
+ if (reason) {
78
+ lines.push({ label: "Reason", value: reason });
79
+ }
80
+ if (error) {
81
+ lines.push({ label: isErrorEvent(event) ? "Error" : "Reason", value: error });
82
+ }
83
+ return lines;
84
+ }
85
+ /**
86
+ * The same lines as a plain text block, one per line.
87
+ * An empty string when there is nothing to render.
88
+ */
89
+ export function formatDetailText(details, event) {
90
+ return formatDetailLines(details, event)
91
+ .map((line) => `${line.label}: ${line.value}`)
92
+ .join("\n");
93
+ }
94
+ //# sourceMappingURL=detail-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detail-format.js","sourceRoot":"","sources":["../../src/adapters/detail-format.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"email-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/email-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA2BxD,qBAAa,YAAa,SAAQ,kBAAkB;IACnD,QAAQ,CAAC,EAAE,WAAW;IACtB,QAAQ,CAAC,IAAI,WAAW;IAExB,YAAY,MAAM,EAAE,WAAW,EAE9B;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAWnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0BpE;IAED,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,QAAQ;CAiBhB"}
1
+ {"version":3,"file":"email-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/email-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA4BxD,qBAAa,YAAa,SAAQ,kBAAkB;IACnD,QAAQ,CAAC,EAAE,WAAW;IACtB,QAAQ,CAAC,IAAI,WAAW;IAExB,YAAY,MAAM,EAAE,WAAW,EAE9B;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAWnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0BpE;IAED,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,QAAQ;CAiBhB"}
@@ -4,6 +4,7 @@
4
4
  * Sends notifications via SMTP.
5
5
  */
6
6
  import { BaseChannelAdapter } from "../base-adapter.js";
7
+ import { formatDetailLines } from "./detail-format.js";
7
8
  import { logInfo } from "../file-logger.js";
8
9
  // Simple SMTP client using built-in net module
9
10
  async function sendSmtpEmail(host, port, user, password, from, to, subject, body, tls = false) {
@@ -64,8 +65,8 @@ export class EmailAdapter extends BaseChannelAdapter {
64
65
  if (payload.details?.jobId) {
65
66
  lines.push(`Job ID: ${payload.details.jobId}`);
66
67
  }
67
- if (payload.details?.error) {
68
- lines.push("", `Error: ${payload.details.error}`);
68
+ for (const detail of formatDetailLines(payload.details, payload.event)) {
69
+ lines.push("", `${detail.label}: ${detail.value}`);
69
70
  }
70
71
  return lines.join("\n");
71
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"email-adapter.js","sourceRoot":"","sources":["../../src/adapters/email-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email-adapter.js","sourceRoot":"","sources":["../../src/adapters/email-adapter.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,20 @@
5
5
  */
6
6
  import type { NotificationPayload, NotificationResult, LineConfig } from "../types.js";
7
7
  import { BaseChannelAdapter } from "../base-adapter.js";
8
+ /**
9
+ * LINE limits the template fields. The complete question does not fit in a
10
+ * template, so it travels as a text message and the template only carries the
11
+ * prompt and the request ID.
12
+ */
13
+ export declare const LINE_TEMPLATE_TEXT_LIMIT = 200;
14
+ export declare const LINE_TEMPLATE_TITLE_LIMIT = 40;
15
+ export declare const LINE_ACTION_LABEL_LIMIT = 20;
16
+ /** LINE accepts at most 100 characters of postback data. */
17
+ export declare const LINE_POSTBACK_DATA_LIMIT = 100;
18
+ /** LINE accepts at most 4 actions in one template. */
19
+ export declare const LINE_MAX_ACTIONS = 4;
20
+ /** A LINE text message accepts up to 5000 characters. */
21
+ export declare const LINE_TEXT_MESSAGE_LIMIT = 4500;
8
22
  /**
9
23
  * The endpoint that validates a channel access token.
10
24
  *
@@ -50,6 +64,25 @@ export declare class LineAdapter extends BaseChannelAdapter {
50
64
  constructor(config: LineConfig);
51
65
  initialize(): Promise<boolean>;
52
66
  send(payload: NotificationPayload): Promise<NotificationResult>;
67
+ /**
68
+ * Build the LINE messages of a payload.
69
+ *
70
+ * Without actions it is one text message. With actions the complete
71
+ * question travels as a text message (a LINE text message holds far more
72
+ * than a template) and a template carries the Yes/No postback actions.
73
+ * Both messages carry the canonical request ID, so the user can tell
74
+ * which request an action belongs to.
75
+ */
76
+ private buildMessages;
77
+ /**
78
+ * Split a long text into LINE sized text messages.
79
+ */
80
+ private chunkText;
81
+ /**
82
+ * The button label without its emoji. LINE counts the emoji in the 20
83
+ * character label limit.
84
+ */
85
+ private formatActionLabel;
53
86
  private formatMessage;
54
87
  private getEmoji;
55
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"line-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/line-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,oCAAoC,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACZ,MAAM,CAmBR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAarE;AAeD,qBAAa,WAAY,SAAQ,kBAAkB;IAClD,QAAQ,CAAC,EAAE,UAAU;IACrB,QAAQ,CAAC,IAAI,UAAU;IAEvB,YAAY,MAAM,EAAE,UAAU,EAE7B;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CA4CnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2DpE;IAED,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,QAAQ;CAiBhB"}
1
+ {"version":3,"file":"line-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/line-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EAEV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,4DAA4D;AAC5D,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,yDAAyD;AACzD,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,oCAAoC,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACZ,MAAM,CAmBR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAarE;AAeD,qBAAa,WAAY,SAAQ,kBAAkB;IAClD,QAAQ,CAAC,EAAE,UAAU;IACrB,QAAQ,CAAC,IAAI,UAAU;IAEvB,YAAY,MAAM,EAAE,UAAU,EAE7B;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CA4CnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsDpE;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAwCrB;;OAEG;IACH,OAAO,CAAC,SAAS;IAejB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,QAAQ;CAiBhB"}
@@ -4,6 +4,21 @@
4
4
  * Sends notifications via LINE Messaging API.
5
5
  */
6
6
  import { BaseChannelAdapter } from "../base-adapter.js";
7
+ import { formatDetailLines } from "./detail-format.js";
8
+ /**
9
+ * LINE limits the template fields. The complete question does not fit in a
10
+ * template, so it travels as a text message and the template only carries the
11
+ * prompt and the request ID.
12
+ */
13
+ export const LINE_TEMPLATE_TEXT_LIMIT = 200;
14
+ export const LINE_TEMPLATE_TITLE_LIMIT = 40;
15
+ export const LINE_ACTION_LABEL_LIMIT = 20;
16
+ /** LINE accepts at most 100 characters of postback data. */
17
+ export const LINE_POSTBACK_DATA_LIMIT = 100;
18
+ /** LINE accepts at most 4 actions in one template. */
19
+ export const LINE_MAX_ACTIONS = 4;
20
+ /** A LINE text message accepts up to 5000 characters. */
21
+ export const LINE_TEXT_MESSAGE_LIMIT = 4500;
7
22
  /**
8
23
  * The endpoint that validates a channel access token.
9
24
  *
@@ -133,7 +148,7 @@ export class LineAdapter extends BaseChannelAdapter {
133
148
  async send(payload) {
134
149
  try {
135
150
  const cfg = this.config.config;
136
- const message = this.formatMessage(payload);
151
+ const messages = this.buildMessages(payload);
137
152
  const response = await fetch("https://api.line.me/v2/bot/message/push", {
138
153
  method: "POST",
139
154
  headers: {
@@ -142,12 +157,7 @@ export class LineAdapter extends BaseChannelAdapter {
142
157
  },
143
158
  body: JSON.stringify({
144
159
  to: cfg.userId,
145
- messages: [
146
- {
147
- type: "text",
148
- text: message,
149
- },
150
- ],
160
+ messages,
151
161
  }),
152
162
  });
153
163
  if (!response.ok) {
@@ -179,6 +189,74 @@ export class LineAdapter extends BaseChannelAdapter {
179
189
  };
180
190
  }
181
191
  }
192
+ /**
193
+ * Build the LINE messages of a payload.
194
+ *
195
+ * Without actions it is one text message. With actions the complete
196
+ * question travels as a text message (a LINE text message holds far more
197
+ * than a template) and a template carries the Yes/No postback actions.
198
+ * Both messages carry the canonical request ID, so the user can tell
199
+ * which request an action belongs to.
200
+ */
201
+ buildMessages(payload) {
202
+ const buttons = payload.details?._actionButtons ?? [];
203
+ const text = this.formatMessage(payload);
204
+ if (buttons.length === 0) {
205
+ return [{ type: "text", text }];
206
+ }
207
+ const requestId = (typeof payload.questionId === "string" && payload.questionId) ||
208
+ (typeof payload.details?.questionId === "string" ? payload.details.questionId : "") ||
209
+ (typeof payload.details?.jobId === "string" ? payload.details.jobId : "");
210
+ const prompt = "Approve this request?";
211
+ const templateText = requestId ? `${prompt}\nRequest: ${requestId}` : prompt;
212
+ const actions = buttons.slice(0, LINE_MAX_ACTIONS).map((button) => ({
213
+ type: "postback",
214
+ label: this.formatActionLabel(button.text),
215
+ data: button.callbackData.slice(0, LINE_POSTBACK_DATA_LIMIT),
216
+ }));
217
+ const messages = this.chunkText(text).map((part) => ({
218
+ type: "text",
219
+ text: part,
220
+ }));
221
+ messages.push({
222
+ type: "template",
223
+ altText: prompt,
224
+ template: {
225
+ type: "buttons",
226
+ title: prompt.slice(0, LINE_TEMPLATE_TITLE_LIMIT),
227
+ text: templateText.slice(0, LINE_TEMPLATE_TEXT_LIMIT),
228
+ actions,
229
+ },
230
+ });
231
+ return messages;
232
+ }
233
+ /**
234
+ * Split a long text into LINE sized text messages.
235
+ */
236
+ chunkText(text, limit = LINE_TEXT_MESSAGE_LIMIT) {
237
+ if (text.length <= limit)
238
+ return [text];
239
+ const chunks = [];
240
+ let rest = text;
241
+ while (rest.length > limit) {
242
+ let cut = rest.lastIndexOf("\n", limit);
243
+ if (cut <= 0)
244
+ cut = limit;
245
+ chunks.push(rest.slice(0, cut));
246
+ rest = rest.slice(cut);
247
+ }
248
+ if (rest.length > 0)
249
+ chunks.push(rest);
250
+ return chunks;
251
+ }
252
+ /**
253
+ * The button label without its emoji. LINE counts the emoji in the 20
254
+ * character label limit.
255
+ */
256
+ formatActionLabel(label) {
257
+ const plain = label.replace(/[\u{1F300}-\u{1FAFF}\u{2705}\u{274C}\u{2B50}\u{26A0}\u{1F7E1}]/gu, "").trim();
258
+ return (plain || label).slice(0, LINE_ACTION_LABEL_LIMIT);
259
+ }
182
260
  formatMessage(payload) {
183
261
  const emoji = this.getEmoji(payload.event);
184
262
  const title = `${emoji} ${payload.title}`;
@@ -189,8 +267,8 @@ export class LineAdapter extends BaseChannelAdapter {
189
267
  if (payload.details?.jobId) {
190
268
  lines.push(`Job: ${payload.details.jobId}`);
191
269
  }
192
- if (payload.details?.error) {
193
- lines.push("", `Error: ${payload.details.error}`);
270
+ for (const detail of formatDetailLines(payload.details, payload.event)) {
271
+ lines.push("", `${detail.label}: ${detail.value}`);
194
272
  }
195
273
  return lines.filter(Boolean).join("\n");
196
274
  }
@@ -1 +1 @@
1
- {"version":3,"file":"line-adapter.js","sourceRoot":"","sources":["../../src/adapters/line-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,iCAAiC,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC1C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAClC,MAAc,EACd,IAAY,EACZ,KAAc;IAEd,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;QACpB,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACtC,OAAO,yDAAyD,CAAC;QAClE,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACpB,OAAO,yEAAyE,CAAC;QAClF,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACpB,OAAO,mCAAmC,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;YACnB,OAAO,qBAAqB,CAAC;QAC9B,CAAC;QACD,OAAO,mCAAmC,CAAC;IAC5C,CAAC,CAAC,EAAE,CAAC;IACL,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,OAAO,aAAa,MAAM,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAc;IAC5D,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IACD,uEAAuE;IACvE,eAAe;IACf,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAC;IAC1D,mEAAmE;IACnE,uEAAuE;IACvE,qDAAqD;IACrD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,sCAAsC,EAAE,cAAc,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,QAAQ,CAAC,QAEvB;IACA,IAAI,CAAC;QACJ,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC;AAED,MAAM,OAAO,WAAY,SAAQ,kBAAkB;IACzC,EAAE,GAAG,MAAM,CAAC;IACZ,IAAI,GAAG,MAAM,CAAC;IAEvB,YAAY,MAAkB;QAC7B,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,UAAU;QACf,mEAAmE;QACnE,4CAA4C;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAgC,CAAC;QACzD,MAAM,KAAK,GAAG,GAAG,EAAE,kBAAkB,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,gEAAgE;YAChE,oCAAoC;YACpC,IAAI,CAAC,aAAa,CACjB,qFAAqF,CACrF,CAAC;YACF,OAAO,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACJ,8DAA8D;YAC9D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iBAAiB,EAAE;gBAC/C,OAAO,EAAE;oBACR,aAAa,EAAE,UAAU,KAAK,EAAE;iBAChC;gBACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,qBAAqB,CAAC;aAClD,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAClB,IAAI,CAAC,aAAa,CACjB,mBAAmB,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CACrE,CAAC;gBACF,OAAO,KAAK,CAAC;YACd,CAAC;YACD,4DAA4D;YAC5D,kDAAkD;YAClD,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GACZ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxD,MAAM,QAAQ,GACb,KAAK,YAAY,KAAK;gBACtB,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;YAChE,IAAI,CAAC,aAAa,CACjB,QAAQ;gBACP,CAAC,CAAC,mDAAmD,qBAAqB,IAAI;gBAC9E,CAAC,CAAC,uBAAuB,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAC5D,CAAC;YACF,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAA4B;QACtC,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAoB,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAE5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC3B,yCAAyC,EACzC;gBACC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACR,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,GAAG,CAAC,kBAAkB,EAAE;iBACjD;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACpB,EAAE,EAAE,GAAG,CAAC,MAAM;oBACd,QAAQ,EAAE;wBACT;4BACC,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,OAAO;yBACb;qBACD;iBACD,CAAC;aACF,CACD,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,OAAO;oBACN,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,IAAI,CAAC,EAAE;oBAChB,oDAAoD;oBACpD,mDAAmD;oBACnD,4CAA4C;oBAC5C,KAAK,EAAE,mBAAmB,gBAAgB,CACzC,KAAK,EACL,OAAO,GAAG,CAAC,kBAAkB,KAAK,QAAQ;wBACzC,CAAC,CAAC,GAAG,CAAC,kBAAkB;wBACxB,CAAC,CAAC,SAAS,CACZ,EAAE;iBACH,CAAC;YACH,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAoB,CAAC;YAC7C,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,IAAI,CAAC,EAAE;gBAChB,4DAA4D;gBAC5D,yDAAyD;gBACzD,kCAAkC;gBAClC,KAAK,EAAE,gBAAgB,CACtB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACtD,OAAO,GAAG,CAAC,kBAAkB,KAAK,QAAQ;oBACzC,CAAC,CAAC,GAAG,CAAC,kBAAkB;oBACxB,CAAC,CAAC,SAAS,CACZ;aACD,CAAC;QACH,CAAC;IACF,CAAC;IAEO,aAAa,CAAC,OAA4B;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAE3C,IAAI,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAEO,QAAQ,CAAC,KAAmC;QACnD,MAAM,GAAG,GAA2B;YACnC,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,GAAG;YAClB,UAAU,EAAE,GAAG;YACf,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,IAAI;YACtB,oBAAoB,EAAE,IAAI;YAC1B,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,IAAI;YACvB,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,IAAI;SACX,CAAC;QACF,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAC3B,CAAC;CACD"}
1
+ {"version":3,"file":"line-adapter.js","sourceRoot":"","sources":["../../src/adapters/line-adapter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ntfy-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ntfy-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,qBAAa,WAAY,SAAQ,kBAAkB;IAClD,QAAQ,CAAC,EAAE,UAAU;IACrB,QAAQ,CAAC,IAAI,UAAU;IAEvB,YAAY,MAAM,EAAE,UAAU,EAE7B;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAGnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsCpE;IAED,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,OAAO;CAiBf"}
1
+ {"version":3,"file":"ntfy-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ntfy-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD,qBAAa,WAAY,SAAQ,kBAAkB;IAClD,QAAQ,CAAC,EAAE,UAAU;IACrB,QAAQ,CAAC,IAAI,UAAU;IAEvB,YAAY,MAAM,EAAE,UAAU,EAE7B;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAGnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsCpE;IAED,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,OAAO;CAiBf"}
@@ -4,6 +4,7 @@
4
4
  * Sends notifications via ntfy.sh (or self-hosted ntfy server).
5
5
  */
6
6
  import { BaseChannelAdapter } from "../base-adapter.js";
7
+ import { formatDetailLines } from "./detail-format.js";
7
8
  export class NtfyAdapter extends BaseChannelAdapter {
8
9
  id = "ntfy";
9
10
  type = "ntfy";
@@ -58,8 +59,8 @@ export class NtfyAdapter extends BaseChannelAdapter {
58
59
  if (payload.details?.jobId) {
59
60
  lines.push(`Job: ${payload.details.jobId}`);
60
61
  }
61
- if (payload.details?.error) {
62
- lines.push(`\nError: ${payload.details.error}`);
62
+ for (const detail of formatDetailLines(payload.details, payload.event)) {
63
+ lines.push(`\n${detail.label}: ${detail.value}`);
63
64
  }
64
65
  return lines.join("");
65
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ntfy-adapter.js","sourceRoot":"","sources":["../../src/adapters/ntfy-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ntfy-adapter.js","sourceRoot":"","sources":["../../src/adapters/ntfy-adapter.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,20 @@ import type { NotificationPayload, NotificationResult, TelegramCallbackHandler,
9
9
  */
10
10
  type TelegramMessageHandler = (text: string, chatId: string) => Promise<void>;
11
11
  import { BaseChannelAdapter } from "../base-adapter.js";
12
+ /**
13
+ * The status label of an event.
14
+ *
15
+ * Use ASCII labels per AGENTS.md convention - emoji render inconsistently
16
+ * across terminals and break the alignment of the machine readable output.
17
+ */
18
+ export declare function telegramStatusLabel(event: NotificationPayload["event"]): string;
19
+ /**
20
+ * Render the Telegram message of a payload.
21
+ *
22
+ * Exported so the rendering can be tested without a Telegram connection: the
23
+ * detail footer must never label a resume trigger as an error.
24
+ */
25
+ export declare function buildTelegramMessage(payload: NotificationPayload): string;
12
26
  export declare class TelegramAdapter extends BaseChannelAdapter {
13
27
  readonly id = "telegram";
14
28
  readonly type = "telegram";
@@ -1 +1 @@
1
- {"version":3,"file":"telegram-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/telegram-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telegram-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/telegram-adapter.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ import { logError, logInfo, logWarn } from "../file-logger.js";
12
12
  import { isAuthorizedTelegramSender } from "../telegram-auth.js";
13
13
  import { BaseChannelAdapter } from "../base-adapter.js";
14
14
  import { maskString } from "../mask-secrets.js";
15
+ import { formatDetailLines } from "./detail-format.js";
15
16
  import { filterTelegramContent, getSafeNotificationLog } from "../telegram-content-filter.js";
16
17
  /**
17
18
  * Bounded retry for a rejected getUpdates call (409).
@@ -24,6 +25,86 @@ import { filterTelegramContent, getSafeNotificationLog } from "../telegram-conte
24
25
  const POLL_RETRY_MAX_ATTEMPTS = 5;
25
26
  const POLL_RETRY_BASE_DELAY_MS = 10_000;
26
27
  const POLL_RETRY_MAX_DELAY_MS = 120_000;
28
+ /**
29
+ * The status label of an event.
30
+ *
31
+ * Use ASCII labels per AGENTS.md convention - emoji render inconsistently
32
+ * across terminals and break the alignment of the machine readable output.
33
+ */
34
+ export function telegramStatusLabel(event) {
35
+ const labels = {
36
+ JobStarted: "[START]",
37
+ TaskCompleted: "[OK]",
38
+ TaskFailed: "[FAIL]",
39
+ QuotaPaused: "[PAUSE]",
40
+ ResumeScheduled: "[RESUME]",
41
+ ContextCompacted: "[COMPACT]",
42
+ OutputLimitContinued: "[CONTINUE]",
43
+ E2EFailed: "[TEST]",
44
+ HumanReviewNeeded: "[REVIEW]",
45
+ ReadyForClient: "[DONE]",
46
+ JobCancelled: "[CANCEL]",
47
+ Error: "[ERROR]",
48
+ WaitingForUserInput: "[INPUT]",
49
+ Info: "[INFO]",
50
+ CodexSessionStarted: "[CODEX]",
51
+ CodexPlanDetected: "[PLAN]",
52
+ AssistantResponse: "[TODO]",
53
+ ToolSummary: "[TOOL]",
54
+ };
55
+ return labels[event] ?? "[MSG]";
56
+ }
57
+ /**
58
+ * Render the Telegram message of a payload.
59
+ *
60
+ * Exported so the rendering can be tested without a Telegram connection: the
61
+ * detail footer must never label a resume trigger as an error.
62
+ */
63
+ export function buildTelegramMessage(payload) {
64
+ // Mask all fields before rendering - defense in depth
65
+ const maskedTitle = maskString(payload.title);
66
+ const maskedMessage = maskString(payload.message);
67
+ const taskTitle = payload.details?.taskTitle;
68
+ const jobId = payload.details?.jobId;
69
+ const ordinal = payload.details?.ordinal;
70
+ const planPath = payload.details?.planPath;
71
+ const projectRoot = payload.details?.projectRoot;
72
+ const maskedTaskTitle = typeof taskTitle === "string" ? maskString(taskTitle) : undefined;
73
+ const maskedJobId = typeof jobId === "string" ? maskString(jobId) : undefined;
74
+ const maskedProjectRoot = typeof projectRoot === "string" ? maskString(projectRoot) : undefined;
75
+ const maskedPlanPath = typeof planPath === "string" ? maskString(planPath) : undefined;
76
+ // Get hostname for multi-machine identification
77
+ const hostTag = `[${hostname()}]`;
78
+ const label = telegramStatusLabel(payload.event);
79
+ const title = `${label} ${maskedTitle} ${hostTag}`;
80
+ const lines = [title];
81
+ // Add metadata for Codex events
82
+ if (maskedTaskTitle) {
83
+ lines.push("", `Task: ${maskedTaskTitle}`);
84
+ }
85
+ if (maskedProjectRoot) {
86
+ lines.push(`Root: ${maskedProjectRoot}`);
87
+ }
88
+ if (ordinal !== undefined) {
89
+ lines.push(`Ordinal: ${ordinal}`);
90
+ }
91
+ if (maskedPlanPath) {
92
+ lines.push(`Plan: ${maskedPlanPath}`);
93
+ }
94
+ // Add message content (artifact content flows through message)
95
+ if (maskedMessage) {
96
+ lines.push("", maskedMessage);
97
+ }
98
+ if (maskedJobId) {
99
+ lines.push(`Job: ${maskedJobId}`);
100
+ }
101
+ // Detail fields: "Error:" only for real failures, "Reason:" for a trigger.
102
+ for (const detail of formatDetailLines(payload.details, payload.event)) {
103
+ lines.push("", `${detail.label}: ${maskString(detail.value)}`);
104
+ }
105
+ // Final mask pass on the complete rendered string
106
+ return maskString(lines.filter(Boolean).join("\n"));
107
+ }
27
108
  export class TelegramAdapter extends BaseChannelAdapter {
28
109
  id = "telegram";
29
110
  type = "telegram";
@@ -574,8 +655,12 @@ export class TelegramAdapter extends BaseChannelAdapter {
574
655
  if (cfg.parseMode) {
575
656
  body.parse_mode = cfg.parseMode;
576
657
  }
577
- // Add inline keyboard if enabled and buttons are configured
578
- if (enableInlineKeyboard && (actionButtons?.length ?? 0) > 0) {
658
+ // The keyboard is attached to the final chunk only. The
659
+ // earlier chunks are the continuation of the same
660
+ // question, and a button on every chunk would offer the
661
+ // same action several times.
662
+ const isLastChunk = i === chunks.length - 1;
663
+ if (isLastChunk && enableInlineKeyboard && (actionButtons?.length ?? 0) > 0) {
579
664
  body.reply_markup = this.buildInlineKeyboard(actionButtons);
580
665
  }
581
666
  const response = await fetch(`https://api.telegram.org/bot${cfg.botToken}/sendMessage`, {
@@ -867,50 +952,7 @@ export class TelegramAdapter extends BaseChannelAdapter {
867
952
  }
868
953
  }
869
954
  formatMessage(payload) {
870
- // Mask all fields before rendering - defense in depth
871
- const maskedTitle = maskString(payload.title);
872
- const maskedMessage = maskString(payload.message);
873
- const taskTitle = payload.details?.taskTitle;
874
- const jobId = payload.details?.jobId;
875
- const errorVal = payload.details?.error;
876
- const ordinal = payload.details?.ordinal;
877
- const planPath = payload.details?.planPath;
878
- const projectRoot = payload.details?.projectRoot;
879
- const maskedTaskTitle = typeof taskTitle === "string" ? maskString(taskTitle) : undefined;
880
- const maskedJobId = typeof jobId === "string" ? maskString(jobId) : undefined;
881
- const maskedError = typeof errorVal === "string" ? maskString(errorVal) : undefined;
882
- const maskedProjectRoot = typeof projectRoot === "string" ? maskString(projectRoot) : undefined;
883
- const maskedPlanPath = typeof planPath === "string" ? maskString(planPath) : undefined;
884
- // Get hostname for multi-machine identification
885
- const hostTag = `[${hostname()}]`;
886
- const label = this.getStatusLabel(payload.event);
887
- const title = `${label} ${maskedTitle} ${hostTag}`;
888
- const lines = [title];
889
- // Add metadata for Codex events
890
- if (maskedTaskTitle) {
891
- lines.push("", `Task: ${maskedTaskTitle}`);
892
- }
893
- if (maskedProjectRoot) {
894
- lines.push(`Root: ${maskedProjectRoot}`);
895
- }
896
- if (ordinal !== undefined) {
897
- lines.push(`Ordinal: ${ordinal}`);
898
- }
899
- if (maskedPlanPath) {
900
- lines.push(`Plan: ${maskedPlanPath}`);
901
- }
902
- // Add message content (artifact content flows through message)
903
- if (maskedMessage) {
904
- lines.push("", maskedMessage);
905
- }
906
- if (maskedJobId) {
907
- lines.push(`Job: ${maskedJobId}`);
908
- }
909
- if (maskedError) {
910
- lines.push("", `Error: ${maskedError}`);
911
- }
912
- // Final mask pass on the complete rendered string
913
- return maskString(lines.filter(Boolean).join("\n"));
955
+ return buildTelegramMessage(payload);
914
956
  }
915
957
  /**
916
958
  * Split long messages into ordered chunks for Telegram.
@@ -943,29 +985,7 @@ export class TelegramAdapter extends BaseChannelAdapter {
943
985
  return chunks;
944
986
  }
945
987
  getStatusLabel(event) {
946
- // Use ASCII labels per AGENTS.md convention
947
- // Avoid emoji which renders inconsistently across terminals
948
- const labels = {
949
- JobStarted: "[START]",
950
- TaskCompleted: "[OK]",
951
- TaskFailed: "[FAIL]",
952
- QuotaPaused: "[PAUSE]",
953
- ResumeScheduled: "[RESUME]",
954
- ContextCompacted: "[COMPACT]",
955
- OutputLimitContinued: "[CONTINUE]",
956
- E2EFailed: "[TEST]",
957
- HumanReviewNeeded: "[REVIEW]",
958
- ReadyForClient: "[DONE]",
959
- JobCancelled: "[CANCEL]",
960
- Error: "[ERROR]",
961
- WaitingForUserInput: "[INPUT]",
962
- Info: "[INFO]",
963
- CodexSessionStarted: "[CODEX]",
964
- CodexPlanDetected: "[PLAN]",
965
- AssistantResponse: "[TODO]",
966
- ToolSummary: "[TOOL]",
967
- };
968
- return labels[event] ?? "[MSG]";
988
+ return telegramStatusLabel(event);
969
989
  }
970
990
  }
971
991
  //# sourceMappingURL=telegram-adapter.js.map