@aitne/daemon 0.1.3 → 0.1.6

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 (421) hide show
  1. package/dist/adapters/notification-manager.d.ts +12 -0
  2. package/dist/adapters/notification-manager.d.ts.map +1 -1
  3. package/dist/adapters/notification-manager.js +39 -1
  4. package/dist/adapters/notification-manager.js.map +1 -1
  5. package/dist/adapters/whatsapp-adapter.d.ts.map +1 -1
  6. package/dist/adapters/whatsapp-adapter.js +0 -1
  7. package/dist/adapters/whatsapp-adapter.js.map +1 -1
  8. package/dist/api/integration-route-gate.d.ts +15 -11
  9. package/dist/api/integration-route-gate.d.ts.map +1 -1
  10. package/dist/api/integration-route-gate.js +60 -23
  11. package/dist/api/integration-route-gate.js.map +1 -1
  12. package/dist/api/json-body.d.ts +22 -7
  13. package/dist/api/json-body.d.ts.map +1 -1
  14. package/dist/api/json-body.js +27 -8
  15. package/dist/api/json-body.js.map +1 -1
  16. package/dist/api/routes/agent.d.ts.map +1 -1
  17. package/dist/api/routes/agent.js +25 -0
  18. package/dist/api/routes/agent.js.map +1 -1
  19. package/dist/api/routes/backends.d.ts.map +1 -1
  20. package/dist/api/routes/backends.js +96 -1
  21. package/dist/api/routes/backends.js.map +1 -1
  22. package/dist/api/routes/books.js +1 -1
  23. package/dist/api/routes/books.js.map +1 -1
  24. package/dist/api/routes/commands.d.ts.map +1 -1
  25. package/dist/api/routes/commands.js +16 -13
  26. package/dist/api/routes/commands.js.map +1 -1
  27. package/dist/api/routes/context.d.ts.map +1 -1
  28. package/dist/api/routes/context.js +26 -3
  29. package/dist/api/routes/context.js.map +1 -1
  30. package/dist/api/routes/dashboard.d.ts.map +1 -1
  31. package/dist/api/routes/dashboard.js +103 -5
  32. package/dist/api/routes/dashboard.js.map +1 -1
  33. package/dist/api/routes/fs.d.ts +23 -0
  34. package/dist/api/routes/fs.d.ts.map +1 -0
  35. package/dist/api/routes/fs.js +156 -0
  36. package/dist/api/routes/fs.js.map +1 -0
  37. package/dist/api/routes/fs.logic.d.ts +62 -0
  38. package/dist/api/routes/fs.logic.d.ts.map +1 -0
  39. package/dist/api/routes/fs.logic.js +137 -0
  40. package/dist/api/routes/fs.logic.js.map +1 -0
  41. package/dist/api/routes/github.d.ts.map +1 -1
  42. package/dist/api/routes/github.js +38 -5
  43. package/dist/api/routes/github.js.map +1 -1
  44. package/dist/api/routes/health.d.ts.map +1 -1
  45. package/dist/api/routes/health.js +4 -2
  46. package/dist/api/routes/health.js.map +1 -1
  47. package/dist/api/routes/integrations.d.ts +35 -6
  48. package/dist/api/routes/integrations.d.ts.map +1 -1
  49. package/dist/api/routes/integrations.js +192 -15
  50. package/dist/api/routes/integrations.js.map +1 -1
  51. package/dist/api/routes/mail.d.ts.map +1 -1
  52. package/dist/api/routes/mail.js +112 -46
  53. package/dist/api/routes/mail.js.map +1 -1
  54. package/dist/api/routes/metrics.d.ts +1 -0
  55. package/dist/api/routes/metrics.d.ts.map +1 -1
  56. package/dist/api/routes/metrics.js +24 -0
  57. package/dist/api/routes/metrics.js.map +1 -1
  58. package/dist/api/routes/observations.d.ts.map +1 -1
  59. package/dist/api/routes/observations.js +696 -30
  60. package/dist/api/routes/observations.js.map +1 -1
  61. package/dist/api/routes/setup-migrate.d.ts +9 -1
  62. package/dist/api/routes/setup-migrate.d.ts.map +1 -1
  63. package/dist/api/routes/setup-migrate.js +4 -2
  64. package/dist/api/routes/setup-migrate.js.map +1 -1
  65. package/dist/api/routes/skills.d.ts +9 -1
  66. package/dist/api/routes/skills.d.ts.map +1 -1
  67. package/dist/api/routes/skills.js +77 -17
  68. package/dist/api/routes/skills.js.map +1 -1
  69. package/dist/api/routes/voice.d.ts.map +1 -1
  70. package/dist/api/routes/voice.js +62 -4
  71. package/dist/api/routes/voice.js.map +1 -1
  72. package/dist/api/routes/wiki.d.ts +4 -0
  73. package/dist/api/routes/wiki.d.ts.map +1 -0
  74. package/dist/api/routes/wiki.js +1075 -0
  75. package/dist/api/routes/wiki.js.map +1 -0
  76. package/dist/api/server.d.ts +13 -0
  77. package/dist/api/server.d.ts.map +1 -1
  78. package/dist/api/server.js +27 -1
  79. package/dist/api/server.js.map +1 -1
  80. package/dist/bootstrap/adapters.d.ts +109 -0
  81. package/dist/bootstrap/adapters.d.ts.map +1 -0
  82. package/dist/bootstrap/adapters.js +237 -0
  83. package/dist/bootstrap/adapters.js.map +1 -0
  84. package/dist/bootstrap/catchup.d.ts +23 -0
  85. package/dist/bootstrap/catchup.d.ts.map +1 -0
  86. package/dist/bootstrap/catchup.js +124 -0
  87. package/dist/bootstrap/catchup.js.map +1 -0
  88. package/dist/bootstrap/schedule-helpers.d.ts +18 -0
  89. package/dist/bootstrap/schedule-helpers.d.ts.map +1 -0
  90. package/dist/bootstrap/schedule-helpers.js +96 -0
  91. package/dist/bootstrap/schedule-helpers.js.map +1 -0
  92. package/dist/bootstrap/services.d.ts +60 -0
  93. package/dist/bootstrap/services.d.ts.map +1 -0
  94. package/dist/bootstrap/services.js +209 -0
  95. package/dist/bootstrap/services.js.map +1 -0
  96. package/dist/config.d.ts.map +1 -1
  97. package/dist/config.js +26 -0
  98. package/dist/config.js.map +1 -1
  99. package/dist/core/agent-core.d.ts +25 -0
  100. package/dist/core/agent-core.d.ts.map +1 -1
  101. package/dist/core/agent-core.js.map +1 -1
  102. package/dist/core/backends/backend-router.d.ts +28 -1
  103. package/dist/core/backends/backend-router.d.ts.map +1 -1
  104. package/dist/core/backends/backend-router.js +58 -4
  105. package/dist/core/backends/backend-router.js.map +1 -1
  106. package/dist/core/backends/claude-auth.d.ts +70 -0
  107. package/dist/core/backends/claude-auth.d.ts.map +1 -0
  108. package/dist/core/backends/claude-auth.js +198 -0
  109. package/dist/core/backends/claude-auth.js.map +1 -0
  110. package/dist/core/backends/claude-code-core.d.ts +47 -119
  111. package/dist/core/backends/claude-code-core.d.ts.map +1 -1
  112. package/dist/core/backends/claude-code-core.js +166 -1561
  113. package/dist/core/backends/claude-code-core.js.map +1 -1
  114. package/dist/core/backends/claude-delegated.d.ts +86 -0
  115. package/dist/core/backends/claude-delegated.d.ts.map +1 -0
  116. package/dist/core/backends/claude-delegated.js +801 -0
  117. package/dist/core/backends/claude-delegated.js.map +1 -0
  118. package/dist/core/backends/claude-errors.d.ts +39 -0
  119. package/dist/core/backends/claude-errors.d.ts.map +1 -0
  120. package/dist/core/backends/claude-errors.js +71 -0
  121. package/dist/core/backends/claude-errors.js.map +1 -0
  122. package/dist/core/backends/claude-probe.d.ts +103 -0
  123. package/dist/core/backends/claude-probe.d.ts.map +1 -0
  124. package/dist/core/backends/claude-probe.js +336 -0
  125. package/dist/core/backends/claude-probe.js.map +1 -0
  126. package/dist/core/backends/claude-tool-collection.d.ts +135 -0
  127. package/dist/core/backends/claude-tool-collection.d.ts.map +1 -0
  128. package/dist/core/backends/claude-tool-collection.js +1093 -0
  129. package/dist/core/backends/claude-tool-collection.js.map +1 -0
  130. package/dist/core/backends/codex-core.d.ts.map +1 -1
  131. package/dist/core/backends/codex-core.js +36 -0
  132. package/dist/core/backends/codex-core.js.map +1 -1
  133. package/dist/core/backends/gemini-cli-core.d.ts +45 -5
  134. package/dist/core/backends/gemini-cli-core.d.ts.map +1 -1
  135. package/dist/core/backends/gemini-cli-core.js +146 -36
  136. package/dist/core/backends/gemini-cli-core.js.map +1 -1
  137. package/dist/core/backends/plan-presets.d.ts +3 -1
  138. package/dist/core/backends/plan-presets.d.ts.map +1 -1
  139. package/dist/core/backends/plan-presets.js +42 -2
  140. package/dist/core/backends/plan-presets.js.map +1 -1
  141. package/dist/core/backends/prompt-utils.d.ts +1 -0
  142. package/dist/core/backends/prompt-utils.d.ts.map +1 -1
  143. package/dist/core/backends/prompt-utils.js +60 -3
  144. package/dist/core/backends/prompt-utils.js.map +1 -1
  145. package/dist/core/bang-commands/commands-help.d.ts +5 -0
  146. package/dist/core/bang-commands/commands-help.d.ts.map +1 -0
  147. package/dist/core/bang-commands/commands-help.js +69 -0
  148. package/dist/core/bang-commands/commands-help.js.map +1 -0
  149. package/dist/core/bang-commands/commands-wiki.d.ts +75 -0
  150. package/dist/core/bang-commands/commands-wiki.d.ts.map +1 -0
  151. package/dist/core/bang-commands/commands-wiki.js +574 -0
  152. package/dist/core/bang-commands/commands-wiki.js.map +1 -0
  153. package/dist/core/bang-commands/index.d.ts +4 -2
  154. package/dist/core/bang-commands/index.d.ts.map +1 -1
  155. package/dist/core/bang-commands/index.js +15 -1
  156. package/dist/core/bang-commands/index.js.map +1 -1
  157. package/dist/core/bang-commands/registry.d.ts +47 -4
  158. package/dist/core/bang-commands/registry.d.ts.map +1 -1
  159. package/dist/core/bang-commands/registry.js +85 -15
  160. package/dist/core/bang-commands/registry.js.map +1 -1
  161. package/dist/core/context-builder.d.ts +53 -12
  162. package/dist/core/context-builder.d.ts.map +1 -1
  163. package/dist/core/context-builder.js +240 -92
  164. package/dist/core/context-builder.js.map +1 -1
  165. package/dist/core/daemon-api-cli.d.ts.map +1 -1
  166. package/dist/core/daemon-api-cli.js +50 -2
  167. package/dist/core/daemon-api-cli.js.map +1 -1
  168. package/dist/core/dispatcher-date-utils.d.ts +49 -0
  169. package/dist/core/dispatcher-date-utils.d.ts.map +1 -0
  170. package/dist/core/dispatcher-date-utils.js +132 -0
  171. package/dist/core/dispatcher-date-utils.js.map +1 -0
  172. package/dist/core/dispatcher-error-handling.d.ts +159 -0
  173. package/dist/core/dispatcher-error-handling.d.ts.map +1 -0
  174. package/dist/core/dispatcher-error-handling.js +393 -0
  175. package/dist/core/dispatcher-error-handling.js.map +1 -0
  176. package/dist/core/dispatcher-hourly-check.d.ts +150 -0
  177. package/dist/core/dispatcher-hourly-check.d.ts.map +1 -0
  178. package/dist/core/dispatcher-hourly-check.js +665 -0
  179. package/dist/core/dispatcher-hourly-check.js.map +1 -0
  180. package/dist/core/dispatcher-message-handler.d.ts +170 -0
  181. package/dist/core/dispatcher-message-handler.d.ts.map +1 -0
  182. package/dist/core/dispatcher-message-handler.js +1064 -0
  183. package/dist/core/dispatcher-message-handler.js.map +1 -0
  184. package/dist/core/dispatcher-morning-routine.d.ts +169 -0
  185. package/dist/core/dispatcher-morning-routine.d.ts.map +1 -0
  186. package/dist/core/dispatcher-morning-routine.js +449 -0
  187. package/dist/core/dispatcher-morning-routine.js.map +1 -0
  188. package/dist/core/dispatcher-prompt.d.ts +107 -0
  189. package/dist/core/dispatcher-prompt.d.ts.map +1 -0
  190. package/dist/core/dispatcher-prompt.js +227 -0
  191. package/dist/core/dispatcher-prompt.js.map +1 -0
  192. package/dist/core/dispatcher-repository-helpers.d.ts +39 -0
  193. package/dist/core/dispatcher-repository-helpers.d.ts.map +1 -0
  194. package/dist/core/dispatcher-repository-helpers.js +86 -0
  195. package/dist/core/dispatcher-repository-helpers.js.map +1 -0
  196. package/dist/core/dispatcher-result-processor.d.ts +168 -0
  197. package/dist/core/dispatcher-result-processor.d.ts.map +1 -0
  198. package/dist/core/dispatcher-result-processor.js +533 -0
  199. package/dist/core/dispatcher-result-processor.js.map +1 -0
  200. package/dist/core/dispatcher-scheduled-tasks.d.ts +406 -0
  201. package/dist/core/dispatcher-scheduled-tasks.d.ts.map +1 -0
  202. package/dist/core/dispatcher-scheduled-tasks.js +1032 -0
  203. package/dist/core/dispatcher-scheduled-tasks.js.map +1 -0
  204. package/dist/core/dispatcher-types.d.ts +411 -0
  205. package/dist/core/dispatcher-types.d.ts.map +1 -0
  206. package/dist/core/dispatcher-types.js +106 -0
  207. package/dist/core/dispatcher-types.js.map +1 -0
  208. package/dist/core/dispatcher.d.ts +122 -610
  209. package/dist/core/dispatcher.d.ts.map +1 -1
  210. package/dist/core/dispatcher.js +365 -3521
  211. package/dist/core/dispatcher.js.map +1 -1
  212. package/dist/core/integration-health.d.ts +18 -10
  213. package/dist/core/integration-health.d.ts.map +1 -1
  214. package/dist/core/integration-health.js +31 -1
  215. package/dist/core/integration-health.js.map +1 -1
  216. package/dist/core/integration-lifecycle.d.ts +65 -0
  217. package/dist/core/integration-lifecycle.d.ts.map +1 -1
  218. package/dist/core/integration-lifecycle.js +163 -14
  219. package/dist/core/integration-lifecycle.js.map +1 -1
  220. package/dist/core/integration-main-backend.d.ts +40 -0
  221. package/dist/core/integration-main-backend.d.ts.map +1 -1
  222. package/dist/core/integration-main-backend.js +89 -2
  223. package/dist/core/integration-main-backend.js.map +1 -1
  224. package/dist/core/management-md.d.ts +51 -17
  225. package/dist/core/management-md.d.ts.map +1 -1
  226. package/dist/core/management-md.js +233 -56
  227. package/dist/core/management-md.js.map +1 -1
  228. package/dist/core/metrics.d.ts +127 -0
  229. package/dist/core/metrics.d.ts.map +1 -1
  230. package/dist/core/metrics.js +256 -1
  231. package/dist/core/metrics.js.map +1 -1
  232. package/dist/core/output-language-policy.d.ts +74 -0
  233. package/dist/core/output-language-policy.d.ts.map +1 -0
  234. package/dist/core/output-language-policy.js +194 -0
  235. package/dist/core/output-language-policy.js.map +1 -0
  236. package/dist/core/prompts.d.ts +3 -1
  237. package/dist/core/prompts.d.ts.map +1 -1
  238. package/dist/core/prompts.js +161 -3
  239. package/dist/core/prompts.js.map +1 -1
  240. package/dist/core/repository-management-docs.d.ts +24 -0
  241. package/dist/core/repository-management-docs.d.ts.map +1 -1
  242. package/dist/core/repository-management-docs.js +210 -26
  243. package/dist/core/repository-management-docs.js.map +1 -1
  244. package/dist/core/roadmap-validate.js +13 -1
  245. package/dist/core/roadmap-validate.js.map +1 -1
  246. package/dist/core/routine-acquisition-plan.d.ts +182 -0
  247. package/dist/core/routine-acquisition-plan.d.ts.map +1 -0
  248. package/dist/core/routine-acquisition-plan.js +367 -0
  249. package/dist/core/routine-acquisition-plan.js.map +1 -0
  250. package/dist/core/routine-fetch-window-retry.d.ts +109 -0
  251. package/dist/core/routine-fetch-window-retry.d.ts.map +1 -0
  252. package/dist/core/routine-fetch-window-retry.js +210 -0
  253. package/dist/core/routine-fetch-window-retry.js.map +1 -0
  254. package/dist/core/routine-fetch-window-runner.d.ts +427 -0
  255. package/dist/core/routine-fetch-window-runner.d.ts.map +1 -0
  256. package/dist/core/routine-fetch-window-runner.js +1591 -0
  257. package/dist/core/routine-fetch-window-runner.js.map +1 -0
  258. package/dist/core/routine-windows.d.ts +171 -0
  259. package/dist/core/routine-windows.d.ts.map +1 -0
  260. package/dist/core/routine-windows.js +377 -0
  261. package/dist/core/routine-windows.js.map +1 -0
  262. package/dist/core/scheduler.d.ts +50 -2
  263. package/dist/core/scheduler.d.ts.map +1 -1
  264. package/dist/core/scheduler.js +88 -7
  265. package/dist/core/scheduler.js.map +1 -1
  266. package/dist/core/skill-curation/declarations.d.ts.map +1 -1
  267. package/dist/core/skill-curation/declarations.js +11 -12
  268. package/dist/core/skill-curation/declarations.js.map +1 -1
  269. package/dist/core/skill-source-paths.d.ts +14 -0
  270. package/dist/core/skill-source-paths.d.ts.map +1 -0
  271. package/dist/core/skill-source-paths.js +82 -0
  272. package/dist/core/skill-source-paths.js.map +1 -0
  273. package/dist/core/skills-compiler.d.ts +29 -0
  274. package/dist/core/skills-compiler.d.ts.map +1 -1
  275. package/dist/core/skills-compiler.js +166 -30
  276. package/dist/core/skills-compiler.js.map +1 -1
  277. package/dist/core/skills-manifest.d.ts.map +1 -1
  278. package/dist/core/skills-manifest.js +72 -0
  279. package/dist/core/skills-manifest.js.map +1 -1
  280. package/dist/core/system-reset.d.ts +25 -0
  281. package/dist/core/system-reset.d.ts.map +1 -1
  282. package/dist/core/system-reset.js +72 -2
  283. package/dist/core/system-reset.js.map +1 -1
  284. package/dist/core/wiki/approval-queue.d.ts +31 -0
  285. package/dist/core/wiki/approval-queue.d.ts.map +1 -0
  286. package/dist/core/wiki/approval-queue.js +44 -0
  287. package/dist/core/wiki/approval-queue.js.map +1 -0
  288. package/dist/core/wiki/bridge.d.ts +74 -0
  289. package/dist/core/wiki/bridge.d.ts.map +1 -0
  290. package/dist/core/wiki/bridge.js +405 -0
  291. package/dist/core/wiki/bridge.js.map +1 -0
  292. package/dist/core/wiki/compile-lock.d.ts +42 -0
  293. package/dist/core/wiki/compile-lock.d.ts.map +1 -0
  294. package/dist/core/wiki/compile-lock.js +55 -0
  295. package/dist/core/wiki/compile-lock.js.map +1 -0
  296. package/dist/core/wiki/compile-preview.d.ts +8 -0
  297. package/dist/core/wiki/compile-preview.d.ts.map +1 -0
  298. package/dist/core/wiki/compile-preview.js +200 -0
  299. package/dist/core/wiki/compile-preview.js.map +1 -0
  300. package/dist/core/wiki/cost-estimate.d.ts +30 -0
  301. package/dist/core/wiki/cost-estimate.d.ts.map +1 -0
  302. package/dist/core/wiki/cost-estimate.js +243 -0
  303. package/dist/core/wiki/cost-estimate.js.map +1 -0
  304. package/dist/core/wiki/dispatcher.d.ts +48 -0
  305. package/dist/core/wiki/dispatcher.d.ts.map +1 -0
  306. package/dist/core/wiki/dispatcher.js +92 -0
  307. package/dist/core/wiki/dispatcher.js.map +1 -0
  308. package/dist/core/wiki/git-precompile.d.ts +86 -0
  309. package/dist/core/wiki/git-precompile.d.ts.map +1 -0
  310. package/dist/core/wiki/git-precompile.js +96 -0
  311. package/dist/core/wiki/git-precompile.js.map +1 -0
  312. package/dist/core/wiki/import-migrate.d.ts +38 -0
  313. package/dist/core/wiki/import-migrate.d.ts.map +1 -0
  314. package/dist/core/wiki/import-migrate.js +310 -0
  315. package/dist/core/wiki/import-migrate.js.map +1 -0
  316. package/dist/core/wiki/import-probe.d.ts +76 -0
  317. package/dist/core/wiki/import-probe.d.ts.map +1 -0
  318. package/dist/core/wiki/import-probe.js +245 -0
  319. package/dist/core/wiki/import-probe.js.map +1 -0
  320. package/dist/core/wiki/index-cache.d.ts +39 -0
  321. package/dist/core/wiki/index-cache.d.ts.map +1 -0
  322. package/dist/core/wiki/index-cache.js +152 -0
  323. package/dist/core/wiki/index-cache.js.map +1 -0
  324. package/dist/core/wiki/multi-url-dispatch.d.ts +52 -0
  325. package/dist/core/wiki/multi-url-dispatch.d.ts.map +1 -0
  326. package/dist/core/wiki/multi-url-dispatch.js +72 -0
  327. package/dist/core/wiki/multi-url-dispatch.js.map +1 -0
  328. package/dist/core/wiki/wiki-fts.d.ts +75 -0
  329. package/dist/core/wiki/wiki-fts.d.ts.map +1 -0
  330. package/dist/core/wiki/wiki-fts.js +265 -0
  331. package/dist/core/wiki/wiki-fts.js.map +1 -0
  332. package/dist/core/wiki/workspaces.d.ts +101 -0
  333. package/dist/core/wiki/workspaces.d.ts.map +1 -0
  334. package/dist/core/wiki/workspaces.js +352 -0
  335. package/dist/core/wiki/workspaces.js.map +1 -0
  336. package/dist/core/wiki/write-strategy.d.ts +70 -0
  337. package/dist/core/wiki/write-strategy.d.ts.map +1 -0
  338. package/dist/core/wiki/write-strategy.js +112 -0
  339. package/dist/core/wiki/write-strategy.js.map +1 -0
  340. package/dist/core/workdir.d.ts +8 -1
  341. package/dist/core/workdir.d.ts.map +1 -1
  342. package/dist/core/workdir.js +4 -1
  343. package/dist/core/workdir.js.map +1 -1
  344. package/dist/db/observations.d.ts +45 -2
  345. package/dist/db/observations.d.ts.map +1 -1
  346. package/dist/db/observations.js +112 -14
  347. package/dist/db/observations.js.map +1 -1
  348. package/dist/db/schema.d.ts.map +1 -1
  349. package/dist/db/schema.js +135 -25
  350. package/dist/db/schema.js.map +1 -1
  351. package/dist/db/wiki-store.d.ts +3 -0
  352. package/dist/db/wiki-store.d.ts.map +1 -0
  353. package/dist/db/wiki-store.js +7 -0
  354. package/dist/db/wiki-store.js.map +1 -0
  355. package/dist/index.js +159 -610
  356. package/dist/index.js.map +1 -1
  357. package/dist/messaging/url-extract.d.ts +8 -0
  358. package/dist/messaging/url-extract.d.ts.map +1 -0
  359. package/dist/messaging/url-extract.js +41 -0
  360. package/dist/messaging/url-extract.js.map +1 -0
  361. package/dist/observers/delegated-sync-worker.d.ts +52 -1
  362. package/dist/observers/delegated-sync-worker.d.ts.map +1 -1
  363. package/dist/observers/delegated-sync-worker.js +75 -18
  364. package/dist/observers/delegated-sync-worker.js.map +1 -1
  365. package/dist/observers/imminent-event-scheduler.d.ts +20 -7
  366. package/dist/observers/imminent-event-scheduler.d.ts.map +1 -1
  367. package/dist/observers/imminent-event-scheduler.js +134 -29
  368. package/dist/observers/imminent-event-scheduler.js.map +1 -1
  369. package/dist/observers/mail-poller.d.ts +12 -5
  370. package/dist/observers/mail-poller.d.ts.map +1 -1
  371. package/dist/observers/mail-poller.js +36 -14
  372. package/dist/observers/mail-poller.js.map +1 -1
  373. package/dist/observers/manager.d.ts +37 -5
  374. package/dist/observers/manager.d.ts.map +1 -1
  375. package/dist/observers/manager.js +28 -10
  376. package/dist/observers/manager.js.map +1 -1
  377. package/dist/safety/always-disallowed.d.ts +65 -0
  378. package/dist/safety/always-disallowed.d.ts.map +1 -1
  379. package/dist/safety/always-disallowed.js +106 -10
  380. package/dist/safety/always-disallowed.js.map +1 -1
  381. package/dist/safety/audit.d.ts +46 -1
  382. package/dist/safety/audit.d.ts.map +1 -1
  383. package/dist/safety/audit.js +79 -16
  384. package/dist/safety/audit.js.map +1 -1
  385. package/dist/safety/risk-classifier.d.ts.map +1 -1
  386. package/dist/safety/risk-classifier.js +29 -0
  387. package/dist/safety/risk-classifier.js.map +1 -1
  388. package/dist/services/delegated-backend-invoker.d.ts +1 -51
  389. package/dist/services/delegated-backend-invoker.d.ts.map +1 -1
  390. package/dist/services/delegated-backend-invoker.js +41 -480
  391. package/dist/services/delegated-backend-invoker.js.map +1 -1
  392. package/dist/services/delegated-invoker-audit.d.ts +94 -0
  393. package/dist/services/delegated-invoker-audit.d.ts.map +1 -0
  394. package/dist/services/delegated-invoker-audit.js +238 -0
  395. package/dist/services/delegated-invoker-audit.js.map +1 -0
  396. package/dist/services/delegated-invoker-cache-hits.d.ts +34 -0
  397. package/dist/services/delegated-invoker-cache-hits.d.ts.map +1 -0
  398. package/dist/services/delegated-invoker-cache-hits.js +104 -0
  399. package/dist/services/delegated-invoker-cache-hits.js.map +1 -0
  400. package/dist/services/delegated-invoker-janitors.d.ts +28 -0
  401. package/dist/services/delegated-invoker-janitors.d.ts.map +1 -0
  402. package/dist/services/delegated-invoker-janitors.js +104 -0
  403. package/dist/services/delegated-invoker-janitors.js.map +1 -0
  404. package/dist/services/delegated-invoker-utils.d.ts +42 -0
  405. package/dist/services/delegated-invoker-utils.d.ts.map +1 -0
  406. package/dist/services/delegated-invoker-utils.js +100 -0
  407. package/dist/services/delegated-invoker-utils.js.map +1 -0
  408. package/dist/services/delegated-task-runtime.d.ts +1 -1
  409. package/dist/services/delegated-task-runtime.js +1 -1
  410. package/dist/services/integrations/snapshot-partitions.d.ts +5 -0
  411. package/dist/services/integrations/snapshot-partitions.d.ts.map +1 -1
  412. package/dist/services/integrations/snapshot-partitions.js +12 -0
  413. package/dist/services/integrations/snapshot-partitions.js.map +1 -1
  414. package/dist/services/voice/transcriber-impl.d.ts.map +1 -1
  415. package/dist/services/voice/transcriber-impl.js +7 -8
  416. package/dist/services/voice/transcriber-impl.js.map +1 -1
  417. package/dist/settings/runtime-settings.d.ts +12 -1
  418. package/dist/settings/runtime-settings.d.ts.map +1 -1
  419. package/dist/settings/runtime-settings.js +59 -1
  420. package/dist/settings/runtime-settings.js.map +1 -1
  421. package/package.json +2 -2
