@aitne/daemon 0.1.7 → 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 (959) 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 -1480
  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/observers/calendar-poller.d.ts +2 -0
  852. package/dist/observers/calendar-poller.d.ts.map +1 -1
  853. package/dist/observers/calendar-poller.js +76 -54
  854. package/dist/observers/calendar-poller.js.map +1 -1
  855. package/dist/observers/delegated-sync-worker.d.ts +62 -0
  856. package/dist/observers/delegated-sync-worker.d.ts.map +1 -1
  857. package/dist/observers/delegated-sync-worker.js +128 -1
  858. package/dist/observers/delegated-sync-worker.js.map +1 -1
  859. package/dist/observers/git-watcher.d.ts +22 -0
  860. package/dist/observers/git-watcher.d.ts.map +1 -1
  861. package/dist/observers/git-watcher.js +31 -7
  862. package/dist/observers/git-watcher.js.map +1 -1
  863. package/dist/observers/imminent-event-scheduler.d.ts +2 -0
  864. package/dist/observers/imminent-event-scheduler.d.ts.map +1 -1
  865. package/dist/observers/imminent-event-scheduler.js +29 -0
  866. package/dist/observers/imminent-event-scheduler.js.map +1 -1
  867. package/dist/observers/notion-poller.d.ts +2 -0
  868. package/dist/observers/notion-poller.d.ts.map +1 -1
  869. package/dist/observers/notion-poller.js +44 -6
  870. package/dist/observers/notion-poller.js.map +1 -1
  871. package/dist/observers/poll-guard.d.ts +63 -0
  872. package/dist/observers/poll-guard.d.ts.map +1 -0
  873. package/dist/observers/poll-guard.js +89 -0
  874. package/dist/observers/poll-guard.js.map +1 -0
  875. package/dist/safety/absolute-block-audit.d.ts +17 -0
  876. package/dist/safety/absolute-block-audit.d.ts.map +1 -1
  877. package/dist/safety/absolute-block-audit.js +28 -2
  878. package/dist/safety/absolute-block-audit.js.map +1 -1
  879. package/dist/safety/agent-write-tracker.d.ts +42 -1
  880. package/dist/safety/agent-write-tracker.d.ts.map +1 -1
  881. package/dist/safety/agent-write-tracker.js +81 -1
  882. package/dist/safety/agent-write-tracker.js.map +1 -1
  883. package/dist/safety/always-disallowed.d.ts +34 -0
  884. package/dist/safety/always-disallowed.d.ts.map +1 -1
  885. package/dist/safety/always-disallowed.js +114 -7
  886. package/dist/safety/always-disallowed.js.map +1 -1
  887. package/dist/safety/audit.d.ts +20 -0
  888. package/dist/safety/audit.d.ts.map +1 -1
  889. package/dist/safety/audit.js +126 -0
  890. package/dist/safety/audit.js.map +1 -1
  891. package/dist/safety/risk-classifier.d.ts +17 -1
  892. package/dist/safety/risk-classifier.d.ts.map +1 -1
  893. package/dist/safety/risk-classifier.js +75 -7
  894. package/dist/safety/risk-classifier.js.map +1 -1
  895. package/dist/safety/subprocess-block-scanner.d.ts +89 -0
  896. package/dist/safety/subprocess-block-scanner.d.ts.map +1 -0
  897. package/dist/safety/subprocess-block-scanner.js +177 -0
  898. package/dist/safety/subprocess-block-scanner.js.map +1 -0
  899. package/dist/scheduler/hourly-check-gate.d.ts +23 -9
  900. package/dist/scheduler/hourly-check-gate.d.ts.map +1 -1
  901. package/dist/scheduler/hourly-check-gate.js +11 -6
  902. package/dist/scheduler/hourly-check-gate.js.map +1 -1
  903. package/dist/secrets/backend-api-key-env.d.ts.map +1 -1
  904. package/dist/secrets/backend-api-key-env.js +1 -0
  905. package/dist/secrets/backend-api-key-env.js.map +1 -1
  906. package/dist/services/delegated-backend-invoker.d.ts.map +1 -1
  907. package/dist/services/delegated-backend-invoker.js +8 -1
  908. package/dist/services/delegated-backend-invoker.js.map +1 -1
  909. package/dist/services/delegated-invoker-audit.d.ts.map +1 -1
  910. package/dist/services/delegated-invoker-audit.js +5 -1
  911. package/dist/services/delegated-invoker-audit.js.map +1 -1
  912. package/dist/services/delegated-proxy-config.d.ts +3 -2
  913. package/dist/services/delegated-proxy-config.d.ts.map +1 -1
  914. package/dist/services/delegated-proxy-config.js.map +1 -1
  915. package/dist/services/integrations/extract-write-item-id.d.ts +5 -2
  916. package/dist/services/integrations/extract-write-item-id.d.ts.map +1 -1
  917. package/dist/services/integrations/extract-write-item-id.js.map +1 -1
  918. package/dist/services/mcp/generators/index.d.ts +1 -0
  919. package/dist/services/mcp/generators/index.d.ts.map +1 -1
  920. package/dist/services/mcp/generators/index.js +3 -0
  921. package/dist/services/mcp/generators/index.js.map +1 -1
  922. package/dist/services/mcp/sdk-observations-server.d.ts +60 -0
  923. package/dist/services/mcp/sdk-observations-server.d.ts.map +1 -0
  924. package/dist/services/mcp/sdk-observations-server.js +161 -0
  925. package/dist/services/mcp/sdk-observations-server.js.map +1 -0
  926. package/dist/services/mcp/session-materializer.d.ts.map +1 -1
  927. package/dist/services/mcp/session-materializer.js +13 -9
  928. package/dist/services/mcp/session-materializer.js.map +1 -1
  929. package/dist/services/mcp/types.d.ts +1 -0
  930. package/dist/services/mcp/types.d.ts.map +1 -1
  931. package/dist/services/notion.d.ts +19 -1
  932. package/dist/services/notion.d.ts.map +1 -1
  933. package/dist/services/notion.js +41 -2
  934. package/dist/services/notion.js.map +1 -1
  935. package/dist/services/observations-batch.d.ts +100 -0
  936. package/dist/services/observations-batch.d.ts.map +1 -0
  937. package/dist/services/observations-batch.js +258 -0
  938. package/dist/services/observations-batch.js.map +1 -0
  939. package/dist/services/voice/transcriber.d.ts +23 -0
  940. package/dist/services/voice/transcriber.d.ts.map +1 -1
  941. package/dist/services/voice/transcriber.js +55 -0
  942. package/dist/services/voice/transcriber.js.map +1 -1
  943. package/dist/settings/runtime-settings.d.ts +9 -6
  944. package/dist/settings/runtime-settings.d.ts.map +1 -1
  945. package/dist/settings/runtime-settings.js +50 -17
  946. package/dist/settings/runtime-settings.js.map +1 -1
  947. package/package.json +3 -2
  948. package/dist/api/delegated-proxy-helper.d.ts +0 -33
  949. package/dist/api/delegated-proxy-helper.d.ts.map +0 -1
  950. package/dist/api/delegated-proxy-helper.js +0 -54
  951. package/dist/api/delegated-proxy-helper.js.map +0 -1
  952. package/dist/core/roadmap-merge.d.ts +0 -7
  953. package/dist/core/roadmap-merge.d.ts.map +0 -1
  954. package/dist/core/roadmap-merge.js +0 -187
  955. package/dist/core/roadmap-merge.js.map +0 -1
  956. package/dist/db/test-schemas.d.ts +0 -23
  957. package/dist/db/test-schemas.d.ts.map +0 -1
  958. package/dist/db/test-schemas.js +0 -111
  959. package/dist/db/test-schemas.js.map +0 -1
