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,329 @@
1
+ /**
2
+ * todo-reminder.ts - Inject reminders to continue remaining todos
3
+ *
4
+ * ARCHITECTURE NOTES:
5
+ * - Reminders are DISABLED by default (Phase 1 emergency containment)
6
+ * until proper scoping is implemented.
7
+ * - Triggers are narrowed: only after agent_end, not every bash command.
8
+ * - Deduplication is persistent via file-based hash (survives process restart).
9
+ * - Source is scoped to sync-layer-mapped tasks only.
10
+ *
11
+ * This module does NOT modify the overlay (it works fine).
12
+ * It ONLY injects reminders into the LLM context when todos remain.
13
+ */
14
+ import { execBdCommand } from "./sync.js";
15
+ import { homedir } from "node:os";
16
+ import { join } from "node:path";
17
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
18
+ // ─── Persistent state file ────────────────────────────────────────────────────
19
+ const STATE_DIR = join(homedir(), ".pi-harness-runtime");
20
+ const STATE_FILE = join(STATE_DIR, "todo-reminder-state.json");
21
+ function ensureStateDir() {
22
+ if (!existsSync(STATE_DIR)) {
23
+ mkdirSync(STATE_DIR, { recursive: true });
24
+ }
25
+ }
26
+ function loadState() {
27
+ try {
28
+ if (existsSync(STATE_FILE)) {
29
+ const raw = readFileSync(STATE_FILE, "utf-8");
30
+ return JSON.parse(raw);
31
+ }
32
+ }
33
+ catch {
34
+ // ignore
35
+ }
36
+ return { lastDeliveredHash: "", lastDeliveredAt: 0 };
37
+ }
38
+ function saveState(state) {
39
+ ensureStateDir();
40
+ try {
41
+ writeFileSync(STATE_FILE, JSON.stringify(state, null, 2), "utf-8");
42
+ }
43
+ catch {
44
+ // ignore — best-effort
45
+ }
46
+ }
47
+ /**
48
+ * Generate a stable content hash for deduplication.
49
+ * Uses a simple non-crypto hash — we need dedup, not security.
50
+ */
51
+ function contentHash(tasks) {
52
+ const ids = tasks
53
+ .map((t) => t.id)
54
+ .sort()
55
+ .join("|");
56
+ let hash = 0;
57
+ for (let i = 0; i < ids.length; i++) {
58
+ hash = (hash * 31 + ids.charCodeAt(i)) & 0xffffffff;
59
+ }
60
+ return `t${Math.abs(hash).toString(16)}`;
61
+ }
62
+ /**
63
+ * Default reminder template
64
+ */
65
+ const DEFAULT_REMINDER_TEMPLATE = `
66
+ Remaining todos detected:
67
+ {summary}
68
+
69
+ Please continue with the next pending task or ask the user which to prioritize.
70
+ `.trim();
71
+ /**
72
+ * Default configuration
73
+ * NOTE: autoRemind is FALSE by default — Phase 1 emergency containment.
74
+ * Enable only after proper task scoping is in place.
75
+ */
76
+ const DEFAULT_CONFIG = {
77
+ autoRemind: false, // DISABLED by default — see bug report
78
+ template: DEFAULT_REMINDER_TEMPLATE,
79
+ minPendingTasks: 1,
80
+ deliverAs: "steer", // steer does NOT append to transcript
81
+ verbose: false,
82
+ };
83
+ /**
84
+ * Create a todo reminder instance
85
+ */
86
+ export function createTodoReminder(pi, config = {}) {
87
+ const finalConfig = { ...DEFAULT_CONFIG, ...config };
88
+ return new TodoReminder(pi, finalConfig);
89
+ }
90
+ /**
91
+ * TodoReminder class — injects reminders when todos remain.
92
+ *
93
+ * Key design decisions:
94
+ * 1. DISABLED by default (autoRemind: false) — Phase 1 containment
95
+ * 2. Deduplication is persistent via file-based hash (survives process restart)
96
+ * 3. Narrow trigger: only agent_end, never generic bash
97
+ * 4. deliverAs: "steer" avoids transcript growth
98
+ */
99
+ export class TodoReminder {
100
+ pi;
101
+ config;
102
+ lastReminderAt = 0;
103
+ state;
104
+ constructor(pi, config) {
105
+ this.pi = pi;
106
+ this.config = config;
107
+ // Load persistent state from file — survives process restart
108
+ this.state = loadState();
109
+ }
110
+ /**
111
+ * Start the reminder system
112
+ */
113
+ start() {
114
+ if (!this.config.autoRemind) {
115
+ return;
116
+ }
117
+ // Only trigger on agent_end — not on every bash command.
118
+ // Bash triggers were too broad and caused spam during analysis sessions.
119
+ this.pi.on("agent_end", async () => {
120
+ await this.checkAndRemind();
121
+ });
122
+ }
123
+ /**
124
+ * Check if reminders should be sent and send them
125
+ */
126
+ async checkAndRemind() {
127
+ try {
128
+ const remaining = this.getTrackedTodos();
129
+ if (remaining.length < this.config.minPendingTasks) {
130
+ return;
131
+ }
132
+ // Persistent content-based deduplication — survives process restart.
133
+ // Even if pi restarts, we won't re-deliver the same reminder payload.
134
+ const hash = contentHash(remaining);
135
+ if (hash === this.state.lastDeliveredHash) {
136
+ return;
137
+ }
138
+ await this.sendReminder(remaining);
139
+ this.lastReminderAt = Date.now();
140
+ // Persist the hash so restart doesn't cause replay
141
+ this.state.lastDeliveredHash = hash;
142
+ this.state.lastDeliveredAt = this.lastReminderAt;
143
+ saveState(this.state);
144
+ }
145
+ catch (e) {
146
+ // Non-fatal - reminders are best-effort
147
+ console.warn("[DEBUG todo-reminder] Failed to check todos:", e);
148
+ }
149
+ }
150
+ /**
151
+ * Get remaining (pending/in-progress) todos from bd.
152
+ *
153
+ * NOTE: This returns ALL open bd issues, not just mapped ones.
154
+ * When the mapping registry is integrated, this should be scoped.
155
+ */
156
+ getTrackedTodos() {
157
+ try {
158
+ const output = execBdCommand("bd ready --json");
159
+ const issues = JSON.parse(output);
160
+ return issues
161
+ .filter((issue) => issue.status !== "closed" && issue.status !== "done")
162
+ .map((issue) => ({
163
+ id: issue.id,
164
+ title: issue.title,
165
+ status: issue.status,
166
+ }));
167
+ }
168
+ catch {
169
+ return [];
170
+ }
171
+ }
172
+ /**
173
+ * Format the reminder message
174
+ */
175
+ formatReminder(remaining) {
176
+ const summary = remaining
177
+ .map((t) => `[${t.id}] ${t.title} (${t.status})`)
178
+ .join("\n");
179
+ return this.config.template.replace("{summary}", summary);
180
+ }
181
+ /**
182
+ * Send the reminder to the LLM.
183
+ *
184
+ * FIX: Re-check state before send to prevent stale reminders.
185
+ * If a task was closed after we prepared the reminder, skip delivery.
186
+ */
187
+ async sendReminder(remaining) {
188
+ // CRITICAL FIX: Re-check state immediately before sending.
189
+ // A task may have been closed between checkAndRemind() and now.
190
+ // We must not deliver reminders for already-closed tasks.
191
+ const freshState = this.getTrackedTodos();
192
+ const freshHash = contentHash(freshState);
193
+ const preparedHash = contentHash(remaining);
194
+ // If the fresh state differs from what we prepared, tasks were modified
195
+ if (freshHash !== preparedHash) {
196
+ // Task was closed or modified — suppress stale reminder
197
+ if (this.config.verbose ?? false) {
198
+ console.log("[DEBUG todo-reminder] State changed since check — suppressing reminder");
199
+ }
200
+ return;
201
+ }
202
+ const message = this.formatReminder(remaining);
203
+ try {
204
+ this.pi.sendUserMessage(message, {
205
+ deliverAs: this.config.deliverAs,
206
+ });
207
+ }
208
+ catch (e) {
209
+ console.warn("[DEBUG todo-reminder] Failed to send reminder:", e);
210
+ }
211
+ }
212
+ /**
213
+ * Manually trigger a reminder (for slash command)
214
+ */
215
+ async triggerNow() {
216
+ await this.checkAndRemind();
217
+ }
218
+ /**
219
+ * Get current remaining count
220
+ */
221
+ getRemainingCount() {
222
+ return this.getTrackedTodos().length;
223
+ }
224
+ /**
225
+ * Clear the persistent dedupe state (for testing or manual reset)
226
+ */
227
+ clearState() {
228
+ this.state = { lastDeliveredHash: "", lastDeliveredAt: 0 };
229
+ saveState(this.state);
230
+ }
231
+ }
232
+ /**
233
+ * Create a reminder with custom todos source (for tighter scoping)
234
+ * @param pi - Extension API
235
+ * @param getRemaining - Function that returns remaining todos
236
+ * @param config - Reminder config
237
+ */
238
+ export function createCustomReminder(pi, getRemaining, config = {}) {
239
+ return new CustomTodoReminder(pi, getRemaining, config);
240
+ }
241
+ /**
242
+ * Custom reminder with injectable todos source.
243
+ * Use this to scope reminders to only mapped/created tasks.
244
+ */
245
+ class CustomTodoReminder {
246
+ pi;
247
+ getRemaining;
248
+ config;
249
+ lastReminderAt = 0;
250
+ state;
251
+ constructor(pi, getRemaining, config) {
252
+ this.pi = pi;
253
+ this.getRemaining = getRemaining;
254
+ this.config = { ...DEFAULT_CONFIG, ...config };
255
+ // Load persistent state from file
256
+ this.state = loadState();
257
+ }
258
+ start() {
259
+ if (!this.config.autoRemind)
260
+ return;
261
+ // Only trigger on agent_end — not on every bash command
262
+ this.pi.on("agent_end", async () => {
263
+ await this.checkAndRemind();
264
+ });
265
+ }
266
+ async checkAndRemind() {
267
+ try {
268
+ const remaining = this.getRemaining();
269
+ if (remaining.length < this.config.minPendingTasks)
270
+ return;
271
+ // Persistent content-based deduplication
272
+ const hash = contentHash(remaining);
273
+ if (hash === this.state.lastDeliveredHash)
274
+ return;
275
+ await this.sendReminder(remaining);
276
+ this.lastReminderAt = Date.now();
277
+ // Persist so restart doesn't replay
278
+ this.state.lastDeliveredHash = hash;
279
+ this.state.lastDeliveredAt = this.lastReminderAt;
280
+ saveState(this.state);
281
+ }
282
+ catch (e) {
283
+ console.warn("[DEBUG todo-reminder] Failed to check todos:", e);
284
+ }
285
+ }
286
+ formatReminder(remaining) {
287
+ const summary = remaining
288
+ .map((t) => `[${t.id}] ${t.title} (${t.status})`)
289
+ .join("\n");
290
+ return this.config.template.replace("{summary}", summary);
291
+ }
292
+ async sendReminder(remaining) {
293
+ // CRITICAL FIX: Re-check state immediately before sending.
294
+ // A task may have been closed between checkAndRemind() and now.
295
+ const freshState = this.getRemaining();
296
+ const freshHash = contentHash(freshState);
297
+ const preparedHash = contentHash(remaining);
298
+ // If the fresh state differs from what we prepared, tasks were modified
299
+ if (freshHash !== preparedHash) {
300
+ if (this.config.verbose ?? false) {
301
+ console.log("[DEBUG todo-reminder] State changed since check — suppressing reminder");
302
+ }
303
+ return;
304
+ }
305
+ const message = this.formatReminder(remaining);
306
+ try {
307
+ this.pi.sendUserMessage(message, {
308
+ deliverAs: this.config.deliverAs,
309
+ });
310
+ }
311
+ catch (e) {
312
+ console.warn("[DEBUG todo-reminder] Failed to send reminder:", e);
313
+ }
314
+ }
315
+ async triggerNow() {
316
+ await this.checkAndRemind();
317
+ }
318
+ getRemainingCount() {
319
+ return this.getRemaining().length;
320
+ }
321
+ /**
322
+ * Clear the persistent dedupe state
323
+ */
324
+ clearState() {
325
+ this.state = { lastDeliveredHash: "", lastDeliveredAt: 0 };
326
+ saveState(this.state);
327
+ }
328
+ }
329
+ //# sourceMappingURL=todo-reminder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-reminder.js","sourceRoot":"","sources":["../src/todo-reminder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Types for todo-bd-sync
3
+ * Two-way sync between rpiv-todo overlay and bd issue tracker
4
+ */
5
+ export interface TodoTask {
6
+ id: number;
7
+ subject: string;
8
+ description?: string;
9
+ activeForm?: string;
10
+ status: TodoStatus;
11
+ blockedBy?: number[];
12
+ owner?: string;
13
+ metadata?: {
14
+ bdId?: string;
15
+ lastSync?: number;
16
+ [key: string]: unknown;
17
+ };
18
+ }
19
+ export type TodoStatus = "pending" | "in_progress" | "completed" | "deleted";
20
+ export interface BdIssue {
21
+ id: string;
22
+ title: string;
23
+ status: BdStatus;
24
+ priority?: number;
25
+ createdAt?: string;
26
+ updatedAt?: string;
27
+ }
28
+ export type BdStatus = "open" | "in_progress" | "closed" | "blocked";
29
+ export type SyncDirection = "todo_to_bd" | "bd_to_todo" | "session_start";
30
+ export interface SyncConflict {
31
+ task: TodoTask;
32
+ bdIssue: BdIssue;
33
+ timestamp: number;
34
+ resolution: "todo_wins" | "bd_wins" | "recent_wins";
35
+ }
36
+ export interface SyncResult {
37
+ success: boolean;
38
+ direction: SyncDirection;
39
+ taskId?: number;
40
+ bdId?: string;
41
+ action?: string;
42
+ error?: string;
43
+ }
44
+ export interface IdMapping {
45
+ todoId: number;
46
+ bdId: string;
47
+ createdAt: number;
48
+ lastSync: number;
49
+ }
50
+ export declare class IdMappingRegistry {
51
+ private mappings;
52
+ private bdMappings;
53
+ set(todoId: number, bdId: string): void;
54
+ getByTodoId(todoId: number): IdMapping | undefined;
55
+ getByBdId(bdId: string): IdMapping | undefined;
56
+ hasTodoId(todoId: number): boolean;
57
+ hasBdId(bdId: string): boolean;
58
+ updateLastSync(todoId: number): void;
59
+ delete(todoId: number): void;
60
+ getAll(): IdMapping[];
61
+ clear(): void;
62
+ }
63
+ export declare const STATUS_MAP: Record<TodoStatus, BdStatus>;
64
+ export declare const BD_STATUS_MAP: Record<BdStatus, TodoStatus>;
65
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,CAAC;CACF;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC;AAG7E,MAAM,WAAW,OAAO;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAGrE,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,eAAe,CAAC;AAG1E,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,WAAW,GAAG,SAAS,GAAG,aAAa,CAAC;CACpD;AAGD,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,aAAa,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,SAAS;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAGD,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,UAAU,CAAkC;IAEpD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAUtC;IAED,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEjD;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAG7C;IAED,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjC;IAED,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7B;IAED,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAKnC;IAED,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAM3B;IAED,MAAM,IAAI,SAAS,EAAE,CAEpB;IAED,KAAK,IAAI,IAAI,CAGZ;CACD;AAGD,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,CAKnD,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,CAKtD,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Types for todo-bd-sync
3
+ * Two-way sync between rpiv-todo overlay and bd issue tracker
4
+ */
5
+ // Registry of ID mappings
6
+ export class IdMappingRegistry {
7
+ mappings = new Map(); // todoId -> mapping
8
+ bdMappings = new Map(); // bdId -> todoId
9
+ set(todoId, bdId) {
10
+ const now = Date.now();
11
+ const mapping = {
12
+ todoId,
13
+ bdId,
14
+ createdAt: now,
15
+ lastSync: now,
16
+ };
17
+ this.mappings.set(todoId, mapping);
18
+ this.bdMappings.set(bdId, todoId);
19
+ }
20
+ getByTodoId(todoId) {
21
+ return this.mappings.get(todoId);
22
+ }
23
+ getByBdId(bdId) {
24
+ const todoId = this.bdMappings.get(bdId);
25
+ return todoId !== undefined ? this.mappings.get(todoId) : undefined;
26
+ }
27
+ hasTodoId(todoId) {
28
+ return this.mappings.has(todoId);
29
+ }
30
+ hasBdId(bdId) {
31
+ return this.bdMappings.has(bdId);
32
+ }
33
+ updateLastSync(todoId) {
34
+ const mapping = this.mappings.get(todoId);
35
+ if (mapping) {
36
+ mapping.lastSync = Date.now();
37
+ }
38
+ }
39
+ delete(todoId) {
40
+ const mapping = this.mappings.get(todoId);
41
+ if (mapping) {
42
+ this.bdMappings.delete(mapping.bdId);
43
+ this.mappings.delete(todoId);
44
+ }
45
+ }
46
+ getAll() {
47
+ return Array.from(this.mappings.values());
48
+ }
49
+ clear() {
50
+ this.mappings.clear();
51
+ this.bdMappings.clear();
52
+ }
53
+ }
54
+ // Status mapping between todo and bd
55
+ export const STATUS_MAP = {
56
+ pending: "open",
57
+ in_progress: "in_progress",
58
+ completed: "closed",
59
+ deleted: "closed",
60
+ };
61
+ export const BD_STATUS_MAP = {
62
+ open: "pending",
63
+ in_progress: "in_progress",
64
+ closed: "completed",
65
+ blocked: "pending",
66
+ };
67
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6DH,0BAA0B;AAC1B,MAAM,OAAO,iBAAiB;IACrB,QAAQ,GAA2B,IAAI,GAAG,EAAE,CAAC,CAAC,oBAAoB;IAClE,UAAU,GAAwB,IAAI,GAAG,EAAE,CAAC,CAAC,iBAAiB;IAEtE,GAAG,CAAC,MAAc,EAAE,IAAY;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAc;YAC1B,MAAM;YACN,IAAI;YACJ,SAAS,EAAE,GAAG;YACd,QAAQ,EAAE,GAAG;SACb,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,WAAW,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,CAAC,IAAY;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC;IAED,SAAS,CAAC,MAAc;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,cAAc,CAAC,MAAc;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,CAAC;IACF,CAAC;IAED,MAAM,CAAC,MAAc;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;IACF,CAAC;IAED,MAAM;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACD;AAED,qCAAqC;AACrC,MAAM,CAAC,MAAM,UAAU,GAAiC;IACvD,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,QAAQ;IACnB,OAAO,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAiC;IAC1D,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,SAAS;CAClB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moocoding/todo-bd-sync",
3
- "version": "1.1.398",
3
+ "version": "1.1.402",
4
4
  "description": "Two-way sync between rpiv-todo overlay and bd issue tracker",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Token Estimation
