@aitne/daemon 0.1.7 → 0.1.9

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 (2056) hide show
  1. package/dist/adapters/composite-dashboard-stream.d.ts +8 -11
  2. package/dist/adapters/composite-dashboard-stream.js +8 -11
  3. package/dist/adapters/dashboard-adapter.d.ts +18 -6
  4. package/dist/adapters/dashboard-adapter.js +101 -55
  5. package/dist/adapters/discord.d.ts +10 -3
  6. package/dist/adapters/discord.js +102 -26
  7. package/dist/adapters/docs-qa-adapter.d.ts +15 -16
  8. package/dist/adapters/docs-qa-adapter.js +14 -15
  9. package/dist/adapters/message-hub.d.ts +2 -3
  10. package/dist/adapters/message-hub.js +9 -3
  11. package/dist/adapters/notification-manager.d.ts +100 -3
  12. package/dist/adapters/notification-manager.js +244 -23
  13. package/dist/adapters/outbound-text.d.ts +17 -4
  14. package/dist/adapters/outbound-text.js +119 -5
  15. package/dist/adapters/primary-platform-resolver.d.ts +68 -0
  16. package/dist/adapters/primary-platform-resolver.js +54 -0
  17. package/dist/adapters/slack-adapter.d.ts +32 -5
  18. package/dist/adapters/slack-adapter.js +146 -58
  19. package/dist/adapters/telegram-adapter.d.ts +11 -8
  20. package/dist/adapters/telegram-adapter.js +63 -42
  21. package/dist/adapters/types.d.ts +3 -4
  22. package/dist/adapters/types.js +0 -1
  23. package/dist/adapters/whatsapp-adapter.d.ts +104 -18
  24. package/dist/adapters/whatsapp-adapter.js +305 -69
  25. package/dist/api/chat-binding-query.d.ts +0 -1
  26. package/dist/api/chat-binding-query.js +0 -1
  27. package/dist/api/chat-session-resume.d.ts +0 -1
  28. package/dist/api/chat-session-resume.js +0 -1
  29. package/dist/api/directory-picker.d.ts +0 -1
  30. package/dist/api/directory-picker.js +14 -1
  31. package/dist/api/env-writer.d.ts +0 -1
  32. package/dist/api/env-writer.js +108 -5
  33. package/dist/api/helpers/agent-errors-envelope.d.ts +116 -0
  34. package/dist/api/helpers/agent-errors-envelope.js +165 -0
  35. package/dist/api/helpers/agent-errors-registry.d.ts +2290 -0
  36. package/dist/api/helpers/agent-errors-registry.js +2197 -0
  37. package/dist/api/helpers/agent-errors-types.d.ts +193 -0
  38. package/dist/api/helpers/agent-errors-types.js +15 -0
  39. package/dist/api/helpers/agent-errors-zod.d.ts +33 -0
  40. package/dist/api/helpers/agent-errors-zod.js +138 -0
  41. package/dist/api/helpers/agent-errors.d.ts +4 -0
  42. package/dist/api/helpers/agent-errors.js +17 -0
  43. package/dist/api/integration-route-gate.d.ts +0 -1
  44. package/dist/api/integration-route-gate.js +10 -4
  45. package/dist/api/json-body.d.ts +3 -4
  46. package/dist/api/json-body.js +3 -4
  47. package/dist/api/routes/activity-sources.d.ts +1 -2
  48. package/dist/api/routes/activity-sources.js +0 -1
  49. package/dist/api/routes/agent-schedule-plan-match.d.ts +4 -0
  50. package/dist/api/routes/agent-schedule-plan-match.js +100 -0
  51. package/dist/api/routes/agent-schedule.d.ts +3 -0
  52. package/dist/api/routes/agent-schedule.js +790 -0
  53. package/dist/api/routes/agent.d.ts +0 -1
  54. package/dist/api/routes/agent.js +233 -367
  55. package/dist/api/routes/agents/index.d.ts +3 -0
  56. package/dist/api/routes/agents/index.js +404 -0
  57. package/dist/api/routes/agents/views.d.ts +185 -0
  58. package/dist/api/routes/agents/views.js +514 -0
  59. package/dist/api/routes/apple-calendar.d.ts +1 -2
  60. package/dist/api/routes/apple-calendar.js +110 -29
  61. package/dist/api/routes/attachments.d.ts +0 -1
  62. package/dist/api/routes/attachments.js +113 -22
  63. package/dist/api/routes/backends.d.ts +0 -1
  64. package/dist/api/routes/backends.js +144 -40
  65. package/dist/api/routes/books.d.ts +0 -1
  66. package/dist/api/routes/books.js +65 -26
  67. package/dist/api/routes/browser-automation-purchase.d.ts +31 -0
  68. package/dist/api/routes/browser-automation-purchase.js +251 -0
  69. package/dist/api/routes/browser-automation-sites.d.ts +22 -0
  70. package/dist/api/routes/browser-automation-sites.js +238 -0
  71. package/dist/api/routes/browser-history-managed.d.ts +23 -0
  72. package/dist/api/routes/browser-history-managed.js +202 -0
  73. package/dist/api/routes/browser-history.d.ts +3 -0
  74. package/dist/api/routes/browser-history.js +433 -0
  75. package/dist/api/routes/browser-task.d.ts +43 -0
  76. package/dist/api/routes/browser-task.js +617 -0
  77. package/dist/api/routes/calendar.d.ts +3 -3
  78. package/dist/api/routes/calendar.js +330 -56
  79. package/dist/api/routes/commands.d.ts +0 -1
  80. package/dist/api/routes/commands.js +27 -2
  81. package/dist/api/routes/context/frontmatter-merge.d.ts +28 -0
  82. package/dist/api/routes/context/frontmatter-merge.js +56 -0
  83. package/dist/api/routes/context/index.d.ts +40 -0
  84. package/dist/api/routes/context/index.js +174 -0
  85. package/dist/api/routes/context/locks.d.ts +3 -0
  86. package/dist/api/routes/context/locks.js +136 -0
  87. package/dist/api/routes/context/path-resolve.d.ts +26 -0
  88. package/dist/api/routes/context/path-resolve.js +125 -0
  89. package/dist/api/routes/context/permissions.d.ts +58 -0
  90. package/dist/api/routes/context/permissions.js +234 -0
  91. package/dist/api/routes/context/read.d.ts +3 -0
  92. package/dist/api/routes/context/read.js +306 -0
  93. package/dist/api/routes/context/repair.d.ts +3 -0
  94. package/dist/api/routes/context/repair.js +114 -0
  95. package/dist/api/routes/context/snapshots.d.ts +3 -0
  96. package/dist/api/routes/context/snapshots.js +208 -0
  97. package/dist/api/routes/context/write-step.d.ts +132 -0
  98. package/dist/api/routes/context/write-step.js +151 -0
  99. package/dist/api/routes/context/write.d.ts +3 -0
  100. package/dist/api/routes/context/write.js +781 -0
  101. package/dist/api/routes/dashboard/config.d.ts +3 -0
  102. package/dist/api/routes/dashboard/config.js +507 -0
  103. package/dist/api/routes/dashboard/conversations.d.ts +3 -0
  104. package/dist/api/routes/dashboard/conversations.js +308 -0
  105. package/dist/api/routes/dashboard/cost-approvals.d.ts +28 -0
  106. package/dist/api/routes/dashboard/cost-approvals.js +258 -0
  107. package/dist/api/routes/dashboard/index.d.ts +26 -0
  108. package/dist/api/routes/dashboard/index.js +46 -0
  109. package/dist/api/routes/dashboard/messaging.d.ts +3 -0
  110. package/dist/api/routes/dashboard/messaging.js +349 -0
  111. package/dist/api/routes/dashboard/notifications.d.ts +3 -0
  112. package/dist/api/routes/dashboard/notifications.js +108 -0
  113. package/dist/api/routes/dashboard/oauth-google.d.ts +3 -0
  114. package/dist/api/routes/dashboard/oauth-google.js +288 -0
  115. package/dist/api/routes/dashboard/schedule-readonly.d.ts +3 -0
  116. package/dist/api/routes/dashboard/schedule-readonly.js +54 -0
  117. package/dist/api/routes/dashboard/secrets.d.ts +23 -0
  118. package/dist/api/routes/dashboard/secrets.js +306 -0
  119. package/dist/api/routes/dashboard/snapshots.d.ts +3 -0
  120. package/dist/api/routes/dashboard/snapshots.js +32 -0
  121. package/dist/api/routes/delegated-sync.d.ts +0 -1
  122. package/dist/api/routes/delegated-sync.js +0 -1
  123. package/dist/api/routes/delegated.d.ts +5 -5
  124. package/dist/api/routes/delegated.js +6 -6
  125. package/dist/api/routes/docs.d.ts +0 -1
  126. package/dist/api/routes/docs.js +72 -10
  127. package/dist/api/routes/entities.d.ts +0 -1
  128. package/dist/api/routes/entities.js +114 -45
  129. package/dist/api/routes/fs.d.ts +0 -1
  130. package/dist/api/routes/fs.js +27 -13
  131. package/dist/api/routes/fs.logic.d.ts +0 -1
  132. package/dist/api/routes/fs.logic.js +6 -2
  133. package/dist/api/routes/git-accounts.d.ts +0 -1
  134. package/dist/api/routes/git-accounts.js +0 -1
  135. package/dist/api/routes/git-templates.d.ts +0 -1
  136. package/dist/api/routes/git-templates.js +113 -28
  137. package/dist/api/routes/git.d.ts +0 -1
  138. package/dist/api/routes/git.js +65 -16
  139. package/dist/api/routes/github.d.ts +0 -1
  140. package/dist/api/routes/github.js +130 -24
  141. package/dist/api/routes/health.d.ts +0 -1
  142. package/dist/api/routes/health.js +4 -3
  143. package/dist/api/routes/integrations/crud-patch.d.ts +16 -0
  144. package/dist/api/routes/integrations/crud-patch.js +638 -0
  145. package/dist/api/routes/integrations/crud.d.ts +15 -0
  146. package/dist/api/routes/integrations/crud.js +157 -0
  147. package/dist/api/routes/integrations/exec.d.ts +22 -0
  148. package/dist/api/routes/integrations/exec.js +349 -0
  149. package/dist/api/routes/integrations/index.d.ts +61 -0
  150. package/dist/api/routes/integrations/index.js +69 -0
  151. package/dist/api/routes/integrations/probe.d.ts +20 -0
  152. package/dist/api/routes/integrations/probe.js +246 -0
  153. package/dist/api/routes/integrations-reconcile.d.ts +0 -1
  154. package/dist/api/routes/integrations-reconcile.js +0 -1
  155. package/dist/api/routes/knowledge.d.ts +0 -1
  156. package/dist/api/routes/knowledge.js +14 -4
  157. package/dist/api/routes/mail/accounts.d.ts +3 -0
  158. package/dist/api/routes/mail/accounts.js +288 -0
  159. package/dist/api/routes/mail/app-password.d.ts +3 -0
  160. package/dist/api/routes/mail/app-password.js +191 -0
  161. package/dist/api/routes/mail/body-helpers.d.ts +55 -0
  162. package/dist/api/routes/mail/body-helpers.js +90 -0
  163. package/dist/api/routes/mail/dependencies.d.ts +35 -0
  164. package/dist/api/routes/mail/dependencies.js +1 -0
  165. package/dist/api/routes/mail/drafts.d.ts +4 -0
  166. package/dist/api/routes/mail/drafts.js +138 -0
  167. package/dist/api/routes/mail/gating.d.ts +44 -0
  168. package/dist/api/routes/mail/gating.js +98 -0
  169. package/dist/api/routes/mail/index.d.ts +17 -0
  170. package/dist/api/routes/mail/index.js +39 -0
  171. package/dist/api/routes/mail/messages.d.ts +14 -0
  172. package/dist/api/routes/mail/messages.js +238 -0
  173. package/dist/api/routes/mail/outlook-config.d.ts +3 -0
  174. package/dist/api/routes/mail/outlook-config.js +72 -0
  175. package/dist/api/routes/mail/provider-resolver.d.ts +63 -0
  176. package/dist/api/routes/mail/provider-resolver.js +285 -0
  177. package/dist/api/routes/mail/providers.d.ts +3 -0
  178. package/dist/api/routes/mail/providers.js +72 -0
  179. package/dist/api/routes/mail/search-health.d.ts +3 -0
  180. package/dist/api/routes/mail/search-health.js +130 -0
  181. package/dist/api/routes/mail/tags-folders.d.ts +4 -0
  182. package/dist/api/routes/mail/tags-folders.js +34 -0
  183. package/dist/api/routes/mail/validators.d.ts +22 -0
  184. package/dist/api/routes/mail/validators.js +130 -0
  185. package/dist/api/routes/managed-tasks.d.ts +0 -1
  186. package/dist/api/routes/managed-tasks.js +154 -63
  187. package/dist/api/routes/mcp.d.ts +0 -1
  188. package/dist/api/routes/mcp.js +115 -48
  189. package/dist/api/routes/metrics.d.ts +1 -2
  190. package/dist/api/routes/metrics.js +2 -3
  191. package/dist/api/routes/notion.d.ts +0 -1
  192. package/dist/api/routes/notion.js +234 -55
  193. package/dist/api/routes/observations.d.ts +0 -1
  194. package/dist/api/routes/observations.js +53 -184
  195. package/dist/api/routes/obsidian.d.ts +0 -1
  196. package/dist/api/routes/obsidian.js +193 -33
  197. package/dist/api/routes/profile-questions.d.ts +0 -1
  198. package/dist/api/routes/profile-questions.js +26 -5
  199. package/dist/api/routes/receipts.d.ts +0 -1
  200. package/dist/api/routes/receipts.js +64 -25
  201. package/dist/api/routes/recurring-schedules.d.ts +0 -1
  202. package/dist/api/routes/recurring-schedules.js +288 -15
  203. package/dist/api/routes/repositories.d.ts +0 -1
  204. package/dist/api/routes/repositories.js +278 -105
  205. package/dist/api/routes/schedule-model-resolver.d.ts +152 -0
  206. package/dist/api/routes/schedule-model-resolver.js +285 -0
  207. package/dist/api/routes/schedule-options.d.ts +24 -0
  208. package/dist/api/routes/schedule-options.js +76 -0
  209. package/dist/api/routes/schedule-validation.d.ts +145 -0
  210. package/dist/api/routes/schedule-validation.js +152 -0
  211. package/dist/api/routes/setup-migrate.d.ts +0 -1
  212. package/dist/api/routes/setup-migrate.js +6 -4
  213. package/dist/api/routes/setup.d.ts +0 -1
  214. package/dist/api/routes/setup.js +142 -27
  215. package/dist/api/routes/skill-curation.d.ts +0 -1
  216. package/dist/api/routes/skill-curation.js +0 -1
  217. package/dist/api/routes/skills.d.ts +2 -1
  218. package/dist/api/routes/skills.js +92 -33
  219. package/dist/api/routes/sot-bindings.d.ts +1 -2
  220. package/dist/api/routes/sot-bindings.js +46 -12
  221. package/dist/api/routes/sse.d.ts +0 -1
  222. package/dist/api/routes/sse.js +6 -2
  223. package/dist/api/routes/system.d.ts +0 -1
  224. package/dist/api/routes/system.js +15 -3
  225. package/dist/api/routes/task-flows.d.ts +0 -1
  226. package/dist/api/routes/task-flows.js +0 -1
  227. package/dist/api/routes/travel-bookings.d.ts +0 -1
  228. package/dist/api/routes/travel-bookings.js +26 -10
  229. package/dist/api/routes/triggers.d.ts +0 -1
  230. package/dist/api/routes/triggers.js +0 -1
  231. package/dist/api/routes/voice.d.ts +0 -1
  232. package/dist/api/routes/voice.js +0 -1
  233. package/dist/api/routes/wiki.d.ts +0 -1
  234. package/dist/api/routes/wiki.js +84 -17
  235. package/dist/api/server.d.ts +55 -6
  236. package/dist/api/server.js +76 -22
  237. package/dist/bootstrap/adapters.d.ts +0 -1
  238. package/dist/bootstrap/adapters.js +7 -5
  239. package/dist/bootstrap/api.d.ts +219 -0
  240. package/dist/bootstrap/api.js +502 -0
  241. package/dist/bootstrap/catchup.d.ts +0 -1
  242. package/dist/bootstrap/catchup.js +1 -2
  243. package/dist/bootstrap/db.d.ts +213 -0
  244. package/dist/bootstrap/db.js +617 -0
  245. package/dist/bootstrap/event-pipeline.d.ts +329 -0
  246. package/dist/bootstrap/event-pipeline.js +1203 -0
  247. package/dist/bootstrap/managed-chromium.d.ts +26 -0
  248. package/dist/bootstrap/managed-chromium.js +66 -0
  249. package/dist/bootstrap/observers.d.ts +147 -0
  250. package/dist/bootstrap/observers.js +586 -0
  251. package/dist/bootstrap/schedule-helpers.d.ts +122 -1
  252. package/dist/bootstrap/schedule-helpers.js +206 -6
  253. package/dist/bootstrap/services.d.ts +0 -1
  254. package/dist/bootstrap/services.js +1 -11
  255. package/dist/config.d.ts +1 -2
  256. package/dist/config.js +32 -15
  257. package/dist/core/abort-utils.d.ts +13 -0
  258. package/dist/core/abort-utils.js +35 -0
  259. package/dist/core/agent-core.d.ts +36 -4
  260. package/dist/core/agent-core.js +3 -2
  261. package/dist/core/agent-execution-recorder.d.ts +78 -0
  262. package/dist/core/agent-execution-recorder.js +60 -0
  263. package/dist/core/agents/agent-execution-tracker.d.ts +91 -0
  264. package/dist/core/agents/agent-execution-tracker.js +226 -0
  265. package/dist/core/agents/agent-frontmatter.d.ts +57 -0
  266. package/dist/core/agents/agent-frontmatter.js +74 -0
  267. package/dist/core/agents/agent-id-resolver.d.ts +47 -0
  268. package/dist/core/agents/agent-id-resolver.js +61 -0
  269. package/dist/core/agents/builtin-registry.d.ts +156 -0
  270. package/dist/core/agents/builtin-registry.js +257 -0
  271. package/dist/core/agents/cron-substitute.d.ts +60 -0
  272. package/dist/core/agents/cron-substitute.js +100 -0
  273. package/dist/core/agents/definition-criteria.d.ts +14 -0
  274. package/dist/core/agents/definition-criteria.js +25 -0
  275. package/dist/core/agents/effective-definition.d.ts +47 -0
  276. package/dist/core/agents/effective-definition.js +101 -0
  277. package/dist/core/agents/firing-blocked.d.ts +28 -0
  278. package/dist/core/agents/firing-blocked.js +27 -0
  279. package/dist/core/agents/loader-boot.d.ts +26 -0
  280. package/dist/core/agents/loader-boot.js +98 -0
  281. package/dist/core/agents/loader-watcher.d.ts +23 -0
  282. package/dist/core/agents/loader-watcher.js +84 -0
  283. package/dist/core/agents/loader.d.ts +188 -0
  284. package/dist/core/agents/loader.js +754 -0
  285. package/dist/core/agents/override-merge.d.ts +57 -0
  286. package/dist/core/agents/override-merge.js +131 -0
  287. package/dist/core/agents/recurrence-convert.d.ts +92 -0
  288. package/dist/core/agents/recurrence-convert.js +207 -0
  289. package/dist/core/agents/recurring-schedule-adapter.d.ts +24 -0
  290. package/dist/core/agents/recurring-schedule-adapter.js +157 -0
  291. package/dist/core/agents/success-criteria.d.ts +60 -0
  292. package/dist/core/agents/success-criteria.js +139 -0
  293. package/dist/core/agents/validate-agent-md.d.ts +17 -0
  294. package/dist/core/agents/validate-agent-md.js +64 -0
  295. package/dist/core/alerts.d.ts +0 -1
  296. package/dist/core/alerts.js +0 -1
  297. package/dist/core/atomic-write.d.ts +0 -1
  298. package/dist/core/atomic-write.js +17 -4
  299. package/dist/core/backends/api-key-probe.d.ts +0 -1
  300. package/dist/core/backends/api-key-probe.js +0 -1
  301. package/dist/core/backends/auth-health-monitor.d.ts +0 -1
  302. package/dist/core/backends/auth-health-monitor.js +31 -5
  303. package/dist/core/backends/auth-recovery.d.ts +0 -1
  304. package/dist/core/backends/auth-recovery.js +17 -4
  305. package/dist/core/backends/auth-telemetry.d.ts +0 -1
  306. package/dist/core/backends/auth-telemetry.js +0 -1
  307. package/dist/core/backends/backend-router.d.ts +44 -3
  308. package/dist/core/backends/backend-router.js +230 -3
  309. package/dist/core/backends/claude-auth.d.ts +0 -1
  310. package/dist/core/backends/claude-auth.js +0 -1
  311. package/dist/core/backends/claude-code-core.d.ts +53 -2
  312. package/dist/core/backends/claude-code-core.js +202 -29
  313. package/dist/core/backends/claude-credentials-store.d.ts +0 -1
  314. package/dist/core/backends/claude-credentials-store.js +0 -1
  315. package/dist/core/backends/claude-delegated.d.ts +0 -1
  316. package/dist/core/backends/claude-delegated.js +14 -15
  317. package/dist/core/backends/claude-errors.d.ts +0 -1
  318. package/dist/core/backends/claude-errors.js +0 -1
  319. package/dist/core/backends/claude-probe.d.ts +0 -1
  320. package/dist/core/backends/claude-probe.js +0 -1
  321. package/dist/core/backends/claude-tool-collection.d.ts +0 -1
  322. package/dist/core/backends/claude-tool-collection.js +177 -32
  323. package/dist/core/backends/cli-quota-guards.d.ts +100 -0
  324. package/dist/core/backends/cli-quota-guards.js +95 -0
  325. package/dist/core/backends/cli-utils.d.ts +26 -2
  326. package/dist/core/backends/cli-utils.js +133 -15
  327. package/dist/core/backends/codex-core.d.ts +13 -2
  328. package/dist/core/backends/codex-core.js +470 -63
  329. package/dist/core/backends/gemini-cli-core.d.ts +5 -2
  330. package/dist/core/backends/gemini-cli-core.js +348 -68
  331. package/dist/core/backends/idle-watchdog.d.ts +0 -1
  332. package/dist/core/backends/idle-watchdog.js +0 -1
  333. package/dist/core/backends/install-methods.d.ts +0 -1
  334. package/dist/core/backends/install-methods.js +22 -1
  335. package/dist/core/backends/model-registry.d.ts +10 -6
  336. package/dist/core/backends/model-registry.js +204 -34
  337. package/dist/core/backends/native-skill-discovery-probe.d.ts +77 -0
  338. package/dist/core/backends/native-skill-discovery-probe.js +172 -0
  339. package/dist/core/backends/opencode-basic-auth-fetch.d.ts +26 -0
  340. package/dist/core/backends/opencode-basic-auth-fetch.js +39 -0
  341. package/dist/core/backends/opencode-config-builder.d.ts +113 -0
  342. package/dist/core/backends/opencode-config-builder.js +184 -0
  343. package/dist/core/backends/opencode-core.d.ts +315 -0
  344. package/dist/core/backends/opencode-core.js +1508 -0
  345. package/dist/core/backends/opencode-event-mapper.d.ts +132 -0
  346. package/dist/core/backends/opencode-event-mapper.js +197 -0
  347. package/dist/core/backends/opencode-mcp.d.ts +81 -0
  348. package/dist/core/backends/opencode-mcp.js +157 -0
  349. package/dist/core/backends/opencode-server-manager.d.ts +113 -0
  350. package/dist/core/backends/opencode-server-manager.js +221 -0
  351. package/dist/core/backends/opencode-types.d.ts +45 -0
  352. package/dist/core/backends/opencode-types.js +13 -0
  353. package/dist/core/backends/plan-presets.d.ts +18 -6
  354. package/dist/core/backends/plan-presets.js +191 -24
  355. package/dist/core/backends/price-fetcher.d.ts +0 -1
  356. package/dist/core/backends/price-fetcher.js +0 -1
  357. package/dist/core/backends/process-config-cascade.d.ts +35 -1
  358. package/dist/core/backends/process-config-cascade.js +35 -2
  359. package/dist/core/backends/prompt-utils.d.ts +0 -1
  360. package/dist/core/backends/prompt-utils.js +0 -3
  361. package/dist/core/backends/proxy-model-registry.d.ts +0 -1
  362. package/dist/core/backends/proxy-model-registry.js +0 -1
  363. package/dist/core/backends/quota-reset-hints.d.ts +43 -0
  364. package/dist/core/backends/quota-reset-hints.js +116 -0
  365. package/dist/core/backends/silent-api-error-detector.d.ts +0 -1
  366. package/dist/core/backends/silent-api-error-detector.js +0 -1
  367. package/dist/core/bang-commands/commands-checks.d.ts +16 -0
  368. package/dist/core/bang-commands/commands-checks.js +58 -0
  369. package/dist/core/bang-commands/commands-close.d.ts +23 -0
  370. package/dist/core/bang-commands/commands-close.js +23 -0
  371. package/dist/core/bang-commands/commands-cost.d.ts +0 -1
  372. package/dist/core/bang-commands/commands-cost.js +13 -1
  373. package/dist/core/bang-commands/commands-help.d.ts +0 -1
  374. package/dist/core/bang-commands/commands-help.js +44 -6
  375. package/dist/core/bang-commands/commands-report.d.ts +0 -1
  376. package/dist/core/bang-commands/commands-report.js +1 -1
  377. package/dist/core/bang-commands/commands-research.d.ts +36 -0
  378. package/dist/core/bang-commands/commands-research.js +284 -0
  379. package/dist/core/bang-commands/commands-stop-start.d.ts +0 -1
  380. package/dist/core/bang-commands/commands-stop-start.js +2 -1
  381. package/dist/core/bang-commands/commands-wiki.d.ts +0 -1
  382. package/dist/core/bang-commands/commands-wiki.js +53 -14
  383. package/dist/core/bang-commands/format-utils.d.ts +15 -3
  384. package/dist/core/bang-commands/format-utils.js +23 -4
  385. package/dist/core/bang-commands/index.d.ts +3 -1
  386. package/dist/core/bang-commands/index.js +14 -1
  387. package/dist/core/bang-commands/registry.d.ts +59 -1
  388. package/dist/core/bang-commands/registry.js +175 -23
  389. package/dist/core/bang-commands/user-commands.d.ts +0 -1
  390. package/dist/core/bang-commands/user-commands.js +0 -1
  391. package/dist/core/browser-history/pre-morning-digest-job.d.ts +79 -0
  392. package/dist/core/browser-history/pre-morning-digest-job.js +89 -0
  393. package/dist/core/browser-history/research-cluster-fanout.d.ts +40 -0
  394. package/dist/core/browser-history/research-cluster-fanout.js +47 -0
  395. package/dist/core/browser-history/research-events.d.ts +37 -0
  396. package/dist/core/browser-history/research-events.js +70 -0
  397. package/dist/core/channel-timeline.d.ts +18 -2
  398. package/dist/core/channel-timeline.js +44 -1
  399. package/dist/core/character-block.d.ts +0 -1
  400. package/dist/core/character-block.js +0 -1
  401. package/dist/core/context/activity-sources.d.ts +3 -4
  402. package/dist/core/context/activity-sources.js +0 -1
  403. package/dist/core/context/activity-view-reconciler.d.ts +1 -2
  404. package/dist/core/context/activity-view-reconciler.js +10 -10
  405. package/dist/core/context/activity-view-runner.d.ts +0 -1
  406. package/dist/core/context/activity-view-runner.js +11 -3
  407. package/dist/core/context/default-schedules-reconciler.d.ts +1 -2
  408. package/dist/core/context/default-schedules-reconciler.js +1 -2
  409. package/dist/core/context/default-schedules-runner.d.ts +0 -1
  410. package/dist/core/context/default-schedules-runner.js +44 -5
  411. package/dist/core/context/domain-index-reconciler.d.ts +3 -1
  412. package/dist/core/context/domain-index-reconciler.js +11 -5
  413. package/dist/core/context/domain-index-runner.d.ts +0 -1
  414. package/dist/core/context/domain-index-runner.js +9 -2
  415. package/dist/core/context/entity-mirror.d.ts +9 -7
  416. package/dist/core/context/entity-mirror.js +21 -9
  417. package/dist/core/context/entity-source-rename.d.ts +0 -1
  418. package/dist/core/context/entity-source-rename.js +9 -2
  419. package/dist/core/context/index-reconciler.d.ts +26 -5
  420. package/dist/core/context/index-reconciler.js +110 -56
  421. package/dist/core/context/policy-index-reconciler.d.ts +6 -7
  422. package/dist/core/context/policy-index-reconciler.js +6 -7
  423. package/dist/core/context/policy-index-runner.d.ts +2 -3
  424. package/dist/core/context/policy-index-runner.js +10 -3
  425. package/dist/core/context/reconciler-runner.d.ts +0 -1
  426. package/dist/core/context/reconciler-runner.js +46 -6
  427. package/dist/core/context/reconciler-section.d.ts +30 -0
  428. package/dist/core/context/reconciler-section.js +39 -0
  429. package/dist/core/context-builder-calendar.d.ts +36 -0
  430. package/dist/core/context-builder-calendar.js +245 -0
  431. package/dist/core/context-builder-conversation.d.ts +95 -0
  432. package/dist/core/context-builder-conversation.js +444 -0
  433. package/dist/core/context-builder-format.d.ts +8 -0
  434. package/dist/core/context-builder-format.js +22 -0
  435. package/dist/core/context-builder-projects.d.ts +11 -0
  436. package/dist/core/context-builder-projects.js +102 -0
  437. package/dist/core/context-builder-yesterday.d.ts +30 -0
  438. package/dist/core/context-builder-yesterday.js +198 -0
  439. package/dist/core/context-builder.d.ts +73 -124
  440. package/dist/core/context-builder.js +272 -903
  441. package/dist/core/context-file-serializer.d.ts +92 -0
  442. package/dist/core/context-file-serializer.js +126 -0
  443. package/dist/core/context-frontmatter-extract.d.ts +32 -0
  444. package/dist/core/context-frontmatter-extract.js +98 -0
  445. package/dist/core/context-frontmatter.d.ts +14 -1
  446. package/dist/core/context-frontmatter.js +180 -109
  447. package/dist/core/context-health.d.ts +0 -1
  448. package/dist/core/context-health.js +25 -14
  449. package/dist/core/context-paths.d.ts +128 -85
  450. package/dist/core/context-paths.js +190 -108
  451. package/dist/core/context-staleness.d.ts +0 -1
  452. package/dist/core/context-staleness.js +2 -3
  453. package/dist/core/context-validation/frontmatter.d.ts +73 -0
  454. package/dist/core/context-validation/frontmatter.js +216 -0
  455. package/dist/core/context-validation/index.d.ts +19 -0
  456. package/dist/core/context-validation/index.js +19 -0
  457. package/dist/core/context-validation/prepare-write.d.ts +94 -0
  458. package/dist/core/context-validation/prepare-write.js +145 -0
  459. package/dist/core/context-validation/routine-rulebook.d.ts +59 -0
  460. package/dist/core/context-validation/routine-rulebook.js +155 -0
  461. package/dist/core/context-validation/section.d.ts +40 -0
  462. package/dist/core/context-validation/section.js +90 -0
  463. package/dist/core/context-validation/snapshot-debounce.d.ts +51 -0
  464. package/dist/core/context-validation/snapshot-debounce.js +109 -0
  465. package/dist/core/context-validation/today.d.ts +84 -0
  466. package/dist/core/context-validation/today.js +167 -0
  467. package/dist/core/context-vault-aliases.d.ts +107 -0
  468. package/dist/core/context-vault-aliases.js +253 -0
  469. package/dist/core/custom-routine-scheduler.d.ts +5 -6
  470. package/dist/core/custom-routine-scheduler.js +3 -4
  471. package/dist/core/daemon-api-cli.d.ts +6 -6
  472. package/dist/core/daemon-api-cli.js +132 -33
  473. package/dist/core/dashboard-session-cleanup.d.ts +0 -1
  474. package/dist/core/dashboard-session-cleanup.js +0 -1
  475. package/dist/core/dashboard-session-controls.d.ts +0 -1
  476. package/dist/core/dashboard-session-controls.js +0 -1
  477. package/dist/core/delegated-connector-health.d.ts +0 -1
  478. package/dist/core/delegated-connector-health.js +0 -1
  479. package/dist/core/dispatcher-date-utils.d.ts +0 -1
  480. package/dist/core/dispatcher-date-utils.js +0 -1
  481. package/dist/core/dispatcher-error-handling.d.ts +13 -1
  482. package/dist/core/dispatcher-error-handling.js +69 -1
  483. package/dist/core/dispatcher-hourly-check.d.ts +73 -2
  484. package/dist/core/dispatcher-hourly-check.js +258 -153
  485. package/dist/core/dispatcher-message-handler.d.ts +32 -2
  486. package/dist/core/dispatcher-message-handler.js +310 -53
  487. package/dist/core/dispatcher-morning-routine.d.ts +38 -31
  488. package/dist/core/dispatcher-morning-routine.js +238 -156
  489. package/dist/core/dispatcher-prompt.d.ts +4 -2
  490. package/dist/core/dispatcher-prompt.js +19 -4
  491. package/dist/core/dispatcher-repository-helpers.d.ts +0 -1
  492. package/dist/core/dispatcher-repository-helpers.js +5 -2
  493. package/dist/core/dispatcher-result-processor.d.ts +20 -1
  494. package/dist/core/dispatcher-result-processor.js +94 -5
  495. package/dist/core/dispatcher-scheduled-browser-task.d.ts +91 -0
  496. package/dist/core/dispatcher-scheduled-browser-task.js +228 -0
  497. package/dist/core/dispatcher-scheduled-tasks.d.ts +69 -2
  498. package/dist/core/dispatcher-scheduled-tasks.js +452 -29
  499. package/dist/core/dispatcher-types.d.ts +140 -13
  500. package/dist/core/dispatcher-types.js +0 -1
  501. package/dist/core/dispatcher.d.ts +194 -5
  502. package/dist/core/dispatcher.js +487 -11
  503. package/dist/core/dm-freshness-metrics.d.ts +6 -6
  504. package/dist/core/dm-freshness-metrics.js +7 -7
  505. package/dist/core/dm-token-router.d.ts +58 -0
  506. package/dist/core/dm-token-router.js +58 -0
  507. package/dist/core/docs/citation-validator.d.ts +0 -1
  508. package/dist/core/docs/citation-validator.js +0 -1
  509. package/dist/core/docs/extract-terms.d.ts +0 -1
  510. package/dist/core/docs/extract-terms.js +0 -1
  511. package/dist/core/docs/indexer.d.ts +0 -1
  512. package/dist/core/docs/indexer.js +0 -1
  513. package/dist/core/drift-effects.d.ts +0 -1
  514. package/dist/core/drift-effects.js +6 -3
  515. package/dist/core/evening-review-verify.d.ts +163 -0
  516. package/dist/core/evening-review-verify.js +636 -0
  517. package/dist/core/event-bus.d.ts +0 -1
  518. package/dist/core/event-bus.js +0 -1
  519. package/dist/core/fetch-window-prompt-loader.d.ts +46 -0
  520. package/dist/core/fetch-window-prompt-loader.js +71 -0
  521. package/dist/core/git-project-docs.d.ts +0 -1
  522. package/dist/core/git-project-docs.js +13 -6
  523. package/dist/core/health-monitor.d.ts +2 -2
  524. package/dist/core/health-monitor.js +6 -3
  525. package/dist/core/heartbeat.d.ts +0 -1
  526. package/dist/core/heartbeat.js +0 -1
  527. package/dist/core/injection-policy.d.ts +107 -0
  528. package/dist/core/injection-policy.js +117 -0
  529. package/dist/core/integration-health.d.ts +0 -1
  530. package/dist/core/integration-health.js +1 -2
  531. package/dist/core/integration-lifecycle.d.ts +0 -1
  532. package/dist/core/integration-lifecycle.js +0 -1
  533. package/dist/core/integration-main-backend.d.ts +0 -1
  534. package/dist/core/integration-main-backend.js +11 -4
  535. package/dist/core/integration-probe.d.ts +0 -1
  536. package/dist/core/integration-probe.js +0 -1
  537. package/dist/core/management-md-write-lock.d.ts +1 -2
  538. package/dist/core/management-md-write-lock.js +1 -2
  539. package/dist/core/management-md.d.ts +24 -10
  540. package/dist/core/management-md.js +65 -33
  541. package/dist/core/management-registry.d.ts +16 -25
  542. package/dist/core/management-registry.js +32 -54
  543. package/dist/core/management-telemetry.d.ts +1 -2
  544. package/dist/core/management-telemetry.js +1 -2
  545. package/dist/core/message-recorder.d.ts +3 -4
  546. package/dist/core/message-recorder.js +3 -4
  547. package/dist/core/metrics.d.ts +88 -2
  548. package/dist/core/metrics.js +78 -3
  549. package/dist/core/migration-backup.d.ts +0 -1
  550. package/dist/core/migration-backup.js +11 -1
  551. package/dist/core/morning/agent-journal-appender.d.ts +264 -0
  552. package/dist/core/morning/agent-journal-appender.js +632 -0
  553. package/dist/core/morning/daily-journal-composer.d.ts +183 -0
  554. package/dist/core/morning/daily-journal-composer.js +421 -0
  555. package/dist/core/morning/handoff-parser.d.ts +43 -0
  556. package/dist/core/morning/handoff-parser.js +115 -0
  557. package/dist/core/morning/journal-skeleton-builder.d.ts +155 -0
  558. package/dist/core/morning/journal-skeleton-builder.js +301 -0
  559. package/dist/core/morning/orchestrator.d.ts +424 -0
  560. package/dist/core/morning/orchestrator.js +1230 -0
  561. package/dist/core/morning/parent-audit-emitter.d.ts +80 -0
  562. package/dist/core/morning/parent-audit-emitter.js +118 -0
  563. package/dist/core/morning/partial-extract-streak.d.ts +76 -0
  564. package/dist/core/morning/partial-extract-streak.js +165 -0
  565. package/dist/core/morning/roadmap-skeleton-builder.d.ts +158 -0
  566. package/dist/core/morning/roadmap-skeleton-builder.js +337 -0
  567. package/dist/core/output-language-policy.d.ts +0 -1
  568. package/dist/core/output-language-policy.js +7 -8
  569. package/dist/core/overview-write-lock.d.ts +0 -1
  570. package/dist/core/overview-write-lock.js +0 -1
  571. package/dist/core/path-compat.d.ts +0 -1
  572. package/dist/core/path-compat.js +0 -1
  573. package/dist/core/path-rewrite.d.ts +1 -2
  574. package/dist/core/path-rewrite.js +0 -1
  575. package/dist/core/policy-files.d.ts +39 -13
  576. package/dist/core/policy-files.js +62 -12
  577. package/dist/core/pre-pass-freshness.d.ts +27 -0
  578. package/dist/core/pre-pass-freshness.js +9 -0
  579. package/dist/core/previous-week-digest.d.ts +129 -0
  580. package/dist/core/previous-week-digest.js +256 -0
  581. package/dist/core/profile-questions/seed.d.ts +2 -3
  582. package/dist/core/profile-questions/seed.js +4 -4
  583. package/dist/core/profile-questions/slot-filled.d.ts +0 -1
  584. package/dist/core/profile-questions/slot-filled.js +0 -1
  585. package/dist/core/prompts.d.ts +0 -1
  586. package/dist/core/prompts.js +6 -7
  587. package/dist/core/quiet-hours-sync.d.ts +0 -1
  588. package/dist/core/quiet-hours-sync.js +7 -1
  589. package/dist/core/quiet-hours.d.ts +35 -0
  590. package/dist/core/quiet-hours.js +93 -0
  591. package/dist/core/read-sensitive-token-manager.d.ts +0 -1
  592. package/dist/core/read-sensitive-token-manager.js +0 -1
  593. package/dist/core/recurrence.d.ts +13 -1
  594. package/dist/core/recurrence.js +108 -14
  595. package/dist/core/reinstall.d.ts +5 -1
  596. package/dist/core/reinstall.js +12 -2
  597. package/dist/core/release-assets.d.ts +39 -4
  598. package/dist/core/release-assets.js +83 -8
  599. package/dist/core/repository-management-docs.d.ts +0 -1
  600. package/dist/core/repository-management-docs.js +32 -11
  601. package/dist/core/retention.d.ts +49 -4
  602. package/dist/core/retention.js +218 -5
  603. package/dist/core/review-context.d.ts +10 -1
  604. package/dist/core/review-context.js +51 -6
  605. package/dist/core/roadmap-horizon.d.ts +0 -1
  606. package/dist/core/roadmap-horizon.js +0 -1
  607. package/dist/core/roadmap-ids.d.ts +4 -6
  608. package/dist/core/roadmap-ids.js +4 -6
  609. package/dist/core/roadmap-maintenance.d.ts +212 -0
  610. package/dist/core/roadmap-maintenance.js +732 -0
  611. package/dist/core/roadmap-refresh-triggers.d.ts +0 -1
  612. package/dist/core/roadmap-refresh-triggers.js +0 -1
  613. package/dist/core/roadmap-truncate.d.ts +0 -1
  614. package/dist/core/roadmap-truncate.js +0 -1
  615. package/dist/core/roadmap-validate.d.ts +5 -1
  616. package/dist/core/roadmap-validate.js +12 -75
  617. package/dist/core/roadmap-write-lock.d.ts +0 -1
  618. package/dist/core/roadmap-write-lock.js +0 -1
  619. package/dist/core/routine-acquisition-plan.d.ts +43 -8
  620. package/dist/core/routine-acquisition-plan.js +99 -9
  621. package/dist/core/routine-fetch-window-retry.d.ts +40 -3
  622. package/dist/core/routine-fetch-window-retry.js +90 -9
  623. package/dist/core/routine-fetch-window-runner.d.ts +55 -22
  624. package/dist/core/routine-fetch-window-runner.js +287 -41
  625. package/dist/core/routine-windows.d.ts +17 -19
  626. package/dist/core/routine-windows.js +80 -44
  627. package/dist/core/schedule-insert-helper.d.ts +0 -1
  628. package/dist/core/schedule-insert-helper.js +0 -1
  629. package/dist/core/schedule-maintenance.d.ts +0 -1
  630. package/dist/core/schedule-maintenance.js +0 -1
  631. package/dist/core/scheduler.d.ts +179 -37
  632. package/dist/core/scheduler.js +614 -91
  633. package/dist/core/semaphore.d.ts +0 -1
  634. package/dist/core/semaphore.js +0 -1
  635. package/dist/core/session-gate.d.ts +0 -1
  636. package/dist/core/session-gate.js +0 -1
  637. package/dist/core/session-manager.d.ts +25 -7
  638. package/dist/core/session-manager.js +32 -16
  639. package/dist/core/signal-detector.d.ts +2 -3
  640. package/dist/core/signal-detector.js +3 -4
  641. package/dist/core/skeleton.d.ts +1 -2
  642. package/dist/core/skeleton.js +31 -32
  643. package/dist/core/skill-curation/apply-proposal.d.ts +0 -1
  644. package/dist/core/skill-curation/apply-proposal.js +0 -1
  645. package/dist/core/skill-curation/auto-revert.d.ts +0 -1
  646. package/dist/core/skill-curation/auto-revert.js +4 -5
  647. package/dist/core/skill-curation/classify-diff.d.ts +0 -1
  648. package/dist/core/skill-curation/classify-diff.js +0 -0
  649. package/dist/core/skill-curation/declarations.d.ts +0 -1
  650. package/dist/core/skill-curation/declarations.js +0 -1
  651. package/dist/core/skill-curation/knowledge-map.d.ts +0 -1
  652. package/dist/core/skill-curation/knowledge-map.js +0 -1
  653. package/dist/core/skill-curation/orphan-overlay.d.ts +2 -3
  654. package/dist/core/skill-curation/orphan-overlay.js +5 -6
  655. package/dist/core/skill-curation/overlay-store.d.ts +6 -4
  656. package/dist/core/skill-curation/overlay-store.js +12 -7
  657. package/dist/core/skill-curation/render/convention-notes.d.ts +0 -1
  658. package/dist/core/skill-curation/render/convention-notes.js +0 -1
  659. package/dist/core/skill-curation/render/cross-references.d.ts +0 -1
  660. package/dist/core/skill-curation/render/cross-references.js +0 -1
  661. package/dist/core/skill-curation/render/frontmatter-schema.d.ts +0 -1
  662. package/dist/core/skill-curation/render/frontmatter-schema.js +0 -1
  663. package/dist/core/skill-curation/render/index.d.ts +0 -1
  664. package/dist/core/skill-curation/render/index.js +0 -1
  665. package/dist/core/skill-curation/render/knowledge-layout.d.ts +0 -1
  666. package/dist/core/skill-curation/render/knowledge-layout.js +0 -1
  667. package/dist/core/skill-curation/render/routing-table.d.ts +0 -1
  668. package/dist/core/skill-curation/render/routing-table.js +0 -1
  669. package/dist/core/skill-curation/render/search-recipes.d.ts +0 -1
  670. package/dist/core/skill-curation/render/search-recipes.js +0 -1
  671. package/dist/core/skill-curation/run-token.d.ts +0 -1
  672. package/dist/core/skill-curation/run-token.js +0 -1
  673. package/dist/core/skill-curation/signals.d.ts +0 -1
  674. package/dist/core/skill-curation/signals.js +0 -1
  675. package/dist/core/skill-curation/smoke-test.d.ts +0 -1
  676. package/dist/core/skill-curation/smoke-test.js +0 -1
  677. package/dist/core/skill-curation/splicer.d.ts +0 -1
  678. package/dist/core/skill-curation/splicer.js +0 -1
  679. package/dist/core/skill-curation/workdir.d.ts +0 -1
  680. package/dist/core/skill-curation/workdir.js +0 -1
  681. package/dist/core/skill-source-paths.d.ts +0 -1
  682. package/dist/core/skill-source-paths.js +0 -1
  683. package/dist/core/skills-compiler-cli-renderer.d.ts +79 -0
  684. package/dist/core/skills-compiler-cli-renderer.js +289 -0
  685. package/dist/core/skills-compiler-denied-tools.d.ts +57 -0
  686. package/dist/core/skills-compiler-denied-tools.js +204 -0
  687. package/dist/core/skills-compiler-skill-index.d.ts +117 -0
  688. package/dist/core/skills-compiler-skill-index.js +262 -0
  689. package/dist/core/skills-compiler-tree.d.ts +38 -0
  690. package/dist/core/skills-compiler-tree.js +157 -0
  691. package/dist/core/skills-compiler-types.d.ts +46 -0
  692. package/dist/core/skills-compiler-types.js +1 -0
  693. package/dist/core/skills-compiler-variants.d.ts +117 -0
  694. package/dist/core/skills-compiler-variants.js +337 -0
  695. package/dist/core/skills-compiler.d.ts +169 -217
  696. package/dist/core/skills-compiler.js +385 -940
  697. package/dist/core/skills-manifest.d.ts +133 -1
  698. package/dist/core/skills-manifest.js +507 -40
  699. package/dist/core/system-reset.d.ts +1 -2
  700. package/dist/core/system-reset.js +1 -2
  701. package/dist/core/template-store.d.ts +2 -3
  702. package/dist/core/template-store.js +7 -4
  703. package/dist/core/template-versions.d.ts +1 -2
  704. package/dist/core/template-versions.js +1 -2
  705. package/dist/core/today-agent-plan.d.ts +0 -1
  706. package/dist/core/today-agent-plan.js +0 -1
  707. package/dist/core/today-direct-writer.d.ts +11 -2
  708. package/dist/core/today-direct-writer.js +42 -27
  709. package/dist/core/today-write-lock.d.ts +0 -1
  710. package/dist/core/today-write-lock.js +0 -1
  711. package/dist/core/trigger-dispatch.d.ts +0 -1
  712. package/dist/core/trigger-dispatch.js +0 -1
  713. package/dist/core/trigger-evaluator.d.ts +0 -1
  714. package/dist/core/trigger-evaluator.js +0 -1
  715. package/dist/core/user-skills-root.d.ts +24 -0
  716. package/dist/core/user-skills-root.js +29 -0
  717. package/dist/core/wiki/approval-queue.d.ts +0 -1
  718. package/dist/core/wiki/approval-queue.js +7 -3
  719. package/dist/core/wiki/bridge.d.ts +0 -1
  720. package/dist/core/wiki/bridge.js +0 -1
  721. package/dist/core/wiki/compile-lock.d.ts +0 -1
  722. package/dist/core/wiki/compile-lock.js +0 -1
  723. package/dist/core/wiki/compile-preview.d.ts +0 -1
  724. package/dist/core/wiki/compile-preview.js +0 -1
  725. package/dist/core/wiki/cost-estimate.d.ts +0 -1
  726. package/dist/core/wiki/cost-estimate.js +23 -3
  727. package/dist/core/wiki/dispatcher.d.ts +1 -21
  728. package/dist/core/wiki/dispatcher.js +0 -26
  729. package/dist/core/wiki/git-precompile.d.ts +9 -1
  730. package/dist/core/wiki/git-precompile.js +7 -2
  731. package/dist/core/wiki/import-migrate.d.ts +0 -1
  732. package/dist/core/wiki/import-migrate.js +0 -1
  733. package/dist/core/wiki/import-probe.d.ts +0 -1
  734. package/dist/core/wiki/import-probe.js +7 -5
  735. package/dist/core/wiki/index-cache.d.ts +0 -1
  736. package/dist/core/wiki/index-cache.js +0 -1
  737. package/dist/core/wiki/multi-url-dispatch.d.ts +0 -1
  738. package/dist/core/wiki/multi-url-dispatch.js +19 -9
  739. package/dist/core/wiki/wiki-fts.d.ts +0 -1
  740. package/dist/core/wiki/wiki-fts.js +0 -1
  741. package/dist/core/wiki/workspaces.d.ts +17 -2
  742. package/dist/core/wiki/workspaces.js +28 -17
  743. package/dist/core/wiki/write-strategy.d.ts +0 -1
  744. package/dist/core/wiki/write-strategy.js +19 -3
  745. package/dist/core/workdir.d.ts +38 -2
  746. package/dist/core/workdir.js +159 -17
  747. package/dist/db/agent-executions-store.d.ts +149 -0
  748. package/dist/db/agent-executions-store.js +209 -0
  749. package/dist/db/agents-store.d.ts +179 -0
  750. package/dist/db/agents-store.js +264 -0
  751. package/dist/db/automation-triggers.d.ts +0 -1
  752. package/dist/db/automation-triggers.js +0 -1
  753. package/dist/db/browser-automation-b4-config-store.d.ts +68 -0
  754. package/dist/db/browser-automation-b4-config-store.js +111 -0
  755. package/dist/db/browser-automation-purchase-primary-channels-store.d.ts +48 -0
  756. package/dist/db/browser-automation-purchase-primary-channels-store.js +88 -0
  757. package/dist/db/browser-automation-purchase-replies-store.d.ts +48 -0
  758. package/dist/db/browser-automation-purchase-replies-store.js +71 -0
  759. package/dist/db/browser-automation-purchase-tokens-store.d.ts +276 -0
  760. package/dist/db/browser-automation-purchase-tokens-store.js +483 -0
  761. package/dist/db/browser-automation-store.d.ts +37 -0
  762. package/dist/db/browser-automation-store.js +41 -0
  763. package/dist/db/browser-history-store.d.ts +231 -0
  764. package/dist/db/browser-history-store.js +601 -0
  765. package/dist/db/browser-task-action-log-store.d.ts +41 -0
  766. package/dist/db/browser-task-action-log-store.js +74 -0
  767. package/dist/db/browser-task-clarifications-store.d.ts +67 -0
  768. package/dist/db/browser-task-clarifications-store.js +118 -0
  769. package/dist/db/browser-task-final-confirm-tokens-store.d.ts +108 -0
  770. package/dist/db/browser-task-final-confirm-tokens-store.js +251 -0
  771. package/dist/db/browser-task-store.d.ts +114 -0
  772. package/dist/db/browser-task-store.js +250 -0
  773. package/dist/db/client.d.ts +0 -1
  774. package/dist/db/client.js +0 -1
  775. package/dist/db/entities-store.d.ts +6 -7
  776. package/dist/db/entities-store.js +5 -6
  777. package/dist/db/hourly-check-signals.d.ts +0 -1
  778. package/dist/db/hourly-check-signals.js +121 -36
  779. package/dist/db/integration-probe-store.d.ts +0 -1
  780. package/dist/db/integration-probe-store.js +0 -1
  781. package/dist/db/integrations-store.d.ts +0 -1
  782. package/dist/db/integrations-store.js +0 -1
  783. package/dist/db/managed-chromium-sites-store.d.ts +110 -0
  784. package/dist/db/managed-chromium-sites-store.js +174 -0
  785. package/dist/db/managed-chromium-state.d.ts +58 -0
  786. package/dist/db/managed-chromium-state.js +104 -0
  787. package/dist/db/managed-tasks-store.d.ts +0 -1
  788. package/dist/db/managed-tasks-store.js +0 -1
  789. package/dist/db/management-parse-failures-store.d.ts +0 -1
  790. package/dist/db/management-parse-failures-store.js +0 -1
  791. package/dist/db/migrations/context-vault-restructure.d.ts +263 -0
  792. package/dist/db/migrations/context-vault-restructure.js +1384 -0
  793. package/dist/db/migrations.d.ts +111 -0
  794. package/dist/db/migrations.js +476 -0
  795. package/dist/db/observations.d.ts +1 -2
  796. package/dist/db/observations.js +13 -4
  797. package/dist/db/recurring-schedules.d.ts +44 -3
  798. package/dist/db/recurring-schedules.js +116 -21
  799. package/dist/db/repositories-store.d.ts +2 -2
  800. package/dist/db/repositories-store.js +41 -4
  801. package/dist/db/runtime-state.d.ts +32 -2
  802. package/dist/db/runtime-state.js +33 -2
  803. package/dist/db/schema.d.ts +0 -1
  804. package/dist/db/schema.js +923 -54
  805. package/dist/db/sot-bindings-store.d.ts +0 -1
  806. package/dist/db/sot-bindings-store.js +0 -1
  807. package/dist/db/voice-transcripts-store.d.ts +0 -1
  808. package/dist/db/voice-transcripts-store.js +0 -1
  809. package/dist/db/wiki-store.d.ts +0 -1
  810. package/dist/db/wiki-store.js +3 -1
  811. package/dist/index.d.ts +0 -1
  812. package/dist/index.js +408 -1522
  813. package/dist/init.d.ts +0 -1
  814. package/dist/init.js +0 -2
  815. package/dist/log-buffer.d.ts +0 -1
  816. package/dist/log-buffer.js +0 -2
  817. package/dist/logging.d.ts +0 -1
  818. package/dist/logging.js +0 -2
  819. package/dist/management-rules.d.ts +0 -1
  820. package/dist/management-rules.js +0 -1
  821. package/dist/messaging/browser-task-mcp-notifier.d.ts +77 -0
  822. package/dist/messaging/browser-task-mcp-notifier.js +164 -0
  823. package/dist/messaging/browser-task-screenshot-attachment.d.ts +62 -0
  824. package/dist/messaging/browser-task-screenshot-attachment.js +115 -0
  825. package/dist/messaging/constants.d.ts +0 -1
  826. package/dist/messaging/constants.js +0 -1
  827. package/dist/messaging/final-confirm-system-message-sender.d.ts +53 -0
  828. package/dist/messaging/final-confirm-system-message-sender.js +165 -0
  829. package/dist/messaging/magic-phrase.d.ts +16 -1
  830. package/dist/messaging/magic-phrase.js +60 -3
  831. package/dist/messaging/owner-channels.d.ts +40 -1
  832. package/dist/messaging/owner-channels.js +59 -1
  833. package/dist/messaging/purchase-system-message-sender.d.ts +54 -0
  834. package/dist/messaging/purchase-system-message-sender.js +213 -0
  835. package/dist/messaging/setup-welcome-dm.d.ts +0 -1
  836. package/dist/messaging/setup-welcome-dm.js +0 -1
  837. package/dist/messaging/url-extract.d.ts +0 -1
  838. package/dist/messaging/url-extract.js +5 -1
  839. package/dist/observers/browser-history-poller.d.ts +113 -0
  840. package/dist/observers/browser-history-poller.js +404 -0
  841. package/dist/observers/calendar-poller.d.ts +2 -1
  842. package/dist/observers/calendar-poller.js +76 -55
  843. package/dist/observers/context-index-reconciler-observer.d.ts +0 -1
  844. package/dist/observers/context-index-reconciler-observer.js +0 -1
  845. package/dist/observers/delegated-probe-observer.d.ts +0 -1
  846. package/dist/observers/delegated-probe-observer.js +0 -1
  847. package/dist/observers/delegated-sync-worker.d.ts +70 -10
  848. package/dist/observers/delegated-sync-worker.js +138 -12
  849. package/dist/observers/entity-mirror-observer.d.ts +0 -1
  850. package/dist/observers/entity-mirror-observer.js +0 -1
  851. package/dist/observers/git-delegated-cron.d.ts +0 -1
  852. package/dist/observers/git-delegated-cron.js +0 -1
  853. package/dist/observers/git-event-classifier.d.ts +0 -1
  854. package/dist/observers/git-event-classifier.js +0 -1
  855. package/dist/observers/git-watcher.d.ts +22 -1
  856. package/dist/observers/git-watcher.js +38 -9
  857. package/dist/observers/github-poller-classifier.d.ts +0 -1
  858. package/dist/observers/github-poller-classifier.js +0 -1
  859. package/dist/observers/github-poller.d.ts +3 -1
  860. package/dist/observers/github-poller.js +28 -3
  861. package/dist/observers/imminent-event-scheduler.d.ts +2 -1
  862. package/dist/observers/imminent-event-scheduler.js +30 -2
  863. package/dist/observers/mail-poller.d.ts +0 -1
  864. package/dist/observers/mail-poller.js +45 -18
  865. package/dist/observers/mail-reconciliation.d.ts +1 -2
  866. package/dist/observers/mail-reconciliation.js +1 -2
  867. package/dist/observers/manager.d.ts +7 -8
  868. package/dist/observers/manager.js +7 -8
  869. package/dist/observers/notion-poller.d.ts +2 -1
  870. package/dist/observers/notion-poller.js +44 -7
  871. package/dist/observers/observation-summarizer/index.d.ts +0 -1
  872. package/dist/observers/observation-summarizer/index.js +0 -1
  873. package/dist/observers/observation-summarizer/pre-filter.d.ts +0 -1
  874. package/dist/observers/observation-summarizer/pre-filter.js +0 -1
  875. package/dist/observers/observation-summarizer/response-parser.d.ts +0 -1
  876. package/dist/observers/observation-summarizer/response-parser.js +7 -7
  877. package/dist/observers/observation-summarizer/summarizer-client.d.ts +0 -1
  878. package/dist/observers/observation-summarizer/summarizer-client.js +0 -1
  879. package/dist/observers/observation-summarizer/summarizer-prompts.d.ts +0 -1
  880. package/dist/observers/observation-summarizer/summarizer-prompts.js +0 -1
  881. package/dist/observers/observation-summarizer/worker.d.ts +2 -1
  882. package/dist/observers/observation-summarizer/worker.js +25 -1
  883. package/dist/observers/obsidian-watcher.d.ts +0 -1
  884. package/dist/observers/obsidian-watcher.js +0 -1
  885. package/dist/observers/poll-guard.d.ts +62 -0
  886. package/dist/observers/poll-guard.js +88 -0
  887. package/dist/observers/primary-vault-watcher.d.ts +0 -1
  888. package/dist/observers/primary-vault-watcher.js +0 -1
  889. package/dist/observers/repository-management-cron.d.ts +0 -1
  890. package/dist/observers/repository-management-cron.js +0 -1
  891. package/dist/observers/skill-curation-walker.d.ts +0 -1
  892. package/dist/observers/skill-curation-walker.js +0 -1
  893. package/dist/safety/absolute-block-audit.d.ts +17 -1
  894. package/dist/safety/absolute-block-audit.js +28 -3
  895. package/dist/safety/agent-write-tracker.d.ts +42 -2
  896. package/dist/safety/agent-write-tracker.js +81 -2
  897. package/dist/safety/always-disallowed.d.ts +93 -3
  898. package/dist/safety/always-disallowed.js +504 -20
  899. package/dist/safety/audit.d.ts +37 -6
  900. package/dist/safety/audit.js +263 -15
  901. package/dist/safety/integration-write-tracker.d.ts +0 -1
  902. package/dist/safety/integration-write-tracker.js +0 -1
  903. package/dist/safety/outbound-purchase-guard.d.ts +60 -0
  904. package/dist/safety/outbound-purchase-guard.js +82 -0
  905. package/dist/safety/risk-classifier.d.ts +21 -6
  906. package/dist/safety/risk-classifier.js +296 -70
  907. package/dist/safety/subprocess-block-scanner.d.ts +88 -0
  908. package/dist/safety/subprocess-block-scanner.js +176 -0
  909. package/dist/scheduler/hourly-check-gate.d.ts +23 -10
  910. package/dist/scheduler/hourly-check-gate.js +11 -7
  911. package/dist/secrets/backend-api-key-env.d.ts +0 -1
  912. package/dist/secrets/backend-api-key-env.js +1 -1
  913. package/dist/secrets/codex-home-materializer.d.ts +0 -1
  914. package/dist/secrets/codex-home-materializer.js +0 -1
  915. package/dist/secrets/encrypted-blob-store.d.ts +0 -1
  916. package/dist/secrets/encrypted-blob-store.js +0 -1
  917. package/dist/secrets/platform-secret-store.d.ts +0 -1
  918. package/dist/secrets/platform-secret-store.js +0 -1
  919. package/dist/secrets/redaction.d.ts +0 -1
  920. package/dist/secrets/redaction.js +0 -1
  921. package/dist/secrets/secret-broker.d.ts +0 -2
  922. package/dist/secrets/secret-broker.js +0 -4
  923. package/dist/secrets/secret-names.d.ts +1 -2
  924. package/dist/secrets/secret-names.js +0 -2
  925. package/dist/secrets/secret-store.d.ts +0 -1
  926. package/dist/secrets/secret-store.js +0 -1
  927. package/dist/secrets/types.d.ts +0 -1
  928. package/dist/secrets/types.js +0 -1
  929. package/dist/services/apple-calendar/caldav-client.d.ts +0 -1
  930. package/dist/services/apple-calendar/caldav-client.js +0 -1
  931. package/dist/services/apple-calendar/caldav-codec.d.ts +0 -1
  932. package/dist/services/apple-calendar/caldav-codec.js +0 -1
  933. package/dist/services/apple-calendar/index.d.ts +0 -1
  934. package/dist/services/apple-calendar/index.js +0 -1
  935. package/dist/services/apple-calendar/service.d.ts +0 -1
  936. package/dist/services/apple-calendar/service.js +0 -1
  937. package/dist/services/apple-calendar/types.d.ts +0 -1
  938. package/dist/services/apple-calendar/types.js +0 -1
  939. package/dist/services/attachments/hardlink.d.ts +0 -1
  940. package/dist/services/attachments/hardlink.js +0 -1
  941. package/dist/services/attachments/sanitize.d.ts +0 -1
  942. package/dist/services/attachments/sanitize.js +0 -1
  943. package/dist/services/attachments/store.d.ts +0 -1
  944. package/dist/services/attachments/store.js +1 -3
  945. package/dist/services/browser-history/automation/browser-task-tools/dom-snapshot-output.d.ts +48 -0
  946. package/dist/services/browser-history/automation/browser-task-tools/dom-snapshot-output.js +98 -0
  947. package/dist/services/browser-history/automation/browser-task-tools/extract-cap.d.ts +76 -0
  948. package/dist/services/browser-history/automation/browser-task-tools/extract-cap.js +79 -0
  949. package/dist/services/browser-history/automation/browser-task-tools/extract-output.d.ts +66 -0
  950. package/dist/services/browser-history/automation/browser-task-tools/extract-output.js +69 -0
  951. package/dist/services/browser-history/automation/browser-task-tools/final-confirm-gate.d.ts +129 -0
  952. package/dist/services/browser-history/automation/browser-task-tools/final-confirm-gate.js +150 -0
  953. package/dist/services/browser-history/automation/browser-task-tools/loop-guard.d.ts +95 -0
  954. package/dist/services/browser-history/automation/browser-task-tools/loop-guard.js +123 -0
  955. package/dist/services/browser-history/automation/browser-task-tools/navigate-guard.d.ts +54 -0
  956. package/dist/services/browser-history/automation/browser-task-tools/navigate-guard.js +62 -0
  957. package/dist/services/browser-history/automation/browser-task-tools/schemas.d.ts +201 -0
  958. package/dist/services/browser-history/automation/browser-task-tools/schemas.js +248 -0
  959. package/dist/services/browser-history/automation/browser-task-tools/screenshot-output.d.ts +76 -0
  960. package/dist/services/browser-history/automation/browser-task-tools/screenshot-output.js +101 -0
  961. package/dist/services/browser-history/automation/browser-task-tools/server.d.ts +240 -0
  962. package/dist/services/browser-history/automation/browser-task-tools/server.js +1016 -0
  963. package/dist/services/browser-history/automation/cdp-network-interception.d.ts +74 -0
  964. package/dist/services/browser-history/automation/cdp-network-interception.js +106 -0
  965. package/dist/services/browser-history/automation/egress-denylist.d.ts +167 -0
  966. package/dist/services/browser-history/automation/egress-denylist.js +452 -0
  967. package/dist/services/browser-history/automation/external-content.d.ts +72 -0
  968. package/dist/services/browser-history/automation/external-content.js +0 -0
  969. package/dist/services/browser-history/automation/final-confirm-handler.d.ts +178 -0
  970. package/dist/services/browser-history/automation/final-confirm-handler.js +462 -0
  971. package/dist/services/browser-history/automation/lite-final-confirm-tokens.d.ts +100 -0
  972. package/dist/services/browser-history/automation/lite-final-confirm-tokens.js +126 -0
  973. package/dist/services/browser-history/automation/payment-path-blocker.d.ts +62 -0
  974. package/dist/services/browser-history/automation/payment-path-blocker.js +113 -0
  975. package/dist/services/browser-history/automation/purchase-handler.d.ts +344 -0
  976. package/dist/services/browser-history/automation/purchase-handler.js +666 -0
  977. package/dist/services/browser-history/automation/purchase-tokens.d.ts +265 -0
  978. package/dist/services/browser-history/automation/purchase-tokens.js +271 -0
  979. package/dist/services/browser-history/automation/site-registry.d.ts +176 -0
  980. package/dist/services/browser-history/automation/site-registry.js +290 -0
  981. package/dist/services/browser-history/automation/trace-store-paths.d.ts +80 -0
  982. package/dist/services/browser-history/automation/trace-store-paths.js +119 -0
  983. package/dist/services/browser-history/automation/trace-store.d.ts +29 -0
  984. package/dist/services/browser-history/automation/trace-store.js +63 -0
  985. package/dist/services/browser-history/cleanup-interests-reflection.d.ts +39 -0
  986. package/dist/services/browser-history/cleanup-interests-reflection.js +204 -0
  987. package/dist/services/browser-history/detectors/atlas.d.ts +2 -0
  988. package/dist/services/browser-history/detectors/atlas.js +4 -0
  989. package/dist/services/browser-history/detectors/chrome.d.ts +2 -0
  990. package/dist/services/browser-history/detectors/chrome.js +4 -0
  991. package/dist/services/browser-history/detectors/chromium.d.ts +2 -0
  992. package/dist/services/browser-history/detectors/chromium.js +193 -0
  993. package/dist/services/browser-history/detectors/comet.d.ts +2 -0
  994. package/dist/services/browser-history/detectors/comet.js +4 -0
  995. package/dist/services/browser-history/detectors/registry.d.ts +15 -0
  996. package/dist/services/browser-history/detectors/registry.js +82 -0
  997. package/dist/services/browser-history/history-mtime.d.ts +8 -0
  998. package/dist/services/browser-history/history-mtime.js +31 -0
  999. package/dist/services/browser-history/interests-reflection-lock.d.ts +26 -0
  1000. package/dist/services/browser-history/interests-reflection-lock.js +84 -0
  1001. package/dist/services/browser-history/lifecycle/chromium-install.d.ts +78 -0
  1002. package/dist/services/browser-history/lifecycle/chromium-install.js +206 -0
  1003. package/dist/services/browser-history/lifecycle/chromium-launcher.d.ts +77 -0
  1004. package/dist/services/browser-history/lifecycle/chromium-launcher.js +288 -0
  1005. package/dist/services/browser-history/lifecycle/failure-escalation.d.ts +3 -0
  1006. package/dist/services/browser-history/lifecycle/failure-escalation.js +54 -0
  1007. package/dist/services/browser-history/lifecycle/health-check.d.ts +8 -0
  1008. package/dist/services/browser-history/lifecycle/health-check.js +17 -0
  1009. package/dist/services/browser-history/lifecycle/platform.d.ts +99 -0
  1010. package/dist/services/browser-history/lifecycle/platform.js +597 -0
  1011. package/dist/services/browser-history/lifecycle/supervisor.d.ts +24 -0
  1012. package/dist/services/browser-history/lifecycle/supervisor.js +334 -0
  1013. package/dist/services/browser-history/managed-chromium/cdp-connect.d.ts +110 -0
  1014. package/dist/services/browser-history/managed-chromium/cdp-connect.js +171 -0
  1015. package/dist/services/browser-history/managed-chromium/instance-a-config.d.ts +116 -0
  1016. package/dist/services/browser-history/managed-chromium/instance-a-config.js +164 -0
  1017. package/dist/services/browser-history/managed-chromium/instance-a-launcher.d.ts +82 -0
  1018. package/dist/services/browser-history/managed-chromium/instance-a-launcher.js +200 -0
  1019. package/dist/services/browser-history/managed-chromium/managed-chromium-supervisor.d.ts +69 -0
  1020. package/dist/services/browser-history/managed-chromium/managed-chromium-supervisor.js +334 -0
  1021. package/dist/services/browser-history/managed-chromium/reauth-detector.d.ts +60 -0
  1022. package/dist/services/browser-history/managed-chromium/reauth-detector.js +179 -0
  1023. package/dist/services/browser-history/managed-chromium/sandbox-install.d.ts +69 -0
  1024. package/dist/services/browser-history/managed-chromium/sandbox-install.js +123 -0
  1025. package/dist/services/browser-history/managed-chromium/sandbox-launcher.d.ts +117 -0
  1026. package/dist/services/browser-history/managed-chromium/sandbox-launcher.js +244 -0
  1027. package/dist/services/browser-history/managed-chromium/setup-bootstrap.d.ts +149 -0
  1028. package/dist/services/browser-history/managed-chromium/setup-bootstrap.js +404 -0
  1029. package/dist/services/browser-history/managed-chromium/site-bootstrap.d.ts +133 -0
  1030. package/dist/services/browser-history/managed-chromium/site-bootstrap.js +360 -0
  1031. package/dist/services/browser-history/managed-chromium/supervisor-config.d.ts +75 -0
  1032. package/dist/services/browser-history/managed-chromium/supervisor-config.js +146 -0
  1033. package/dist/services/browser-history/managed-chromium/types.d.ts +199 -0
  1034. package/dist/services/browser-history/managed-chromium/types.js +116 -0
  1035. package/dist/services/browser-history/pipeline/amazon-extractor.d.ts +11 -0
  1036. package/dist/services/browser-history/pipeline/amazon-extractor.js +33 -0
  1037. package/dist/services/browser-history/pipeline/classifier.d.ts +7 -0
  1038. package/dist/services/browser-history/pipeline/classifier.js +208 -0
  1039. package/dist/services/browser-history/pipeline/cluster-extractor.d.ts +76 -0
  1040. package/dist/services/browser-history/pipeline/cluster-extractor.js +271 -0
  1041. package/dist/services/browser-history/pipeline/interests-block.d.ts +99 -0
  1042. package/dist/services/browser-history/pipeline/interests-block.js +333 -0
  1043. package/dist/services/browser-history/pipeline/meaningful-filter.d.ts +47 -0
  1044. package/dist/services/browser-history/pipeline/meaningful-filter.js +228 -0
  1045. package/dist/services/browser-history/pipeline/offer-rate-limit.d.ts +75 -0
  1046. package/dist/services/browser-history/pipeline/offer-rate-limit.js +188 -0
  1047. package/dist/services/browser-history/pipeline/offer-triggers.d.ts +150 -0
  1048. package/dist/services/browser-history/pipeline/offer-triggers.js +164 -0
  1049. package/dist/services/browser-history/pipeline/pre-morning-digest.d.ts +118 -0
  1050. package/dist/services/browser-history/pipeline/pre-morning-digest.js +399 -0
  1051. package/dist/services/browser-history/pipeline/project-matcher.d.ts +26 -0
  1052. package/dist/services/browser-history/pipeline/project-matcher.js +314 -0
  1053. package/dist/services/browser-history/pipeline/redactor.d.ts +15 -0
  1054. package/dist/services/browser-history/pipeline/redactor.js +119 -0
  1055. package/dist/services/browser-history/pipeline/reload-detector.d.ts +6 -0
  1056. package/dist/services/browser-history/pipeline/reload-detector.js +16 -0
  1057. package/dist/services/browser-history/pipeline/sensitive-hosts.d.ts +2 -0
  1058. package/dist/services/browser-history/pipeline/sensitive-hosts.js +173 -0
  1059. package/dist/services/browser-history/pipeline/summarizer.d.ts +52 -0
  1060. package/dist/services/browser-history/pipeline/summarizer.js +97 -0
  1061. package/dist/services/browser-history/pipeline/weekly-interests-summary.d.ts +139 -0
  1062. package/dist/services/browser-history/pipeline/weekly-interests-summary.js +227 -0
  1063. package/dist/services/browser-history/readers/chromium-reader.d.ts +30 -0
  1064. package/dist/services/browser-history/readers/chromium-reader.js +139 -0
  1065. package/dist/services/browser-history/readers/snapshot.d.ts +19 -0
  1066. package/dist/services/browser-history/readers/snapshot.js +67 -0
  1067. package/dist/services/browser-history/refresh-interests-reflection.d.ts +125 -0
  1068. package/dist/services/browser-history/refresh-interests-reflection.js +424 -0
  1069. package/dist/services/browser-history/types.d.ts +60 -0
  1070. package/dist/services/browser-history/types.js +1 -0
  1071. package/dist/services/browser-task/browser-task-allowlist.d.ts +107 -0
  1072. package/dist/services/browser-task/browser-task-allowlist.js +247 -0
  1073. package/dist/services/browser-task/browser-task-deadline-scanner.d.ts +76 -0
  1074. package/dist/services/browser-task/browser-task-deadline-scanner.js +68 -0
  1075. package/dist/services/browser-task/browser-task-driver.d.ts +188 -0
  1076. package/dist/services/browser-task/browser-task-driver.js +714 -0
  1077. package/dist/services/browser-task/browser-task-runner.d.ts +166 -0
  1078. package/dist/services/browser-task/browser-task-runner.js +781 -0
  1079. package/dist/services/browser-task/browser-task-slots.d.ts +212 -0
  1080. package/dist/services/browser-task/browser-task-slots.js +404 -0
  1081. package/dist/services/browser-task/browser-task-transition-events.d.ts +76 -0
  1082. package/dist/services/browser-task/browser-task-transition-events.js +80 -0
  1083. package/dist/services/calendar/outlook/graph-calendar-client.d.ts +0 -1
  1084. package/dist/services/calendar/outlook/graph-calendar-client.js +0 -1
  1085. package/dist/services/calendar.d.ts +0 -1
  1086. package/dist/services/calendar.js +21 -16
  1087. package/dist/services/delegated-backend-invoker.d.ts +0 -1
  1088. package/dist/services/delegated-backend-invoker.js +8 -2
  1089. package/dist/services/delegated-invoker-audit.d.ts +0 -1
  1090. package/dist/services/delegated-invoker-audit.js +5 -2
  1091. package/dist/services/delegated-invoker-cache-hits.d.ts +0 -1
  1092. package/dist/services/delegated-invoker-cache-hits.js +0 -1
  1093. package/dist/services/delegated-invoker-janitors.d.ts +0 -1
  1094. package/dist/services/delegated-invoker-janitors.js +0 -1
  1095. package/dist/services/delegated-invoker-utils.d.ts +0 -1
  1096. package/dist/services/delegated-invoker-utils.js +0 -1
  1097. package/dist/services/delegated-proxy-config.d.ts +3 -3
  1098. package/dist/services/delegated-proxy-config.js +0 -1
  1099. package/dist/services/delegated-task-result-cache.d.ts +0 -1
  1100. package/dist/services/delegated-task-result-cache.js +0 -0
  1101. package/dist/services/delegated-task-runtime.d.ts +0 -1
  1102. package/dist/services/delegated-task-runtime.js +0 -1
  1103. package/dist/services/delegated-task-session-pool.d.ts +0 -1
  1104. package/dist/services/delegated-task-session-pool.js +0 -1
  1105. package/dist/services/delegated-tool-runtime.d.ts +0 -1
  1106. package/dist/services/delegated-tool-runtime.js +0 -1
  1107. package/dist/services/fts5.d.ts +0 -1
  1108. package/dist/services/fts5.js +0 -1
  1109. package/dist/services/git-account-registry.d.ts +0 -1
  1110. package/dist/services/git-account-registry.js +0 -1
  1111. package/dist/services/github.d.ts +9 -40
  1112. package/dist/services/github.js +9 -107
  1113. package/dist/services/gmail-classifier.d.ts +0 -1
  1114. package/dist/services/gmail-classifier.js +0 -1
  1115. package/dist/services/gmail.d.ts +0 -1
  1116. package/dist/services/gmail.js +31 -52
  1117. package/dist/services/google-auth.d.ts +0 -1
  1118. package/dist/services/google-auth.js +0 -1
  1119. package/dist/services/integrations/extract-write-item-id.d.ts +5 -3
  1120. package/dist/services/integrations/extract-write-item-id.js +6 -1
  1121. package/dist/services/integrations/reconcile.d.ts +0 -1
  1122. package/dist/services/integrations/reconcile.js +0 -1
  1123. package/dist/services/integrations/snapshot-partitions.d.ts +0 -1
  1124. package/dist/services/integrations/snapshot-partitions.js +8 -1
  1125. package/dist/services/journal/render.d.ts +0 -1
  1126. package/dist/services/journal/render.js +0 -1
  1127. package/dist/services/journal/writer.d.ts +0 -1
  1128. package/dist/services/journal/writer.js +0 -1
  1129. package/dist/services/mail/account-registry.d.ts +0 -1
  1130. package/dist/services/mail/account-registry.js +7 -3
  1131. package/dist/services/mail/gmail/auth-failure-classifier.d.ts +0 -1
  1132. package/dist/services/mail/gmail/auth-failure-classifier.js +0 -1
  1133. package/dist/services/mail/gmail/gmail-provider.d.ts +0 -1
  1134. package/dist/services/mail/gmail/gmail-provider.js +0 -1
  1135. package/dist/services/mail/gmail/legacy-row.d.ts +0 -1
  1136. package/dist/services/mail/gmail/legacy-row.js +0 -1
  1137. package/dist/services/mail/gmail/poll-cursor.d.ts +0 -1
  1138. package/dist/services/mail/gmail/poll-cursor.js +0 -1
  1139. package/dist/services/mail/html-to-plaintext.d.ts +0 -1
  1140. package/dist/services/mail/html-to-plaintext.js +0 -1
  1141. package/dist/services/mail/imap/app-password.d.ts +0 -1
  1142. package/dist/services/mail/imap/app-password.js +0 -1
  1143. package/dist/services/mail/imap/auth-failure-classifier.d.ts +0 -1
  1144. package/dist/services/mail/imap/auth-failure-classifier.js +0 -1
  1145. package/dist/services/mail/imap/capabilities.d.ts +0 -1
  1146. package/dist/services/mail/imap/capabilities.js +0 -1
  1147. package/dist/services/mail/imap/client.d.ts +0 -1
  1148. package/dist/services/mail/imap/client.js +0 -1
  1149. package/dist/services/mail/imap/cursor.d.ts +0 -1
  1150. package/dist/services/mail/imap/cursor.js +0 -1
  1151. package/dist/services/mail/imap/folder-resolver.d.ts +0 -1
  1152. package/dist/services/mail/imap/folder-resolver.js +0 -1
  1153. package/dist/services/mail/imap/icloud-provider.d.ts +0 -1
  1154. package/dist/services/mail/imap/icloud-provider.js +0 -1
  1155. package/dist/services/mail/imap/imap-provider-base.d.ts +0 -1
  1156. package/dist/services/mail/imap/imap-provider-base.js +12 -7
  1157. package/dist/services/mail/imap/query-translator.d.ts +0 -1
  1158. package/dist/services/mail/imap/query-translator.js +0 -1
  1159. package/dist/services/mail/imap/reconcile-planner.d.ts +0 -1
  1160. package/dist/services/mail/imap/reconcile-planner.js +0 -1
  1161. package/dist/services/mail/imap/reply-mime.d.ts +0 -1
  1162. package/dist/services/mail/imap/reply-mime.js +0 -1
  1163. package/dist/services/mail/imap/yahoo-provider.d.ts +0 -1
  1164. package/dist/services/mail/imap/yahoo-provider.js +0 -1
  1165. package/dist/services/mail/mail-search.d.ts +0 -1
  1166. package/dist/services/mail/mail-search.js +0 -1
  1167. package/dist/services/mail/outlook/auth-failure-classifier.d.ts +0 -1
  1168. package/dist/services/mail/outlook/auth-failure-classifier.js +0 -1
  1169. package/dist/services/mail/outlook/client-config.d.ts +0 -1
  1170. package/dist/services/mail/outlook/client-config.js +0 -1
  1171. package/dist/services/mail/outlook/delta-cursor.d.ts +0 -1
  1172. package/dist/services/mail/outlook/delta-cursor.js +0 -1
  1173. package/dist/services/mail/outlook/graph-client.d.ts +0 -1
  1174. package/dist/services/mail/outlook/graph-client.js +0 -1
  1175. package/dist/services/mail/outlook/msal-app-factory.d.ts +0 -1
  1176. package/dist/services/mail/outlook/msal-app-factory.js +0 -1
  1177. package/dist/services/mail/outlook/msal-cache-plugin.d.ts +0 -1
  1178. package/dist/services/mail/outlook/msal-cache-plugin.js +0 -1
  1179. package/dist/services/mail/outlook/oauth-device-code.d.ts +0 -1
  1180. package/dist/services/mail/outlook/oauth-device-code.js +0 -1
  1181. package/dist/services/mail/outlook/oauth-loopback.d.ts +0 -1
  1182. package/dist/services/mail/outlook/oauth-loopback.js +0 -1
  1183. package/dist/services/mail/outlook/outlook-provider.d.ts +0 -1
  1184. package/dist/services/mail/outlook/outlook-provider.js +0 -1
  1185. package/dist/services/mail/outlook/query-translator.d.ts +0 -1
  1186. package/dist/services/mail/outlook/query-translator.js +0 -1
  1187. package/dist/services/mail/provider.d.ts +0 -1
  1188. package/dist/services/mail/provider.js +0 -1
  1189. package/dist/services/mail/query-utils.d.ts +0 -1
  1190. package/dist/services/mail/query-utils.js +0 -1
  1191. package/dist/services/mail-classifier.d.ts +0 -1
  1192. package/dist/services/mail-classifier.js +0 -1
  1193. package/dist/services/mail-ingestion.d.ts +0 -1
  1194. package/dist/services/mail-ingestion.js +0 -1
  1195. package/dist/services/mcp/auto-probe.d.ts +0 -1
  1196. package/dist/services/mcp/auto-probe.js +0 -1
  1197. package/dist/services/mcp/generators/claude.d.ts +0 -1
  1198. package/dist/services/mcp/generators/claude.js +0 -1
  1199. package/dist/services/mcp/generators/codex.d.ts +0 -1
  1200. package/dist/services/mcp/generators/codex.js +0 -1
  1201. package/dist/services/mcp/generators/gemini.d.ts +0 -1
  1202. package/dist/services/mcp/generators/gemini.js +0 -1
  1203. package/dist/services/mcp/generators/index.d.ts +1 -1
  1204. package/dist/services/mcp/generators/index.js +3 -1
  1205. package/dist/services/mcp/generators/types.d.ts +0 -1
  1206. package/dist/services/mcp/generators/types.js +0 -1
  1207. package/dist/services/mcp/probe.d.ts +0 -1
  1208. package/dist/services/mcp/probe.js +7 -1
  1209. package/dist/services/mcp/registry.d.ts +0 -1
  1210. package/dist/services/mcp/registry.js +0 -1
  1211. package/dist/services/mcp/risk.d.ts +1 -2
  1212. package/dist/services/mcp/risk.js +1 -2
  1213. package/dist/services/mcp/sdk-observations-server.d.ts +59 -0
  1214. package/dist/services/mcp/sdk-observations-server.js +160 -0
  1215. package/dist/services/mcp/session-materializer.d.ts +2 -3
  1216. package/dist/services/mcp/session-materializer.js +15 -12
  1217. package/dist/services/mcp/tool-audit.d.ts +0 -1
  1218. package/dist/services/mcp/tool-audit.js +0 -1
  1219. package/dist/services/mcp/types.d.ts +1 -1
  1220. package/dist/services/mcp/types.js +0 -1
  1221. package/dist/services/notion.d.ts +17 -2
  1222. package/dist/services/notion.js +39 -3
  1223. package/dist/services/observations-batch.d.ts +98 -0
  1224. package/dist/services/observations-batch.js +256 -0
  1225. package/dist/services/obsidian.d.ts +0 -1
  1226. package/dist/services/obsidian.js +0 -1
  1227. package/dist/services/service-registry.d.ts +0 -3
  1228. package/dist/services/service-registry.js +0 -2
  1229. package/dist/services/voice/transcriber-impl.d.ts +0 -1
  1230. package/dist/services/voice/transcriber-impl.js +21 -20
  1231. package/dist/services/voice/transcriber.d.ts +22 -2
  1232. package/dist/services/voice/transcriber.js +68 -11
  1233. package/dist/settings/runtime-settings.d.ts +52 -8
  1234. package/dist/settings/runtime-settings.js +172 -20
  1235. package/dist/settings/settings-store.d.ts +0 -1
  1236. package/dist/settings/settings-store.js +44 -2
  1237. package/native/win-appcontainer/README.md +66 -0
  1238. package/native/win-appcontainer/binding.gyp +33 -0
  1239. package/native/win-appcontainer/loader.js +29 -0
  1240. package/native/win-appcontainer/package.json +18 -0
  1241. package/native/win-appcontainer/src/win_appcontainer.cc +67 -0
  1242. package/package.json +8 -3
  1243. package/dist/adapters/composite-dashboard-stream.d.ts.map +0 -1
  1244. package/dist/adapters/composite-dashboard-stream.js.map +0 -1
  1245. package/dist/adapters/dashboard-adapter.d.ts.map +0 -1
  1246. package/dist/adapters/dashboard-adapter.js.map +0 -1
  1247. package/dist/adapters/discord.d.ts.map +0 -1
  1248. package/dist/adapters/discord.js.map +0 -1
  1249. package/dist/adapters/docs-qa-adapter.d.ts.map +0 -1
  1250. package/dist/adapters/docs-qa-adapter.js.map +0 -1
  1251. package/dist/adapters/message-hub.d.ts.map +0 -1
  1252. package/dist/adapters/message-hub.js.map +0 -1
  1253. package/dist/adapters/notification-manager.d.ts.map +0 -1
  1254. package/dist/adapters/notification-manager.js.map +0 -1
  1255. package/dist/adapters/outbound-text.d.ts.map +0 -1
  1256. package/dist/adapters/outbound-text.js.map +0 -1
  1257. package/dist/adapters/slack-adapter.d.ts.map +0 -1
  1258. package/dist/adapters/slack-adapter.js.map +0 -1
  1259. package/dist/adapters/telegram-adapter.d.ts.map +0 -1
  1260. package/dist/adapters/telegram-adapter.js.map +0 -1
  1261. package/dist/adapters/types.d.ts.map +0 -1
  1262. package/dist/adapters/types.js.map +0 -1
  1263. package/dist/adapters/whatsapp-adapter.d.ts.map +0 -1
  1264. package/dist/adapters/whatsapp-adapter.js.map +0 -1
  1265. package/dist/api/chat-binding-query.d.ts.map +0 -1
  1266. package/dist/api/chat-binding-query.js.map +0 -1
  1267. package/dist/api/chat-session-resume.d.ts.map +0 -1
  1268. package/dist/api/chat-session-resume.js.map +0 -1
  1269. package/dist/api/delegated-proxy-helper.d.ts +0 -33
  1270. package/dist/api/delegated-proxy-helper.d.ts.map +0 -1
  1271. package/dist/api/delegated-proxy-helper.js +0 -54
  1272. package/dist/api/delegated-proxy-helper.js.map +0 -1
  1273. package/dist/api/directory-picker.d.ts.map +0 -1
  1274. package/dist/api/directory-picker.js.map +0 -1
  1275. package/dist/api/env-writer.d.ts.map +0 -1
  1276. package/dist/api/env-writer.js.map +0 -1
  1277. package/dist/api/integration-route-gate.d.ts.map +0 -1
  1278. package/dist/api/integration-route-gate.js.map +0 -1
  1279. package/dist/api/json-body.d.ts.map +0 -1
  1280. package/dist/api/json-body.js.map +0 -1
  1281. package/dist/api/routes/activity-sources.d.ts.map +0 -1
  1282. package/dist/api/routes/activity-sources.js.map +0 -1
  1283. package/dist/api/routes/agent.d.ts.map +0 -1
  1284. package/dist/api/routes/agent.js.map +0 -1
  1285. package/dist/api/routes/apple-calendar.d.ts.map +0 -1
  1286. package/dist/api/routes/apple-calendar.js.map +0 -1
  1287. package/dist/api/routes/attachments.d.ts.map +0 -1
  1288. package/dist/api/routes/attachments.js.map +0 -1
  1289. package/dist/api/routes/backends.d.ts.map +0 -1
  1290. package/dist/api/routes/backends.js.map +0 -1
  1291. package/dist/api/routes/books.d.ts.map +0 -1
  1292. package/dist/api/routes/books.js.map +0 -1
  1293. package/dist/api/routes/calendar.d.ts.map +0 -1
  1294. package/dist/api/routes/calendar.js.map +0 -1
  1295. package/dist/api/routes/commands.d.ts.map +0 -1
  1296. package/dist/api/routes/commands.js.map +0 -1
  1297. package/dist/api/routes/context.d.ts +0 -57
  1298. package/dist/api/routes/context.d.ts.map +0 -1
  1299. package/dist/api/routes/context.js +0 -1788
  1300. package/dist/api/routes/context.js.map +0 -1
  1301. package/dist/api/routes/dashboard.d.ts +0 -29
  1302. package/dist/api/routes/dashboard.d.ts.map +0 -1
  1303. package/dist/api/routes/dashboard.js +0 -2160
  1304. package/dist/api/routes/dashboard.js.map +0 -1
  1305. package/dist/api/routes/delegated-sync.d.ts.map +0 -1
  1306. package/dist/api/routes/delegated-sync.js.map +0 -1
  1307. package/dist/api/routes/delegated.d.ts.map +0 -1
  1308. package/dist/api/routes/delegated.js.map +0 -1
  1309. package/dist/api/routes/docs.d.ts.map +0 -1
  1310. package/dist/api/routes/docs.js.map +0 -1
  1311. package/dist/api/routes/entities.d.ts.map +0 -1
  1312. package/dist/api/routes/entities.js.map +0 -1
  1313. package/dist/api/routes/fs.d.ts.map +0 -1
  1314. package/dist/api/routes/fs.js.map +0 -1
  1315. package/dist/api/routes/fs.logic.d.ts.map +0 -1
  1316. package/dist/api/routes/fs.logic.js.map +0 -1
  1317. package/dist/api/routes/git-accounts.d.ts.map +0 -1
  1318. package/dist/api/routes/git-accounts.js.map +0 -1
  1319. package/dist/api/routes/git-templates.d.ts.map +0 -1
  1320. package/dist/api/routes/git-templates.js.map +0 -1
  1321. package/dist/api/routes/git.d.ts.map +0 -1
  1322. package/dist/api/routes/git.js.map +0 -1
  1323. package/dist/api/routes/github.d.ts.map +0 -1
  1324. package/dist/api/routes/github.js.map +0 -1
  1325. package/dist/api/routes/health.d.ts.map +0 -1
  1326. package/dist/api/routes/health.js.map +0 -1
  1327. package/dist/api/routes/integrations-reconcile.d.ts.map +0 -1
  1328. package/dist/api/routes/integrations-reconcile.js.map +0 -1
  1329. package/dist/api/routes/integrations.d.ts +0 -48
  1330. package/dist/api/routes/integrations.d.ts.map +0 -1
  1331. package/dist/api/routes/integrations.js +0 -1572
  1332. package/dist/api/routes/integrations.js.map +0 -1
  1333. package/dist/api/routes/knowledge.d.ts.map +0 -1
  1334. package/dist/api/routes/knowledge.js.map +0 -1
  1335. package/dist/api/routes/mail.d.ts +0 -39
  1336. package/dist/api/routes/mail.d.ts.map +0 -1
  1337. package/dist/api/routes/mail.js +0 -1472
  1338. package/dist/api/routes/mail.js.map +0 -1
  1339. package/dist/api/routes/managed-tasks.d.ts.map +0 -1
  1340. package/dist/api/routes/managed-tasks.js.map +0 -1
  1341. package/dist/api/routes/mcp.d.ts.map +0 -1
  1342. package/dist/api/routes/mcp.js.map +0 -1
  1343. package/dist/api/routes/metrics.d.ts.map +0 -1
  1344. package/dist/api/routes/metrics.js.map +0 -1
  1345. package/dist/api/routes/notion.d.ts.map +0 -1
  1346. package/dist/api/routes/notion.js.map +0 -1
  1347. package/dist/api/routes/observations.d.ts.map +0 -1
  1348. package/dist/api/routes/observations.js.map +0 -1
  1349. package/dist/api/routes/obsidian.d.ts.map +0 -1
  1350. package/dist/api/routes/obsidian.js.map +0 -1
  1351. package/dist/api/routes/profile-questions.d.ts.map +0 -1
  1352. package/dist/api/routes/profile-questions.js.map +0 -1
  1353. package/dist/api/routes/receipts.d.ts.map +0 -1
  1354. package/dist/api/routes/receipts.js.map +0 -1
  1355. package/dist/api/routes/recurring-schedules.d.ts.map +0 -1
  1356. package/dist/api/routes/recurring-schedules.js.map +0 -1
  1357. package/dist/api/routes/repositories.d.ts.map +0 -1
  1358. package/dist/api/routes/repositories.js.map +0 -1
  1359. package/dist/api/routes/setup-migrate.d.ts.map +0 -1
  1360. package/dist/api/routes/setup-migrate.js.map +0 -1
  1361. package/dist/api/routes/setup.d.ts.map +0 -1
  1362. package/dist/api/routes/setup.js.map +0 -1
  1363. package/dist/api/routes/skill-curation.d.ts.map +0 -1
  1364. package/dist/api/routes/skill-curation.js.map +0 -1
  1365. package/dist/api/routes/skills.d.ts.map +0 -1
  1366. package/dist/api/routes/skills.js.map +0 -1
  1367. package/dist/api/routes/sot-bindings.d.ts.map +0 -1
  1368. package/dist/api/routes/sot-bindings.js.map +0 -1
  1369. package/dist/api/routes/sse.d.ts.map +0 -1
  1370. package/dist/api/routes/sse.js.map +0 -1
  1371. package/dist/api/routes/system.d.ts.map +0 -1
  1372. package/dist/api/routes/system.js.map +0 -1
  1373. package/dist/api/routes/task-flows.d.ts.map +0 -1
  1374. package/dist/api/routes/task-flows.js.map +0 -1
  1375. package/dist/api/routes/travel-bookings.d.ts.map +0 -1
  1376. package/dist/api/routes/travel-bookings.js.map +0 -1
  1377. package/dist/api/routes/travel-time.d.ts +0 -8
  1378. package/dist/api/routes/travel-time.d.ts.map +0 -1
  1379. package/dist/api/routes/travel-time.js +0 -87
  1380. package/dist/api/routes/travel-time.js.map +0 -1
  1381. package/dist/api/routes/triggers.d.ts.map +0 -1
  1382. package/dist/api/routes/triggers.js.map +0 -1
  1383. package/dist/api/routes/voice.d.ts.map +0 -1
  1384. package/dist/api/routes/voice.js.map +0 -1
  1385. package/dist/api/routes/wiki.d.ts.map +0 -1
  1386. package/dist/api/routes/wiki.js.map +0 -1
  1387. package/dist/api/server.d.ts.map +0 -1
  1388. package/dist/api/server.js.map +0 -1
  1389. package/dist/bootstrap/adapters.d.ts.map +0 -1
  1390. package/dist/bootstrap/adapters.js.map +0 -1
  1391. package/dist/bootstrap/catchup.d.ts.map +0 -1
  1392. package/dist/bootstrap/catchup.js.map +0 -1
  1393. package/dist/bootstrap/schedule-helpers.d.ts.map +0 -1
  1394. package/dist/bootstrap/schedule-helpers.js.map +0 -1
  1395. package/dist/bootstrap/services.d.ts.map +0 -1
  1396. package/dist/bootstrap/services.js.map +0 -1
  1397. package/dist/config.d.ts.map +0 -1
  1398. package/dist/config.js.map +0 -1
  1399. package/dist/core/agent-core.d.ts.map +0 -1
  1400. package/dist/core/agent-core.js.map +0 -1
  1401. package/dist/core/alerts.d.ts.map +0 -1
  1402. package/dist/core/alerts.js.map +0 -1
  1403. package/dist/core/atomic-write.d.ts.map +0 -1
  1404. package/dist/core/atomic-write.js.map +0 -1
  1405. package/dist/core/backends/api-key-probe.d.ts.map +0 -1
  1406. package/dist/core/backends/api-key-probe.js.map +0 -1
  1407. package/dist/core/backends/auth-health-monitor.d.ts.map +0 -1
  1408. package/dist/core/backends/auth-health-monitor.js.map +0 -1
  1409. package/dist/core/backends/auth-recovery.d.ts.map +0 -1
  1410. package/dist/core/backends/auth-recovery.js.map +0 -1
  1411. package/dist/core/backends/auth-telemetry.d.ts.map +0 -1
  1412. package/dist/core/backends/auth-telemetry.js.map +0 -1
  1413. package/dist/core/backends/backend-router.d.ts.map +0 -1
  1414. package/dist/core/backends/backend-router.js.map +0 -1
  1415. package/dist/core/backends/claude-auth.d.ts.map +0 -1
  1416. package/dist/core/backends/claude-auth.js.map +0 -1
  1417. package/dist/core/backends/claude-code-core.d.ts.map +0 -1
  1418. package/dist/core/backends/claude-code-core.js.map +0 -1
  1419. package/dist/core/backends/claude-credentials-store.d.ts.map +0 -1
  1420. package/dist/core/backends/claude-credentials-store.js.map +0 -1
  1421. package/dist/core/backends/claude-delegated.d.ts.map +0 -1
  1422. package/dist/core/backends/claude-delegated.js.map +0 -1
  1423. package/dist/core/backends/claude-errors.d.ts.map +0 -1
  1424. package/dist/core/backends/claude-errors.js.map +0 -1
  1425. package/dist/core/backends/claude-probe.d.ts.map +0 -1
  1426. package/dist/core/backends/claude-probe.js.map +0 -1
  1427. package/dist/core/backends/claude-tool-collection.d.ts.map +0 -1
  1428. package/dist/core/backends/claude-tool-collection.js.map +0 -1
  1429. package/dist/core/backends/cli-utils.d.ts.map +0 -1
  1430. package/dist/core/backends/cli-utils.js.map +0 -1
  1431. package/dist/core/backends/codex-core.d.ts.map +0 -1
  1432. package/dist/core/backends/codex-core.js.map +0 -1
  1433. package/dist/core/backends/gemini-cli-core.d.ts.map +0 -1
  1434. package/dist/core/backends/gemini-cli-core.js.map +0 -1
  1435. package/dist/core/backends/idle-watchdog.d.ts.map +0 -1
  1436. package/dist/core/backends/idle-watchdog.js.map +0 -1
  1437. package/dist/core/backends/install-methods.d.ts.map +0 -1
  1438. package/dist/core/backends/install-methods.js.map +0 -1
  1439. package/dist/core/backends/model-registry.d.ts.map +0 -1
  1440. package/dist/core/backends/model-registry.js.map +0 -1
  1441. package/dist/core/backends/plan-presets.d.ts.map +0 -1
  1442. package/dist/core/backends/plan-presets.js.map +0 -1
  1443. package/dist/core/backends/price-fetcher.d.ts.map +0 -1
  1444. package/dist/core/backends/price-fetcher.js.map +0 -1
  1445. package/dist/core/backends/process-config-cascade.d.ts.map +0 -1
  1446. package/dist/core/backends/process-config-cascade.js.map +0 -1
  1447. package/dist/core/backends/prompt-utils.d.ts.map +0 -1
  1448. package/dist/core/backends/prompt-utils.js.map +0 -1
  1449. package/dist/core/backends/proxy-model-registry.d.ts.map +0 -1
  1450. package/dist/core/backends/proxy-model-registry.js.map +0 -1
  1451. package/dist/core/backends/silent-api-error-detector.d.ts.map +0 -1
  1452. package/dist/core/backends/silent-api-error-detector.js.map +0 -1
  1453. package/dist/core/bang-commands/commands-cost.d.ts.map +0 -1
  1454. package/dist/core/bang-commands/commands-cost.js.map +0 -1
  1455. package/dist/core/bang-commands/commands-help.d.ts.map +0 -1
  1456. package/dist/core/bang-commands/commands-help.js.map +0 -1
  1457. package/dist/core/bang-commands/commands-report.d.ts.map +0 -1
  1458. package/dist/core/bang-commands/commands-report.js.map +0 -1
  1459. package/dist/core/bang-commands/commands-stop-start.d.ts.map +0 -1
  1460. package/dist/core/bang-commands/commands-stop-start.js.map +0 -1
  1461. package/dist/core/bang-commands/commands-wiki.d.ts.map +0 -1
  1462. package/dist/core/bang-commands/commands-wiki.js.map +0 -1
  1463. package/dist/core/bang-commands/format-utils.d.ts.map +0 -1
  1464. package/dist/core/bang-commands/format-utils.js.map +0 -1
  1465. package/dist/core/bang-commands/index.d.ts.map +0 -1
  1466. package/dist/core/bang-commands/index.js.map +0 -1
  1467. package/dist/core/bang-commands/registry.d.ts.map +0 -1
  1468. package/dist/core/bang-commands/registry.js.map +0 -1
  1469. package/dist/core/bang-commands/user-commands.d.ts.map +0 -1
  1470. package/dist/core/bang-commands/user-commands.js.map +0 -1
  1471. package/dist/core/channel-timeline.d.ts.map +0 -1
  1472. package/dist/core/channel-timeline.js.map +0 -1
  1473. package/dist/core/character-block.d.ts.map +0 -1
  1474. package/dist/core/character-block.js.map +0 -1
  1475. package/dist/core/context/activity-sources.d.ts.map +0 -1
  1476. package/dist/core/context/activity-sources.js.map +0 -1
  1477. package/dist/core/context/activity-view-reconciler.d.ts.map +0 -1
  1478. package/dist/core/context/activity-view-reconciler.js.map +0 -1
  1479. package/dist/core/context/activity-view-runner.d.ts.map +0 -1
  1480. package/dist/core/context/activity-view-runner.js.map +0 -1
  1481. package/dist/core/context/default-schedules-reconciler.d.ts.map +0 -1
  1482. package/dist/core/context/default-schedules-reconciler.js.map +0 -1
  1483. package/dist/core/context/default-schedules-runner.d.ts.map +0 -1
  1484. package/dist/core/context/default-schedules-runner.js.map +0 -1
  1485. package/dist/core/context/domain-index-reconciler.d.ts.map +0 -1
  1486. package/dist/core/context/domain-index-reconciler.js.map +0 -1
  1487. package/dist/core/context/domain-index-runner.d.ts.map +0 -1
  1488. package/dist/core/context/domain-index-runner.js.map +0 -1
  1489. package/dist/core/context/entity-mirror.d.ts.map +0 -1
  1490. package/dist/core/context/entity-mirror.js.map +0 -1
  1491. package/dist/core/context/entity-source-rename.d.ts.map +0 -1
  1492. package/dist/core/context/entity-source-rename.js.map +0 -1
  1493. package/dist/core/context/index-reconciler.d.ts.map +0 -1
  1494. package/dist/core/context/index-reconciler.js.map +0 -1
  1495. package/dist/core/context/policy-index-reconciler.d.ts.map +0 -1
  1496. package/dist/core/context/policy-index-reconciler.js.map +0 -1
  1497. package/dist/core/context/policy-index-runner.d.ts.map +0 -1
  1498. package/dist/core/context/policy-index-runner.js.map +0 -1
  1499. package/dist/core/context/reconciler-runner.d.ts.map +0 -1
  1500. package/dist/core/context/reconciler-runner.js.map +0 -1
  1501. package/dist/core/context-builder.d.ts.map +0 -1
  1502. package/dist/core/context-builder.js.map +0 -1
  1503. package/dist/core/context-frontmatter-backfill.d.ts +0 -33
  1504. package/dist/core/context-frontmatter-backfill.d.ts.map +0 -1
  1505. package/dist/core/context-frontmatter-backfill.js +0 -111
  1506. package/dist/core/context-frontmatter-backfill.js.map +0 -1
  1507. package/dist/core/context-frontmatter.d.ts.map +0 -1
  1508. package/dist/core/context-frontmatter.js.map +0 -1
  1509. package/dist/core/context-health.d.ts.map +0 -1
  1510. package/dist/core/context-health.js.map +0 -1
  1511. package/dist/core/context-paths.d.ts.map +0 -1
  1512. package/dist/core/context-paths.js.map +0 -1
  1513. package/dist/core/context-staleness.d.ts.map +0 -1
  1514. package/dist/core/context-staleness.js.map +0 -1
  1515. package/dist/core/custom-routine-scheduler.d.ts.map +0 -1
  1516. package/dist/core/custom-routine-scheduler.js.map +0 -1
  1517. package/dist/core/daemon-api-cli.d.ts.map +0 -1
  1518. package/dist/core/daemon-api-cli.js.map +0 -1
  1519. package/dist/core/dashboard-session-cleanup.d.ts.map +0 -1
  1520. package/dist/core/dashboard-session-cleanup.js.map +0 -1
  1521. package/dist/core/dashboard-session-controls.d.ts.map +0 -1
  1522. package/dist/core/dashboard-session-controls.js.map +0 -1
  1523. package/dist/core/delegated-connector-health.d.ts.map +0 -1
  1524. package/dist/core/delegated-connector-health.js.map +0 -1
  1525. package/dist/core/dispatcher-date-utils.d.ts.map +0 -1
  1526. package/dist/core/dispatcher-date-utils.js.map +0 -1
  1527. package/dist/core/dispatcher-error-handling.d.ts.map +0 -1
  1528. package/dist/core/dispatcher-error-handling.js.map +0 -1
  1529. package/dist/core/dispatcher-hourly-check.d.ts.map +0 -1
  1530. package/dist/core/dispatcher-hourly-check.js.map +0 -1
  1531. package/dist/core/dispatcher-message-handler.d.ts.map +0 -1
  1532. package/dist/core/dispatcher-message-handler.js.map +0 -1
  1533. package/dist/core/dispatcher-morning-routine.d.ts.map +0 -1
  1534. package/dist/core/dispatcher-morning-routine.js.map +0 -1
  1535. package/dist/core/dispatcher-prompt.d.ts.map +0 -1
  1536. package/dist/core/dispatcher-prompt.js.map +0 -1
  1537. package/dist/core/dispatcher-repository-helpers.d.ts.map +0 -1
  1538. package/dist/core/dispatcher-repository-helpers.js.map +0 -1
  1539. package/dist/core/dispatcher-result-processor.d.ts.map +0 -1
  1540. package/dist/core/dispatcher-result-processor.js.map +0 -1
  1541. package/dist/core/dispatcher-scheduled-tasks.d.ts.map +0 -1
  1542. package/dist/core/dispatcher-scheduled-tasks.js.map +0 -1
  1543. package/dist/core/dispatcher-types.d.ts.map +0 -1
  1544. package/dist/core/dispatcher-types.js.map +0 -1
  1545. package/dist/core/dispatcher.d.ts.map +0 -1
  1546. package/dist/core/dispatcher.js.map +0 -1
  1547. package/dist/core/dm-freshness-metrics.d.ts.map +0 -1
  1548. package/dist/core/dm-freshness-metrics.js.map +0 -1
  1549. package/dist/core/docs/citation-validator.d.ts.map +0 -1
  1550. package/dist/core/docs/citation-validator.js.map +0 -1
  1551. package/dist/core/docs/extract-terms.d.ts.map +0 -1
  1552. package/dist/core/docs/extract-terms.js.map +0 -1
  1553. package/dist/core/docs/indexer.d.ts.map +0 -1
  1554. package/dist/core/docs/indexer.js.map +0 -1
  1555. package/dist/core/drift-effects.d.ts.map +0 -1
  1556. package/dist/core/drift-effects.js.map +0 -1
  1557. package/dist/core/event-bus.d.ts.map +0 -1
  1558. package/dist/core/event-bus.js.map +0 -1
  1559. package/dist/core/git-project-docs.d.ts.map +0 -1
  1560. package/dist/core/git-project-docs.js.map +0 -1
  1561. package/dist/core/health-monitor.d.ts.map +0 -1
  1562. package/dist/core/health-monitor.js.map +0 -1
  1563. package/dist/core/heartbeat.d.ts.map +0 -1
  1564. package/dist/core/heartbeat.js.map +0 -1
  1565. package/dist/core/integration-health.d.ts.map +0 -1
  1566. package/dist/core/integration-health.js.map +0 -1
  1567. package/dist/core/integration-lifecycle.d.ts.map +0 -1
  1568. package/dist/core/integration-lifecycle.js.map +0 -1
  1569. package/dist/core/integration-main-backend.d.ts.map +0 -1
  1570. package/dist/core/integration-main-backend.js.map +0 -1
  1571. package/dist/core/integration-probe.d.ts.map +0 -1
  1572. package/dist/core/integration-probe.js.map +0 -1
  1573. package/dist/core/management-md-write-lock.d.ts.map +0 -1
  1574. package/dist/core/management-md-write-lock.js.map +0 -1
  1575. package/dist/core/management-md.d.ts.map +0 -1
  1576. package/dist/core/management-md.js.map +0 -1
  1577. package/dist/core/management-registry.d.ts.map +0 -1
  1578. package/dist/core/management-registry.js.map +0 -1
  1579. package/dist/core/management-telemetry.d.ts.map +0 -1
  1580. package/dist/core/management-telemetry.js.map +0 -1
  1581. package/dist/core/message-recorder.d.ts.map +0 -1
  1582. package/dist/core/message-recorder.js.map +0 -1
  1583. package/dist/core/metrics.d.ts.map +0 -1
  1584. package/dist/core/metrics.js.map +0 -1
  1585. package/dist/core/migration-backup.d.ts.map +0 -1
  1586. package/dist/core/migration-backup.js.map +0 -1
  1587. package/dist/core/output-language-policy.d.ts.map +0 -1
  1588. package/dist/core/output-language-policy.js.map +0 -1
  1589. package/dist/core/overview-write-lock.d.ts.map +0 -1
  1590. package/dist/core/overview-write-lock.js.map +0 -1
  1591. package/dist/core/path-compat.d.ts.map +0 -1
  1592. package/dist/core/path-compat.js.map +0 -1
  1593. package/dist/core/path-rewrite.d.ts.map +0 -1
  1594. package/dist/core/path-rewrite.js.map +0 -1
  1595. package/dist/core/policy-files.d.ts.map +0 -1
  1596. package/dist/core/policy-files.js.map +0 -1
  1597. package/dist/core/profile-questions/seed.d.ts.map +0 -1
  1598. package/dist/core/profile-questions/seed.js.map +0 -1
  1599. package/dist/core/profile-questions/slot-filled.d.ts.map +0 -1
  1600. package/dist/core/profile-questions/slot-filled.js.map +0 -1
  1601. package/dist/core/prompts.d.ts.map +0 -1
  1602. package/dist/core/prompts.js.map +0 -1
  1603. package/dist/core/quiet-hours-sync.d.ts.map +0 -1
  1604. package/dist/core/quiet-hours-sync.js.map +0 -1
  1605. package/dist/core/read-sensitive-token-manager.d.ts.map +0 -1
  1606. package/dist/core/read-sensitive-token-manager.js.map +0 -1
  1607. package/dist/core/recurrence.d.ts.map +0 -1
  1608. package/dist/core/recurrence.js.map +0 -1
  1609. package/dist/core/reinstall.d.ts.map +0 -1
  1610. package/dist/core/reinstall.js.map +0 -1
  1611. package/dist/core/release-assets.d.ts.map +0 -1
  1612. package/dist/core/release-assets.js.map +0 -1
  1613. package/dist/core/repository-management-docs.d.ts.map +0 -1
  1614. package/dist/core/repository-management-docs.js.map +0 -1
  1615. package/dist/core/retention.d.ts.map +0 -1
  1616. package/dist/core/retention.js.map +0 -1
  1617. package/dist/core/review-context.d.ts.map +0 -1
  1618. package/dist/core/review-context.js.map +0 -1
  1619. package/dist/core/roadmap-horizon.d.ts.map +0 -1
  1620. package/dist/core/roadmap-horizon.js.map +0 -1
  1621. package/dist/core/roadmap-ids.d.ts.map +0 -1
  1622. package/dist/core/roadmap-ids.js.map +0 -1
  1623. package/dist/core/roadmap-merge.d.ts +0 -7
  1624. package/dist/core/roadmap-merge.d.ts.map +0 -1
  1625. package/dist/core/roadmap-merge.js +0 -187
  1626. package/dist/core/roadmap-merge.js.map +0 -1
  1627. package/dist/core/roadmap-refresh-triggers.d.ts.map +0 -1
  1628. package/dist/core/roadmap-refresh-triggers.js.map +0 -1
  1629. package/dist/core/roadmap-truncate.d.ts.map +0 -1
  1630. package/dist/core/roadmap-truncate.js.map +0 -1
  1631. package/dist/core/roadmap-validate.d.ts.map +0 -1
  1632. package/dist/core/roadmap-validate.js.map +0 -1
  1633. package/dist/core/roadmap-write-lock.d.ts.map +0 -1
  1634. package/dist/core/roadmap-write-lock.js.map +0 -1
  1635. package/dist/core/routine-acquisition-plan.d.ts.map +0 -1
  1636. package/dist/core/routine-acquisition-plan.js.map +0 -1
  1637. package/dist/core/routine-fetch-window-retry.d.ts.map +0 -1
  1638. package/dist/core/routine-fetch-window-retry.js.map +0 -1
  1639. package/dist/core/routine-fetch-window-runner.d.ts.map +0 -1
  1640. package/dist/core/routine-fetch-window-runner.js.map +0 -1
  1641. package/dist/core/routine-windows.d.ts.map +0 -1
  1642. package/dist/core/routine-windows.js.map +0 -1
  1643. package/dist/core/schedule-insert-helper.d.ts.map +0 -1
  1644. package/dist/core/schedule-insert-helper.js.map +0 -1
  1645. package/dist/core/schedule-maintenance.d.ts.map +0 -1
  1646. package/dist/core/schedule-maintenance.js.map +0 -1
  1647. package/dist/core/scheduler.d.ts.map +0 -1
  1648. package/dist/core/scheduler.js.map +0 -1
  1649. package/dist/core/semaphore.d.ts.map +0 -1
  1650. package/dist/core/semaphore.js.map +0 -1
  1651. package/dist/core/session-gate.d.ts.map +0 -1
  1652. package/dist/core/session-gate.js.map +0 -1
  1653. package/dist/core/session-manager.d.ts.map +0 -1
  1654. package/dist/core/session-manager.js.map +0 -1
  1655. package/dist/core/signal-detector.d.ts.map +0 -1
  1656. package/dist/core/signal-detector.js.map +0 -1
  1657. package/dist/core/skeleton.d.ts.map +0 -1
  1658. package/dist/core/skeleton.js.map +0 -1
  1659. package/dist/core/skill-curation/apply-proposal.d.ts.map +0 -1
  1660. package/dist/core/skill-curation/apply-proposal.js.map +0 -1
  1661. package/dist/core/skill-curation/auto-revert.d.ts.map +0 -1
  1662. package/dist/core/skill-curation/auto-revert.js.map +0 -1
  1663. package/dist/core/skill-curation/classify-diff.d.ts.map +0 -1
  1664. package/dist/core/skill-curation/classify-diff.js.map +0 -1
  1665. package/dist/core/skill-curation/declarations.d.ts.map +0 -1
  1666. package/dist/core/skill-curation/declarations.js.map +0 -1
  1667. package/dist/core/skill-curation/knowledge-map.d.ts.map +0 -1
  1668. package/dist/core/skill-curation/knowledge-map.js.map +0 -1
  1669. package/dist/core/skill-curation/orphan-overlay.d.ts.map +0 -1
  1670. package/dist/core/skill-curation/orphan-overlay.js.map +0 -1
  1671. package/dist/core/skill-curation/overlay-store.d.ts.map +0 -1
  1672. package/dist/core/skill-curation/overlay-store.js.map +0 -1
  1673. package/dist/core/skill-curation/render/convention-notes.d.ts.map +0 -1
  1674. package/dist/core/skill-curation/render/convention-notes.js.map +0 -1
  1675. package/dist/core/skill-curation/render/cross-references.d.ts.map +0 -1
  1676. package/dist/core/skill-curation/render/cross-references.js.map +0 -1
  1677. package/dist/core/skill-curation/render/frontmatter-schema.d.ts.map +0 -1
  1678. package/dist/core/skill-curation/render/frontmatter-schema.js.map +0 -1
  1679. package/dist/core/skill-curation/render/index.d.ts.map +0 -1
  1680. package/dist/core/skill-curation/render/index.js.map +0 -1
  1681. package/dist/core/skill-curation/render/knowledge-layout.d.ts.map +0 -1
  1682. package/dist/core/skill-curation/render/knowledge-layout.js.map +0 -1
  1683. package/dist/core/skill-curation/render/routing-table.d.ts.map +0 -1
  1684. package/dist/core/skill-curation/render/routing-table.js.map +0 -1
  1685. package/dist/core/skill-curation/render/search-recipes.d.ts.map +0 -1
  1686. package/dist/core/skill-curation/render/search-recipes.js.map +0 -1
  1687. package/dist/core/skill-curation/run-token.d.ts.map +0 -1
  1688. package/dist/core/skill-curation/run-token.js.map +0 -1
  1689. package/dist/core/skill-curation/signals.d.ts.map +0 -1
  1690. package/dist/core/skill-curation/signals.js.map +0 -1
  1691. package/dist/core/skill-curation/smoke-test.d.ts.map +0 -1
  1692. package/dist/core/skill-curation/smoke-test.js.map +0 -1
  1693. package/dist/core/skill-curation/splicer.d.ts.map +0 -1
  1694. package/dist/core/skill-curation/splicer.js.map +0 -1
  1695. package/dist/core/skill-curation/workdir.d.ts.map +0 -1
  1696. package/dist/core/skill-curation/workdir.js.map +0 -1
  1697. package/dist/core/skill-source-paths.d.ts.map +0 -1
  1698. package/dist/core/skill-source-paths.js.map +0 -1
  1699. package/dist/core/skills-compiler.d.ts.map +0 -1
  1700. package/dist/core/skills-compiler.js.map +0 -1
  1701. package/dist/core/skills-manifest.d.ts.map +0 -1
  1702. package/dist/core/skills-manifest.js.map +0 -1
  1703. package/dist/core/system-reset.d.ts.map +0 -1
  1704. package/dist/core/system-reset.js.map +0 -1
  1705. package/dist/core/template-store.d.ts.map +0 -1
  1706. package/dist/core/template-store.js.map +0 -1
  1707. package/dist/core/template-versions.d.ts.map +0 -1
  1708. package/dist/core/template-versions.js.map +0 -1
  1709. package/dist/core/today-agent-plan.d.ts.map +0 -1
  1710. package/dist/core/today-agent-plan.js.map +0 -1
  1711. package/dist/core/today-direct-writer.d.ts.map +0 -1
  1712. package/dist/core/today-direct-writer.js.map +0 -1
  1713. package/dist/core/today-write-lock.d.ts.map +0 -1
  1714. package/dist/core/today-write-lock.js.map +0 -1
  1715. package/dist/core/trigger-dispatch.d.ts.map +0 -1
  1716. package/dist/core/trigger-dispatch.js.map +0 -1
  1717. package/dist/core/trigger-evaluator.d.ts.map +0 -1
  1718. package/dist/core/trigger-evaluator.js.map +0 -1
  1719. package/dist/core/wiki/approval-queue.d.ts.map +0 -1
  1720. package/dist/core/wiki/approval-queue.js.map +0 -1
  1721. package/dist/core/wiki/bridge.d.ts.map +0 -1
  1722. package/dist/core/wiki/bridge.js.map +0 -1
  1723. package/dist/core/wiki/compile-lock.d.ts.map +0 -1
  1724. package/dist/core/wiki/compile-lock.js.map +0 -1
  1725. package/dist/core/wiki/compile-preview.d.ts.map +0 -1
  1726. package/dist/core/wiki/compile-preview.js.map +0 -1
  1727. package/dist/core/wiki/cost-estimate.d.ts.map +0 -1
  1728. package/dist/core/wiki/cost-estimate.js.map +0 -1
  1729. package/dist/core/wiki/dispatcher.d.ts.map +0 -1
  1730. package/dist/core/wiki/dispatcher.js.map +0 -1
  1731. package/dist/core/wiki/git-precompile.d.ts.map +0 -1
  1732. package/dist/core/wiki/git-precompile.js.map +0 -1
  1733. package/dist/core/wiki/import-migrate.d.ts.map +0 -1
  1734. package/dist/core/wiki/import-migrate.js.map +0 -1
  1735. package/dist/core/wiki/import-probe.d.ts.map +0 -1
  1736. package/dist/core/wiki/import-probe.js.map +0 -1
  1737. package/dist/core/wiki/index-cache.d.ts.map +0 -1
  1738. package/dist/core/wiki/index-cache.js.map +0 -1
  1739. package/dist/core/wiki/multi-url-dispatch.d.ts.map +0 -1
  1740. package/dist/core/wiki/multi-url-dispatch.js.map +0 -1
  1741. package/dist/core/wiki/wiki-fts.d.ts.map +0 -1
  1742. package/dist/core/wiki/wiki-fts.js.map +0 -1
  1743. package/dist/core/wiki/workspaces.d.ts.map +0 -1
  1744. package/dist/core/wiki/workspaces.js.map +0 -1
  1745. package/dist/core/wiki/write-strategy.d.ts.map +0 -1
  1746. package/dist/core/wiki/write-strategy.js.map +0 -1
  1747. package/dist/core/workdir.d.ts.map +0 -1
  1748. package/dist/core/workdir.js.map +0 -1
  1749. package/dist/db/automation-triggers.d.ts.map +0 -1
  1750. package/dist/db/automation-triggers.js.map +0 -1
  1751. package/dist/db/client.d.ts.map +0 -1
  1752. package/dist/db/client.js.map +0 -1
  1753. package/dist/db/entities-store.d.ts.map +0 -1
  1754. package/dist/db/entities-store.js.map +0 -1
  1755. package/dist/db/hourly-check-signals.d.ts.map +0 -1
  1756. package/dist/db/hourly-check-signals.js.map +0 -1
  1757. package/dist/db/integration-probe-store.d.ts.map +0 -1
  1758. package/dist/db/integration-probe-store.js.map +0 -1
  1759. package/dist/db/integrations-store.d.ts.map +0 -1
  1760. package/dist/db/integrations-store.js.map +0 -1
  1761. package/dist/db/managed-tasks-store.d.ts.map +0 -1
  1762. package/dist/db/managed-tasks-store.js.map +0 -1
  1763. package/dist/db/management-parse-failures-store.d.ts.map +0 -1
  1764. package/dist/db/management-parse-failures-store.js.map +0 -1
  1765. package/dist/db/observations.d.ts.map +0 -1
  1766. package/dist/db/observations.js.map +0 -1
  1767. package/dist/db/recurring-schedules.d.ts.map +0 -1
  1768. package/dist/db/recurring-schedules.js.map +0 -1
  1769. package/dist/db/repositories-store.d.ts.map +0 -1
  1770. package/dist/db/repositories-store.js.map +0 -1
  1771. package/dist/db/runtime-state.d.ts.map +0 -1
  1772. package/dist/db/runtime-state.js.map +0 -1
  1773. package/dist/db/schema.d.ts.map +0 -1
  1774. package/dist/db/schema.js.map +0 -1
  1775. package/dist/db/sot-bindings-store.d.ts.map +0 -1
  1776. package/dist/db/sot-bindings-store.js.map +0 -1
  1777. package/dist/db/test-schemas.d.ts +0 -23
  1778. package/dist/db/test-schemas.d.ts.map +0 -1
  1779. package/dist/db/test-schemas.js +0 -111
  1780. package/dist/db/test-schemas.js.map +0 -1
  1781. package/dist/db/voice-transcripts-store.d.ts.map +0 -1
  1782. package/dist/db/voice-transcripts-store.js.map +0 -1
  1783. package/dist/db/wiki-store.d.ts.map +0 -1
  1784. package/dist/db/wiki-store.js.map +0 -1
  1785. package/dist/index.d.ts.map +0 -1
  1786. package/dist/index.js.map +0 -1
  1787. package/dist/init.d.ts.map +0 -1
  1788. package/dist/init.js.map +0 -1
  1789. package/dist/log-buffer.d.ts.map +0 -1
  1790. package/dist/log-buffer.js.map +0 -1
  1791. package/dist/logging.d.ts.map +0 -1
  1792. package/dist/logging.js.map +0 -1
  1793. package/dist/management-rules.d.ts.map +0 -1
  1794. package/dist/management-rules.js.map +0 -1
  1795. package/dist/messaging/constants.d.ts.map +0 -1
  1796. package/dist/messaging/constants.js.map +0 -1
  1797. package/dist/messaging/magic-phrase.d.ts.map +0 -1
  1798. package/dist/messaging/magic-phrase.js.map +0 -1
  1799. package/dist/messaging/owner-channels.d.ts.map +0 -1
  1800. package/dist/messaging/owner-channels.js.map +0 -1
  1801. package/dist/messaging/setup-welcome-dm.d.ts.map +0 -1
  1802. package/dist/messaging/setup-welcome-dm.js.map +0 -1
  1803. package/dist/messaging/url-extract.d.ts.map +0 -1
  1804. package/dist/messaging/url-extract.js.map +0 -1
  1805. package/dist/observers/calendar-poller.d.ts.map +0 -1
  1806. package/dist/observers/calendar-poller.js.map +0 -1
  1807. package/dist/observers/context-index-reconciler-observer.d.ts.map +0 -1
  1808. package/dist/observers/context-index-reconciler-observer.js.map +0 -1
  1809. package/dist/observers/delegated-probe-observer.d.ts.map +0 -1
  1810. package/dist/observers/delegated-probe-observer.js.map +0 -1
  1811. package/dist/observers/delegated-sync-worker.d.ts.map +0 -1
  1812. package/dist/observers/delegated-sync-worker.js.map +0 -1
  1813. package/dist/observers/entity-mirror-observer.d.ts.map +0 -1
  1814. package/dist/observers/entity-mirror-observer.js.map +0 -1
  1815. package/dist/observers/git-delegated-cron.d.ts.map +0 -1
  1816. package/dist/observers/git-delegated-cron.js.map +0 -1
  1817. package/dist/observers/git-event-classifier.d.ts.map +0 -1
  1818. package/dist/observers/git-event-classifier.js.map +0 -1
  1819. package/dist/observers/git-watcher.d.ts.map +0 -1
  1820. package/dist/observers/git-watcher.js.map +0 -1
  1821. package/dist/observers/github-poller-classifier.d.ts.map +0 -1
  1822. package/dist/observers/github-poller-classifier.js.map +0 -1
  1823. package/dist/observers/github-poller.d.ts.map +0 -1
  1824. package/dist/observers/github-poller.js.map +0 -1
  1825. package/dist/observers/imminent-event-scheduler.d.ts.map +0 -1
  1826. package/dist/observers/imminent-event-scheduler.js.map +0 -1
  1827. package/dist/observers/mail-poller.d.ts.map +0 -1
  1828. package/dist/observers/mail-poller.js.map +0 -1
  1829. package/dist/observers/mail-reconciliation.d.ts.map +0 -1
  1830. package/dist/observers/mail-reconciliation.js.map +0 -1
  1831. package/dist/observers/manager.d.ts.map +0 -1
  1832. package/dist/observers/manager.js.map +0 -1
  1833. package/dist/observers/notion-poller.d.ts.map +0 -1
  1834. package/dist/observers/notion-poller.js.map +0 -1
  1835. package/dist/observers/observation-summarizer/index.d.ts.map +0 -1
  1836. package/dist/observers/observation-summarizer/index.js.map +0 -1
  1837. package/dist/observers/observation-summarizer/pre-filter.d.ts.map +0 -1
  1838. package/dist/observers/observation-summarizer/pre-filter.js.map +0 -1
  1839. package/dist/observers/observation-summarizer/response-parser.d.ts.map +0 -1
  1840. package/dist/observers/observation-summarizer/response-parser.js.map +0 -1
  1841. package/dist/observers/observation-summarizer/summarizer-client.d.ts.map +0 -1
  1842. package/dist/observers/observation-summarizer/summarizer-client.js.map +0 -1
  1843. package/dist/observers/observation-summarizer/summarizer-prompts.d.ts.map +0 -1
  1844. package/dist/observers/observation-summarizer/summarizer-prompts.js.map +0 -1
  1845. package/dist/observers/observation-summarizer/worker.d.ts.map +0 -1
  1846. package/dist/observers/observation-summarizer/worker.js.map +0 -1
  1847. package/dist/observers/obsidian-watcher.d.ts.map +0 -1
  1848. package/dist/observers/obsidian-watcher.js.map +0 -1
  1849. package/dist/observers/primary-vault-watcher.d.ts.map +0 -1
  1850. package/dist/observers/primary-vault-watcher.js.map +0 -1
  1851. package/dist/observers/repository-management-cron.d.ts.map +0 -1
  1852. package/dist/observers/repository-management-cron.js.map +0 -1
  1853. package/dist/observers/skill-curation-walker.d.ts.map +0 -1
  1854. package/dist/observers/skill-curation-walker.js.map +0 -1
  1855. package/dist/safety/absolute-block-audit.d.ts.map +0 -1
  1856. package/dist/safety/absolute-block-audit.js.map +0 -1
  1857. package/dist/safety/agent-write-tracker.d.ts.map +0 -1
  1858. package/dist/safety/agent-write-tracker.js.map +0 -1
  1859. package/dist/safety/always-disallowed.d.ts.map +0 -1
  1860. package/dist/safety/always-disallowed.js.map +0 -1
  1861. package/dist/safety/audit.d.ts.map +0 -1
  1862. package/dist/safety/audit.js.map +0 -1
  1863. package/dist/safety/integration-write-tracker.d.ts.map +0 -1
  1864. package/dist/safety/integration-write-tracker.js.map +0 -1
  1865. package/dist/safety/risk-classifier.d.ts.map +0 -1
  1866. package/dist/safety/risk-classifier.js.map +0 -1
  1867. package/dist/scheduler/hourly-check-gate.d.ts.map +0 -1
  1868. package/dist/scheduler/hourly-check-gate.js.map +0 -1
  1869. package/dist/secrets/backend-api-key-env.d.ts.map +0 -1
  1870. package/dist/secrets/backend-api-key-env.js.map +0 -1
  1871. package/dist/secrets/codex-home-materializer.d.ts.map +0 -1
  1872. package/dist/secrets/codex-home-materializer.js.map +0 -1
  1873. package/dist/secrets/encrypted-blob-store.d.ts.map +0 -1
  1874. package/dist/secrets/encrypted-blob-store.js.map +0 -1
  1875. package/dist/secrets/platform-secret-store.d.ts.map +0 -1
  1876. package/dist/secrets/platform-secret-store.js.map +0 -1
  1877. package/dist/secrets/redaction.d.ts.map +0 -1
  1878. package/dist/secrets/redaction.js.map +0 -1
  1879. package/dist/secrets/secret-broker.d.ts.map +0 -1
  1880. package/dist/secrets/secret-broker.js.map +0 -1
  1881. package/dist/secrets/secret-names.d.ts.map +0 -1
  1882. package/dist/secrets/secret-names.js.map +0 -1
  1883. package/dist/secrets/secret-store.d.ts.map +0 -1
  1884. package/dist/secrets/secret-store.js.map +0 -1
  1885. package/dist/secrets/types.d.ts.map +0 -1
  1886. package/dist/secrets/types.js.map +0 -1
  1887. package/dist/services/apple-calendar/caldav-client.d.ts.map +0 -1
  1888. package/dist/services/apple-calendar/caldav-client.js.map +0 -1
  1889. package/dist/services/apple-calendar/caldav-codec.d.ts.map +0 -1
  1890. package/dist/services/apple-calendar/caldav-codec.js.map +0 -1
  1891. package/dist/services/apple-calendar/index.d.ts.map +0 -1
  1892. package/dist/services/apple-calendar/index.js.map +0 -1
  1893. package/dist/services/apple-calendar/service.d.ts.map +0 -1
  1894. package/dist/services/apple-calendar/service.js.map +0 -1
  1895. package/dist/services/apple-calendar/types.d.ts.map +0 -1
  1896. package/dist/services/apple-calendar/types.js.map +0 -1
  1897. package/dist/services/attachments/hardlink.d.ts.map +0 -1
  1898. package/dist/services/attachments/hardlink.js.map +0 -1
  1899. package/dist/services/attachments/sanitize.d.ts.map +0 -1
  1900. package/dist/services/attachments/sanitize.js.map +0 -1
  1901. package/dist/services/attachments/store.d.ts.map +0 -1
  1902. package/dist/services/attachments/store.js.map +0 -1
  1903. package/dist/services/calendar/outlook/graph-calendar-client.d.ts.map +0 -1
  1904. package/dist/services/calendar/outlook/graph-calendar-client.js.map +0 -1
  1905. package/dist/services/calendar.d.ts.map +0 -1
  1906. package/dist/services/calendar.js.map +0 -1
  1907. package/dist/services/delegated-backend-invoker.d.ts.map +0 -1
  1908. package/dist/services/delegated-backend-invoker.js.map +0 -1
  1909. package/dist/services/delegated-invoker-audit.d.ts.map +0 -1
  1910. package/dist/services/delegated-invoker-audit.js.map +0 -1
  1911. package/dist/services/delegated-invoker-cache-hits.d.ts.map +0 -1
  1912. package/dist/services/delegated-invoker-cache-hits.js.map +0 -1
  1913. package/dist/services/delegated-invoker-janitors.d.ts.map +0 -1
  1914. package/dist/services/delegated-invoker-janitors.js.map +0 -1
  1915. package/dist/services/delegated-invoker-utils.d.ts.map +0 -1
  1916. package/dist/services/delegated-invoker-utils.js.map +0 -1
  1917. package/dist/services/delegated-proxy-config.d.ts.map +0 -1
  1918. package/dist/services/delegated-proxy-config.js.map +0 -1
  1919. package/dist/services/delegated-task-result-cache.d.ts.map +0 -1
  1920. package/dist/services/delegated-task-result-cache.js.map +0 -1
  1921. package/dist/services/delegated-task-runtime.d.ts.map +0 -1
  1922. package/dist/services/delegated-task-runtime.js.map +0 -1
  1923. package/dist/services/delegated-task-session-pool.d.ts.map +0 -1
  1924. package/dist/services/delegated-task-session-pool.js.map +0 -1
  1925. package/dist/services/delegated-tool-runtime.d.ts.map +0 -1
  1926. package/dist/services/delegated-tool-runtime.js.map +0 -1
  1927. package/dist/services/fts5.d.ts.map +0 -1
  1928. package/dist/services/fts5.js.map +0 -1
  1929. package/dist/services/git-account-registry.d.ts.map +0 -1
  1930. package/dist/services/git-account-registry.js.map +0 -1
  1931. package/dist/services/github.d.ts.map +0 -1
  1932. package/dist/services/github.js.map +0 -1
  1933. package/dist/services/gmail-classifier.d.ts.map +0 -1
  1934. package/dist/services/gmail-classifier.js.map +0 -1
  1935. package/dist/services/gmail.d.ts.map +0 -1
  1936. package/dist/services/gmail.js.map +0 -1
  1937. package/dist/services/google-auth.d.ts.map +0 -1
  1938. package/dist/services/google-auth.js.map +0 -1
  1939. package/dist/services/google-maps.d.ts +0 -35
  1940. package/dist/services/google-maps.d.ts.map +0 -1
  1941. package/dist/services/google-maps.js +0 -82
  1942. package/dist/services/google-maps.js.map +0 -1
  1943. package/dist/services/integrations/extract-write-item-id.d.ts.map +0 -1
  1944. package/dist/services/integrations/extract-write-item-id.js.map +0 -1
  1945. package/dist/services/integrations/reconcile.d.ts.map +0 -1
  1946. package/dist/services/integrations/reconcile.js.map +0 -1
  1947. package/dist/services/integrations/snapshot-partitions.d.ts.map +0 -1
  1948. package/dist/services/integrations/snapshot-partitions.js.map +0 -1
  1949. package/dist/services/journal/render.d.ts.map +0 -1
  1950. package/dist/services/journal/render.js.map +0 -1
  1951. package/dist/services/journal/writer.d.ts.map +0 -1
  1952. package/dist/services/journal/writer.js.map +0 -1
  1953. package/dist/services/mail/account-registry.d.ts.map +0 -1
  1954. package/dist/services/mail/account-registry.js.map +0 -1
  1955. package/dist/services/mail/gmail/auth-failure-classifier.d.ts.map +0 -1
  1956. package/dist/services/mail/gmail/auth-failure-classifier.js.map +0 -1
  1957. package/dist/services/mail/gmail/gmail-provider.d.ts.map +0 -1
  1958. package/dist/services/mail/gmail/gmail-provider.js.map +0 -1
  1959. package/dist/services/mail/gmail/legacy-row.d.ts.map +0 -1
  1960. package/dist/services/mail/gmail/legacy-row.js.map +0 -1
  1961. package/dist/services/mail/gmail/poll-cursor.d.ts.map +0 -1
  1962. package/dist/services/mail/gmail/poll-cursor.js.map +0 -1
  1963. package/dist/services/mail/html-to-plaintext.d.ts.map +0 -1
  1964. package/dist/services/mail/html-to-plaintext.js.map +0 -1
  1965. package/dist/services/mail/imap/app-password.d.ts.map +0 -1
  1966. package/dist/services/mail/imap/app-password.js.map +0 -1
  1967. package/dist/services/mail/imap/auth-failure-classifier.d.ts.map +0 -1
  1968. package/dist/services/mail/imap/auth-failure-classifier.js.map +0 -1
  1969. package/dist/services/mail/imap/capabilities.d.ts.map +0 -1
  1970. package/dist/services/mail/imap/capabilities.js.map +0 -1
  1971. package/dist/services/mail/imap/client.d.ts.map +0 -1
  1972. package/dist/services/mail/imap/client.js.map +0 -1
  1973. package/dist/services/mail/imap/cursor.d.ts.map +0 -1
  1974. package/dist/services/mail/imap/cursor.js.map +0 -1
  1975. package/dist/services/mail/imap/folder-resolver.d.ts.map +0 -1
  1976. package/dist/services/mail/imap/folder-resolver.js.map +0 -1
  1977. package/dist/services/mail/imap/icloud-provider.d.ts.map +0 -1
  1978. package/dist/services/mail/imap/icloud-provider.js.map +0 -1
  1979. package/dist/services/mail/imap/imap-provider-base.d.ts.map +0 -1
  1980. package/dist/services/mail/imap/imap-provider-base.js.map +0 -1
  1981. package/dist/services/mail/imap/query-translator.d.ts.map +0 -1
  1982. package/dist/services/mail/imap/query-translator.js.map +0 -1
  1983. package/dist/services/mail/imap/reconcile-planner.d.ts.map +0 -1
  1984. package/dist/services/mail/imap/reconcile-planner.js.map +0 -1
  1985. package/dist/services/mail/imap/reply-mime.d.ts.map +0 -1
  1986. package/dist/services/mail/imap/reply-mime.js.map +0 -1
  1987. package/dist/services/mail/imap/yahoo-provider.d.ts.map +0 -1
  1988. package/dist/services/mail/imap/yahoo-provider.js.map +0 -1
  1989. package/dist/services/mail/mail-search.d.ts.map +0 -1
  1990. package/dist/services/mail/mail-search.js.map +0 -1
  1991. package/dist/services/mail/outlook/auth-failure-classifier.d.ts.map +0 -1
  1992. package/dist/services/mail/outlook/auth-failure-classifier.js.map +0 -1
  1993. package/dist/services/mail/outlook/client-config.d.ts.map +0 -1
  1994. package/dist/services/mail/outlook/client-config.js.map +0 -1
  1995. package/dist/services/mail/outlook/delta-cursor.d.ts.map +0 -1
  1996. package/dist/services/mail/outlook/delta-cursor.js.map +0 -1
  1997. package/dist/services/mail/outlook/graph-client.d.ts.map +0 -1
  1998. package/dist/services/mail/outlook/graph-client.js.map +0 -1
  1999. package/dist/services/mail/outlook/msal-app-factory.d.ts.map +0 -1
  2000. package/dist/services/mail/outlook/msal-app-factory.js.map +0 -1
  2001. package/dist/services/mail/outlook/msal-cache-plugin.d.ts.map +0 -1
  2002. package/dist/services/mail/outlook/msal-cache-plugin.js.map +0 -1
  2003. package/dist/services/mail/outlook/oauth-device-code.d.ts.map +0 -1
  2004. package/dist/services/mail/outlook/oauth-device-code.js.map +0 -1
  2005. package/dist/services/mail/outlook/oauth-loopback.d.ts.map +0 -1
  2006. package/dist/services/mail/outlook/oauth-loopback.js.map +0 -1
  2007. package/dist/services/mail/outlook/outlook-provider.d.ts.map +0 -1
  2008. package/dist/services/mail/outlook/outlook-provider.js.map +0 -1
  2009. package/dist/services/mail/outlook/query-translator.d.ts.map +0 -1
  2010. package/dist/services/mail/outlook/query-translator.js.map +0 -1
  2011. package/dist/services/mail/provider.d.ts.map +0 -1
  2012. package/dist/services/mail/provider.js.map +0 -1
  2013. package/dist/services/mail/query-utils.d.ts.map +0 -1
  2014. package/dist/services/mail/query-utils.js.map +0 -1
  2015. package/dist/services/mail-classifier.d.ts.map +0 -1
  2016. package/dist/services/mail-classifier.js.map +0 -1
  2017. package/dist/services/mail-ingestion.d.ts.map +0 -1
  2018. package/dist/services/mail-ingestion.js.map +0 -1
  2019. package/dist/services/mcp/auto-probe.d.ts.map +0 -1
  2020. package/dist/services/mcp/auto-probe.js.map +0 -1
  2021. package/dist/services/mcp/generators/claude.d.ts.map +0 -1
  2022. package/dist/services/mcp/generators/claude.js.map +0 -1
  2023. package/dist/services/mcp/generators/codex.d.ts.map +0 -1
  2024. package/dist/services/mcp/generators/codex.js.map +0 -1
  2025. package/dist/services/mcp/generators/gemini.d.ts.map +0 -1
  2026. package/dist/services/mcp/generators/gemini.js.map +0 -1
  2027. package/dist/services/mcp/generators/index.d.ts.map +0 -1
  2028. package/dist/services/mcp/generators/index.js.map +0 -1
  2029. package/dist/services/mcp/generators/types.d.ts.map +0 -1
  2030. package/dist/services/mcp/generators/types.js.map +0 -1
  2031. package/dist/services/mcp/probe.d.ts.map +0 -1
  2032. package/dist/services/mcp/probe.js.map +0 -1
  2033. package/dist/services/mcp/registry.d.ts.map +0 -1
  2034. package/dist/services/mcp/registry.js.map +0 -1
  2035. package/dist/services/mcp/risk.d.ts.map +0 -1
  2036. package/dist/services/mcp/risk.js.map +0 -1
  2037. package/dist/services/mcp/session-materializer.d.ts.map +0 -1
  2038. package/dist/services/mcp/session-materializer.js.map +0 -1
  2039. package/dist/services/mcp/tool-audit.d.ts.map +0 -1
  2040. package/dist/services/mcp/tool-audit.js.map +0 -1
  2041. package/dist/services/mcp/types.d.ts.map +0 -1
  2042. package/dist/services/mcp/types.js.map +0 -1
  2043. package/dist/services/notion.d.ts.map +0 -1
  2044. package/dist/services/notion.js.map +0 -1
  2045. package/dist/services/obsidian.d.ts.map +0 -1
  2046. package/dist/services/obsidian.js.map +0 -1
  2047. package/dist/services/service-registry.d.ts.map +0 -1
  2048. package/dist/services/service-registry.js.map +0 -1
  2049. package/dist/services/voice/transcriber-impl.d.ts.map +0 -1
  2050. package/dist/services/voice/transcriber-impl.js.map +0 -1
  2051. package/dist/services/voice/transcriber.d.ts.map +0 -1
  2052. package/dist/services/voice/transcriber.js.map +0 -1
  2053. package/dist/settings/runtime-settings.d.ts.map +0 -1
  2054. package/dist/settings/runtime-settings.js.map +0 -1
  2055. package/dist/settings/settings-store.d.ts.map +0 -1
  2056. package/dist/settings/settings-store.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,96 +1,40 @@