@@ -1,129 +1,35 @@
1
1
  import { Hono } from "hono";
2
- import { notifyRequestSchema, redactSensitiveString, scheduleRequestSchema, scheduleUpdateRequestSchema, scheduleDmRequestSchema, actionLogRequestSchema, createEvent, EventPriority, nowInTimezone, formatSqliteDatetime, } from "@aitne/shared";
2
+ import { notifyRequestSchema, redactSensitiveString, actionLogRequestSchema, createEvent, EventPriority, } from "@aitne/shared";
3
3
  import { randomUUID } from "node:crypto";
4
- import { existsSync, readFileSync } from "node:fs";
5
- import { join } from "node:path";
6
- import { getContextDir } from "../../config.js";
7
4
  import { createLogger } from "../../logging.js";
8
5
  import { loadAuditEventRow } from "../../safety/audit.js";
9
6
  import { readJsonBody } from "../json-body.js";
10
- import { maybeTriggerRoadmapRefresh } from "../../core/schedule-insert-helper.js";
11
- import { buildTodayAgentPlanMetadata, extractTodayAgentPlanRows, extractTodayDate, normalizeAgentPlanAction, readTodayAgentPlanMetadata, } from "../../core/today-agent-plan.js";
7
+ import { composeIssue, respondWithAgentError, } from "../helpers/agent-errors.js";
8
+ import { registerAgentScheduleRoutes } from "./agent-schedule.js";
12
9
  const logger = createLogger("agent-api");