3
+ *
4
+ * Rough token counting for messages and text.
5
+ * Used for context window management before API calls.
6
+ */
7
+ /**
8
+ * Rough token count estimation — conservative (overestimates slightly).
9
+ * Based on average ~3.8 chars/token for English text.
10
+ */
11
+ export declare function roughTokenCount(text: string): number;
12
+ /**
13
+ * Rough token count for a structured message.
14
+ * Handles role, content, tool_calls, tool_results, thinking blocks.
15
+ */
16
+ export declare function roughMessageTokens(msg: {
17
+ role?: string;
18
+ content?: string | {
19
+ type: string;
20
+ text?: string;
21
+ name?: string;
22
+ input?: unknown;
23
+ thinking?: string;
24
+ }[] | null;
25
+ tool_calls?: {
26
+ id: string;
27
+ name: string;
28
+ input: unknown;
29
+ }[];
30
+ thinking?: string;
31
+ }): number;
32
+ /**
33
+ * Rough token count for a full message array (API request format).
34
+ */
35
+ export declare function roughMessagesTokens(messages: Array<{
36
+ role?: string;
37
+ content?: string | {
38
+ type: string;
39
+ text?: string;
40
+ name?: string;
41
+ input?: unknown;
42
+ thinking?: string;
43
+ }[] | null;
44
+ tool_calls?: {
45
+ id: string;
46
+ name: string;
47
+ input: unknown;
48
+ }[];
49
+ thinking?: string;
50
+ }>): number;
51
+ /**
52
+ * Estimate tokens for a system prompt string.
53
+ * System prompts typically have overhead from role markers.
54
+ */
55
+ export declare function roughSystemPromptTokens(systemPrompt: string): number;
56
+ /**
57
+ * Estimate tokens for tool definitions (schema).
58
+ */
59
+ export declare function roughToolDefinitionTokens(tool: {
60
+ name: string;
61
+ description?: string;
62
+ input_schema?: Record<string, unknown>;
63
+ }): number;
64
+ /**
65
+ * Estimate total request tokens (input to API).
66
+ */
67
+ export interface RequestTokenEstimate {
68
+ systemPrompt: number;
69
+ messages: number;
70
+ tools: number;
71
+ total: number;
72
+ maxOutputTokens: number;
73
+ availableForContext: number;
74
+ }
75
+ export declare function estimateRequestTokens(systemPrompt: string, messages: Array<{
76
+ role?: string;
77
+ content?: string | {
78
+ type: string;
79
+ text?: string;
80
+ name?: string;
81
+ input?: unknown;
82
+ thinking?: string;
83
+ }[] | null;
84
+ tool_calls?: {
85
+ id: string;
86
+ name: string;
87
+ input: unknown;
88
+ }[];
89
+ }>, tools: Array<{
90
+ name: string;
91
+ description?: string;
92
+ input_schema?: Record<string, unknown>;
93
+ }>, maxOutputTokens: number): RequestTokenEstimate;
94
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}