@@ -0,0 +1,533 @@
1
+ /**
2
+ * `ResultProcessor` — closes out the dispatch lifecycle on the success
3
+ * side: forwards the agent's final output to the notification manager
4
+ * (when applicable), writes the audit log row, finalizes the
5
+ * agent_schedule + repository_management bookkeeping, and exposes the
6
+ * cross-session conversation history + proactive-forward heuristics
7
+ * the message handler consults.
8
+ *
9
+ * Extracted from `core/dispatcher.ts` as part of phase D-2 of
10
+ * `docs/design/appendices/file-split-plan.md`. Pattern B (stateful
11
+ * coordinator): the processor holds no mutable state of its own; it
12
+ * borrows the dispatcher's `notifiedEvents` Set as a live reference
13
+ * (the post-success consume site) and reads dispatcher-state via a
14
+ * minimal isReactive callback so the cost-cap / autonomous-trigger
15
+ * classification stays single-sourced.
16
+ *
17
+ * Dispatcher entry points served:
18
+ * - the message handler / routine handler / scheduled-task handler
19
+ * all call `processResult` once the backend run terminates;
20
+ * - `handleError` (now on `DispatcherErrorRouter`) bridges back into
21
+ * `finalizeRetemplateRun` / `finalizeManagementScan` via the
22
+ * `onRetemplateFinalize` / `onManagementScanFinalize` callbacks
23
+ * wired from `EventDispatcher` so the failure path lands the same
24
+ * bookkeeping rows as the success path;
25
+ * - the message handler reads
26
+ * `hasRecentProactiveForwardContext` /
27
+ * `buildCrossSessionConversationHistory` /
28
+ * `formatSummaryRole` for cross-surface DM continuity, and calls
29
+ * `logProactiveForwardDisavowalIfMatched` after the assistant
30
+ * reply lands.
31
+ *
32
+ * Shared-state references held:
33
+ * - `notifiedEvents: Set<string>` — live reference; `processResult`
34
+ * consumes the entry the agent's `/api/notify` call deposited so
35
+ * the dispatcher doesn't double-DM with the closing assistant
36
+ * turn.
37
+ * - `isReactive: (event) => boolean` — getter; mirrors the
38
+ * dispatcher's classification so audit-log `trigger` and observer
39
+ * logs stay consistent.
40
+ */
41
+ import { isAgentTaskEvent, isDocsQAMessage, isMessageEvent, isRoutineEvent, isScheduledEvent, formatSqliteDatetime, } from "@aitne/shared";
42
+ import { getContextDir } from "../config.js";
43
+ import { finalizeRetemplate } from "./template-store.js";
44
+ import { recordManagementInitDone, recordManagementScan, } from "../db/repositories-store.js";
45
+ import { isProactiveForwardMetadata, parseMessageMetadata, } from "./channel-timeline.js";
46
+ import { OWNER_DM_SCOPE, OWNER_SCOPE_KEY, DASHBOARD_CHAT_SCOPE, DASHBOARD_SCOPE_KEY, getConversationScope, } from "../messaging/constants.js";
47
+ import { readEventReplyTarget } from "./wiki/dispatcher.js";
48
+ import { createLogger } from "../logging.js";
49
+ const logger = createLogger("dispatcher-result");
50
+ /**
51
+ * English-only patterns by CLAUDE.md convention. The disavowal tripwire
52
+ * is a numerator over a `disavowed / injected` ratio (dm-channel-timeline.md
53
+ * §C.1) — false negatives are tolerated; non-English replies that happen to
54
+ * disavow will simply not contribute to the numerator. Operators monitor the
55
+ * ratio and flip `proactiveForwardForceFreshSession` on rise; that fallback
56
+ * path is language-agnostic.
57
+ */
58
+ export const PROACTIVE_FORWARD_DISAVOWAL_PATTERNS = [
59
+ /\b(?:don't|do not) (?:recall|remember)\b/i,
60
+ /\bI (?:didn't|did not) (?:say|send|mention)\b/i,
61
+ /\breferenc(?:ing|e) what\b/i,
62
+ /\bwhat did .* (?:say|mean|refer)\b/i,
63
+ ];
64
+ export class ResultProcessor {
65
+ db;
66
+ config;
67
+ audit;
68
+ notificationMgr;
69
+ sessionMgr;
70
+ notifiedEvents;
71
+ isReactive;
72
+ hasMessageBackendMetadataColumns;
73
+ constructor(deps) {
74
+ this.db = deps.db;
75
+ this.config = deps.config;
76
+ this.audit = deps.audit;
77
+ this.notificationMgr = deps.notificationMgr;
78
+ this.sessionMgr = deps.sessionMgr;
79
+ this.notifiedEvents = deps.notifiedEvents;
80
+ this.isReactive = deps.isReactive;
81
+ this.hasMessageBackendMetadataColumns = deps.hasMessageBackendMetadataColumns;
82
+ }
83
+ async processResult(result, event, skipNotify = false, options = {}) {
84
+ // Notify-dedup: consume the marker (if present) so this method also
85
+ // serves as the cleanup point — every event run reaches processResult
86
+ // exactly once on the success path, and on the error path the entry
87
+ // is harmless (next event gets a fresh UUID).
88
+ const alreadyNotified = this.notifiedEvents.delete(event.correlationId);
89
+ // WIKI_BUILDER_DESIGN.md §3.4 — wiki.ingest_url defines success as a
90
+ // 200 receipt from `POST /api/wiki/<workspace>/files/10_raw/<slug>.md`.
91
+ // Sonnet 4.6 has been observed claiming success in the final assistant
92
+ // text while never actually calling the Wiki API (e.g. inventing routes
93
+ // like `/api/send-message`). Verify the agent's claim against the
94
+ // authoritative DB record before forwarding the DM; if no write
95
+ // happened, rewrite the message into a failure DM so the operator does
96
+ // not get a misleading "ingested" notification.
97
+ const output = this.verifyWikiIngestWriteOrRewrite(result.output.trim(), event, result);
98
+ if (!skipNotify
99
+ && !alreadyNotified
100
+ && output.length > 0
101
+ && this.shouldNotify(event)) {
102
+ // WIKI_BUILDER_DESIGN.md §3.4-bis — non-message events that were
103
+ // spawned from a bang command carry the originating MessageEvent's
104
+ // routing tuple in `data.reply_target`. Pull it out so the
105
+ // completion DM lands on the same channel the operator typed the
106
+ // bang on rather than the proactive "primary messaging app"
107
+ // destinations.
108
+ //
109
+ // The check is gated to **non-message** events deliberately:
110
+ // - MessageEvents (`message.*`) have routing at the top level
111
+ // (`event.platform/channel/threadId`) and `NotificationManager`
112
+ // already self-routes them via `deliverReply`. Honouring a
113
+ // `data.reply_target` on a MessageEvent would conflict with
114
+ // that self-route.
115
+ // - `wiki.*` events from bang commands → reply_target populated
116
+ // by `createWikiCommandEvent` (§3.4).
117
+ // - `scheduled.task` events from approval rows → reply_target
118
+ // populated by `scheduler.ts` lifting `taskContext.replyTarget`
119
+ // into `event.data` (covers the `!compile full` above-threshold
120
+ // path that lands as `scheduled.task` with wiki.compile
121
+ // process key).
122
+ // - Cron/observer/routine events → no reply_target → fall through
123
+ // to the proactive path so quiet hours + configured-destinations
124
+ // semantics apply.
125
+ const explicitReply = isMessageEvent(event) ? null : readEventReplyTarget(event);
126
+ const sendOptions = {};
127
+ if (options.originSessionId !== undefined) {
128
+ sendOptions.originSessionId = options.originSessionId;
129
+ }
130
+ if (explicitReply) {
131
+ sendOptions.replyTo = {
132
+ platform: explicitReply.platform,
133
+ channel: explicitReply.channel,
134
+ threadId: explicitReply.threadId ?? null,
135
+ };
136
+ }
137
+ if (Object.keys(sendOptions).length === 0) {
138
+ await this.notificationMgr.send(output, event);
139
+ }
140
+ else {
141
+ await this.notificationMgr.send(output, event, sendOptions);
142
+ }
143
+ }
144
+ this.audit.logAction({
145
+ event,
146
+ model: result.model,
147
+ costUsd: result.costUsd,
148
+ usage: result.usage,
149
+ modelUsage: result.modelUsage,
150
+ durationMs: result.durationMs,
151
+ numTurns: result.numTurns,
152
+ trigger: this.isReactive(event) ? "reactive" : "autonomous",
153
+ backend: result.backendId,
154
+ costSource: result.costSource,
155
+ contextUpdated: result.contextUpdated,
156
+ advisorCallCount: result.advisorCallCount,
157
+ ...(options.dmFreshness ? { dmFreshness: options.dmFreshness } : {}),
158
+ });
159
+ // Observer-event observability: log whether an external-change
160
+ // event actually produced a context-file update. Makes it obvious
161
+ // from the logs when the pipeline ran but the agent decided the
162
+ // change wasn't actionable. Covers every autonomous observer:
163
+ // - calendar.* / schedule.approaching (calendar observer)
164
+ // - github.* (GitHub poller high-priority events)
165
+ // - git.* (git watcher batched events)
166
+ // - notion.* (notion poller)
167
+ // - routine.hourly_check (Phase-9 polling sink for obsidian/git/notion)
168
+ if (this.isObserverEvent(event)) {
169
+ logger.info({
170
+ eventType: event.type,
171
+ source: event.source,
172
+ contextUpdated: result.contextUpdated,
173
+ numTurns: result.numTurns,
174
+ costUsd: result.costUsd,
175
+ }, result.contextUpdated
176
+ ? "Observer event processed — context files updated"
177
+ : "Observer event processed — no context updates");
178
+ }
179
+ // Mark scheduled task as completed or failed (covers both
180
+ // scheduled.task and scheduled.dm — both share the agent_schedule
181
+ // row lifecycle).
182
+ if (isScheduledEvent(event) && event.scheduleId) {
183
+ const newStatus = result.isError ? "failed" : "completed";
184
+ this.db
185
+ .prepare("UPDATE agent_schedule SET status = ? WHERE id = ? AND status = 'running'")
186
+ .run(newStatus, event.scheduleId);
187
+ this.finalizeRetemplateRunIfApplicable(event, { errored: result.isError });
188
+ }
189
+ // Repository-management events from the daily cron and the manual
190
+ // /api/repositories/:id/management/{init,scan} routes are
191
+ // `scheduled.task` events emitted directly to the EventBus (no
192
+ // `agent_schedule` row), so the finalize hook lives outside the
193
+ // `scheduleId` guard above. The finalizer is a no-op for any event
194
+ // whose taskContext doesn't match the management ProcessKey set.
195
+ this.finalizeManagementScanIfApplicable(event, { errored: result.isError });
196
+ }
197
+ /**
198
+ * P6 (git-lifecycle-and-triggers.md Decision 8) — restore in-flight
199
+ * `git.project.retemplate` targets from backup whenever a retemplate
200
+ * scheduled task settles. The agent itself cannot reliably roll back
201
+ * its own writes (process exit, exceeded turns, backend faults), so
202
+ * the daemon owns rollback at the dispatcher's two terminal sites
203
+ * (`processResult` + `handleError`). The status grid is the source of
204
+ * truth for which files to restore; `finalizeRetemplate` is idempotent
205
+ * via the `finalizedAt` marker so calling both paths is safe.
206
+ */
207
+ finalizeRetemplateRunIfApplicable(event, options) {
208
+ if (!isAgentTaskEvent(event) || !event.scheduleId)
209
+ return;
210
+ const taskCtx = event.taskContext;
211
+ const processKey = taskCtx
212
+ && typeof taskCtx === "object"
213
+ && typeof taskCtx.processKey === "string"
214
+ ? taskCtx.processKey
215
+ : null;
216
+ if (processKey !== "git.project.retemplate")
217
+ return;
218
+ try {
219
+ const result = finalizeRetemplate({
220
+ db: this.db,
221
+ contextDir: getContextDir(this.config, this.db),
222
+ scheduleId: event.scheduleId,
223
+ errored: options.errored,
224
+ });
225
+ if (result.applied && result.rolledBackSlugs.length > 0) {
226
+ logger.info({
227
+ scheduleId: event.scheduleId,
228
+ rolledBack: result.rolledBackSlugs,
229
+ finalStatus: result.finalStatus,
230
+ }, "Re-template run finalized — rolled back in-flight files from backup");
231
+ }
232
+ }
233
+ catch (err) {
234
+ logger.error({ err, scheduleId: event.scheduleId }, "Failed to finalize re-template run");
235
+ }
236
+ }
237
+ /**
238
+ * Unified-repositories §4.5 — settle a `repository_management` row when
239
+ * a `git.project.init` / `git.project.update` event the daemon emitted
240
+ * for management terminates. Runs unconditionally on every event
241
+ * because management events live on the EventBus only (no
242
+ * `agent_schedule` row), so the scheduleId-guarded path can't see
243
+ * them; the method early-returns for any taskContext that doesn't
244
+ * carry management metadata.
245
+ *
246
+ * Status mapping (v1):
247
+ * - `git.project.init` success → `recordManagementInitDone`
248
+ * - `git.project.update` success → `recordManagementScan('ok')`
249
+ * (resets `scan_failure_count`)
250
+ * - either, error → `recordManagementScan('failed')`
251
+ * (bumps `scan_failure_count`)
252
+ *
253
+ * `'skipped_no_activity'` is reserved for future task-flow callback —
254
+ * the dispatcher cannot reliably distinguish "agent decided no
255
+ * journal entry needed" from "agent succeeded but didn't write" here.
256
+ */
257
+ finalizeManagementScanIfApplicable(event, options) {
258
+ if (!isAgentTaskEvent(event))
259
+ return;
260
+ const taskCtx = event.taskContext;
261
+ if (!taskCtx || typeof taskCtx !== "object")
262
+ return;
263
+ const ctx = taskCtx;
264
+ const processKey = typeof ctx.processKey === "string" ? ctx.processKey : null;
265
+ const repositoryId = typeof ctx.repositoryId === "string" ? ctx.repositoryId : null;
266
+ const triggerSource = typeof ctx.triggerSource === "string" ? ctx.triggerSource : null;
267
+ if (!processKey || !repositoryId || !triggerSource)
268
+ return;
269
+ // Only management-emitted events should mutate `repository_management`.
270
+ // Trigger-fired sessions (`triggerSource === 'repository_trigger'`)
271
+ // share `processKey` in some cases but must not flip the management
272
+ // row — they have their own observability (`fire_count`).
273
+ if (triggerSource !== "repository_management_cron"
274
+ && triggerSource !== "repository_management_manual") {
275
+ return;
276
+ }
277
+ try {
278
+ if (processKey === "git.project.init") {
279
+ if (!options.errored) {
280
+ recordManagementInitDone(this.db, repositoryId);
281
+ }
282
+ else {
283
+ recordManagementScan(this.db, repositoryId, "failed");
284
+ }
285
+ }
286
+ else if (processKey === "git.project.update") {
287
+ recordManagementScan(this.db, repositoryId, options.errored ? "failed" : "ok");
288
+ }
289
+ }
290
+ catch (err) {
291
+ logger.error({ err, repositoryId, processKey, errored: options.errored }, "Failed to finalize repository management state");
292
+ }
293
+ }
294
+ hasRecentProactiveForwardContext(event, sessionId) {
295
+ if (!event.isDm || isDocsQAMessage(event))
296
+ return false;
297
+ const activeRows = this.db
298
+ .prepare(`SELECT metadata
299
+ FROM messages
300
+ WHERE session_id = ?
301
+ ORDER BY timestamp DESC, id DESC
302
+ LIMIT ?`)
303
+ .all(sessionId, this.config.historyInjectionMaxMessages ?? 20);
304
+ if (activeRows.some((row) => isProactiveForwardMetadata(parseMessageMetadata(row.metadata)))) {
305
+ return true;
306
+ }
307
+ const windowMinutes = this.config.historyOtherSurfaceWindowMinutes ?? 1440;
308
+ if (!Number.isFinite(windowMinutes) || windowMinutes <= 0)
309
+ return false;
310
+ const { scope } = getConversationScope({
311
+ platform: event.platform,
312
+ channel: event.channel,
313
+ threadId: event.threadId,
314
+ isDm: true,
315
+ intent: event.intent,
316
+ });
317
+ const other = scope === OWNER_DM_SCOPE
318
+ ? { scope: DASHBOARD_CHAT_SCOPE, scopeKey: DASHBOARD_SCOPE_KEY }
319
+ : scope === DASHBOARD_CHAT_SCOPE
320
+ ? { scope: OWNER_DM_SCOPE, scopeKey: OWNER_SCOPE_KEY }
321
+ : null;
322
+ if (!other)
323
+ return false;
324
+ const sinceUtc = formatSqliteDatetime(new Date(Date.now() - windowMinutes * 60_000));
325
+ const otherRows = this.db
326
+ .prepare(`SELECT m.metadata
327
+ FROM messages m
328
+ JOIN conversation_sessions s ON m.session_id = s.id
329
+ WHERE s.scope = ?
330
+ AND s.scope_key = ?
331
+ AND s.status = 'active'
332
+ AND m.timestamp >= ?
333
+ ORDER BY m.timestamp DESC, m.id DESC
334
+ LIMIT 60`)
335
+ .all(other.scope, other.scopeKey, sinceUtc);
336
+ return otherRows.some((row) => isProactiveForwardMetadata(parseMessageMetadata(row.metadata)));
337
+ }
338
+ logProactiveForwardDisavowalIfMatched(sessionId, reply) {
339
+ const matchedPattern = PROACTIVE_FORWARD_DISAVOWAL_PATTERNS.find((pattern) => pattern.test(reply));
340
+ if (!matchedPattern)
341
+ return;
342
+ try {
343
+ this.db
344
+ .prepare(`INSERT INTO agent_actions (
345
+ action_type, trigger, result, detail, started_at
346
+ )
347
+ VALUES (
348
+ 'proactive_forward_disavowed',
349
+ 'reactive',
350
+ 'success',
351
+ ?,
352
+ CURRENT_TIMESTAMP
353
+ )`)
354
+ .run(JSON.stringify({
355
+ sessionId,
356
+ replyExcerpt: reply.slice(0, 240),
357
+ matchedPattern: matchedPattern.source,
358
+ }));
359
+ }
360
+ catch (err) {
361
+ logger.warn({ err, sessionId }, "Failed to log proactive forward disavowal");
362
+ }
363
+ }
364
+ formatSummaryRole(message) {
365
+ const metadata = parseMessageMetadata(message.metadata);
366
+ if (message.role === "assistant" && isProactiveForwardMetadata(metadata)) {
367
+ return "assistant (forwarded from autonomous run)";
368
+ }
369
+ return message.role;
370
+ }
371
+ buildCrossSessionConversationHistory(event) {
372
+ const { scope, scopeKey } = getConversationScope({
373
+ platform: event.platform,
374
+ channel: event.channel,
375
+ threadId: event.threadId,
376
+ isDm: event.isDm,
377
+ intent: event.intent,
378
+ });
379
+ const summary = event.isDm && scope === OWNER_DM_SCOPE
380
+ ? this.sessionMgr.getPreviousDmSummary(OWNER_SCOPE_KEY)
381
+ : null;
382
+ const statement = this.hasMessageBackendMetadataColumns
383
+ ? this.db.prepare(`SELECT m.role, m.content, m.timestamp, m.metadata, m.backend, m.model_id
384
+ FROM messages m
385
+ JOIN conversation_sessions s ON m.session_id = s.id
386
+ WHERE s.scope = ? AND s.scope_key = ?
387
+ ORDER BY m.timestamp DESC, m.id DESC
388
+ LIMIT 20`)
389
+ : this.db.prepare(`SELECT m.role, m.content, m.timestamp, m.metadata,
390
+ NULL AS backend,
391
+ NULL AS model_id
392
+ FROM messages m
393
+ JOIN conversation_sessions s ON m.session_id = s.id
394
+ WHERE s.scope = ? AND s.scope_key = ?
395
+ ORDER BY m.timestamp DESC, m.id DESC
396
+ LIMIT 20`);
397
+ const rows = statement
398
+ .all(scope, scopeKey);
399
+ if (!summary && rows.length === 0) {
400
+ return null;
401
+ }
402
+ const parts = ["## Previous conversation in this thread"];
403
+ if (summary) {
404
+ parts.push("", "### Earlier summary", summary);
405
+ }
406
+ if (rows.length > 0) {
407
+ parts.push("", "### Recent messages (oldest first)");
408
+ for (const row of rows.reverse()) {
409
+ const tag = row.backend
410
+ ? `[${row.role}/${row.backend}:${row.model_id ?? "?"}]`
411
+ : `[${row.role}/user]`;
412
+ const forwardSuffix = row.role === "assistant"
413
+ && isProactiveForwardMetadata(parseMessageMetadata(row.metadata))
414
+ ? " (forwarded from autonomous run)"
415
+ : "";
416
+ parts.push(`${tag}${forwardSuffix}: ${row.content}`);
417
+ }
418
+ }
419
+ return parts.join("\n");
420
+ }
421
+ shouldNotify(event) {
422
+ if (isMessageEvent(event))
423
+ return true;
424
+ if (isScheduledEvent(event)) {
425
+ // Dashboard-triggered tasks (e.g. regenerate) already show status
426
+ // in the UI — suppress DM notification to avoid noisy messages.
427
+ // Both scheduled.task and scheduled.dm share this gate; the
428
+ // briefing path's final assistant turn IS the DM.
429
+ const ctx = event.taskContext;
430
+ if (ctx?.triggeredBy === "dashboard")
431
+ return false;
432
+ return true;
433
+ }
434
+ // WIKI_BUILDER_DESIGN.md §3.4 — wiki.* sessions self-report on
435
+ // completion. Each `wiki.ingest_url` / `wiki.compile` / `wiki.ask`
436
+ // / `wiki.lint` / `wiki.trace` / `wiki.connect` session forwards
437
+ // its closing assistant turn to the user. Replies route back to
438
+ // the originating channel via the §3.4 `reply_target` payload
439
+ // when the event was spawned from a bang command; otherwise they
440
+ // fall through to the proactive path (configured destinations).
441
+ // No batch aggregation — N URLs ingested = N completion DMs, the
442
+ // operator can correlate by URL in each line.
443
+ if (event.type.startsWith("wiki."))
444
+ return true;
445
+ // Routine events are silent-by-default: result.output is an internal
446
+ // agent log, never forwarded as a user notification. Routines reach
447
+ // the user only via explicit POST /api/notify from their prompt. Do
448
+ // not re-add routines here — the routine_protocol header injected by
449
+ // the context-builder carries this rule to the agent.
450
+ return false;
451
+ }
452
+ /**
453
+ * Autonomous "observer" events: external-change detections that the
454
+ * daemon pushes into the pipeline, as opposed to user-initiated
455
+ * messages, cron routines, or scheduled tasks. Used for the
456
+ * contextUpdated observability log in processResult.
457
+ */
458
+ isObserverEvent(event) {
459
+ return ((isRoutineEvent(event) && event.routine === "hourly_check") ||
460
+ event.type.startsWith("calendar.") ||
461
+ event.type === "schedule.approaching" ||
462
+ event.type.startsWith("notion.") ||
463
+ event.type.startsWith("github.") ||
464
+ event.type.startsWith("git."));
465
+ }
466
+ /**
467
+ * Confirm that a `wiki.ingest_url` session actually wrote a raw note via
468
+ * the Wiki API before letting the agent's claimed success DM reach the
469
+ * channel. The Wiki API's POST route writes an `agent_actions` row with
470
+ * `(action_type='wiki.ingest_url', source_kind='wiki', source_ref=<workspace>,
471
+ * result='success')` — checking for that row in the session's time window
472
+ * is the cheapest authoritative cross-check.
473
+ *
474
+ * Returns `output` unchanged for any other event type, when no workspace
475
+ * is present on the event, or when at least one matching write row is
476
+ * found. Otherwise emits a warning log and returns a one-line failure DM
477
+ * the dispatcher will forward in place of the agent's misleading text.
478
+ *
479
+ * Time window: `[now − result.durationMs − 5s, now]`. The 5-second
480
+ * buffer absorbs clock skew between the daemon process's wall clock and
481
+ * SQLite's `CURRENT_TIMESTAMP`. The `source_ref=<workspace>` filter
482
+ * prevents picking up a row from a concurrent run targeting a different
483
+ * workspace; concurrent runs on the SAME workspace would overlap and
484
+ * either could attribute to the other, but the Wiki API serializes raw
485
+ * writes per-slug (create-only 409 on collision) so the practical risk
486
+ * is bounded.
487
+ */
488
+ verifyWikiIngestWriteOrRewrite(output, event, result) {
489
+ if (event.type !== "wiki.ingest_url")
490
+ return output;
491
+ const data = (event.data ?? {});
492
+ const workspace = typeof data.workspace === "string" ? data.workspace : null;
493
+ if (!workspace)
494
+ return output;
495
+ const url = typeof data.url === "string" ? data.url : null;
496
+ const bufferMs = 5_000;
497
+ const windowStartMs = Date.now() - (result.durationMs ?? 0) - bufferMs;
498
+ // SQLite stores `datetime('now')` as `YYYY-MM-DD HH:MM:SS` (UTC).
499
+ // Match that shape so the lexicographic compare is well-defined.
500
+ const windowStart = new Date(windowStartMs)
501
+ .toISOString()
502
+ .replace("T", " ")
503
+ .slice(0, 19);
504
+ let wroteRowCount = 0;
505
+ try {
506
+ const row = this.db
507
+ .prepare(`SELECT COUNT(*) AS n FROM agent_actions
508
+ WHERE action_type = 'wiki.ingest_url'
509
+ AND source_kind = 'wiki'
510
+ AND source_ref = ?
511
+ AND result = 'success'
512
+ AND started_at >= ?`)
513
+ .get(workspace, windowStart);
514
+ wroteRowCount = row?.n ?? 0;
515
+ }
516
+ catch (err) {
517
+ logger.warn({ err, workspace, correlationId: event.correlationId }, "wiki.ingest_url write-verification query failed — forwarding the agent's DM unchanged");
518
+ return output;
519
+ }
520
+ if (wroteRowCount > 0)
521
+ return output;
522
+ logger.warn({
523
+ eventType: event.type,
524
+ correlationId: event.correlationId,
525
+ workspace,
526
+ url,
527
+ windowStart,
528
+ originalOutput: output.slice(0, 240),
529
+ }, "wiki.ingest_url session completed but no Wiki API write was recorded — rewriting the agent's completion DM");
530
+ return `Failed ${url ?? "<url>"} — agent reported completion but no raw note was POSTed via the Wiki API; the vault is unchanged.`;
531
+ }
532
+ }
533
+ //# sourceMappingURL=dispatcher-result-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher-result-processor.js","sourceRoot":"","sources":["../../src/core/dispatcher-result-processor.ts"],"names":[],"mappings":"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"}