13
- function parseTaskContextJson(raw) {
14
- // The agent_schedule.task_context column has DEFAULT '{}', so `raw` is never
15
- // null from a properly-seeded row. This guard handles the edge case of a row
16
- // inserted directly without the column value (test or legacy data).
17
- /* c8 ignore next */
18
- if (!raw)
19
- return {};
20
- try {
21
- const parsed = JSON.parse(raw);
22
- if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
23
- return parsed;
24
- }
25
- }
26
- catch (err) {
27
- logger.warn({ err }, "Invalid task_context JSON in agent_schedule row");
28
- }
29
- return {};
30
- }
31
- function enrichAgentPlanTaskContext(taskContext, scheduledAt, description, deps) {
32
- const nextContext = taskContext
33
- ? { ...taskContext }
34
- : {};
35
- if (readTodayAgentPlanMetadata(nextContext))
36
- return nextContext;
37
- const config = deps.config;
38
- if (!config?.dataDir)
39
- return nextContext;
40
- const timezone = config.timezone || undefined;
41
- const scheduledLocal = localDateTimeParts(scheduledAt, timezone);
42
- let content;
43
- try {
44
- const todayPath = join(getContextDir(config, deps.db), "today.md");
45
- if (!existsSync(todayPath))
46
- return nextContext;
47
- content = readFileSync(todayPath, "utf-8");
48
- /* c8 ignore start */
49
- }
50
- catch (err) {
51
- logger.warn({ err }, "Failed to read today.md for Agent Plan schedule metadata");
52
- return nextContext;
53
- }
54
- /* c8 ignore stop */
55
- if (extractTodayDate(content) !== scheduledLocal.date)
56
- return nextContext;
57
- const candidates = extractTodayAgentPlanRows(content).rows.filter((row) => !row.checked && row.time === scheduledLocal.time);
58
- const matched = selectAgentPlanRowForSchedule(candidates, description, nextContext);
59
- if (!matched)
60
- return nextContext;
61
- nextContext.agentPlan = buildTodayAgentPlanMetadata(scheduledLocal.date, matched);
62
- return nextContext;
63
- }
64
- function selectAgentPlanRowForSchedule(rows, description, taskContext) {
65
- let candidates = rows;
66
- const triggerHint = contextTriggerHint(taskContext);
67
- if (triggerHint) {
68
- const filtered = candidates.filter((row) => row.trigger === triggerHint);
69
- if (filtered.length > 0)
70
- candidates = filtered;
71
- }
72
- const categoryHint = contextCategoryHint(taskContext);
73
- if (categoryHint) {
74
- const filtered = candidates.filter((row) => row.category === categoryHint);
75
- if (filtered.length > 0)
76
- candidates = filtered;
77
- }
78
- const descriptionMatches = candidates.filter((row) => actionsLikelyMatch(row.action, description));
79
- if (descriptionMatches.length === 1)
80
- return descriptionMatches[0];
81
- if (candidates.length === 1)
82
- return candidates[0];
83
- return null;
84
- }
85
- function actionsLikelyMatch(agentPlanAction, description) {
86
- const action = normalizeAgentPlanAction(agentPlanAction);
87
- const task = normalizeAgentPlanAction(description);
88
- return task.includes(action) || action.includes(task);
89
- }
90
- function contextTriggerHint(taskContext) {
91
- const value = taskContext.agentPlanTrigger ?? taskContext.trigger;
92
- return value === "DM" ||
93
- value === "notify" ||
94
- value === "check-in" ||
95
- value === "wake"
96
- ? value
97
- : null;
98
- }
99
- function contextCategoryHint(taskContext) {
100
- const value = taskContext.agentPlanCategory ?? taskContext.category;
101
- return value === "work" ||
102
- value === "study" ||
103
- value === "personal" ||
104
- value === "home"
105
- ? value
106
- : null;
107
- }
108
- function localDateTimeParts(date, timezone) {
109
- const local = nowInTimezone(timezone, date);
110
- return {
111
- date: `${local.year}-${String(local.month).padStart(2, "0")}-${String(local.day).padStart(2, "0")}`,
112
- time: `${String(local.hours).padStart(2, "0")}:${String(local.minutes).padStart(2, "0")}`,
113
- };
114
- }
115
10
  export function createAgentRoutes(deps) {
116
11
  const app = new Hono();
117
12
  const { db, sendNotification, eventBroadcaster } = deps;
118
13
  app.post("/agent/run-now", async (c) => {
119
14
  if (deps.isStartupComplete && !deps.isStartupComplete()) {
120
- return c.json({
121
- error: "daemon_starting",
122
- message: "Daemon startup is still in progress. Try again in a moment.",
123
- }, 503);
15
+ return respondWithAgentError(c, 503, [
16
+ composeIssue("agent.daemon_starting", {
17
+ field: "daemon",
18
+ received: "<starting>",
19
+ }),
20
+ ], {
21
+ legacyFields: {
22
+ message: "Daemon startup is still in progress. Try again in a moment.",
23
+ },
24
+ });
124
25
  }
125
26
  if (!deps.triggerHourlyCheck) {
126
- return c.json({ error: "hourly_check_unavailable" }, 503);
27
+ return respondWithAgentError(c, 503, [
28
+ composeIssue("agent.hourly_check_unavailable", {
29
+ field: "triggerHourlyCheck",
30
+ received: "<unavailable>",
31
+ }),
32
+ ]);
127
33
  }
128
34
  const body = await c.req.json().catch(() => ({}));
129
35
  const reason = typeof body.reason === "string" && body.reason.trim()
@@ -142,10 +48,16 @@ export function createAgentRoutes(deps) {
142
48
  requestedModel = body.requestedModel;
143
49
  }
144
50
  else {
145
- return c.json({
146
- error: "invalid_requestedModel",
147
- message: "requestedModel must be 'sonnet' or 'opus'",
148
- }, 400);
51
+ return respondWithAgentError(c, 400, [
52
+ composeIssue("agent.invalid_requested_model", {
53
+ field: "requestedModel",
54
+ received: body.requestedModel,
55
+ }),
56
+ ], {
57
+ legacyFields: {
58
+ message: "requestedModel must be 'sonnet' or 'opus'",
59
+ },
60
+ });
149
61
  }
150
62
  }
151
63
  const result = await deps.triggerHourlyCheck(`manual:${reason}`, {
@@ -154,6 +66,49 @@ export function createAgentRoutes(deps) {
154
66
  });
155
67
  return c.json(result);
156
68
  });
69
+ // POST /agent/run-now/roadmap-maintenance — Manual fire of the daily
70
+ // mechanical roadmap.md maintenance pass (evening-review slimdown
71
+ // §2.2). Same code path as the 17:45 cron callback. Used by
72
+ // `aitne run-now roadmap_maintenance` for operator debugging and
73
+ // the parallel-verification rollout phase. Synchronous: blocks
74
+ // until the pass completes (or is skipped) and returns the
75
+ // structured result so the CLI can surface counts.
76
+ app.post("/agent/run-now/roadmap-maintenance", async (c) => {
77
+ if (deps.isStartupComplete && !deps.isStartupComplete()) {
78
+ return respondWithAgentError(c, 503, [
79
+ composeIssue("agent.daemon_starting", {
80
+ field: "daemon",
81
+ received: "<starting>",
82
+ }),
83
+ ], {
84
+ legacyFields: {
85
+ message: "Daemon startup is still in progress. Try again in a moment.",
86
+ },
87
+ });
88
+ }
89
+ if (!deps.triggerRoadmapMaintenance) {
90
+ return respondWithAgentError(c, 503, [
91
+ composeIssue("agent.roadmap_maintenance_unavailable", {
92
+ field: "triggerRoadmapMaintenance",
93
+ received: "<unavailable>",
94
+ }),
95
+ ]);
96
+ }
97
+ try {
98
+ const result = deps.triggerRoadmapMaintenance();
99
+ return c.json({ ok: true, result });
100
+ }
101
+ catch (err) {
102
+ logger.error({ err }, "Manual roadmap maintenance fire threw");
103
+ const message = err instanceof Error ? err.message : String(err);
104
+ return respondWithAgentError(c, 500, [
105
+ composeIssue("agent.roadmap_maintenance_failed", {
106
+ field: "maintenance",
107
+ received: message,
108
+ }),
109
+ ], { legacyFields: { message } });
110
+ }
111
+ });
157
112
  // POST /escalate — Removed in plan-aware-model-defaults. Automatic
158
113
  // Sonnet→Opus handoff was replaced by the opt-in advisor tool + explicit
159
114
  // manual Opus runs (dashboard chat model picker, agent_schedule.model,
@@ -266,7 +221,7 @@ export function createAgentRoutes(deps) {
266
221
  return parsedBody.response;
267
222
  const parsed = notifyRequestSchema.safeParse(parsedBody.body);
268
223
  if (!parsed.success) {
269
- return c.json({ error: "validation_error", details: parsed.error }, 400);
224
+ return respondWithAgentError(c, 400, [composeIssue("agent.notify_validation_error", { field: "body", received: parsedBody.body })], { legacyFields: { details: parsed.error } });
270
225
  }
271
226
  const { message, platform, platforms, priority, } = parsed.data;
272
227
  const normalizedPlatforms = platforms ?? (platform ? [platform] : undefined);
@@ -318,259 +273,130 @@ export function createAgentRoutes(deps) {
318
273
  dispatchId,
319
274
  });
320
275
  });
