@aitne/daemon 0.1.0

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 (1386) hide show
  1. package/LICENSE +21 -0
  2. package/dist/adapters/composite-dashboard-stream.d.ts +42 -0
  3. package/dist/adapters/composite-dashboard-stream.d.ts.map +1 -0
  4. package/dist/adapters/composite-dashboard-stream.js +49 -0
  5. package/dist/adapters/composite-dashboard-stream.js.map +1 -0
  6. package/dist/adapters/dashboard-adapter.d.ts +104 -0
  7. package/dist/adapters/dashboard-adapter.d.ts.map +1 -0
  8. package/dist/adapters/dashboard-adapter.js +216 -0
  9. package/dist/adapters/dashboard-adapter.js.map +1 -0
  10. package/dist/adapters/discord.d.ts +77 -0
  11. package/dist/adapters/discord.d.ts.map +1 -0
  12. package/dist/adapters/discord.js +339 -0
  13. package/dist/adapters/discord.js.map +1 -0
  14. package/dist/adapters/docs-qa-adapter.d.ts +123 -0
  15. package/dist/adapters/docs-qa-adapter.d.ts.map +1 -0
  16. package/dist/adapters/docs-qa-adapter.js +218 -0
  17. package/dist/adapters/docs-qa-adapter.js.map +1 -0
  18. package/dist/adapters/message-hub.d.ts +70 -0
  19. package/dist/adapters/message-hub.d.ts.map +1 -0
  20. package/dist/adapters/message-hub.js +359 -0
  21. package/dist/adapters/message-hub.js.map +1 -0
  22. package/dist/adapters/notification-manager.d.ts +99 -0
  23. package/dist/adapters/notification-manager.d.ts.map +1 -0
  24. package/dist/adapters/notification-manager.js +498 -0
  25. package/dist/adapters/notification-manager.js.map +1 -0
  26. package/dist/adapters/outbound-text.d.ts +28 -0
  27. package/dist/adapters/outbound-text.d.ts.map +1 -0
  28. package/dist/adapters/outbound-text.js +58 -0
  29. package/dist/adapters/outbound-text.js.map +1 -0
  30. package/dist/adapters/slack-adapter.d.ts +82 -0
  31. package/dist/adapters/slack-adapter.d.ts.map +1 -0
  32. package/dist/adapters/slack-adapter.js +359 -0
  33. package/dist/adapters/slack-adapter.js.map +1 -0
  34. package/dist/adapters/telegram-adapter.d.ts +107 -0
  35. package/dist/adapters/telegram-adapter.d.ts.map +1 -0
  36. package/dist/adapters/telegram-adapter.js +477 -0
  37. package/dist/adapters/telegram-adapter.js.map +1 -0
  38. package/dist/adapters/types.d.ts +92 -0
  39. package/dist/adapters/types.d.ts.map +1 -0
  40. package/dist/adapters/types.js +2 -0
  41. package/dist/adapters/types.js.map +1 -0
  42. package/dist/adapters/whatsapp-adapter.d.ts +213 -0
  43. package/dist/adapters/whatsapp-adapter.d.ts.map +1 -0
  44. package/dist/adapters/whatsapp-adapter.js +1216 -0
  45. package/dist/adapters/whatsapp-adapter.js.map +1 -0
  46. package/dist/api/chat-binding-query.d.ts +36 -0
  47. package/dist/api/chat-binding-query.d.ts.map +1 -0
  48. package/dist/api/chat-binding-query.js +63 -0
  49. package/dist/api/chat-binding-query.js.map +1 -0
  50. package/dist/api/chat-session-resume.d.ts +12 -0
  51. package/dist/api/chat-session-resume.d.ts.map +1 -0
  52. package/dist/api/chat-session-resume.js +21 -0
  53. package/dist/api/chat-session-resume.js.map +1 -0
  54. package/dist/api/delegated-proxy-helper.d.ts +33 -0
  55. package/dist/api/delegated-proxy-helper.d.ts.map +1 -0
  56. package/dist/api/delegated-proxy-helper.js +54 -0
  57. package/dist/api/delegated-proxy-helper.js.map +1 -0
  58. package/dist/api/directory-picker.d.ts +38 -0
  59. package/dist/api/directory-picker.d.ts.map +1 -0
  60. package/dist/api/directory-picker.js +278 -0
  61. package/dist/api/directory-picker.js.map +1 -0
  62. package/dist/api/env-writer.d.ts +25 -0
  63. package/dist/api/env-writer.d.ts.map +1 -0
  64. package/dist/api/env-writer.js +421 -0
  65. package/dist/api/env-writer.js.map +1 -0
  66. package/dist/api/integration-route-gate.d.ts +60 -0
  67. package/dist/api/integration-route-gate.d.ts.map +1 -0
  68. package/dist/api/integration-route-gate.js +83 -0
  69. package/dist/api/integration-route-gate.js.map +1 -0
  70. package/dist/api/json-body.d.ts +29 -0
  71. package/dist/api/json-body.d.ts.map +1 -0
  72. package/dist/api/json-body.js +87 -0
  73. package/dist/api/json-body.js.map +1 -0
  74. package/dist/api/routes/activity-sources.d.ts +20 -0
  75. package/dist/api/routes/activity-sources.d.ts.map +1 -0
  76. package/dist/api/routes/activity-sources.js +18 -0
  77. package/dist/api/routes/activity-sources.js.map +1 -0
  78. package/dist/api/routes/agent.d.ts +4 -0
  79. package/dist/api/routes/agent.d.ts.map +1 -0
  80. package/dist/api/routes/agent.js +619 -0
  81. package/dist/api/routes/agent.js.map +1 -0
  82. package/dist/api/routes/apple-calendar.d.ts +31 -0
  83. package/dist/api/routes/apple-calendar.d.ts.map +1 -0
  84. package/dist/api/routes/apple-calendar.js +310 -0
  85. package/dist/api/routes/apple-calendar.js.map +1 -0
  86. package/dist/api/routes/attachments.d.ts +36 -0
  87. package/dist/api/routes/attachments.d.ts.map +1 -0
  88. package/dist/api/routes/attachments.js +305 -0
  89. package/dist/api/routes/attachments.js.map +1 -0
  90. package/dist/api/routes/backends.d.ts +4 -0
  91. package/dist/api/routes/backends.d.ts.map +1 -0
  92. package/dist/api/routes/backends.js +1132 -0
  93. package/dist/api/routes/backends.js.map +1 -0
  94. package/dist/api/routes/books.d.ts +63 -0
  95. package/dist/api/routes/books.d.ts.map +1 -0
  96. package/dist/api/routes/books.js +467 -0
  97. package/dist/api/routes/books.js.map +1 -0
  98. package/dist/api/routes/calendar.d.ts +36 -0
  99. package/dist/api/routes/calendar.d.ts.map +1 -0
  100. package/dist/api/routes/calendar.js +351 -0
  101. package/dist/api/routes/calendar.js.map +1 -0
  102. package/dist/api/routes/commands.d.ts +4 -0
  103. package/dist/api/routes/commands.d.ts.map +1 -0
  104. package/dist/api/routes/commands.js +251 -0
  105. package/dist/api/routes/commands.js.map +1 -0
  106. package/dist/api/routes/context.d.ts +57 -0
  107. package/dist/api/routes/context.d.ts.map +1 -0
  108. package/dist/api/routes/context.js +1765 -0
  109. package/dist/api/routes/context.js.map +1 -0
  110. package/dist/api/routes/dashboard.d.ts +29 -0
  111. package/dist/api/routes/dashboard.d.ts.map +1 -0
  112. package/dist/api/routes/dashboard.js +2062 -0
  113. package/dist/api/routes/dashboard.js.map +1 -0
  114. package/dist/api/routes/delegated-sync.d.ts +4 -0
  115. package/dist/api/routes/delegated-sync.d.ts.map +1 -0
  116. package/dist/api/routes/delegated-sync.js +192 -0
  117. package/dist/api/routes/delegated-sync.js.map +1 -0
  118. package/dist/api/routes/delegated.d.ts +42 -0
  119. package/dist/api/routes/delegated.d.ts.map +1 -0
  120. package/dist/api/routes/delegated.js +250 -0
  121. package/dist/api/routes/delegated.js.map +1 -0
  122. package/dist/api/routes/docs.d.ts +34 -0
  123. package/dist/api/routes/docs.d.ts.map +1 -0
  124. package/dist/api/routes/docs.js +580 -0
  125. package/dist/api/routes/docs.js.map +1 -0
  126. package/dist/api/routes/entities.d.ts +9 -0
  127. package/dist/api/routes/entities.d.ts.map +1 -0
  128. package/dist/api/routes/entities.js +176 -0
  129. package/dist/api/routes/entities.js.map +1 -0
  130. package/dist/api/routes/git-accounts.d.ts +23 -0
  131. package/dist/api/routes/git-accounts.d.ts.map +1 -0
  132. package/dist/api/routes/git-accounts.js +227 -0
  133. package/dist/api/routes/git-accounts.js.map +1 -0
  134. package/dist/api/routes/git-templates.d.ts +50 -0
  135. package/dist/api/routes/git-templates.d.ts.map +1 -0
  136. package/dist/api/routes/git-templates.js +276 -0
  137. package/dist/api/routes/git-templates.js.map +1 -0
  138. package/dist/api/routes/git.d.ts +34 -0
  139. package/dist/api/routes/git.d.ts.map +1 -0
  140. package/dist/api/routes/git.js +126 -0
  141. package/dist/api/routes/git.js.map +1 -0
  142. package/dist/api/routes/github.d.ts +34 -0
  143. package/dist/api/routes/github.d.ts.map +1 -0
  144. package/dist/api/routes/github.js +465 -0
  145. package/dist/api/routes/github.js.map +1 -0
  146. package/dist/api/routes/health.d.ts +4 -0
  147. package/dist/api/routes/health.d.ts.map +1 -0
  148. package/dist/api/routes/health.js +257 -0
  149. package/dist/api/routes/health.js.map +1 -0
  150. package/dist/api/routes/integrations-reconcile.d.ts +33 -0
  151. package/dist/api/routes/integrations-reconcile.d.ts.map +1 -0
  152. package/dist/api/routes/integrations-reconcile.js +463 -0
  153. package/dist/api/routes/integrations-reconcile.js.map +1 -0
  154. package/dist/api/routes/integrations.d.ts +19 -0
  155. package/dist/api/routes/integrations.d.ts.map +1 -0
  156. package/dist/api/routes/integrations.js +1384 -0
  157. package/dist/api/routes/integrations.js.map +1 -0
  158. package/dist/api/routes/knowledge.d.ts +4 -0
  159. package/dist/api/routes/knowledge.d.ts.map +1 -0
  160. package/dist/api/routes/knowledge.js +224 -0
  161. package/dist/api/routes/knowledge.js.map +1 -0
  162. package/dist/api/routes/mail.d.ts +39 -0
  163. package/dist/api/routes/mail.d.ts.map +1 -0
  164. package/dist/api/routes/mail.js +1406 -0
  165. package/dist/api/routes/mail.js.map +1 -0
  166. package/dist/api/routes/managed-tasks.d.ts +48 -0
  167. package/dist/api/routes/managed-tasks.d.ts.map +1 -0
  168. package/dist/api/routes/managed-tasks.js +844 -0
  169. package/dist/api/routes/managed-tasks.js.map +1 -0
  170. package/dist/api/routes/mcp.d.ts +50 -0
  171. package/dist/api/routes/mcp.d.ts.map +1 -0
  172. package/dist/api/routes/mcp.js +470 -0
  173. package/dist/api/routes/mcp.js.map +1 -0
  174. package/dist/api/routes/metrics.d.ts +13 -0
  175. package/dist/api/routes/metrics.d.ts.map +1 -0
  176. package/dist/api/routes/metrics.js +117 -0
  177. package/dist/api/routes/metrics.js.map +1 -0
  178. package/dist/api/routes/notion.d.ts +35 -0
  179. package/dist/api/routes/notion.d.ts.map +1 -0
  180. package/dist/api/routes/notion.js +442 -0
  181. package/dist/api/routes/notion.js.map +1 -0
  182. package/dist/api/routes/observations.d.ts +4 -0
  183. package/dist/api/routes/observations.d.ts.map +1 -0
  184. package/dist/api/routes/observations.js +177 -0
  185. package/dist/api/routes/observations.js.map +1 -0
  186. package/dist/api/routes/obsidian.d.ts +16 -0
  187. package/dist/api/routes/obsidian.d.ts.map +1 -0
  188. package/dist/api/routes/obsidian.js +321 -0
  189. package/dist/api/routes/obsidian.js.map +1 -0
  190. package/dist/api/routes/profile-questions.d.ts +17 -0
  191. package/dist/api/routes/profile-questions.d.ts.map +1 -0
  192. package/dist/api/routes/profile-questions.js +115 -0
  193. package/dist/api/routes/profile-questions.js.map +1 -0
  194. package/dist/api/routes/receipts.d.ts +4 -0
  195. package/dist/api/routes/receipts.d.ts.map +1 -0
  196. package/dist/api/routes/receipts.js +155 -0
  197. package/dist/api/routes/receipts.js.map +1 -0
  198. package/dist/api/routes/recurring-schedules.d.ts +4 -0
  199. package/dist/api/routes/recurring-schedules.d.ts.map +1 -0
  200. package/dist/api/routes/recurring-schedules.js +137 -0
  201. package/dist/api/routes/recurring-schedules.js.map +1 -0
  202. package/dist/api/routes/repositories.d.ts +40 -0
  203. package/dist/api/routes/repositories.d.ts.map +1 -0
  204. package/dist/api/routes/repositories.js +857 -0
  205. package/dist/api/routes/repositories.js.map +1 -0
  206. package/dist/api/routes/setup-migrate.d.ts +74 -0
  207. package/dist/api/routes/setup-migrate.d.ts.map +1 -0
  208. package/dist/api/routes/setup-migrate.js +944 -0
  209. package/dist/api/routes/setup-migrate.js.map +1 -0
  210. package/dist/api/routes/setup.d.ts +4 -0
  211. package/dist/api/routes/setup.d.ts.map +1 -0
  212. package/dist/api/routes/setup.js +443 -0
  213. package/dist/api/routes/setup.js.map +1 -0
  214. package/dist/api/routes/skill-curation.d.ts +5 -0
  215. package/dist/api/routes/skill-curation.d.ts.map +1 -0
  216. package/dist/api/routes/skill-curation.js +728 -0
  217. package/dist/api/routes/skill-curation.js.map +1 -0
  218. package/dist/api/routes/skills.d.ts +52 -0
  219. package/dist/api/routes/skills.d.ts.map +1 -0
  220. package/dist/api/routes/skills.js +429 -0
  221. package/dist/api/routes/skills.js.map +1 -0
  222. package/dist/api/routes/sot-bindings.d.ts +20 -0
  223. package/dist/api/routes/sot-bindings.d.ts.map +1 -0
  224. package/dist/api/routes/sot-bindings.js +163 -0
  225. package/dist/api/routes/sot-bindings.js.map +1 -0
  226. package/dist/api/routes/sse.d.ts +86 -0
  227. package/dist/api/routes/sse.d.ts.map +1 -0
  228. package/dist/api/routes/sse.js +378 -0
  229. package/dist/api/routes/sse.js.map +1 -0
  230. package/dist/api/routes/system.d.ts +4 -0
  231. package/dist/api/routes/system.d.ts.map +1 -0
  232. package/dist/api/routes/system.js +207 -0
  233. package/dist/api/routes/system.js.map +1 -0
  234. package/dist/api/routes/task-flows.d.ts +30 -0
  235. package/dist/api/routes/task-flows.d.ts.map +1 -0
  236. package/dist/api/routes/task-flows.js +155 -0
  237. package/dist/api/routes/task-flows.js.map +1 -0
  238. package/dist/api/routes/travel-bookings.d.ts +4 -0
  239. package/dist/api/routes/travel-bookings.d.ts.map +1 -0
  240. package/dist/api/routes/travel-bookings.js +142 -0
  241. package/dist/api/routes/travel-bookings.js.map +1 -0
  242. package/dist/api/routes/travel-time.d.ts +8 -0
  243. package/dist/api/routes/travel-time.d.ts.map +1 -0
  244. package/dist/api/routes/travel-time.js +87 -0
  245. package/dist/api/routes/travel-time.js.map +1 -0
  246. package/dist/api/routes/triggers.d.ts +4 -0
  247. package/dist/api/routes/triggers.d.ts.map +1 -0
  248. package/dist/api/routes/triggers.js +101 -0
  249. package/dist/api/routes/triggers.js.map +1 -0
  250. package/dist/api/routes/voice.d.ts +48 -0
  251. package/dist/api/routes/voice.d.ts.map +1 -0
  252. package/dist/api/routes/voice.js +232 -0
  253. package/dist/api/routes/voice.js.map +1 -0
  254. package/dist/api/server.d.ts +428 -0
  255. package/dist/api/server.d.ts.map +1 -0
  256. package/dist/api/server.js +558 -0
  257. package/dist/api/server.js.map +1 -0
  258. package/dist/config.d.ts +136 -0
  259. package/dist/config.d.ts.map +1 -0
  260. package/dist/config.js +699 -0
  261. package/dist/config.js.map +1 -0
  262. package/dist/core/agent-core.d.ts +517 -0
  263. package/dist/core/agent-core.d.ts.map +1 -0
  264. package/dist/core/agent-core.js +102 -0
  265. package/dist/core/agent-core.js.map +1 -0
  266. package/dist/core/alerts.d.ts +86 -0
  267. package/dist/core/alerts.d.ts.map +1 -0
  268. package/dist/core/alerts.js +304 -0
  269. package/dist/core/alerts.js.map +1 -0
  270. package/dist/core/atomic-write.d.ts +51 -0
  271. package/dist/core/atomic-write.d.ts.map +1 -0
  272. package/dist/core/atomic-write.js +135 -0
  273. package/dist/core/atomic-write.js.map +1 -0
  274. package/dist/core/backends/api-key-probe.d.ts +40 -0
  275. package/dist/core/backends/api-key-probe.d.ts.map +1 -0
  276. package/dist/core/backends/api-key-probe.js +116 -0
  277. package/dist/core/backends/api-key-probe.js.map +1 -0
  278. package/dist/core/backends/auth-health-monitor.d.ts +373 -0
  279. package/dist/core/backends/auth-health-monitor.d.ts.map +1 -0
  280. package/dist/core/backends/auth-health-monitor.js +950 -0
  281. package/dist/core/backends/auth-health-monitor.js.map +1 -0
  282. package/dist/core/backends/auth-recovery.d.ts +263 -0
  283. package/dist/core/backends/auth-recovery.d.ts.map +1 -0
  284. package/dist/core/backends/auth-recovery.js +1086 -0
  285. package/dist/core/backends/auth-recovery.js.map +1 -0
  286. package/dist/core/backends/auth-telemetry.d.ts +81 -0
  287. package/dist/core/backends/auth-telemetry.d.ts.map +1 -0
  288. package/dist/core/backends/auth-telemetry.js +108 -0
  289. package/dist/core/backends/auth-telemetry.js.map +1 -0
  290. package/dist/core/backends/backend-router.d.ts +272 -0
  291. package/dist/core/backends/backend-router.d.ts.map +1 -0
  292. package/dist/core/backends/backend-router.js +759 -0
  293. package/dist/core/backends/backend-router.js.map +1 -0
  294. package/dist/core/backends/claude-code-core.d.ts +299 -0
  295. package/dist/core/backends/claude-code-core.d.ts.map +1 -0
  296. package/dist/core/backends/claude-code-core.js +2541 -0
  297. package/dist/core/backends/claude-code-core.js.map +1 -0
  298. package/dist/core/backends/claude-credentials-store.d.ts +83 -0
  299. package/dist/core/backends/claude-credentials-store.d.ts.map +1 -0
  300. package/dist/core/backends/claude-credentials-store.js +243 -0
  301. package/dist/core/backends/claude-credentials-store.js.map +1 -0
  302. package/dist/core/backends/cli-utils.d.ts +95 -0
  303. package/dist/core/backends/cli-utils.d.ts.map +1 -0
  304. package/dist/core/backends/cli-utils.js +464 -0
  305. package/dist/core/backends/cli-utils.js.map +1 -0
  306. package/dist/core/backends/codex-core.d.ts +127 -0
  307. package/dist/core/backends/codex-core.d.ts.map +1 -0
  308. package/dist/core/backends/codex-core.js +1693 -0
  309. package/dist/core/backends/codex-core.js.map +1 -0
  310. package/dist/core/backends/gemini-cli-core.d.ts +367 -0
  311. package/dist/core/backends/gemini-cli-core.d.ts.map +1 -0
  312. package/dist/core/backends/gemini-cli-core.js +2331 -0
  313. package/dist/core/backends/gemini-cli-core.js.map +1 -0
  314. package/dist/core/backends/idle-watchdog.d.ts +77 -0
  315. package/dist/core/backends/idle-watchdog.d.ts.map +1 -0
  316. package/dist/core/backends/idle-watchdog.js +94 -0
  317. package/dist/core/backends/idle-watchdog.js.map +1 -0
  318. package/dist/core/backends/install-methods.d.ts +93 -0
  319. package/dist/core/backends/install-methods.d.ts.map +1 -0
  320. package/dist/core/backends/install-methods.js +267 -0
  321. package/dist/core/backends/install-methods.js.map +1 -0
  322. package/dist/core/backends/model-registry.d.ts +58 -0
  323. package/dist/core/backends/model-registry.d.ts.map +1 -0
  324. package/dist/core/backends/model-registry.js +539 -0
  325. package/dist/core/backends/model-registry.js.map +1 -0
  326. package/dist/core/backends/plan-presets.d.ts +123 -0
  327. package/dist/core/backends/plan-presets.d.ts.map +1 -0
  328. package/dist/core/backends/plan-presets.js +235 -0
  329. package/dist/core/backends/plan-presets.js.map +1 -0
  330. package/dist/core/backends/price-fetcher.d.ts +48 -0
  331. package/dist/core/backends/price-fetcher.d.ts.map +1 -0
  332. package/dist/core/backends/price-fetcher.js +248 -0
  333. package/dist/core/backends/price-fetcher.js.map +1 -0
  334. package/dist/core/backends/process-config-cascade.d.ts +68 -0
  335. package/dist/core/backends/process-config-cascade.d.ts.map +1 -0
  336. package/dist/core/backends/process-config-cascade.js +173 -0
  337. package/dist/core/backends/process-config-cascade.js.map +1 -0
  338. package/dist/core/backends/prompt-utils.d.ts +6 -0
  339. package/dist/core/backends/prompt-utils.d.ts.map +1 -0
  340. package/dist/core/backends/prompt-utils.js +80 -0
  341. package/dist/core/backends/prompt-utils.js.map +1 -0
  342. package/dist/core/backends/proxy-model-registry.d.ts +110 -0
  343. package/dist/core/backends/proxy-model-registry.d.ts.map +1 -0
  344. package/dist/core/backends/proxy-model-registry.js +195 -0
  345. package/dist/core/backends/proxy-model-registry.js.map +1 -0
  346. package/dist/core/backends/silent-api-error-detector.d.ts +31 -0
  347. package/dist/core/backends/silent-api-error-detector.d.ts.map +1 -0
  348. package/dist/core/backends/silent-api-error-detector.js +44 -0
  349. package/dist/core/backends/silent-api-error-detector.js.map +1 -0
  350. package/dist/core/bang-commands/commands-cost.d.ts +13 -0
  351. package/dist/core/bang-commands/commands-cost.d.ts.map +1 -0
  352. package/dist/core/bang-commands/commands-cost.js +91 -0
  353. package/dist/core/bang-commands/commands-cost.js.map +1 -0
  354. package/dist/core/bang-commands/commands-report.d.ts +18 -0
  355. package/dist/core/bang-commands/commands-report.d.ts.map +1 -0
  356. package/dist/core/bang-commands/commands-report.js +105 -0
  357. package/dist/core/bang-commands/commands-report.js.map +1 -0
  358. package/dist/core/bang-commands/commands-stop-start.d.ts +4 -0
  359. package/dist/core/bang-commands/commands-stop-start.d.ts.map +1 -0
  360. package/dist/core/bang-commands/commands-stop-start.js +88 -0
  361. package/dist/core/bang-commands/commands-stop-start.js.map +1 -0
  362. package/dist/core/bang-commands/format-utils.d.ts +34 -0
  363. package/dist/core/bang-commands/format-utils.d.ts.map +1 -0
  364. package/dist/core/bang-commands/format-utils.js +118 -0
  365. package/dist/core/bang-commands/format-utils.js.map +1 -0
  366. package/dist/core/bang-commands/index.d.ts +20 -0
  367. package/dist/core/bang-commands/index.d.ts.map +1 -0
  368. package/dist/core/bang-commands/index.js +31 -0
  369. package/dist/core/bang-commands/index.js.map +1 -0
  370. package/dist/core/bang-commands/registry.d.ts +72 -0
  371. package/dist/core/bang-commands/registry.d.ts.map +1 -0
  372. package/dist/core/bang-commands/registry.js +174 -0
  373. package/dist/core/bang-commands/registry.js.map +1 -0
  374. package/dist/core/bang-commands/user-commands.d.ts +86 -0
  375. package/dist/core/bang-commands/user-commands.d.ts.map +1 -0
  376. package/dist/core/bang-commands/user-commands.js +212 -0
  377. package/dist/core/bang-commands/user-commands.js.map +1 -0
  378. package/dist/core/channel-timeline.d.ts +28 -0
  379. package/dist/core/channel-timeline.d.ts.map +1 -0
  380. package/dist/core/channel-timeline.js +117 -0
  381. package/dist/core/channel-timeline.js.map +1 -0
  382. package/dist/core/character-block.d.ts +37 -0
  383. package/dist/core/character-block.d.ts.map +1 -0
  384. package/dist/core/character-block.js +162 -0
  385. package/dist/core/character-block.js.map +1 -0
  386. package/dist/core/context/activity-sources.d.ts +37 -0
  387. package/dist/core/context/activity-sources.d.ts.map +1 -0
  388. package/dist/core/context/activity-sources.js +69 -0
  389. package/dist/core/context/activity-sources.js.map +1 -0
  390. package/dist/core/context/activity-view-reconciler.d.ts +110 -0
  391. package/dist/core/context/activity-view-reconciler.d.ts.map +1 -0
  392. package/dist/core/context/activity-view-reconciler.js +252 -0
  393. package/dist/core/context/activity-view-reconciler.js.map +1 -0
  394. package/dist/core/context/activity-view-runner.d.ts +38 -0
  395. package/dist/core/context/activity-view-runner.d.ts.map +1 -0
  396. package/dist/core/context/activity-view-runner.js +402 -0
  397. package/dist/core/context/activity-view-runner.js.map +1 -0
  398. package/dist/core/context/default-schedules-reconciler.d.ts +85 -0
  399. package/dist/core/context/default-schedules-reconciler.d.ts.map +1 -0
  400. package/dist/core/context/default-schedules-reconciler.js +153 -0
  401. package/dist/core/context/default-schedules-reconciler.js.map +1 -0
  402. package/dist/core/context/default-schedules-runner.d.ts +40 -0
  403. package/dist/core/context/default-schedules-runner.d.ts.map +1 -0
  404. package/dist/core/context/default-schedules-runner.js +233 -0
  405. package/dist/core/context/default-schedules-runner.js.map +1 -0
  406. package/dist/core/context/domain-index-reconciler.d.ts +81 -0
  407. package/dist/core/context/domain-index-reconciler.d.ts.map +1 -0
  408. package/dist/core/context/domain-index-reconciler.js +199 -0
  409. package/dist/core/context/domain-index-reconciler.js.map +1 -0
  410. package/dist/core/context/domain-index-runner.d.ts +35 -0
  411. package/dist/core/context/domain-index-runner.d.ts.map +1 -0
  412. package/dist/core/context/domain-index-runner.js +223 -0
  413. package/dist/core/context/domain-index-runner.js.map +1 -0
  414. package/dist/core/context/entity-mirror.d.ts +227 -0
  415. package/dist/core/context/entity-mirror.d.ts.map +1 -0
  416. package/dist/core/context/entity-mirror.js +629 -0
  417. package/dist/core/context/entity-mirror.js.map +1 -0
  418. package/dist/core/context/entity-source-rename.d.ts +61 -0
  419. package/dist/core/context/entity-source-rename.d.ts.map +1 -0
  420. package/dist/core/context/entity-source-rename.js +237 -0
  421. package/dist/core/context/entity-source-rename.js.map +1 -0
  422. package/dist/core/context/index-reconciler.d.ts +61 -0
  423. package/dist/core/context/index-reconciler.d.ts.map +1 -0
  424. package/dist/core/context/index-reconciler.js +329 -0
  425. package/dist/core/context/index-reconciler.js.map +1 -0
  426. package/dist/core/context/policy-index-reconciler.d.ts +102 -0
  427. package/dist/core/context/policy-index-reconciler.d.ts.map +1 -0
  428. package/dist/core/context/policy-index-reconciler.js +202 -0
  429. package/dist/core/context/policy-index-reconciler.js.map +1 -0
  430. package/dist/core/context/policy-index-runner.d.ts +66 -0
  431. package/dist/core/context/policy-index-runner.d.ts.map +1 -0
  432. package/dist/core/context/policy-index-runner.js +406 -0
  433. package/dist/core/context/policy-index-runner.js.map +1 -0
  434. package/dist/core/context/reconciler-runner.d.ts +44 -0
  435. package/dist/core/context/reconciler-runner.d.ts.map +1 -0
  436. package/dist/core/context/reconciler-runner.js +273 -0
  437. package/dist/core/context/reconciler-runner.js.map +1 -0
  438. package/dist/core/context-builder.d.ts +115 -0
  439. package/dist/core/context-builder.d.ts.map +1 -0
  440. package/dist/core/context-builder.js +1148 -0
  441. package/dist/core/context-builder.js.map +1 -0
  442. package/dist/core/context-frontmatter-backfill.d.ts +33 -0
  443. package/dist/core/context-frontmatter-backfill.d.ts.map +1 -0
  444. package/dist/core/context-frontmatter-backfill.js +111 -0
  445. package/dist/core/context-frontmatter-backfill.js.map +1 -0
  446. package/dist/core/context-frontmatter.d.ts +13 -0
  447. package/dist/core/context-frontmatter.d.ts.map +1 -0
  448. package/dist/core/context-frontmatter.js +325 -0
  449. package/dist/core/context-frontmatter.js.map +1 -0
  450. package/dist/core/context-health.d.ts +51 -0
  451. package/dist/core/context-health.d.ts.map +1 -0
  452. package/dist/core/context-health.js +304 -0
  453. package/dist/core/context-health.js.map +1 -0
  454. package/dist/core/context-paths.d.ts +183 -0
  455. package/dist/core/context-paths.d.ts.map +1 -0
  456. package/dist/core/context-paths.js +241 -0
  457. package/dist/core/context-paths.js.map +1 -0
  458. package/dist/core/context-staleness.d.ts +45 -0
  459. package/dist/core/context-staleness.d.ts.map +1 -0
  460. package/dist/core/context-staleness.js +88 -0
  461. package/dist/core/context-staleness.js.map +1 -0
  462. package/dist/core/custom-routine-scheduler.d.ts +151 -0
  463. package/dist/core/custom-routine-scheduler.d.ts.map +1 -0
  464. package/dist/core/custom-routine-scheduler.js +335 -0
  465. package/dist/core/custom-routine-scheduler.js.map +1 -0
  466. package/dist/core/daemon-api-cli.d.ts +33 -0
  467. package/dist/core/daemon-api-cli.d.ts.map +1 -0
  468. package/dist/core/daemon-api-cli.js +614 -0
  469. package/dist/core/daemon-api-cli.js.map +1 -0
  470. package/dist/core/dashboard-session-cleanup.d.ts +39 -0
  471. package/dist/core/dashboard-session-cleanup.d.ts.map +1 -0
  472. package/dist/core/dashboard-session-cleanup.js +108 -0
  473. package/dist/core/dashboard-session-cleanup.js.map +1 -0
  474. package/dist/core/dashboard-session-controls.d.ts +41 -0
  475. package/dist/core/dashboard-session-controls.d.ts.map +1 -0
  476. package/dist/core/dashboard-session-controls.js +154 -0
  477. package/dist/core/dashboard-session-controls.js.map +1 -0
  478. package/dist/core/delegated-connector-health.d.ts +63 -0
  479. package/dist/core/delegated-connector-health.d.ts.map +1 -0
  480. package/dist/core/delegated-connector-health.js +157 -0
  481. package/dist/core/delegated-connector-health.js.map +1 -0
  482. package/dist/core/dispatcher.d.ts +999 -0
  483. package/dist/core/dispatcher.d.ts.map +1 -0
  484. package/dist/core/dispatcher.js +4378 -0
  485. package/dist/core/dispatcher.js.map +1 -0
  486. package/dist/core/dm-freshness-metrics.d.ts +73 -0
  487. package/dist/core/dm-freshness-metrics.d.ts.map +1 -0
  488. package/dist/core/dm-freshness-metrics.js +138 -0
  489. package/dist/core/dm-freshness-metrics.js.map +1 -0
  490. package/dist/core/docs/citation-validator.d.ts +73 -0
  491. package/dist/core/docs/citation-validator.d.ts.map +1 -0
  492. package/dist/core/docs/citation-validator.js +195 -0
  493. package/dist/core/docs/citation-validator.js.map +1 -0
  494. package/dist/core/docs/extract-terms.d.ts +78 -0
  495. package/dist/core/docs/extract-terms.d.ts.map +1 -0
  496. package/dist/core/docs/extract-terms.js +147 -0
  497. package/dist/core/docs/extract-terms.js.map +1 -0
  498. package/dist/core/docs/indexer.d.ts +104 -0
  499. package/dist/core/docs/indexer.d.ts.map +1 -0
  500. package/dist/core/docs/indexer.js +340 -0
  501. package/dist/core/docs/indexer.js.map +1 -0
  502. package/dist/core/drift-effects.d.ts +30 -0
  503. package/dist/core/drift-effects.d.ts.map +1 -0
  504. package/dist/core/drift-effects.js +384 -0
  505. package/dist/core/drift-effects.js.map +1 -0
  506. package/dist/core/event-bus.d.ts +56 -0
  507. package/dist/core/event-bus.d.ts.map +1 -0
  508. package/dist/core/event-bus.js +135 -0
  509. package/dist/core/event-bus.js.map +1 -0
  510. package/dist/core/git-project-docs.d.ts +77 -0
  511. package/dist/core/git-project-docs.d.ts.map +1 -0
  512. package/dist/core/git-project-docs.js +439 -0
  513. package/dist/core/git-project-docs.js.map +1 -0
  514. package/dist/core/health-monitor.d.ts +57 -0
  515. package/dist/core/health-monitor.d.ts.map +1 -0
  516. package/dist/core/health-monitor.js +137 -0
  517. package/dist/core/health-monitor.js.map +1 -0
  518. package/dist/core/heartbeat.d.ts +26 -0
  519. package/dist/core/heartbeat.d.ts.map +1 -0
  520. package/dist/core/heartbeat.js +48 -0
  521. package/dist/core/heartbeat.js.map +1 -0
  522. package/dist/core/integration-health.d.ts +49 -0
  523. package/dist/core/integration-health.d.ts.map +1 -0
  524. package/dist/core/integration-health.js +89 -0
  525. package/dist/core/integration-health.js.map +1 -0
  526. package/dist/core/integration-lifecycle.d.ts +79 -0
  527. package/dist/core/integration-lifecycle.d.ts.map +1 -0
  528. package/dist/core/integration-lifecycle.js +153 -0
  529. package/dist/core/integration-lifecycle.js.map +1 -0
  530. package/dist/core/integration-main-backend.d.ts +36 -0
  531. package/dist/core/integration-main-backend.d.ts.map +1 -0
  532. package/dist/core/integration-main-backend.js +59 -0
  533. package/dist/core/integration-main-backend.js.map +1 -0
  534. package/dist/core/integration-probe.d.ts +98 -0
  535. package/dist/core/integration-probe.d.ts.map +1 -0
  536. package/dist/core/integration-probe.js +152 -0
  537. package/dist/core/integration-probe.js.map +1 -0
  538. package/dist/core/management-md-write-lock.d.ts +68 -0
  539. package/dist/core/management-md-write-lock.d.ts.map +1 -0
  540. package/dist/core/management-md-write-lock.js +93 -0
  541. package/dist/core/management-md-write-lock.js.map +1 -0
  542. package/dist/core/management-md.d.ts +186 -0
  543. package/dist/core/management-md.d.ts.map +1 -0
  544. package/dist/core/management-md.js +652 -0
  545. package/dist/core/management-md.js.map +1 -0
  546. package/dist/core/management-registry.d.ts +245 -0
  547. package/dist/core/management-registry.d.ts.map +1 -0
  548. package/dist/core/management-registry.js +906 -0
  549. package/dist/core/management-registry.js.map +1 -0
  550. package/dist/core/management-telemetry.d.ts +100 -0
  551. package/dist/core/management-telemetry.d.ts.map +1 -0
  552. package/dist/core/management-telemetry.js +156 -0
  553. package/dist/core/management-telemetry.js.map +1 -0
  554. package/dist/core/message-recorder.d.ts +38 -0
  555. package/dist/core/message-recorder.d.ts.map +1 -0
  556. package/dist/core/message-recorder.js +88 -0
  557. package/dist/core/message-recorder.js.map +1 -0
  558. package/dist/core/metrics.d.ts +338 -0
  559. package/dist/core/metrics.d.ts.map +1 -0
  560. package/dist/core/metrics.js +747 -0
  561. package/dist/core/metrics.js.map +1 -0
  562. package/dist/core/migration-backup.d.ts +218 -0
  563. package/dist/core/migration-backup.d.ts.map +1 -0
  564. package/dist/core/migration-backup.js +934 -0
  565. package/dist/core/migration-backup.js.map +1 -0
  566. package/dist/core/overview-write-lock.d.ts +48 -0
  567. package/dist/core/overview-write-lock.d.ts.map +1 -0
  568. package/dist/core/overview-write-lock.js +56 -0
  569. package/dist/core/overview-write-lock.js.map +1 -0
  570. package/dist/core/path-compat.d.ts +22 -0
  571. package/dist/core/path-compat.d.ts.map +1 -0
  572. package/dist/core/path-compat.js +67 -0
  573. package/dist/core/path-compat.js.map +1 -0
  574. package/dist/core/path-rewrite.d.ts +58 -0
  575. package/dist/core/path-rewrite.d.ts.map +1 -0
  576. package/dist/core/path-rewrite.js +141 -0
  577. package/dist/core/path-rewrite.js.map +1 -0
  578. package/dist/core/policy-files.d.ts +108 -0
  579. package/dist/core/policy-files.d.ts.map +1 -0
  580. package/dist/core/policy-files.js +198 -0
  581. package/dist/core/policy-files.js.map +1 -0
  582. package/dist/core/profile-questions/seed.d.ts +44 -0
  583. package/dist/core/profile-questions/seed.d.ts.map +1 -0
  584. package/dist/core/profile-questions/seed.js +173 -0
  585. package/dist/core/profile-questions/seed.js.map +1 -0
  586. package/dist/core/profile-questions/slot-filled.d.ts +51 -0
  587. package/dist/core/profile-questions/slot-filled.d.ts.map +1 -0
  588. package/dist/core/profile-questions/slot-filled.js +118 -0
  589. package/dist/core/profile-questions/slot-filled.js.map +1 -0
  590. package/dist/core/prompts.d.ts +111 -0
  591. package/dist/core/prompts.d.ts.map +1 -0
  592. package/dist/core/prompts.js +267 -0
  593. package/dist/core/prompts.js.map +1 -0
  594. package/dist/core/quiet-hours-sync.d.ts +15 -0
  595. package/dist/core/quiet-hours-sync.d.ts.map +1 -0
  596. package/dist/core/quiet-hours-sync.js +51 -0
  597. package/dist/core/quiet-hours-sync.js.map +1 -0
  598. package/dist/core/read-sensitive-token-manager.d.ts +19 -0
  599. package/dist/core/read-sensitive-token-manager.d.ts.map +1 -0
  600. package/dist/core/read-sensitive-token-manager.js +29 -0
  601. package/dist/core/read-sensitive-token-manager.js.map +1 -0
  602. package/dist/core/recurrence.d.ts +24 -0
  603. package/dist/core/recurrence.d.ts.map +1 -0
  604. package/dist/core/recurrence.js +162 -0
  605. package/dist/core/recurrence.js.map +1 -0
  606. package/dist/core/reinstall.d.ts +107 -0
  607. package/dist/core/reinstall.d.ts.map +1 -0
  608. package/dist/core/reinstall.js +163 -0
  609. package/dist/core/reinstall.js.map +1 -0
  610. package/dist/core/release-assets.d.ts +106 -0
  611. package/dist/core/release-assets.d.ts.map +1 -0
  612. package/dist/core/release-assets.js +434 -0
  613. package/dist/core/release-assets.js.map +1 -0
  614. package/dist/core/repository-management-docs.d.ts +216 -0
  615. package/dist/core/repository-management-docs.d.ts.map +1 -0
  616. package/dist/core/repository-management-docs.js +855 -0
  617. package/dist/core/repository-management-docs.js.map +1 -0
  618. package/dist/core/retention.d.ts +164 -0
  619. package/dist/core/retention.d.ts.map +1 -0
  620. package/dist/core/retention.js +1008 -0
  621. package/dist/core/retention.js.map +1 -0
  622. package/dist/core/review-context.d.ts +48 -0
  623. package/dist/core/review-context.d.ts.map +1 -0
  624. package/dist/core/review-context.js +282 -0
  625. package/dist/core/review-context.js.map +1 -0
  626. package/dist/core/roadmap-horizon.d.ts +48 -0
  627. package/dist/core/roadmap-horizon.d.ts.map +1 -0
  628. package/dist/core/roadmap-horizon.js +213 -0
  629. package/dist/core/roadmap-horizon.js.map +1 -0
  630. package/dist/core/roadmap-ids.d.ts +57 -0
  631. package/dist/core/roadmap-ids.d.ts.map +1 -0
  632. package/dist/core/roadmap-ids.js +118 -0
  633. package/dist/core/roadmap-ids.js.map +1 -0
  634. package/dist/core/roadmap-merge.d.ts +7 -0
  635. package/dist/core/roadmap-merge.d.ts.map +1 -0
  636. package/dist/core/roadmap-merge.js +187 -0
  637. package/dist/core/roadmap-merge.js.map +1 -0
  638. package/dist/core/roadmap-refresh-triggers.d.ts +32 -0
  639. package/dist/core/roadmap-refresh-triggers.d.ts.map +1 -0
  640. package/dist/core/roadmap-refresh-triggers.js +51 -0
  641. package/dist/core/roadmap-refresh-triggers.js.map +1 -0
  642. package/dist/core/roadmap-truncate.d.ts +49 -0
  643. package/dist/core/roadmap-truncate.d.ts.map +1 -0
  644. package/dist/core/roadmap-truncate.js +152 -0
  645. package/dist/core/roadmap-truncate.js.map +1 -0
  646. package/dist/core/roadmap-validate.d.ts +31 -0
  647. package/dist/core/roadmap-validate.d.ts.map +1 -0
  648. package/dist/core/roadmap-validate.js +403 -0
  649. package/dist/core/roadmap-validate.js.map +1 -0
  650. package/dist/core/roadmap-write-lock.d.ts +53 -0
  651. package/dist/core/roadmap-write-lock.d.ts.map +1 -0
  652. package/dist/core/roadmap-write-lock.js +59 -0
  653. package/dist/core/roadmap-write-lock.js.map +1 -0
  654. package/dist/core/schedule-insert-helper.d.ts +46 -0
  655. package/dist/core/schedule-insert-helper.d.ts.map +1 -0
  656. package/dist/core/schedule-insert-helper.js +52 -0
  657. package/dist/core/schedule-insert-helper.js.map +1 -0
  658. package/dist/core/schedule-maintenance.d.ts +22 -0
  659. package/dist/core/schedule-maintenance.d.ts.map +1 -0
  660. package/dist/core/schedule-maintenance.js +57 -0
  661. package/dist/core/schedule-maintenance.js.map +1 -0
  662. package/dist/core/scheduler.d.ts +208 -0
  663. package/dist/core/scheduler.d.ts.map +1 -0
  664. package/dist/core/scheduler.js +896 -0
  665. package/dist/core/scheduler.js.map +1 -0
  666. package/dist/core/semaphore.d.ts +13 -0
  667. package/dist/core/semaphore.d.ts.map +1 -0
  668. package/dist/core/semaphore.js +31 -0
  669. package/dist/core/semaphore.js.map +1 -0
  670. package/dist/core/session-gate.d.ts +37 -0
  671. package/dist/core/session-gate.d.ts.map +1 -0
  672. package/dist/core/session-gate.js +69 -0
  673. package/dist/core/session-gate.js.map +1 -0
  674. package/dist/core/session-manager.d.ts +252 -0
  675. package/dist/core/session-manager.d.ts.map +1 -0
  676. package/dist/core/session-manager.js +716 -0
  677. package/dist/core/session-manager.js.map +1 -0
  678. package/dist/core/signal-detector.d.ts +97 -0
  679. package/dist/core/signal-detector.d.ts.map +1 -0
  680. package/dist/core/signal-detector.js +215 -0
  681. package/dist/core/signal-detector.js.map +1 -0
  682. package/dist/core/skeleton.d.ts +83 -0
  683. package/dist/core/skeleton.d.ts.map +1 -0
  684. package/dist/core/skeleton.js +255 -0
  685. package/dist/core/skeleton.js.map +1 -0
  686. package/dist/core/skill-curation/apply-proposal.d.ts +71 -0
  687. package/dist/core/skill-curation/apply-proposal.d.ts.map +1 -0
  688. package/dist/core/skill-curation/apply-proposal.js +175 -0
  689. package/dist/core/skill-curation/apply-proposal.js.map +1 -0
  690. package/dist/core/skill-curation/auto-revert.d.ts +43 -0
  691. package/dist/core/skill-curation/auto-revert.d.ts.map +1 -0
  692. package/dist/core/skill-curation/auto-revert.js +155 -0
  693. package/dist/core/skill-curation/auto-revert.js.map +1 -0
  694. package/dist/core/skill-curation/classify-diff.d.ts +27 -0
  695. package/dist/core/skill-curation/classify-diff.d.ts.map +1 -0
  696. package/dist/core/skill-curation/classify-diff.js +0 -0
  697. package/dist/core/skill-curation/classify-diff.js.map +1 -0
  698. package/dist/core/skill-curation/declarations.d.ts +32 -0
  699. package/dist/core/skill-curation/declarations.d.ts.map +1 -0
  700. package/dist/core/skill-curation/declarations.js +171 -0
  701. package/dist/core/skill-curation/declarations.js.map +1 -0
  702. package/dist/core/skill-curation/knowledge-map.d.ts +26 -0
  703. package/dist/core/skill-curation/knowledge-map.d.ts.map +1 -0
  704. package/dist/core/skill-curation/knowledge-map.js +154 -0
  705. package/dist/core/skill-curation/knowledge-map.js.map +1 -0
  706. package/dist/core/skill-curation/orphan-overlay.d.ts +35 -0
  707. package/dist/core/skill-curation/orphan-overlay.d.ts.map +1 -0
  708. package/dist/core/skill-curation/orphan-overlay.js +167 -0
  709. package/dist/core/skill-curation/orphan-overlay.js.map +1 -0
  710. package/dist/core/skill-curation/overlay-store.d.ts +41 -0
  711. package/dist/core/skill-curation/overlay-store.d.ts.map +1 -0
  712. package/dist/core/skill-curation/overlay-store.js +143 -0
  713. package/dist/core/skill-curation/overlay-store.js.map +1 -0
  714. package/dist/core/skill-curation/render/convention-notes.d.ts +4 -0
  715. package/dist/core/skill-curation/render/convention-notes.d.ts.map +1 -0
  716. package/dist/core/skill-curation/render/convention-notes.js +13 -0
  717. package/dist/core/skill-curation/render/convention-notes.js.map +1 -0
  718. package/dist/core/skill-curation/render/cross-references.d.ts +4 -0
  719. package/dist/core/skill-curation/render/cross-references.d.ts.map +1 -0
  720. package/dist/core/skill-curation/render/cross-references.js +10 -0
  721. package/dist/core/skill-curation/render/cross-references.js.map +1 -0
  722. package/dist/core/skill-curation/render/frontmatter-schema.d.ts +4 -0
  723. package/dist/core/skill-curation/render/frontmatter-schema.d.ts.map +1 -0
  724. package/dist/core/skill-curation/render/frontmatter-schema.js +25 -0
  725. package/dist/core/skill-curation/render/frontmatter-schema.js.map +1 -0
  726. package/dist/core/skill-curation/render/index.d.ts +5 -0
  727. package/dist/core/skill-curation/render/index.d.ts.map +1 -0
  728. package/dist/core/skill-curation/render/index.js +42 -0
  729. package/dist/core/skill-curation/render/index.js.map +1 -0
  730. package/dist/core/skill-curation/render/knowledge-layout.d.ts +4 -0
  731. package/dist/core/skill-curation/render/knowledge-layout.d.ts.map +1 -0
  732. package/dist/core/skill-curation/render/knowledge-layout.js +36 -0
  733. package/dist/core/skill-curation/render/knowledge-layout.js.map +1 -0
  734. package/dist/core/skill-curation/render/routing-table.d.ts +4 -0
  735. package/dist/core/skill-curation/render/routing-table.d.ts.map +1 -0
  736. package/dist/core/skill-curation/render/routing-table.js +37 -0
  737. package/dist/core/skill-curation/render/routing-table.js.map +1 -0
  738. package/dist/core/skill-curation/render/search-recipes.d.ts +4 -0
  739. package/dist/core/skill-curation/render/search-recipes.d.ts.map +1 -0
  740. package/dist/core/skill-curation/render/search-recipes.js +39 -0
  741. package/dist/core/skill-curation/render/search-recipes.js.map +1 -0
  742. package/dist/core/skill-curation/run-token.d.ts +27 -0
  743. package/dist/core/skill-curation/run-token.d.ts.map +1 -0
  744. package/dist/core/skill-curation/run-token.js +81 -0
  745. package/dist/core/skill-curation/run-token.js.map +1 -0
  746. package/dist/core/skill-curation/signals.d.ts +49 -0
  747. package/dist/core/skill-curation/signals.d.ts.map +1 -0
  748. package/dist/core/skill-curation/signals.js +149 -0
  749. package/dist/core/skill-curation/signals.js.map +1 -0
  750. package/dist/core/skill-curation/smoke-test.d.ts +39 -0
  751. package/dist/core/skill-curation/smoke-test.d.ts.map +1 -0
  752. package/dist/core/skill-curation/smoke-test.js +313 -0
  753. package/dist/core/skill-curation/smoke-test.js.map +1 -0
  754. package/dist/core/skill-curation/splicer.d.ts +16 -0
  755. package/dist/core/skill-curation/splicer.d.ts.map +1 -0
  756. package/dist/core/skill-curation/splicer.js +78 -0
  757. package/dist/core/skill-curation/splicer.js.map +1 -0
  758. package/dist/core/skill-curation/workdir.d.ts +40 -0
  759. package/dist/core/skill-curation/workdir.d.ts.map +1 -0
  760. package/dist/core/skill-curation/workdir.js +242 -0
  761. package/dist/core/skill-curation/workdir.js.map +1 -0
  762. package/dist/core/skills-compiler.d.ts +391 -0
  763. package/dist/core/skills-compiler.d.ts.map +1 -0
  764. package/dist/core/skills-compiler.js +1271 -0
  765. package/dist/core/skills-compiler.js.map +1 -0
  766. package/dist/core/skills-manifest.d.ts +8 -0
  767. package/dist/core/skills-manifest.d.ts.map +1 -0
  768. package/dist/core/skills-manifest.js +408 -0
  769. package/dist/core/skills-manifest.js.map +1 -0
  770. package/dist/core/system-reset.d.ts +268 -0
  771. package/dist/core/system-reset.d.ts.map +1 -0
  772. package/dist/core/system-reset.js +816 -0
  773. package/dist/core/system-reset.js.map +1 -0
  774. package/dist/core/template-store.d.ts +170 -0
  775. package/dist/core/template-store.d.ts.map +1 -0
  776. package/dist/core/template-store.js +388 -0
  777. package/dist/core/template-store.js.map +1 -0
  778. package/dist/core/template-versions.d.ts +95 -0
  779. package/dist/core/template-versions.d.ts.map +1 -0
  780. package/dist/core/template-versions.js +175 -0
  781. package/dist/core/template-versions.js.map +1 -0
  782. package/dist/core/today-agent-plan.d.ts +33 -0
  783. package/dist/core/today-agent-plan.d.ts.map +1 -0
  784. package/dist/core/today-agent-plan.js +120 -0
  785. package/dist/core/today-agent-plan.js.map +1 -0
  786. package/dist/core/today-direct-writer.d.ts +62 -0
  787. package/dist/core/today-direct-writer.d.ts.map +1 -0
  788. package/dist/core/today-direct-writer.js +132 -0
  789. package/dist/core/today-direct-writer.js.map +1 -0
  790. package/dist/core/today-write-lock.d.ts +89 -0
  791. package/dist/core/today-write-lock.d.ts.map +1 -0
  792. package/dist/core/today-write-lock.js +154 -0
  793. package/dist/core/today-write-lock.js.map +1 -0
  794. package/dist/core/trigger-dispatch.d.ts +31 -0
  795. package/dist/core/trigger-dispatch.d.ts.map +1 -0
  796. package/dist/core/trigger-dispatch.js +100 -0
  797. package/dist/core/trigger-dispatch.js.map +1 -0
  798. package/dist/core/trigger-evaluator.d.ts +59 -0
  799. package/dist/core/trigger-evaluator.d.ts.map +1 -0
  800. package/dist/core/trigger-evaluator.js +243 -0
  801. package/dist/core/trigger-evaluator.js.map +1 -0
  802. package/dist/core/workdir.d.ts +241 -0
  803. package/dist/core/workdir.d.ts.map +1 -0
  804. package/dist/core/workdir.js +565 -0
  805. package/dist/core/workdir.js.map +1 -0
  806. package/dist/db/automation-triggers.d.ts +90 -0
  807. package/dist/db/automation-triggers.d.ts.map +1 -0
  808. package/dist/db/automation-triggers.js +199 -0
  809. package/dist/db/automation-triggers.js.map +1 -0
  810. package/dist/db/client.d.ts +6 -0
  811. package/dist/db/client.d.ts.map +1 -0
  812. package/dist/db/client.js +47 -0
  813. package/dist/db/client.js.map +1 -0
  814. package/dist/db/entities-store.d.ts +92 -0
  815. package/dist/db/entities-store.d.ts.map +1 -0
  816. package/dist/db/entities-store.js +180 -0
  817. package/dist/db/entities-store.js.map +1 -0
  818. package/dist/db/hourly-check-signals.d.ts +78 -0
  819. package/dist/db/hourly-check-signals.d.ts.map +1 -0
  820. package/dist/db/hourly-check-signals.js +289 -0
  821. package/dist/db/hourly-check-signals.js.map +1 -0
  822. package/dist/db/integration-probe-store.d.ts +27 -0
  823. package/dist/db/integration-probe-store.d.ts.map +1 -0
  824. package/dist/db/integration-probe-store.js +75 -0
  825. package/dist/db/integration-probe-store.js.map +1 -0
  826. package/dist/db/integrations-store.d.ts +19 -0
  827. package/dist/db/integrations-store.d.ts.map +1 -0
  828. package/dist/db/integrations-store.js +85 -0
  829. package/dist/db/integrations-store.js.map +1 -0
  830. package/dist/db/managed-tasks-store.d.ts +130 -0
  831. package/dist/db/managed-tasks-store.d.ts.map +1 -0
  832. package/dist/db/managed-tasks-store.js +238 -0
  833. package/dist/db/managed-tasks-store.js.map +1 -0
  834. package/dist/db/management-parse-failures-store.d.ts +45 -0
  835. package/dist/db/management-parse-failures-store.d.ts.map +1 -0
  836. package/dist/db/management-parse-failures-store.js +36 -0
  837. package/dist/db/management-parse-failures-store.js.map +1 -0
  838. package/dist/db/observations.d.ts +145 -0
  839. package/dist/db/observations.d.ts.map +1 -0
  840. package/dist/db/observations.js +287 -0
  841. package/dist/db/observations.js.map +1 -0
  842. package/dist/db/recurring-schedules.d.ts +70 -0
  843. package/dist/db/recurring-schedules.d.ts.map +1 -0
  844. package/dist/db/recurring-schedules.js +213 -0
  845. package/dist/db/recurring-schedules.js.map +1 -0
  846. package/dist/db/repositories-store.d.ts +296 -0
  847. package/dist/db/repositories-store.d.ts.map +1 -0
  848. package/dist/db/repositories-store.js +754 -0
  849. package/dist/db/repositories-store.js.map +1 -0
  850. package/dist/db/runtime-state.d.ts +61 -0
  851. package/dist/db/runtime-state.d.ts.map +1 -0
  852. package/dist/db/runtime-state.js +104 -0
  853. package/dist/db/runtime-state.js.map +1 -0
  854. package/dist/db/schema.d.ts +4 -0
  855. package/dist/db/schema.d.ts.map +1 -0
  856. package/dist/db/schema.js +1338 -0
  857. package/dist/db/schema.js.map +1 -0
  858. package/dist/db/sot-bindings-store.d.ts +41 -0
  859. package/dist/db/sot-bindings-store.d.ts.map +1 -0
  860. package/dist/db/sot-bindings-store.js +64 -0
  861. package/dist/db/sot-bindings-store.js.map +1 -0
  862. package/dist/db/test-schemas.d.ts +23 -0
  863. package/dist/db/test-schemas.d.ts.map +1 -0
  864. package/dist/db/test-schemas.js +111 -0
  865. package/dist/db/test-schemas.js.map +1 -0
  866. package/dist/db/voice-transcripts-store.d.ts +28 -0
  867. package/dist/db/voice-transcripts-store.d.ts.map +1 -0
  868. package/dist/db/voice-transcripts-store.js +43 -0
  869. package/dist/db/voice-transcripts-store.js.map +1 -0
  870. package/dist/index.d.ts +2 -0
  871. package/dist/index.d.ts.map +1 -0
  872. package/dist/index.js +2913 -0
  873. package/dist/index.js.map +1 -0
  874. package/dist/init.d.ts +7 -0
  875. package/dist/init.d.ts.map +1 -0
  876. package/dist/init.js +32 -0
  877. package/dist/init.js.map +1 -0
  878. package/dist/log-buffer.d.ts +71 -0
  879. package/dist/log-buffer.d.ts.map +1 -0
  880. package/dist/log-buffer.js +201 -0
  881. package/dist/log-buffer.js.map +1 -0
  882. package/dist/logging.d.ts +5 -0
  883. package/dist/logging.d.ts.map +1 -0
  884. package/dist/logging.js +130 -0
  885. package/dist/logging.js.map +1 -0
  886. package/dist/management-rules.d.ts +2 -0
  887. package/dist/management-rules.d.ts.map +1 -0
  888. package/dist/management-rules.js +62 -0
  889. package/dist/management-rules.js.map +1 -0
  890. package/dist/messaging/constants.d.ts +33 -0
  891. package/dist/messaging/constants.d.ts.map +1 -0
  892. package/dist/messaging/constants.js +52 -0
  893. package/dist/messaging/constants.js.map +1 -0
  894. package/dist/messaging/magic-phrase.d.ts +16 -0
  895. package/dist/messaging/magic-phrase.d.ts.map +1 -0
  896. package/dist/messaging/magic-phrase.js +103 -0
  897. package/dist/messaging/magic-phrase.js.map +1 -0
  898. package/dist/messaging/owner-channels.d.ts +20 -0
  899. package/dist/messaging/owner-channels.d.ts.map +1 -0
  900. package/dist/messaging/owner-channels.js +41 -0
  901. package/dist/messaging/owner-channels.js.map +1 -0
  902. package/dist/observers/calendar-poller.d.ts +51 -0
  903. package/dist/observers/calendar-poller.d.ts.map +1 -0
  904. package/dist/observers/calendar-poller.js +128 -0
  905. package/dist/observers/calendar-poller.js.map +1 -0
  906. package/dist/observers/context-index-reconciler-observer.d.ts +72 -0
  907. package/dist/observers/context-index-reconciler-observer.d.ts.map +1 -0
  908. package/dist/observers/context-index-reconciler-observer.js +253 -0
  909. package/dist/observers/context-index-reconciler-observer.js.map +1 -0
  910. package/dist/observers/delegated-probe-observer.d.ts +83 -0
  911. package/dist/observers/delegated-probe-observer.d.ts.map +1 -0
  912. package/dist/observers/delegated-probe-observer.js +237 -0
  913. package/dist/observers/delegated-probe-observer.js.map +1 -0
  914. package/dist/observers/delegated-sync-worker.d.ts +375 -0
  915. package/dist/observers/delegated-sync-worker.d.ts.map +1 -0
  916. package/dist/observers/delegated-sync-worker.js +1087 -0
  917. package/dist/observers/delegated-sync-worker.js.map +1 -0
  918. package/dist/observers/entity-mirror-observer.d.ts +55 -0
  919. package/dist/observers/entity-mirror-observer.d.ts.map +1 -0
  920. package/dist/observers/entity-mirror-observer.js +73 -0
  921. package/dist/observers/entity-mirror-observer.js.map +1 -0
  922. package/dist/observers/git-delegated-cron.d.ts +41 -0
  923. package/dist/observers/git-delegated-cron.d.ts.map +1 -0
  924. package/dist/observers/git-delegated-cron.js +159 -0
  925. package/dist/observers/git-delegated-cron.js.map +1 -0
  926. package/dist/observers/git-event-classifier.d.ts +52 -0
  927. package/dist/observers/git-event-classifier.d.ts.map +1 -0
  928. package/dist/observers/git-event-classifier.js +70 -0
  929. package/dist/observers/git-event-classifier.js.map +1 -0
  930. package/dist/observers/git-watcher.d.ts +162 -0
  931. package/dist/observers/git-watcher.d.ts.map +1 -0
  932. package/dist/observers/git-watcher.js +768 -0
  933. package/dist/observers/git-watcher.js.map +1 -0
  934. package/dist/observers/github-poller-classifier.d.ts +101 -0
  935. package/dist/observers/github-poller-classifier.d.ts.map +1 -0
  936. package/dist/observers/github-poller-classifier.js +199 -0
  937. package/dist/observers/github-poller-classifier.js.map +1 -0
  938. package/dist/observers/github-poller.d.ts +291 -0
  939. package/dist/observers/github-poller.d.ts.map +1 -0
  940. package/dist/observers/github-poller.js +609 -0
  941. package/dist/observers/github-poller.js.map +1 -0
  942. package/dist/observers/imminent-event-scheduler.d.ts +34 -0
  943. package/dist/observers/imminent-event-scheduler.d.ts.map +1 -0
  944. package/dist/observers/imminent-event-scheduler.js +125 -0
  945. package/dist/observers/imminent-event-scheduler.js.map +1 -0
  946. package/dist/observers/mail-poller.d.ts +133 -0
  947. package/dist/observers/mail-poller.d.ts.map +1 -0
  948. package/dist/observers/mail-poller.js +563 -0
  949. package/dist/observers/mail-poller.js.map +1 -0
  950. package/dist/observers/mail-reconciliation.d.ts +87 -0
  951. package/dist/observers/mail-reconciliation.d.ts.map +1 -0
  952. package/dist/observers/mail-reconciliation.js +241 -0
  953. package/dist/observers/mail-reconciliation.js.map +1 -0
  954. package/dist/observers/manager.d.ts +67 -0
  955. package/dist/observers/manager.d.ts.map +1 -0
  956. package/dist/observers/manager.js +136 -0
  957. package/dist/observers/manager.js.map +1 -0
  958. package/dist/observers/notion-poller.d.ts +43 -0
  959. package/dist/observers/notion-poller.d.ts.map +1 -0
  960. package/dist/observers/notion-poller.js +184 -0
  961. package/dist/observers/notion-poller.js.map +1 -0
  962. package/dist/observers/observation-summarizer/index.d.ts +13 -0
  963. package/dist/observers/observation-summarizer/index.d.ts.map +1 -0
  964. package/dist/observers/observation-summarizer/index.js +13 -0
  965. package/dist/observers/observation-summarizer/index.js.map +1 -0
  966. package/dist/observers/observation-summarizer/pre-filter.d.ts +62 -0
  967. package/dist/observers/observation-summarizer/pre-filter.d.ts.map +1 -0
  968. package/dist/observers/observation-summarizer/pre-filter.js +189 -0
  969. package/dist/observers/observation-summarizer/pre-filter.js.map +1 -0
  970. package/dist/observers/observation-summarizer/response-parser.d.ts +30 -0
  971. package/dist/observers/observation-summarizer/response-parser.d.ts.map +1 -0
  972. package/dist/observers/observation-summarizer/response-parser.js +106 -0
  973. package/dist/observers/observation-summarizer/response-parser.js.map +1 -0
  974. package/dist/observers/observation-summarizer/summarizer-client.d.ts +83 -0
  975. package/dist/observers/observation-summarizer/summarizer-client.d.ts.map +1 -0
  976. package/dist/observers/observation-summarizer/summarizer-client.js +185 -0
  977. package/dist/observers/observation-summarizer/summarizer-client.js.map +1 -0
  978. package/dist/observers/observation-summarizer/summarizer-prompts.d.ts +51 -0
  979. package/dist/observers/observation-summarizer/summarizer-prompts.d.ts.map +1 -0
  980. package/dist/observers/observation-summarizer/summarizer-prompts.js +286 -0
  981. package/dist/observers/observation-summarizer/summarizer-prompts.js.map +1 -0
  982. package/dist/observers/observation-summarizer/worker.d.ts +106 -0
  983. package/dist/observers/observation-summarizer/worker.d.ts.map +1 -0
  984. package/dist/observers/observation-summarizer/worker.js +311 -0
  985. package/dist/observers/observation-summarizer/worker.js.map +1 -0
  986. package/dist/observers/obsidian-watcher.d.ts +90 -0
  987. package/dist/observers/obsidian-watcher.d.ts.map +1 -0
  988. package/dist/observers/obsidian-watcher.js +166 -0
  989. package/dist/observers/obsidian-watcher.js.map +1 -0
  990. package/dist/observers/primary-vault-watcher.d.ts +73 -0
  991. package/dist/observers/primary-vault-watcher.d.ts.map +1 -0
  992. package/dist/observers/primary-vault-watcher.js +115 -0
  993. package/dist/observers/primary-vault-watcher.js.map +1 -0
  994. package/dist/observers/repository-management-cron.d.ts +70 -0
  995. package/dist/observers/repository-management-cron.d.ts.map +1 -0
  996. package/dist/observers/repository-management-cron.js +166 -0
  997. package/dist/observers/repository-management-cron.js.map +1 -0
  998. package/dist/observers/skill-curation-walker.d.ts +33 -0
  999. package/dist/observers/skill-curation-walker.d.ts.map +1 -0
  1000. package/dist/observers/skill-curation-walker.js +216 -0
  1001. package/dist/observers/skill-curation-walker.js.map +1 -0
  1002. package/dist/safety/absolute-block-audit.d.ts +22 -0
  1003. package/dist/safety/absolute-block-audit.d.ts.map +1 -0
  1004. package/dist/safety/absolute-block-audit.js +32 -0
  1005. package/dist/safety/absolute-block-audit.js.map +1 -0
  1006. package/dist/safety/agent-write-tracker.d.ts +42 -0
  1007. package/dist/safety/agent-write-tracker.d.ts.map +1 -0
  1008. package/dist/safety/agent-write-tracker.js +82 -0
  1009. package/dist/safety/agent-write-tracker.js.map +1 -0
  1010. package/dist/safety/always-disallowed.d.ts +66 -0
  1011. package/dist/safety/always-disallowed.d.ts.map +1 -0
  1012. package/dist/safety/always-disallowed.js +347 -0
  1013. package/dist/safety/always-disallowed.js.map +1 -0
  1014. package/dist/safety/audit.d.ts +118 -0
  1015. package/dist/safety/audit.d.ts.map +1 -0
  1016. package/dist/safety/audit.js +324 -0
  1017. package/dist/safety/audit.js.map +1 -0
  1018. package/dist/safety/integration-write-tracker.d.ts +58 -0
  1019. package/dist/safety/integration-write-tracker.d.ts.map +1 -0
  1020. package/dist/safety/integration-write-tracker.js +41 -0
  1021. package/dist/safety/integration-write-tracker.js.map +1 -0
  1022. package/dist/safety/risk-classifier.d.ts +65 -0
  1023. package/dist/safety/risk-classifier.d.ts.map +1 -0
  1024. package/dist/safety/risk-classifier.js +763 -0
  1025. package/dist/safety/risk-classifier.js.map +1 -0
  1026. package/dist/scheduler/hourly-check-gate.d.ts +73 -0
  1027. package/dist/scheduler/hourly-check-gate.d.ts.map +1 -0
  1028. package/dist/scheduler/hourly-check-gate.js +128 -0
  1029. package/dist/scheduler/hourly-check-gate.js.map +1 -0
  1030. package/dist/secrets/backend-api-key-env.d.ts +104 -0
  1031. package/dist/secrets/backend-api-key-env.d.ts.map +1 -0
  1032. package/dist/secrets/backend-api-key-env.js +197 -0
  1033. package/dist/secrets/backend-api-key-env.js.map +1 -0
  1034. package/dist/secrets/codex-home-materializer.d.ts +35 -0
  1035. package/dist/secrets/codex-home-materializer.d.ts.map +1 -0
  1036. package/dist/secrets/codex-home-materializer.js +76 -0
  1037. package/dist/secrets/codex-home-materializer.js.map +1 -0
  1038. package/dist/secrets/encrypted-blob-store.d.ts +20 -0
  1039. package/dist/secrets/encrypted-blob-store.d.ts.map +1 -0
  1040. package/dist/secrets/encrypted-blob-store.js +80 -0
  1041. package/dist/secrets/encrypted-blob-store.js.map +1 -0
  1042. package/dist/secrets/platform-secret-store.d.ts +17 -0
  1043. package/dist/secrets/platform-secret-store.d.ts.map +1 -0
  1044. package/dist/secrets/platform-secret-store.js +37 -0
  1045. package/dist/secrets/platform-secret-store.js.map +1 -0
  1046. package/dist/secrets/redaction.d.ts +2 -0
  1047. package/dist/secrets/redaction.d.ts.map +1 -0
  1048. package/dist/secrets/redaction.js +2 -0
  1049. package/dist/secrets/redaction.js.map +1 -0
  1050. package/dist/secrets/secret-broker.d.ts +61 -0
  1051. package/dist/secrets/secret-broker.d.ts.map +1 -0
  1052. package/dist/secrets/secret-broker.js +160 -0
  1053. package/dist/secrets/secret-broker.js.map +1 -0
  1054. package/dist/secrets/secret-names.d.ts +34 -0
  1055. package/dist/secrets/secret-names.d.ts.map +1 -0
  1056. package/dist/secrets/secret-names.js +39 -0
  1057. package/dist/secrets/secret-names.js.map +1 -0
  1058. package/dist/secrets/secret-store.d.ts +8 -0
  1059. package/dist/secrets/secret-store.d.ts.map +1 -0
  1060. package/dist/secrets/secret-store.js +2 -0
  1061. package/dist/secrets/secret-store.js.map +1 -0
  1062. package/dist/secrets/types.d.ts +7 -0
  1063. package/dist/secrets/types.d.ts.map +1 -0
  1064. package/dist/secrets/types.js +2 -0
  1065. package/dist/secrets/types.js.map +1 -0
  1066. package/dist/services/apple-calendar/caldav-client.d.ts +48 -0
  1067. package/dist/services/apple-calendar/caldav-client.d.ts.map +1 -0
  1068. package/dist/services/apple-calendar/caldav-client.js +86 -0
  1069. package/dist/services/apple-calendar/caldav-client.js.map +1 -0
  1070. package/dist/services/apple-calendar/caldav-codec.d.ts +67 -0
  1071. package/dist/services/apple-calendar/caldav-codec.d.ts.map +1 -0
  1072. package/dist/services/apple-calendar/caldav-codec.js +341 -0
  1073. package/dist/services/apple-calendar/caldav-codec.js.map +1 -0
  1074. package/dist/services/apple-calendar/index.d.ts +3 -0
  1075. package/dist/services/apple-calendar/index.d.ts.map +1 -0
  1076. package/dist/services/apple-calendar/index.js +2 -0
  1077. package/dist/services/apple-calendar/index.js.map +1 -0
  1078. package/dist/services/apple-calendar/service.d.ts +75 -0
  1079. package/dist/services/apple-calendar/service.d.ts.map +1 -0
  1080. package/dist/services/apple-calendar/service.js +374 -0
  1081. package/dist/services/apple-calendar/service.js.map +1 -0
  1082. package/dist/services/apple-calendar/types.d.ts +78 -0
  1083. package/dist/services/apple-calendar/types.d.ts.map +1 -0
  1084. package/dist/services/apple-calendar/types.js +17 -0
  1085. package/dist/services/apple-calendar/types.js.map +1 -0
  1086. package/dist/services/attachments/hardlink.d.ts +11 -0
  1087. package/dist/services/attachments/hardlink.d.ts.map +1 -0
  1088. package/dist/services/attachments/hardlink.js +56 -0
  1089. package/dist/services/attachments/hardlink.js.map +1 -0
  1090. package/dist/services/attachments/sanitize.d.ts +21 -0
  1091. package/dist/services/attachments/sanitize.d.ts.map +1 -0
  1092. package/dist/services/attachments/sanitize.js +128 -0
  1093. package/dist/services/attachments/sanitize.js.map +1 -0
  1094. package/dist/services/attachments/store.d.ts +146 -0
  1095. package/dist/services/attachments/store.d.ts.map +1 -0
  1096. package/dist/services/attachments/store.js +477 -0
  1097. package/dist/services/attachments/store.js.map +1 -0
  1098. package/dist/services/calendar/outlook/graph-calendar-client.d.ts +114 -0
  1099. package/dist/services/calendar/outlook/graph-calendar-client.d.ts.map +1 -0
  1100. package/dist/services/calendar/outlook/graph-calendar-client.js +146 -0
  1101. package/dist/services/calendar/outlook/graph-calendar-client.js.map +1 -0
  1102. package/dist/services/calendar.d.ts +115 -0
  1103. package/dist/services/calendar.d.ts.map +1 -0
  1104. package/dist/services/calendar.js +281 -0
  1105. package/dist/services/calendar.js.map +1 -0
  1106. package/dist/services/delegated-backend-invoker.d.ts +414 -0
  1107. package/dist/services/delegated-backend-invoker.d.ts.map +1 -0
  1108. package/dist/services/delegated-backend-invoker.js +2372 -0
  1109. package/dist/services/delegated-backend-invoker.js.map +1 -0
  1110. package/dist/services/delegated-proxy-config.d.ts +93 -0
  1111. package/dist/services/delegated-proxy-config.d.ts.map +1 -0
  1112. package/dist/services/delegated-proxy-config.js +98 -0
  1113. package/dist/services/delegated-proxy-config.js.map +1 -0
  1114. package/dist/services/delegated-task-result-cache.d.ts +176 -0
  1115. package/dist/services/delegated-task-result-cache.d.ts.map +1 -0
  1116. package/dist/services/delegated-task-result-cache.js +0 -0
  1117. package/dist/services/delegated-task-result-cache.js.map +1 -0
  1118. package/dist/services/delegated-task-runtime.d.ts +346 -0
  1119. package/dist/services/delegated-task-runtime.d.ts.map +1 -0
  1120. package/dist/services/delegated-task-runtime.js +589 -0
  1121. package/dist/services/delegated-task-runtime.js.map +1 -0
  1122. package/dist/services/delegated-task-session-pool.d.ts +182 -0
  1123. package/dist/services/delegated-task-session-pool.d.ts.map +1 -0
  1124. package/dist/services/delegated-task-session-pool.js +292 -0
  1125. package/dist/services/delegated-task-session-pool.js.map +1 -0
  1126. package/dist/services/delegated-tool-runtime.d.ts +50 -0
  1127. package/dist/services/delegated-tool-runtime.d.ts.map +1 -0
  1128. package/dist/services/delegated-tool-runtime.js +120 -0
  1129. package/dist/services/delegated-tool-runtime.js.map +1 -0
  1130. package/dist/services/fts5.d.ts +40 -0
  1131. package/dist/services/fts5.d.ts.map +1 -0
  1132. package/dist/services/fts5.js +54 -0
  1133. package/dist/services/fts5.js.map +1 -0
  1134. package/dist/services/git-account-registry.d.ts +164 -0
  1135. package/dist/services/git-account-registry.d.ts.map +1 -0
  1136. package/dist/services/git-account-registry.js +297 -0
  1137. package/dist/services/git-account-registry.js.map +1 -0
  1138. package/dist/services/github.d.ts +49 -0
  1139. package/dist/services/github.d.ts.map +1 -0
  1140. package/dist/services/github.js +123 -0
  1141. package/dist/services/github.js.map +1 -0
  1142. package/dist/services/gmail-classifier.d.ts +62 -0
  1143. package/dist/services/gmail-classifier.d.ts.map +1 -0
  1144. package/dist/services/gmail-classifier.js +221 -0
  1145. package/dist/services/gmail-classifier.js.map +1 -0
  1146. package/dist/services/gmail.d.ts +192 -0
  1147. package/dist/services/gmail.d.ts.map +1 -0
  1148. package/dist/services/gmail.js +678 -0
  1149. package/dist/services/gmail.js.map +1 -0
  1150. package/dist/services/google-auth.d.ts +16 -0
  1151. package/dist/services/google-auth.d.ts.map +1 -0
  1152. package/dist/services/google-auth.js +37 -0
  1153. package/dist/services/google-auth.js.map +1 -0
  1154. package/dist/services/google-maps.d.ts +35 -0
  1155. package/dist/services/google-maps.d.ts.map +1 -0
  1156. package/dist/services/google-maps.js +82 -0
  1157. package/dist/services/google-maps.js.map +1 -0
  1158. package/dist/services/integrations/extract-write-item-id.d.ts +64 -0
  1159. package/dist/services/integrations/extract-write-item-id.d.ts.map +1 -0
  1160. package/dist/services/integrations/extract-write-item-id.js +188 -0
  1161. package/dist/services/integrations/extract-write-item-id.js.map +1 -0
  1162. package/dist/services/integrations/reconcile.d.ts +136 -0
  1163. package/dist/services/integrations/reconcile.d.ts.map +1 -0
  1164. package/dist/services/integrations/reconcile.js +218 -0
  1165. package/dist/services/integrations/reconcile.js.map +1 -0
  1166. package/dist/services/integrations/snapshot-partitions.d.ts +40 -0
  1167. package/dist/services/integrations/snapshot-partitions.d.ts.map +1 -0
  1168. package/dist/services/integrations/snapshot-partitions.js +113 -0
  1169. package/dist/services/integrations/snapshot-partitions.js.map +1 -0
  1170. package/dist/services/journal/render.d.ts +15 -0
  1171. package/dist/services/journal/render.d.ts.map +1 -0
  1172. package/dist/services/journal/render.js +17 -0
  1173. package/dist/services/journal/render.js.map +1 -0
  1174. package/dist/services/journal/writer.d.ts +26 -0
  1175. package/dist/services/journal/writer.d.ts.map +1 -0
  1176. package/dist/services/journal/writer.js +50 -0
  1177. package/dist/services/journal/writer.js.map +1 -0
  1178. package/dist/services/mail/account-registry.d.ts +208 -0
  1179. package/dist/services/mail/account-registry.d.ts.map +1 -0
  1180. package/dist/services/mail/account-registry.js +554 -0
  1181. package/dist/services/mail/account-registry.js.map +1 -0
  1182. package/dist/services/mail/gmail/auth-failure-classifier.d.ts +24 -0
  1183. package/dist/services/mail/gmail/auth-failure-classifier.d.ts.map +1 -0
  1184. package/dist/services/mail/gmail/auth-failure-classifier.js +67 -0
  1185. package/dist/services/mail/gmail/auth-failure-classifier.js.map +1 -0
  1186. package/dist/services/mail/gmail/gmail-provider.d.ts +58 -0
  1187. package/dist/services/mail/gmail/gmail-provider.d.ts.map +1 -0
  1188. package/dist/services/mail/gmail/gmail-provider.js +434 -0
  1189. package/dist/services/mail/gmail/gmail-provider.js.map +1 -0
  1190. package/dist/services/mail/gmail/legacy-row.d.ts +24 -0
  1191. package/dist/services/mail/gmail/legacy-row.d.ts.map +1 -0
  1192. package/dist/services/mail/gmail/legacy-row.js +71 -0
  1193. package/dist/services/mail/gmail/legacy-row.js.map +1 -0
  1194. package/dist/services/mail/gmail/poll-cursor.d.ts +12 -0
  1195. package/dist/services/mail/gmail/poll-cursor.d.ts.map +1 -0
  1196. package/dist/services/mail/gmail/poll-cursor.js +32 -0
  1197. package/dist/services/mail/gmail/poll-cursor.js.map +1 -0
  1198. package/dist/services/mail/html-to-plaintext.d.ts +27 -0
  1199. package/dist/services/mail/html-to-plaintext.d.ts.map +1 -0
  1200. package/dist/services/mail/html-to-plaintext.js +163 -0
  1201. package/dist/services/mail/html-to-plaintext.js.map +1 -0
  1202. package/dist/services/mail/imap/app-password.d.ts +27 -0
  1203. package/dist/services/mail/imap/app-password.d.ts.map +1 -0
  1204. package/dist/services/mail/imap/app-password.js +86 -0
  1205. package/dist/services/mail/imap/app-password.js.map +1 -0
  1206. package/dist/services/mail/imap/auth-failure-classifier.d.ts +21 -0
  1207. package/dist/services/mail/imap/auth-failure-classifier.d.ts.map +1 -0
  1208. package/dist/services/mail/imap/auth-failure-classifier.js +54 -0
  1209. package/dist/services/mail/imap/auth-failure-classifier.js.map +1 -0
  1210. package/dist/services/mail/imap/capabilities.d.ts +30 -0
  1211. package/dist/services/mail/imap/capabilities.d.ts.map +1 -0
  1212. package/dist/services/mail/imap/capabilities.js +70 -0
  1213. package/dist/services/mail/imap/capabilities.js.map +1 -0
  1214. package/dist/services/mail/imap/client.d.ts +15 -0
  1215. package/dist/services/mail/imap/client.d.ts.map +1 -0
  1216. package/dist/services/mail/imap/client.js +60 -0
  1217. package/dist/services/mail/imap/client.js.map +1 -0
  1218. package/dist/services/mail/imap/cursor.d.ts +19 -0
  1219. package/dist/services/mail/imap/cursor.d.ts.map +1 -0
  1220. package/dist/services/mail/imap/cursor.js +47 -0
  1221. package/dist/services/mail/imap/cursor.js.map +1 -0
  1222. package/dist/services/mail/imap/folder-resolver.d.ts +24 -0
  1223. package/dist/services/mail/imap/folder-resolver.d.ts.map +1 -0
  1224. package/dist/services/mail/imap/folder-resolver.js +58 -0
  1225. package/dist/services/mail/imap/folder-resolver.js.map +1 -0
  1226. package/dist/services/mail/imap/icloud-provider.d.ts +5 -0
  1227. package/dist/services/mail/imap/icloud-provider.d.ts.map +1 -0
  1228. package/dist/services/mail/imap/icloud-provider.js +5 -0
  1229. package/dist/services/mail/imap/icloud-provider.js.map +1 -0
  1230. package/dist/services/mail/imap/imap-provider-base.d.ts +173 -0
  1231. package/dist/services/mail/imap/imap-provider-base.d.ts.map +1 -0
  1232. package/dist/services/mail/imap/imap-provider-base.js +1004 -0
  1233. package/dist/services/mail/imap/imap-provider-base.js.map +1 -0
  1234. package/dist/services/mail/imap/query-translator.d.ts +13 -0
  1235. package/dist/services/mail/imap/query-translator.d.ts.map +1 -0
  1236. package/dist/services/mail/imap/query-translator.js +114 -0
  1237. package/dist/services/mail/imap/query-translator.js.map +1 -0
  1238. package/dist/services/mail/imap/reconcile-planner.d.ts +56 -0
  1239. package/dist/services/mail/imap/reconcile-planner.d.ts.map +1 -0
  1240. package/dist/services/mail/imap/reconcile-planner.js +52 -0
  1241. package/dist/services/mail/imap/reconcile-planner.js.map +1 -0
  1242. package/dist/services/mail/imap/reply-mime.d.ts +24 -0
  1243. package/dist/services/mail/imap/reply-mime.d.ts.map +1 -0
  1244. package/dist/services/mail/imap/reply-mime.js +77 -0
  1245. package/dist/services/mail/imap/reply-mime.js.map +1 -0
  1246. package/dist/services/mail/imap/yahoo-provider.d.ts +5 -0
  1247. package/dist/services/mail/imap/yahoo-provider.d.ts.map +1 -0
  1248. package/dist/services/mail/imap/yahoo-provider.js +5 -0
  1249. package/dist/services/mail/imap/yahoo-provider.js.map +1 -0
  1250. package/dist/services/mail/mail-search.d.ts +35 -0
  1251. package/dist/services/mail/mail-search.d.ts.map +1 -0
  1252. package/dist/services/mail/mail-search.js +59 -0
  1253. package/dist/services/mail/mail-search.js.map +1 -0
  1254. package/dist/services/mail/outlook/auth-failure-classifier.d.ts +38 -0
  1255. package/dist/services/mail/outlook/auth-failure-classifier.d.ts.map +1 -0
  1256. package/dist/services/mail/outlook/auth-failure-classifier.js +91 -0
  1257. package/dist/services/mail/outlook/auth-failure-classifier.js.map +1 -0
  1258. package/dist/services/mail/outlook/client-config.d.ts +34 -0
  1259. package/dist/services/mail/outlook/client-config.d.ts.map +1 -0
  1260. package/dist/services/mail/outlook/client-config.js +58 -0
  1261. package/dist/services/mail/outlook/client-config.js.map +1 -0
  1262. package/dist/services/mail/outlook/delta-cursor.d.ts +66 -0
  1263. package/dist/services/mail/outlook/delta-cursor.d.ts.map +1 -0
  1264. package/dist/services/mail/outlook/delta-cursor.js +85 -0
  1265. package/dist/services/mail/outlook/delta-cursor.js.map +1 -0
  1266. package/dist/services/mail/outlook/graph-client.d.ts +98 -0
  1267. package/dist/services/mail/outlook/graph-client.d.ts.map +1 -0
  1268. package/dist/services/mail/outlook/graph-client.js +198 -0
  1269. package/dist/services/mail/outlook/graph-client.js.map +1 -0
  1270. package/dist/services/mail/outlook/msal-app-factory.d.ts +20 -0
  1271. package/dist/services/mail/outlook/msal-app-factory.d.ts.map +1 -0
  1272. package/dist/services/mail/outlook/msal-app-factory.js +62 -0
  1273. package/dist/services/mail/outlook/msal-app-factory.js.map +1 -0
  1274. package/dist/services/mail/outlook/msal-cache-plugin.d.ts +19 -0
  1275. package/dist/services/mail/outlook/msal-cache-plugin.d.ts.map +1 -0
  1276. package/dist/services/mail/outlook/msal-cache-plugin.js +30 -0
  1277. package/dist/services/mail/outlook/msal-cache-plugin.js.map +1 -0
  1278. package/dist/services/mail/outlook/oauth-device-code.d.ts +26 -0
  1279. package/dist/services/mail/outlook/oauth-device-code.d.ts.map +1 -0
  1280. package/dist/services/mail/outlook/oauth-device-code.js +32 -0
  1281. package/dist/services/mail/outlook/oauth-device-code.js.map +1 -0
  1282. package/dist/services/mail/outlook/oauth-loopback.d.ts +41 -0
  1283. package/dist/services/mail/outlook/oauth-loopback.d.ts.map +1 -0
  1284. package/dist/services/mail/outlook/oauth-loopback.js +223 -0
  1285. package/dist/services/mail/outlook/oauth-loopback.js.map +1 -0
  1286. package/dist/services/mail/outlook/outlook-provider.d.ts +100 -0
  1287. package/dist/services/mail/outlook/outlook-provider.d.ts.map +1 -0
  1288. package/dist/services/mail/outlook/outlook-provider.js +619 -0
  1289. package/dist/services/mail/outlook/outlook-provider.js.map +1 -0
  1290. package/dist/services/mail/outlook/query-translator.d.ts +10 -0
  1291. package/dist/services/mail/outlook/query-translator.d.ts.map +1 -0
  1292. package/dist/services/mail/outlook/query-translator.js +103 -0
  1293. package/dist/services/mail/outlook/query-translator.js.map +1 -0
  1294. package/dist/services/mail/provider.d.ts +267 -0
  1295. package/dist/services/mail/provider.d.ts.map +1 -0
  1296. package/dist/services/mail/provider.js +34 -0
  1297. package/dist/services/mail/provider.js.map +1 -0
  1298. package/dist/services/mail/query-utils.d.ts +13 -0
  1299. package/dist/services/mail/query-utils.d.ts.map +1 -0
  1300. package/dist/services/mail/query-utils.js +18 -0
  1301. package/dist/services/mail/query-utils.js.map +1 -0
  1302. package/dist/services/mail-classifier.d.ts +25 -0
  1303. package/dist/services/mail-classifier.d.ts.map +1 -0
  1304. package/dist/services/mail-classifier.js +52 -0
  1305. package/dist/services/mail-classifier.js.map +1 -0
  1306. package/dist/services/mail-ingestion.d.ts +139 -0
  1307. package/dist/services/mail-ingestion.d.ts.map +1 -0
  1308. package/dist/services/mail-ingestion.js +223 -0
  1309. package/dist/services/mail-ingestion.js.map +1 -0
  1310. package/dist/services/mcp/auto-probe.d.ts +76 -0
  1311. package/dist/services/mcp/auto-probe.d.ts.map +1 -0
  1312. package/dist/services/mcp/auto-probe.js +147 -0
  1313. package/dist/services/mcp/auto-probe.js.map +1 -0
  1314. package/dist/services/mcp/generators/claude.d.ts +18 -0
  1315. package/dist/services/mcp/generators/claude.d.ts.map +1 -0
  1316. package/dist/services/mcp/generators/claude.js +90 -0
  1317. package/dist/services/mcp/generators/claude.js.map +1 -0
  1318. package/dist/services/mcp/generators/codex.d.ts +22 -0
  1319. package/dist/services/mcp/generators/codex.d.ts.map +1 -0
  1320. package/dist/services/mcp/generators/codex.js +102 -0
  1321. package/dist/services/mcp/generators/codex.js.map +1 -0
  1322. package/dist/services/mcp/generators/gemini.d.ts +20 -0
  1323. package/dist/services/mcp/generators/gemini.d.ts.map +1 -0
  1324. package/dist/services/mcp/generators/gemini.js +97 -0
  1325. package/dist/services/mcp/generators/gemini.js.map +1 -0
  1326. package/dist/services/mcp/generators/index.d.ts +20 -0
  1327. package/dist/services/mcp/generators/index.d.ts.map +1 -0
  1328. package/dist/services/mcp/generators/index.js +29 -0
  1329. package/dist/services/mcp/generators/index.js.map +1 -0
  1330. package/dist/services/mcp/generators/types.d.ts +47 -0
  1331. package/dist/services/mcp/generators/types.d.ts.map +1 -0
  1332. package/dist/services/mcp/generators/types.js +40 -0
  1333. package/dist/services/mcp/generators/types.js.map +1 -0
  1334. package/dist/services/mcp/probe.d.ts +31 -0
  1335. package/dist/services/mcp/probe.d.ts.map +1 -0
  1336. package/dist/services/mcp/probe.js +437 -0
  1337. package/dist/services/mcp/probe.js.map +1 -0
  1338. package/dist/services/mcp/registry.d.ts +84 -0
  1339. package/dist/services/mcp/registry.d.ts.map +1 -0
  1340. package/dist/services/mcp/registry.js +387 -0
  1341. package/dist/services/mcp/registry.js.map +1 -0
  1342. package/dist/services/mcp/risk.d.ts +82 -0
  1343. package/dist/services/mcp/risk.d.ts.map +1 -0
  1344. package/dist/services/mcp/risk.js +126 -0
  1345. package/dist/services/mcp/risk.js.map +1 -0
  1346. package/dist/services/mcp/session-materializer.d.ts +123 -0
  1347. package/dist/services/mcp/session-materializer.d.ts.map +1 -0
  1348. package/dist/services/mcp/session-materializer.js +361 -0
  1349. package/dist/services/mcp/session-materializer.js.map +1 -0
  1350. package/dist/services/mcp/tool-audit.d.ts +53 -0
  1351. package/dist/services/mcp/tool-audit.d.ts.map +1 -0
  1352. package/dist/services/mcp/tool-audit.js +74 -0
  1353. package/dist/services/mcp/tool-audit.js.map +1 -0
  1354. package/dist/services/mcp/types.d.ts +88 -0
  1355. package/dist/services/mcp/types.d.ts.map +1 -0
  1356. package/dist/services/mcp/types.js +94 -0
  1357. package/dist/services/mcp/types.js.map +1 -0
  1358. package/dist/services/notion.d.ts +134 -0
  1359. package/dist/services/notion.d.ts.map +1 -0
  1360. package/dist/services/notion.js +350 -0
  1361. package/dist/services/notion.js.map +1 -0
  1362. package/dist/services/obsidian.d.ts +116 -0
  1363. package/dist/services/obsidian.d.ts.map +1 -0
  1364. package/dist/services/obsidian.js +305 -0
  1365. package/dist/services/obsidian.js.map +1 -0
  1366. package/dist/services/service-registry.d.ts +31 -0
  1367. package/dist/services/service-registry.d.ts.map +1 -0
  1368. package/dist/services/service-registry.js +15 -0
  1369. package/dist/services/service-registry.js.map +1 -0
  1370. package/dist/services/voice/transcriber-impl.d.ts +15 -0
  1371. package/dist/services/voice/transcriber-impl.d.ts.map +1 -0
  1372. package/dist/services/voice/transcriber-impl.js +129 -0
  1373. package/dist/services/voice/transcriber-impl.js.map +1 -0
  1374. package/dist/services/voice/transcriber.d.ts +117 -0
  1375. package/dist/services/voice/transcriber.d.ts.map +1 -0
  1376. package/dist/services/voice/transcriber.js +201 -0
  1377. package/dist/services/voice/transcriber.js.map +1 -0
  1378. package/dist/settings/runtime-settings.d.ts +232 -0
  1379. package/dist/settings/runtime-settings.d.ts.map +1 -0
  1380. package/dist/settings/runtime-settings.js +769 -0
  1381. package/dist/settings/runtime-settings.js.map +1 -0
  1382. package/dist/settings/settings-store.d.ts +13 -0
  1383. package/dist/settings/settings-store.d.ts.map +1 -0
  1384. package/dist/settings/settings-store.js +87 -0
  1385. package/dist/settings/settings-store.js.map +1 -0
  1386. package/package.json +85 -0
