@aitne/daemon 0.1.6 → 0.1.8

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 (963) hide show
  1. package/dist/adapters/dashboard-adapter.d.ts +18 -2
  2. package/dist/adapters/dashboard-adapter.d.ts.map +1 -1
  3. package/dist/adapters/dashboard-adapter.js +101 -51
  4. package/dist/adapters/dashboard-adapter.js.map +1 -1
  5. package/dist/adapters/discord.d.ts +8 -0
  6. package/dist/adapters/discord.d.ts.map +1 -1
  7. package/dist/adapters/discord.js +100 -21
  8. package/dist/adapters/discord.js.map +1 -1
  9. package/dist/adapters/message-hub.d.ts.map +1 -1
  10. package/dist/adapters/message-hub.js +7 -1
  11. package/dist/adapters/message-hub.js.map +1 -1
  12. package/dist/adapters/notification-manager.d.ts +102 -2
  13. package/dist/adapters/notification-manager.d.ts.map +1 -1
  14. package/dist/adapters/notification-manager.js +228 -8
  15. package/dist/adapters/notification-manager.js.map +1 -1
  16. package/dist/adapters/outbound-text.d.ts +16 -0
  17. package/dist/adapters/outbound-text.d.ts.map +1 -1
  18. package/dist/adapters/outbound-text.js +118 -1
  19. package/dist/adapters/outbound-text.js.map +1 -1
  20. package/dist/adapters/primary-platform-resolver.d.ts +69 -0
  21. package/dist/adapters/primary-platform-resolver.d.ts.map +1 -0
  22. package/dist/adapters/primary-platform-resolver.js +55 -0
  23. package/dist/adapters/primary-platform-resolver.js.map +1 -0
  24. package/dist/adapters/slack-adapter.d.ts +28 -0
  25. package/dist/adapters/slack-adapter.d.ts.map +1 -1
  26. package/dist/adapters/slack-adapter.js +134 -35
  27. package/dist/adapters/slack-adapter.js.map +1 -1
  28. package/dist/adapters/telegram-adapter.d.ts +7 -1
  29. package/dist/adapters/telegram-adapter.d.ts.map +1 -1
  30. package/dist/adapters/telegram-adapter.js +49 -18
  31. package/dist/adapters/telegram-adapter.js.map +1 -1
  32. package/dist/adapters/whatsapp-adapter.d.ts +33 -0
  33. package/dist/adapters/whatsapp-adapter.d.ts.map +1 -1
  34. package/dist/adapters/whatsapp-adapter.js +84 -0
  35. package/dist/adapters/whatsapp-adapter.js.map +1 -1
  36. package/dist/api/directory-picker.d.ts.map +1 -1
  37. package/dist/api/directory-picker.js +14 -0
  38. package/dist/api/directory-picker.js.map +1 -1
  39. package/dist/api/env-writer.d.ts.map +1 -1
  40. package/dist/api/env-writer.js +6 -1
  41. package/dist/api/env-writer.js.map +1 -1
  42. package/dist/api/helpers/agent-errors.d.ts +2600 -0
  43. package/dist/api/helpers/agent-errors.d.ts.map +1 -0
  44. package/dist/api/helpers/agent-errors.js +2506 -0
  45. package/dist/api/helpers/agent-errors.js.map +1 -0
  46. package/dist/api/integration-route-gate.d.ts.map +1 -1
  47. package/dist/api/integration-route-gate.js +10 -3
  48. package/dist/api/integration-route-gate.js.map +1 -1
  49. package/dist/api/routes/agent-schedule-plan-match.d.ts +5 -0
  50. package/dist/api/routes/agent-schedule-plan-match.d.ts.map +1 -0
  51. package/dist/api/routes/agent-schedule-plan-match.js +101 -0
  52. package/dist/api/routes/agent-schedule-plan-match.js.map +1 -0
  53. package/dist/api/routes/agent-schedule.d.ts +4 -0
  54. package/dist/api/routes/agent-schedule.d.ts.map +1 -0
  55. package/dist/api/routes/agent-schedule.js +750 -0
  56. package/dist/api/routes/agent-schedule.js.map +1 -0
  57. package/dist/api/routes/agent.d.ts.map +1 -1
  58. package/dist/api/routes/agent.js +209 -366
  59. package/dist/api/routes/agent.js.map +1 -1
  60. package/dist/api/routes/apple-calendar.d.ts.map +1 -1
  61. package/dist/api/routes/apple-calendar.js +109 -27
  62. package/dist/api/routes/apple-calendar.js.map +1 -1
  63. package/dist/api/routes/attachments.d.ts.map +1 -1
  64. package/dist/api/routes/attachments.js +113 -21
  65. package/dist/api/routes/attachments.js.map +1 -1
  66. package/dist/api/routes/backends.d.ts.map +1 -1
  67. package/dist/api/routes/backends.js +100 -4
  68. package/dist/api/routes/backends.js.map +1 -1
  69. package/dist/api/routes/books.d.ts.map +1 -1
  70. package/dist/api/routes/books.js +58 -18
  71. package/dist/api/routes/books.js.map +1 -1
  72. package/dist/api/routes/calendar.d.ts +3 -2
  73. package/dist/api/routes/calendar.d.ts.map +1 -1
  74. package/dist/api/routes/calendar.js +330 -55
  75. package/dist/api/routes/calendar.js.map +1 -1
  76. package/dist/api/routes/commands.d.ts.map +1 -1
  77. package/dist/api/routes/commands.js +20 -1
  78. package/dist/api/routes/commands.js.map +1 -1
  79. package/dist/api/routes/context/index.d.ts +33 -0
  80. package/dist/api/routes/context/index.d.ts.map +1 -0
  81. package/dist/api/routes/context/index.js +193 -0
  82. package/dist/api/routes/context/index.js.map +1 -0
  83. package/dist/api/routes/context/locks.d.ts +4 -0
  84. package/dist/api/routes/context/locks.d.ts.map +1 -0
  85. package/dist/api/routes/context/locks.js +136 -0
  86. package/dist/api/routes/context/locks.js.map +1 -0
  87. package/dist/api/routes/context/path-resolve.d.ts +15 -0
  88. package/dist/api/routes/context/path-resolve.d.ts.map +1 -0
  89. package/dist/api/routes/context/path-resolve.js +109 -0
  90. package/dist/api/routes/context/path-resolve.js.map +1 -0
  91. package/dist/api/routes/context/permissions.d.ts +35 -0
  92. package/dist/api/routes/context/permissions.d.ts.map +1 -0
  93. package/dist/api/routes/context/permissions.js +192 -0
  94. package/dist/api/routes/context/permissions.js.map +1 -0
  95. package/dist/api/routes/context/read.d.ts +4 -0
  96. package/dist/api/routes/context/read.d.ts.map +1 -0
  97. package/dist/api/routes/context/read.js +295 -0
  98. package/dist/api/routes/context/read.js.map +1 -0
  99. package/dist/api/routes/context/repair.d.ts +4 -0
  100. package/dist/api/routes/context/repair.d.ts.map +1 -0
  101. package/dist/api/routes/context/repair.js +114 -0
  102. package/dist/api/routes/context/repair.js.map +1 -0
  103. package/dist/api/routes/context/snapshots.d.ts +4 -0
  104. package/dist/api/routes/context/snapshots.d.ts.map +1 -0
  105. package/dist/api/routes/context/snapshots.js +177 -0
  106. package/dist/api/routes/context/snapshots.js.map +1 -0
  107. package/dist/api/routes/context/write.d.ts +4 -0
  108. package/dist/api/routes/context/write.d.ts.map +1 -0
  109. package/dist/api/routes/context/write.js +570 -0
  110. package/dist/api/routes/context/write.js.map +1 -0
  111. package/dist/api/routes/context.d.ts +2 -43
  112. package/dist/api/routes/context.d.ts.map +1 -1
  113. package/dist/api/routes/context.js +415 -558
  114. package/dist/api/routes/context.js.map +1 -1
  115. package/dist/api/routes/dashboard/config.d.ts +4 -0
  116. package/dist/api/routes/dashboard/config.d.ts.map +1 -0
  117. package/dist/api/routes/dashboard/config.js +499 -0
  118. package/dist/api/routes/dashboard/config.js.map +1 -0
  119. package/dist/api/routes/dashboard/conversations.d.ts +4 -0
  120. package/dist/api/routes/dashboard/conversations.d.ts.map +1 -0
  121. package/dist/api/routes/dashboard/conversations.js +309 -0
  122. package/dist/api/routes/dashboard/conversations.js.map +1 -0
  123. package/dist/api/routes/dashboard/cost-approvals.d.ts +29 -0
  124. package/dist/api/routes/dashboard/cost-approvals.d.ts.map +1 -0
  125. package/dist/api/routes/dashboard/cost-approvals.js +259 -0
  126. package/dist/api/routes/dashboard/cost-approvals.js.map +1 -0
  127. package/dist/api/routes/dashboard/index.d.ts +27 -0
  128. package/dist/api/routes/dashboard/index.d.ts.map +1 -0
  129. package/dist/api/routes/dashboard/index.js +47 -0
  130. package/dist/api/routes/dashboard/index.js.map +1 -0
  131. package/dist/api/routes/dashboard/messaging.d.ts +4 -0
  132. package/dist/api/routes/dashboard/messaging.d.ts.map +1 -0
  133. package/dist/api/routes/dashboard/messaging.js +351 -0
  134. package/dist/api/routes/dashboard/messaging.js.map +1 -0
  135. package/dist/api/routes/dashboard/notifications.d.ts +4 -0
  136. package/dist/api/routes/dashboard/notifications.d.ts.map +1 -0
  137. package/dist/api/routes/dashboard/notifications.js +109 -0
  138. package/dist/api/routes/dashboard/notifications.js.map +1 -0
  139. package/dist/api/routes/dashboard/oauth-google.d.ts +4 -0
  140. package/dist/api/routes/dashboard/oauth-google.d.ts.map +1 -0
  141. package/dist/api/routes/dashboard/oauth-google.js +293 -0
  142. package/dist/api/routes/dashboard/oauth-google.js.map +1 -0
  143. package/dist/api/routes/dashboard/schedule-readonly.d.ts +4 -0
  144. package/dist/api/routes/dashboard/schedule-readonly.d.ts.map +1 -0
  145. package/dist/api/routes/dashboard/schedule-readonly.js +46 -0
  146. package/dist/api/routes/dashboard/schedule-readonly.js.map +1 -0
  147. package/dist/api/routes/dashboard/secrets.d.ts +24 -0
  148. package/dist/api/routes/dashboard/secrets.d.ts.map +1 -0
  149. package/dist/api/routes/dashboard/secrets.js +307 -0
  150. package/dist/api/routes/dashboard/secrets.js.map +1 -0
  151. package/dist/api/routes/dashboard/snapshots.d.ts +4 -0
  152. package/dist/api/routes/dashboard/snapshots.d.ts.map +1 -0
  153. package/dist/api/routes/dashboard/snapshots.js +33 -0
  154. package/dist/api/routes/dashboard/snapshots.js.map +1 -0
  155. package/dist/api/routes/dashboard.d.ts.map +1 -1
  156. package/dist/api/routes/dashboard.js +20 -12
  157. package/dist/api/routes/dashboard.js.map +1 -1
  158. package/dist/api/routes/delegated.d.ts +5 -4
  159. package/dist/api/routes/delegated.d.ts.map +1 -1
  160. package/dist/api/routes/delegated.js +6 -5
  161. package/dist/api/routes/delegated.js.map +1 -1
  162. package/dist/api/routes/docs.d.ts.map +1 -1
  163. package/dist/api/routes/docs.js +72 -9
  164. package/dist/api/routes/docs.js.map +1 -1
  165. package/dist/api/routes/entities.d.ts.map +1 -1
  166. package/dist/api/routes/entities.js +112 -43
  167. package/dist/api/routes/entities.js.map +1 -1
  168. package/dist/api/routes/fs.d.ts.map +1 -1
  169. package/dist/api/routes/fs.js +27 -12
  170. package/dist/api/routes/fs.js.map +1 -1
  171. package/dist/api/routes/git-templates.d.ts.map +1 -1
  172. package/dist/api/routes/git-templates.js +107 -27
  173. package/dist/api/routes/git-templates.js.map +1 -1
  174. package/dist/api/routes/git.d.ts.map +1 -1
  175. package/dist/api/routes/git.js +55 -11
  176. package/dist/api/routes/git.js.map +1 -1
  177. package/dist/api/routes/github.d.ts.map +1 -1
  178. package/dist/api/routes/github.js +110 -17
  179. package/dist/api/routes/github.js.map +1 -1
  180. package/dist/api/routes/integrations/crud-patch.d.ts +17 -0
  181. package/dist/api/routes/integrations/crud-patch.d.ts.map +1 -0
  182. package/dist/api/routes/integrations/crud-patch.js +600 -0
  183. package/dist/api/routes/integrations/crud-patch.js.map +1 -0
  184. package/dist/api/routes/integrations/crud.d.ts +16 -0
  185. package/dist/api/routes/integrations/crud.d.ts.map +1 -0
  186. package/dist/api/routes/integrations/crud.js +158 -0
  187. package/dist/api/routes/integrations/crud.js.map +1 -0
  188. package/dist/api/routes/integrations/exec.d.ts +23 -0
  189. package/dist/api/routes/integrations/exec.d.ts.map +1 -0
  190. package/dist/api/routes/integrations/exec.js +356 -0
  191. package/dist/api/routes/integrations/exec.js.map +1 -0
  192. package/dist/api/routes/integrations/index.d.ts +62 -0
  193. package/dist/api/routes/integrations/index.d.ts.map +1 -0
  194. package/dist/api/routes/integrations/index.js +70 -0
  195. package/dist/api/routes/integrations/index.js.map +1 -0
  196. package/dist/api/routes/integrations/integrations/crud.d.ts +16 -0
  197. package/dist/api/routes/integrations/integrations/crud.d.ts.map +1 -0
  198. package/dist/api/routes/integrations/integrations/crud.js +158 -0
  199. package/dist/api/routes/integrations/integrations/crud.js.map +1 -0
  200. package/dist/api/routes/integrations/integrations/index.d.ts +55 -0
  201. package/dist/api/routes/integrations/integrations/index.d.ts.map +1 -0
  202. package/dist/api/routes/integrations/integrations/index.js +65 -0
  203. package/dist/api/routes/integrations/integrations/index.js.map +1 -0
  204. package/dist/api/routes/integrations/integrations/invoke.d.ts +38 -0
  205. package/dist/api/routes/integrations/integrations/invoke.d.ts.map +1 -0
  206. package/dist/api/routes/integrations/integrations/invoke.js +320 -0
  207. package/dist/api/routes/integrations/integrations/invoke.js.map +1 -0
  208. package/dist/api/routes/integrations/integrations/probe.d.ts +21 -0
  209. package/dist/api/routes/integrations/integrations/probe.d.ts.map +1 -0
  210. package/dist/api/routes/integrations/integrations/probe.js +247 -0
  211. package/dist/api/routes/integrations/integrations/probe.js.map +1 -0
  212. package/dist/api/routes/integrations/invoke.d.ts +38 -0
  213. package/dist/api/routes/integrations/invoke.d.ts.map +1 -0
  214. package/dist/api/routes/integrations/invoke.js +320 -0
  215. package/dist/api/routes/integrations/invoke.js.map +1 -0
  216. package/dist/api/routes/integrations/probe.d.ts +21 -0
  217. package/dist/api/routes/integrations/probe.d.ts.map +1 -0
  218. package/dist/api/routes/integrations/probe.js +247 -0
  219. package/dist/api/routes/integrations/probe.js.map +1 -0
  220. package/dist/api/routes/integrations.d.ts.map +1 -1
  221. package/dist/api/routes/integrations.js +65 -13
  222. package/dist/api/routes/integrations.js.map +1 -1
  223. package/dist/api/routes/knowledge.d.ts.map +1 -1
  224. package/dist/api/routes/knowledge.js +13 -2
  225. package/dist/api/routes/knowledge.js.map +1 -1
  226. package/dist/api/routes/mail/_pa_wip_mail/app-password.d.ts +4 -0
  227. package/dist/api/routes/mail/_pa_wip_mail/app-password.d.ts.map +1 -0
  228. package/dist/api/routes/mail/_pa_wip_mail/app-password.js +192 -0
  229. package/dist/api/routes/mail/_pa_wip_mail/app-password.js.map +1 -0
  230. package/dist/api/routes/mail/_pa_wip_mail/body-helpers.d.ts +55 -0
  231. package/dist/api/routes/mail/_pa_wip_mail/body-helpers.d.ts.map +1 -0
  232. package/dist/api/routes/mail/_pa_wip_mail/body-helpers.js +91 -0
  233. package/dist/api/routes/mail/_pa_wip_mail/body-helpers.js.map +1 -0
  234. package/dist/api/routes/mail/_pa_wip_mail/dependencies.d.ts +36 -0
  235. package/dist/api/routes/mail/_pa_wip_mail/dependencies.d.ts.map +1 -0
  236. package/dist/api/routes/mail/_pa_wip_mail/dependencies.js +2 -0
  237. package/dist/api/routes/mail/_pa_wip_mail/dependencies.js.map +1 -0
  238. package/dist/api/routes/mail/_pa_wip_mail/gating.d.ts +45 -0
  239. package/dist/api/routes/mail/_pa_wip_mail/gating.d.ts.map +1 -0
  240. package/dist/api/routes/mail/_pa_wip_mail/gating.js +98 -0
  241. package/dist/api/routes/mail/_pa_wip_mail/gating.js.map +1 -0
  242. package/dist/api/routes/mail/_pa_wip_mail/mail/accounts.d.ts +4 -0
  243. package/dist/api/routes/mail/_pa_wip_mail/mail/accounts.d.ts.map +1 -0
  244. package/dist/api/routes/mail/_pa_wip_mail/mail/accounts.js +289 -0
  245. package/dist/api/routes/mail/_pa_wip_mail/mail/accounts.js.map +1 -0
  246. package/dist/api/routes/mail/_pa_wip_mail/mail/app-password.d.ts +4 -0
  247. package/dist/api/routes/mail/_pa_wip_mail/mail/app-password.d.ts.map +1 -0
  248. package/dist/api/routes/mail/_pa_wip_mail/mail/app-password.js +192 -0
  249. package/dist/api/routes/mail/_pa_wip_mail/mail/app-password.js.map +1 -0
  250. package/dist/api/routes/mail/_pa_wip_mail/mail/body-helpers.d.ts +55 -0
  251. package/dist/api/routes/mail/_pa_wip_mail/mail/body-helpers.d.ts.map +1 -0
  252. package/dist/api/routes/mail/_pa_wip_mail/mail/body-helpers.js +91 -0
  253. package/dist/api/routes/mail/_pa_wip_mail/mail/body-helpers.js.map +1 -0
  254. package/dist/api/routes/mail/_pa_wip_mail/mail/dependencies.d.ts +36 -0
  255. package/dist/api/routes/mail/_pa_wip_mail/mail/dependencies.d.ts.map +1 -0
  256. package/dist/api/routes/mail/_pa_wip_mail/mail/dependencies.js +2 -0
  257. package/dist/api/routes/mail/_pa_wip_mail/mail/dependencies.js.map +1 -0
  258. package/dist/api/routes/mail/_pa_wip_mail/mail/drafts.d.ts +5 -0
  259. package/dist/api/routes/mail/_pa_wip_mail/mail/drafts.d.ts.map +1 -0
  260. package/dist/api/routes/mail/_pa_wip_mail/mail/drafts.js +139 -0
  261. package/dist/api/routes/mail/_pa_wip_mail/mail/drafts.js.map +1 -0
  262. package/dist/api/routes/mail/_pa_wip_mail/mail/gating.d.ts +45 -0
  263. package/dist/api/routes/mail/_pa_wip_mail/mail/gating.d.ts.map +1 -0
  264. package/dist/api/routes/mail/_pa_wip_mail/mail/gating.js +98 -0
  265. package/dist/api/routes/mail/_pa_wip_mail/mail/gating.js.map +1 -0
  266. package/dist/api/routes/mail/_pa_wip_mail/mail/index.d.ts +18 -0
  267. package/dist/api/routes/mail/_pa_wip_mail/mail/index.d.ts.map +1 -0
  268. package/dist/api/routes/mail/_pa_wip_mail/mail/index.js +40 -0
  269. package/dist/api/routes/mail/_pa_wip_mail/mail/index.js.map +1 -0
  270. package/dist/api/routes/mail/_pa_wip_mail/mail/messages.d.ts +15 -0
  271. package/dist/api/routes/mail/_pa_wip_mail/mail/messages.d.ts.map +1 -0
  272. package/dist/api/routes/mail/_pa_wip_mail/mail/messages.js +239 -0
  273. package/dist/api/routes/mail/_pa_wip_mail/mail/messages.js.map +1 -0
  274. package/dist/api/routes/mail/_pa_wip_mail/mail/outlook-config.d.ts +4 -0
  275. package/dist/api/routes/mail/_pa_wip_mail/mail/outlook-config.d.ts.map +1 -0
  276. package/dist/api/routes/mail/_pa_wip_mail/mail/outlook-config.js +73 -0
  277. package/dist/api/routes/mail/_pa_wip_mail/mail/outlook-config.js.map +1 -0
  278. package/dist/api/routes/mail/_pa_wip_mail/mail/provider-resolver.d.ts +64 -0
  279. package/dist/api/routes/mail/_pa_wip_mail/mail/provider-resolver.d.ts.map +1 -0
  280. package/dist/api/routes/mail/_pa_wip_mail/mail/provider-resolver.js +286 -0
  281. package/dist/api/routes/mail/_pa_wip_mail/mail/provider-resolver.js.map +1 -0
  282. package/dist/api/routes/mail/_pa_wip_mail/mail/providers.d.ts +4 -0
  283. package/dist/api/routes/mail/_pa_wip_mail/mail/providers.d.ts.map +1 -0
  284. package/dist/api/routes/mail/_pa_wip_mail/mail/providers.js +73 -0
  285. package/dist/api/routes/mail/_pa_wip_mail/mail/providers.js.map +1 -0
  286. package/dist/api/routes/mail/_pa_wip_mail/mail/tags-folders.d.ts +5 -0
  287. package/dist/api/routes/mail/_pa_wip_mail/mail/tags-folders.d.ts.map +1 -0
  288. package/dist/api/routes/mail/_pa_wip_mail/mail/tags-folders.js +35 -0
  289. package/dist/api/routes/mail/_pa_wip_mail/mail/tags-folders.js.map +1 -0
  290. package/dist/api/routes/mail/_pa_wip_mail/mail/validators.d.ts +23 -0
  291. package/dist/api/routes/mail/_pa_wip_mail/mail/validators.d.ts.map +1 -0
  292. package/dist/api/routes/mail/_pa_wip_mail/mail/validators.js +131 -0
  293. package/dist/api/routes/mail/_pa_wip_mail/mail/validators.js.map +1 -0
  294. package/dist/api/routes/mail/_pa_wip_mail/provider-resolver.d.ts +64 -0
  295. package/dist/api/routes/mail/_pa_wip_mail/provider-resolver.d.ts.map +1 -0
  296. package/dist/api/routes/mail/_pa_wip_mail/provider-resolver.js +286 -0
  297. package/dist/api/routes/mail/_pa_wip_mail/provider-resolver.js.map +1 -0
  298. package/dist/api/routes/mail/_pa_wip_mail/search-health.d.ts +4 -0
  299. package/dist/api/routes/mail/_pa_wip_mail/search-health.d.ts.map +1 -0
  300. package/dist/api/routes/mail/_pa_wip_mail/search-health.js +131 -0
  301. package/dist/api/routes/mail/_pa_wip_mail/search-health.js.map +1 -0
  302. package/dist/api/routes/mail/_pa_wip_mail/validators.d.ts +23 -0
  303. package/dist/api/routes/mail/_pa_wip_mail/validators.d.ts.map +1 -0
  304. package/dist/api/routes/mail/_pa_wip_mail/validators.js +131 -0
  305. package/dist/api/routes/mail/_pa_wip_mail/validators.js.map +1 -0
  306. package/dist/api/routes/mail/accounts.d.ts +4 -0
  307. package/dist/api/routes/mail/accounts.d.ts.map +1 -0
  308. package/dist/api/routes/mail/accounts.js +289 -0
  309. package/dist/api/routes/mail/accounts.js.map +1 -0
  310. package/dist/api/routes/mail/app-password.d.ts +4 -0
  311. package/dist/api/routes/mail/app-password.d.ts.map +1 -0
  312. package/dist/api/routes/mail/app-password.js +192 -0
  313. package/dist/api/routes/mail/app-password.js.map +1 -0
  314. package/dist/api/routes/mail/body-helpers.d.ts +56 -0
  315. package/dist/api/routes/mail/body-helpers.d.ts.map +1 -0
  316. package/dist/api/routes/mail/body-helpers.js +91 -0
  317. package/dist/api/routes/mail/body-helpers.js.map +1 -0
  318. package/dist/api/routes/mail/dependencies.d.ts +36 -0
  319. package/dist/api/routes/mail/dependencies.d.ts.map +1 -0
  320. package/dist/api/routes/mail/dependencies.js +2 -0
  321. package/dist/api/routes/mail/dependencies.js.map +1 -0
  322. package/dist/api/routes/mail/drafts.d.ts +5 -0
  323. package/dist/api/routes/mail/drafts.d.ts.map +1 -0
  324. package/dist/api/routes/mail/drafts.js +139 -0
  325. package/dist/api/routes/mail/drafts.js.map +1 -0
  326. package/dist/api/routes/mail/gating.d.ts +45 -0
  327. package/dist/api/routes/mail/gating.d.ts.map +1 -0
  328. package/dist/api/routes/mail/gating.js +99 -0
  329. package/dist/api/routes/mail/gating.js.map +1 -0
  330. package/dist/api/routes/mail/index.d.ts +18 -0
  331. package/dist/api/routes/mail/index.d.ts.map +1 -0
  332. package/dist/api/routes/mail/index.js +40 -0
  333. package/dist/api/routes/mail/index.js.map +1 -0
  334. package/dist/api/routes/mail/messages.d.ts +15 -0
  335. package/dist/api/routes/mail/messages.d.ts.map +1 -0
  336. package/dist/api/routes/mail/messages.js +239 -0
  337. package/dist/api/routes/mail/messages.js.map +1 -0
  338. package/dist/api/routes/mail/outlook-config.d.ts +4 -0
  339. package/dist/api/routes/mail/outlook-config.d.ts.map +1 -0
  340. package/dist/api/routes/mail/outlook-config.js +73 -0
  341. package/dist/api/routes/mail/outlook-config.js.map +1 -0
  342. package/dist/api/routes/mail/provider-resolver.d.ts +64 -0
  343. package/dist/api/routes/mail/provider-resolver.d.ts.map +1 -0
  344. package/dist/api/routes/mail/provider-resolver.js +286 -0
  345. package/dist/api/routes/mail/provider-resolver.js.map +1 -0
  346. package/dist/api/routes/mail/providers.d.ts +4 -0
  347. package/dist/api/routes/mail/providers.d.ts.map +1 -0
  348. package/dist/api/routes/mail/providers.js +73 -0
  349. package/dist/api/routes/mail/providers.js.map +1 -0
  350. package/dist/api/routes/mail/search-health.d.ts +4 -0
  351. package/dist/api/routes/mail/search-health.d.ts.map +1 -0
  352. package/dist/api/routes/mail/search-health.js +131 -0
  353. package/dist/api/routes/mail/search-health.js.map +1 -0
  354. package/dist/api/routes/mail/tags-folders.d.ts +5 -0
  355. package/dist/api/routes/mail/tags-folders.d.ts.map +1 -0
  356. package/dist/api/routes/mail/tags-folders.js +35 -0
  357. package/dist/api/routes/mail/tags-folders.js.map +1 -0
  358. package/dist/api/routes/mail/validators.d.ts +23 -0
  359. package/dist/api/routes/mail/validators.d.ts.map +1 -0
  360. package/dist/api/routes/mail/validators.js +131 -0
  361. package/dist/api/routes/mail/validators.js.map +1 -0
  362. package/dist/api/routes/mail.d.ts.map +1 -1
  363. package/dist/api/routes/mail.js +259 -67
  364. package/dist/api/routes/mail.js.map +1 -1
  365. package/dist/api/routes/managed-tasks.d.ts.map +1 -1
  366. package/dist/api/routes/managed-tasks.js +142 -54
  367. package/dist/api/routes/managed-tasks.js.map +1 -1
  368. package/dist/api/routes/mcp.d.ts.map +1 -1
  369. package/dist/api/routes/mcp.js +115 -47
  370. package/dist/api/routes/mcp.js.map +1 -1
  371. package/dist/api/routes/metrics.d.ts +1 -1
  372. package/dist/api/routes/metrics.js +2 -2
  373. package/dist/api/routes/notion.d.ts.map +1 -1
  374. package/dist/api/routes/notion.js +230 -54
  375. package/dist/api/routes/notion.js.map +1 -1
  376. package/dist/api/routes/observations.d.ts.map +1 -1
  377. package/dist/api/routes/observations.js +40 -169
  378. package/dist/api/routes/observations.js.map +1 -1
  379. package/dist/api/routes/obsidian.d.ts.map +1 -1
  380. package/dist/api/routes/obsidian.js +193 -32
  381. package/dist/api/routes/obsidian.js.map +1 -1
  382. package/dist/api/routes/profile-questions.d.ts.map +1 -1
  383. package/dist/api/routes/profile-questions.js +19 -3
  384. package/dist/api/routes/profile-questions.js.map +1 -1
  385. package/dist/api/routes/receipts.d.ts.map +1 -1
  386. package/dist/api/routes/receipts.js +64 -24
  387. package/dist/api/routes/receipts.js.map +1 -1
  388. package/dist/api/routes/recurring-schedules.d.ts.map +1 -1
  389. package/dist/api/routes/recurring-schedules.js +243 -13
  390. package/dist/api/routes/recurring-schedules.js.map +1 -1
  391. package/dist/api/routes/repositories.d.ts.map +1 -1
  392. package/dist/api/routes/repositories.js +278 -104
  393. package/dist/api/routes/repositories.js.map +1 -1
  394. package/dist/api/routes/schedule-model-resolver.d.ts +153 -0
  395. package/dist/api/routes/schedule-model-resolver.d.ts.map +1 -0
  396. package/dist/api/routes/schedule-model-resolver.js +282 -0
  397. package/dist/api/routes/schedule-model-resolver.js.map +1 -0
  398. package/dist/api/routes/schedule-options.d.ts +25 -0
  399. package/dist/api/routes/schedule-options.d.ts.map +1 -0
  400. package/dist/api/routes/schedule-options.js +77 -0
  401. package/dist/api/routes/schedule-options.js.map +1 -0
  402. package/dist/api/routes/schedule-validation.d.ts +146 -0
  403. package/dist/api/routes/schedule-validation.d.ts.map +1 -0
  404. package/dist/api/routes/schedule-validation.js +153 -0
  405. package/dist/api/routes/schedule-validation.js.map +1 -0
  406. package/dist/api/routes/setup.d.ts.map +1 -1
  407. package/dist/api/routes/setup.js +100 -26
  408. package/dist/api/routes/setup.js.map +1 -1
  409. package/dist/api/routes/skills.d.ts.map +1 -1
  410. package/dist/api/routes/skills.js +81 -30
  411. package/dist/api/routes/skills.js.map +1 -1
  412. package/dist/api/routes/sot-bindings.d.ts.map +1 -1
  413. package/dist/api/routes/sot-bindings.js +46 -11
  414. package/dist/api/routes/sot-bindings.js.map +1 -1
  415. package/dist/api/routes/sse.d.ts.map +1 -1
  416. package/dist/api/routes/sse.js +6 -1
  417. package/dist/api/routes/sse.js.map +1 -1
  418. package/dist/api/routes/system.d.ts.map +1 -1
  419. package/dist/api/routes/system.js +15 -2
  420. package/dist/api/routes/system.js.map +1 -1
  421. package/dist/api/routes/travel-bookings.d.ts.map +1 -1
  422. package/dist/api/routes/travel-bookings.js +26 -9
  423. package/dist/api/routes/travel-bookings.js.map +1 -1
  424. package/dist/api/routes/travel-time.d.ts.map +1 -1
  425. package/dist/api/routes/travel-time.js +50 -10
  426. package/dist/api/routes/travel-time.js.map +1 -1
  427. package/dist/api/routes/wiki.d.ts.map +1 -1
  428. package/dist/api/routes/wiki.js +49 -8
  429. package/dist/api/routes/wiki.js.map +1 -1
  430. package/dist/api/server.d.ts +15 -3
  431. package/dist/api/server.d.ts.map +1 -1
  432. package/dist/api/server.js +32 -10
  433. package/dist/api/server.js.map +1 -1
  434. package/dist/bootstrap/adapters.d.ts.map +1 -1
  435. package/dist/bootstrap/adapters.js +7 -4
  436. package/dist/bootstrap/adapters.js.map +1 -1
  437. package/dist/bootstrap/api.d.ts +205 -0
  438. package/dist/bootstrap/api.d.ts.map +1 -0
  439. package/dist/bootstrap/api.js +443 -0
  440. package/dist/bootstrap/api.js.map +1 -0
  441. package/dist/bootstrap/db.d.ts +119 -0
  442. package/dist/bootstrap/db.d.ts.map +1 -0
  443. package/dist/bootstrap/db.js +294 -0
  444. package/dist/bootstrap/db.js.map +1 -0
  445. package/dist/bootstrap/event-pipeline.d.ts +308 -0
  446. package/dist/bootstrap/event-pipeline.d.ts.map +1 -0
  447. package/dist/bootstrap/event-pipeline.js +704 -0
  448. package/dist/bootstrap/event-pipeline.js.map +1 -0
  449. package/dist/bootstrap/observers.d.ts +148 -0
  450. package/dist/bootstrap/observers.d.ts.map +1 -0
  451. package/dist/bootstrap/observers.js +558 -0
  452. package/dist/bootstrap/observers.js.map +1 -0
  453. package/dist/bootstrap/schedule-helpers.d.ts +122 -0
  454. package/dist/bootstrap/schedule-helpers.d.ts.map +1 -1
  455. package/dist/bootstrap/schedule-helpers.js +202 -4
  456. package/dist/bootstrap/schedule-helpers.js.map +1 -1
  457. package/dist/config.d.ts.map +1 -1
  458. package/dist/config.js +20 -3
  459. package/dist/config.js.map +1 -1
  460. package/dist/core/abort-utils.d.ts +14 -0
  461. package/dist/core/abort-utils.d.ts.map +1 -0
  462. package/dist/core/abort-utils.js +36 -0
  463. package/dist/core/abort-utils.js.map +1 -0
  464. package/dist/core/agent-core.d.ts +22 -3
  465. package/dist/core/agent-core.d.ts.map +1 -1
  466. package/dist/core/agent-core.js +3 -1
  467. package/dist/core/agent-core.js.map +1 -1
  468. package/dist/core/backends/auth-health-monitor.js +2 -3
  469. package/dist/core/backends/auth-health-monitor.js.map +1 -1
  470. package/dist/core/backends/backend-router.d.ts +11 -1
  471. package/dist/core/backends/backend-router.d.ts.map +1 -1
  472. package/dist/core/backends/backend-router.js +97 -2
  473. package/dist/core/backends/backend-router.js.map +1 -1
  474. package/dist/core/backends/claude-code-core.d.ts +51 -0
  475. package/dist/core/backends/claude-code-core.d.ts.map +1 -1
  476. package/dist/core/backends/claude-code-core.js +134 -11
  477. package/dist/core/backends/claude-code-core.js.map +1 -1
  478. package/dist/core/backends/claude-tool-collection.js +1 -1
  479. package/dist/core/backends/codex-core.d.ts +13 -1
  480. package/dist/core/backends/codex-core.d.ts.map +1 -1
  481. package/dist/core/backends/codex-core.js +436 -22
  482. package/dist/core/backends/codex-core.js.map +1 -1
  483. package/dist/core/backends/gemini-cli-core.d.ts +5 -1
  484. package/dist/core/backends/gemini-cli-core.d.ts.map +1 -1
  485. package/dist/core/backends/gemini-cli-core.js +298 -15
  486. package/dist/core/backends/gemini-cli-core.js.map +1 -1
  487. package/dist/core/backends/install-methods.d.ts.map +1 -1
  488. package/dist/core/backends/install-methods.js +22 -0
  489. package/dist/core/backends/install-methods.js.map +1 -1
  490. package/dist/core/backends/model-registry.d.ts +9 -4
  491. package/dist/core/backends/model-registry.d.ts.map +1 -1
  492. package/dist/core/backends/model-registry.js +153 -23
  493. package/dist/core/backends/model-registry.js.map +1 -1
  494. package/dist/core/backends/native-skill-discovery-probe.d.ts +80 -0
  495. package/dist/core/backends/native-skill-discovery-probe.d.ts.map +1 -0
  496. package/dist/core/backends/native-skill-discovery-probe.js +175 -0
  497. package/dist/core/backends/native-skill-discovery-probe.js.map +1 -0
  498. package/dist/core/backends/opencode-basic-auth-fetch.d.ts +27 -0
  499. package/dist/core/backends/opencode-basic-auth-fetch.d.ts.map +1 -0
  500. package/dist/core/backends/opencode-basic-auth-fetch.js +40 -0
  501. package/dist/core/backends/opencode-basic-auth-fetch.js.map +1 -0
  502. package/dist/core/backends/opencode-config-builder.d.ts +86 -0
  503. package/dist/core/backends/opencode-config-builder.d.ts.map +1 -0
  504. package/dist/core/backends/opencode-config-builder.js +172 -0
  505. package/dist/core/backends/opencode-config-builder.js.map +1 -0
  506. package/dist/core/backends/opencode-core.d.ts +316 -0
  507. package/dist/core/backends/opencode-core.d.ts.map +1 -0
  508. package/dist/core/backends/opencode-core.js +1502 -0
  509. package/dist/core/backends/opencode-core.js.map +1 -0
  510. package/dist/core/backends/opencode-event-mapper.d.ts +133 -0
  511. package/dist/core/backends/opencode-event-mapper.d.ts.map +1 -0
  512. package/dist/core/backends/opencode-event-mapper.js +198 -0
  513. package/dist/core/backends/opencode-event-mapper.js.map +1 -0
  514. package/dist/core/backends/opencode-mcp.d.ts +82 -0
  515. package/dist/core/backends/opencode-mcp.d.ts.map +1 -0
  516. package/dist/core/backends/opencode-mcp.js +165 -0
  517. package/dist/core/backends/opencode-mcp.js.map +1 -0
  518. package/dist/core/backends/opencode-server-manager.d.ts +114 -0
  519. package/dist/core/backends/opencode-server-manager.d.ts.map +1 -0
  520. package/dist/core/backends/opencode-server-manager.js +222 -0
  521. package/dist/core/backends/opencode-server-manager.js.map +1 -0
  522. package/dist/core/backends/opencode-types.d.ts +46 -0
  523. package/dist/core/backends/opencode-types.d.ts.map +1 -0
  524. package/dist/core/backends/opencode-types.js +14 -0
  525. package/dist/core/backends/opencode-types.js.map +1 -0
  526. package/dist/core/backends/plan-presets.d.ts +18 -5
  527. package/dist/core/backends/plan-presets.d.ts.map +1 -1
  528. package/dist/core/backends/plan-presets.js +144 -23
  529. package/dist/core/backends/plan-presets.js.map +1 -1
  530. package/dist/core/backends/process-config-cascade.d.ts +35 -0
  531. package/dist/core/backends/process-config-cascade.d.ts.map +1 -1
  532. package/dist/core/backends/process-config-cascade.js +35 -1
  533. package/dist/core/backends/process-config-cascade.js.map +1 -1
  534. package/dist/core/backends/prompt-utils.d.ts.map +1 -1
  535. package/dist/core/backends/prompt-utils.js +0 -2
  536. package/dist/core/backends/prompt-utils.js.map +1 -1
  537. package/dist/core/backends/quota-reset-hints.d.ts +44 -0
  538. package/dist/core/backends/quota-reset-hints.d.ts.map +1 -0
  539. package/dist/core/backends/quota-reset-hints.js +117 -0
  540. package/dist/core/backends/quota-reset-hints.js.map +1 -0
  541. package/dist/core/bang-commands/commands-close.d.ts +24 -0
  542. package/dist/core/bang-commands/commands-close.d.ts.map +1 -0
  543. package/dist/core/bang-commands/commands-close.js +24 -0
  544. package/dist/core/bang-commands/commands-close.js.map +1 -0
  545. package/dist/core/bang-commands/commands-cost.d.ts.map +1 -1
  546. package/dist/core/bang-commands/commands-cost.js +13 -0
  547. package/dist/core/bang-commands/commands-cost.js.map +1 -1
  548. package/dist/core/bang-commands/commands-help.d.ts.map +1 -1
  549. package/dist/core/bang-commands/commands-help.js +44 -5
  550. package/dist/core/bang-commands/commands-help.js.map +1 -1
  551. package/dist/core/bang-commands/commands-report.d.ts.map +1 -1
  552. package/dist/core/bang-commands/commands-report.js +1 -0
  553. package/dist/core/bang-commands/commands-report.js.map +1 -1
  554. package/dist/core/bang-commands/commands-stop-start.d.ts.map +1 -1
  555. package/dist/core/bang-commands/commands-stop-start.js +2 -0
  556. package/dist/core/bang-commands/commands-stop-start.js.map +1 -1
  557. package/dist/core/bang-commands/commands-wiki.d.ts.map +1 -1
  558. package/dist/core/bang-commands/commands-wiki.js +12 -1
  559. package/dist/core/bang-commands/commands-wiki.js.map +1 -1
  560. package/dist/core/bang-commands/format-utils.d.ts +13 -1
  561. package/dist/core/bang-commands/format-utils.d.ts.map +1 -1
  562. package/dist/core/bang-commands/format-utils.js +21 -2
  563. package/dist/core/bang-commands/format-utils.js.map +1 -1
  564. package/dist/core/bang-commands/index.d.ts +1 -0
  565. package/dist/core/bang-commands/index.d.ts.map +1 -1
  566. package/dist/core/bang-commands/index.js +3 -0
  567. package/dist/core/bang-commands/index.js.map +1 -1
  568. package/dist/core/bang-commands/registry.d.ts +50 -0
  569. package/dist/core/bang-commands/registry.d.ts.map +1 -1
  570. package/dist/core/bang-commands/registry.js +164 -19
  571. package/dist/core/bang-commands/registry.js.map +1 -1
  572. package/dist/core/channel-timeline.d.ts +18 -1
  573. package/dist/core/channel-timeline.d.ts.map +1 -1
  574. package/dist/core/channel-timeline.js +44 -0
  575. package/dist/core/channel-timeline.js.map +1 -1
  576. package/dist/core/context/activity-view-runner.js +9 -1
  577. package/dist/core/context/activity-view-runner.js.map +1 -1
  578. package/dist/core/context/default-schedules-runner.js +44 -4
  579. package/dist/core/context/default-schedules-runner.js.map +1 -1
  580. package/dist/core/context/domain-index-runner.js +9 -1
  581. package/dist/core/context/domain-index-runner.js.map +1 -1
  582. package/dist/core/context/entity-source-rename.d.ts.map +1 -1
  583. package/dist/core/context/entity-source-rename.js +9 -1
  584. package/dist/core/context/entity-source-rename.js.map +1 -1
  585. package/dist/core/context/policy-index-runner.js +9 -1
  586. package/dist/core/context/policy-index-runner.js.map +1 -1
  587. package/dist/core/context/reconciler-runner.js +9 -1
  588. package/dist/core/context/reconciler-runner.js.map +1 -1
  589. package/dist/core/context-builder.d.ts +97 -2
  590. package/dist/core/context-builder.d.ts.map +1 -1
  591. package/dist/core/context-builder.js +303 -30
  592. package/dist/core/context-builder.js.map +1 -1
  593. package/dist/core/context-frontmatter.d.ts +6 -0
  594. package/dist/core/context-frontmatter.d.ts.map +1 -1
  595. package/dist/core/context-frontmatter.js +120 -8
  596. package/dist/core/context-frontmatter.js.map +1 -1
  597. package/dist/core/context-health.js +21 -9
  598. package/dist/core/context-health.js.map +1 -1
  599. package/dist/core/context-validation/_pa_wip_context_validation/index.d.ts +19 -0
  600. package/dist/core/context-validation/_pa_wip_context_validation/index.d.ts.map +1 -0
  601. package/dist/core/context-validation/_pa_wip_context_validation/index.js +19 -0
  602. package/dist/core/context-validation/_pa_wip_context_validation/index.js.map +1 -0
  603. package/dist/core/context-validation/_pa_wip_context_validation/prepare-write.d.ts +94 -0
  604. package/dist/core/context-validation/_pa_wip_context_validation/prepare-write.d.ts.map +1 -0
  605. package/dist/core/context-validation/_pa_wip_context_validation/prepare-write.js +130 -0
  606. package/dist/core/context-validation/_pa_wip_context_validation/prepare-write.js.map +1 -0
  607. package/dist/core/context-validation/_pa_wip_context_validation/routine-rulebook.d.ts +60 -0
  608. package/dist/core/context-validation/_pa_wip_context_validation/routine-rulebook.d.ts.map +1 -0
  609. package/dist/core/context-validation/_pa_wip_context_validation/routine-rulebook.js +156 -0
  610. package/dist/core/context-validation/_pa_wip_context_validation/routine-rulebook.js.map +1 -0
  611. package/dist/core/context-validation/_pa_wip_context_validation/section.d.ts +41 -0
  612. package/dist/core/context-validation/_pa_wip_context_validation/section.d.ts.map +1 -0
  613. package/dist/core/context-validation/_pa_wip_context_validation/section.js +82 -0
  614. package/dist/core/context-validation/_pa_wip_context_validation/section.js.map +1 -0
  615. package/dist/core/context-validation/_pa_wip_context_validation/snapshot-debounce.d.ts +52 -0
  616. package/dist/core/context-validation/_pa_wip_context_validation/snapshot-debounce.d.ts.map +1 -0
  617. package/dist/core/context-validation/_pa_wip_context_validation/snapshot-debounce.js +110 -0
  618. package/dist/core/context-validation/_pa_wip_context_validation/snapshot-debounce.js.map +1 -0
  619. package/dist/core/context-validation/_pa_wip_context_validation/today.d.ts +85 -0
  620. package/dist/core/context-validation/_pa_wip_context_validation/today.d.ts.map +1 -0
  621. package/dist/core/context-validation/_pa_wip_context_validation/today.js +162 -0
  622. package/dist/core/context-validation/_pa_wip_context_validation/today.js.map +1 -0
  623. package/dist/core/context-validation/index.d.ts +19 -0
  624. package/dist/core/context-validation/index.d.ts.map +1 -0
  625. package/dist/core/context-validation/index.js +19 -0
  626. package/dist/core/context-validation/index.js.map +1 -0
  627. package/dist/core/context-validation/prepare-write.d.ts +95 -0
  628. package/dist/core/context-validation/prepare-write.d.ts.map +1 -0
  629. package/dist/core/context-validation/prepare-write.js +135 -0
  630. package/dist/core/context-validation/prepare-write.js.map +1 -0
  631. package/dist/core/context-validation/routine-rulebook.d.ts +60 -0
  632. package/dist/core/context-validation/routine-rulebook.d.ts.map +1 -0
  633. package/dist/core/context-validation/routine-rulebook.js +156 -0
  634. package/dist/core/context-validation/routine-rulebook.js.map +1 -0
  635. package/dist/core/context-validation/section.d.ts +41 -0
  636. package/dist/core/context-validation/section.d.ts.map +1 -0
  637. package/dist/core/context-validation/section.js +82 -0
  638. package/dist/core/context-validation/section.js.map +1 -0
  639. package/dist/core/context-validation/snapshot-debounce.d.ts +52 -0
  640. package/dist/core/context-validation/snapshot-debounce.d.ts.map +1 -0
  641. package/dist/core/context-validation/snapshot-debounce.js +110 -0
  642. package/dist/core/context-validation/snapshot-debounce.js.map +1 -0
  643. package/dist/core/context-validation/today.d.ts +85 -0
  644. package/dist/core/context-validation/today.d.ts.map +1 -0
  645. package/dist/core/context-validation/today.js +168 -0
  646. package/dist/core/context-validation/today.js.map +1 -0
  647. package/dist/core/daemon-api-cli.d.ts +6 -5
  648. package/dist/core/daemon-api-cli.d.ts.map +1 -1
  649. package/dist/core/daemon-api-cli.js +73 -32
  650. package/dist/core/daemon-api-cli.js.map +1 -1
  651. package/dist/core/dispatcher-error-handling.d.ts +13 -0
  652. package/dist/core/dispatcher-error-handling.d.ts.map +1 -1
  653. package/dist/core/dispatcher-error-handling.js +69 -0
  654. package/dist/core/dispatcher-error-handling.js.map +1 -1
  655. package/dist/core/dispatcher-hourly-check.d.ts +73 -1
  656. package/dist/core/dispatcher-hourly-check.d.ts.map +1 -1
  657. package/dist/core/dispatcher-hourly-check.js +249 -151
  658. package/dist/core/dispatcher-hourly-check.js.map +1 -1
  659. package/dist/core/dispatcher-message-handler.d.ts +11 -1
  660. package/dist/core/dispatcher-message-handler.d.ts.map +1 -1
  661. package/dist/core/dispatcher-message-handler.js +165 -47
  662. package/dist/core/dispatcher-message-handler.js.map +1 -1
  663. package/dist/core/dispatcher-morning-routine.d.ts +38 -30
  664. package/dist/core/dispatcher-morning-routine.d.ts.map +1 -1
  665. package/dist/core/dispatcher-morning-routine.js +162 -104
  666. package/dist/core/dispatcher-morning-routine.js.map +1 -1
  667. package/dist/core/dispatcher-prompt.d.ts +4 -1
  668. package/dist/core/dispatcher-prompt.d.ts.map +1 -1
  669. package/dist/core/dispatcher-prompt.js +18 -2
  670. package/dist/core/dispatcher-prompt.js.map +1 -1
  671. package/dist/core/dispatcher-repository-helpers.d.ts.map +1 -1
  672. package/dist/core/dispatcher-repository-helpers.js +5 -1
  673. package/dist/core/dispatcher-repository-helpers.js.map +1 -1
  674. package/dist/core/dispatcher-result-processor.d.ts.map +1 -1
  675. package/dist/core/dispatcher-result-processor.js +9 -4
  676. package/dist/core/dispatcher-result-processor.js.map +1 -1
  677. package/dist/core/dispatcher-scheduled-tasks.d.ts +1 -1
  678. package/dist/core/dispatcher-scheduled-tasks.d.ts.map +1 -1
  679. package/dist/core/dispatcher-scheduled-tasks.js +79 -16
  680. package/dist/core/dispatcher-scheduled-tasks.js.map +1 -1
  681. package/dist/core/dispatcher-types.d.ts +84 -12
  682. package/dist/core/dispatcher-types.d.ts.map +1 -1
  683. package/dist/core/dispatcher-types.js.map +1 -1
  684. package/dist/core/dispatcher.d.ts +50 -1
  685. package/dist/core/dispatcher.d.ts.map +1 -1
  686. package/dist/core/dispatcher.js +143 -8
  687. package/dist/core/dispatcher.js.map +1 -1
  688. package/dist/core/dm-freshness-metrics.d.ts +6 -5
  689. package/dist/core/dm-freshness-metrics.d.ts.map +1 -1
  690. package/dist/core/dm-freshness-metrics.js +7 -6
  691. package/dist/core/dm-freshness-metrics.js.map +1 -1
  692. package/dist/core/evening-review-verify.d.ts +164 -0
  693. package/dist/core/evening-review-verify.d.ts.map +1 -0
  694. package/dist/core/evening-review-verify.js +637 -0
  695. package/dist/core/evening-review-verify.js.map +1 -0
  696. package/dist/core/fetch-window-prompt-loader.d.ts +47 -0
  697. package/dist/core/fetch-window-prompt-loader.d.ts.map +1 -0
  698. package/dist/core/fetch-window-prompt-loader.js +72 -0
  699. package/dist/core/fetch-window-prompt-loader.js.map +1 -0
  700. package/dist/core/management-md.d.ts.map +1 -1
  701. package/dist/core/management-md.js +23 -9
  702. package/dist/core/management-md.js.map +1 -1
  703. package/dist/core/management-registry.d.ts +13 -21
  704. package/dist/core/management-registry.d.ts.map +1 -1
  705. package/dist/core/management-registry.js +27 -48
  706. package/dist/core/management-registry.js.map +1 -1
  707. package/dist/core/metrics.d.ts +88 -1
  708. package/dist/core/metrics.d.ts.map +1 -1
  709. package/dist/core/metrics.js +78 -2
  710. package/dist/core/metrics.js.map +1 -1
  711. package/dist/core/morning/agent-journal-appender.d.ts +197 -0
  712. package/dist/core/morning/agent-journal-appender.d.ts.map +1 -0
  713. package/dist/core/morning/agent-journal-appender.js +458 -0
  714. package/dist/core/morning/agent-journal-appender.js.map +1 -0
  715. package/dist/core/morning/handoff-parser.d.ts +45 -0
  716. package/dist/core/morning/handoff-parser.d.ts.map +1 -0
  717. package/dist/core/morning/handoff-parser.js +117 -0
  718. package/dist/core/morning/handoff-parser.js.map +1 -0
  719. package/dist/core/morning/journal-skeleton-builder.d.ts +157 -0
  720. package/dist/core/morning/journal-skeleton-builder.d.ts.map +1 -0
  721. package/dist/core/morning/journal-skeleton-builder.js +303 -0
  722. package/dist/core/morning/journal-skeleton-builder.js.map +1 -0
  723. package/dist/core/morning/orchestrator.d.ts +312 -0
  724. package/dist/core/morning/orchestrator.d.ts.map +1 -0
  725. package/dist/core/morning/orchestrator.js +827 -0
  726. package/dist/core/morning/orchestrator.js.map +1 -0
  727. package/dist/core/morning/parent-audit-emitter.d.ts +82 -0
  728. package/dist/core/morning/parent-audit-emitter.d.ts.map +1 -0
  729. package/dist/core/morning/parent-audit-emitter.js +120 -0
  730. package/dist/core/morning/parent-audit-emitter.js.map +1 -0
  731. package/dist/core/morning/roadmap-skeleton-builder.d.ts +159 -0
  732. package/dist/core/morning/roadmap-skeleton-builder.d.ts.map +1 -0
  733. package/dist/core/morning/roadmap-skeleton-builder.js +338 -0
  734. package/dist/core/morning/roadmap-skeleton-builder.js.map +1 -0
  735. package/dist/core/output-language-policy.js +1 -1
  736. package/dist/core/output-language-policy.js.map +1 -1
  737. package/dist/core/policy-files.d.ts +19 -2
  738. package/dist/core/policy-files.d.ts.map +1 -1
  739. package/dist/core/policy-files.js +65 -7
  740. package/dist/core/policy-files.js.map +1 -1
  741. package/dist/core/pre-pass-freshness.d.ts +28 -0
  742. package/dist/core/pre-pass-freshness.d.ts.map +1 -0
  743. package/dist/core/pre-pass-freshness.js +10 -0
  744. package/dist/core/pre-pass-freshness.js.map +1 -0
  745. package/dist/core/previous-week-digest.d.ts +130 -0
  746. package/dist/core/previous-week-digest.d.ts.map +1 -0
  747. package/dist/core/previous-week-digest.js +257 -0
  748. package/dist/core/previous-week-digest.js.map +1 -0
  749. package/dist/core/prompts.js +3 -3
  750. package/dist/core/prompts.js.map +1 -1
  751. package/dist/core/quiet-hours-sync.d.ts.map +1 -1
  752. package/dist/core/quiet-hours-sync.js +7 -0
  753. package/dist/core/quiet-hours-sync.js.map +1 -1
  754. package/dist/core/recurrence.d.ts +13 -0
  755. package/dist/core/recurrence.d.ts.map +1 -1
  756. package/dist/core/recurrence.js +108 -13
  757. package/dist/core/recurrence.js.map +1 -1
  758. package/dist/core/release-assets.d.ts +21 -1
  759. package/dist/core/release-assets.d.ts.map +1 -1
  760. package/dist/core/release-assets.js +58 -3
  761. package/dist/core/release-assets.js.map +1 -1
  762. package/dist/core/repository-management-docs.d.ts.map +1 -1
  763. package/dist/core/repository-management-docs.js +14 -4
  764. package/dist/core/repository-management-docs.js.map +1 -1
  765. package/dist/core/review-context.d.ts.map +1 -1
  766. package/dist/core/review-context.js +29 -1
  767. package/dist/core/review-context.js.map +1 -1
  768. package/dist/core/roadmap-maintenance.d.ts +213 -0
  769. package/dist/core/roadmap-maintenance.d.ts.map +1 -0
  770. package/dist/core/roadmap-maintenance.js +706 -0
  771. package/dist/core/roadmap-maintenance.js.map +1 -0
  772. package/dist/core/roadmap-validate.d.ts +5 -0
  773. package/dist/core/roadmap-validate.d.ts.map +1 -1
  774. package/dist/core/roadmap-validate.js +6 -69
  775. package/dist/core/roadmap-validate.js.map +1 -1
  776. package/dist/core/routine-acquisition-plan.d.ts +43 -7
  777. package/dist/core/routine-acquisition-plan.d.ts.map +1 -1
  778. package/dist/core/routine-acquisition-plan.js +99 -8
  779. package/dist/core/routine-acquisition-plan.js.map +1 -1
  780. package/dist/core/routine-fetch-window-retry.d.ts +41 -2
  781. package/dist/core/routine-fetch-window-retry.d.ts.map +1 -1
  782. package/dist/core/routine-fetch-window-retry.js +91 -8
  783. package/dist/core/routine-fetch-window-retry.js.map +1 -1
  784. package/dist/core/routine-fetch-window-runner.d.ts +55 -21
  785. package/dist/core/routine-fetch-window-runner.d.ts.map +1 -1
  786. package/dist/core/routine-fetch-window-runner.js +258 -35
  787. package/dist/core/routine-fetch-window-runner.js.map +1 -1
  788. package/dist/core/routine-windows.d.ts +17 -13
  789. package/dist/core/routine-windows.d.ts.map +1 -1
  790. package/dist/core/routine-windows.js +78 -36
  791. package/dist/core/routine-windows.js.map +1 -1
  792. package/dist/core/scheduler.d.ts +121 -37
  793. package/dist/core/scheduler.d.ts.map +1 -1
  794. package/dist/core/scheduler.js +359 -80
  795. package/dist/core/scheduler.js.map +1 -1
  796. package/dist/core/session-manager.d.ts +25 -6
  797. package/dist/core/session-manager.d.ts.map +1 -1
  798. package/dist/core/session-manager.js +32 -15
  799. package/dist/core/session-manager.js.map +1 -1
  800. package/dist/core/skeleton.d.ts.map +1 -1
  801. package/dist/core/skeleton.js +23 -23
  802. package/dist/core/skeleton.js.map +1 -1
  803. package/dist/core/skills-compiler.d.ts +275 -25
  804. package/dist/core/skills-compiler.d.ts.map +1 -1
  805. package/dist/core/skills-compiler.js +844 -205
  806. package/dist/core/skills-compiler.js.map +1 -1
  807. package/dist/core/skills-manifest.d.ts +104 -0
  808. package/dist/core/skills-manifest.d.ts.map +1 -1
  809. package/dist/core/skills-manifest.js +350 -39
  810. package/dist/core/skills-manifest.js.map +1 -1
  811. package/dist/core/wiki/git-precompile.d.ts +9 -0
  812. package/dist/core/wiki/git-precompile.d.ts.map +1 -1
  813. package/dist/core/wiki/git-precompile.js +7 -1
  814. package/dist/core/wiki/git-precompile.js.map +1 -1
  815. package/dist/core/workdir.d.ts +30 -1
  816. package/dist/core/workdir.d.ts.map +1 -1
  817. package/dist/core/workdir.js +140 -15
  818. package/dist/core/workdir.js.map +1 -1
  819. package/dist/db/entities-store.d.ts +5 -5
  820. package/dist/db/entities-store.js +5 -5
  821. package/dist/db/hourly-check-signals.d.ts.map +1 -1
  822. package/dist/db/hourly-check-signals.js +121 -35
  823. package/dist/db/hourly-check-signals.js.map +1 -1
  824. package/dist/db/observations.d.ts +1 -1
  825. package/dist/db/observations.js +1 -1
  826. package/dist/db/observations.js.map +1 -1
  827. package/dist/db/recurring-schedules.d.ts +32 -1
  828. package/dist/db/recurring-schedules.d.ts.map +1 -1
  829. package/dist/db/recurring-schedules.js +29 -10
  830. package/dist/db/recurring-schedules.js.map +1 -1
  831. package/dist/db/repositories-store.d.ts +2 -1
  832. package/dist/db/repositories-store.d.ts.map +1 -1
  833. package/dist/db/repositories-store.js +38 -3
  834. package/dist/db/repositories-store.js.map +1 -1
  835. package/dist/db/schema.d.ts.map +1 -1
  836. package/dist/db/schema.js +157 -51
  837. package/dist/db/schema.js.map +1 -1
  838. package/dist/db/wiki-store.d.ts.map +1 -1
  839. package/dist/db/wiki-store.js +3 -0
  840. package/dist/db/wiki-store.js.map +1 -1
  841. package/dist/index.js +308 -1473
  842. package/dist/index.js.map +1 -1
  843. package/dist/messaging/magic-phrase.d.ts +16 -0
  844. package/dist/messaging/magic-phrase.d.ts.map +1 -1
  845. package/dist/messaging/magic-phrase.js +53 -0
  846. package/dist/messaging/magic-phrase.js.map +1 -1
  847. package/dist/messaging/owner-channels.d.ts +24 -0
  848. package/dist/messaging/owner-channels.d.ts.map +1 -1
  849. package/dist/messaging/owner-channels.js +38 -0
  850. package/dist/messaging/owner-channels.js.map +1 -1
  851. package/dist/messaging/setup-welcome-dm.d.ts +30 -0
  852. package/dist/messaging/setup-welcome-dm.d.ts.map +1 -0
  853. package/dist/messaging/setup-welcome-dm.js +86 -0
  854. package/dist/messaging/setup-welcome-dm.js.map +1 -0
  855. package/dist/observers/calendar-poller.d.ts +2 -0
  856. package/dist/observers/calendar-poller.d.ts.map +1 -1
  857. package/dist/observers/calendar-poller.js +76 -54
  858. package/dist/observers/calendar-poller.js.map +1 -1
  859. package/dist/observers/delegated-sync-worker.d.ts +62 -0
  860. package/dist/observers/delegated-sync-worker.d.ts.map +1 -1
  861. package/dist/observers/delegated-sync-worker.js +128 -1
  862. package/dist/observers/delegated-sync-worker.js.map +1 -1
  863. package/dist/observers/git-watcher.d.ts +22 -0
  864. package/dist/observers/git-watcher.d.ts.map +1 -1
  865. package/dist/observers/git-watcher.js +31 -7
  866. package/dist/observers/git-watcher.js.map +1 -1
  867. package/dist/observers/imminent-event-scheduler.d.ts +2 -0
  868. package/dist/observers/imminent-event-scheduler.d.ts.map +1 -1
  869. package/dist/observers/imminent-event-scheduler.js +29 -0
  870. package/dist/observers/imminent-event-scheduler.js.map +1 -1
  871. package/dist/observers/notion-poller.d.ts +2 -0
  872. package/dist/observers/notion-poller.d.ts.map +1 -1
  873. package/dist/observers/notion-poller.js +44 -6
  874. package/dist/observers/notion-poller.js.map +1 -1
  875. package/dist/observers/poll-guard.d.ts +63 -0
  876. package/dist/observers/poll-guard.d.ts.map +1 -0
  877. package/dist/observers/poll-guard.js +89 -0
  878. package/dist/observers/poll-guard.js.map +1 -0
  879. package/dist/safety/absolute-block-audit.d.ts +17 -0
  880. package/dist/safety/absolute-block-audit.d.ts.map +1 -1
  881. package/dist/safety/absolute-block-audit.js +28 -2
  882. package/dist/safety/absolute-block-audit.js.map +1 -1
  883. package/dist/safety/agent-write-tracker.d.ts +42 -1
  884. package/dist/safety/agent-write-tracker.d.ts.map +1 -1
  885. package/dist/safety/agent-write-tracker.js +81 -1
  886. package/dist/safety/agent-write-tracker.js.map +1 -1
  887. package/dist/safety/always-disallowed.d.ts +34 -0
  888. package/dist/safety/always-disallowed.d.ts.map +1 -1
  889. package/dist/safety/always-disallowed.js +114 -7
  890. package/dist/safety/always-disallowed.js.map +1 -1
  891. package/dist/safety/audit.d.ts +20 -0
  892. package/dist/safety/audit.d.ts.map +1 -1
  893. package/dist/safety/audit.js +126 -0
  894. package/dist/safety/audit.js.map +1 -1
  895. package/dist/safety/risk-classifier.d.ts +17 -1
  896. package/dist/safety/risk-classifier.d.ts.map +1 -1
  897. package/dist/safety/risk-classifier.js +75 -7
  898. package/dist/safety/risk-classifier.js.map +1 -1
  899. package/dist/safety/subprocess-block-scanner.d.ts +89 -0
  900. package/dist/safety/subprocess-block-scanner.d.ts.map +1 -0
  901. package/dist/safety/subprocess-block-scanner.js +177 -0
  902. package/dist/safety/subprocess-block-scanner.js.map +1 -0
  903. package/dist/scheduler/hourly-check-gate.d.ts +23 -9
  904. package/dist/scheduler/hourly-check-gate.d.ts.map +1 -1
  905. package/dist/scheduler/hourly-check-gate.js +11 -6
  906. package/dist/scheduler/hourly-check-gate.js.map +1 -1
  907. package/dist/secrets/backend-api-key-env.d.ts.map +1 -1
  908. package/dist/secrets/backend-api-key-env.js +1 -0
  909. package/dist/secrets/backend-api-key-env.js.map +1 -1
  910. package/dist/services/delegated-backend-invoker.d.ts.map +1 -1
  911. package/dist/services/delegated-backend-invoker.js +8 -1
  912. package/dist/services/delegated-backend-invoker.js.map +1 -1
  913. package/dist/services/delegated-invoker-audit.d.ts.map +1 -1
  914. package/dist/services/delegated-invoker-audit.js +5 -1
  915. package/dist/services/delegated-invoker-audit.js.map +1 -1
  916. package/dist/services/delegated-proxy-config.d.ts +3 -2
  917. package/dist/services/delegated-proxy-config.d.ts.map +1 -1
  918. package/dist/services/delegated-proxy-config.js.map +1 -1
  919. package/dist/services/integrations/extract-write-item-id.d.ts +5 -2
  920. package/dist/services/integrations/extract-write-item-id.d.ts.map +1 -1
  921. package/dist/services/integrations/extract-write-item-id.js.map +1 -1
  922. package/dist/services/mcp/generators/index.d.ts +1 -0
  923. package/dist/services/mcp/generators/index.d.ts.map +1 -1
  924. package/dist/services/mcp/generators/index.js +3 -0
  925. package/dist/services/mcp/generators/index.js.map +1 -1
  926. package/dist/services/mcp/sdk-observations-server.d.ts +60 -0
  927. package/dist/services/mcp/sdk-observations-server.d.ts.map +1 -0
  928. package/dist/services/mcp/sdk-observations-server.js +161 -0
  929. package/dist/services/mcp/sdk-observations-server.js.map +1 -0
  930. package/dist/services/mcp/session-materializer.d.ts.map +1 -1
  931. package/dist/services/mcp/session-materializer.js +13 -9
  932. package/dist/services/mcp/session-materializer.js.map +1 -1
  933. package/dist/services/mcp/types.d.ts +1 -0
  934. package/dist/services/mcp/types.d.ts.map +1 -1
  935. package/dist/services/notion.d.ts +19 -1
  936. package/dist/services/notion.d.ts.map +1 -1
  937. package/dist/services/notion.js +41 -2
  938. package/dist/services/notion.js.map +1 -1
  939. package/dist/services/observations-batch.d.ts +100 -0
  940. package/dist/services/observations-batch.d.ts.map +1 -0
  941. package/dist/services/observations-batch.js +258 -0
  942. package/dist/services/observations-batch.js.map +1 -0
  943. package/dist/services/voice/transcriber.d.ts +23 -0
  944. package/dist/services/voice/transcriber.d.ts.map +1 -1
  945. package/dist/services/voice/transcriber.js +55 -0
  946. package/dist/services/voice/transcriber.js.map +1 -1
  947. package/dist/settings/runtime-settings.d.ts +9 -6
  948. package/dist/settings/runtime-settings.d.ts.map +1 -1
  949. package/dist/settings/runtime-settings.js +50 -17
  950. package/dist/settings/runtime-settings.js.map +1 -1
  951. package/package.json +3 -2
  952. package/dist/api/delegated-proxy-helper.d.ts +0 -33
  953. package/dist/api/delegated-proxy-helper.d.ts.map +0 -1
  954. package/dist/api/delegated-proxy-helper.js +0 -54
  955. package/dist/api/delegated-proxy-helper.js.map +0 -1
  956. package/dist/core/roadmap-merge.d.ts +0 -7
  957. package/dist/core/roadmap-merge.d.ts.map +0 -1
  958. package/dist/core/roadmap-merge.js +0 -187
  959. package/dist/core/roadmap-merge.js.map +0 -1
  960. package/dist/db/test-schemas.d.ts +0 -23
  961. package/dist/db/test-schemas.d.ts.map +0 -1
  962. package/dist/db/test-schemas.js +0 -111
  963. package/dist/db/test-schemas.js.map +0 -1