1
- import { serve } from "@hono/node-server";
2
1
  import { join, resolve } from "node:path";
3
- import { rmSync } from "node:fs";
4
2
  import { randomBytes } from "node:crypto";
5
- import { loadConfig, getContextDir, isRoadmapStale, mergeRuntimeSettingsFromDb, runVaultHealthProbe, validateExternalObsidianVaultPath, } from "./config.js";
6
- import { getDegradedMode, isSetupCompleted, isUserPaused, isDegraded as readDegradedMode, } from "./db/runtime-state.js";
7
- import { createDefaultBangCommandRegistry } from "./core/bang-commands/index.js";
3
+ import { loadConfig, getContextDir, runVaultHealthProbe, validateExternalObsidianVaultPath, } from "./config.js";
4
+ import { getDegradedMode, getVaultRestructurePendingConsent, isSetupCompleted, isDegraded as readDegradedMode, } from "./db/runtime-state.js";
8
5
  import { initDirectories } from "./init.js";
9
- import { createDatabase } from "./db/client.js";
10
- import { applySchema } from "./db/schema.js";
11
- import { readIntegrations } from "./db/integrations-store.js";
12
- import { getRepositoryByGithub, getRepositoryByLocalPath, listRepositories, selectGithubRepoSlugs, selectGitWatchedRepos, } from "./db/repositories-store.js";
13
- import { dispatchMatchingTriggers } from "./core/trigger-dispatch.js";
14
6
  import { EventBus } from "./core/event-bus.js";