321
- // POST /scheduleRegister dynamic schedule
322
- app.post("/schedule", async (c) => {
323
- const parsedBody = await readJsonBody(c);
324
- if (!parsedBody.ok)
325
- return parsedBody.response;
326
- const parsed = scheduleRequestSchema.safeParse(parsedBody.body);
327
- if (!parsed.success) {
328
- return c.json({ error: "validation_error", details: parsed.error }, 400);
329
- }
330
- const { time, taskType, description, prompt, model, taskContext } = parsed.data;
331
- // Normalize ISO8601 (possibly with timezone offset) to UTC SQLite format.
332
- // Without this, "2026-04-05T07:00:00+09:00" would be stored as-is and
333
- // ScheduleWatcher's lexicographic comparison (YYYY-MM-DD HH:MM:SS) would
334
- // fail due to the 'T' separator being > ' ' in ASCII.
335
- const parsedDate = new Date(time);
336
- if (isNaN(parsedDate.getTime())) {
337
- return c.json({ error: "invalid_time", details: "Cannot parse time as a valid date" }, 400);
338
- }
339
- // Reject times more than 1 minute in the past. This mirrors
340
- // /schedule/dm and prevents accidental immediate catch-up tasks when a
341
- // model resolves a relative time incorrectly.
342
- if (parsedDate.getTime() < Date.now() - 60_000) {
343
- return c.json({ error: "invalid_time", details: "Scheduled time is in the past" }, 400);
344
- }
345
- const scheduledForUtc = formatSqliteDatetime(parsedDate);
346
- const enrichedTaskContext = enrichAgentPlanTaskContext(taskContext, parsedDate, description, deps);
347
- const result = db
348
- .prepare(`INSERT INTO agent_schedule (scheduled_for, task_type, task_description, task_prompt, task_context, model, status)
349
- VALUES (?, ?, ?, ?, ?, ?, 'pending')`)
350
- .run(scheduledForUtc, taskType, description, prompt ?? null, JSON.stringify(enrichedTaskContext),
351
- // NULL when the caller did NOT pin a model so the scheduler
352
- // skips `event.requestedModel` and `process_backend_config` for
353
- // the resolved ProcessKey is honoured. Forcing 'sonnet' here
354
- // silently locked every scheduled task to the light tier.
355
- model ?? null);
356
- logger.info({ scheduleId: result.lastInsertRowid, taskType, scheduledFor: scheduledForUtc }, "Task scheduled");
357
- // Surface long-horizon user-facing schedules in roadmap.md as
358
- // `Scheduled:` entries. Internal/short-lived callers opt out via
359
- // `taskContext.importance = "low"` or `"transient"`; strategic rows
360
- // opt in regardless of horizon.
361
- maybeTriggerRoadmapRefresh({ scheduledFor: scheduledForUtc, taskContext: enrichedTaskContext }, deps.triggerRoadmapRefresh, "scheduled_task_created");
362
- // 2026-05 skill/API consistency: `/schedule/dm` returns
363
- // `scheduledFor` so the caller can confirm the normalized UTC
364
- // timestamp without a round-trip GET. The wake-task variant did
365
- // not, forcing callers that wanted to log the scheduled time to
366
- // either re-parse the input `time` themselves or query the table.
367
- // Returning it here is additive and matches the DM variant.
368
- return c.json({
369
- status: "scheduled",
370
- scheduleId: String(result.lastInsertRowid),
371
- scheduledFor: scheduledForUtc,
372
- });
373
- });
374
- // POST /schedule/dm — Schedule a direct DM (no agent needed)
375
- app.post("/schedule/dm", async (c) => {
376
- const parsedBody = await readJsonBody(c);
377
- if (!parsedBody.ok)
378
- return parsedBody.response;
379
- const parsed = scheduleDmRequestSchema.safeParse(parsedBody.body);
380
- if (!parsed.success) {
381
- return c.json({ error: "validation_error", details: parsed.error }, 400);
382
- }
383
- const { time, message, platform, platforms, importance } = parsed.data;
384
- const parsedDate = new Date(time);
385
- if (isNaN(parsedDate.getTime())) {
386
- return c.json({ error: "invalid_time", details: "Cannot parse time as a valid date" }, 400);
387
- }
388
- // Reject times more than 1 minute in the past
389
- if (parsedDate.getTime() < Date.now() - 60_000) {
390
- return c.json({ error: "invalid_time", details: "Scheduled time is in the past" }, 400);
391
- }
392
- const scheduledForUtc = formatSqliteDatetime(parsedDate);
393
- const dmTaskContext = {
394
- platforms: platforms ?? (platform ? [platform] : null),
395
- importance: importance ?? "transient",
396
- };
397
- const result = db
398
- .prepare(
399
- // task_type='dm' is consumed directly by `handleDirectDm` —
400
- // the LLM never runs, so `model` is meaningless. Persist NULL
401
- // so a reader can't mistake the row for a model-pinned task.
402
- `INSERT INTO agent_schedule (scheduled_for, task_type, task_description, task_context, model, status)
403
- VALUES (?, 'dm', ?, ?, NULL, 'pending')`)
404
- .run(scheduledForUtc, message, JSON.stringify(dmTaskContext));
405
- // DM-scheduled reminders are transient by default so short pings do
406
- // not pollute roadmap.md. Callers can opt in with `importance`.
407
- maybeTriggerRoadmapRefresh({ scheduledFor: scheduledForUtc, taskContext: dmTaskContext }, deps.triggerRoadmapRefresh, "scheduled_task_created");
408
- return c.json({
409
- status: "scheduled",
410
- scheduleId: String(result.lastInsertRowid),
411
- scheduledFor: scheduledForUtc,
412
- });
413
- });
414
- // GET /schedule — List scheduled items
415
- app.get("/schedule", (c) => {
416
- const statusParam = c.req.query("status") ?? "pending,running";
417
- const roadmapEligible = c.req.query("roadmapEligible") === "true" ||
418
- c.req.query("roadmapEligible") === "1";
419
- const statuses = statusParam.split(",").map((s) => s.trim()).filter(Boolean);
420
- const allowed = new Set(["pending", "running", "completed", "failed", "skipped"]);
421
- for (const s of statuses) {
422
- if (!allowed.has(s)) {
423
- return c.json({ error: "invalid_status", details: `Unknown status: ${s}` }, 400);
424
- }
425
- }
426
- const placeholders = statuses.map(() => "?").join(",");
427
- const where = [`status IN (${placeholders})`];
428
- const queryParams = [...statuses];
429
- if (roadmapEligible) {
430
- const normalHorizonCutoff = formatSqliteDatetime(new Date(Date.now() + 7 * 24 * 60 * 60 * 1000));
431
- where.push(`(
432
- json_extract(task_context, '$.importance') = 'strategic'
433
- OR (
434
- (
435
- json_extract(task_context, '$.importance') IS NULL
436
- OR json_extract(task_context, '$.importance') NOT IN ('transient', 'low', 'strategic')
437
- )
438
- AND scheduled_for > ?
439
- )
440
- )`);
441
- queryParams.push(normalHorizonCutoff);
442
- }
443
- const rows = db
444
- .prepare(`SELECT id, scheduled_for, task_type, task_description, task_prompt, task_context, model, status, created_at
445
- FROM agent_schedule
446
- WHERE ${where.join(" AND ")}
447
- ORDER BY scheduled_for ASC
448
- LIMIT 50`)
449
- .all(...queryParams);
450
- const items = rows.map((r) => ({
451
- id: r.id,
452
- scheduledFor: r.scheduled_for,
453
- taskType: r.task_type,
454
- description: r.task_description,
455
- prompt: r.task_prompt,
456
- status: r.status,
457
- model: r.model,
458
- taskContext: parseTaskContextJson(r.task_context),
459
- createdAt: r.created_at,
460
- }));
461
- return c.json({ items });
462
- });
463
- // PATCH /schedule/:id — Edit a pending scheduled item
464
- app.patch("/schedule/:id", async (c) => {
465
- const id = Number(c.req.param("id"));
466
- if (!Number.isInteger(id) || id <= 0) {
467
- return c.json({ error: "invalid_id" }, 400);
276
+ // PATCH /agent-actions/selfAgent-self-reported structured metadata.
277
+ //
278
+ // docs/design/appendices/morning-routine-optimization.md §"PATCH
279
+ // /api/agent-actions/self". Lets the currently-running agent session
280
+ // write structured metadata into its own `agent_actions` row, so the
281
+ // daemon's AgentJournalAppender (and other post-hoc consumers)
282
+ // read structured data rather than parsing LLM final-text prose.
283
+ //
284
+ // Auth: the session's per-run identity comes from
285
+ // `x-pa-event-correlation-id` (matches `agent_actions.event_id`) and
286
+ // `x-process-key` (matches `agent_actions.action_type`), both auto-
287
+ // injected by pa-api from dispatcher-set env vars. Aitne's threat
288
+ // model is single-owner local-only (127.0.0.1 daemon, sole LLM
289
+ // caller, UUID correlation IDs); the morning-routine-optimization
290
+ // rev4 banner records why per-run token binding / cross-row 403 was
291
+ // withdrawn rather than shipped. Lookup miss → 404
292
+ // `agent_actions.session_row_not_found`.
293
+ //
294
+ // Merge: the body's `metadata` slot is shallow-merged into the row's
295
+ // existing `metadata` JSON column. Repeated PATCHes during the same
296
+ // session accumulate (later keys win).
297
+ app.patch("/agent-actions/self", async (c) => {
298
+ const correlationId = c.req.header("x-pa-event-correlation-id");
299
+ const processKey = c.req.header("x-process-key");
300
+ const headerIssues = [];
301
+ if (!correlationId || correlationId.trim().length === 0) {
302
+ headerIssues.push(composeIssue("agent_actions.session_identity_missing", {
303
+ field: "headers.x-pa-event-correlation-id",
304
+ received: correlationId ?? "<missing>",
305
+ }));
306
+ }
307
+ if (!processKey || processKey.trim().length === 0) {
308
+ headerIssues.push(composeIssue("agent_actions.session_identity_missing", {
309
+ field: "headers.x-process-key",
310
+ received: processKey ?? "<missing>",
311
+ }));
312
+ }
313
+ if (headerIssues.length > 0) {
314
+ return respondWithAgentError(c, 400, headerIssues);
468
315
  }
469
316
  const parsedBody = await readJsonBody(c);
470
317
  if (!parsedBody.ok)
471
318
  return parsedBody.response;
472
- const parsed = scheduleUpdateRequestSchema.safeParse(parsedBody.body);
473
- if (!parsed.success) {
474
- return c.json({ error: "validation_error", details: parsed.error }, 400);
475
- }
319
+ if (!parsedBody.body
320
+ || typeof parsedBody.body !== "object"
321
+ || Array.isArray(parsedBody.body)) {
322
+ return respondWithAgentError(c, 400, [
323
+ composeIssue("agent_actions.body_not_object", {
324
+ field: "$",
325
+ received: parsedBody.body,
326
+ }),
327
+ ]);
328
+ }
329
+ const body = parsedBody.body;
330
+ if (!body.metadata
331
+ || typeof body.metadata !== "object"
332
+ || Array.isArray(body.metadata)) {
333
+ return respondWithAgentError(c, 400, [
334
+ composeIssue("agent_actions.metadata_field_invalid", {
335
+ field: "metadata",
336
+ received: body.metadata,
337
+ }),
338
+ ]);
339
+ }
340
+ // body.metadata has already round-tripped through readJsonBody's
341
+ // JSON.parse, so its shape is guaranteed plain JSON (no Functions,
342
+ // Symbols, BigInts, or cyclic refs). The cast is sound.
343
+ const metadataPatch = body.metadata;
344
+ // Find the most recent in-flight row matching the session's identity.
345
+ // The dispatcher's standard pattern is to INSERT after a session
346
+ // completes, so this lookup only succeeds when an upstream caller
347
+ // (Phase 5/6 orchestrator) has pre-inserted an in_progress row.
348
+ // Until then this endpoint returns 404 — a documented expected state
349
+ // for Phase 1 callers who provide the in_progress row in tests.
350
+ //
351
+ // `result = 'in_progress'` is part of the filter so retry chains (a
352
+ // failed older row + an in_progress newer row sharing identity) can't
353
+ // accidentally resolve to a terminal row, and so a delayed shim call
354
+ // arriving after the session has already settled to success/failed
355
+ // does not overwrite the final metadata. The SKILL.md documents this
356
+ // explicitly: "or it has already settled to a terminal result."
476
357
  const row = db
477
- .prepare("SELECT id, status, task_type FROM agent_schedule WHERE id = ?")
478
- .get(id);
358
+ .prepare(`SELECT id, metadata
359
+ FROM agent_actions
360
+ WHERE event_id = ? AND action_type = ?
361
+ AND result = 'in_progress'
362
+ ORDER BY started_at DESC, id DESC
363
+ LIMIT 1`)
364
+ .get(correlationId, processKey);
479
365
  if (!row) {
480
- return c.json({ error: "not_found" }, 404);
481
- }
482
- if (row.status !== "pending") {
483
- return c.json({ error: "conflict", details: `Cannot edit item with status '${row.status}'. Only 'pending' items can be edited.` }, 409);
484
- }
485
- // Type-field validation: description ↔ wake/escalation, message ↔ dm,
486
- // prompt forbidden on dm (direct DMs do not run an agent so the prompt
487
- // override has nothing to override).
488
- if (parsed.data.description !== undefined && row.task_type === "dm") {
489
- return c.json({ error: "invalid_field", details: "'description' cannot be set on dm-type schedules. Use 'message' instead." }, 400);
490
- }
491
- if (parsed.data.message !== undefined && row.task_type !== "dm") {
492
- return c.json({ error: "invalid_field", details: "'message' can only be set on dm-type schedules. Use 'description' instead." }, 400);
493
- }
494
- if (parsed.data.prompt !== undefined && row.task_type === "dm") {
495
- return c.json({ error: "invalid_field", details: "'prompt' cannot be set on dm-type schedules — direct DMs do not run an agent." }, 400);
496
- }
497
- const updates = [];
498
- const values = [];
499
- if (parsed.data.time !== undefined) {
500
- const parsedDate = new Date(parsed.data.time);
501
- if (isNaN(parsedDate.getTime())) {
502
- return c.json({ error: "invalid_time", details: "Cannot parse time as a valid date" }, 400);
366
+ return respondWithAgentError(c, 404, [
367
+ composeIssue("agent_actions.session_row_not_found", {
368
+ field: "headers.x-process-key",
369
+ received: { correlationId, processKey },
370
+ }),
371
+ ]);
372
+ }
373
+ // Shallow-merge with the existing metadata JSON. The column has
374
+ // DEFAULT '{}' so the parse is safe; a corrupted JSON (manual DB
375
+ // edit, e.g.) falls back to an empty object so the PATCH still
376
+ // succeeds — better than 500ing and losing the agent's write.
377
+ let existing = {};
378
+ if (row.metadata) {
379
+ try {
380
+ const parsedJson = JSON.parse(row.metadata);
381
+ if (parsedJson && typeof parsedJson === "object" && !Array.isArray(parsedJson)) {
382
+ existing = parsedJson;
383
+ }
503
384
  }
504
- // Reject past times for dm type (consistent with POST /schedule/dm)
505
- if (row.task_type === "dm" && parsedDate.getTime() < Date.now() - 60_000) {
506
- return c.json({ error: "invalid_time", details: "Scheduled time is in the past" }, 400);
385
+ catch (err) {
386
+ logger.warn({ err, rowId: row.id }, "agent_actions.metadata is not valid JSON overwriting with PATCH body");
507
387
  }
508
- updates.push("scheduled_for = ?");
509
- values.push(formatSqliteDatetime(parsedDate));
510
- }
511
- if (parsed.data.description !== undefined) {
512
- updates.push("task_description = ?");
513
- values.push(parsed.data.description);
514
- }
515
- if (parsed.data.message !== undefined) {
516
- updates.push("task_description = ?");
517
- values.push(parsed.data.message);
518
- }
519
- // `prompt: null` is the explicit clear (revert to using task_description
520
- // as the agent body). `prompt: <string>` sets an override. `undefined` =
521
- // no change. The dm-type rejection is handled in the type-field block above.
522
- if (parsed.data.prompt !== undefined) {
523
- updates.push("task_prompt = ?");
524
- values.push(parsed.data.prompt);
525
- }
526
- if (parsed.data.model !== undefined) {
527
- updates.push("model = ?");
528
- values.push(parsed.data.model);
529
388
  }
530
- if (parsed.data.taskContext !== undefined) {
531
- updates.push("task_context = ?");
532
- values.push(JSON.stringify(parsed.data.taskContext));
533
- }
534
- // This branch is unreachable: the zod refine above requires at least one
535
- // field to be defined — so updates can only be empty if all field-update
536
- // blocks above are individually skipped, which contradicts the refine.
537
- /* c8 ignore start */
538
- if (updates.length === 0) {
539
- return c.json({ error: "no_changes", details: "No valid fields to update" }, 400);
540
- }
541
- /* c8 ignore stop */
542
- // Optimistic lock: only update if still pending
543
- values.push(id);
544
- const result = db.prepare(`UPDATE agent_schedule SET ${updates.join(", ")} WHERE id = ? AND status = 'pending'`).run(...values);
545
- // Unreachable in unit tests: requires a concurrent scheduler tick to
546
- // change status from 'pending' to 'running' between the SELECT and this
547
- // UPDATE. The prior status !== 'pending' check (line ~660) catches the
548
- // row-not-found case; this fires only on a true time-of-check/time-of-use
549
- // race that cannot be reproduced without process-level suspension.
550
- /* c8 ignore start */
551
- if (result.changes === 0) {
552
- return c.json({ error: "conflict", details: "Item is no longer pending (may have been picked up by scheduler)" }, 409);
553
- }
554
- /* c8 ignore stop */
555
- return c.json({ status: "updated", id });
556
- });
557
- // DELETE /schedule/:id — Cancel a pending scheduled item
558
- app.delete("/schedule/:id", (c) => {
559
- const id = Number(c.req.param("id"));
560
- if (!Number.isInteger(id) || id <= 0) {
561
- return c.json({ error: "invalid_id" }, 400);
562
- }
563
- const row = db
564
- .prepare("SELECT id, status FROM agent_schedule WHERE id = ?")
565
- .get(id);
566
- if (!row) {
567
- return c.json({ error: "not_found" }, 404);
568
- }
569
- if (row.status !== "pending") {
570
- return c.json({ error: "conflict", details: `Cannot cancel item with status '${row.status}'. Only 'pending' items can be cancelled.` }, 409);
571
- }
572
- db.prepare("UPDATE agent_schedule SET status = 'skipped' WHERE id = ?").run(id);
573
- return c.json({ status: "cancelled", id });
389
+ const merged = { ...existing, ...metadataPatch };
390
+ db.prepare(`UPDATE agent_actions SET metadata = ? WHERE id = ?`).run(JSON.stringify(merged), row.id);
391
+ logger.info({
392
+ rowId: row.id,
393
+ keysPatched: Object.keys(metadataPatch),
394
+ }, "Agent self-reported structured metadata patched");
395
+ return c.json({
396
+ ok: true,
397
+ id: row.id,
398
+ metadata: merged,
399
+ });
574
400
  });
575
401
  // POST /agent/regenerate — Trigger context file regeneration
576
402
  app.post("/agent/regenerate", async (c) => {
@@ -579,7 +405,7 @@ export function createAgentRoutes(deps) {
579
405
  return parsedBody.response;
580
406
  const target = parsedBody.body.target;
581
407
  if (!target || !["today", "roadmap"].includes(target)) {
582
- return c.json({ error: "Invalid target. Must be one of: today, roadmap" }, 400);
408
+ return respondWithAgentError(c, 400, [composeIssue("agent.invalid_target", { field: "target", received: target ?? "<missing>" })], { legacyErrorCode: "Invalid target. Must be one of: today, roadmap" });
583
409
  }
584
410
  if (target === "roadmap") {
585
411
  // Emit the real `routine.roadmap_refresh` event (bypassing the
@@ -588,7 +414,12 @@ export function createAgentRoutes(deps) {
588
414
  // no longer ship an ad-hoc prompt that short-circuits to a single
589
415
  // section write.
590
416
  if (!deps.triggerRoadmapRefresh) {
591
- return c.json({ error: "Roadmap refresh trigger not available" }, 503);
417
+ return respondWithAgentError(c, 503, [
418
+ composeIssue("agent.roadmap_refresh_unavailable", {
419
+ field: "triggerRoadmapRefresh",
420
+ received: "<unavailable>",
421
+ }),
422
+ ], { legacyErrorCode: "Roadmap refresh trigger not available" });
592
423
  }
593
424
  deps.triggerRoadmapRefresh("dashboard_regenerate", { bypassDedup: true });
594
425
  logger.info({ target }, "Regeneration triggered");
@@ -599,7 +430,12 @@ export function createAgentRoutes(deps) {
599
430
  // delegated MCP tool, depending on integration mode) so this handler
600
431
  // does not need a local CalendarService.
601
432
  if (!deps.eventBus) {
602
- return c.json({ error: "Event bus not available" }, 500);
433
+ return respondWithAgentError(c, 500, [
434
+ composeIssue("agent.event_bus_unavailable", {
435
+ field: "eventBus",
436
+ received: "<unavailable>",
437
+ }),
438
+ ], { legacyErrorCode: "Event bus not available" });
603
439
  }
604
440
  const event = {
605
441
  ...createEvent({
@@ -620,7 +456,7 @@ export function createAgentRoutes(deps) {
620
456
  return parsedBody.response;
621
457
  const parsed = actionLogRequestSchema.safeParse(parsedBody.body);
622
458
  if (!parsed.success) {
623
- return c.json({ error: "validation_error", details: parsed.error }, 400);
459
+ return respondWithAgentError(c, 400, [composeIssue("agent.action_log_validation_error", { field: "body", received: parsedBody.body })], { legacyFields: { details: parsed.error } });
624
460
  }
625
461
  const { actionType, detail, result: actionResult } = parsed.data;
626
462
  const insertResult = db.prepare(`INSERT INTO agent_actions (action_type, trigger, result, detail, started_at)
@@ -631,6 +467,13 @@ export function createAgentRoutes(deps) {
631
467
  }
632
468
  return c.json({ status: "logged" });
633
469
  });
470
+ // Schedule cluster (POST/GET/PATCH/DELETE /schedule, /schedule/batch,
471
+ // /schedule/dm, /schedule/:id) is registered from agent-schedule.ts.
472
+ // Per docs/design/appendices/api-route-decomposition.md §5.5 the split
473
+ // is partial — only the schedule routes were extracted, and the public
474
+ // `createAgentRoutes` factory remains the single Hono entry registered
475
+ // in server.ts.
476
+ registerAgentScheduleRoutes(app, deps);
634
477
  return app;
635
478
  }
636
479
  function parsePositiveIntegerHeader(value) {