@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,367 @@
1
+ /**
2
+ * `<acquisition-plan>` block assembly for the routine pre-pass fetcher.
3
+ *
4
+ * ROUTINE_DATA_ACQUISITION_DESIGN.md §6.4 / F5 — pure helper that the
5
+ * routine dispatchers (Phase 4) call to render the XML block the
6
+ * `routine.fetch_window` session reads. Stays I/O-free so it can be
7
+ * tested in isolation against synthetic integration state.
8
+ *
9
+ * The block lists one `<fetch>` element per (integration × mode × account)
10
+ * combination implied by `ROUTINE_WINDOWS[routine]` and the current
11
+ * integration state. Disabled integrations, unmapped query cells, and
12
+ * native bindings whose backend does not match the session are skipped.
13
+ *
14
+ * Output shape (§6.4 example, but with substituted timestamps and the
15
+ * resolved mode-suffix the partial filters on):
16
+ *
17
+ * ```xml
18
+ * <acquisition-plan routine="morning_routine" agent_day="2026-05-11">
19
+ * <fetch integration="gmail" mode="direct" window="inbox_today"
20
+ * account="alice@gmail.com" query="?days=1&amp;limit=20" />
21
+ * ...
22
+ * </acquisition-plan>
23
+ * ```
24
+ */
25
+ import { INTEGRATION_KEYS, getAgentDayBoundsUtc, getIntegrationDescriptor, parseSqliteUtcMs, } from "@aitne/shared";
26
+ import { ROUTINE_WINDOWS, WINDOW_QUERIES, } from "./routine-windows.js";
27
+ /**
28
+ * Compute the timestamp set the assembly helper uses. Anchors to the
29
+ * agent-day boundary `dayBoundaryHour` (configurable; the daemon's
30
+ * config default is 4 = 04:00 local per CLAUDE.md), so
31
+ * `day_start_iso` matches the same UTC instant `getAgentDayBoundsUtc`
32
+ * uses everywhere else in the daemon.
33
+ *
34
+ * The parameter has no built-in default — callers MUST thread
35
+ * `config.dayBoundaryHour` through so a future config change does not
36
+ * silently desync this layer from the rest of the daemon. Tests can
37
+ * pass `0` for stable arithmetic against a UTC fixture.
38
+ */
39
+ export function buildAcquisitionTimestamps(now, timezone, dayBoundaryHour) {
40
+ const bounds = getAgentDayBoundsUtc(timezone, dayBoundaryHour, now);
41
+ const dayStartMs = parseSqliteUtcMs(bounds.start);
42
+ const dayEndMs = dayStartMs + 24 * 60 * 60 * 1000;
43
+ const day48Ms = dayStartMs + 48 * 60 * 60 * 1000;
44
+ const weekStartMs = dayStartMs - 7 * 24 * 60 * 60 * 1000;
45
+ const weekEndMs = dayStartMs + 7 * 24 * 60 * 60 * 1000;
46
+ const monthEndMs = dayStartMs + 30 * 24 * 60 * 60 * 1000;
47
+ const nowMs = now.getTime();
48
+ const hourStartMs = nowMs - (nowMs % (60 * 60 * 1000));
49
+ const plus2hMs = nowMs + 2 * 60 * 60 * 1000;
50
+ const dateOnly = (ms) => new Date(ms).toISOString().slice(0, 10);
51
+ return {
52
+ now_iso: new Date(nowMs).toISOString(),
53
+ hour_start_iso: new Date(hourStartMs).toISOString(),
54
+ day_start_iso: new Date(dayStartMs).toISOString(),
55
+ day_end_iso: new Date(dayEndMs).toISOString(),
56
+ day_plus_24h: new Date(dayEndMs).toISOString(),
57
+ day_plus_48h: new Date(day48Ms).toISOString(),
58
+ day_plus_2h: new Date(plus2hMs).toISOString(),
59
+ week_start_iso: new Date(weekStartMs).toISOString(),
60
+ week_end_iso: new Date(weekEndMs).toISOString(),
61
+ month_end_iso: new Date(monthEndMs).toISOString(),
62
+ day_start_date: dateOnly(dayStartMs),
63
+ week_start_date: dateOnly(weekStartMs),
64
+ now_date: dateOnly(nowMs),
65
+ };
66
+ }
67
+ // ── Internal helpers ───────────────────────────────────────────────────────
68
+ /**
69
+ * The integrations a window symbol applies to. Used to map a routine's
70
+ * `RoutineWindowSpec.kind` onto concrete integration keys. Walking
71
+ * `WINDOW_QUERIES[symbol]` keeps the catalog as the single source of
72
+ * truth — no hardcoded "mail → gmail+outlook_mail" mapping here.
73
+ */
74
+ function integrationsForWindow(symbol) {
75
+ return Object.keys(WINDOW_QUERIES[symbol] ?? {});
76
+ }
77
+ /**
78
+ * Resolve the integration's runtime mode to the predicate string the
79
+ * partial filters on. Returns `null` when the row should be skipped
80
+ * (disabled, missing state, native binding on a different backend).
81
+ *
82
+ * §6.8 / §3 glossary — for `userManagedConnector` integrations
83
+ * (today: `outlook_mail`, `outlook_calendar`) the daemon ships no
84
+ * `/api/integrations/<key>/exec` proxy, so `delegated-cross` is
85
+ * unreachable. The dispatcher MUST collapse cross-backend delegated to
86
+ * `delegated-same` for these descriptors — the only viable path is
87
+ * the session backend's own MCP, identical to same-backend. Without
88
+ * this collapse, the partial's `delegated-cross` defensive guard
89
+ * fires every tick instead of remaining dormant.
90
+ */
91
+ function resolveFetchMode(integration, state, sessionBackend) {
92
+ if (!state)
93
+ return null;
94
+ switch (state.mode) {
95
+ case "direct":
96
+ return "direct";
97
+ case "delegated":
98
+ if (state.delegatedBackend === sessionBackend) {
99
+ return "delegated-same";
100
+ }
101
+ // Cross-backend delegated requires a non-null `delegatedBackend`.
102
+ // Missing binding ≈ misconfiguration → skip.
103
+ if (state.delegatedBackend !== null
104
+ && state.delegatedBackend !== undefined) {
105
+ // User-managed integrations have no daemon proxy; collapse to
106
+ // same-backend so the partial body's main delegated-same prose
107
+ // runs instead of its defensive delegated-cross fallback.
108
+ if (getIntegrationDescriptor(integration).userManagedConnector === true) {
109
+ return "delegated-same";
110
+ }
111
+ return "delegated-cross";
112
+ }
113
+ return null;
114
+ case "native":
115
+ // Native binding must match the session backend. Otherwise the
116
+ // partial's `mode:native:<key>` block would be filtered out by
117
+ // `applyIntegrationModeFilter` anyway — skip the row to avoid
118
+ // emitting a `<fetch>` that no branch can handle.
119
+ if (state.nativeBackend === sessionBackend)
120
+ return "native";
121
+ return null;
122
+ case "disabled":
123
+ return null;
124
+ default:
125
+ return null;
126
+ }
127
+ }
128
+ /**
129
+ * Resolve the WINDOW_QUERIES cell for a (symbol, integration, mode)
130
+ * tuple. delegated-same / delegated-cross both look up "delegated" in
131
+ * the catalog; the predicate distinction is only meaningful at the
132
+ * partial-filtering layer.
133
+ */
134
+ function lookupQuery(symbol, integration, fetchMode) {
135
+ const catalog = WINDOW_QUERIES[symbol]?.[integration];
136
+ if (!catalog)
137
+ return undefined;
138
+ if (fetchMode === "delegated-same" || fetchMode === "delegated-cross") {
139
+ return catalog.delegated;
140
+ }
141
+ return catalog[fetchMode];
142
+ }
143
+ /**
144
+ * Substitute `{token}` placeholders in a query string with the
145
+ * pre-computed timestamps. Unknown tokens are left verbatim — they will
146
+ * surface as `{foo}` in the rendered prompt, which is visible failure
147
+ * (the partial author can grep for `{` in their query).
148
+ */
149
+ export function substituteAcquisitionTokens(query, timestamps) {
150
+ return query.replace(/\{([a-z_][a-z0-9_]*)\}/g, (match, name) => {
151
+ const value = timestamps[name];
152
+ return value ?? match;
153
+ });
154
+ }
155
+ /**
156
+ * Attribute escaping for non-query `<fetch>` attribute values
157
+ * (`integration`, `mode`, `window`, `account`, `label`, and the
158
+ * block's `routine` / `agent_day`). These are short tokens drawn
159
+ * from controlled vocabularies; the conventional XML escape set
160
+ * keeps them robust against future authors who slip a special
161
+ * character in.
162
+ */
163
+ function xmlAttr(value) {
164
+ return value
165
+ .replace(/&/g, "&amp;")
166
+ .replace(/"/g, "&quot;")
167
+ .replace(/</g, "&lt;")
168
+ .replace(/>/g, "&gt;");
169
+ }
170
+ /**
171
+ * Escaping for the `<fetch query='…'>` attribute, which uses
172
+ * single-quote delimiters so URL query strings can be rendered
173
+ * verbatim.
174
+ *
175
+ * The consumer of this block is the LLM, not an XML parser — the
176
+ * agent is told to use the `query` attribute literally as a URL
177
+ * query string (`GET .../messages<query>`) or as MCP-tool arguments
178
+ * (`q="newer_than:1d"`). Two characters in our catalog would
179
+ * otherwise need entity-decode steps the agent must remember:
180
+ * - `&` separates URL query parameters (`?a=1&b=2`),
181
+ * - `"` wraps Gmail / Calendar MCP query expressions
182
+ * (`q="newer_than:1d"`, `timeMin="…"`).
183
+ *
184
+ * Single-quote delimiters let us keep both literal. The only
185
+ * character that would now break the attribute structure is `'`,
186
+ * which no query in `WINDOW_QUERIES` uses today. We escape `'` and
187
+ * `<` / `>` defensively for any future catalog author who uses
188
+ * them.
189
+ */
190
+ function xmlQueryAttr(value) {
191
+ return value
192
+ .replace(/'/g, "&apos;")
193
+ .replace(/</g, "&lt;")
194
+ .replace(/>/g, "&gt;");
195
+ }
196
+ function renderFetchRow(row) {
197
+ const parts = [
198
+ `integration="${xmlAttr(row.integration)}"`,
199
+ `mode="${xmlAttr(row.mode)}"`,
200
+ `window="${xmlAttr(row.window)}"`,
201
+ ];
202
+ if (row.accountId !== undefined) {
203
+ parts.push(`account="${xmlAttr(row.accountId)}"`);
204
+ }
205
+ if (row.label !== undefined) {
206
+ parts.push(`label="${xmlAttr(row.label)}"`);
207
+ }
208
+ // Single-quote delimiter on `query=` — see `xmlQueryAttr` rationale.
209
+ parts.push(`query='${xmlQueryAttr(row.query)}'`);
210
+ return ` <fetch ${parts.join(" ")} />`;
211
+ }
212
+ // ── Row collection (shared by buildAcquisitionPlan + splitAcquisitionPlanByIntegration) ──
213
+ /**
214
+ * Resolve every `<fetch>` row implied by `input` from the routine
215
+ * catalog + integration state. Pure, deterministic, ordering-stable —
216
+ * the loop walks `ROUTINE_WINDOWS[routine]` in spec order, then
217
+ * `WINDOW_QUERIES[symbol]` key order. Both consumers (`buildAcquisitionPlan`
218
+ * and `splitAcquisitionPlanByIntegration`) share this so the rendered
219
+ * monolithic block and the union of per-integration sub-plan blocks
220
+ * carry bit-identical row sequences.
221
+ */
222
+ function collectFetchRows(input) {
223
+ const rows = [];
224
+ const specs = ROUTINE_WINDOWS[input.routine];
225
+ for (const spec of specs) {
226
+ const integrations = integrationsForWindow(spec.window);
227
+ for (const integration of integrations) {
228
+ const state = input.integrations[integration];
229
+ const fetchMode = resolveFetchMode(integration, state, input.sessionBackend);
230
+ if (fetchMode === null)
231
+ continue;
232
+ const queryTemplate = lookupQuery(spec.window, integration, fetchMode);
233
+ if (queryTemplate === undefined)
234
+ continue;
235
+ const query = substituteAcquisitionTokens(queryTemplate, input.timestamps);
236
+ // perAccount fan-out is meaningful only in `direct` mode, where the
237
+ // daemon stores per-account OAuth tokens and polls each. In
238
+ // `delegated-same` / `delegated-cross` / `native` the integration's
239
+ // bound MCP authenticates as a single user, and `mail_accounts` in
240
+ // the daemon DB is intentionally empty — fanning out would produce
241
+ // zero rows and silently skip the pre-pass entirely (the failure
242
+ // mode that left Sonnet doing both fetch and synthesis in one run
243
+ // and hitting `routine.morning_routine`'s $1 budget cap). Emit one
244
+ // shared row for non-direct modes; the partial body substitutes
245
+ // `"default"` for the missing `<accountId>` in the observation
246
+ // contract. Same pattern as the userManagedConnector
247
+ // delegated-cross → delegated-same collapse in `resolveFetchMode`:
248
+ // the dispatcher folds away configurations that have no real wire
249
+ // surface so the partials never need to defend against them.
250
+ if (spec.perAccount && fetchMode === "direct") {
251
+ const accountRows = input.accounts.filter((a) => a.integration === integration);
252
+ for (const account of accountRows) {
253
+ rows.push({
254
+ integration,
255
+ mode: fetchMode,
256
+ window: spec.window,
257
+ accountId: account.accountId,
258
+ label: account.label,
259
+ query,
260
+ });
261
+ }
262
+ }
263
+ else {
264
+ rows.push({
265
+ integration,
266
+ mode: fetchMode,
267
+ window: spec.window,
268
+ query,
269
+ });
270
+ }
271
+ }
272
+ }
273
+ return rows;
274
+ }
275
+ /**
276
+ * Render the `<acquisition-plan>` wrapper around a row sequence.
277
+ * `scoped` is an optional fan-out debugging affordance — when set, the
278
+ * block's element carries a `scoped="<key>"` attribute so a sub-plan is
279
+ * visually distinguishable from a full plan in the daemon log and in
280
+ * test fixtures. The partials ignore the attribute.
281
+ */
282
+ function renderAcquisitionPlanBlock(routine, agentDay, rows, scoped) {
283
+ // Strip the `routine.` prefix in the attribute for compactness; the
284
+ // surrounding daemon log carries the full ProcessKey.
285
+ const routineAttr = routine.replace(/^routine\./, "");
286
+ const openParts = [
287
+ `routine="${xmlAttr(routineAttr)}"`,
288
+ `agent_day="${xmlAttr(agentDay)}"`,
289
+ ];
290
+ if (scoped !== undefined) {
291
+ openParts.push(`scoped="${xmlAttr(scoped)}"`);
292
+ }
293
+ const lines = [
294
+ `<acquisition-plan ${openParts.join(" ")}>`,
295
+ ...rows.map(renderFetchRow),
296
+ "</acquisition-plan>",
297
+ ];
298
+ return lines.join("\n");
299
+ }
300
+ // ── Public entry point ────────────────────────────────────────────────────
301
+ /**
302
+ * Build the `<acquisition-plan>` block string for a routine.
303
+ *
304
+ * Pure function: deterministic for a given input. Returns the rendered
305
+ * XML even when no rows survive — an empty plan still gives the
306
+ * pre-pass an explicit "nothing to do" signal rather than the absence
307
+ * of a block.
308
+ */
309
+ export function buildAcquisitionPlan(input) {
310
+ const rows = collectFetchRows(input);
311
+ return renderAcquisitionPlanBlock(input.routine, input.agentDay, rows);
312
+ }
313
+ /**
314
+ * Partition a routine's acquisition plan into one sub-plan per active
315
+ * `IntegrationKey`. Pure helper consumed by the fan-out coordinator
316
+ * (Phase 1). Returns:
317
+ *
318
+ * - An empty array when no integration is active for the routine
319
+ * (every cell skipped — caller short-circuits to `status="skipped"`).
320
+ * - One `AcquisitionSubPlan` per integration that contributes ≥ 1 row.
321
+ *
322
+ * **Ordering invariant.** Sub-plans are sorted by `INTEGRATION_KEYS`
323
+ * enumeration order regardless of the order rows appear in
324
+ * `ROUTINE_WINDOWS`. The coordinator's `Promise.all` + `mergeSubReports`
325
+ * pipeline preserves the ordering downstream so daemon logs and test
326
+ * fixtures are stable across runs.
327
+ *
328
+ * **Row preservation.** Each sub-plan's `block` is rendered through the
329
+ * same `renderAcquisitionPlanBlock` helper that backs `buildAcquisitionPlan`,
330
+ * so the union of sub-plan rows equals `buildAcquisitionPlan(input)`'s
331
+ * rows row-for-row (same attribute order, same query substitution, same
332
+ * perAccount fan-out). The only differences are the per-block wrapper's
333
+ * `scoped="<key>"` attribute and the partition itself.
334
+ */
335
+ export function splitAcquisitionPlanByIntegration(input) {
336
+ const rows = collectFetchRows(input);
337
+ if (rows.length === 0)
338
+ return [];
339
+ // Group rows by integration while keeping insertion order inside each
340
+ // group (the `ROUTINE_WINDOWS` walk order from `collectFetchRows`).
341
+ const groups = new Map();
342
+ for (const row of rows) {
343
+ const existing = groups.get(row.integration);
344
+ if (existing) {
345
+ existing.push(row);
346
+ }
347
+ else {
348
+ groups.set(row.integration, [row]);
349
+ }
350
+ }
351
+ // Emit sub-plans in `INTEGRATION_KEYS` enumeration order — deterministic
352
+ // resolution order per §4.6.
353
+ const out = [];
354
+ for (const key of INTEGRATION_KEYS) {
355
+ const groupRows = groups.get(key);
356
+ if (!groupRows || groupRows.length === 0)
357
+ continue;
358
+ out.push({
359
+ integrationKey: key,
360
+ block: renderAcquisitionPlanBlock(input.routine, input.agentDay, groupRows, key),
361
+ fetchRowCount: groupRows.length,
362
+ rowsHaveAccount: groupRows.some((r) => r.accountId !== undefined),
363
+ });
364
+ }
365
+ return out;
366
+ }
367
+ //# sourceMappingURL=routine-acquisition-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routine-acquisition-plan.js","sourceRoot":"","sources":["../../src/core/routine-acquisition-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,wBAAwB,EACxB,gBAAgB,GAIjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,cAAc,GAGf,MAAM,sBAAsB,CAAC;AAuF9B;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,0BAA0B,CACxC,GAAS,EACT,QAA4B,EAC5B,eAAuB;IAEvB,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAClD,MAAM,OAAO,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACjD,MAAM,WAAW,GAAG,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACzD,MAAM,SAAS,GAAG,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACvD,MAAM,UAAU,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACzD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAG,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC5C,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAU,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjF,OAAO;QACL,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;QACtC,cAAc,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE;QACnD,aAAa,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;QACjD,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;QAC7C,YAAY,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;QAC9C,YAAY,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE;QAC7C,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;QAC7C,cAAc,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE;QACnD,YAAY,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;QAC/C,aAAa,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;QACjD,cAAc,EAAE,QAAQ,CAAC,UAAU,CAAC;QACpC,eAAe,EAAE,QAAQ,CAAC,WAAW,CAAC;QACtC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,MAAoB;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,CAAqB,CAAC;AACvE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,gBAAgB,CACvB,WAA2B,EAC3B,KAAmC,EACnC,cAAyB;IAEzB,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW;YACd,IAAI,KAAK,CAAC,gBAAgB,KAAK,cAAc,EAAE,CAAC;gBAC9C,OAAO,gBAAgB,CAAC;YAC1B,CAAC;YACD,kEAAkE;YAClE,6CAA6C;YAC7C,IACE,KAAK,CAAC,gBAAgB,KAAK,IAAI;mBAC5B,KAAK,CAAC,gBAAgB,KAAK,SAAS,EACvC,CAAC;gBACD,8DAA8D;gBAC9D,+DAA+D;gBAC/D,0DAA0D;gBAC1D,IAAI,wBAAwB,CAAC,WAAW,CAAC,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;oBACxE,OAAO,gBAAgB,CAAC;gBAC1B,CAAC;gBACD,OAAO,iBAAiB,CAAC;YAC3B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,+DAA+D;YAC/D,+DAA+D;YAC/D,8DAA8D;YAC9D,kDAAkD;YAClD,IAAI,KAAK,CAAC,aAAa,KAAK,cAAc;gBAAE,OAAO,QAAQ,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,KAAK,UAAU;YACb,OAAO,IAAI,CAAC;QACd;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAClB,MAAoB,EACpB,WAA2B,EAC3B,SAA+B;IAE/B,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACtD,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,SAAS,KAAK,gBAAgB,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;QACtE,OAAO,OAAO,CAAC,SAAS,CAAC;IAC3B,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAa,EACb,UAAiC;IAEjC,OAAO,KAAK,CAAC,OAAO,CAClB,yBAAyB,EACzB,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QACtB,MAAM,KAAK,GAAI,UAA4D,CAAC,IAAI,CAAC,CAAC;QAClF,OAAO,KAAK,IAAI,KAAK,CAAC;IACxB,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAWD,SAAS,cAAc,CAAC,GAAa;IACnC,MAAM,KAAK,GAAa;QACtB,gBAAgB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG;QAC3C,SAAS,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG;QAC7B,WAAW,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG;KAClC,CAAC;IACF,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,qEAAqE;IACrE,KAAK,CAAC,IAAI,CAAC,UAAU,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjD,OAAO,YAAY,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1C,CAAC;AAED,4FAA4F;AAE5F;;;;;;;;GAQG;AACH,SAAS,gBAAgB,CAAC,KAAgC;IACxD,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,gBAAgB,CAChC,WAAW,EACX,KAAK,EACL,KAAK,CAAC,cAAc,CACrB,CAAC;YACF,IAAI,SAAS,KAAK,IAAI;gBAAE,SAAS;YAEjC,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;YACvE,IAAI,aAAa,KAAK,SAAS;gBAAE,SAAS;YAC1C,MAAM,KAAK,GAAG,2BAA2B,CAAC,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAE3E,oEAAoE;YACpE,4DAA4D;YAC5D,oEAAoE;YACpE,mEAAmE;YACnE,mEAAmE;YACnE,iEAAiE;YACjE,kEAAkE;YAClE,mEAAmE;YACnE,gEAAgE;YAChE,+DAA+D;YAC/D,qDAAqD;YACrD,mEAAmE;YACnE,kEAAkE;YAClE,6DAA6D;YAC7D,IAAI,IAAI,CAAC,UAAU,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC9C,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CACrC,CAAC;gBACF,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;oBAClC,IAAI,CAAC,IAAI,CAAC;wBACR,WAAW;wBACX,IAAI,EAAE,SAAS;wBACf,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,KAAK;qBACN,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC;oBACR,WAAW;oBACX,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,0BAA0B,CACjC,OAAyB,EACzB,QAAgB,EAChB,IAAyB,EACzB,MAAuB;IAEvB,oEAAoE;IACpE,sDAAsD;IACtD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG;QAChB,YAAY,OAAO,CAAC,WAAW,CAAC,GAAG;QACnC,cAAc,OAAO,CAAC,QAAQ,CAAC,GAAG;KACnC,CAAC;IACF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,SAAS,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,KAAK,GAAG;QACZ,qBAAqB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;QAC3C,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;QAC3B,qBAAqB;KACtB,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,6EAA6E;AAE7E;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAgC;IACnE,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,0BAA0B,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACzE,CAAC;AAiCD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,iCAAiC,CAC/C,KAAgC;IAEhC,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,sEAAsE;IACtE,oEAAoE;IACpE,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8B,CAAC;IACrD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,6BAA6B;IAC7B,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACnD,GAAG,CAAC,IAAI,CAAC;YACP,cAAc,EAAE,GAAG;YACnB,KAAK,EAAE,0BAA0B,CAC/B,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,QAAQ,EACd,SAAS,EACT,GAAG,CACJ;YACD,aAAa,EAAE,SAAS,CAAC,MAAM;YAC/B,eAAe,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC;SAClE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Retry-policy helpers for the pre-pass fan-out coordinator.
3
+ *
4
+ * PRE_PASS_FAN_OUT_DESIGN.md §4.4 — the coordinator spawns a fresh Haiku
5
+ * sub-session per attempt and consults `defaultRetryDecision` (or any
6
+ * `RetryDecisionFn`) between attempts to choose whether to spawn the
7
+ * next one. Keeping the policy as pure data (decision matrix in
8
+ * TypeScript, not in agent prose) makes the loop deterministic,
9
+ * testable, and free of per-model variance.
10
+ *
11
+ * Phase 0 ships these helpers + their unit tests. The fan-out
12
+ * coordinator that consumes them lands in Phase 1.
13
+ */
14
+ import type { IntegrationKey } from "@aitne/shared";
15
+ import type { SubAttemptRecord } from "./routine-fetch-window-runner.js";
16
+ /**
17
+ * One pre-pass retry chain's policy. The runner constructs this from
18
+ * `AgentConfig.prePass*` knobs (Phase 1) and passes it through every
19
+ * `defaultRetryDecision` call.
20
+ */
21
+ export interface RetryPolicy {
22
+ /** Cap on attempts per integration. Default 3 per §6 config table. */
23
+ maxAttempts: number;
24
+ /**
25
+ * Backoff between attempts, indexed by attempt number minus 1.
26
+ * Length MUST equal `maxAttempts - 1`. Default `[1000, 2000, 4000]`.
27
+ */
28
+ backoffMs: readonly number[];
29
+ /** Per-integration cumulative cost cap across attempts. Default 0.60 USD. */
30
+ perIntegrationBudgetUsd: number;
31
+ /**
32
+ * Optional decision override. The coordinator passes this through to
33
+ * unit tests / fixtures; production code uses `defaultRetryDecision`.
34
+ */
35
+ retryOn?: RetryDecisionFn;
36
+ /**
37
+ * Runtime knob for the partial-with-no-post branch. Defaults to true
38
+ * when omitted so existing tests and callers keep the §4.4 matrix.
39
+ */
40
+ retryOnPartial?: boolean;
41
+ }
42
+ /**
43
+ * Decision returned by a `RetryDecisionFn`. `reason` flows into the
44
+ * `agent_actions.detail.prePass.retryReason` field so the audit feed
45
+ * carries a human-grokkable trail of why each attempt fired (or didn't).
46
+ */
47
+ export interface RetryDecision {
48
+ retry: boolean;
49
+ /** Short, stable identifier — used in audit rows, not user-facing prose. */
50
+ reason: string;
51
+ }
52
+ /**
53
+ * Decision-function signature. The coordinator invokes this AFTER
54
+ * recording the latest attempt and BEFORE applying backoff for the next
55
+ * attempt. `priorAttempts` excludes the current `report` so callers
56
+ * computing cumulative cost can include `report.costUsd` themselves.
57
+ */
58
+ export type RetryDecisionFn = (report: SubAttemptRecord, attempt: number, policy: RetryPolicy, priorAttempts: readonly SubAttemptRecord[]) => RetryDecision;
59
+ /**
60
+ * Stable reason identifiers. Centralised so the dashboard / audit feed
61
+ * can render them consistently and so test assertions don't drift from
62
+ * runtime values.
63
+ */
64
+ export declare const RETRY_REASONS: {
65
+ readonly MAX_ATTEMPTS: "max-attempts-reached";
66
+ readonly BUDGET_CAP: "per-integration-budget-cap";
67
+ readonly FLIP_LOCKED: "flip-locked";
68
+ readonly BUDGET_EXHAUSTED: "budget-exhausted";
69
+ readonly AUTH_FAILED: "auth-failed";
70
+ readonly FAILED_STATUS: "failed-status";
71
+ readonly UPSTREAM_5XX: "upstream-5xx";
72
+ readonly PARTIAL_NO_POST: "partial-no-post";
73
+ readonly SUCCESS: "success";
74
+ readonly PARTIAL_WITH_POST: "partial-with-progress";
75
+ readonly SKIPPED: "skipped";
76
+ readonly NO_PROGRESS: "no-progress";
77
+ };
78
+ /**
79
+ * Sum the cost across `priorAttempts` + the current `report`. Pure;
80
+ * exported for unit testing the budget-cap branch in isolation.
81
+ */
82
+ export declare function cumulativeAttemptCost(report: SubAttemptRecord, priorAttempts: readonly SubAttemptRecord[]): number;
83
+ /**
84
+ * Default retry policy from §4.4. Pure: decision is fully determined by
85
+ * the inputs, no side effects, no shared state. Decision order:
86
+ *
87
+ * 1. Attempts cap (no retry, reason `max-attempts-reached`).
88
+ * 2. Per-integration cumulative budget cap.
89
+ * 3. Terminal error classes — flip-lock, budget-exhausted, auth (401/403).
90
+ * 4. Retry-worthy outcomes — failed status, upstream 5xx, partial-no-post.
91
+ * 5. Non-retry-by-default — success, partial-with-progress, skipped, no-progress.
92
+ *
93
+ * The motivating §1.1 failure ("Unknown name &quot;limit&quot;") lands
94
+ * as `status="partial"` with `fetched > 0`, `posted === 0` and a
95
+ * `fetch-failed` error — rule (4)'s `partial-no-post` branch catches it.
96
+ */
97
+ export declare const defaultRetryDecision: RetryDecisionFn;
98
+ /**
99
+ * Render the `<prior_attempt_error>` block sequence injected into a
100
+ * sub-session's prompt on attempt > 1. Returns the empty string when
101
+ * `attempts` is empty so callers can unconditionally concatenate the
102
+ * result.
103
+ *
104
+ * **Ordering.** Newest first — attempt N (most recent) appears before
105
+ * attempt N-1, etc. The model reads the most-recent failure top of
106
+ * page; deeper history is context-only.
107
+ */
108
+ export declare function buildPriorAttemptHintBlock(attempts: readonly SubAttemptRecord[], integrationKey?: IntegrationKey): string;
109
+ //# sourceMappingURL=routine-fetch-window-retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routine-fetch-window-retry.d.ts","sourceRoot":"","sources":["../../src/core/routine-fetch-window-retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAIzE;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,6EAA6E;IAC7E,uBAAuB,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,SAAS,gBAAgB,EAAE,KACvC,aAAa,CAAC;AAInB;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;CAahB,CAAC;AAEX;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,gBAAgB,EACxB,aAAa,EAAE,SAAS,gBAAgB,EAAE,GACzC,MAAM,CAIR;AAmBD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAmElC,CAAC;AA+EF;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EACrC,cAAc,CAAC,EAAE,cAAc,GAC9B,MAAM,CAMR"}