15
7
  import { AgentScheduler } from "./core/scheduler.js";
16
8
  import { CustomRoutineScheduler } from "./core/custom-routine-scheduler.js";
17
9
  import { HealthMonitor } from "./core/health-monitor.js";
18
10
  import { Heartbeat } from "./core/heartbeat.js";
19
11
  import { MessageHub } from "./adapters/message-hub.js";
20
- import { ObserverManager } from "./observers/manager.js";
21
- import { ObsidianWatcher } from "./observers/obsidian-watcher.js";
22
- import { PrimaryVaultWatcher } from "./observers/primary-vault-watcher.js";
23
- import { ContextIndexReconcilerObserver } from "./observers/context-index-reconciler-observer.js";
24
- import { EntityMirrorObserver } from "./observers/entity-mirror-observer.js";
25
- import { GitWatcher } from "./observers/git-watcher.js";
26
- import { GitHubPoller } from "./observers/github-poller.js";
27
- import { GitAccountRegistry } from "./services/git-account-registry.js";
28
- import { GitDelegatedCronObserver, hasActiveDelegatedGitLifecycleIntegration, } from "./observers/git-delegated-cron.js";
29
- import { RepositoryManagementCron } from "./observers/repository-management-cron.js";
30
- import { ObservationSummarizerWorker, AnthropicSummarizerClient, UnsupportedSummarizerClient, } from "./observers/observation-summarizer/index.js";
31
- import { CalendarPoller } from "./observers/calendar-poller.js";
32
- import { ImminentEventScheduler } from "./observers/imminent-event-scheduler.js";
33
- import { DelegatedSyncWorker, hasActiveDelegatedSyncIntegration, } from "./observers/delegated-sync-worker.js";
34
- import { applyIntegrationModeChange, shouldStartObserversFor, } from "./core/integration-lifecycle.js";
35
- import { NotionPoller } from "./observers/notion-poller.js";
12
+ import { resolvePrimaryPlatform } from "./adapters/primary-platform-resolver.js";
36
13
  import { DiscordAdapter } from "./adapters/discord.js";