@@ -0,0 +1,706 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { localDateStr } from "@aitne/shared";
4
+ import { writeFileAtomically } from "./atomic-write.js";
5
+ import { CONTEXT_RELATIVE_PATHS } from "./context-paths.js";
6
+ import { stripRoadmapIdComment } from "./roadmap-ids.js";
7
+ import { findSectionLineBounds, validateRoadmap, validateRoadmapTransition, } from "./roadmap-validate.js";
8
+ import { createLogger } from "../logging.js";
9
+ const logger = createLogger("roadmap-maintenance");
10
+ /**
11
+ * Substep 2d — `[stale since YYYY-MM-DD]` marker is appended once the
12
+ * Source date is older than this many days. Pure mechanical mark; the
13
+ * agent is NOT notified.
14
+ */
15
+ export const STALE_THRESHOLD_DAYS = 90;
16
+ /**
17
+ * Substep 2d — `[awaiting-reply YYYY-MM-DD]` marker is appended once
18
+ * the Source date is older than this many days, AND the line already
19
+ * carries a `[stale since ...]` marker. Pure mechanical mark.
20
+ */
21
+ export const AWAITING_REPLY_THRESHOLD_DAYS = 180;
22
+ /**
23
+ * Substep 2d — once a line has carried `[awaiting-reply YYYY-MM-DD]`
24
+ * for this many days with no reply surfaced (i.e. nothing has bumped
25
+ * the line's Source date), drop the line entirely. Matches the
26
+ * task-flow §2d "remove the line via PATCH replace" branch.
27
+ */
28
+ export const AWAITING_REPLY_DROP_DAYS = 7;
29
+ /**
30
+ * Substep 2b — entries whose canonical date is more than this many
31
+ * days in the future are pruned (the daily refresh will re-derive them
32
+ * when their lead time arrives). Mirrors the evening-review task-flow
33
+ * §2b sweep horizon.
34
+ */
35
+ export const AGENT_PLAN_FUTURE_HORIZON_DAYS = 180;
36
+ /**
37
+ * Substep 2b — past entries (canonical date < today) whose latest
38
+ * `completed YYYY-MM-DD:` Preparation Timeline row is older than this
39
+ * many days are pruned (the prep was wrapped up; the entry's purpose
40
+ * is exhausted). Entries inside the `[today - N, today + 180d]` window
41
+ * are always preserved even when no prep rows fired.
42
+ */
43
+ export const AGENT_PLAN_COMPLETED_RETENTION_DAYS = 7;
44
+ const AGENT_PLAN_DATE_RE = /^### (\d{4}-\d{2}-\d{2})(?: ~ \d{2}-\d{2})?: /;
45
+ const SCHEDULED_HEADING_RE = /^### Scheduled: .+\s+\(task #(\d+)\)\s*(?:<!--.*-->)?\s*$/;
46
+ const SCHEDULED_WAKE_UP_RE = /^Source: scheduled\.task — wake-up (\d{4}-\d{2}-\d{2}) \d{2}:\d{2}$/;
47
+ const STATUS_LINE_RE = /^Status:\s*\S/;
48
+ const COMPLETED_PREP_RE = /^- (?:✓ )?completed (\d{4}-\d{2}-\d{2}):/;
49
+ const STALE_MARKER_RE = /\s+\[stale since \d{4}-\d{2}-\d{2}\]/;
50
+ const AWAITING_MARKER_RE = /\s+\[awaiting-reply (\d{4}-\d{2}-\d{2})\]/;
51
+ const LONG_TERM_PLAN_SOURCE_DATE_RE = /\s—\s+Source: (?:dm|mail|observation|reading|dashboard|manual) (\d{4}-\d{2}-\d{2})/;
52
+ /**
53
+ * Agent-action `action_type` emitted once per cron tick. Keep stable —
54
+ * the dashboard's audit log filters on this exact value.
55
+ */
56
+ export const ROADMAP_MAINTENANCE_ACTION_TYPE = "roadmap_mechanical_maintenance";
57
+ /**
58
+ * Journal block heading. Written / appended to via the same in-process
59
+ * chokepoint (`saveJournalSnapshot` + `writeFileAtomically` +
60
+ * `writeTracker.markWriting`) as the roadmap write itself. See
61
+ * `runRoadmapMechanicalMaintenance` `appendJournalLine`.
62
+ */
63
+ const JOURNAL_SECTION_HEADER = "## Roadmap maintenance";
64
+ /**
65
+ * Daily mechanical maintenance for `roadmap.md`. Extracts substeps
66
+ * 2a / 2b / 2d of the legacy `routine.evening_review` Step 2 into a
67
+ * typed in-process pass that does NOT spawn an LLM session — those
68
+ * substeps are pure date math and table joins against
69
+ * `agent_schedule`, and the LLM-rebuild discipline they require makes
70
+ * them a costly and error-prone fit for a Sonnet routine. See
71
+ * `docs/design/appendices/evening-review-slimdown.md` §2.2.
72
+ *
73
+ * Invariants:
74
+ * - Acquires the same `RoadmapWriteLockManager` singleton the
75
+ * dispatcher uses for `routine.roadmap_refresh`. If the lock is
76
+ * held, the maintenance tick is silently skipped and the next
77
+ * daily fire picks up the work.
78
+ * - Mutates only `## Agent Action Plan` and `## Long-term Plans`
79
+ * section bodies. Sibling sections (`## Annual Goals`,
80
+ * `## Quarterly Focus`, `## Recurring`) are preserved byte-for-byte
81
+ * by line-targeted splicing.
82
+ * - On any mutation, validates the rebuilt body with
83
+ * `validateRoadmap` before atomic-write. A validation failure
84
+ * aborts the write and surfaces in `errors[]` — partial state is
85
+ * never committed.
86
+ * - Records a snapshot of the previous body to `md_file_snapshots`
87
+ * before writing so the previous body is recoverable.
88
+ * - `writeTracker.markWriting` fires **before** the rename so
89
+ * downstream Obsidian / Git observers tag the resulting fs event
90
+ * `actor='agent'` rather than mis-attributing to the user. On
91
+ * write failure the mark is rolled back via `unmark()` to avoid
92
+ * suppressing a legitimate later user edit (C2).
93
+ * - Emits exactly one `agent_actions` audit row per fire (success,
94
+ * skipped, or failed), regardless of whether any mutation was
95
+ * actually written.
96
+ *
97
+ * Failure handling mirrors `runRepositoryManagementScan` — substep
98
+ * failures are caught and accumulated, the run continues with the
99
+ * remaining substeps, and a partial-result audit row records what
100
+ * went wrong. The caller (`scheduler.ts` cron callback) does NOT
101
+ * propagate failure into `routine.evening_review` 15 minutes later.
102
+ */
103
+ export function runRoadmapMechanicalMaintenance(deps) {
104
+ const result = {
105
+ status: "success",
106
+ statusSynced: 0,
107
+ swept: 0,
108
+ staleMarked: 0,
109
+ errors: [],
110
+ };
111
+ // Outer try/finally guarantees a single `agent_actions` audit row per
112
+ // fire regardless of which path terminates the run (skip, validate
113
+ // fail, transition fail, write fail, journal fail, full success). The
114
+ // design (§2.2 "Audit row") calls for one row per cron tick — without
115
+ // this guard, an early return from inside the lock-bearing block
116
+ // skipped `emitAudit` and the operator's dashboard audit log silently
117
+ // lost the failure.
118
+ try {
119
+ const now = deps.now ?? new Date();
120
+ const today = localDateStr(now, deps.timezone);
121
+ const roadmapPath = join(deps.contextDir, CONTEXT_RELATIVE_PATHS.roadmap);
122
+ if (!existsSync(roadmapPath)) {
123
+ result.status = "skipped";
124
+ result.skipReason = "roadmap_not_found";
125
+ logger.info({ roadmapPath }, "roadmap.md not found — skipping maintenance");
126
+ return result;
127
+ }
128
+ const lock = deps.roadmapWriteLock.acquire();
129
+ if (!lock.ok) {
130
+ result.status = "skipped";
131
+ result.skipReason = "roadmap_write_lock_held";
132
+ logger.info({ holder: lock.holder }, "Roadmap write lock held — skipping maintenance");
133
+ return result;
134
+ }
135
+ try {
136
+ const original = readFileSync(roadmapPath, "utf-8");
137
+ let working = original;
138
+ try {
139
+ const out = applyScheduledStatusSync(working, deps.db);
140
+ working = out.content;
141
+ result.statusSynced = out.statusSynced;
142
+ }
143
+ catch (err) {
144
+ logger.error({ err }, "Substep 2a (scheduled status sync) failed");
145
+ result.errors.push({
146
+ step: "2a_scheduled_status_sync",
147
+ message: err.message,
148
+ });
149
+ }
150
+ try {
151
+ const out = applyAgentActionPlanSweep(working, today);
152
+ working = out.content;
153
+ result.swept = out.swept;
154
+ }
155
+ catch (err) {
156
+ logger.error({ err }, "Substep 2b (action plan sweep) failed");
157
+ result.errors.push({
158
+ step: "2b_action_plan_sweep",
159
+ message: err.message,
160
+ });
161
+ }
162
+ try {
163
+ const out = applyLongTermPlansStaleMark(working, today);
164
+ working = out.content;
165
+ result.staleMarked = out.staleMarked;
166
+ }
167
+ catch (err) {
168
+ logger.error({ err }, "Substep 2d (long-term plans stale-mark) failed");
169
+ result.errors.push({
170
+ step: "2d_long_term_plans_stale_mark",
171
+ message: err.message,
172
+ });
173
+ }
174
+ if (working !== original) {
175
+ const validation = validateRoadmap(working);
176
+ if (!validation.ok) {
177
+ result.errors.push({
178
+ step: "validate",
179
+ message: validation.error?.message ??
180
+ "validateRoadmap rejected the maintained body",
181
+ });
182
+ result.status = "failed";
183
+ return result;
184
+ }
185
+ // Defence in depth: mirror the chokepoint's transition guard. A
186
+ // direct `writeFileAtomically` bypass below skips the HTTP
187
+ // PATCH plumbing that runs `validateRoadmapTransition` on every
188
+ // LLM-driven roadmap write — without this call, a regression in
189
+ // a substep (e.g. dropping a `### Scheduled:` entry whose status
190
+ // is still `pending`, or removing a future-far event before its
191
+ // retention window permits) could silently land on disk. The
192
+ // transition validator catches the same removal-rule violations
193
+ // the chokepoint catches, and aborts the write with the original
194
+ // bytes intact.
195
+ const transition = validateRoadmapTransition(original, working, {
196
+ today,
197
+ timezone: deps.timezone,
198
+ });
199
+ if (!transition.ok) {
200
+ result.errors.push({
201
+ step: "transition_validate",
202
+ message: transition.error?.message ??
203
+ "validateRoadmapTransition rejected the maintained body",
204
+ });
205
+ result.status = "failed";
206
+ return result;
207
+ }
208
+ try {
209
+ saveSnapshot(deps.db, "roadmap", original, "roadmap_maintenance");
210
+ // Mark before the rename so FS-watch consumers attribute the
211
+ // resulting event to the agent. Roll back on failure (C2).
212
+ deps.writeTracker?.markWriting(roadmapPath, working);
213
+ try {
214
+ writeFileAtomically(roadmapPath, working);
215
+ }
216
+ catch (writeErr) {
217
+ deps.writeTracker?.unmark(roadmapPath);
218
+ throw writeErr;
219
+ }
220
+ deps.onIndexableContextChange?.(CONTEXT_RELATIVE_PATHS.roadmap);
221
+ }
222
+ catch (err) {
223
+ logger.error({ err }, "Failed to persist roadmap maintenance write");
224
+ result.errors.push({
225
+ step: "write",
226
+ message: err.message,
227
+ });
228
+ result.status = "failed";
229
+ return result;
230
+ }
231
+ }
232
+ try {
233
+ appendJournalLine(deps, result, now, today);
234
+ }
235
+ catch (err) {
236
+ logger.warn({ err }, "Failed to append maintenance journal line");
237
+ result.errors.push({
238
+ step: "journal",
239
+ message: err.message,
240
+ });
241
+ }
242
+ }
243
+ finally {
244
+ deps.roadmapWriteLock.release(lock.lockId);
245
+ }
246
+ return result;
247
+ }
248
+ finally {
249
+ // Promote any accumulated soft-failures into the final status, then
250
+ // emit exactly one audit row for the tick. Run inside `finally` so
251
+ // every termination path (including `return result` from inside the
252
+ // lock try-block) is recorded.
253
+ if (result.errors.length > 0 && result.status === "success") {
254
+ result.status = "failed";
255
+ }
256
+ emitAudit(deps.db, result);
257
+ logger.info({
258
+ status: result.status,
259
+ statusSynced: result.statusSynced,
260
+ swept: result.swept,
261
+ staleMarked: result.staleMarked,
262
+ errorCount: result.errors.length,
263
+ }, "Roadmap mechanical maintenance complete");
264
+ }
265
+ }
266
+ /**
267
+ * Reconcile every `### Scheduled: <desc> (task #<id>)` entry under
268
+ * `## Agent Action Plan` against the latest `agent_schedule.status`
269
+ * row for that id. `pending → running → completed / failed` flips are
270
+ * applied by rewriting the entry's `Status:` line in place. Sibling
271
+ * lines (Source, Preparation Timeline, etc.) are preserved verbatim.
272
+ *
273
+ * Mapping notes:
274
+ * - `skipped` rows are surfaced as `failed`. From the operator's
275
+ * perspective a skipped scheduled.task means the dispatcher chose
276
+ * not to run it (paused daemon, autonomous gate, quota out) — the
277
+ * loop did not close, and the roadmap should reflect that.
278
+ * - Entries whose `(task #<id>)` does not resolve in `agent_schedule`
279
+ * (row deleted post-retention) are left untouched. Removal is the
280
+ * sweep's job (2b's `[today - 7d, today + 180d]` window already
281
+ * handles those naturally) — not 2a's.
282
+ *
283
+ * Pure: no I/O outside the `db.prepare(...).get(id)` lookup.
284
+ */
285
+ export function applyScheduledStatusSync(content, db) {
286
+ const lines = content.split("\n");
287
+ const bounds = findSectionLineBounds(lines, "Agent Action Plan");
288
+ if (!bounds)
289
+ return { content, statusSynced: 0 };
290
+ const stmt = db.prepare("SELECT status FROM agent_schedule WHERE id = ?");
291
+ let statusSynced = 0;
292
+ let cursor = bounds.bodyStart;
293
+ while (cursor < bounds.bodyEnd) {
294
+ const heading = lines[cursor];
295
+ if (!heading.startsWith("### ")) {
296
+ cursor += 1;
297
+ continue;
298
+ }
299
+ const entryEnd = findEntryEnd(lines, cursor, bounds.bodyEnd);
300
+ const taskIdMatch = SCHEDULED_HEADING_RE.exec(stripRoadmapIdComment(heading).line);
301
+ if (!taskIdMatch) {
302
+ cursor = entryEnd;
303
+ continue;
304
+ }
305
+ const taskId = Number(taskIdMatch[1]);
306
+ if (!Number.isFinite(taskId)) {
307
+ cursor = entryEnd;
308
+ continue;
309
+ }
310
+ const row = stmt.get(taskId);
311
+ if (!row) {
312
+ cursor = entryEnd;
313
+ continue;
314
+ }
315
+ const mapped = mapAgentScheduleStatus(row.status);
316
+ for (let i = cursor + 1; i < entryEnd; i += 1) {
317
+ if (STATUS_LINE_RE.test(lines[i])) {
318
+ if (lines[i] !== `Status: ${mapped}`) {
319
+ lines[i] = `Status: ${mapped}`;
320
+ statusSynced += 1;
321
+ }
322
+ break;
323
+ }
324
+ }
325
+ cursor = entryEnd;
326
+ }
327
+ return { content: lines.join("\n"), statusSynced };
328
+ }
329
+ function mapAgentScheduleStatus(status) {
330
+ if (status === "running")
331
+ return "running";
332
+ if (status === "completed")
333
+ return "completed";
334
+ if (status === "failed" || status === "skipped")
335
+ return "failed";
336
+ return "pending";
337
+ }
338
+ /**
339
+ * Sweep `## Agent Action Plan` entries that have aged out:
340
+ *
341
+ * - Event header date > today + 180d → remove
342
+ * - Header date < today - 7d AND the entry's latest `completed
343
+ * YYYY-MM-DD:` Preparation Timeline row exists AND is itself
344
+ * older than 7 days → remove (only when the entry is in a
345
+ * terminal state — see "Scheduled-entry safety" below)
346
+ *
347
+ * Entries inside the `[today - 7d, today + 180d]` window are
348
+ * preserved unconditionally — even when their prep rows fired and
349
+ * completed inside that window, the daily refresh prunes them when
350
+ * the header date rolls off the back of the window. That preserves
351
+ * the "shows up the day of and the morning after" surface contract.
352
+ *
353
+ * For Scheduled entries, the canonical date is the `wake-up
354
+ * YYYY-MM-DD` extracted from the `Source: scheduled.task — wake-up
355
+ * YYYY-MM-DD HH:MM` line that follows the heading. Without that
356
+ * line the entry is held (defensive — never drop a malformed entry
357
+ * we can't date-reason about).
358
+ *
359
+ * Scheduled-entry safety: mirror `validateRoadmapTransition`'s
360
+ * `isEntryRemovalAllowed` rule for `### Scheduled:` entries — never
361
+ * remove one unless its `Status:` line is terminal (`completed` or
362
+ * `failed`). Without this guard the maintenance pass could drop a
363
+ * still-`pending` row (e.g. an `agent_schedule` row that was deleted
364
+ * by retention while the roadmap kept its `pending` status), which is
365
+ * exactly what the chokepoint transition validator blocks. Future-
366
+ * dated scheduled entries (`wakeUp > today + 180d`) are also
367
+ * preserved — the validator does not permit their removal at all, and
368
+ * the eventual fire of the scheduled task is the natural cleanup
369
+ * trigger.
370
+ *
371
+ * Section-rebuild discipline: the function splices out the exact line
372
+ * ranges of removed entries and keeps every other byte of the file
373
+ * identical. Sibling sections are never touched.
374
+ */
375
+ export function applyAgentActionPlanSweep(content, todayYmd) {
376
+ const lines = content.split("\n");
377
+ const bounds = findSectionLineBounds(lines, "Agent Action Plan");
378
+ if (!bounds)
379
+ return { content, swept: 0 };
380
+ const futureCutoff = addDays(todayYmd, AGENT_PLAN_FUTURE_HORIZON_DAYS);
381
+ const pastCutoff = addDays(todayYmd, -AGENT_PLAN_COMPLETED_RETENTION_DAYS);
382
+ const removals = [];
383
+ let cursor = bounds.bodyStart;
384
+ while (cursor < bounds.bodyEnd) {
385
+ const line = lines[cursor];
386
+ if (!line.startsWith("### ")) {
387
+ cursor += 1;
388
+ continue;
389
+ }
390
+ const entryEnd = findEntryEnd(lines, cursor, bounds.bodyEnd);
391
+ const entryLines = lines.slice(cursor, entryEnd);
392
+ const heading = stripRoadmapIdComment(entryLines[0]).line;
393
+ const isScheduled = SCHEDULED_HEADING_RE.test(heading);
394
+ const date = extractEntryDate(heading, entryLines);
395
+ if (!date) {
396
+ cursor = entryEnd;
397
+ continue;
398
+ }
399
+ if (date > futureCutoff) {
400
+ // Future-dated scheduled entries stay until the scheduled task
401
+ // itself fires — the chokepoint transition validator blocks
402
+ // their removal, and the maintenance pass must match that rule.
403
+ // Event entries (calendar / planned), in contrast, may legitimately
404
+ // be promoted-then-dropped from the roadmap before the date.
405
+ if (!isScheduled) {
406
+ removals.push({ start: cursor, end: entryEnd });
407
+ }
408
+ }
409
+ else if (date < pastCutoff) {
410
+ const latestCompleted = extractLatestCompletedPrepDate(entryLines);
411
+ if (latestCompleted && latestCompleted < pastCutoff) {
412
+ if (!isScheduled || hasTerminalStatusLine(entryLines)) {
413
+ removals.push({ start: cursor, end: entryEnd });
414
+ }
415
+ }
416
+ }
417
+ cursor = entryEnd;
418
+ }
419
+ if (removals.length === 0) {
420
+ return { content, swept: 0 };
421
+ }
422
+ const next = [];
423
+ let copyCursor = 0;
424
+ for (const span of removals) {
425
+ for (let i = copyCursor; i < span.start; i += 1)
426
+ next.push(lines[i]);
427
+ copyCursor = span.end;
428
+ }
429
+ for (let i = copyCursor; i < lines.length; i += 1)
430
+ next.push(lines[i]);
431
+ return {
432
+ content: collapseTrailingBlanks(next, bounds.headerLine).join("\n"),
433
+ swept: removals.length,
434
+ };
435
+ }
436
+ /**
437
+ * After a span removal inside a section, the leftover content can
438
+ * contain `\n\n\n` runs that fail no validator but read as drift. We
439
+ * collapse interior runs of 2+ blank lines within the same section
440
+ * (starting from the section header) to a single blank line. Lines
441
+ * outside the section are untouched.
442
+ *
443
+ * We use the headerLine to scope this; if it's the last section, we
444
+ * also tail-trim trailing blanks so the file does not grow a blank
445
+ * suffix on every sweep.
446
+ */
447
+ function collapseTrailingBlanks(lines, headerLine) {
448
+ const out = lines.slice(0, headerLine);
449
+ let blankRun = 0;
450
+ for (let i = headerLine; i < lines.length; i += 1) {
451
+ const line = lines[i];
452
+ if (line.trim() === "") {
453
+ blankRun += 1;
454
+ if (blankRun <= 1)
455
+ out.push(line);
456
+ continue;
457
+ }
458
+ blankRun = 0;
459
+ out.push(line);
460
+ }
461
+ return out;
462
+ }
463
+ function extractEntryDate(heading, entryLines) {
464
+ const eventMatch = AGENT_PLAN_DATE_RE.exec(heading);
465
+ if (eventMatch)
466
+ return eventMatch[1];
467
+ if (!SCHEDULED_HEADING_RE.test(heading))
468
+ return null;
469
+ for (let i = 1; i < entryLines.length; i += 1) {
470
+ const wake = SCHEDULED_WAKE_UP_RE.exec(entryLines[i]);
471
+ if (wake)
472
+ return wake[1];
473
+ }
474
+ return null;
475
+ }
476
+ function extractLatestCompletedPrepDate(entryLines) {
477
+ let latest = null;
478
+ for (const line of entryLines) {
479
+ const match = COMPLETED_PREP_RE.exec(line);
480
+ if (!match)
481
+ continue;
482
+ if (latest === null || match[1] > latest)
483
+ latest = match[1];
484
+ }
485
+ return latest;
486
+ }
487
+ /**
488
+ * Match the `Status:` line of a `### Scheduled:` entry against the
489
+ * transition validator's terminal-state criterion. Returns true when
490
+ * the status value is `completed` or `failed`; anything else
491
+ * (`pending`, `running`, missing line) is non-terminal. Used by 2b to
492
+ * keep the sweep aligned with `isEntryRemovalAllowed` in
493
+ * `roadmap-validate.ts`.
494
+ */
495
+ function hasTerminalStatusLine(entryLines) {
496
+ for (const line of entryLines) {
497
+ if (!STATUS_LINE_RE.test(line))
498
+ continue;
499
+ const value = line.slice("Status:".length).trim().toLowerCase();
500
+ return value === "completed" || value === "failed";
501
+ }
502
+ return false;
503
+ }
504
+ /**
505
+ * Apply mechanical staleness markers to `## Long-term Plans` lines:
506
+ *
507
+ * - `[awaiting-reply YYYY-MM-DD]` present AND awaiting-reply date is
508
+ * < today - 7d → remove the line entirely.
509
+ * - Source date < today - 180d AND `[stale since ...]` already
510
+ * present AND `[awaiting-reply ...]` not present → append
511
+ * `[awaiting-reply <today>]`.
512
+ * - Source date < today - 90d AND `[stale since ...]` not present
513
+ * → append `[stale since <today>]`.
514
+ *
515
+ * The promotion / removal logic intentionally honours the existing
516
+ * marker layout (`[stale since ...]` first, `[awaiting-reply ...]`
517
+ * second) so the rebuilt line round-trips through `validateRoadmap`'s
518
+ * `TRAILING_MARKERS_RE`.
519
+ *
520
+ * Pure: parses Source date directly off the line text via
521
+ * `LONG_TERM_PLAN_SOURCE_DATE_RE`. Lines without a parseable Source
522
+ * are held untouched.
523
+ */
524
+ export function applyLongTermPlansStaleMark(content, todayYmd) {
525
+ const lines = content.split("\n");
526
+ const bounds = findSectionLineBounds(lines, "Long-term Plans");
527
+ if (!bounds)
528
+ return { content, staleMarked: 0 };
529
+ const staleCutoff = addDays(todayYmd, -STALE_THRESHOLD_DAYS);
530
+ const awaitingCutoff = addDays(todayYmd, -AWAITING_REPLY_THRESHOLD_DAYS);
531
+ const dropCutoff = addDays(todayYmd, -AWAITING_REPLY_DROP_DAYS);
532
+ let staleMarked = 0;
533
+ const kept = [];
534
+ for (let i = 0; i < lines.length; i += 1) {
535
+ if (i < bounds.bodyStart || i >= bounds.bodyEnd) {
536
+ kept.push(lines[i]);
537
+ continue;
538
+ }
539
+ const line = lines[i];
540
+ if (line.trim() === "" || !line.startsWith("- ")) {
541
+ kept.push(line);
542
+ continue;
543
+ }
544
+ const sourceMatch = LONG_TERM_PLAN_SOURCE_DATE_RE.exec(line);
545
+ if (!sourceMatch) {
546
+ kept.push(line);
547
+ continue;
548
+ }
549
+ // Detach the `<!-- id: rm-... -->` suffix so the canonical
550
+ // Long-term Plans regex (`[stale since ...]` and
551
+ // `[awaiting-reply ...]` BEFORE the id comment, when present) is
552
+ // preserved. We re-append the same comment after mutation.
553
+ const stripped = stripRoadmapIdComment(line);
554
+ const base = stripped.line;
555
+ const idSuffix = stripped.id ? ` <!-- id: ${stripped.id} -->` : "";
556
+ const sourceDate = sourceMatch[1];
557
+ const awaitingMatch = AWAITING_MARKER_RE.exec(base);
558
+ if (awaitingMatch && awaitingMatch[1] < dropCutoff) {
559
+ staleMarked += 1;
560
+ continue;
561
+ }
562
+ const hasStale = STALE_MARKER_RE.test(base);
563
+ if (sourceDate < awaitingCutoff && hasStale && !awaitingMatch) {
564
+ kept.push(`${base} [awaiting-reply ${todayYmd}]${idSuffix}`);
565
+ staleMarked += 1;
566
+ continue;
567
+ }
568
+ if (sourceDate < staleCutoff && !hasStale) {
569
+ if (awaitingMatch) {
570
+ const head = base.slice(0, awaitingMatch.index);
571
+ const tail = base.slice(awaitingMatch.index);
572
+ kept.push(`${head} [stale since ${todayYmd}]${tail}${idSuffix}`);
573
+ }
574
+ else {
575
+ kept.push(`${base} [stale since ${todayYmd}]${idSuffix}`);
576
+ }
577
+ staleMarked += 1;
578
+ continue;
579
+ }
580
+ kept.push(line);
581
+ }
582
+ return { content: kept.join("\n"), staleMarked };
583
+ }
584
+ // ── Journal ────────────────────────────────────────────────────────────────
585
+ function appendJournalLine(deps, result, now, today) {
586
+ const journalPath = join(deps.contextDir, CONTEXT_RELATIVE_PATHS.agent.journal);
587
+ const time = formatHm(now, deps.timezone);
588
+ const summary = `- ${today} ${time}: status_synced=${result.statusSynced}, swept=${result.swept}, stale_marked=${result.staleMarked}` +
589
+ (result.errors.length > 0
590
+ ? `, errors=${result.errors.length} (${result.errors.map((e) => e.step).join(",")})`
591
+ : "");
592
+ let original = null;
593
+ if (existsSync(journalPath)) {
594
+ original = readFileSync(journalPath, "utf-8");
595
+ }
596
+ const next = appendToJournalSection(original, summary);
597
+ if (original !== null) {
598
+ saveSnapshot(deps.db, "agent/journal", original, "roadmap_maintenance_journal");
599
+ }
600
+ // Mark before the rename so FS-watch consumers attribute the
601
+ // resulting event to the agent. Roll back on failure (C2).
602
+ deps.writeTracker?.markWriting(journalPath, next);
603
+ try {
604
+ writeFileAtomically(journalPath, next);
605
+ }
606
+ catch (writeErr) {
607
+ deps.writeTracker?.unmark(journalPath);
608
+ throw writeErr;
609
+ }
610
+ deps.onIndexableContextChange?.(CONTEXT_RELATIVE_PATHS.agent.journal);
611
+ }
612
+ /**
613
+ * Append `summary` to the `## Roadmap maintenance` section of
614
+ * `agent/journal.md`, creating the section when absent. Exported for
615
+ * unit tests so the fresh-file vs. existing-section vs. existing-file
616
+ * branches can be pinned without standing up a sqlite + fs harness.
617
+ */
618
+ export function appendToJournalSection(original, summary) {
619
+ if (original === null) {
620
+ return `# Agent journal\n\n${JOURNAL_SECTION_HEADER}\n\n${summary}\n`;
621
+ }
622
+ const lines = original.split("\n");
623
+ const bounds = findSectionLineBounds(lines, "Roadmap maintenance");
624
+ if (bounds) {
625
+ let insertAt = bounds.bodyEnd;
626
+ while (insertAt > bounds.bodyStart && lines[insertAt - 1].trim() === "") {
627
+ insertAt -= 1;
628
+ }
629
+ const next = [
630
+ ...lines.slice(0, insertAt),
631
+ summary,
632
+ ...lines.slice(insertAt),
633
+ ];
634
+ let out = next.join("\n");
635
+ if (!out.endsWith("\n"))
636
+ out += "\n";
637
+ return out;
638
+ }
639
+ const trimmed = original.replace(/\n+$/, "");
640
+ return `${trimmed}\n\n${JOURNAL_SECTION_HEADER}\n\n${summary}\n`;
641
+ }
642
+ // ── Audit / snapshot helpers ───────────────────────────────────────────────
643
+ function emitAudit(db, result) {
644
+ try {
645
+ db.prepare(`INSERT INTO agent_actions
646
+ (action_type, trigger, result, detail, started_at, completed_at)
647
+ VALUES (?, 'autonomous', ?, json(?), datetime('now'), datetime('now'))`).run(ROADMAP_MAINTENANCE_ACTION_TYPE, result.status === "success" ? "success" : result.status === "skipped" ? "skipped" : "failed", JSON.stringify({
648
+ statusSynced: result.statusSynced,
649
+ swept: result.swept,
650
+ staleMarked: result.staleMarked,
651
+ errors: result.errors,
652
+ ...(result.skipReason ? { skipReason: result.skipReason } : {}),
653
+ }));
654
+ }
655
+ catch (err) {
656
+ logger.warn({ err }, "Failed to emit roadmap_mechanical_maintenance audit row");
657
+ }
658
+ }
659
+ function saveSnapshot(db, filePath, content, trigger) {
660
+ try {
661
+ db.prepare("INSERT INTO md_file_snapshots (file_path, content, trigger, session_id) VALUES (?, ?, ?, ?)").run(filePath, content, trigger, null);
662
+ }
663
+ catch (err) {
664
+ logger.warn({ err, filePath, trigger }, "Failed to save md_file_snapshots row");
665
+ }
666
+ }
667
+ // ── Date / parsing helpers ─────────────────────────────────────────────────
668
+ function addDays(ymd, days) {
669
+ const [y, m, d] = ymd.split("-").map(Number);
670
+ const date = new Date(Date.UTC(y, m - 1, d));
671
+ date.setUTCDate(date.getUTCDate() + days);
672
+ return date.toISOString().slice(0, 10);
673
+ }
674
+ function formatHm(now, timezone) {
675
+ if (!timezone) {
676
+ return `${String(now.getHours()).padStart(2, "0")}:${String(now.getMinutes()).padStart(2, "0")}`;
677
+ }
678
+ const fmt = new Intl.DateTimeFormat("en-US", {
679
+ timeZone: timezone,
680
+ hour: "2-digit",
681
+ minute: "2-digit",
682
+ hour12: false,
683
+ });
684
+ const parts = fmt.formatToParts(now);
685
+ const hh = parts.find((p) => p.type === "hour")?.value ?? "00";
686
+ const mm = parts.find((p) => p.type === "minute")?.value ?? "00";
687
+ // Intl can emit "24" for midnight in some locales — guard against
688
+ // that so the journal line is stable regardless of host locale.
689
+ const normalizedHh = hh === "24" ? "00" : hh;
690
+ return `${normalizedHh}:${mm}`;
691
+ }
692
+ /**
693
+ * Find the line index just after the entry that begins at `start`
694
+ * (heading row). The entry ends at the next `### ` heading inside the
695
+ * section, the section boundary, or end of file — whichever comes
696
+ * first. Used by both the 2a status-sync (to bound the Status: line
697
+ * lookup) and the 2b sweep (to span the entry's prep rows).
698
+ */
699
+ function findEntryEnd(lines, start, bodyEnd) {
700
+ for (let i = start + 1; i < bodyEnd; i += 1) {
701
+ if (lines[i].startsWith("### "))
702
+ return i;
703
+ }
704
+ return bodyEnd;
705
+ }
706
+ //# sourceMappingURL=roadmap-maintenance.js.map