@@ -0,0 +1,1148 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { existsSync, readdirSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { AGENT_ROLE_DESCRIPTOR, APP_NAME, formatAgentOutboundLabel, formatSqliteDatetime, isRoutineEvent, isMessageEvent, isScheduledDmEvent, isScheduledEvent, localDateStr, normalizeAgentDisplayName, nowInTimezone, getAgentDayBoundsUtc, getAgentDayDateStr, parseSqliteUtcMs, } from "@aitne/shared";
5
+ import { getContextDir } from "../config.js";
6
+ import { getDegradedMode } from "../db/runtime-state.js";
7
+ import { readIntegrations } from "../db/integrations-store.js";
8
+ import { CONTEXT_RELATIVE_PATHS } from "./context-paths.js";
9
+ import { OWNER_DM_SCOPE, OWNER_SCOPE_KEY, DASHBOARD_CHAT_SCOPE, DASHBOARD_SCOPE_KEY, getConversationScope, } from "../messaging/constants.js";
10
+ import { getProactiveForwardType, isProactiveForwardMetadata, metadataDispatchIds, parseMessageMetadata, } from "./channel-timeline.js";
11
+ import { createLogger } from "../logging.js";
12
+ import { truncateRoadmap } from "./roadmap-truncate.js";
13
+ import { isIntegrationDelegated } from "./integration-lifecycle.js";
14
+ const logger = createLogger("context-builder");
15
+ const YESTERDAY_AGENT_ACTION_LIMIT = 40;
16
+ const YESTERDAY_MESSAGE_LIMIT = 60;
17
+ const YESTERDAY_DM_LOG_LIMIT = 20;
18
+ export class ContextBuilder {
19
+ config;
20
+ db;
21
+ services;
22
+ constructor(config, db, services) {
23
+ this.config = config;
24
+ this.db = db;
25
+ this.services = services;
26
+ }
27
+ /**
28
+ * Resolve the readable primary-vault location for prompt construction.
29
+ *
30
+ * During degraded mode we intentionally return `null` instead of the
31
+ * fallback `<dataDir>/context`: reactive sessions may still run so the
32
+ * user can fix the vault, but they must not see stale context data from
33
+ * a legacy location.
34
+ */
35
+ get readableContextDir() {
36
+ if (getDegradedMode(this.db)) {
37
+ return null;
38
+ }
39
+ return getContextDir(this.config);
40
+ }
41
+ async build(event) {
42
+ const sections = [];
43
+ const degradedState = getDegradedMode(this.db);
44
+ if (degradedState) {
45
+ sections.push([
46
+ "<management_mode_degraded>",
47
+ `- reason: ${degradedState.reason}`,
48
+ `- path: ${degradedState.path ?? "(unset)"}`,
49
+ `- since: ${degradedState.since}`,
50
+ "Primary vault reads are disabled while Management Mode is degraded.",
51
+ "Context files were intentionally not loaded to avoid serving stale fallback data.",
52
+ "</management_mode_degraded>",
53
+ ].join("\n"));
54
+ }
55
+ // Always injected (all sessions) — B-007 §5.1 canonical paths.
56
+ const [userMd, rulesMd, todayMd] = await Promise.all([
57
+ this.readFile(CONTEXT_RELATIVE_PATHS.user.profile),
58
+ this.readFile(CONTEXT_RELATIVE_PATHS.rules.management),
59
+ this.readFile(CONTEXT_RELATIVE_PATHS.today),
60
+ ]);
61
+ // Capture the read time as the authoritative "as of when did this
62
+ // conversation see today.md" anchor. Read-time (not mtime) is what the
63
+ // freshness contract needs: mtime advances every quiet append from
64
+ // background routines, but the value that matters here is when THIS
65
+ // session's snapshot was taken. See STAGE-C-DM-FRESHNESS-PLAN §Task 1.
66
+ const todayReadAt = todayMd ? new Date().toISOString() : null;
67
+ if (userMd)
68
+ sections.push(`<user>\n${userMd}\n</user>`);
69
+ if (rulesMd)
70
+ sections.push(`<management_rules>\n${rulesMd}\n</management_rules>`);
71
+ if (todayMd) {
72
+ // Truncate ## Agent Log to last N entries for non-evening sessions.
73
+ // Evening review needs the full log to assess the day.
74
+ const skipTruncation = isRoutineEvent(event) && event.routine === "evening_review";
75
+ const injected = skipTruncation
76
+ ? todayMd
77
+ : truncateAgentLog(todayMd, 10);
78
+ sections.push(`<today snapshot_at="${todayReadAt}">\n${injected}\n</today>`);
79
+ }
80
+ const agentDisplayName = normalizeAgentDisplayName(typeof event.data.agentDisplayName === "string"
81
+ ? event.data.agentDisplayName
82
+ : this.config.agentDisplayName);
83
+ // Three-axis identity (see packages/shared/src/branding.ts):
84
+ // product = the software running this session (rebrand target)
85
+ // role = LLM role anchor (kept stable across rebrands)
86
+ // display_name = how the agent signs messages to the operator
87
+ // Naming each axis explicitly prevents the LLM from conflating brand
88
+ // with role when the operator renames their instance.
89
+ sections.push([
90
+ "<agent_identity>",
91
+ `- product: ${APP_NAME}`,
92
+ `- role: ${AGENT_ROLE_DESCRIPTOR} (acting on behalf of the operator)`,
93
+ `- display_name: ${agentDisplayName}`,
94
+ `- whatsapp_label: ${formatAgentOutboundLabel(agentDisplayName)}`,
95
+ "</agent_identity>",
96
+ ].join("\n"));
97
+ const now = new Date();
98
+ const tz = this.config.timezone || undefined;
99
+ const local = nowInTimezone(tz, now);
100
+ const localTimeStr = `${local.year}-${String(local.month).padStart(2, "0")}-${String(local.day).padStart(2, "0")} ${String(local.hours).padStart(2, "0")}:${String(local.minutes).padStart(2, "0")}`;
101
+ const tzLabel = this.config.timezone || "system";
102
+ sections.push(`<current_time utc="${now.toISOString()}" local="${localTimeStr}" timezone="${tzLabel}" />`);
103
+ // Agent-day date — explicit, unambiguous date for today.md line 1 and
104
+ // every "today" reference in skills. The agent-day starts at
105
+ // `dayBoundaryHour` (default 04:00) in `tzLabel`, so before that boundary
106
+ // the agent-day date is the previous calendar date. Example: at 02:00
107
+ // local on 2026-04-28 with boundary_hour=4, agent_day_date is "2026-04-27".
108
+ // Skills MUST use this attribute (not <current_time>) for any date stamp
109
+ // written to today.md or roadmap.md so the daemon's
110
+ // hasCurrentAgentDayTodayMd / rotateDayFiles checks line up with what
111
+ // the agent writes.
112
+ const dayBoundaryHour = this.config.dayBoundaryHour ?? 4;
113
+ const agentDayDateStr = getAgentDayDateStr(tz, dayBoundaryHour, now);
114
+ const agentDayWeekday = new Date(`${agentDayDateStr}T12:00:00Z`).toLocaleDateString("en-US", {
115
+ weekday: "long",
116
+ timeZone: "UTC",
117
+ });
118
+ sections.push(`<current_agent_day date="${agentDayDateStr}" weekday="${agentDayWeekday}" boundary_hour="${dayBoundaryHour}" />`);
119
+ sections.push(`<event_correlation_id>${event.correlationId}</event_correlation_id>`);
120
+ if (typeof event.data?.todayWriteLockId === "string") {
121
+ sections.push(`<today_write_lock_id>${event.data.todayWriteLockId}</today_write_lock_id>`);
122
+ }
123
+ if (typeof event.data?.roadmapWriteLockId === "string") {
124
+ sections.push(`<roadmap_write_lock_id>${event.data.roadmapWriteLockId}</roadmap_write_lock_id>`);
125
+ }
126
+ // cost-reduction-structural §B — Stage 3 / Stage 2-triage events
127
+ // arrive with a pre-rendered `<gate_decision>` block from the
128
+ // dispatcher. Inject verbatim so the routine can branch on the
129
+ // gate's reason without re-deriving signals.
130
+ if (event.data?.gateDecision &&
131
+ typeof event.data.gateDecision === "object" &&
132
+ typeof event.data.gateDecision.block === "string") {
133
+ sections.push(event.data.gateDecision.block);
134
+ }
135
+ // The <obsidian_vault_path> prompt fragment always points at the EXTERNAL
136
+ // Obsidian vault (CLI skill target), never the agent's primary vault.
137
+ // Kept verbatim for skill compatibility even after the field rename.
138
+ if (this.config.externalObsidianVaultPath) {
139
+ sections.push(`<obsidian_vault_path>${this.config.externalObsidianVaultPath}</obsidian_vault_path>`);
140
+ }
141
+ // B-007 §3 P6 / §5.9 — expose the two setup-wizard answers to every
142
+ // task-flow so prompts can branch on them without re-reading the DB.
143
+ // `primary_language` governs user-editable prose language; `vault_mode`
144
+ // toggles `[[wikilink]]` emission in synthesized content like daily/*.md.
145
+ const primaryLanguage = this.config.primaryLanguage ?? "en";
146
+ const vaultMode = this.config.vaultMode ?? "plain";
147
+ sections.push(`<settings primary_language="${primaryLanguage}" vault_mode="${vaultMode}" />`);
148
+ // Integration modes — expose the current `direct | delegated | disabled`
149
+ // state of every registered integration so task-flows can branch without
150
+ // re-reading the DB or relying on "is this MCP tool in my allowed-tools
151
+ // list" self-introspection, which is unreliable across backends. For
152
+ // delegated keys, also emit `<key>_delegated_to="<backend>"` so the
153
+ // hourly_check delegated variants can pick the cross-backend proxy path
154
+ // vs the same-backend native MCP path per integration without reading
155
+ // `~/.personal-agent/integrations.md` themselves
156
+ // (DELEGATED-MODE-V2-DESIGN.md §5.4).
157
+ const integrationsSnapshot = readIntegrations(this.db);
158
+ const integrationAttrs = Object.entries(integrationsSnapshot)
159
+ .flatMap(([key, state]) => {
160
+ const attrs = [`${key}="${state.mode}"`];
161
+ if (state.mode === "delegated" && state.delegatedBackend) {
162
+ attrs.push(`${key}_delegated_to="${state.delegatedBackend}"`);
163
+ }
164
+ return attrs;
165
+ })
166
+ .join(" ");
167
+ sections.push(`<integration_modes ${integrationAttrs} />`);
168
+ // Routine events: additional context
169
+ if (isRoutineEvent(event)) {
170
+ // Silent-by-default protocol: applies uniformly to every routine
171
+ // event (morning / evening / hourly / weekly / monthly / roadmap /
172
+ // any future routine). The daemon does NOT forward the agent's
173
+ // final text as a user notification for routines; POST /api/notify
174
+ // is the only user-visible channel. Each routine prompt owns its
175
+ // own go/no-go decision for whether to make that call. Injected
176
+ // here instead of duplicated per-prompt so new routines inherit
177
+ // the rule automatically.
178
+ sections.push([
179
+ "<routine_protocol>",
180
+ "This is an autonomous background run. Your final text response",
181
+ "is an internal agent log — the daemon does not forward it to",
182
+ "the user. POST /api/notify is the only user-visible channel for",
183
+ "routine events, so if you don't call it, the user sees nothing.",
184
+ "Each routine prompt owns the go/no-go decision for whether to",
185
+ "call /api/notify.",
186
+ "</routine_protocol>",
187
+ ].join("\n"));
188
+ if (event.routine === "morning_routine") {
189
+ // yesterday.md is created by Dispatcher.rotateDayFiles() before this runs.
190
+ // It contains the previous day's today.md (with ## Handoff section).
191
+ const [yesterdayMd, roadmapMd, activeProjects, yesterdaySqlite] = await Promise.all([
192
+ this.readFile("yesterday.md"),
193
+ this.readFile("roadmap.md"),
194
+ this.buildActiveProjectsSection(),
195
+ this.buildYesterdaySqliteContext(),
196
+ ]);
197
+ if (yesterdayMd)
198
+ sections.push(`<yesterday>\n${yesterdayMd}\n</yesterday>`);
199
+ sections.push(`<yesterday_agent_actions>\n${yesterdaySqlite.agentActions}\n</yesterday_agent_actions>`);
200
+ sections.push(`<yesterday_messages>\n${yesterdaySqlite.messages}\n</yesterday_messages>`);
201
+ sections.push(`<yesterday_dm_conversation_log>\n${yesterdaySqlite.dmConversationLog}\n</yesterday_dm_conversation_log>`);
202
+ if (roadmapMd)
203
+ sections.push(`<roadmap>\n${truncateRoadmap(roadmapMd, { timezone: this.config.timezone || undefined })}\n</roadmap>`);
204
+ if (activeProjects)
205
+ sections.push(`<active_projects>\n${activeProjects}\n</active_projects>`);
206
+ // Fetch 7-day calendar events for today.md / roadmap.md updates.
207
+ // Delegated mode emits an MCP-fetch directive inside the same block.
208
+ sections.push(await this.buildCalendarBlock(7, "calendar_events_7d"));
209
+ }
210
+ else if (event.routine === "roadmap_refresh") {
211
+ const [roadmapMd, activeProjects] = await Promise.all([
212
+ this.readFile("roadmap.md"),
213
+ this.buildActiveProjectsSection(),
214
+ ]);
215
+ // Roadmap refresh must see the full file — the session
216
+ // regenerates `## Agent Action Plan` wholesale, so any entry the
217
+ // truncator dropped would be erased on PUT. Do NOT truncate here.
218
+ if (roadmapMd)
219
+ sections.push(`<roadmap>\n${roadmapMd}\n</roadmap>`);
220
+ if (activeProjects)
221
+ sections.push(`<active_projects>\n${activeProjects}\n</active_projects>`);
222
+ // 7-day DM rolling-summary window. RFC-B Phase 1 wants the
223
+ // refresh to incorporate long-horizon intent captured in recent
224
+ // DMs; the rolling summaries in dm_conversation_log are the
225
+ // cheapest source (already AI-condensed by the dispatcher).
226
+ const dmLog7d = this.buildRecentDmConversationLog(7);
227
+ sections.push(`<recent_dm_conversation_log days="7">\n${dmLog7d}\n</recent_dm_conversation_log>`);
228
+ // Signal calendar availability — agent fetches 90-day events itself.
229
+ // The delegated variant of this task flow bypasses `<calendar_status>`
230
+ // and goes straight to the backend connector's list_events / search
231
+ // tool; the delegated branch below keeps the hint informational so
232
+ // the prompt stays legible when the variant isn't loaded for some
233
+ // reason (e.g. hot-switch in progress).
234
+ if (isIntegrationDelegated(this.db, "google_calendar")) {
235
+ sections.push(`<calendar_status>Google Calendar is delegated. Use the backend connector's list_events / search tool for the 90-day window — direct /api/calendar/* returns 410.</calendar_status>`);
236
+ }
237
+ else if (this.services.calendar?.available) {
238
+ sections.push(`<calendar_status>Calendar service available. Use GET /api/calendar/events?date=today&days=90 to fetch events.</calendar_status>`);
239
+ }
240
+ else {
241
+ sections.push(`<calendar_status>Calendar service not available. Skip calendar-based sections — preserve existing roadmap content.</calendar_status>`);
242
+ }
243
+ }
244
+ else if (event.routine === "evening_review") {
245
+ const [roadmapMd, activeProjects] = await Promise.all([
246
+ this.readFile("roadmap.md"),
247
+ this.buildActiveProjectsSection(),
248
+ ]);
249
+ if (roadmapMd)
250
+ sections.push(`<roadmap>\n${truncateRoadmap(roadmapMd, { timezone: this.config.timezone || undefined })}\n</roadmap>`);
251
+ if (activeProjects)
252
+ sections.push(`<active_projects>\n${activeProjects}\n</active_projects>`);
253
+ // 3-day calendar look-ahead for evening review. Delegated mode emits
254
+ // an MCP-fetch directive inside the same block so the flow works
255
+ // without a routine-specific delegated variant.
256
+ sections.push(await this.buildCalendarBlock(3, "calendar_events_3d"));
257
+ }
258
+ else if (event.routine === "user_profile_sweep") {
259
+ // Both phases read the same current-agent-day bounds at session
260
+ // start — the phase flag is preserved for journaling only and
261
+ // does not branch the window. The guard below exists purely as
262
+ // a misconfig fuse: if the event arrives without a valid phase
263
+ // (e.g. a manual trigger that didn't thread `data.phase`), skip
264
+ // the injection so the task-flow's Step 1 abort path (USER-PROFILE-
265
+ // CAPTURE-PLAN.md §2.3 Step 1 / §2.4) fires as documented rather
266
+ // than silently running the sweep with an unlabeled log line.
267
+ const phase = event.data?.phase;
268
+ if (phase === "morning" || phase === "evening") {
269
+ const agentDayDm = this.buildAgentDayDmContext();
270
+ sections.push(`<agent_day_messages>\n${agentDayDm.messages}\n</agent_day_messages>`);
271
+ sections.push(`<agent_day_dm_conversation_log>\n${agentDayDm.dmConversationLog}\n</agent_day_dm_conversation_log>`);
272
+ }
273
+ else {
274
+ logger.warn({ phase, correlationId: event.correlationId }, "user_profile_sweep event missing valid phase — skipping window injection");
275
+ }
276
+ }
277
+ else if (event.routine === "today_refresh") {
278
+ // Dashboard-triggered manual refresh of today.md's User Schedule
279
+ // section. The task flow fetches calendar events itself (so the
280
+ // flow body works uniformly across direct and delegated modes);
281
+ // this status hint is informational and mainly helps the direct
282
+ // path distinguish configured-but-unavailable from delegated.
283
+ if (isIntegrationDelegated(this.db, "google_calendar")) {
284
+ sections.push(`<calendar_status>Google Calendar is delegated. Fetch today's events via the backend connector's list_events / search tool — direct /api/calendar/* returns 410.</calendar_status>`);
285
+ }
286
+ else if (this.services.calendar?.available) {
287
+ sections.push(`<calendar_status>Calendar service available. Use GET /api/calendar/events?date=today&days=1 to fetch today's events.</calendar_status>`);
288
+ }
289
+ else {
290
+ sections.push(`<calendar_status>Calendar service not available. If direct /api/calendar returns 503 or 410, log and skip the User Schedule rewrite.</calendar_status>`);
291
+ }
292
+ }
293
+ else if (event.routine === "weekly_review" ||
294
+ event.routine === "monthly_review") {
295
+ const [roadmapMd, activeProjects] = await Promise.all([
296
+ this.readFile("roadmap.md"),
297
+ this.buildActiveProjectsSection(),
298
+ ]);
299
+ if (roadmapMd)
300
+ sections.push(`<roadmap>\n${truncateRoadmap(roadmapMd, { timezone: this.config.timezone || undefined })}\n</roadmap>`);
301
+ if (activeProjects) {
302
+ sections.push(`<active_projects>\n${activeProjects}\n</active_projects>`);
303
+ }
304
+ const lookaheadDays = event.routine === "monthly_review" ? 30 : 7;
305
+ sections.push(await this.buildCalendarBlock(lookaheadDays, `calendar_events_${lookaheadDays}d`));
306
+ }
307
+ }
308
+ // Agent task / DM-tone events: inject live calendar + origin
309
+ // metadata for informed execution. Both scheduled.task and
310
+ // scheduled.dm need this — without it, scheduled sessions would
311
+ // execute "blind" knowing only today.md (which may be stale) and
312
+ // the task description (which may be terse).
313
+ if (isScheduledEvent(event)) {
314
+ // 1-day live calendar — critical for temporal awareness (meetings,
315
+ // conflicts). Delegated mode emits an MCP-fetch directive inside the
316
+ // same block.
317
+ sections.push(await this.buildCalendarBlock(1, "calendar_today"));
318
+ // Task origin metadata — tells the agent WHO scheduled this
319
+ sections.push(`<task_origin source="${event.source}" schedule_id="${event.scheduleId ?? "none"}" />`);
320
+ sections.push(`<task_context>\n${JSON.stringify(event.taskContext ?? {}, null, 2)}\n</task_context>`);
321
+ // Dashboard regeneration tasks additionally get roadmap + projects
322
+ // (Calendar data is already embedded in the task description by the API endpoint)
323
+ if (event.source === "dashboard_regenerate") {
324
+ const [roadmapMd, activeProjects] = await Promise.all([
325
+ this.readFile("roadmap.md"),
326
+ this.buildActiveProjectsSection(),
327
+ ]);
328
+ if (roadmapMd)
329
+ sections.push(`<roadmap>\n${roadmapMd}\n</roadmap>`);
330
+ if (activeProjects)
331
+ sections.push(`<active_projects>\n${activeProjects}\n</active_projects>`);
332
+ }
333
+ // SCHEDULED-DM-IMPLEMENTATION-PLAN §3.3 / §5.7 — DM-tone
334
+ // sessions additionally see the user's recent DM activity and
335
+ // the rolling owner-DM history so the LLM can detect the
336
+ // conversation state (asleep vs. active vs. very-recent) and
337
+ // pick Variant A (greeting) vs. Variant B (mid-conversation
338
+ // weave) per the scheduled.dm.md task-flow.
339
+ if (isScheduledDmEvent(event)) {
340
+ const recentDms = this.buildRecentDmActivityBlock(60);
341
+ if (recentDms) {
342
+ sections.push(`<recent_dm_messages window="60min">\n${recentDms}\n</recent_dm_messages>`);
343
+ }
344
+ const dmHistory = this.buildOwnerDmConversationHistory(20);
345
+ if (dmHistory) {
346
+ sections.push(`<recent_dm_conversation>\n${dmHistory}\n</recent_dm_conversation>`);
347
+ }
348
+ }
349
+ }
350
+ // Message events: include conversation history from the active session.
351
+ // Cross-session continuity (expired/closed sessions) is handled separately
352
+ // by the dispatcher's buildCrossSessionConversationHistory(), which injects
353
+ // history via the backend's conversationHistory parameter. Doing it here
354
+ // as well would duplicate the data under two different XML tags.
355
+ if (isMessageEvent(event)) {
356
+ const history = this.getConversationHistory(event);
357
+ if (history) {
358
+ sections.push(`<conversation_history>\n${history}\n</conversation_history>`);
359
+ }
360
+ const otherSurface = this.buildRecentOtherSurfaceBlock(event);
361
+ if (otherSurface) {
362
+ sections.push(`<recent_other_surface>\n${otherSurface}\n</recent_other_surface>`);
363
+ }
364
+ }
365
+ return sections.join("\n\n");
366
+ }
367
+ /**
368
+ * Compute the calendar lookahead window anchored at the user-timezone
369
+ * midnight boundary. Shared by direct-mode fetches and the delegated-mode
370
+ * MCP-fetch directive so both paths describe exactly the same range.
371
+ */
372
+ computeCalendarWindow(days) {
373
+ const tz = this.config.timezone || undefined;
374
+ const dayBounds = getAgentDayBoundsUtc(tz, 0);
375
+ const startMs = parseSqliteUtcMs(dayBounds.start);
376
+ return {
377
+ timeMin: new Date(startMs).toISOString(),
378
+ timeMax: new Date(startMs + days * 24 * 60 * 60 * 1000).toISOString(),
379
+ };
380
+ }
381
+ /**
382
+ * Build a `<calendar_events_…>` context block, honouring Google Calendar
383
+ * integration mode:
384
+ *
385
+ * - **direct + service available** → embed the formatted event list (prior
386
+ * behaviour).
387
+ * - **delegated** → the daemon has no local CalendarService to call. Emit
388
+ * a structured directive telling the task-flow agent to fetch the same
389
+ * window itself via its backend's Google Calendar MCP tool and treat the
390
+ * response as the contents of this block.
391
+ * - **direct but service broken / disabled** → emit the legacy
392
+ * `<calendar_status>` unavailable line so the flow degrades gracefully.
393
+ *
394
+ * All callers funnel through this method so the three surfaces
395
+ * (morning / evening / weekly+monthly and the agent-task path) stay in
396
+ * lock-step when delegated-mode handling changes.
397
+ */
398
+ async buildCalendarBlock(days, blockName) {
399
+ const integrations = readIntegrations(this.db);
400
+ const calendarMode = integrations.google_calendar?.mode ?? "disabled";
401
+ // Delegated mode wins over a live `services.calendar` — if the user
402
+ // set the integration to delegated, respect that even if Google
403
+ // credentials are still resident. Using the direct path here would
404
+ // silently violate the mode invariant and leave the MCP tool surface
405
+ // (exposed to the session) out of sync with the data surface.
406
+ if (calendarMode === "delegated") {
407
+ const { timeMin, timeMax } = this.computeCalendarWindow(days);
408
+ return [
409
+ `<${blockName} mode="delegated" timeMin="${timeMin}" timeMax="${timeMax}" days="${days}">`,
410
+ "Calendar is delegated — see `<integration_modes>`. Fetch this",
411
+ "window yourself, then treat the returned events as the contents",
412
+ "of this block for the rest of the task flow. Pick the path by",
413
+ "your session backend vs `<integration_modes>.google_calendar_delegated_to`:",
414
+ "",
415
+ " Same-backend (delegated_to == your session backend) — use your",
416
+ " native Google Calendar MCP tool:",
417
+ ` Claude: mcp__claude_ai_Google_Calendar__list_events(calendarId="primary", timeMin="${timeMin}", timeMax="${timeMax}", maxResults=50)`,
418
+ ` Codex: mcp__codex_apps__google_calendar._search(timeMin="${timeMin}", timeMax="${timeMax}")`,
419
+ ` Gemini: mcp_google-workspace_calendar.listEvents(timeMin="${timeMin}", timeMax="${timeMax}", maxResults=50)`,
420
+ "",
421
+ " Cross-backend (delegated_to != your session backend) — call the",
422
+ " daemon's task-mode endpoint with a natural-language `task` and",
423
+ " `outputSchema`, so the configured account is used (your own",
424
+ " backend's Google MCP would query the wrong account):",
425
+ " curl -s -X POST http://localhost:8321/api/integrations/google_calendar/exec \\",
426
+ " -H 'Content-Type: application/json' \\",
427
+ ` -d '{"task":"List every event on my primary calendar between ${timeMin} and ${timeMax}. Return id, title, start, end, attendees.","outputSchema":{"type":"object","required":["events"],"properties":{"events":{"type":"array","items":{"type":"object","required":["id","title","start","end"]}}}},"maxToolCalls":3,"cacheable":true}'`,
428
+ " Do NOT call `/api/calendar/events` (returns 410 in delegated mode).",
429
+ "",
430
+ "If the call errors out, log one line to ## Agent Log and proceed",
431
+ "as if the window were empty. Do NOT emit `(calendar unavailable)`",
432
+ "as a user-visible marker — that string is reserved for the case",
433
+ "where the tool itself is missing (mode misconfigured).",
434
+ `</${blockName}>`,
435
+ ].join("\n");
436
+ }
437
+ if (this.services.calendar) {
438
+ const section = await this.fetchCalendarEvents(days);
439
+ if (section !== null)
440
+ return `<${blockName}>\n${section}\n</${blockName}>`;
441
+ }
442
+ // Direct mode with no service (not configured / init failed) or disabled.
443
+ return `<calendar_status>Calendar service not available. Google Calendar is not configured or failed to initialize.</calendar_status>`;
444
+ }
445
+ /**
446
+ * Fetch calendar events for the next N days and format as markdown.
447
+ * Groups events by date with day-of-week and Today/Tomorrow labels.
448
+ * Returns null if CalendarService is not available.
449
+ */
450
+ async fetchCalendarEvents(days) {
451
+ if (!this.services.calendar)
452
+ return null;
453
+ try {
454
+ const { timeMin, timeMax } = this.computeCalendarWindow(days);
455
+ const events = await this.services.calendar.listEvents(timeMin, timeMax);
456
+ if (events.length === 0) {
457
+ return `Calendar connected (Google Calendar). No events found in the next ${days} days.`;
458
+ }
459
+ return this.formatCalendarEvents(events, days);
460
+ }
461
+ catch (err) {
462
+ logger.warn({ err }, "Failed to fetch calendar events for context");
463
+ return null;
464
+ }
465
+ }
466
+ /** Format calendar events grouped by date */
467
+ formatCalendarEvents(events, days) {
468
+ const now = new Date();
469
+ const tz = this.config.timezone || undefined;
470
+ const todayStr = localDateStr(now, tz);
471
+ const tomorrow = new Date(now);
472
+ tomorrow.setDate(tomorrow.getDate() + 1);
473
+ const tomorrowStr = localDateStr(tomorrow, tz);
474
+ const dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
475
+ // Group events by local date in the configured timezone.
476
+ const byDate = new Map();
477
+ for (const event of events) {
478
+ if (!event.start)
479
+ continue;
480
+ const dateStr = event.start.length === 10
481
+ ? event.start
482
+ : localDateStr(new Date(event.start), tz);
483
+ const group = byDate.get(dateStr) ?? [];
484
+ group.push(event);
485
+ byDate.set(dateStr, group);
486
+ }
487
+ const lines = [];
488
+ // Generate all dates in range
489
+ for (let i = 0; i < days; i++) {
490
+ const date = new Date(now);
491
+ date.setDate(date.getDate() + i);
492
+ const dateStr = localDateStr(date, tz);
493
+ const localInfo = nowInTimezone(tz, date);
494
+ const dayName = dayNames[localInfo.dayOfWeek];
495
+ let label = "";
496
+ if (dateStr === todayStr)
497
+ label = " — Today";
498
+ else if (dateStr === tomorrowStr)
499
+ label = " — Tomorrow";
500
+ lines.push(`## ${dateStr} (${dayName})${label}`);
501
+ const dayEvents = byDate.get(dateStr);
502
+ if (!dayEvents || dayEvents.length === 0) {
503
+ lines.push("- (no events)");
504
+ }
505
+ else {
506
+ for (const event of dayEvents) {
507
+ const timeRange = this.formatTimeRange(event);
508
+ const summary = event.summary ?? "Untitled";
509
+ const locationPart = event.location ? ` @ ${event.location}` : "";
510
+ lines.push(`- ${timeRange} ${summary}${locationPart}`);
511
+ }
512
+ }
513
+ lines.push("");
514
+ }
515
+ return lines.join("\n").trimEnd();
516
+ }
517
+ /** Format event time range as "HH:MM–HH:MM" or "All day" */
518
+ formatTimeRange(event) {
519
+ if (!event.start || !event.end)
520
+ return "All day";
521
+ // All-day events have date format (YYYY-MM-DD) without time component
522
+ if (event.start.length === 10)
523
+ return "All day";
524
+ const startDate = new Date(event.start);
525
+ const endDate = new Date(event.end);
526
+ const startTime = this.formatLocalTime(startDate);
527
+ const endTime = this.formatLocalTime(endDate);
528
+ return `${startTime}\u2013${endTime}`;
529
+ }
530
+ formatLocalTime(date) {
531
+ const local = nowInTimezone(this.config.timezone || undefined, date);
532
+ return `${String(local.hours).padStart(2, "0")}:${String(local.minutes).padStart(2, "0")}`;
533
+ }
534
+ /**
535
+ * SCHEDULED-DM-IMPLEMENTATION-PLAN §5.7 — return inbound owner-DM
536
+ * messages received in the last `windowMinutes` across BOTH
537
+ * owner-facing scopes (`owner_dm` for messaging-app DMs and
538
+ * `dashboard_chat` for the dashboard chat panel), formatted one per
539
+ * line oldest first. Returns null when there are no messages so the
540
+ * caller can omit the block entirely.
541
+ *
542
+ * The two-scope query mirrors §3.6's gate set: the briefing
543
+ * serializes behind both surfaces, so the LLM must see both
544
+ * surfaces when classifying conversation state. A single-scope read
545
+ * here would mis-classify state as `asleep` whenever the user is
546
+ * mid-conversation on the OTHER surface — exactly the
547
+ * voice-mismatch failure the design exists to fix.
548
+ *
549
+ * `docs_qa` is intentionally excluded — that surface is research
550
+ * lookups, not conversation; gating against it would freeze
551
+ * briefings during long doc-searches.
552
+ */
553
+ buildRecentDmActivityBlock(windowMinutes) {
554
+ const sinceUtc = formatSqliteDatetime(new Date(Date.now() - windowMinutes * 60_000));
555
+ const rows = this.db
556
+ .prepare(`SELECT m.role, m.content, m.timestamp
557
+ FROM messages m
558
+ JOIN conversation_sessions s ON m.session_id = s.id
559
+ WHERE s.scope IN (?, ?) AND m.role = 'user' AND m.timestamp >= ?
560
+ ORDER BY m.timestamp ASC
561
+ LIMIT 30`)
562
+ .all(OWNER_DM_SCOPE, DASHBOARD_CHAT_SCOPE, sinceUtc);
563
+ if (rows.length === 0)
564
+ return null;
565
+ return rows
566
+ .map((r) => `[${r.timestamp}] ${truncateForBlock(r.content, 200)}`)
567
+ .join("\n");
568
+ }
569
+ /**
570
+ * SCHEDULED-DM-IMPLEMENTATION-PLAN §5.7 — return the last `limit`
571
+ * owner-facing messages across BOTH `owner_dm` and `dashboard_chat`
572
+ * scopes (interleaved by timestamp), formatted with role tags. Used
573
+ * by `<recent_dm_conversation>` for topic awareness in the bridge
574
+ * phrasing of Variant B briefings.
575
+ *
576
+ * Two-scope read — same reasoning as `buildRecentDmActivityBlock`:
577
+ * the briefing must reconstruct topic context from whichever surface
578
+ * the user has been using, not just the messaging-app one.
579
+ */
580
+ buildOwnerDmConversationHistory(limit) {
581
+ const rows = this.db
582
+ .prepare(`SELECT m.role, m.content, m.timestamp, m.metadata
583
+ FROM messages m
584
+ JOIN conversation_sessions s ON m.session_id = s.id
585
+ WHERE (s.scope = ? AND s.scope_key = ?)
586
+ OR (s.scope = ? AND s.scope_key = ?)
587
+ ORDER BY m.timestamp DESC, m.id DESC
588
+ LIMIT ?`)
589
+ .all(OWNER_DM_SCOPE, OWNER_SCOPE_KEY, DASHBOARD_CHAT_SCOPE, DASHBOARD_SCOPE_KEY, limit);
590
+ if (rows.length === 0)
591
+ return null;
592
+ return rows
593
+ .reverse()
594
+ .map((r) => {
595
+ const forwardSuffix = r.role === "assistant"
596
+ && isProactiveForwardMetadata(parseMessageMetadata(r.metadata))
597
+ ? " (forwarded from autonomous run)"
598
+ : "";
599
+ return `[${r.timestamp}] [${r.role}]${forwardSuffix}: ${truncateForBlock(r.content, 400)}`;
600
+ })
601
+ .join("\n");
602
+ }
603
+ getConversationHistory(event) {
604
+ const maxMessages = this.config.historyInjectionMaxMessages ?? 50;
605
+ let rows;
606
+ if (event.isDm) {
607
+ const { scope, scopeKey } = getConversationScope({
608
+ platform: event.platform,
609
+ channel: event.channel,
610
+ threadId: event.threadId,
611
+ isDm: true,
612
+ // Without `intent`, a docs_qa event would query under
613
+ // `dashboard_chat` and inject chat history into the QA prompt
614
+ // (or miss its own QA history). Thread it through so each
615
+ // dashboard scope retrieves only its own conversation.
616
+ intent: event.intent,
617
+ });
618
+ // DM: load the active conversation for the matching DM surface.
619
+ rows = this.db
620
+ .prepare(`SELECT
621
+ m.session_id,
622
+ m.role,
623
+ m.content,
624
+ m.platform,
625
+ m.timestamp,
626
+ m.metadata,
627
+ m.backend,
628
+ m.model_id,
629
+ s.backend_session_id
630
+ FROM messages m
631
+ JOIN conversation_sessions s ON m.session_id = s.id
632
+ WHERE s.scope = ? AND s.scope_key = ? AND s.status = 'active'
633
+ ORDER BY m.timestamp DESC, m.id DESC LIMIT ?`)
634
+ .all(scope, scopeKey, maxMessages);
635
+ }
636
+ else {
637
+ // Non-DM: query by (platform, channel, thread).
638
+ // Hard-cap at 20 — threads are short-lived and higher limits risk
639
+ // injecting stale context from unrelated earlier threads.
640
+ const threadLimit = Math.min(maxMessages, 20);
641
+ rows = this.db
642
+ .prepare(`SELECT
643
+ m.session_id,
644
+ m.role,
645
+ m.content,
646
+ m.platform,
647
+ m.timestamp,
648
+ m.metadata,
649
+ m.backend,
650
+ m.model_id,
651
+ s.backend_session_id
652
+ FROM messages m
653
+ JOIN conversation_sessions s ON m.session_id = s.id
654
+ WHERE s.platform = ? AND s.channel_id = ? AND s.thread_id IS ?
655
+ ORDER BY m.timestamp DESC, m.id DESC LIMIT ?`)
656
+ .all(event.platform, event.channel, event.threadId ?? null, threadLimit);
657
+ }
658
+ if (rows.length === 0)
659
+ return null;
660
+ // Truncate by approximate token budget (1 token ≈ 4 chars).
661
+ const maxTokens = this.config.historyInjectionMaxTokens ?? 8000;
662
+ const reversed = rows.reverse();
663
+ const proactiveRows = [];
664
+ let tokenBudget = maxTokens * 4; // chars remaining
665
+ const lines = [];
666
+ for (const r of reversed) {
667
+ const metadata = parseMessageMetadata(r.metadata);
668
+ const isForward = isProactiveForwardMetadata(metadata);
669
+ const tag = r.backend
670
+ ? `[${r.timestamp}] [${r.role}/${r.backend}:${r.model_id ?? "?"}]`
671
+ : `[${r.timestamp}] [${r.role}]`;
672
+ const forwardSuffix = r.role === "assistant" && isForward
673
+ ? " (forwarded from autonomous run)"
674
+ : "";
675
+ const line = `${tag}${forwardSuffix}: ${r.content}`;
676
+ tokenBudget -= line.length;
677
+ if (tokenBudget < 0 && lines.length > 0) {
678
+ lines.unshift(`[...${reversed.length - lines.length} older messages omitted]`);
679
+ break;
680
+ }
681
+ if (isForward) {
682
+ proactiveRows.push({
683
+ sessionId: r.session_id,
684
+ dispatchIds: metadataDispatchIds(metadata),
685
+ sessionResumed: r.backend_session_id !== null,
686
+ });
687
+ }
688
+ lines.push(line);
689
+ }
690
+ if (proactiveRows.length > 0) {
691
+ this.logProactiveForwardInjected(proactiveRows);
692
+ }
693
+ return lines.join("\n");
694
+ }
695
+ buildRecentOtherSurfaceBlock(event) {
696
+ if (!event.isDm || event.intent === "docs_qa")
697
+ return null;
698
+ const windowMinutes = this.config.historyOtherSurfaceWindowMinutes ?? 1440;
699
+ if (!Number.isFinite(windowMinutes) || windowMinutes <= 0)
700
+ return null;
701
+ const { scope } = getConversationScope({
702
+ platform: event.platform,
703
+ channel: event.channel,
704
+ threadId: event.threadId,
705
+ isDm: true,
706
+ intent: event.intent,
707
+ });
708
+ const other = scope === OWNER_DM_SCOPE
709
+ ? { scope: DASHBOARD_CHAT_SCOPE, scopeKey: DASHBOARD_SCOPE_KEY }
710
+ : scope === DASHBOARD_CHAT_SCOPE
711
+ ? { scope: OWNER_DM_SCOPE, scopeKey: OWNER_SCOPE_KEY }
712
+ : null;
713
+ if (!other)
714
+ return null;
715
+ const sinceUtc = formatSqliteDatetime(new Date(Date.now() - windowMinutes * 60_000));
716
+ const rows = this.db
717
+ .prepare(`SELECT
718
+ m.role,
719
+ m.content,
720
+ m.platform,
721
+ m.timestamp,
722
+ m.metadata,
723
+ s.scope,
724
+ s.scope_key
725
+ FROM messages m
726
+ JOIN conversation_sessions s ON m.session_id = s.id
727
+ WHERE s.scope = ?
728
+ AND s.scope_key = ?
729
+ AND s.status = 'active'
730
+ AND m.timestamp >= ?
731
+ ORDER BY m.timestamp ASC, m.id ASC
732
+ LIMIT 60`)
733
+ .all(other.scope, other.scopeKey, sinceUtc);
734
+ if (rows.length === 0)
735
+ return null;
736
+ const lines = [];
737
+ const ordinaryGroups = new Map();
738
+ for (const row of rows) {
739
+ const metadata = parseMessageMetadata(row.metadata);
740
+ const forwardType = getProactiveForwardType(metadata);
741
+ if (forwardType) {
742
+ lines.push(`[${row.timestamp}] [${forwardType} → ${row.platform}]: ${row.content}`);
743
+ continue;
744
+ }
745
+ const key = `${row.scope}:${row.scope_key}`;
746
+ const timestampMs = parseSqliteUtcMs(row.timestamp);
747
+ const existing = ordinaryGroups.get(key);
748
+ if (existing) {
749
+ existing.count += 1;
750
+ existing.firstMs = Math.min(existing.firstMs, timestampMs);
751
+ existing.lastMs = Math.max(existing.lastMs, timestampMs);
752
+ }
753
+ else {
754
+ ordinaryGroups.set(key, {
755
+ scope: row.scope,
756
+ count: 1,
757
+ firstMs: timestampMs,
758
+ lastMs: timestampMs,
759
+ });
760
+ }
761
+ }
762
+ for (const group of ordinaryGroups.values()) {
763
+ const spanMinutes = Math.max(1, Math.ceil((group.lastMs - group.firstMs) / 60_000));
764
+ lines.push(`(${group.scope}: ${group.count} turns in last ${spanMinutes} minutes)`);
765
+ }
766
+ return lines.length > 0 ? lines.join("\n") : null;
767
+ }
768
+ logProactiveForwardInjected(rows) {
769
+ const sessionId = rows[rows.length - 1]?.sessionId;
770
+ if (sessionId === undefined)
771
+ return;
772
+ const dispatchIds = [
773
+ ...new Set(rows.flatMap((row) => row.dispatchIds)),
774
+ ];
775
+ try {
776
+ this.db
777
+ .prepare(`INSERT INTO agent_actions (
778
+ action_type, trigger, result, detail, started_at
779
+ )
780
+ VALUES (
781
+ 'proactive_forward_injected',
782
+ 'reactive',
783
+ 'success',
784
+ ?,
785
+ CURRENT_TIMESTAMP
786
+ )`)
787
+ .run(JSON.stringify({
788
+ sessionId,
789
+ dispatchIds,
790
+ forwardCount: rows.length,
791
+ sessionResumed: rows.some((row) => row.sessionResumed),
792
+ }));
793
+ }
794
+ catch (err) {
795
+ logger.warn({ err, sessionId }, "Failed to log proactive forward injection");
796
+ }
797
+ }
798
+ async readFile(relativePath) {
799
+ const contextDir = this.readableContextDir;
800
+ if (!contextDir)
801
+ return null;
802
+ const fullPath = join(contextDir, relativePath);
803
+ if (!existsSync(fullPath))
804
+ return null;
805
+ try {
806
+ return await readFile(fullPath, "utf-8");
807
+ }
808
+ catch {
809
+ return null;
810
+ }
811
+ }
812
+ async buildActiveProjectsSection() {
813
+ const contextDir = this.readableContextDir;
814
+ if (!contextDir)
815
+ return null;
816
+ const projectsDir = join(contextDir, CONTEXT_RELATIVE_PATHS.projects.dir);
817
+ if (!existsSync(projectsDir))
818
+ return null;
819
+ const projectFiles = readdirSync(projectsDir)
820
+ .filter((name) => name.endsWith(".md"))
821
+ .filter((name) => !name.startsWith("_"));
822
+ if (projectFiles.length === 0)
823
+ return null;
824
+ const summaries = (await Promise.all(projectFiles.map(async (name) => {
825
+ const content = await this.readFile(`${CONTEXT_RELATIVE_PATHS.projects.dir}/${name}`);
826
+ if (!content)
827
+ return null;
828
+ return summarizeProjectFile(name, content);
829
+ })))
830
+ .filter((summary) => summary !== null)
831
+ .filter((summary) => summary.state !== "archived");
832
+ if (summaries.length === 0)
833
+ return null;
834
+ summaries.sort((a, b) => {
835
+ const aUpdated = a.updated ?? "";
836
+ const bUpdated = b.updated ?? "";
837
+ if (aUpdated !== bUpdated)
838
+ return bUpdated.localeCompare(aUpdated);
839
+ return a.title.localeCompare(b.title);
840
+ });
841
+ const lines = ["# Active projects", ""];
842
+ for (const project of summaries) {
843
+ const parts = [`state: ${project.state}`];
844
+ if (project.nextMilestone) {
845
+ parts.push(`next: ${project.nextMilestone}`);
846
+ }
847
+ if (project.due) {
848
+ parts.push(`due: ${project.due}`);
849
+ }
850
+ lines.push(`- ${project.title} (\`${project.slug}\`) — ${parts.join("; ")}`);
851
+ }
852
+ return lines.join("\n");
853
+ }
854
+ /**
855
+ * Render a rolling 7-day (or N-day) window of DM conversation-log
856
+ * summaries for roadmap_refresh. Unlike `buildYesterdaySqliteContext`,
857
+ * which is anchored to the previous agent-day for journal synthesis,
858
+ * this window is calendar-rolling — refreshes can trigger at any
859
+ * time, and the prompt needs whatever recent DM context exists.
860
+ *
861
+ * Returns a formatted markdown block; falls back to a "(none)" stub
862
+ * so the prompt can always cite the tag unconditionally.
863
+ */
864
+ buildRecentDmConversationLog(days) {
865
+ const timezoneLabel = this.config.timezone || "system";
866
+ const nowMs = Date.now();
867
+ const startMs = nowMs - days * 24 * 60 * 60 * 1000;
868
+ const startSqlite = formatSqliteDatetime(new Date(startMs));
869
+ const endSqlite = formatSqliteDatetime(new Date(nowMs));
870
+ const total = this.db
871
+ .prepare(`SELECT COUNT(*) as cnt FROM dm_conversation_log
872
+ WHERE created_at >= ? AND created_at < ?`)
873
+ .get(startSqlite, endSqlite).cnt;
874
+ const rows = this.db
875
+ .prepare(`SELECT platform, scope, scope_key, summary, message_count, created_at
876
+ FROM dm_conversation_log
877
+ WHERE created_at >= ? AND created_at < ?
878
+ ORDER BY created_at DESC
879
+ LIMIT ?`)
880
+ .all(startSqlite, endSqlite, YESTERDAY_DM_LOG_LIMIT).reverse();
881
+ const lines = [
882
+ `- Window: last ${days} days`,
883
+ `- Timezone: ${timezoneLabel}`,
884
+ `- Rows: ${total}`,
885
+ ];
886
+ if (total > rows.length) {
887
+ lines.push(`- Showing latest ${rows.length} rows only`);
888
+ }
889
+ if (rows.length === 0) {
890
+ lines.push("- (none)");
891
+ return lines.join("\n");
892
+ }
893
+ for (const row of rows) {
894
+ const scopeKey = row.scope_key && row.scope_key.length > 0 ? `/${row.scope_key}` : "";
895
+ lines.push(`- ${formatSqliteTimestampForContext(row.created_at, timezoneLabel)} [${row.platform}:${row.scope}${scopeKey}] (${row.message_count} msgs) ${truncateContextText(row.summary, 220)}`);
896
+ }
897
+ return lines.join("\n");
898
+ }
899
+ async buildYesterdaySqliteContext() {
900
+ const tz = this.config.timezone || undefined;
901
+ const dayBoundaryHour = this.config.dayBoundaryHour ?? 4;
902
+ const previousAgentDayRef = new Date(Date.now() - 24 * 60 * 60 * 1000);
903
+ const bounds = getAgentDayBoundsUtc(tz, dayBoundaryHour, previousAgentDayRef);
904
+ const dayLabel = localDateStr(new Date(parseSqliteUtcMs(bounds.start)), tz);
905
+ const timezoneLabel = this.config.timezone || "system";
906
+ const agentActionTotal = this.db
907
+ .prepare(`SELECT COUNT(*) as cnt FROM agent_actions
908
+ WHERE started_at >= ? AND started_at < ?`)
909
+ .get(bounds.start, bounds.end).cnt;
910
+ const agentActionRows = this.db
911
+ .prepare(`SELECT action_type, trigger, result, started_at, completed_at, error
912
+ FROM agent_actions
913
+ WHERE started_at >= ? AND started_at < ?
914
+ ORDER BY started_at DESC
915
+ LIMIT ?`)
916
+ .all(bounds.start, bounds.end, YESTERDAY_AGENT_ACTION_LIMIT).reverse();
917
+ const messageTotal = this.db
918
+ .prepare(`SELECT COUNT(*) as cnt FROM messages
919
+ WHERE timestamp >= ? AND timestamp < ?
920
+ AND role != 'system'`)
921
+ .get(bounds.start, bounds.end).cnt;
922
+ const messageRows = this.db
923
+ .prepare(`SELECT role, content, platform, timestamp
924
+ FROM messages
925
+ WHERE timestamp >= ? AND timestamp < ?
926
+ AND role != 'system'
927
+ ORDER BY timestamp DESC
928
+ LIMIT ?`)
929
+ .all(bounds.start, bounds.end, YESTERDAY_MESSAGE_LIMIT).reverse();
930
+ const dmLogTotal = this.db
931
+ .prepare(`SELECT COUNT(*) as cnt FROM dm_conversation_log
932
+ WHERE created_at >= ? AND created_at < ?`)
933
+ .get(bounds.start, bounds.end).cnt;
934
+ const dmLogRows = this.db
935
+ .prepare(`SELECT platform, scope, scope_key, summary, message_count, created_at
936
+ FROM dm_conversation_log
937
+ WHERE created_at >= ? AND created_at < ?
938
+ ORDER BY created_at DESC
939
+ LIMIT ?`)
940
+ .all(bounds.start, bounds.end, YESTERDAY_DM_LOG_LIMIT).reverse();
941
+ return {
942
+ agentActions: formatYesterdayAgentActions(dayLabel, timezoneLabel, agentActionRows, agentActionTotal),
943
+ messages: formatYesterdayMessages(dayLabel, timezoneLabel, messageRows, messageTotal),
944
+ dmConversationLog: formatYesterdayDmConversationLog(dayLabel, timezoneLabel, dmLogRows, dmLogTotal),
945
+ };
946
+ }
947
+ /**
948
+ * Current-agent-day variant of `buildYesterdaySqliteContext` for the
949
+ * user-profile sweep (§Phase 2). Resolves the day bounds to the
950
+ * CURRENT agent-day — at 03:50 that window is ~04:00 yesterday →
951
+ * 03:50 today (the agent-day about to close), and at 17:50 it is
952
+ * ~04:00 today → 17:50 today. The sweep reads DM traffic + rolling
953
+ * summaries but not agent_actions (not needed for fact extraction).
954
+ */
955
+ buildAgentDayDmContext() {
956
+ const tz = this.config.timezone || undefined;
957
+ const dayBoundaryHour = this.config.dayBoundaryHour ?? 4;
958
+ const bounds = getAgentDayBoundsUtc(tz, dayBoundaryHour);
959
+ const dayLabel = localDateStr(new Date(parseSqliteUtcMs(bounds.start)), tz);
960
+ const timezoneLabel = this.config.timezone || "system";
961
+ const messageTotal = this.db
962
+ .prepare(`SELECT COUNT(*) as cnt FROM messages
963
+ WHERE timestamp >= ? AND timestamp < ?
964
+ AND role != 'system'`)
965
+ .get(bounds.start, bounds.end).cnt;
966
+ const messageRows = this.db
967
+ .prepare(`SELECT role, content, platform, timestamp
968
+ FROM messages
969
+ WHERE timestamp >= ? AND timestamp < ?
970
+ AND role != 'system'
971
+ ORDER BY timestamp DESC
972
+ LIMIT ?`)
973
+ .all(bounds.start, bounds.end, YESTERDAY_MESSAGE_LIMIT).reverse();
974
+ const dmLogTotal = this.db
975
+ .prepare(`SELECT COUNT(*) as cnt FROM dm_conversation_log
976
+ WHERE created_at >= ? AND created_at < ?`)
977
+ .get(bounds.start, bounds.end).cnt;
978
+ const dmLogRows = this.db
979
+ .prepare(`SELECT platform, scope, scope_key, summary, message_count, created_at
980
+ FROM dm_conversation_log
981
+ WHERE created_at >= ? AND created_at < ?
982
+ ORDER BY created_at DESC
983
+ LIMIT ?`)
984
+ .all(bounds.start, bounds.end, YESTERDAY_DM_LOG_LIMIT).reverse();
985
+ return {
986
+ messages: formatYesterdayMessages(dayLabel, timezoneLabel, messageRows, messageTotal),
987
+ dmConversationLog: formatYesterdayDmConversationLog(dayLabel, timezoneLabel, dmLogRows, dmLogTotal),
988
+ };
989
+ }
990
+ }
991
+ /**
992
+ * Truncate `value` to at most `max` chars, collapsing newlines so the
993
+ * result fits on one line. Suffix `…` when truncation occurs. Used by
994
+ * the scheduled.dm DM-activity / DM-history blocks.
995
+ */
996
+ function truncateForBlock(value, max) {
997
+ const oneLine = value.replace(/\s+/g, " ").trim();
998
+ if (oneLine.length <= max)
999
+ return oneLine;
1000
+ return `${oneLine.slice(0, max - 1)}…`;
1001
+ }
1002
+ function summarizeProjectFile(filename, content) {
1003
+ const slug = filename.replace(/\.md$/, "");
1004
+ const { frontmatter, body } = splitFrontmatter(content);
1005
+ const state = readFrontmatterScalar(frontmatter, "state") ?? "active";
1006
+ const title = body.match(/^#\s+(.+)$/m)?.[1]?.trim() || slug;
1007
+ return {
1008
+ slug,
1009
+ title,
1010
+ state,
1011
+ due: readFrontmatterScalar(frontmatter, "due"),
1012
+ nextMilestone: readFrontmatterScalar(frontmatter, "next_milestone"),
1013
+ updated: readFrontmatterScalar(frontmatter, "updated"),
1014
+ };
1015
+ }
1016
+ function splitFrontmatter(content) {
1017
+ if (!content.startsWith("---\n")) {
1018
+ return { frontmatter: "", body: content };
1019
+ }
1020
+ const endIdx = content.indexOf("\n---", 4);
1021
+ if (endIdx < 0) {
1022
+ return { frontmatter: "", body: content };
1023
+ }
1024
+ return {
1025
+ frontmatter: content.slice(4, endIdx),
1026
+ body: content.slice(endIdx + 4).replace(/^\n+/, ""),
1027
+ };
1028
+ }
1029
+ function readFrontmatterScalar(frontmatter, key) {
1030
+ if (!frontmatter)
1031
+ return null;
1032
+ const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1033
+ const match = frontmatter.match(new RegExp(`^${escapedKey}:\\s*(.+)$`, "m"));
1034
+ if (!match)
1035
+ return null;
1036
+ return match[1].trim().replace(/^['"]|['"]$/g, "");
1037
+ }
1038
+ /**
1039
+ * Truncate the ## Agent Log section of today.md to the last `maxEntries`
1040
+ * bullet lines. Operates on the string content only (does not touch disk).
1041
+ * Inserts an omission marker pointing to GET /api/context/today.
1042
+ */
1043
+ function truncateAgentLog(content, maxEntries) {
1044
+ // Match "\n## Agent Log\n" to avoid false positives inside code blocks or
1045
+ // quoted text. The leading \n ensures we match a heading at line start, not
1046
+ // a substring of prose. today.md's structure is daemon-controlled, but this
1047
+ // is defence-in-depth against accidental matches in Handoff/Notes.
1048
+ const needle = "\n## Agent Log\n";
1049
+ const needleIdx = content.indexOf(needle);
1050
+ if (needleIdx < 0)
1051
+ return content;
1052
+ const headerIdx = needleIdx + 1; // skip the leading \n to point at "##"
1053
+ const sectionHeader = "## Agent Log";
1054
+ // Find the end of the Agent Log section (next ## heading or EOF)
1055
+ const afterHeader = headerIdx + sectionHeader.length;
1056
+ const nextSectionIdx = content.indexOf("\n## ", afterHeader);
1057
+ const sectionEnd = nextSectionIdx >= 0 ? nextSectionIdx : content.length;
1058
+ const sectionBody = content.slice(afterHeader, sectionEnd);
1059
+ const lines = sectionBody.split("\n");
1060
+ // Extract bullet lines (start with "- ")
1061
+ const bulletLines = lines.filter((l) => l.trimStart().startsWith("- "));
1062
+ if (bulletLines.length <= maxEntries)
1063
+ return content;
1064
+ // Keep only the last maxEntries bullets
1065
+ const omitted = bulletLines.length - maxEntries;
1066
+ const kept = bulletLines.slice(-maxEntries);
1067
+ const truncatedBody = [
1068
+ "",
1069
+ `[...${omitted} earlier entries omitted — use GET /api/context/today for full content]`,
1070
+ ...kept,
1071
+ "",
1072
+ ].join("\n");
1073
+ return (content.slice(0, headerIdx) +
1074
+ sectionHeader +
1075
+ truncatedBody +
1076
+ content.slice(sectionEnd));
1077
+ }
1078
+ function formatYesterdayAgentActions(dayLabel, timezoneLabel, rows, total) {
1079
+ const lines = [
1080
+ `- Agent day: ${dayLabel}`,
1081
+ `- Timezone: ${timezoneLabel}`,
1082
+ `- Rows: ${total}`,
1083
+ ];
1084
+ if (total > rows.length) {
1085
+ lines.push(`- Showing latest ${rows.length} rows only`);
1086
+ }
1087
+ if (rows.length === 0) {
1088
+ lines.push("- (none)");
1089
+ return lines.join("\n");
1090
+ }
1091
+ for (const row of rows) {
1092
+ const trigger = row.trigger ? ` (${row.trigger})` : "";
1093
+ const result = row.result ?? "unknown";
1094
+ const error = row.error
1095
+ ? ` — error: ${truncateContextText(row.error, 140)}`
1096
+ : "";
1097
+ lines.push(`- ${formatSqliteTimestampForContext(row.started_at, timezoneLabel)} [${result}] ${row.action_type}${trigger}${error}`);
1098
+ }
1099
+ return lines.join("\n");
1100
+ }
1101
+ function formatYesterdayMessages(dayLabel, timezoneLabel, rows, total) {
1102
+ const lines = [
1103
+ `- Agent day: ${dayLabel}`,
1104
+ `- Timezone: ${timezoneLabel}`,
1105
+ `- Rows: ${total}`,
1106
+ ];
1107
+ if (total > rows.length) {
1108
+ lines.push(`- Showing latest ${rows.length} rows only`);
1109
+ }
1110
+ if (rows.length === 0) {
1111
+ lines.push("- (none)");
1112
+ return lines.join("\n");
1113
+ }
1114
+ for (const row of rows) {
1115
+ lines.push(`- ${formatSqliteTimestampForContext(row.timestamp, timezoneLabel)} [${row.platform}/${row.role}] ${truncateContextText(row.content, 180)}`);
1116
+ }
1117
+ return lines.join("\n");
1118
+ }
1119
+ function formatYesterdayDmConversationLog(dayLabel, timezoneLabel, rows, total) {
1120
+ const lines = [
1121
+ `- Agent day: ${dayLabel}`,
1122
+ `- Timezone: ${timezoneLabel}`,
1123
+ `- Rows: ${total}`,
1124
+ ];
1125
+ if (total > rows.length) {
1126
+ lines.push(`- Showing latest ${rows.length} rows only`);
1127
+ }
1128
+ if (rows.length === 0) {
1129
+ lines.push("- (none)");
1130
+ return lines.join("\n");
1131
+ }
1132
+ for (const row of rows) {
1133
+ const scopeKey = row.scope_key && row.scope_key.length > 0 ? `/${row.scope_key}` : "";
1134
+ lines.push(`- ${formatSqliteTimestampForContext(row.created_at, timezoneLabel)} [${row.platform}:${row.scope}${scopeKey}] (${row.message_count} msgs) ${truncateContextText(row.summary, 220)}`);
1135
+ }
1136
+ return lines.join("\n");
1137
+ }
1138
+ function formatSqliteTimestampForContext(timestamp, timezone) {
1139
+ const local = nowInTimezone(timezone === "system" ? undefined : timezone, new Date(parseSqliteUtcMs(timestamp)));
1140
+ return `${local.year}-${String(local.month).padStart(2, "0")}-${String(local.day).padStart(2, "0")} ${String(local.hours).padStart(2, "0")}:${String(local.minutes).padStart(2, "0")}`;
1141
+ }
1142
+ function truncateContextText(text, maxChars) {
1143
+ const compact = text.replace(/\s+/g, " ").trim();
1144
+ if (compact.length <= maxChars)
1145
+ return compact;
1146
+ return `${compact.slice(0, maxChars - 3)}...`;
1147
+ }
1148
+ //# sourceMappingURL=context-builder.js.map