37
14
  import { SlackAdapter } from "./adapters/slack-adapter.js";
38
15
  import { TelegramAdapter } from "./adapters/telegram-adapter.js";
39
16
  import { DashboardAdapter } from "./adapters/dashboard-adapter.js";
40
17
  import { ObsidianService } from "./services/obsidian.js";
41
18
  import { createServiceRegistry } from "./services/service-registry.js";
42
- import { SignalDetector } from "./core/signal-detector.js";
43
- import { EventDispatcher } from "./core/dispatcher.js";
44
- import { ClaudeCodeCore } from "./core/backends/claude-code-core.js";
45
- import { BackendRouter } from "./core/backends/backend-router.js";
46
- import { ensureBackendMaterialized, syncAllUserSkills, buildConfiguredServices, refreshDmSessionWorkdirs, validateDelegatedStartup, } from "./core/workdir.js";
47
- import { setWikiWorkspaceTokenResolver } from "./core/skills-compiler.js";
48
- import { CodexCore } from "./core/backends/codex-core.js";
49
- import { GeminiCliCore } from "./core/backends/gemini-cli-core.js";
50
- import { PriceFetcher } from "./core/backends/price-fetcher.js";
51
- import { AuthTelemetry } from "./core/backends/auth-telemetry.js";
52
- import { AuthHealthMonitor, AUTH_PROBE_NOTIFICATION_CATEGORY } from "./core/backends/auth-health-monitor.js";
53
- import { AuthRecovery } from "./core/backends/auth-recovery.js";
54
- import { ContextBuilder } from "./core/context-builder.js";
55
- import { getTaskFlow, initTaskFlows } from "./core/prompts.js";
56
- import { listWikiWorkspaces, readDefaultWikiWorkspace, readWikiWorkspaceByName, } from "./core/wiki/workspaces.js";
57
- import { backfillWikiFulltext } from "./core/wiki/wiki-fts.js";
58
19
  import { ensureSkeletonFiles, resolveTemplatesRoot } from "./core/skeleton.js";
