@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 @@
1
+ {"version":3,"file":"output-language-policy.js","sourceRoot":"","sources":["../../src/core/output-language-policy.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  * Flows are injected as part of the user message by the dispatcher.
8
8
  * The {context} placeholder is replaced with the ContextBuilder output.
9
9
  */
10
- import { type IntegrationKey, type IntegrationState } from "@aitne/shared";
10
+ import { type BackendId, type IntegrationKey, type IntegrationState } from "@aitne/shared";
11
11
  /**
12
12
  * Initialize the task-flow loader.
13
13
  *
@@ -37,6 +37,8 @@ export declare function resetTaskFlowsForTest(): void;
37
37
  * treats null as "no override layer present".
38
38
  */
39
39
  export declare function getUserTaskFlowsDir(): string | null;
40
+ export declare function expandPartialIncludes(content: string): string;
41
+ export declare function renderPartialForFanOut(filename: string, integrations: Partial<Record<IntegrationKey, IntegrationState>>, backendId: BackendId): string;
40
42
  /**
41
43
  * Get the task flow template for a given event type.
42
44
  *
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAavB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAI1E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C;AAgBD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEnD;AAuED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,GAC/D,MAAM,CAWR;AAuBD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,kBAAkB,CAAC,EAAE;QACnB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC;CAC7D,GACL,MAAM,CAoBR;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,aAAa,IAAI,iBAAiB,EAAE,CAWnD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAChD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAcA"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAcvB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAI1E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C;AAgBD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEnD;AA+JD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAU7D;AAkCD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,EAC/D,SAAS,EAAE,SAAS,GACnB,MAAM,CAMR;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,GAC/D,MAAM,CA2BR;AAuBD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,kBAAkB,CAAC,EAAE;QACnB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC;CAC7D,GACL,MAAM,CAoBR;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,aAAa,IAAI,iBAAiB,EAAE,CAWnD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAChD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAcA"}
@@ -13,6 +13,7 @@ import { fileURLToPath } from "node:url";
13
13
  import { applyIntegrationModeFilter, isCustomRoutineKey, selectTaskFlowVariantSuffix, substituteBrandTokens, } from "@aitne/shared";
14
14
  import { appendPolicyBlocks, createPromptInjectionBudget, } from "./policy-files.js";
15
15
  import { appendReviewContextBlocks } from "./review-context.js";
16
+ import { substituteIntegrationRoutingTables } from "./management-md.js";
16
17
  const __dirname = dirname(fileURLToPath(import.meta.url));
17
18
  let taskFlowsDir = null;
18
19
  let userTaskFlowsDir = null;
@@ -124,11 +125,152 @@ function loadFlowVariant(eventType, backendId, integrations) {
124
125
  if (suffix !== "direct") {
125
126
  const variant = readFlowFile(`${eventType}.${suffix}.md`);
126
127
  if (variant !== null)
127
- return variant;
128
+ return expandTaskFlowPartials(variant, eventType);
128
129
  }
129
130
  // Fall back to the canonical file (covers direct mode and missing variants)
130
131
  return loadFlow(eventType);
131
132
  }
133
+ /**
134
+ * INTEGRATION_NATIVE_MODE_DESIGN.md §8.2 — a task-flow variant may
135
+ * include the canonical base flow via the `{{> base }}` directive,
136
+ * mirroring `renderPartialIncludes` for skills (skills-compiler.ts:1296).
137
+ * The directive is replaced with the body of `<eventType>.md` with the
138
+ * leading `{context}\n\n` block stripped — the variant carries its own
139
+ * `{context}` at the top, and duplicating the token would double the
140
+ * context-builder output once `resolveTemplate` fills both occurrences.
141
+ *
142
+ * Missing / empty base flow → directive collapses to the empty string
143
+ * (mirrors `renderPartialIncludes`'s missing-base behaviour). Pure
144
+ * function on the file content; no caching beyond the loader's existing
145
+ * `flowCache`.
146
+ */
147
+ function expandTaskFlowPartials(content, eventType) {
148
+ if (!content.includes("{{> base }}"))
149
+ return content;
150
+ // Resolve against the BUNDLED base file only — the user-override
151
+ // resolution layer is one-way (variants may override; partial includes
152
+ // pin to canonical assets so a malformed override doesn't cascade into
153
+ // every variant that includes it). This matches the skill partial
154
+ // resolver's "read from src verbatim" stance (skills-compiler.ts:612).
155
+ const dir = resolveTaskFlowsDir();
156
+ const basePath = join(dir, `${eventType}.md`);
157
+ if (!existsSync(basePath))
158
+ return content.replaceAll("{{> base }}", "");
159
+ const baseRaw = substituteBrandTokens(readFileSync(basePath, "utf-8"));
160
+ // Strip the leading `{context}\n\n` (or `{context}\n` for unix-style
161
+ // files that omit the second newline) so the merged body has exactly
162
+ // one context block at the very top — the one the variant author put
163
+ // there. Anchored at start with `^` so a `{context}` token appearing
164
+ // mid-flow (none today, but defensive) is preserved.
165
+ const baseStripped = baseRaw.replace(/^\{context\}\n\n?/, "");
166
+ return content.replaceAll("{{> base }}", baseStripped);
167
+ }
168
+ /**
169
+ * ROUTINE_DATA_ACQUISITION_DESIGN.md Phase 1 / F0 — resolve
170
+ * `{include:_partials/<name>.md}` directives in a task-flow body by
171
+ * inlining the verbatim contents of `agent-assets/task-flows/_partials/
172
+ * <name>.md`. Runs BEFORE `applyIntegrationModeFilter` so any
173
+ * `<!-- mode:...:... -->` blocks the partial carries are filtered
174
+ * normally for the current integration state.
175
+ *
176
+ * Behaviour:
177
+ * - Partials live at `agent-assets/task-flows/_partials/`. The
178
+ * user-override layer (`<dataDir>/task-flows/_partials/`) wins per
179
+ * file, matching `readFlowFile`'s contract.
180
+ * - The leading YAML frontmatter block (`---\n…\n---\n`) is stripped
181
+ * so authors may carry editorial metadata in partials without it
182
+ * leaking into the prompt body.
183
+ * - **Depth cap = 1.** Includes inside an included partial are NOT
184
+ * expanded — the include directive there is left visible so a
185
+ * runaway recursion shows up as a verbatim `{include:...}` token in
186
+ * the rendered prompt rather than silently looping. Tests / authors
187
+ * can grep for the directive to detect cycles.
188
+ * - Missing partials collapse to the empty string, matching
189
+ * `{{> base }}`'s missing-base behaviour. The lint pass (R2/F8)
190
+ * catches references to non-existent partials at test time.
191
+ * - Filename safety: `<name>` is constrained to
192
+ * `[A-Za-z0-9][A-Za-z0-9._-]*` — no slashes, no `..` — so an attacker
193
+ * or buggy authoring tool cannot path-traverse out of `_partials/`.
194
+ * Directives with invalid names are left verbatim, which means the
195
+ * raw token shows up in the prompt (visible failure) rather than
196
+ * silently disappearing.
197
+ */
198
+ const PARTIAL_INCLUDE_RE = /\{include:_partials\/([A-Za-z0-9][A-Za-z0-9._-]*\.md)\}/g;
199
+ const FRONTMATTER_STRIP_RE = /^---\r?\n[\s\S]*?\r?\n---\r?\n?/;
200
+ function readPartialFile(name) {
201
+ // User-override layer first (mirrors readFlowFile). The file lives at
202
+ // `<dataDir>/task-flows/_partials/<name>` — same nesting as the
203
+ // bundled layout so an author can override one partial without
204
+ // disturbing the rest.
205
+ if (userTaskFlowsDir) {
206
+ const userPath = join(userTaskFlowsDir, "_partials", name);
207
+ if (existsSync(userPath)) {
208
+ try {
209
+ return substituteBrandTokens(readFileSync(userPath, "utf-8"));
210
+ }
211
+ catch {
212
+ // Corrupt override falls through to the bundled file.
213
+ }
214
+ }
215
+ }
216
+ const bundledPath = join(resolveTaskFlowsDir(), "_partials", name);
217
+ if (!existsSync(bundledPath))
218
+ return null;
219
+ return substituteBrandTokens(readFileSync(bundledPath, "utf-8"));
220
+ }
221
+ export function expandPartialIncludes(content) {
222
+ if (!content.includes("{include:_partials/"))
223
+ return content;
224
+ return content.replace(PARTIAL_INCLUDE_RE, (_match, filename) => {
225
+ const raw = readPartialFile(filename);
226
+ if (raw === null)
227
+ return "";
228
+ // Strip leading frontmatter block, then trim a single trailing
229
+ // newline so the substitution doesn't accumulate blank-line drift
230
+ // across multiple sibling includes.
231
+ return raw.replace(FRONTMATTER_STRIP_RE, "").replace(/\n+$/, "\n");
232
+ });
233
+ }
234
+ /**
235
+ * PRE_PASS_FAN_OUT_DESIGN.md §4.2 Path (a) — load a single
236
+ * `_partials/<name>.md` body for runner-side substitution into the
237
+ * `{integration_partial}` placeholder of `routine.fetch_window.md`.
238
+ * Reuses the same lookup as `expandPartialIncludes` (user-override →
239
+ * bundled, brand-token substitution, frontmatter strip, single-newline
240
+ * tail) so authoring conventions stay consistent across the two
241
+ * consumers.
242
+ *
243
+ * The runner passes a per-integration slice of the integrations
244
+ * snapshot so the partial's `<!-- mode:...:... -->` blocks collapse to
245
+ * the single branch that applies to this sub-session's
246
+ * `(integration, mode)` cell. Filtering happens here, not after
247
+ * substitution, because the surrounding `routine.fetch_window.md` body
248
+ * has already been through `applyIntegrationModeFilter` via the
249
+ * standard `getTaskFlow` path — running the filter again on the merged
250
+ * string would be a no-op for the host body but could mis-fire if a
251
+ * partial used `<!-- mode:... -->` markers for an integration other
252
+ * than its own (the partials lint forbids that, but the defence keeps
253
+ * the runner robust to future authoring drift).
254
+ *
255
+ * Missing partials collapse to the empty string (mirroring
256
+ * `expandPartialIncludes`'s missing-partial behaviour); the
257
+ * `routine-partials.test.ts` lint catches references to non-existent
258
+ * partials at test time so this never fires in a healthy build.
259
+ *
260
+ * Filename safety: same `[A-Za-z0-9][A-Za-z0-9._-]*` constraint as the
261
+ * include directive — a malformed name returns the empty string
262
+ * instead of path-traversing out of `_partials/`.
263
+ */
264
+ const PARTIAL_FILENAME_RE = /^[A-Za-z0-9][A-Za-z0-9._-]*\.md$/;
265
+ export function renderPartialForFanOut(filename, integrations, backendId) {
266
+ if (!PARTIAL_FILENAME_RE.test(filename))
267
+ return "";
268
+ const raw = readPartialFile(filename);
269
+ if (raw === null)
270
+ return "";
271
+ const stripped = raw.replace(FRONTMATTER_STRIP_RE, "").replace(/\n+$/, "\n");
272
+ return applyIntegrationModeFilter(stripped, integrations, backendId);
273
+ }
132
274
  /**
133
275
  * Get the task flow template for a given event type.
134
276
  *
@@ -151,14 +293,30 @@ export function getTaskFlow(eventType, backendId, integrations) {
151
293
  const raw = resolveTaskFlowSource(eventType, backendId, integrations);
152
294
  if (!raw)
153
295
  return raw;
296
+ // ROUTINE_DATA_ACQUISITION_DESIGN.md F0 — expand
297
+ // `{include:_partials/<name>.md}` directives BEFORE mode filtering so
298
+ // the partial's `<!-- mode:... -->` blocks participate in the same
299
+ // filter pass as the host body. Depth cap = 1; nested includes inside
300
+ // a partial are left verbatim (visible failure on cycles).
301
+ let rendered = expandPartialIncludes(raw);
154
302
  // Mode-conditional sections are stripped only when we know the session
155
303
  // backend (from `backendId`). Tooling that doesn't carry one (legacy
156
304
  // tests, prompt previews) keeps the markers visible — better than
157
305
  // collapsing them with a placeholder backend that may misroute prose.
158
306
  if (backendId && integrations) {
159
- return applyIntegrationModeFilter(raw, integrations, backendId);
307
+ rendered = applyIntegrationModeFilter(rendered, integrations, backendId);
308
+ }
309
+ // INTEGRATION_NATIVE_MODE_DESIGN.md §6.5.2 / §7.3 — substitute the
310
+ // `<integration-routing-table>` and `<integration-routing-table-actionable>`
311
+ // placeholders the native variants and (Phase C onwards) the direct/
312
+ // delegated variants embed. Runs AFTER mode-conditional filtering so
313
+ // a placeholder inside a struck branch is dropped before substitution.
314
+ // Pure no-op when neither placeholder is present, so legacy task-flow
315
+ // files that pre-date the placeholder syntax are unaffected.
316
+ if (integrations) {
317
+ rendered = substituteIntegrationRoutingTables(rendered, integrations);
160
318
  }
161
- return raw;
319
+ return rendered;
162
320
  }
163
321
  function resolveTaskFlowSource(eventType, backendId, integrations) {
164
322
  if (backendId && integrations) {
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"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"}
@@ -189,6 +189,30 @@ export declare function runRepositoryManagementScan(deps: RepositoryManagementDo
189
189
  * without writing.
190
190
  */
191
191
  export declare function runRepositoryArchitectureSectionReplace(deps: RepositoryManagementDocDeps, markdown: string): Promise<ArchitectureSectionReplaceResult>;
192
+ /**
193
+ * Replace the marker-bracketed Architecture block in an overview file with
194
+ * a freshly composed body. Exported solely so the unit suite can pin edge
195
+ * cases (code-fence collisions, CRLF, orphan markers) without having to
196
+ * stand up a full SQLite + filesystem fixture for every shape.
197
+ *
198
+ * Contract:
199
+ * - Marker matches inside fenced code blocks (``` or ~~~) are ignored —
200
+ * the daemon's own README, an Architecture body that includes example
201
+ * fences, or a paste from a chat could otherwise mis-anchor the merge
202
+ * and overwrite Summary / Notable Changes / Daily Activity Log.
203
+ * - CRLF input is preserved (LF input stays LF).
204
+ * - Orphan markers (only `:start` or only `:end` present) are stripped
205
+ * and a clean block is re-injected under `## Architecture` — never
206
+ * left to drift in the file where the next refresh might mis-bind to
207
+ * them.
208
+ * - `## Architecture` / `## Notable Changes` headings are matched with
209
+ * a line-anchored regex that tolerates trailing whitespace and either
210
+ * line ending. The previous literal-`indexOf` match silently fell
211
+ * through on `## Architecture \n` (trailing space) or `## Architecture\r\n`.
212
+ * - Final fallback is append-before-Notable-Changes-or-EOF, identical
213
+ * to the original contract.
214
+ */
215
+ export declare function mergeArchitectureSection(current: string, markdown: string): string;
192
216
  /**
193
217
  * Re-copy the repository's README.* into `git/<slug>/README.md`,
194
218
  * snapshotting the previous mirror to `md_file_snapshots`. Used by both
@@ -1 +1 @@
1
- {"version":3,"file":"repository-management-docs.d.ts","sourceRoot":"","sources":["../../src/core/repository-management-docs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository-management-docs.d.ts","sourceRoot":"","sources":["../../src/core/repository-management-docs.ts"],"names":[],"mappings":"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"}
@@ -743,41 +743,225 @@ export async function runRepositoryArchitectureSectionReplace(deps, markdown) {
743
743
  return { status: "written", overviewPath, absolutePath, refreshedAt };
744
744
  });
745
745
  }
746
- function mergeArchitectureSection(current, markdown) {
747
- const beginIdx = current.indexOf(ARCHITECTURE_BEGIN_MARKER);
748
- const endIdx = current.indexOf(ARCHITECTURE_END_MARKER);
746
+ /**
747
+ * Replace the marker-bracketed Architecture block in an overview file with
748
+ * a freshly composed body. Exported solely so the unit suite can pin edge
749
+ * cases (code-fence collisions, CRLF, orphan markers) without having to
750
+ * stand up a full SQLite + filesystem fixture for every shape.
751
+ *
752
+ * Contract:
753
+ * - Marker matches inside fenced code blocks (``` or ~~~) are ignored —
754
+ * the daemon's own README, an Architecture body that includes example
755
+ * fences, or a paste from a chat could otherwise mis-anchor the merge
756
+ * and overwrite Summary / Notable Changes / Daily Activity Log.
757
+ * - CRLF input is preserved (LF input stays LF).
758
+ * - Orphan markers (only `:start` or only `:end` present) are stripped
759
+ * and a clean block is re-injected under `## Architecture` — never
760
+ * left to drift in the file where the next refresh might mis-bind to
761
+ * them.
762
+ * - `## Architecture` / `## Notable Changes` headings are matched with
763
+ * a line-anchored regex that tolerates trailing whitespace and either
764
+ * line ending. The previous literal-`indexOf` match silently fell
765
+ * through on `## Architecture \n` (trailing space) or `## Architecture\r\n`.
766
+ * - Final fallback is append-before-Notable-Changes-or-EOF, identical
767
+ * to the original contract.
768
+ */
769
+ export function mergeArchitectureSection(current, markdown) {
770
+ // Normalize line endings for internal processing; remember the original
771
+ // shape so we can hand it back unchanged. Treating CRLF and LF the
772
+ // same throughout simplifies every offset calculation below.
773
+ const wasCrlf = /\r\n/.test(current);
774
+ const normalized = wasCrlf ? current.replace(/\r\n/g, "\n") : current;
775
+ const merged = mergeArchitectureSectionLf(normalized, markdown);
776
+ return wasCrlf ? merged.replace(/\n/g, "\r\n") : merged;
777
+ }
778
+ function mergeArchitectureSectionLf(content, markdown) {
749
779
  const body = markdown.trim();
750
780
  const block = `${ARCHITECTURE_BEGIN_MARKER}\n\n${body}\n\n${ARCHITECTURE_END_MARKER}`;
781
+ const fences = computeFenceRanges(content);
782
+ const beginIdx = indexOfOutsideFences(content, ARCHITECTURE_BEGIN_MARKER, fences);
783
+ const endIdx = indexOfOutsideFences(content, ARCHITECTURE_END_MARKER, fences);
784
+ // Happy path — both markers present and in the right order, outside
785
+ // any fence. Replace between them.
751
786
  if (beginIdx >= 0 && endIdx > beginIdx) {
752
- return (current.slice(0, beginIdx)
787
+ return (content.slice(0, beginIdx)
753
788
  + block
754
- + current.slice(endIdx + ARCHITECTURE_END_MARKER.length));
755
- }
756
- // Fallback: inject the block right after `## Architecture` if the
757
- // markers were stripped, or append a new Architecture section before
758
- // the next canonical section. Either path keeps the file usable
759
- // without manual repair.
760
- const headingIdx = current.indexOf("\n## Architecture\n");
761
- if (headingIdx >= 0) {
762
- const afterHeading = headingIdx + "\n## Architecture\n".length;
763
- const nextSectionRel = findNextSectionOffset(current.slice(afterHeading));
764
- const sliceEnd = nextSectionRel >= 0 ? afterHeading + nextSectionRel : current.length;
765
- return (current.slice(0, afterHeading)
789
+ + content.slice(endIdx + ARCHITECTURE_END_MARKER.length));
790
+ }
791
+ // Orphan-marker repair. An end marker without a begin (or vice versa)
792
+ // is left over from a partial edit or an earlier bug. Strip the orphan
793
+ // line entirely so the re-injection below can plant a clean block
794
+ // without two `:end` markers staring at each other on the next refresh.
795
+ let cleaned = content;
796
+ if (beginIdx >= 0 && endIdx < 0) {
797
+ cleaned = stripLineContaining(cleaned, ARCHITECTURE_BEGIN_MARKER, fences);
798
+ }
799
+ else if (endIdx >= 0 && beginIdx < 0) {
800
+ cleaned = stripLineContaining(cleaned, ARCHITECTURE_END_MARKER, fences);
801
+ }
802
+ else if (beginIdx >= 0 && endIdx >= 0 && endIdx <= beginIdx) {
803
+ // Markers are out of order (end before begin) — treat both as orphans.
804
+ cleaned = stripLineContaining(cleaned, ARCHITECTURE_BEGIN_MARKER, fences);
805
+ cleaned = stripLineContaining(cleaned, ARCHITECTURE_END_MARKER, computeFenceRanges(cleaned));
806
+ }
807
+ // Re-inject under `## Architecture` if the heading still exists outside
808
+ // a fence, otherwise plant a fresh section before `## Notable Changes`
809
+ // or at EOF.
810
+ return injectArchitectureBlock(cleaned, block);
811
+ }
812
+ function injectArchitectureBlock(content, block) {
813
+ const fences = computeFenceRanges(content);
814
+ const architectureHeading = findHeadingLine(content, "Architecture", fences);
815
+ if (architectureHeading) {
816
+ const afterHeading = architectureHeading.lineEndOffset; // offset of '\n' just after heading
817
+ const tail = content.slice(afterHeading + 1); // skip the newline
818
+ const fencesTail = shiftFenceRanges(fences, -(afterHeading + 1));
819
+ const nextSectionRel = findNextSectionOffsetOutsideFences(tail, fencesTail);
820
+ const sliceEnd = nextSectionRel >= 0
821
+ ? afterHeading + 1 + nextSectionRel
822
+ : content.length;
823
+ return (content.slice(0, afterHeading + 1)
766
824
  + `\n${block}\n\n`
767
- + current.slice(sliceEnd));
825
+ + content.slice(sliceEnd));
768
826
  }
769
- // No Architecture section at all — append before Notable Changes / EOF.
770
- const insertAt = current.indexOf("\n## Notable Changes\n");
827
+ const notableHeading = findHeadingLine(content, "Notable Changes", fences);
771
828
  const newSection = `\n## Architecture\n\n${block}\n`;
772
- if (insertAt >= 0) {
773
- return current.slice(0, insertAt) + newSection + current.slice(insertAt);
829
+ if (notableHeading) {
830
+ return (content.slice(0, notableHeading.lineStartOffset)
831
+ + newSection
832
+ + "\n"
833
+ + content.slice(notableHeading.lineStartOffset));
834
+ }
835
+ return content.trimEnd() + "\n" + newSection;
836
+ }
837
+ /**
838
+ * Compute byte ranges (inclusive of opening fence line through closing
839
+ * fence line) that are part of fenced code blocks. Matching inside one
840
+ * of these ranges is ignored. The fence delimiters themselves are also
841
+ * considered fenced so an ``` ```text\n<!-- architecture:start --> ``` ``` example doesn't slip through on the
842
+ * opening line's info-string position.
843
+ *
844
+ * An unclosed fence at EOF is treated as fenced through EOF — the
845
+ * conservative choice (we'd rather refuse to touch ambiguous content
846
+ * than risk corrupting it). For a well-formed daemon-generated overview
847
+ * file this branch is unreachable.
848
+ */
849
+ function computeFenceRanges(content) {
850
+ const ranges = [];
851
+ let inFence = false;
852
+ let fenceStart = 0;
853
+ let fenceMarker = "```";
854
+ let offset = 0;
855
+ const lines = content.split("\n");
856
+ for (const text of lines) {
857
+ const trimmed = text.replace(/^\s*/, "");
858
+ const opensTriple = /^```/.test(trimmed);
859
+ const opensTilde = /^~~~/.test(trimmed);
860
+ if (!inFence && (opensTriple || opensTilde)) {
861
+ inFence = true;
862
+ fenceStart = offset;
863
+ fenceMarker = opensTriple ? "```" : "~~~";
864
+ }
865
+ else if (inFence
866
+ && ((fenceMarker === "```" && opensTriple)
867
+ || (fenceMarker === "~~~" && opensTilde))) {
868
+ ranges.push([fenceStart, offset + text.length]);
869
+ inFence = false;
870
+ }
871
+ offset += text.length + 1; // +1 for \n
872
+ }
873
+ if (inFence) {
874
+ ranges.push([fenceStart, content.length]);
875
+ }
876
+ return ranges;
877
+ }
878
+ function shiftFenceRanges(ranges, delta) {
879
+ const out = [];
880
+ for (const [s, e] of ranges) {
881
+ const ns = s + delta;
882
+ const ne = e + delta;
883
+ if (ne <= 0)
884
+ continue;
885
+ out.push([Math.max(0, ns), ne]);
886
+ }
887
+ return out;
888
+ }
889
+ function isInsideFence(offset, ranges) {
890
+ for (const [s, e] of ranges) {
891
+ if (offset >= s && offset < e)
892
+ return true;
893
+ }
894
+ return false;
895
+ }
896
+ function indexOfOutsideFences(content, needle, ranges) {
897
+ let from = 0;
898
+ while (from <= content.length) {
899
+ const idx = content.indexOf(needle, from);
900
+ if (idx < 0)
901
+ return -1;
902
+ if (!isInsideFence(idx, ranges))
903
+ return idx;
904
+ from = idx + 1;
905
+ }
906
+ return -1;
907
+ }
908
+ function findHeadingLine(content, headingText, ranges) {
909
+ // Match a line that IS `## <heading>` with optional trailing whitespace.
910
+ // `^` is enforced by tracking the start-of-line offset; trailing `\s*`
911
+ // accommodates the `## Architecture ` (trailing space) form that the
912
+ // previous literal `\n## Architecture\n` indexOf silently dropped.
913
+ const pattern = new RegExp(`^[ \\t]*##[ \\t]+${escapeRegex(headingText)}[ \\t]*$`);
914
+ let offset = 0;
915
+ for (const text of content.split("\n")) {
916
+ if (!isInsideFence(offset, ranges) && pattern.test(text)) {
917
+ return { lineStartOffset: offset, lineEndOffset: offset + text.length };
918
+ }
919
+ offset += text.length + 1;
920
+ }
921
+ return null;
922
+ }
923
+ function findNextSectionOffsetOutsideFences(s, ranges) {
924
+ // Find the line-start offset of the next top-level `## ` heading. Same
925
+ // line-aware walk as `findHeadingLine` but unconstrained on the heading
926
+ // text. Matches at offset 0 too — the caller slices the tail starting
927
+ // *after* the Architecture heading's newline, so a `## Foo` at offset
928
+ // 0 is genuinely "the very next section" (pathological back-to-back
929
+ // headings collapse to a clean replace).
930
+ let offset = 0;
931
+ for (const text of s.split("\n")) {
932
+ if (!isInsideFence(offset, ranges) && /^[ \t]*##[ \t]+/.test(text)) {
933
+ return offset;
934
+ }
935
+ offset += text.length + 1;
936
+ }
937
+ return -1;
938
+ }
939
+ function stripLineContaining(content, needle, ranges) {
940
+ // Remove the entire line that contains `needle` (outside fences), plus
941
+ // any single trailing blank line so we don't accumulate ghost blank
942
+ // lines on repeated orphan repairs.
943
+ const out = [];
944
+ let offset = 0;
945
+ const lines = content.split("\n");
946
+ for (let i = 0; i < lines.length; i++) {
947
+ const text = lines[i];
948
+ const skipThis = !isInsideFence(offset, ranges) && text.includes(needle);
949
+ if (!skipThis) {
950
+ out.push(text);
951
+ }
952
+ else if (i + 1 < lines.length
953
+ && lines[i + 1].trim() === ""
954
+ && out.length > 0
955
+ && out[out.length - 1].trim() === "") {
956
+ // Drop the trailing blank too to avoid `\n\n\n` accumulation.
957
+ i++;
958
+ }
959
+ offset += text.length + 1;
774
960
  }
775
- return current.trimEnd() + "\n" + newSection;
961
+ return out.join("\n");
776
962
  }
777
- function findNextSectionOffset(s) {
778
- // Match the start of the next `## ` heading, anchored on a newline.
779
- const match = /\n## /.exec(s);
780
- return match ? match.index : -1;
963
+ function escapeRegex(s) {
964
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
781
965
  }
782
966
  function updateArchitectureFrontmatter(content, params) {
783
967
  const setField = (text, key, value) => {