59
- import { normalizeGitWatchedRepos, queueGitProjectUpdate, queueMissingGitProjectInits, seedGitProjectDocTemplates, } from "./core/git-project-docs.js";
60
20
  import { reconcileTemplateAssets, recordInstructionAssetStatus, recordSkillAssetStatus, } from "./core/release-assets.js";
61
- import { SessionManager } from "./core/session-manager.js";
62
- import { MessageRecorder } from "./core/message-recorder.js";
63
- import { ScopedReadSensitiveTokenManager } from "./core/read-sensitive-token-manager.js";
64
- import { NotificationManager } from "./adapters/notification-manager.js";
65
- import { recordProactiveForwardDeliveries } from "./core/channel-timeline.js";
66
- import { continueDashboardSession as continueDashboardSessionFromHistory, endDashboardSession as endDashboardSessionFromChannel, markContextChanged, } from "./core/dashboard-session-controls.js";
67
- import { AuditLogger } from "./safety/audit.js";
21
+ import { resolveUserSkillsRoot } from "./core/user-skills-root.js";
68
22
  import { bootstrapManagementMd, startManagementMdWatcher, } from "./core/management-md.js";
69
23
  import { bootstrapManagementRegistry, startManagementRegistryWatcher, } from "./core/management-registry.js";
70
- import { bootstrapManagedTaskSeq } from "./db/managed-tasks-store.js";
71
24
  import { startDocsIndexer, } from "./core/docs/indexer.js";
72
- import { makeDbLookup as makeDocsCitationLookup } from "./core/docs/citation-validator.js";
73
- import { createDocsRoutes } from "./api/routes/docs.js";
74
- import { DocsQAAdapter } from "./adapters/docs-qa-adapter.js";
75
- import { CompositeDashboardStream } from "./adapters/composite-dashboard-stream.js";
76
- import { createApp } from "./api/server.js";
77
- import { EventBroadcaster } from "./api/routes/sse.js";
78
25
  import { APP_NAME, EventPriority, getBackendIds, } from "@aitne/shared";
79
- import { getOwnerChannel } from "./messaging/owner-channels.js";
26
+ import { getOwnerChannel, selectFirstPairedPlatform, } from "./messaging/owner-channels.js";
80
27
  import { SUPPORTED_MESSAGING_PLATFORMS, } from "./messaging/constants.js";
81
- import { sendSetupWelcomeDm } from "./messaging/setup-welcome-dm.js";
82
28
  import { AgentWriteTracker } from "./safety/agent-write-tracker.js";
83
- import { ContextWriteGate, InMemoryTodayWriteLockManager, MigrationLock, getTodayWriteLockTimeoutMs, } from "./core/today-write-lock.js";
84
- import { applyPromptContextStaleness, } from "./core/context-staleness.js";
29
+ import { InMemoryTodayWriteLockManager, getTodayWriteLockTimeoutMs, } from "./core/today-write-lock.js";
85
30
  import { InMemoryRoadmapWriteLockManager, getRoadmapWriteLockTimeoutMs, } from "./core/roadmap-write-lock.js";
31
+ import { runRoadmapMechanicalMaintenance } from "./core/roadmap-maintenance.js";
32
+ import { fanoutResearchClusterUpdates } from "./core/browser-history/research-cluster-fanout.js";
33
+ import { safeRunPreMorningDigestJob } from "./core/browser-history/pre-morning-digest-job.js";
34
+ import { shouldStartObserversFor } from "./core/integration-lifecycle.js";
86
35
  import { sweepExpiredMigrationBackups } from "./api/routes/setup-migrate.js";
87
- import { createSettingsStore } from "./settings/settings-store.js";
88
36
  import { PlatformSecretStore } from "./secrets/platform-secret-store.js";
89
37
  import { FileEncryptedBlobStore } from "./secrets/encrypted-blob-store.js";
90
- import { AttachmentStore } from "./services/attachments/store.js";
91
- import { VoiceTranscriber } from "./services/voice/transcriber.js";
92
- import { DelegatedBackendInvoker, runDelegatedTaskOrphanJanitor, runProxyTempdirJanitor, } from "./services/delegated-backend-invoker.js";
93
- import { runSessionPoolTempdirJanitor } from "./services/delegated-task-session-pool.js";
94
38
  import { MailAccountRegistry } from "./services/mail/account-registry.js";
95
39
  import { loadOutlookClientConfig, OutlookClientConfigMissingError, } from "./services/mail/outlook/client-config.js";
96
40
  import { createRuntimeMsalApp } from "./services/mail/outlook/msal-app-factory.js";
@@ -99,15 +43,17 @@ import { parseImapAccountSecret } from "./services/mail/imap/app-password.js";
99
43
  import { ICloudImapProvider } from "./services/mail/imap/icloud-provider.js";
100
44
  import { YahooImapProvider } from "./services/mail/imap/yahoo-provider.js";
101
45
  import { GmailProvider } from "./services/mail/gmail/gmail-provider.js";
102
- import { MailPoller } from "./observers/mail-poller.js";
103
- import { MailReconciliationJob } from "./observers/mail-reconciliation.js";
104
46
  import { SecretBroker } from "./secrets/secret-broker.js";
105
47
  import { captureOriginalShellEnv, syncBackendApiKeyToEnv, } from "./secrets/backend-api-key-env.js";
106
48
  import { createLogger, toSafeErrorMessage } from "./logging.js";
107
49
  import { runCatchup, runPostMessagingCatchup, } from "./bootstrap/catchup.js";
108
- import { hasFreshAgentDayTodayMd, readSkillCurationCadence, } from "./bootstrap/schedule-helpers.js";
109
- import { createAdapterReloaders, whatsappQrResponseFromAdapter, } from "./bootstrap/adapters.js";
50
+ import { createAdapterReloaders, } from "./bootstrap/adapters.js";
110
51
  import { createInitialSecretState, createServiceReloaders, } from "./bootstrap/services.js";
52
+ import { initDatabase } from "./bootstrap/db.js";
53
+ import { bootstrapAgents } from "./core/agents/loader-boot.js";
54
+ import { createObservers } from "./bootstrap/observers.js";
55
+ import { startApiServer } from "./bootstrap/api.js";
56
+ import { createEventPipeline } from "./bootstrap/event-pipeline.js";
111
57
  const logger = createLogger("daemon", {
112
58
  transport: {
113
59
  target: "pino-pretty",
@@ -142,122 +88,48 @@ async function startup() {
142
88
  // ── 2. Directory structure ──
143
89
  initDirectories(config);
144
90
  // ── 3. Database ──
145
- const db = createDatabase(config);
146
- applySchema(db);
147
- setWikiWorkspaceTokenResolver((processKey, workspaceName) => {
148
- if (!processKey.startsWith("wiki."))
149
- return null;
150
- // Match `context-builder.ts`'s per-event lookup: prefer the named
151
- // workspace, fall back to the default. Without this, multi-workspace
152
- // installs would render the `<wiki_workspace>` XML against the target
153
- // workspace while skill prose (`{{vault_path}}` etc.) referenced the
154
- // default — the agent would then operate on the wrong vault.
155
- const workspace = (workspaceName ? readWikiWorkspaceByName(db, workspaceName) : null)
156
- ?? readDefaultWikiWorkspace(db);
157
- if (!workspace)
158
- return null;
159
- return {
160
- vault_path: workspace.root_path,
161
- language: workspace.language,
162
- workspace_name: workspace.name,
163
- schema_version: String(workspace.schema_version),
164
- };
91
+ // Schema apply + boot-time backfills + settings merge + delegated-task-mode
92
+ // default-correction. See `bootstrap/db.ts` for the per-step rationale.
93
+ const { db, settingsStore, persistedSettings, attachmentStore } = initDatabase({
94
+ config,
165
95
  });
166
- // WIKI_BUILDER_DESIGN.md §P4.A — boot-time FTS backfill. The
167
- // `fts_wiki` virtual table is content-less and lives outside the
168
- // mail-style trigger chain (the source is the filesystem, not a SQL
169
- // table), so a fresh DB or a workspace seeded before P4 landed needs
170
- // a one-shot rebuild. Per-workspace gate inside `backfillWikiFulltext`
171
- // keeps this near-free in steady state.
172
- backfillWikiFulltext(db, listWikiWorkspaces(db));
173
- // §12 ("managed_tasks.id collision after restore from backup") — ensure
174
- // `managed_task_seq.next_id` is greater than the max existing mt id so a
175
- // backup-restored DB cannot collide with the seq counter on the next
176
- // POST. No-op when the table is empty (steady-state cost: one SELECT).
177
- bootstrapManagedTaskSeq(db);
178
- // Close any dashboard_chat sessions that were left `active` from before
179
- // the daemon restart. They cannot be resumed cleanly: the SSE channel is
180
- // gone, and `Dispatcher.currentSetupMode` is in-process state lost on
181
- // restart, so a setup conversation half-way through would otherwise be
182
- // re-adopted by `findActiveDashboardSessionId` and processed as regular
183
- // chat against stale prompts. The setup wizard's resume path on the
184
- // client-side checks active status; closing here flips the check so the
185
- // wizard correctly falls through to a fresh /setup/start.
186
- try {
187
- const result = db
188
- .prepare(`UPDATE conversation_sessions
189
- SET status = 'closed'
190
- WHERE scope = 'dashboard_chat' AND status = 'active'`)
191
- .run();
192
- if (result.changes > 0) {
193
- logger.info({ closed: result.changes }, "Closed orphaned dashboard_chat sessions from previous run");
194
- }
195
- }
196
- catch (err) {
197
- logger.warn({ err }, "Failed to close orphaned dashboard_chat sessions");
198
- }
199
- // Chat attachment store — constructed early so adapter reload functions
200
- // can reference it in closure without TypeScript "used before declaration" issues.
201
- const attachmentStore = new AttachmentStore(db, config.dataDir);
202
- attachmentStore.reapOrphans(24);
203
- void new PriceFetcher(config.dataDir, db).refresh();
204
- const settingsStore = createSettingsStore(db);
205
- const persistedSettings = settingsStore.getAll();
206
- mergeRuntimeSettingsFromDb(config, persistedSettings);
207
- try {
208
- seedGitProjectDocTemplates(config.dataDir, config.workspaceDir);
209
- }
210
- catch (err) {
211
- logger.warn({ err }, "Failed to seed git project document templates");
212
- }
213
- // ── Default-correction for `delegatedTaskModeEnabled` ──
214
- // The legacy `/integrations/:key/invoke` RPC was retired 2026-05-01
215
- // and every delegated skill / task flow now goes through `/exec`,
216
- // which is gated by this flag. Its Phase-1 canary default of `false`
217
- // is now a footgun: any user with delegated integrations from before
218
- // the runtime PATCH-time auto-enable landed will hit 503 on every
219
- // /exec call.
220
- //
221
- // Heal once at boot, only when the operator never explicitly chose:
222
- // - `delegatedTaskModeEnabled` row is *absent* from settings (the
223
- // `in` check distinguishes "never set" from "explicitly false"),
224
- // - and at least one integration is currently in `delegated` mode.
225
- //
226
- // An explicit `false` row in `settings` is treated as operator intent
227
- // and respected — emergency-disable still works.
228
- if (!("delegatedTaskModeEnabled" in persistedSettings)
229
- && !config.delegatedTaskModeEnabled) {
230
- const integrationsAtBoot = readIntegrations(db);
231
- const delegatedKeys = Object.entries(integrationsAtBoot)
232
- .filter(([, state]) => state.mode === "delegated")
233
- .map(([key]) => key);
234
- if (delegatedKeys.length > 0) {
235
- try {
236
- settingsStore.set("delegatedTaskModeEnabled", true);
237
- config.delegatedTaskModeEnabled = true;
238
- logger.info({ delegatedKeys }, "auto-enabled delegatedTaskModeEnabled at startup — delegated integrations exist and the flag was never explicitly set");
239
- }
240
- catch (err) {
241
- logger.error({ err, delegatedKeys }, "startup auto-enable of delegatedTaskModeEnabled failed; /exec calls may continue to 503 until PATCH /api/config sets the flag");
242
- }
243
- }
244
- }
245
96
  // ── Integration Delegation Framework (Phase 1) ──
246
- // Reconcile `<dataDir>/integrations.md` with the DB integrations map.
97
+ // Reconcile `<contextDir>/policies/integrations.md` with the DB integrations map.
247
98
  // Creates the file on first run, parses hand-edits if present, and
248
99
  // re-renders unconditionally so daemon-owned columns are canonical.
249
100
  // The watcher is started later (after the observer manager) so fs-watch
250
101
  // errors don't block boot.
251
102
  let managementMdWatcher = null;
252
103
  let managementRegistryWatcher = null;
253
- try {
254
- await bootstrapManagementMd(config.dataDir, db, config.workspaceDir, {
255
- externalObsidianVaultPath: config.externalObsidianVaultPath,
256
- externalObsidianWatch: config.externalObsidianWatch,
257
- });
104
+ // CONTEXT_VAULT_REDESIGN V16 — when the consent gate deferred the vault
105
+ // restructure (Obsidian-mode user has not acknowledged the sidebar move
106
+ // yet), DO NOT write `policies/integrations.md` into the legacy vault.
107
+ // Doing so would create a stray `policies/` directory next to the
108
+ // legacy `rules/` / `user/` / etc., producing a mixed layout the user
109
+ // sees in Obsidian before they ever consented. The write resumes on
110
+ // the next boot after ack, where the migration runs first and the
111
+ // vault has a coherent post-restructure shape.
112
+ const vaultConsentPending = getVaultRestructurePendingConsent(db) !== null;
113
+ if (vaultConsentPending) {
114
+ logger.warn({
115
+ contextDir: getContextDir(config, db),
116
+ ackEnvVar: "PA_VAULT_RESTRUCTURE_ACK",
117
+ }, "Skipping integrations.md bootstrap: Obsidian-vault consent pending. Set PA_VAULT_RESTRUCTURE_ACK=1 (headless) or POST /api/setup/vault-restructure-ack (dashboard), then restart.");
258
118
  }
259
- catch (err) {
260
- logger.error({ err, dataDir: config.dataDir }, "integrations.md bootstrap failed; continuing with DB state");
119
+ else {
120
+ try {
121
+ // V18 — pass contextDir explicitly so `policies/integrations.md` lands
122
+ // at the right vault root in both plain and Obsidian-vault modes. The
123
+ // `initDirectories` step earlier created `<contextDir>/policies/`, which
124
+ // this bootstrap depends on existing.
125
+ await bootstrapManagementMd(config.dataDir, db, config.workspaceDir, {
126
+ externalObsidianVaultPath: config.externalObsidianVaultPath,
127
+ externalObsidianWatch: config.externalObsidianWatch,
128
+ }, getContextDir(config, db));
129
+ }
130
+ catch (err) {
131
+ logger.error({ err, dataDir: config.dataDir }, "integrations.md bootstrap failed; continuing with DB state");
132
+ }
261
133
  }
262
134
  // ── Docs corpus indexer (DOCS_QA_DESIGN.md P1) ──
263
135
  // Seeds `docs/user/` from `agent-assets/docs/` on first launch, then
@@ -277,7 +149,7 @@ async function startup() {
277
149
  }
278
150
  try {
279
151
  recordInstructionAssetStatus(db, config.workspaceDir);
280
- const skillStatus = recordSkillAssetStatus(db, config.dataDir, config.workspaceDir);
152
+ const skillStatus = recordSkillAssetStatus(db, resolveUserSkillsRoot(config), config.workspaceDir);
281
153
  if (skillStatus.builtinShadowedUserSkills.length > 0) {
282
154
  logger.warn({ slugs: skillStatus.builtinShadowedUserSkills }, "User skills are shadowed by newly-shipped built-in skills");
283
155
  }
@@ -311,16 +183,16 @@ async function startup() {
311
183
  ensureSkeletonFiles(contextDir, config.workspaceDir);
312
184
  // ── Management Registry boot reconcile (design 21 §7.2 / P2) ──
313
185
  // Mirrors `bootstrapManagementMd` (which owns integrations.md). Reads
314
- // `<contextDir>/rules/management.md` and reconciles its A-section with
315
- // `settings.sot_bindings`; renders a fresh v3 file when the on-disk
316
- // copy is v2 (no schema_version) or forward-incompat (>= v4). Run
317
- // after `ensureSkeletonFiles` so the seeded template is the parse
318
- // target on first install.
186
+ // `<contextDir>/policies/management.md` and reconciles its A-section with
187
+ // `settings.sot_bindings`; renders a fresh file when the on-disk
188
+ // schema_version does not match the current daemon's. Run after
189
+ // `ensureSkeletonFiles` so the seeded template is the parse target
190
+ // on first install.
319
191
  try {
320
192
  await bootstrapManagementRegistry(contextDir, db);
321
193
  }
322
194
  catch (err) {
323
- logger.error({ err, contextDir }, "rules/management.md bootstrap failed; continuing with DB state");
195
+ logger.error({ err, contextDir }, "policies/management.md bootstrap failed; continuing with DB state");
324
196
  }
325
197
  // Release asset reconcile (future-proofing for format changes).
326
198
  // Missing templates are added, unedited versioned templates are
@@ -414,17 +286,58 @@ async function startup() {
414
286
  });
415
287
  if (Object.keys(result.errors).length > 0) {
416
288
  logger.error({ platform, ownerId, errors: result.errors }, "Failed to persist detected owner ID to .env");
417
- return;
289
+ // Throw so the adapter's captureOwner rolls back mutableOwnerId.
290
+ // Without this, the adapter would silently accept owner DMs in
291
+ // memory while .env shows no pairing — and the next daemon restart
292
+ // would lose the binding. The user's matcher stays armed
293
+ // (cancelPairing was not called) so they can retry by resending
294
+ // the phrase once the underlying env-write issue is resolved.
295
+ const errorKeys = Object.keys(result.errors).join(", ");
296
+ throw new Error(`Failed to persist ${platform} owner ID to .env: ${errorKeys}`);
418
297
  }
419
298
  logger.info({ platform, ownerId }, "auto-paired owner from discovery");
420
- // Greet the user so they know pairing landed. Route this through the
421
- // adapter's normal owner-channel resolution path ("user") rather than
422
- // assuming the captured owner identifier is itself a channel id.
299
+ // Greet the user so they know pairing landed. The consolidated
300
+ // welcome path (via sendSetupWelcomeDm / WELCOME_DM_TEXT) is preferred
301
+ // over emitting an inline "Pairing successful…" ack: pairing during
302
+ // setup would otherwise fire two greetings in quick succession.
303
+ //
304
+ // Three-way UX contract:
305
+ //
306
+ // 1. First-time pairing (no latch yet) — `sendSetupWelcomeDm` fires
307
+ // the full WELCOME_DM_TEXT (includes ack + bang-command menu) and
308
+ // sets the latch. No inline ack needed.
423
309
  //
424
- // Why: Telegram captures a chat id, but Slack/Discord capture a user id
425
- // that must be resolved to a DM channel before sending.
310
+ // 2. Re-pairing onto a DIFFERENT platform (latch set on a prior
311
+ // platform) the welcome path is latched globally and returns
312
+ // null. Without a fallback the operator would hear nothing back
313
+ // from the new platform, indistinguishable from a failed
314
+ // pairing. We send a short per-platform "Pairing successful" ack
315
+ // ONLY in this branch so the newly-paired platform confirms
316
+ // pairing landed without re-firing the full menu.
317
+ //
318
+ // 3. Re-pairing the SAME platform — same as case 2 (welcome latched,
319
+ // short ack fires). The ack is harmless even if the operator
320
+ // remembers the menu from before.
321
+ //
322
+ // Best-effort throughout: env-write already succeeded so the pairing
323
+ // is durable; a transient send failure must NOT roll back the
324
+ // persisted owner ID.
426
325
  try {
427
- await messageHub.sendToPlatform(platform, "user", `Pairing successful this channel is now linked as your owner DM.`);
326
+ const { sendSetupWelcomeDm } = await import("./messaging/setup-welcome-dm.js");
327
+ const welcomeDeliveries = await sendSetupWelcomeDm({ db, messageHub });
328
+ if (welcomeDeliveries === null) {
329
+ // Latched or no eligible at the time of first run — fall back to
330
+ // the targeted ack so the newly-paired platform doesn't end up
331
+ // silent. Scoped to JUST the platform that paired (not fan-out)
332
+ // because the welcome ALREADY covered the other configured
333
+ // platforms on the original pairing event.
334
+ try {
335
+ await messageHub.sendToPlatform(platform, "user", `Pairing successful — this channel is now linked as your owner DM.`);
336
+ }
337
+ catch (err) {
338
+ logger.warn({ err, platform }, "Failed to deliver inline pairing ack (welcome was latched)");
339
+ }
340
+ }
428
341
  }
429
342
  catch (err) {
430
343
  logger.warn({ err, platform }, "Failed to deliver welcome DM after auto-pairing");
@@ -605,12 +518,15 @@ async function startup() {
605
518
  // the normalized phrase) accepts only DMs containing it. Defeats
606
519
  // the previous "first DM wins" race entirely because attackers
607
520
  // who can't see the dashboard can't see the phrase.
608
- const { generateMagicPhrase, buildPhraseMatcher } = await import("./messaging/magic-phrase.js");
521
+ const { generateMagicPhrase, buildPhraseMatcher, isPhraseWrappedInExtraText } = await import("./messaging/magic-phrase.js");
609
522
  const phrase = generateMagicPhrase();
610
523
  const expiresAt = Date.now() + ttlMs;
611
524
  adapter.startPairing({
612
525
  match: buildPhraseMatcher(phrase),
613
526
  expiresAt,
527
+ hintReply: (text) => isPhraseWrappedInExtraText(phrase, text)
528
+ ? "Send the pairing phrase by itself, with no other text."
529
+ : null,
614
530
  });
615
531
  return { phrase, expiresAt };
616
532
  },
@@ -646,12 +562,15 @@ async function startup() {
646
562
  if (!adapter) {
647
563
  throw new Error("Discord adapter is not initialized. Save the token and retry.");
648
564
  }
649
- const { generateMagicPhrase, buildPhraseMatcher } = await import("./messaging/magic-phrase.js");
565
+ const { generateMagicPhrase, buildPhraseMatcher, isPhraseWrappedInExtraText } = await import("./messaging/magic-phrase.js");
650
566
  const phrase = generateMagicPhrase();
651
567
  const expiresAt = Date.now() + ttlMs;
652
568
  adapter.startPairing({
653
569
  match: buildPhraseMatcher(phrase),
654
570
  expiresAt,
571
+ hintReply: (text) => isPhraseWrappedInExtraText(phrase, text)
572
+ ? "Send the pairing phrase by itself, with no other text."
573
+ : null,
655
574
  });
656
575
  return { phrase, expiresAt };
657
576
  },
@@ -739,22 +658,6 @@ async function startup() {
739
658
  services,
740
659
  secretState,
741
660
  });
742
- // Google Maps (F-08: commute optimization)
743
- {
744
- const { GoogleMapsService } = await import("./services/google-maps.js");
745
- const mapsService = new GoogleMapsService(secretBroker);
746
- try {
747
- await mapsService.init();
748
- if (mapsService.available) {
749
- services.googleMaps = mapsService;
750
- }
751
- }
752
- catch (err) {
753
- const msg = err.message;
754
- logger.error({ error: msg }, "Google Maps service init failed, continuing without it");
755
- services.errors.googleMaps = msg;
756
- }
757
- }
758
661
  // Obsidian
759
662
  if (config.externalObsidianVaultName) {
760
663
  const obsidianService = new ObsidianService(config);
@@ -842,13 +745,6 @@ async function startup() {
842
745
  : null,
843
746
  state: whatsappState,
844
747
  },
845
- googleMaps: {
846
- configured: services.googleMaps !== null,
847
- connected: services.googleMaps !== null,
848
- error: services.errors.googleMaps
849
- ? toSafeErrorMessage(services.errors.googleMaps)
850
- : null,
851
- },
852
748
  };
853
749
  };
854
750
  const getMessagingStatus = () => {
@@ -880,466 +776,34 @@ async function startup() {
880
776
  }));
881
777
  };
882
778
  // ── 7. Observers ──
883
- const observerManager = new ObserverManager();
884
- // Mutable indirection: observers are constructed in this block, but the
885
- // dispatcher (owner of `emitRoadmapRefresh`) is created later in §7.3.
886
- // Pollers store this callback and only invoke it from their poll loops,
887
- // which run after `observerManager.startAll()` by then the dispatcher
888
- // has been wired via the assignment in §7.3 and the indirection resolves.
779
+ // The §7 block (5 hot-register builders + secondary observer
780
+ // registrations + the entity-mirror / context-index / MCP-auto-probe /
781
+ // observation-summarizer chain) lives in `bootstrap/observers.ts`.
782
+ // Mutable indirection: observers are constructed inside the factory,
783
+ // but the dispatcher (owner of `emitRoadmapRefresh`) is created later
784
+ // in §10. Pollers store the `triggerRoadmapRefresh` callback below
785
+ // and only invoke it from their poll loops, which run after
786
+ // `observerManager.startAll()` — by then the dispatcher has been
787
+ // wired via the assignment in §13 and the indirection resolves.
889
788
  // ROADMAP-REDESIGN §3.4 RFC-C.
890
789
  let emitRoadmapRefreshSink = null;
891
790
  const triggerRoadmapRefresh = (source) => {
892
791
  emitRoadmapRefreshSink?.(source);
893
792
  };
894
- const getNormalizedGitRepos = () => normalizeGitWatchedRepos({ gitWatchedRepos: selectGitWatchedRepos(db) });
895
- // P5 multi-account — registry resolves `gitAccounts[<alias>]` to a
896
- // `{GH_TOKEN, GIT_ASKPASS, ...}` env overlay each observer applies
897
- // per-call. The `getAccounts` thunk reads `config.gitAccounts` lazily
898
- // so a `PATCH /api/config` that mutates `config` in place via
899
- // `applyConfigUpdates`'s `Object.assign(config, runtimeUpdates)`
900
- // flows through to the next resolver call without re-instantiation
901
- // — which is why `gitAccounts` is NOT in `RESTART_REQUIRED_KEY_TUPLE`.
902
- // Per-repo PAT secrets live in the OS keychain at
903
- // `git.account.<alias>` (see secret-names.ts ScopedSecretName).
904
- const gitAccountRegistry = new GitAccountRegistry({
905
- dataDir: config.dataDir,
906
- secretBroker,
907
- getAccounts: () => config.gitAccounts,
908
- });
909
- // One-time info note: github-side rows without a local clone always
910
- // poll under the default `gh` profile when the row's `github_account`
911
- // is null. Surface this if both `gitAccounts` and github-only rows
912
- // exist so a user staring at unaccounted-for traffic from "the wrong
913
- // account" sees it in `aitne logs` rather than guessing.
914
- const githubOnlyRows = selectGithubRepoSlugs(db).length;
915
- if (Object.keys(config.gitAccounts ?? {}).length > 0
916
- && githubOnlyRows > 0) {
917
- logger.info({
918
- gitAccounts: Object.keys(config.gitAccounts).length,
919
- githubRepos: githubOnlyRows,
920
- }, "GitHub-side repository rows fall back to the default gh profile when github_account is unset. Set the row's account alias from /api/repositories or the dashboard.");
921
- }
922
- const lookupRepoAlias = (repoPath, fullName) => {
923
- const repos = getNormalizedGitRepos();
924
- if (repoPath) {
925
- const byPath = repos.find((r) => r.path === repoPath);
926
- if (byPath?.accountAlias)
927
- return byPath.accountAlias;
928
- }
929
- if (fullName) {
930
- const byOrgRepo = repos.find((r) => {
931
- if (!r.org)
932
- return false;
933
- // Repos resolved from `githubRepos` (not local paths) match by full name.
934
- return fullName.toLowerCase() === `${r.org}/${r.slug}`.toLowerCase();
935
- });
936
- if (byOrgRepo?.accountAlias)
937
- return byOrgRepo.accountAlias;
938
- }
939
- return undefined;
940
- };
941
- const queueGitProjectInitsForCurrentConfig = (source) => {
942
- if (!isSetupCompleted(db) || readDegradedMode(db))
943
- return;
944
- const repos = getNormalizedGitRepos();
945
- if (repos.length === 0)
946
- return;
947
- try {
948
- const inserted = queueMissingGitProjectInits({
949
- db,
950
- contextDir: getContextDir(config, db),
951
- dataDir: config.dataDir,
952
- workspaceDir: config.workspaceDir,
953
- repos,
954
- });
955
- if (inserted > 0) {
956
- logger.info({ inserted, source }, "Queued missing git project documentation init tasks");
957
- }
958
- }
959
- catch (err) {
960
- logger.warn({ err, source }, "Failed to queue git project documentation init tasks");
961
- }
962
- };
963
- const gitWatchedRepos = getNormalizedGitRepos();
964
- const gitRepoPaths = gitWatchedRepos.map((repo) => repo.path);
965
- let gitWatcher = null;
966
- const buildGitWatcher = () => {
967
- if (gitRepoPaths.length === 0)
968
- return null;
969
- // Per-row poll cadence (unified-repositories §5). Sourced from each
970
- // row's `poll_interval_sec` column; rows with null fall through to
971
- // the global `gitPollIntervalSeconds`.
972
- const repoIntervals = new Map(gitWatchedRepos.map((row) => [row.path, row.pollIntervalSec ?? null]));
973
- const watcher = new GitWatcher(gitRepoPaths, db, config.gitPollIntervalSeconds, {
974
- eventBus,
975
- pushOverdueMinutes: config.gitPushOverdueMinutes,
976
- repoIntervals,
977
- repoEnvResolver: async (repoPath) => {
978
- const alias = lookupRepoAlias(repoPath);
979
- if (!alias)
980
- return undefined;
981
- return (await gitAccountRegistry.buildSpawnEnv(alias)) ?? undefined;
982
- },
983
- onRepoBaseline: (repoPath) => {
984
- const repo = getNormalizedGitRepos().find((item) => item.path === repoPath);
985
- if (!repo)
986
- return;
987
- queueGitProjectInitsForCurrentConfig("git-baseline");
988
- },
989
- onLifecycleObservation: (classification) => {
990
- if (!isSetupCompleted(db) || readDegradedMode(db))
991
- return;
992
- const repoPath = typeof classification.payload.repoPath === "string"
993
- ? classification.payload.repoPath
994
- : classification.source.replace(/^git:/, "");
995
- const repo = getNormalizedGitRepos().find((item) => item.path === repoPath);
996
- if (!repo)
997
- return;
998
- const result = queueGitProjectUpdate({
999
- db,
1000
- dataDir: config.dataDir,
1001
- workspaceDir: config.workspaceDir,
1002
- repo,
1003
- event: classification,
1004
- debounceMinutes: config.gitProjectUpdateDebounceMinutes,
1005
- });
1006
- if (result === "queued" || result === "merged") {
1007
- logger.info({
1008
- repo: repo.path,
1009
- eventType: classification.eventType,
1010
- result,
1011
- }, "Queued git project documentation update");
1012
- }
1013
- // Unified-repositories §4.4 — fire any per-repo triggers
1014
- // configured for this lifecycle event. Triggers ride alongside
1015
- // the task-flow pipeline above; they do not consume the event.
1016
- const repositoryRow = getRepositoryByLocalPath(db, repoPath);
1017
- if (repositoryRow) {
1018
- void dispatchMatchingTriggers({ db, eventBus }, repositoryRow.id, classification.eventType, classification.payload);
1019
- }
1020
- },
1021
- });
1022
- gitWatcher = watcher;
1023
- return watcher;
1024
- };
1025
- if (shouldStartObserversFor(db, "git")) {
1026
- const watcher = buildGitWatcher();
1027
- if (watcher)
1028
- observerManager.register(watcher);
1029
- }
1030
- // GitHubPoller — daemon-side notification + workflow_run polling via the
1031
- // user's `gh auth login` keychain entry. Replaces the webhook receiver
1032
- // for local-first installs where exposing a public URL is impractical.
1033
- // Registered only while github.mode === "direct" now that GitHub is a
1034
- // first-class integration. Direct remains the default, preserving the
1035
- // historical "notifications on when gh is authenticated" behaviour.
1036
- const buildGithubPoller = () => {
1037
- // Per-row poll cadence (unified-repositories §5). The map is keyed by
1038
- // `owner/repo` to match `RepoBinding.fullName`; rows are sourced from
1039
- // the unified table. Local-only rows have no `owner/repo` and fall
1040
- // out of the map naturally.
1041
- const repoIntervals = new Map();
1042
- for (const row of listRepositories(db, { hasGithub: true })) {
1043
- if (row.githubOwner && row.githubRepo) {
1044
- repoIntervals.set(`${row.githubOwner}/${row.githubRepo}`, row.pollIntervalSec ?? null);
1045
- }
1046
- }
1047
- return new GitHubPoller({
1048
- db,
1049
- eventBus,
1050
- repoPaths: gitRepoPaths,
1051
- repoFullNames: selectGithubRepoSlugs(db),
1052
- pollIntervalSeconds: config.githubPollIntervalSeconds,
1053
- repoIntervals,
1054
- repoAccountAliasResolver: ({ localPath, fullName }) => lookupRepoAlias(localPath, fullName),
1055
- accountResolver: async (binding) => {
1056
- if (!binding.accountAlias)
1057
- return undefined;
1058
- return ((await gitAccountRegistry.buildSpawnEnv(binding.accountAlias)) ?? undefined);
1059
- },
1060
- // Unified-repositories §4.4 — resolve the binding's owner/repo to a
1061
- // repositories.id and fire any per-repo triggers configured for
1062
- // this event type. Failures are logged inside dispatch and do not
1063
- // bubble out so a misconfigured trigger cannot stall the poll loop.
1064
- onTriggerableEvent: async (event) => {
1065
- if (!isSetupCompleted(db) || readDegradedMode(db))
1066
- return;
1067
- let repoRow = null;
1068
- if (event.binding) {
1069
- repoRow = getRepositoryByGithub(db, event.binding.owner, event.binding.repo);
1070
- }
1071
- if (!repoRow) {
1072
- // Notifications without a `directNotificationRepos` match still
1073
- // arrive here when a `repository.full_name` is in the payload.
1074
- const fullName = typeof event.payload.repository === "string"
1075
- ? event.payload.repository
1076
- : null;
1077
- if (fullName) {
1078
- const [owner, repo] = fullName.split("/");
1079
- if (owner && repo) {
1080
- repoRow = getRepositoryByGithub(db, owner, repo);
1081
- }
1082
- }
1083
- }
1084
- if (!repoRow)
1085
- return;
1086
- await dispatchMatchingTriggers({ db, eventBus }, repoRow.id, event.eventType, event.payload);
1087
- },
1088
- });
1089
- };
1090
- if (shouldStartObserversFor(db, "github")) {
1091
- observerManager.register(buildGithubPoller());
1092
- }
1093
- // Each call returns a fresh observer so the integration-lifecycle helper
1094
- // re-registers a new instance after a mode flip — picking up any
1095
- // gitPollIntervalSeconds / gitPushOverdueMinutes / hourlyCheckEnabled
1096
- // PATCH that landed while the cron was idle.
1097
- const buildGitDelegatedCronObserver = () => new GitDelegatedCronObserver({
1098
- db,
1099
- eventBus,
1100
- repoPaths: gitRepoPaths,
1101
- githubRepos: selectGithubRepoSlugs(db),
1102
- cadenceSeconds: config.gitPollIntervalSeconds,
1103
- pushOverdueMinutes: config.gitPushOverdueMinutes,
1104
- hourlyCheckEnabled: config.hourlyCheckEnabled,
1105
- });
1106
- if (hasActiveDelegatedGitLifecycleIntegration(db)) {
1107
- observerManager.register(buildGitDelegatedCronObserver());
1108
- }
1109
- // Unified-repositories daily management cron — see
1110
- // docs/design/appendices/unified-repositories.md §4.5. Iterates rows
1111
- // whose `repository_management.enabled = 1` and writes the required
1112
- // journal/overview markdown for each row that's due.
1113
- observerManager.register(new RepositoryManagementCron({
793
+ const observers = await createObservers({
1114
794
  db,
795
+ config,
1115
796
  eventBus,
1116
- contextDir: () => getContextDir(config, db),
1117
- timezone: config.timezone || undefined,
1118
- writeTracker,
1119
- }));
1120
- // Coexistence note: the legacy /webhook/github handler also calls
1121
- // recordObservation + EventBus.put, so a user with both webhooks AND
1122
- // the poller live will receive two events per `review_requested`. This
1123
- // is a low-probability scenario (webhooks need a public URL most users
1124
- // don't expose), so we log a one-time warning rather than disabling
1125
- // either path automatically.
1126
- if (secretState.githubWebhookConfigured && shouldStartObserversFor(db, "github")) {
1127
- logger.warn("GitHub webhook secret configured AND GitHubPoller running — "
1128
- + "duplicate events possible. Remove the webhook secret or unregister "
1129
- + "the GitHub webhook on github.com to silence.");
1130
- }
1131
- // SETUP-FLOW-REDESIGN-PLAN §6.3 — `externalObsidianWatch` is a kill
1132
- // switch for the external-vault branch of the watcher. When false the
1133
- // path is preserved (the Obsidian CLI skill still sees it via
1134
- // `config.externalObsidianVaultPath`) but no chokidar instance is
1135
- // registered. Sized for power users with very large vaults that would
1136
- // otherwise produce noisy observation churn (§13 open question).
1137
- if (config.externalObsidianVaultPath && config.externalObsidianWatch) {
1138
- observerManager.register(new ObsidianWatcher(config.externalObsidianVaultPath, db, config.obsidianDebounceSeconds, writeTracker, { source: "obsidian:external", name: "obsidian:external" }));
1139
- }
1140
- // Primary-vault watcher — registered unconditionally. Stays dormant
1141
- // until `setVaultPath` points it at a real directory. The migration
1142
- // endpoint's `onPrimaryVaultPathChange` callback calls setVaultPath
1143
- // explicitly after every commit, so plain → obsidian transitions
1144
- // and obsidian-path changes both re-target without dynamic
1145
- // register/unregister plumbing.
1146
- const primaryVaultWatcher = new PrimaryVaultWatcher(db, config.obsidianDebounceSeconds, writeTracker);
1147
- await primaryVaultWatcher.setVaultPath(config.vaultMode === "obsidian" ? config.primaryVaultPath : null);
1148
- observerManager.register(primaryVaultWatcher);
1149
- // Build CalendarPoller from current services. Returns null when
1150
- // `services.calendar` is unavailable so the integration-lifecycle
1151
- // module can no-op (for example: integration flips to direct before
1152
- // OAuth is set up). The §4.5.1 gate `google_calendar.mode === "direct"`
1153
- // is checked BEFORE invoking the builder.
1154
- const buildCalendarPoller = () => {
1155
- if (!services.calendar)
1156
- return null;
1157
- return new CalendarPoller(services.calendar, db, config.calendarPollIntervalSeconds, config.googleCalendarId, writeTracker, triggerRoadmapRefresh, morningRoutineLock, config.timezone);
1158
- };
1159
- if (services.calendar && shouldStartObserversFor(db, "google_calendar")) {
1160
- const poller = buildCalendarPoller();
1161
- if (poller)
1162
- observerManager.register(poller);
1163
- }
1164
- observerManager.register(new ImminentEventScheduler(db, eventBus, config.googleCalendarId));
1165
- // Build NotionPoller from current services + config. Returns null when
1166
- // `services.notion` is unavailable or no databases are configured so
1167
- // the integration-lifecycle module can no-op (e.g. integration flips
1168
- // to direct before the API key is set up). The §4.5.1 gate
1169
- // `notion.mode === "direct"` is checked BEFORE invoking the builder.
1170
- const buildNotionPoller = () => {
1171
- if (!services.notion)
1172
- return null;
1173
- if (Object.keys(config.notionDatabaseIds).length === 0)
1174
- return null;
1175
- return new NotionPoller({
1176
- notionService: services.notion,
1177
- databaseIds: config.notionDatabaseIds,
1178
- pollIntervalSeconds: config.notionPollIntervalSeconds,
1179
- db,
1180
- writeTracker,
1181
- });
1182
- };
1183
- if (services.notion
1184
- && Object.keys(config.notionDatabaseIds).length > 0
1185
- && shouldStartObserversFor(db, "notion")) {
1186
- const poller = buildNotionPoller();
1187
- if (poller)
1188
- observerManager.register(poller);
1189
- }
1190
- if (services.mail) {
1191
- observerManager.register(new MailPoller({
1192
- registry: services.mail,
1193
- db,
1194
- writeTracker,
1195
- pollIntervalSeconds: config.mailPollIntervalSeconds,
1196
- maxMessagesPerPoll: config.mailMaxMessagesPerPoll,
1197
- authFailureRetryHours: config.mailAuthFailureRetryHours,
1198
- providerPollIntervalsSeconds: {
1199
- gmail: config.gmailPollIntervalSeconds,
1200
- },
1201
- notifyOwner: async (message) => {
1202
- await messageHub.sendToUser(message);
1203
- },
1204
- triggerRoadmapRefresh,
1205
- }));
1206
- observerManager.register(new MailReconciliationJob({
1207
- registry: services.mail,
1208
- db,
1209
- }));
1210
- }
1211
- // ── 7.04 Skill-curation observers (P22 — appendix p22-skill-self-optimization.md) ──
1212
- // Hourly walker accumulates `structure_diff` signals for the curation
1213
- // cohort. Outcomes/feedback collection was dropped from the Preview scope
1214
- // — the feature optimizes silently in the background, no metrics surface.
1215
- {
1216
- const { SkillCurationWalker } = await import("./observers/skill-curation-walker.js");
1217
- observerManager.register(new SkillCurationWalker(db, getContextDir(config), join(config.workspaceDir, "agent-assets", "skills"), config.dataDir));
1218
- // §5.4 — boot-time orphan-overlay scan. Emits one log line per orphan
1219
- // and seeds `runtime_state.skill_curation.orphan_overlays` so the
1220
- // dashboard banner can read it without re-walking the FS.
1221
- try {
1222
- const { scanAndRecordOrphanOverlays } = await import("./core/skill-curation/orphan-overlay.js");
1223
- scanAndRecordOrphanOverlays(db, config.dataDir, join(config.workspaceDir, "agent-assets", "skills"));
1224
- }
1225
- catch (err) {
1226
- logger.warn({ err }, "Skill-curation orphan-overlay scan failed at boot");
1227
- }
1228
- }
1229
- // ── 7.05 Context-index reconciler (B-004 Phase 2a) ──
1230
- // Keeps `context/context-index.md` in sync with the filesystem so the
1231
- // per-flow review-context loader can treat the index as authoritative.
1232
- // Combines: startup one-shot (30 s after boot), internal chokidar
1233
- // watcher on contextDir (10 s debounce), cron nightly (wired via
1234
- // `AgentScheduler.setContextIndexReconcilerCallback`), and API-route
1235
- // hints via `onIndexableContextChange` below.
1236
- let contextIndexReconcilerPromptSink = null;
1237
- const contextIndexReconciler = new ContextIndexReconcilerObserver({
1238
- db,
1239
- contextDir: getContextDir(config),
797
+ secretBroker,
798
+ services,
1240
799
  writeTracker,
1241
- onPromptContextChanged: (path, reason, tier, metadata) => {
1242
- // The reconciler writes one path (`context-index.md`) — route the
1243
- // prompt-cache invalidation through the same handler every other
1244
- // context write uses. The real handler is installed in §11
1245
- // (`onPromptContextChanged` ApiDependency); this indirection lets
1246
- // the observer start at §7 before the handler exists.
1247
- contextIndexReconcilerPromptSink?.(path, reason, tier, metadata);
1248
- },
800
+ blobStore,
801
+ messageHub,
1249
802
  morningRoutineLock,
1250
- timezone: config.timezone || undefined,
803
+ secretState,
804
+ triggerRoadmapRefresh,
1251
805
  });
1252
- observerManager.register(contextIndexReconciler);
1253
- // docs/design/21-management-registry-and-entities.md §7.6 P5 —
1254
- // entity-mirror watcher. Owns its own chokidar watcher (independent
1255
- // of the context-index reconciler's debounce path) so single-file
1256
- // L2 writes converge into the SQLite mirror within NFR-9's 500 ms
1257
- // budget — the §7.6 lookup contract relies on this freshness at
1258
- // scheduled-task fire time. Boot pass + watcher lifecycle handled
1259
- // by the observer wrapper.
1260
- //
1261
- // §7.2 chain — fan an L2 entity delta out to the context-index
1262
- // observer's `requestReconcile` so the rendered domain-index +
1263
- // activity-view files refresh on the same 10 s debounce as other
1264
- // fs_event triggers. Without this, those views only converged on
1265
- // the nightly cron + 30 s startup pass because `shouldIndexPath`
1266
- // filters L2 paths out of the context-index's own watcher
1267
- // (followups item 7).
1268
- observerManager.register(new EntityMirrorObserver({
1269
- db,
1270
- contextDir: getContextDir(config),
1271
- writeTracker,
1272
- onEntityChanged: () => contextIndexReconciler.requestReconcile("fs_event"),
1273
- }));
1274
- // ── 7.1 MCP auto-probe (B-003 Phase 4.3) ──
1275
- // Walks enabled mcp_servers rows every `mcpAutoProbeIntervalMinutes` and
1276
- // re-runs the probe sandbox. Set the interval to 0 to disable. The
1277
- // observer never flips `enabled` on its own — failure surfaces through
1278
- // the dashboard card's status dot, user decides whether to disable.
1279
- {
1280
- const { McpAutoProbe } = await import("./services/mcp/auto-probe.js");
1281
- observerManager.register(new McpAutoProbe({
1282
- db,
1283
- blobStore,
1284
- dataDir: config.dataDir,
1285
- intervalMinutes: config.mcpAutoProbeIntervalMinutes,
1286
- }));
1287
- }
1288
- // ── 7.2 Observation summarizer (cost-reduction-structural §A) ──
1289
- // Drains pending observation rows asynchronously: pre-filter → per-
1290
- // source LLM call → `summary_text` + `novelty_score` written back to
1291
- // the row. The hourly_check skill consumes summaries instead of
1292
- // re-fetching raw content. Disabled cleanly via
1293
- // `observationSummarizerEnabled` — when off, observations stay
1294
- // pending and the skill drops to legacy fetch-on-doubt.
1295
- if (config.observationSummarizerEnabled) {
1296
- const summarizerBinding = (() => {
1297
- try {
1298
- const row = db
1299
- .prepare(`SELECT main_backend, main_model FROM process_backend_config WHERE process_key = 'observation.summarize'`)
1300
- .get();
1301
- if (!row?.main_backend || !row.main_model)
1302
- return null;
1303
- return { backendId: row.main_backend, modelId: row.main_model };
1304
- }
1305
- catch (err) {
1306
- logger.debug({ err }, "Failed to read observation.summarize binding; using fallback");
1307
- return null;
1308
- }
1309
- })();
1310
- const summarizerClient = (() => {
1311
- const fallbackBackend = summarizerBinding?.backendId ?? "claude";
1312
- const fallbackModel = summarizerBinding?.modelId ?? "claude-haiku-4-5-20251001";
1313
- if (fallbackBackend === "claude") {
1314
- return new AnthropicSummarizerClient({
1315
- modelId: fallbackModel,
1316
- getApiKey: async () => {
1317
- const direct = await secretBroker.getBackendApiKey("claude");
1318
- if (direct)
1319
- return direct;
1320
- // Fall back to env (matches the daemon's API-key bridging policy).
1321
- return process.env.ANTHROPIC_API_KEY ?? null;
1322
- },
1323
- });
1324
- }
1325
- // Codex / Gemini summarizer support is not yet implemented; the
1326
- // worker translates `unsupported_backend` into a 'skipped' row so
1327
- // the hourly_check skill drops to its legacy fetch path.
1328
- return new UnsupportedSummarizerClient(fallbackBackend, fallbackModel);
1329
- })();
1330
- observerManager.register(new ObservationSummarizerWorker({
1331
- db,
1332
- client: summarizerClient,
1333
- concurrency: config.observationSummarizerConcurrency,
1334
- perCallTimeoutMs: config.observationSummarizerTimeoutMs,
1335
- maxLlmCallsPerMinute: config.observationSummarizerMaxCallsPerMinute,
1336
- queueDepthLimit: config.observationSummarizerQueueLimit,
1337
- preFilter: { vipMailSenders: config.vipMailSenders },
1338
- }));
1339
- }
1340
- else {
1341
- logger.info("Observation summarizer disabled — pending rows stay pending");
1342
- }
806
+ const { observerManager, primaryVaultWatcher, contextIndexReconciler, gitAccountRegistry, buildGitWatcher, buildGithubPoller, buildGitDelegatedCronObserver, buildCalendarPoller, buildNotionPoller, queueGitProjectInitsForCurrentConfig, } = observers;
1343
807
  // ── 8. Health Monitor ──
1344
808
  const healthMonitor = new HealthMonitor({
1345
809
  db,
@@ -1356,7 +820,7 @@ async function startup() {
1356
820
  // ── 9. Scheduler ──
1357
821
  const scheduler = new AgentScheduler(eventBus, db, config);
1358
822
  // ── 9.1 Custom routine scheduler (B-007 §5.8) ──
1359
- // Reads `routines/custom/*.md` from the context dir and registers a
823
+ // Reads `policies/routines/custom/*.md` from the context dir and registers a
1360
824
  // cron job per enabled routine. Reloaded from the context API whenever
1361
825
  // the agent or dashboard edits a file under that directory.
1362
826
  const customRoutineScheduler = new CustomRoutineScheduler({
@@ -1364,613 +828,140 @@ async function startup() {
1364
828
  eventBus,
1365
829
  timezone: config.timezone || undefined,
1366
830
  });
1367
- // ── 9.5 Signal Detector ──
1368
- const signalDetector = new SignalDetector(config);
1369
831
  // ── 10. Event Processing Pipeline ──
1370
- const agentCore = new ClaudeCodeCore(config, writeTracker);
1371
- const codexCore = new CodexCore(config);
1372
- const geminiCore = new GeminiCliCore(config, writeTracker, undefined, db);
1373
- // B-003 Phase 3 — wire the MCP session context so per-session workdirs pick
1374
- // up the current DB + keychain state at spawn time. Each core stays
1375
- // backward-compatible: without this call it simply runs without MCP.
1376
- const mcpContext = { db, blobStore };
1377
- agentCore.setMcpContext(mcpContext);
1378
- codexCore.setMcpContext(mcpContext);
1379
- geminiCore.setMcpContext(mcpContext);
1380
- // DELEGATED-PROXY-API-DESIGN.md Phase A boot janitor sweeps stale
1381
- // `agent-sessions/proxy-*` tempdirs left by SIGKILL'd proxy invocations,
1382
- // then construct the invoker so /api/mail/* and /api/calendar/* route
1383
- // handlers can dispatch through it once Phase B wires the route shims.
1384
- const janitorRemoved = runProxyTempdirJanitor(config.dataDir);
1385
- if (janitorRemoved > 0) {
1386
- logger.info({ removed: janitorRemoved }, "Boot janitor cleared stale delegated-proxy tempdirs");
1387
- }
1388
- const poolJanitorRemoved = runSessionPoolTempdirJanitor(join(config.dataDir, "agent-sessions"));
1389
- if (poolJanitorRemoved > 0) {
1390
- logger.info({ removed: poolJanitorRemoved }, "Boot janitor cleared stale delegated-task pool tempdirs");
1391
- }
1392
- // DELEGATED-TASK-MODE-DESIGN.md §11.1 close `delegated_task.exec`
1393
- // rows that were `in_progress` when the daemon last crashed. Without
1394
- // this, the dashboard's in-flight counter and audit views drift forever.
1395
- const taskOrphansClosed = runDelegatedTaskOrphanJanitor(db);
1396
- if (taskOrphansClosed > 0) {
1397
- logger.info({ closed: taskOrphansClosed }, "Boot janitor closed orphaned delegated_task in-progress rows");
1398
- }
1399
- const delegatedBackendInvoker = new DelegatedBackendInvoker({
832
+ // §9.5 SignalDetector + §10 event-processing pipeline (agent cores,
833
+ // BackendRouter, dispatcher + setters, NotificationManager,
834
+ // AuthHealthMonitor + recovery, DelegatedBackendInvoker / sync worker,
835
+ // VoiceTranscriber, DocsQAAdapter, rematerializeActiveDmWorkdirs,
836
+ // handleSecretChange, handleGoogleServicesReady) live in
837
+ // `bootstrap/event-pipeline.ts`. The factory closes over the existing
838
+ // adapter + service reloaders and observer builders so secret-change
839
+ // hot-reload routing remains a single dispatch table.
840
+ //
841
+ // The factory also installs the real `onMailScopeChanged` handler and
842
+ // the roadmap-refresh sink via the setter callbacks below — both are
843
+ // forward-references kept open by `let` slots above (mail) and at the
844
+ // observers factory call (roadmap).
845
+ // Declared BEFORE the event-pipeline factory call so the
846
+ // `isStartupComplete` getter passed below closes over the live latch.
847
+ // The latch flips to `true` at the end of §13 once every subsystem is
848
+ // started; until then `handleSecretChange("notion")` defers calling
849
+ // `poller.start()` to avoid double-starting the timer that
850
+ // `observerManager.startAll()` is about to start (see the matching
851
+ // comment in event-pipeline.ts:SecretChangeHandlerDeps).
852
+ let startupComplete = false;
853
+ let pendingGoogleServicesReady = false;
854
+ const eventPipeline = await createEventPipeline({
1400
855
  db,
1401
856
  config,
1402
- cores: { claude: agentCore, codex: codexCore, gemini: geminiCore },
1403
- });
1404
- let delegatedSyncWorker = null;
1405
- const buildDelegatedSyncWorker = () => {
1406
- if (!delegatedSyncWorker) {
1407
- delegatedSyncWorker = new DelegatedSyncWorker({
1408
- db,
1409
- invoker: delegatedBackendInvoker,
1410
- calendarId: config.googleCalendarId,
1411
- timezone: config.timezone,
1412
- todayWriteLock: morningRoutineLock,
1413
- triggerRoadmapRefresh,
1414
- });
1415
- }
1416
- return delegatedSyncWorker;
1417
- };
1418
- if (hasActiveDelegatedSyncIntegration(db)) {
1419
- observerManager.register(buildDelegatedSyncWorker());
1420
- }
1421
- // ── Delegated probe observer (DELEGATED-MODE-V2 §7.1) ──
1422
- // Hourly re-probe of delegated integrations' connector tools so the
1423
- // `integration_probes` cache reflects current sign-in state. Without
1424
- // this, `consultDelegatedConnectorHealth` (§4.5) has no signal to fire
1425
- // on after the wizard's first probe — the §10 "user signed out hours
1426
- // ago" risk row would stay silent.
1427
- //
1428
- // Registered here (mid-§10) rather than in §7 because it depends on the
1429
- // three agent cores constructed at the top of this section. The
1430
- // observerManager.startAll() call further down picks it up unchanged.
1431
- {
1432
- const { DelegatedProbeObserver } = await import("./observers/delegated-probe-observer.js");
1433
- observerManager.register(new DelegatedProbeObserver({
1434
- db,
1435
- agentBackends: [agentCore, codexCore, geminiCore],
1436
- intervalMinutes: config.delegatedProbeIntervalMinutes,
1437
- }));
1438
- }
1439
- const notificationManager = new NotificationManager(messageHub, db, config);
1440
- const authTelemetry = new AuthTelemetry(db);
1441
- // Shared notifier factory for auth-health-monitor and auth-recovery (D3 fix).
1442
- // Maps `kind` to notification_type + category so both callers share the
1443
- // same routing / quiet-hours-bypass logic without duplicating 30+ lines.
1444
- //
1445
- // Probe-failure and recovery DMs bypass NotificationManager's own quiet-hours
1446
- // + rate-limit gates via `category: "error"` (SAFETY_CATEGORIES member).
1447
- // Keepalive DMs stay on the standard path. See Phase 4 self-critique B2 for
1448
- // the anti-spam reasoning (clock-driven, ≤1 DM per cron tick).
1449
- const makeAuthNotifier = (source) => ({
1450
- send: async (message, options) => {
1451
- const kind = options?.kind ?? "keepalive";
1452
- const typeMap = {
1453
- probe_failure: "auth.probe_failure",
1454
- recovery: "auth.recovery",
1455
- keepalive: "auth.keepalive_reminder",
1456
- };
1457
- const notificationType = typeMap[kind] ?? "auth.keepalive_reminder";
1458
- // probe_failure and recovery bypass quiet-hours; keepalive does not.
1459
- const category = kind === "keepalive" ? "auth-health" : AUTH_PROBE_NOTIFICATION_CATEGORY;
1460
- await notificationManager.send(message, {
1461
- type: notificationType,
1462
- source,
1463
- priority: EventPriority.NORMAL,
1464
- timestamp: new Date(),
1465
- data: {},
1466
- correlationId: randomBytes(8).toString("hex"),
1467
- }, {
1468
- priority: "normal",
1469
- category,
1470
- destinationMode: "configured_only",
1471
- });
857
+ eventBus,
858
+ secretBroker,
859
+ blobStore,
860
+ writeTracker,
861
+ services,
862
+ messageHub,
863
+ dashboardAdapter,
864
+ attachmentStore,
865
+ morningRoutineLock,
866
+ roadmapWriteLock,
867
+ secretState,
868
+ observerManager,
869
+ buildCalendarPoller,
870
+ buildNotionPoller,
871
+ getGitWatcher: observers.getGitWatcher,
872
+ reloadDiscordAdapter,
873
+ reloadSlackAdapter,
874
+ reloadTelegramAdapter,
875
+ reloadGoogleServices,
876
+ reloadAppleCalendarService,
877
+ reloadNotionService,
878
+ reloadGitHubService,
879
+ scheduler,
880
+ isStartupComplete: () => startupComplete,
881
+ setMailScopeChangedHandler: (cb) => {
882
+ onMailScopeChanged = cb;
883
+ },
884
+ setRoadmapRefreshSink: (cb) => {
885
+ emitRoadmapRefreshSink = cb;
1472
886
  },
1473
887
  });
1474
- const authHealthMonitor = new AuthHealthMonitor(db, {
1475
- claude: agentCore,
1476
- codex: codexCore,
1477
- gemini: geminiCore,
1478
- }, authTelemetry, {
1479
- notifier: makeAuthNotifier("auth-health-monitor"),
1480
- // Forward referencesthese gate closures are registered here
1481
- // but only fire once `scheduler.start()` ticks the hourly cron,
1482
- // by which time `dispatcher` is fully constructed (see the
1483
- // declaration further down in this file). Calling any of these
1484
- // before then would hit TDZ; in practice the constructor and
1485
- // `reconcilePendingRecoveries` / `runKeepaliveSweep` never do.
1486
- isMorningRoutineActive: () => dispatcher.isMorningRoutineActive(),
1487
- isQuietHours: () => notificationManager.isQuietHours(),
1488
- probeDisabled: () => config.authProbeDisabled,
1489
- });
1490
- // Reset any recoveries that were in-flight when the daemon was last killed.
1491
- const recovered = authHealthMonitor.reconcilePendingRecoveries();
1492
- if (recovered > 0) {
1493
- logger.info({ count: recovered }, "Reconciled stuck auth recoveries on startup");
1494
- }
1495
- // Run the 60-day keepalive sweep once on startup. Hourly probe is
1496
- // registered via scheduler.setAuthProbeCallback — see §9.5.4.
1497
- void authHealthMonitor.runKeepaliveSweep().catch((err) => {
1498
- logger.warn({ err }, "Initial auth keepalive sweep failed");
1499
- });
1500
- const keepaliveTimer = setInterval(() => {
1501
- void authHealthMonitor.runKeepaliveSweep().catch((err) => {
1502
- logger.warn({ err }, "Periodic auth keepalive sweep failed");
1503
- });
1504
- }, 24 * 60 * 60 * 1000);
1505
- keepaliveTimer.unref?.();
1506
- // Phase 5/6: Interactive auth recovery manager. Uses the same notifier
1507
- // sink as the AuthHealthMonitor so recovery DMs flow through the same
1508
- // notification pipeline with the same anti-spam guarantees.
1509
- const authRecovery = new AuthRecovery(db, authTelemetry, authHealthMonitor, makeAuthNotifier("auth-recovery"), {
1510
- claudeRecoveryTimeoutMin: 10,
1511
- codexRecoveryTimeoutMin: 15,
1512
- geminiRecoveryTimeoutMin: 5,
1513
- });
1514
- // ── Scoped read tokens for ReadSensitive API endpoints ──
1515
- // Tokens rotate per session/workdir execution and are only injected into
1516
- // backend subprocess env, never into prompt-visible instruction files.
1517
- const readTokenManager = new ScopedReadSensitiveTokenManager();
1518
- const agentRouter = new BackendRouter(db, config, [agentCore, codexCore, geminiCore], notificationManager, authTelemetry,
1519
- // Callback to materialize instruction files for a fallback backend in an
1520
- // existing session workdir. Without this, a Claude→Codex heavy-tier
1521
- // fallback would leave the dir with only CLAUDE.md and no AGENTS.md.
1522
- // After materializing built-in files, re-sync user-authored skills so
1523
- // the newly created backend-specific dir (e.g. .codex/skills/) also
1524
- // receives user skills. The dispatcher's syncAllUserSkills ran BEFORE
1525
- // router.execute(), so the fallback dir didn't exist at that point.
1526
- (sessionDir, backendId, eventType, processKey, wikiWorkspaceName) => {
1527
- // services is the mutable ServiceRegistry — reading .calendar here
1528
- // picks up the current availability (e.g. after mid-flight OAuth).
1529
- // GitHub presence is read fresh from the unified `repositories` table
1530
- // (rows with a github side); legacy `githubRepos` config is gone.
1531
- const cfgServices = buildConfiguredServices(config, {
1532
- ...services,
1533
- github: selectGithubRepoSlugs(db).length > 0,
1534
- });
1535
- const mailAccounts = services.mail?.listActiveAccounts() ?? [];
1536
- ensureBackendMaterialized(config.workspaceDir, sessionDir, backendId, eventType, processKey, cfgServices, mailAccounts, readIntegrations(db), config.character, wikiWorkspaceName);
1537
- syncAllUserSkills(sessionDir, join(config.dataDir, "skills"));
1538
- });
1539
- // Startup validation — warn if any delegated-mode variant files are
1540
- // missing. Now checks both skill and task-flow variants for every
1541
- // currently-delegated integration against its configured `delegatedBackend`
1542
- // (not the union of all possible backends — see validateDelegatedStartup
1543
- // docstring). Never throws; the PATCH route + /health do the hard-
1544
- // rejection and user-surfacing downstream.
1545
- {
1546
- const startupIntegrations = readIntegrations(db);
1547
- const missing = validateDelegatedStartup(config.workspaceDir, startupIntegrations);
1548
- if (missing.skills.length > 0 || missing.taskFlows.length > 0) {
1549
- logger.warn({ missingSkills: missing.skills, missingTaskFlows: missing.taskFlows }, "Delegated-mode variant files missing — agent will fall back to SKILL.md / direct task-flow for affected entries; surface in /health.integrationModes");
1550
- }
1551
- }
1552
- const contextBuilder = new ContextBuilder(config, db, services);
1553
- // Task flows are simple code constants — no file system, no hot-reload needed
1554
- const sessionManager = new SessionManager(db, config);
1555
- const messageRecorder = new MessageRecorder(db);
1556
- const eventBroadcaster = new EventBroadcaster();
1557
- const auditLogger = new AuditLogger(db, {
1558
- // `/api/events/stream` is defined in terms of persisted agent_actions rows,
1559
- // not raw EventBus payloads, so the broadcaster subscribes at the audit layer.
1560
- onRowInserted: (row) => eventBroadcaster.broadcastEvent(row),
1561
- });
1562
- // Shared body for "something changed that affects what's baked into
1563
- // active DM workdirs — refresh them in place." Used by:
1564
- // - `onMailScopeChanged` (MailAccountRegistry scope-change hook)
1565
- // - the integration-mode lifecycle (DELEGATED-PROXY-API-DESIGN.md
1566
- // Phase F §4.8 — every mode flip re-materializes so the unified
1567
- // skill body and per-backend instruction file reflect the new
1568
- // state on the next turn without tearing down the SDK session)
1569
- //
1570
- // Returns null when there's no active DM session to refresh; otherwise
1571
- // the per-session summary so callers can attach it to a broadcast or
1572
- // structured log. Per-session failures stay inside the helper.
1573
- const rematerializeActiveDmWorkdirs = (reason) => {
1574
- const sessions = sessionManager.listActiveDmSessions();
1575
- if (sessions.length === 0) {
1576
- logger.debug({ reason }, "DM workdir refresh requested — no active DM sessions");
1577
- return null;
1578
- }
1579
- const cfgServices = buildConfiguredServices(config, {
1580
- ...services,
1581
- github: selectGithubRepoSlugs(db).length > 0,
1582
- });
1583
- const mailAccounts = services.mail?.listActiveAccounts() ?? [];
1584
- // Read integration state fresh inside the closure so a Phase F mode
1585
- // flip's pre-`writeIntegrations` row is not what gets baked. The
1586
- // `SkillsCompiler` uses this for variant resolution (non-proxy
1587
- // integrations like Notion need `SKILL.delegated.<backend>.md`) and
1588
- // to re-emit `applyAllDeniedToolsForSkill` soft-deny prose. Passing
1589
- // an empty object would silently regress to the latent staleness bug
1590
- // that Phase F surfaced.
1591
- const integrations = readIntegrations(db);
1592
- const summary = refreshDmSessionWorkdirs({
1593
- projectRoot: config.workspaceDir,
1594
- dataDir: config.dataDir,
1595
- sessions,
1596
- configuredServices: cfgServices,
1597
- mailAccounts,
1598
- integrations,
1599
- character: config.character,
1600
- });
1601
- return { summary, mailAccounts };
1602
- };
1603
- // Real implementation of the mail-scope-changed hook. Wired by the
1604
- // MailAccountRegistry constructor above through a forward-reference so the
1605
- // registry can be built before sessionManager / eventBroadcaster exist.
1606
- // Re-materializes every active DM session workdir so `accounts.md` and the
1607
- // `external-services` skill reflect the new scope on the next turn without
1608
- // tearing down the SDK session.
1609
- onMailScopeChanged = (reason) => {
1610
- const result = rematerializeActiveDmWorkdirs(reason);
1611
- if (!result)
1612
- return;
1613
- logger.info({ reason, ...result.summary }, "Mail scope changed — DM session workdirs re-materialized");
1614
- eventBroadcaster.broadcastEvent({
1615
- kind: "mail_scope_changed",
1616
- reason,
1617
- activeAccounts: result.mailAccounts.length,
1618
- ...result.summary,
1619
- });
1620
- };
1621
- // Management Mode Phase 2 — shared migration primitives. Long timeout
1622
- // because cross-fs copies of large vaults may legitimately run
1623
- // multiple minutes; the lock itself is cheap and only blocks a
1624
- // second concurrent /api/setup/migrate-context call.
1625
- const migrationLock = new MigrationLock(60 * 60 * 1000);
1626
- const contextWriteGate = new ContextWriteGate();
1627
- initTaskFlows(config.workspaceDir, config.dataDir);
1628
- const dispatcher = new EventDispatcher(eventBus, agentRouter, contextBuilder, getTaskFlow, notificationManager, sessionManager, messageRecorder, auditLogger, db, config, morningRoutineLock, services, roadmapWriteLock, writeTracker);
1629
- dispatcher.setSignalDetector(signalDetector);
1630
- // DOCS_QA_B7_DESIGN.md §11.1 — persistence-side citation validator
1631
- // for docs_qa sessions. Lookup runs over fts_docs (indexed by the
1632
- // docs indexer); the dispatcher only consults it when
1633
- // `isDocsQAMessage(event)` is true, so this hook is inert for
1634
- // chat/DM/routine flows and for installs that haven't ingested docs.
1635
- const docsCitationLookup = makeDocsCitationLookup(db);
1636
- dispatcher.setDocsCitationLookup(docsCitationLookup);
1637
- // Docs-QA SSE adapter — DOCS_QA_B7_DESIGN.md §S4 / §S8. Sits
1638
- // alongside `dashboardAdapter` on the same `platform="dashboard"`
1639
- // surface; the `intent: "docs_qa"` discriminator on inbound events
1640
- // forks dispatch into the docs-qa task flow + skill set + light
1641
- // tier clamp. The adapter is exposed to `createDocsRoutes` for the
1642
- // QA POST/SSE endpoints; outbound text reaches it via the dispatcher's
1643
- // `IDashboardStream` slot fanned out by `CompositeDashboardStream`.
1644
- //
1645
- // It is intentionally NOT registered with `messageHub`: the hub keys
1646
- // adapters by `platformName`, and both `DashboardAdapter` and this
1647
- // adapter declare `platformName="dashboard"`. A second registration
1648
- // would silently replace `dashboardAdapter` in the hub map (only a
1649
- // warn-log), breaking `getAdapter("dashboard")`, the
1650
- // start/stop lifecycle for the chat adapter, and any
1651
- // `sendToPlatform("dashboard", ...)` caller (DocsQAAdapter.sendMessage
1652
- // throws — it's streaming-only). DocsQAAdapter's lifecycle is owned
1653
- // by the SSE route itself: clients register on `GET /docs/qa/stream`
1654
- // and unregister on the request's `onAbort`.
1655
- const docsQAAdapter = new DocsQAAdapter((event) => void eventBus.put(event), docsCitationLookup);
1656
- // Fan-out: the dispatcher's single `IDashboardStream` slot drives
1657
- // both the chat and docs-QA adapters. Each adapter no-ops on
1658
- // unknown channelIds (per F3.2), so only the adapter that owns
1659
- // the destination channelId actually emits — fan-out is naturally
1660
- // safe (DOCS_QA_B7_DESIGN.md §9 F3.4 / §11.4).
1661
- dispatcher.setDashboardStream(new CompositeDashboardStream([dashboardAdapter, docsQAAdapter]));
1662
- dispatcher.setAttachmentStore(attachmentStore);
1663
- // Real-time routine progress for the dashboard. `dispatchSafe` emits
1664
- // `kind: "routine_started"` / `"routine_completed"` on the default
1665
- // SSE `event` channel — same pipe as `kind: "main_backend_changed"`
1666
- // — so the setup wizard's "今日の状況を生成中…" indicator can render
1667
- // without waiting on `/api/events` REST polling. Failure containment
1668
- // lives in `broadcastRoutineProgress` (swallows + warns).
1669
- dispatcher.setEventBroadcaster(eventBroadcaster);
1670
- // Local-Whisper voice transcription for inbound audio attachments.
1671
- // See docs/design/appendices/voice-transcription.md.
1672
- //
1673
- // `enabled` is driven by the `voiceTranscriptionEnabled` runtime setting
1674
- // (default `false`). The flag is opt-in via the dashboard's Voice Mode
1675
- // card, which goes through `POST /api/voice/install` so the model
1676
- // download and the daemon restart happen atomically — the constructor
1677
- // here observes the persisted flag on the next boot.
1678
- //
1679
- // Env vars stay live for advanced operators who want to override the
1680
- // model id, language, or duration cap without a settings round-trip.
1681
- // `PA_VOICE_TRANSCRIPTION_ENABLED` is honoured as a fallback when the
1682
- // setting is unset (legacy behaviour for installs predating the flag).
1683
- const voiceTranscriberMaxDuration = Number(process.env.PA_VOICE_TRANSCRIPTION_MAX_DURATION_SEC ?? "600");
1684
- const voiceEnvOverride = process.env.PA_VOICE_TRANSCRIPTION_ENABLED;
1685
- // When `PA_VOICE_TRANSCRIPTION_ENABLED` is set, env wins (operator
1686
- // override). Otherwise read live from `config` so the dashboard's
1687
- // voice install flow — which mutates `config.voiceTranscriptionEnabled`
1688
- // and persists the setting in the same boot — takes effect on the
1689
- // next inbound audio attachment without waiting for a daemon restart.
1690
- const voiceTranscriberEnabled = voiceEnvOverride !== undefined
1691
- ? voiceEnvOverride.toLowerCase() !== "false"
1692
- : () => config.voiceTranscriptionEnabled;
1693
- // Primary-language fallback: env override → runtime setting → null.
1694
- // The getter form is essential — operators can pick a language from the
1695
- // dashboard at any time and the next inbound voice attachment honours
1696
- // it without requiring a daemon restart, mirroring the `enabled` knob.
1697
- const voicePrimaryEnvOverride = process.env.PA_VOICE_TRANSCRIPTION_PRIMARY_LANGUAGE;
1698
- const voiceTranscriberPrimaryLanguage = voicePrimaryEnvOverride !== undefined
1699
- ? voicePrimaryEnvOverride.trim() || null
1700
- : () => config.voiceTranscriptionPrimaryLanguage;
1701
- dispatcher.setVoiceTranscriber(new VoiceTranscriber({
1702
- db,
1703
- modelDir: join(config.dataDir, "models", "whisper"),
1704
- enabled: voiceTranscriberEnabled,
1705
- model: process.env.PA_VOICE_TRANSCRIPTION_MODEL,
1706
- language: process.env.PA_VOICE_TRANSCRIPTION_LANGUAGE ?? null,
1707
- primaryLanguage: voiceTranscriberPrimaryLanguage,
1708
- maxDurationSec: Number.isFinite(voiceTranscriberMaxDuration)
1709
- ? voiceTranscriberMaxDuration
1710
- : 600,
1711
- }));
1712
- dispatcher.setAuthRecovery(authRecovery);
1713
- dispatcher.setAuthHealthMonitor(authHealthMonitor);
1714
- // Wire the delegated-sync refresh callback. The thunk reads the live
1715
- // `delegatedSyncWorker` reference each call so the dispatcher tracks
1716
- // re-registration when an integration mode flips. When no delegated
1717
- // integration is present, the worker is null and the call is a no-op
1718
- // — the hourly check proceeds without extra latency.
1719
- // See `docs/design/appendices/delegated-sync-opt-in.md` and the
1720
- // worker's `runDisabledCadencesForHourlyCheck` doc-comment.
1721
- dispatcher.setDelegatedSyncRefresh(async () => {
1722
- await delegatedSyncWorker?.runDisabledCadencesForHourlyCheck();
1723
- });
1724
- // Messaging bang-commands (`!stop`/`!start`/`!cost`/`!report`) — owner DM
1725
- // chokepoint that runs ahead of every other interceptor in handleMessage.
1726
- // See docs/design/backlog/messaging-bang-commands.md.
1727
- dispatcher.setBangCommandRegistry(createDefaultBangCommandRegistry());
1728
- // P22 — wire the optimizer-workdir hooks. The `materialize` callback
1729
- // captures `db`, `dataDir`, `workspaceDir`, `contextDir`, and `secretStore`
1730
- // so the dispatcher branch can invoke it without importing the workdir
1731
- // module directly. `teardown` cleans up under PA_DATA_DIR/optimizer-workdir/.
888
+ const { dispatcher, sessionManager, notificationManager, signalDetector, eventBroadcaster, auditLogger, docsQAAdapter, agentBackends, opencodeServerManager, delegatedBackendInvoker, authHealthMonitor, authRecovery, authTelemetry, readTokenManager, migrationLock, contextWriteGate, buildDelegatedSyncWorker, getDelegatedSyncWorker, rematerializeActiveDmWorkdirs, handleSecretChange, handleGoogleServicesReady, handlePromptContextChanged, keepaliveTimer, browserTaskDeadlineTimer, } = eventPipeline;
889
+ // ── 10.5 Agent Definitions load (AGENT_DEFINITIONS_DESIGN.md §6.1 / §7.1) ──
890
+ // Runs AFTER `runMigrations` (inside `initDatabase`) and BEFORE
891
+ // `scheduler.start()`: scans the built-in + user `agent.md` roots into the
892
+ // `agents` table, builds the live enabled cache the scheduler's per-built-in
893
+ // gate consults, and starts the user-root watcher for live dashboard edits.
894
+ // Crash-proof by contract a bad YAML never aborts boot.
895
+ const { enabledCache: agentEnabledCache, watcher: agentsWatcher } = bootstrapAgents({ db, config, eventBroadcaster });
896
+ scheduler.setAgentEnabledCache(agentEnabledCache);
897
+ // ── 11. Hono HTTP Server ──
898
+ // Enable webhook fallback: when GitHub webhook is configured at boot,
899
+ // upgrade the existing GitWatcher to webhook mode. (The runtime
900
+ // `handleSecretChange("github")` branch handles the post-boot case.)
1732
901
  {
1733
- const { materializeOptimizerWorkdir, teardownOptimizerWorkdir } = await import("./core/skill-curation/workdir.js");
1734
- dispatcher.setSkillCurationHooks({
1735
- materialize: (opts) => materializeOptimizerWorkdir({
1736
- db,
1737
- dataDir: config.dataDir,
1738
- workspaceDir: config.workspaceDir,
1739
- contextDir: getContextDir(config),
1740
- secretStore: secretBroker,
1741
- cadence: readSkillCurationCadence(db),
1742
- ...(opts?.manual ? { manual: true } : {}),
1743
- ...(opts?.targetSkillsOverride ? { targetSkillsOverride: opts.targetSkillsOverride } : {}),
1744
- }),
1745
- teardown: teardownOptimizerWorkdir,
1746
- });
1747
- }
1748
- if (isUserPaused(db)) {
1749
- logger.info("Restored user-paused state, autonomous work remains paused");
1750
- }
1751
- emitRoadmapRefreshSink = (source) => dispatcher.emitRoadmapRefresh(source);
1752
- agentCore.setReadTokenManager?.(readTokenManager);
1753
- geminiCore.setReadTokenManager?.(readTokenManager);
1754
- notificationManager.setSignalDetector(signalDetector);
1755
- let startupComplete = false;
1756
- let pendingGoogleServicesReady = false;
1757
- const handleGoogleServicesReady = () => {
1758
- // Start CalendarPoller if calendar was just hot-loaded AND the
1759
- // google_calendar integration is in `direct` mode. When the integration
1760
- // is `delegated`/`disabled` we keep the poller dormant — OAuth is wired
1761
- // up but the user has explicitly chosen not to poll.
1762
- if (services.calendar
1763
- && !observerManager.has("calendar")
1764
- && shouldStartObserversFor(db, "google_calendar")) {
1765
- const poller = buildCalendarPoller();
1766
- if (poller) {
1767
- observerManager.register(poller);
1768
- void poller.start();
1769
- logger.info("CalendarPoller started via hot-reload");
1770
- }
1771
- }
1772
- // Trigger morning_routine catchup if today.md is stale or missing
1773
- // (same logic as runCatchup, ensures schedule generation after first auth)
1774
- const contextDir = getContextDir(config);
1775
- const todayMdPath = join(contextDir, "today.md");
1776
- const needsMorning = !hasFreshAgentDayTodayMd(todayMdPath, config.timezone || undefined, config.dayBoundaryHour);
1777
- if (needsMorning) {
1778
- // Morning routine's post-completion hook will also check roadmap staleness.
1779
- logger.info("Google services ready — today.md stale, queueing morning_routine wake");
1780
- scheduler.queueMorningRoutineWake("google_auth_ready");
1781
- return;
1782
- }
1783
- // Only refresh roadmap independently when today.md is already current.
1784
- // If morning_routine is needed, its post-completion hook will handle stale
1785
- // roadmap regeneration after the day context has been rebuilt.
1786
- if (isRoadmapStale(contextDir)) {
1787
- logger.info("Google services ready — roadmap stale, emitting roadmap_refresh");
1788
- dispatcher.emitRoadmapRefresh("google_auth_ready");
902
+ const startupGitWatcher = observers.getGitWatcher();
903
+ if (startupGitWatcher && secretState.githubWebhookConfigured) {
904
+ startupGitWatcher.enableWebhookMode();
1789
905
  }
1790
- };
1791
- const handleSecretChange = async (scope) => {
1792
- switch (scope) {
1793
- case "slack":
1794
- await reloadSlackAdapter(true);
1795
- return;
1796
- case "telegram":
1797
- await reloadTelegramAdapter(true);
1798
- return;
1799
- case "discord":
1800
- await reloadDiscordAdapter(true);
1801
- return;
1802
- case "notion":
1803
- await reloadNotionService();
1804
- // Hot-reload: if the user just added the Notion API key while
1805
- // the integration is already in `direct` mode, register the
1806
- // poller now so they don't have to restart the daemon.
1807
- // Mirrors the calendar-side `handleGoogleServicesReady` path —
1808
- // the mode-flip route covers `delegated→direct`, and this
1809
- // covers the orthogonal "key arrives after direct was set"
1810
- // case. Idempotent via observerManager.has().
1811
- if (services.notion
1812
- && !observerManager.has("notion-poller")
1813
- && Object.keys(config.notionDatabaseIds).length > 0
1814
- && shouldStartObserversFor(db, "notion")) {
1815
- const poller = buildNotionPoller();
1816
- if (poller) {
1817
- observerManager.register(poller);
1818
- void poller.start();
1819
- logger.info("NotionPoller started via hot-reload");
1820
- }
1821
- }
1822
- return;
1823
- case "github":
1824
- await reloadGitHubService();
1825
- if (gitWatcher && secretState.githubWebhookConfigured) {
1826
- gitWatcher.enableWebhookMode();
1827
- }
1828
- return;
1829
- case "google":
1830
- await reloadGoogleServices();
1831
- return;
1832
- case "apple_calendar":
1833
- await reloadAppleCalendarService();
1834
- return;
1835
- case "apiToken":
1836
- default:
1837
- return;
1838
- }
1839
- };
1840
- // ── 11. Hono HTTP Server ──
1841
- // Enable webhook fallback: when GitHub webhook is configured, reduce GitWatcher frequency
1842
- const startupGitWatcher = gitWatcher;
1843
- if (startupGitWatcher && secretState.githubWebhookConfigured) {
1844
- startupGitWatcher.enableWebhookMode();
1845
906
  }
1846
- const handlePromptContextChanged = (path, reason, tier, metadata) => {
1847
- const setupMode = dispatcher.getCurrentSetupMode();
1848
- const decision = applyPromptContextStaleness({ path, reason, tier, metadata }, {
1849
- dmStalenessStrict: config.dmStalenessStrict,
1850
- setupInProgress: setupMode !== null,
1851
- markContextChanged: () => markContextChanged(db),
1852
- markActiveDmSessionsStale: (staleReason) => sessionManager.markActiveDmSessionsStale(staleReason),
1853
- });
1854
- logger.debug({
1855
- path,
1856
- reason,
1857
- tier_decided: decision.effectiveTier,
1858
- tier_requested: decision.requestedTier,
1859
- tier_reason: metadata?.tierReason,
1860
- dmStalenessStrict: config.dmStalenessStrict,
1861
- mode: setupMode,
1862
- invalidatesDmSessions: decision.invalidatesDmSessions,
1863
- skippedForSetup: decision.skippedForSetup,
1864
- }, "Prompt context staleness classified");
1865
- if (decision.skippedForSetup) {
1866
- logger.info({ path, reason, mode: setupMode }, "Skipping DM session stale flag - setup in progress");
1867
- }
1868
- };
1869
- const app = createApp({
907
+ // §11 Hono server composed via `bootstrap/api.ts` per
908
+ // `docs/design/appendices/index-bootstrap-stage-split.md` Phase B-3.
909
+ // The factory assembles `ApiDependencies` from the live subsystem
910
+ // refs + the cross-stage closures (`handleSecretChange`,
911
+ // `handleGoogleServicesReady`, `handlePromptContextChanged`,
912
+ // `rematerializeActiveDmWorkdirs`, `fireRoadmapMaintenance`) that
913
+ // remain in this scope until Phase B-4 lifts them into
914
+ // `bootstrap/event-pipeline.ts`. The `overrideGlobalObjects: false`
915
+ // workaround for `@huggingface/transformers`'s cache-put path stays
916
+ // wired inside the factory — see the inline comment there.
917
+ const { server } = startApiServer({
1870
918
  db,
1871
919
  config,
1872
920
  secretBroker,
1873
- readTokenValidator: (token) => readTokenManager.isValid(token),
1874
- enforceReadToken: config.enforceReadToken,
1875
- agentBackends: [agentCore, codexCore, geminiCore],
921
+ services,
922
+ blobStore,
923
+ agentBackends,
1876
924
  authHealthMonitor,
1877
925
  authRecovery,
1878
926
  authTelemetry,
1879
927
  eventBus,
928
+ readTokenManager,
1880
929
  morningRoutineLock,
1881
930
  roadmapWriteLock,
1882
931
  migrationLock,
1883
932
  contextWriteGate,
933
+ dispatcher,
934
+ sessionManager,
935
+ scheduler,
936
+ agentEnabledCache,
937
+ customRoutineScheduler,
938
+ healthMonitor,
939
+ heartbeat,
940
+ messageHub,
1884
941
  observerManager,
1885
- delegatedInvoker: delegatedBackendInvoker,
942
+ contextIndexReconciler,
943
+ primaryVaultWatcher,
944
+ delegatedBackendInvoker,
1886
945
  gitAccountRegistry,
1887
- onPrimaryVaultPathChange: (newPath) => primaryVaultWatcher.setVaultPath(newPath),
1888
- onGitReposChanged: () => queueGitProjectInitsForCurrentConfig("config-patch"),
1889
- getInFlightExecutions: () => dispatcher.getInFlightExecutions(),
1890
- getHealthData: () => {
1891
- const status = healthMonitor.getStatus();
1892
- return {
1893
- uptime: status.daemonUptime,
1894
- eventBusSize: status.eventBusSize,
1895
- activeSessions: status.activeSessions,
1896
- connectedPlatforms: status.connectedPlatforms,
1897
- registeredObservers: status.registeredObservers,
1898
- missingContextFiles: status.missingContextFiles,
1899
- contextFilesOk: status.contextFilesOk,
1900
- };
1901
- },
1902
- getLastTickAt: () => heartbeat.getLastTickAt(),
1903
- services,
1904
- isStartupComplete: () => startupComplete,
946
+ // BROWSER_TASK_REDESIGN_PLAN.md §5 / §5.1 — runner + shared slot
947
+ // state. Constructed in event-pipeline; threaded through here so
948
+ // the API surface's POST / GET / cancel routes operate on the
949
+ // same in-memory state as the runner's promote/release cascade.
950
+ browserTaskRunner: eventPipeline.browserTaskRunner,
951
+ browserTaskSlotStateRef: eventPipeline.browserTaskSlotStateRef,
952
+ writeTracker,
953
+ auditLogger,
954
+ attachmentStore,
955
+ dashboardAdapter,
956
+ docsQAAdapter,
957
+ docsIndexer,
958
+ eventBroadcaster,
1905
959
  getIntegrationStatus,
1906
960
  getMessagingStatus,
1907
- // Bang-commands `/api/health` surface — messaging-bang-commands.md §6.1.
1908
- // Returns `"ok"` for the unblocked case so dashboards never have to
1909
- // null-check, while preserving the original gate enum for the blocked
1910
- // states.
1911
- getAutonomousState: () => dispatcher.isAutonomousAllowed() ?? "ok",
1912
- getNotificationDestinations: () => ({
1913
- defaultPlatforms: config.defaultNotificationPlatforms,
1914
- effectiveFallbackPlatforms: messageHub.getEffectiveFallbackPlatforms(),
1915
- }),
1916
- getIntegrationDriftSyncStatus: () => delegatedSyncWorker?.getStatus() ?? {
1917
- workerRunning: false,
1918
- lastSuccessAt: null,
1919
- circuitState: "ok",
1920
- activeHours: { startHour: 4, endHour: 24 },
1921
- withinActiveHours: false,
1922
- cadences: {},
1923
- unrecognizedIntervalKeys: [],
1924
- ttlContractViolations: [],
1925
- },
1926
- // delegated-sync opt-in routes consume the live worker reference for
1927
- // cadence Run Now + status snapshot. When no integration is in
1928
- // delegated mode the worker is null and the routes report a
1929
- // worker_unavailable / empty-status response — see
1930
- // `docs/design/appendices/delegated-sync-opt-in.md`.
1931
- get delegatedSyncWorker() {
1932
- return delegatedSyncWorker ?? undefined;
1933
- },
1934
- sendNotification: async ({ message, platforms, priority, notificationType, originSessionId, }) => {
1935
- const dispatchId = randomBytes(16).toString("hex");
1936
- const deliveries = await messageHub.sendToUser(message, platforms, {
1937
- dispatchId,
1938
- notificationType: notificationType ?? "agent",
1939
- priority: priority ?? "normal",
1940
- contentSummary: message.slice(0, 200),
1941
- });
1942
- if (deliveries.length > 0) {
1943
- const insert = db.prepare(`INSERT INTO notification_log (
1944
- dispatch_id,
1945
- notification_type,
1946
- priority,
1947
- platform,
1948
- delivery_channel,
1949
- delivery_message_id,
1950
- content_summary,
1951
- status,
1952
- delivered_at
1953
- )
1954
- VALUES (?, ?, ?, ?, ?, ?, ?, 'delivered', CURRENT_TIMESTAMP)`);
1955
- for (const delivery of deliveries) {
1956
- insert.run(dispatchId, notificationType ?? "agent", priority ?? "normal", delivery.platform, delivery.channel, delivery.messageId ?? null, message.slice(0, 200));
1957
- }
1958
- recordProactiveForwardDeliveries({
1959
- db,
1960
- config,
1961
- deliveries,
1962
- content: message,
1963
- dispatchId,
1964
- dispatchIds: [dispatchId],
1965
- originSessionIds: originSessionId !== undefined ? [originSessionId] : [],
1966
- notificationType: "proactive_forward",
1967
- });
1968
- }
1969
- return { dispatchId, deliveries };
1970
- },
1971
- markEventNotified: (correlationId) => {
1972
- dispatcher.markEventNotified(correlationId);
1973
- },
961
+ isStartupComplete: () => startupComplete,
962
+ getDelegatedSyncWorker,
963
+ handleSecretChange,
964
+ handlePromptContextChanged,
1974
965
  onGoogleServicesReady: () => {
1975
966
  if (!startupComplete) {
1976
967
  pendingGoogleServicesReady = true;
@@ -1979,261 +970,24 @@ async function startup() {
1979
970
  }
1980
971
  handleGoogleServicesReady();
1981
972
  },
1982
- onScheduleConfigChanged: () => scheduler.reloadCrons(),
1983
- onIntegrationModeChange: async (key, prev, next) => {
1984
- const buildObserver = (observerName) => {
1985
- // Registry-gated direct observers. Mail's multi-provider poller is a
1986
- // deferred follow-up — gmail.observersTouched is empty, so that
1987
- // branch remains unreachable today.
1988
- if (observerName === "calendar")
1989
- return buildCalendarPoller();
1990
- if (observerName === "notion-poller")
1991
- return buildNotionPoller();
1992
- if (observerName === "git")
1993
- return buildGitWatcher();
1994
- if (observerName === "github")
1995
- return buildGithubPoller();
1996
- return null;
1997
- };
1998
- await applyIntegrationModeChange({
1999
- db,
2000
- observerManager,
2001
- buildObserver,
2002
- buildDelegatedSyncWorker,
2003
- buildGitDelegatedCronObserver,
2004
- // DELEGATED-PROXY-API-DESIGN.md Phase F (§4.8) — every mode
2005
- // change re-materializes active DM workdirs so the next turn
2006
- // picks up the new skill body / accounts.md / instruction file
2007
- // without tearing down the SDK session.
2008
- rematerializeDmSessions: (reason) => {
2009
- const result = rematerializeActiveDmWorkdirs(reason);
2010
- if (!result)
2011
- return;
2012
- logger.info({ reason, ...result.summary }, "Integration mode changed — DM session workdirs re-materialized");
2013
- },
2014
- }, key, prev, next);
2015
- if (key === "git" && next.mode !== "direct") {
2016
- gitWatcher = null;
2017
- }
2018
- },
2019
- onMainBackendChange: (reason) => {
2020
- // DELEGATED-MODE-V2-DESIGN.md §4.4 — every main-backend flip
2021
- // re-materializes active DM workdirs so the next turn's skill
2022
- // variant and instruction file reflect the new same- vs.
2023
- // cross-backend topology. Mirrors the `onMailScopeChanged`
2024
- // pattern: helper handles the "no active sessions" no-op + per-
2025
- // session failure containment, and we broadcast a structured
2026
- // event so the dashboard can refresh without polling.
2027
- const result = rematerializeActiveDmWorkdirs(reason);
2028
- if (!result)
2029
- return;
2030
- logger.info({ reason, ...result.summary }, "Main backend changed — DM session workdirs re-materialized");
2031
- eventBroadcaster.broadcastEvent({
2032
- kind: "main_backend_changed",
2033
- reason,
2034
- ...result.summary,
2035
- });
2036
- },
2037
- onSetupStart: (mode) => {
2038
- dispatcher.beginSetupMode(mode);
2039
- },
2040
- onSecretChanged: handleSecretChange,
2041
- onSetupComplete: () => {
2042
- dispatcher.clearSetupMode();
2043
- // Kick off an immediate morning routine so today.md is generated
2044
- // right away — otherwise the user completes setup mid-day and sits
2045
- // without a populated today.md until 04:00 next morning. We go
2046
- // through the scheduler's queueMorningRoutineWake so:
2047
- // - the dedup check prevents a double-run if startup catchup was
2048
- // about to kick off the same routine (race on first boot after
2049
- // setup completes)
2050
- // - the wake task is durable: if the daemon crashes before the
2051
- // routine runs, it replays on restart via ScheduleWatcher
2052
- // - ScheduleWatcher obeys the autonomous-work gate, so in the
2053
- // unlikely case clearSetupMode fails to persist, the gate
2054
- // still prevents the routine from running mid-setup.
2055
- // Don't emit roadmap_refresh here — skeleton has "(Not yet configured)"
2056
- // which isRoadmapStale() detects. The refresh will be triggered by:
2057
- // - morning_routine's post-completion hook, or
2058
- // - onGoogleServicesReady (once calendar auth completes)
2059
- // This avoids generating a roadmap before calendar data is available.
2060
- try {
2061
- scheduler.queueMorningRoutineWake("setup_complete");
2062
- }
2063
- catch (err) {
2064
- logger.error({ err }, "Failed to queue post-setup morning routine — today.md will not be generated until next 04:00");
2065
- }
2066
- // Fire-and-forget: greet the user on every connected messaging
2067
- // platform exactly once. The runtime_state latch inside the helper
2068
- // makes this idempotent across repeated setup completions.
2069
- void sendSetupWelcomeDm({ db, messageHub }).catch((err) => {
2070
- logger.error({ err }, "Welcome DM dispatch crashed");
2071
- });
2072
- },
2073
- onPromptContextChanged: (path, reason, tier, metadata) => {
2074
- // Layer-3 defense for the Customize Your Rules bug: even if the
2075
- // setup conversation's own agent writes to today/roadmap/management-
2076
- // rules mid-flight (not typical, but possible via skills), we must
2077
- // NOT mark the owner-DM session stale. Marking stale would refresh
2078
- // the conversation_sessions row on the next turn, drop the stored
2079
- // Claude SDK session_id, and force a fresh `setup.initial` execute
2080
- // that loses prior Q&A history. Layers 1 (autonomous-work gate)
2081
- // and 2 (scope-agnostic currentSetupMode) keep prompt selection
2082
- // correct, but only layer 3 preserves in-conversation continuity.
2083
- // For loud-tier changes, persist the change moment FIRST so a crash
2084
- // between the DB write and stale-flag update still leaves the durable
2085
- // signal in place — the in-memory flag on SessionManager is lost on
2086
- // restart, so if it were written before the DB write we could lose
2087
- // the signal entirely on a process crash mid-hook.
2088
- //
2089
- // The persisted `dashboard_context_changed_at` is consulted by both
2090
- // `continueDashboardSession` (resume path) and `getOrCreateDm`
2091
- // (every DM turn) to decide whether the stored SDK session has gone
2092
- // stale and must be discarded before resume.
2093
- handlePromptContextChanged(path, reason, tier, metadata);
2094
- },
2095
- onIndexableContextChange: (_path) => {
2096
- // API-route hint: any successful PUT/PATCH/DELETE under `/context/*`
2097
- // queues a reconcile. The observer's own chokidar watcher already
2098
- // catches manual edits the API bypasses (e.g. the user editing via
2099
- // Obsidian when contextDir *is* the Obsidian vault) — this hint
2100
- // shortens reconcile latency for API-origin writes from chokidar
2101
- // debounce + stabilityThreshold to the observer's 10s debounce. The
2102
- // reconciler short-circuits when nothing changed, so firing for
2103
- // non-indexed paths is harmless.
2104
- contextIndexReconciler.requestReconcile("manual");
2105
- },
2106
- onCustomRoutinesChanged: () => {
2107
- try {
2108
- customRoutineScheduler.reload();
2109
- }
2110
- catch (err) {
2111
- logger.error({ err }, "Custom routine reload failed");
2112
- }
2113
- },
2114
- triggerHourlyCheck: (source, options) => dispatcher.triggerHourlyCheck(source, options),
2115
- triggerRoadmapRefresh: (source, options) => dispatcher.emitRoadmapRefresh(source, options),
2116
- endDashboardSession: (channelId) => endDashboardSessionFromChannel({
2117
- sessionManager,
2118
- channelId,
2119
- }),
2120
- continueDashboardSession: async (sessionId) => continueDashboardSessionFromHistory({
2121
- db,
2122
- dataDir: config.dataDir,
2123
- sessionManager,
2124
- sessionId,
2125
- }),
2126
- writeTracker,
2127
- blobStore,
2128
- dashboardAdapter,
2129
- eventBroadcaster,
2130
- attachmentStore,
2131
- auditLogger,
2132
- validateAttachmentTurnToken: (token) => dispatcher.validateAttachmentTurnToken(token),
2133
- whatsappControls: {
2134
- isInitialized: () => adapterState.whatsapp !== null,
2135
- enable: async () => {
2136
- const adapter = buildWhatsAppAdapter();
2137
- if (adapter.getStatus() === "disabled") {
2138
- await adapter.start();
2139
- }
2140
- },
2141
- disable: async () => {
2142
- await teardownWhatsAppAdapter();
2143
- },
2144
- requestQr: async () => {
2145
- if (!adapterState.whatsapp) {
2146
- await enableWhatsAppAdapter();
2147
- }
2148
- await adapterState.whatsapp.requestQR();
2149
- },
2150
- waitForQr: async (timeoutMs = 10_000) => {
2151
- if (!adapterState.whatsapp) {
2152
- await enableWhatsAppAdapter();
2153
- }
2154
- const snapshot = await adapterState.whatsapp.waitForQr(timeoutMs);
2155
- return whatsappQrResponseFromAdapter(adapterState.whatsapp, snapshot);
2156
- },
2157
- getQrResponse: () => whatsappQrResponseFromAdapter(adapterState.whatsapp),
2158
- reset: async (timeoutMs = 10_000) => {
2159
- // 1. Stop + unregister any live adapter so no Baileys callbacks fire
2160
- // against the auth dir while we delete it.
2161
- await teardownWhatsAppAdapter();
2162
- // 2. Wipe Baileys' multi-file auth state. Without this, a fresh
2163
- // enable() would re-load the stale creds and never emit a QR —
2164
- // which is exactly the "前のデータが残っているのか pair できない"
2165
- // failure mode the dashboard's "Reset connection" button exists
2166
- // to recover from. Recursive + force so a partially-written dir
2167
- // (e.g. only qr.txt present, no creds.json yet) still wipes
2168
- // cleanly. `force: true` also no-ops if the dir is already gone.
2169
- const authDir = config.whatsappAuthDir ?? join(config.dataDir, "whatsapp", "auth");
2170
- try {
2171
- rmSync(authDir, { recursive: true, force: true });
2172
- }
2173
- catch (err) {
2174
- logger.warn({ err, authDir }, "Failed to wipe WhatsApp auth directory during reset");
2175
- }
2176
- // 3. Drop the cached owner_channels mapping so a freshly-paired
2177
- // session re-discovers the channel id from the inbound auth
2178
- // handshake rather than reusing the prior LID alias.
2179
- try {
2180
- db
2181
- .prepare("DELETE FROM owner_channels WHERE platform = ?")
2182
- .run("whatsapp");
2183
- }
2184
- catch (err) {
2185
- logger.warn({ err }, "Failed to clear WhatsApp owner_channels row during reset");
2186
- }
2187
- // 4. If the integration is still enabled, rebuild the adapter and
2188
- // await the first scannable QR so the dashboard can render it
2189
- // in the same request that triggered the reset.
2190
- if (!config.whatsappEnabled) {
2191
- return whatsappQrResponseFromAdapter(null);
2192
- }
2193
- await enableWhatsAppAdapter();
2194
- const snapshot = await adapterState.whatsapp.waitForQr(timeoutMs);
2195
- return whatsappQrResponseFromAdapter(adapterState.whatsapp, snapshot);
2196
- },
2197
- },
2198
- messagingControls: {
2199
- telegram: buildTelegramControls(),
2200
- slack: buildSlackControls(),
2201
- discord: buildDiscordControls(),
2202
- },
973
+ rematerializeActiveDmWorkdirs,
974
+ fireRoadmapMaintenance,
975
+ buildCalendarPoller,
976
+ buildNotionPoller,
977
+ buildGitWatcher,
978
+ buildGithubPoller,
979
+ buildDelegatedSyncWorker,
980
+ buildGitDelegatedCronObserver,
981
+ clearGitWatcher: observers.clearGitWatcher,
982
+ adapterState,
983
+ buildWhatsAppAdapter,
984
+ teardownWhatsAppAdapter,
985
+ enableWhatsAppAdapter,
986
+ buildTelegramControls,
987
+ buildSlackControls,
988
+ buildDiscordControls,
989
+ queueGitProjectInitsForCurrentConfig,
2203
990
  });
2204
- // Mount /api/docs/* (DOCS_QA_DESIGN.md §10.4 + DOCS_QA_B7_DESIGN.md
2205
- // §S5–S6) after createApp so the indexer handle and the QA SSE
2206
- // adapter can be threaded in without extending ApiDependencies. The
2207
- // read endpoints don't need messaging/dispatcher deps; the QA
2208
- // POST/SSE pair leans on `docsQAAdapter` to register clients and
2209
- // enqueue docs_qa events.
2210
- app.route("/api", createDocsRoutes({
2211
- db,
2212
- ...(docsIndexer ? { indexer: docsIndexer } : {}),
2213
- docsQAAdapter,
2214
- }));
2215
- const server = serve({
2216
- fetch: app.fetch,
2217
- hostname: "127.0.0.1",
2218
- port: config.apiPort,
2219
- // @hono/node-server's getRequestListener defaults to replacing
2220
- // `globalThis.Request` / `globalThis.Response` with its own lazy
2221
- // wrapper classes (named `_Request` / `_Response`) for response-
2222
- // body materialization performance. The wrappers are prototype-
2223
- // chained to the native classes — fine for Hono's own response
2224
- // path — but they break `instanceof Response` checks for objects
2225
- // returned by native `fetch()`, because a native Response's
2226
- // prototype chain doesn't include `_Response.prototype`. This
2227
- // makes `@huggingface/transformers`'s `toCacheResponse` check
2228
- // (`response instanceof Response && response.status === 200`)
2229
- // evaluate to false on fresh fetches, which silently skips
2230
- // `cache.put` and then throws "Unable to get model file path or
2231
- // buffer." Disabling the override keeps the native globals
2232
- // intact and costs us nothing — we don't construct Hono's
2233
- // `Response` instances directly anywhere in the daemon.
2234
- overrideGlobalObjects: false,
2235
- });
2236
- logger.info({ port: config.apiPort }, "API server listening");
2237
991
  void dispatcher.run(); // Start consuming dashboard events as soon as the API is live
2238
992
  // Notifications Center heartbeat (docs/design/20-notifications-center.md
2239
993
  // §"Daemon heartbeat"). MUST start immediately after the API server is
@@ -2246,9 +1000,24 @@ async function startup() {
2246
1000
  // minutes, so this ordering is load-bearing, not cosmetic.
2247
1001
  heartbeat.start();
2248
1002
  // ── 12. Catchup (recover missed actions after restart) ──
2249
- // Register day boundary callback: summarize DM sessions at 4 AM before morning routine
1003
+ // Register day boundary callback: summarize DM sessions at 4 AM before
1004
+ // morning routine. Then fan out one
1005
+ // `routine.research_cluster_update` event per active browser-history
1006
+ // research cluster with new activity in the last 24h
1007
+ // (BROWSER_HISTORY_INTEGRATION_PLAN §10.6 step 3). The fan-out is
1008
+ // bounded at 25 clusters / cycle; backlog clusters surface on the
1009
+ // next day-boundary tick.
2250
1010
  scheduler.setDayBoundaryCallback(async () => {
2251
1011
  await dispatcher.summarizeDmSessions();
1012
+ try {
1013
+ const result = await fanoutResearchClusterUpdates(db, eventBus);
1014
+ if (result.enqueuedSlugs.length > 0) {
1015
+ logger.info({ enqueuedSlugs: result.enqueuedSlugs }, "Research cluster updates enqueued at day boundary");
1016
+ }
1017
+ }
1018
+ catch (err) {
1019
+ logger.error({ err }, "Research cluster update fan-out failed; will retry next day boundary");
1020
+ }
2252
1021
  });
2253
1022
  // Register direct DM callback: sends scheduled messages without running an agent
2254
1023
  scheduler.setSendDmCallback(async (message, platforms) => {
@@ -2275,18 +1044,76 @@ async function startup() {
2275
1044
  // means a reconcile during setup.initial does not destroy in-flight
2276
1045
  // setup session state — see the matching `onPromptContextChanged`
2277
1046
  // handler in the createApp dependencies above for the layered guards.
2278
- contextIndexReconcilerPromptSink = handlePromptContextChanged;
1047
+ observers.setPromptContextChangedSink(handlePromptContextChanged);
1048
+ // Evening-review slimdown §2.2 — daily mechanical roadmap.md
1049
+ // maintenance at 17:45 local. The pass acquires the same
1050
+ // `roadmapWriteLock` singleton the dispatcher uses for
1051
+ // `routine.roadmap_refresh` so a refresh mid-flight (rare at that
1052
+ // time of day) defers the maintenance to the next tick instead of
1053
+ // racing. `writeTracker.markWriting` tags the resulting fs event as
1054
+ // agent-originated so the Obsidian / Git observers do not loop on
1055
+ // their own output.
1056
+ // Shared closure used by both the 17:45 cron callback above and the
1057
+ // `triggerRoadmapMaintenance` API dependency wired into `createApp`.
1058
+ // Keeping a single fire site means the cron path and the
1059
+ // `aitne run-now roadmap_maintenance` path operate on identical deps
1060
+ // — no drift between the scheduled and the manual surface.
1061
+ //
1062
+ // Async because the runner now wraps its roadmap.md write in the
1063
+ // per-path serializer (avoids HTTP-vs-direct clobbers). Callers
1064
+ // must await or fire-and-forget through `.catch`.
1065
+ function fireRoadmapMaintenance() {
1066
+ return runRoadmapMechanicalMaintenance({
1067
+ db,
1068
+ contextDir: getContextDir(config, db),
1069
+ roadmapWriteLock,
1070
+ writeTracker,
1071
+ timezone: config.timezone || undefined,
1072
+ onIndexableContextChange: () => contextIndexReconciler.requestReconcile("manual"),
1073
+ });
1074
+ }
1075
+ scheduler.setRoadmapMaintenanceCallback(() => {
1076
+ fireRoadmapMaintenance().catch((err) => {
1077
+ logger.error({ err }, "runRoadmapMechanicalMaintenance threw");
1078
+ });
1079
+ });
1080
+ // BROWSER_HISTORY_INTEGRATION_PLAN §5.F2 P4a — pre-morning digest
1081
+ // job. Fires at `dayBoundaryHour − 1` local, gated by the same
1082
+ // integration-state check that hides the rest of the browser-history
1083
+ // surface when the user has set `browser_history` to `disabled`.
1084
+ // The callback owns its own try/catch (`safeRunPreMorningDigestJob`)
1085
+ // so a transient SQL or fs failure never crashes the cron tick.
1086
+ scheduler.setBrowserHistoryPreMorningDigestCallback(() => {
1087
+ if (!shouldStartObserversFor(db, "browser_history"))
1088
+ return;
1089
+ safeRunPreMorningDigestJob({
1090
+ db,
1091
+ contextDir: getContextDir(config, db),
1092
+ boundary: {
1093
+ timezone: config.timezone || undefined,
1094
+ dayBoundaryHour: config.dayBoundaryHour,
1095
+ },
1096
+ });
1097
+ });
2279
1098
  // Phase 4 auth probe — runs BEFORE the hourly check on each cron
2280
1099
  // tick so auth health detection happens independently of the
2281
1100
  // observation-threshold gate. checkAll() owns its own kill switch
2282
1101
  // (authProbeDisabled), morning-routine skip, and in-flight dedupe.
2283
1102
  scheduler.setAuthProbeCallback(() => authHealthMonitor.checkAll());
2284
- // Wire the autonomous-work gate: when rules/management.md is missing
1103
+ // Wire the autonomous-work gate: when policies/management.md is missing
2285
1104
  // or a setup conversation is active, the scheduler pauses cron routines
2286
1105
  // and ScheduleWatcher claims. This prevents any autonomous turn from
2287
1106
  // racing with the dashboard setup flow and triggering the stale-session
2288
1107
  // bug that killed setup mode mid-conversation.
2289
1108
  scheduler.setAutonomousGate(() => dispatcher.isAutonomousAllowed());
1109
+ // Pre-routine morning_routine gate (sleep-skip recovery). When the
1110
+ // current agent-day's morning_routine has not completed yet — typical
1111
+ // cause: Mac slept through the 04:00 cron tick — hourly_check and the
1112
+ // review routines enqueue a wake row instead of running on stale state.
1113
+ // Wired here after both `dispatcher` and `scheduler` exist so the
1114
+ // binding is a single, stable function reference for the duration of
1115
+ // the process.
1116
+ dispatcher.setQueueMorningRoutineWake((source, options) => scheduler.queueMorningRoutineWake(source, options));
2290
1117
  const startupCatchup = await runCatchup(db, dispatcher, config);
2291
1118
  // ── 13. Start all components ──
2292
1119
  await messageHub.startAll();
@@ -2294,15 +1121,58 @@ async function startup() {
2294
1121
  customRoutineScheduler.start();
2295
1122
  signalDetector.start();
2296
1123
  const registeredPlatforms = messageHub.getPlatforms();
2297
- if (registeredPlatforms.length > 0 && !messageHub.getAdapter(config.primaryPlatform)) {
2298
- const fallbackPlatform = messageHub.getEffectiveFallbackPlatforms()[0]
2299
- ?? registeredPlatforms[0];
2300
- logger.error({
2301
- requestedPrimary: config.primaryPlatform,
2302
- fallbackPrimary: fallbackPlatform,
2303
- }, "Primary platform is not registered, falling back");
2304
- messageHub.setPrimaryPlatform(fallbackPlatform);
2305
- config.primaryPlatform = fallbackPlatform;
1124
+ // Single-app installs (Telegram-only / Discord-only / etc.) would
1125
+ // otherwise log "Primary platform is not registered, falling back" on
1126
+ // every boot because the schema default is "slack" and the fallback was
1127
+ // never persisted. The resolver checks whether the operator ever made
1128
+ // an explicit choice (DB settings row or `PA_PRIMARY_PLATFORM` env);
1129
+ // when they didn't, we adopt and persist the first eligible adapter so
1130
+ // the next boot is silent.
1131
+ //
1132
+ // "First set up" semantics for the multi-adapter case (spec: when
1133
+ // multiple adapters are configured, the first one paired wins) come from
1134
+ // `selectFirstPairedPlatform`, which reads `owner_channels.rowid` ASC —
1135
+ // a chronological proxy that captures the first platform to complete
1136
+ // the cred+pairing loop. The single-adapter case (the common one)
1137
+ // collapses to "the only eligible adapter" without touching the DB.
1138
+ const explicitEnvPrimary = process.env.PA_PRIMARY_PLATFORM?.trim();
1139
+ const action = resolvePrimaryPlatform({
1140
+ configuredPrimary: config.primaryPlatform,
1141
+ primaryAdapterRegistered: !!messageHub.getAdapter(config.primaryPlatform),
1142
+ registeredPlatforms,
1143
+ effectiveFallback: selectFirstPairedPlatform(db, messageHub.getEffectiveFallbackPlatforms()),
1144
+ userExplicitlySetPrimary: "primaryPlatform" in persistedSettings
1145
+ || (explicitEnvPrimary !== undefined && explicitEnvPrimary.length > 0),
1146
+ });
1147
+ if (action.kind === "switch") {
1148
+ if (action.reason === "auto-resolve") {
1149
+ logger.info({
1150
+ previousPrimary: config.primaryPlatform,
1151
+ autoResolvedPrimary: action.newPrimary,
1152
+ }, "Primary platform unset; auto-resolving to first configured messaging app");
1153
+ }
1154
+ else {
1155
+ logger.warn({
1156
+ requestedPrimary: config.primaryPlatform,
1157
+ fallbackPrimary: action.newPrimary,
1158
+ }, "Primary platform is not registered, falling back (preference kept; restore the adapter to revert)");
1159
+ }
1160
+ messageHub.setPrimaryPlatform(action.newPrimary);
1161
+ config.primaryPlatform = action.newPrimary;
1162
+ if (action.persist) {
1163
+ try {
1164
+ settingsStore.set("primaryPlatform", action.newPrimary);
1165
+ }
1166
+ catch (err) {
1167
+ logger.warn({ err }, "Failed to persist auto-resolved primaryPlatform; next boot will repeat the resolution");
1168
+ }
1169
+ }
1170
+ }
1171
+ else if (action.kind === "no-fallback") {
1172
+ logger.warn({
1173
+ configuredPrimary: config.primaryPlatform,
1174
+ registeredPlatforms,
1175
+ }, "Primary platform adapter not registered and no eligible messaging fallback found");
2306
1176
  }
2307
1177
  await observerManager.startAll();
2308
1178
  // Start the integrations.md fs-watcher after the observer manager is up so
@@ -2332,12 +1202,15 @@ async function startup() {
2332
1202
  destinationMode: "configured_only",
2333
1203
  });
2334
1204
  },
2335
- });
1205
+ },
1206
+ // V18 — chokidar must watch the post-restructure path under contextDir
1207
+ // (Obsidian-mode users have a non-default vault root).
1208
+ getContextDir(config, db));
2336
1209
  }
2337
1210
  catch (err) {
2338
1211
  logger.error({ err }, "integrations.md watcher failed to start");
2339
1212
  }
2340
- // Start the rules/management.md fs-watcher alongside its integrations.md
1213
+ // Start the policies/management.md fs-watcher alongside its integrations.md
2341
1214
  // sibling so hand-edits to A-section bindings flow back into the DB. The
2342
1215
  // watcher is a no-op when the post-setup branch above did not run
2343
1216
  // (contextDir absent), since chokidar against a missing path is silent.
@@ -2346,7 +1219,7 @@ async function startup() {
2346
1219
  managementRegistryWatcher = startManagementRegistryWatcher(getContextDir(config), db);
2347
1220
  }
2348
1221
  catch (err) {
2349
- logger.error({ err }, "rules/management.md watcher failed to start");
1222
+ logger.error({ err }, "policies/management.md watcher failed to start");
2350
1223
  }
2351
1224
  }
2352
1225
  healthMonitor.start();
@@ -2416,7 +1289,16 @@ async function startup() {
2416
1289
  signalDetector.stop();
2417
1290
  notificationManager.stop(); // Clear pending batch-flush timer
2418
1291
  authRecovery.shutdown(); // Kill any active recovery subprocesses
1292
+ // docs/design/appendices/opencode-backend.md Phase 2 — stop the loopback opencode
1293
+ // server (if any) so the spawned child releases its port. shutdown()
1294
+ // is idempotent; lazy-spawned managers that never booted no-op.
1295
+ await opencodeServerManager.shutdown().catch((err) => {
1296
+ logger.warn({ err }, "opencode server manager shutdown failed");
1297
+ });
2419
1298
  clearInterval(vaultHealthTimer);
1299
+ clearInterval(keepaliveTimer);
1300
+ // BROWSER_TASK_REDESIGN_PLAN.md §5 / §5.1 — 30 s deadline tick.
1301
+ clearInterval(browserTaskDeadlineTimer);
2420
1302
  clearTimeout(migrationBackupSweepInitial);
2421
1303
  clearInterval(migrationBackupSweepTimer);
2422
1304
  if (managementMdWatcher) {
@@ -2426,7 +1308,7 @@ async function startup() {
2426
1308
  }
2427
1309
  if (managementRegistryWatcher) {
2428
1310
  await managementRegistryWatcher.stop().catch((err) => {
2429
- logger.warn({ err }, "rules/management.md watcher stop failed");
1311
+ logger.warn({ err }, "policies/management.md watcher stop failed");
2430
1312
  });
2431
1313
  }
2432
1314
  if (docsIndexer) {
@@ -2434,6 +1316,11 @@ async function startup() {
2434
1316
  logger.warn({ err }, "docs indexer stop failed");
2435
1317
  });
2436
1318
  }
1319
+ if (agentsWatcher) {
1320
+ await agentsWatcher.stop().catch((err) => {
1321
+ logger.warn({ err }, "agent definitions watcher stop failed");
1322
+ });
1323
+ }
2437
1324
  await observerManager.stopAll();
2438
1325
  await messageHub.stopAll();
2439
1326
  eventBus.close();
@@ -2475,4 +1362,3 @@ startup().catch((err) => {
2475
1362
  logger.fatal({ error: e?.message, code: e?.code, stack: e?.stack }, "Daemon startup failed");
2476
1363
  process.exit(1);
2477
1364
  });
2478
- //# sourceMappingURL=index.js.map