@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
@@ -1,2160 +0,0 @@
1
- import { Hono } from "hono";
2
- import { readFileSync, writeFileSync, existsSync } from "node:fs";
3
- import { join } from "node:path";
4
- import { randomUUID } from "node:crypto";
5
- import { APP_NAME, EDITABLE_RUNTIME_KEY_TUPLE, getAgentDayBoundsUtc, normalizeAgentDisplayName, } from "@aitne/shared";
6
- import { applyConfigUpdates } from "../env-writer.js";
7
- import { runDefaultSchedulesReconciler } from "../../core/context/default-schedules-runner.js";
8
- import { syncDmSessionTimesToQuietHours } from "../../core/quiet-hours-sync.js";
9
- import { detectGoogleCredentialType, getGoogleOAuthClientConfig, parseGoogleCredentialsJson, } from "../../services/google-auth.js";
10
- import { getContextDir } from "../../config.js";
11
- import { CONTEXT_RELATIVE_PATHS } from "../../core/context-paths.js";
12
- import { createLogger, toSafeErrorMessage } from "../../logging.js";
13
- import { upsertManagementRulesAgentIdentity } from "../../management-rules.js";
14
- import { DEFAULT_DISALLOWED_TOOLS, runtimeSettingsSchema } from "../../settings/runtime-settings.js";
15
- import { createSettingsStore } from "../../settings/settings-store.js";
16
- import { getSessionWorkdirPath } from "../../core/workdir.js";
17
- import { rewriteCharacterBlock } from "../../core/skills-compiler.js";
18
- import { DASHBOARD_CHAT_SCOPE, DOCS_QA_SCOPE } from "../../messaging/constants.js";
19
- import { deleteAllChatSidebarSessions, deleteChatSession, } from "../../core/dashboard-session-cleanup.js";
20
- import { readJsonBody } from "../json-body.js";
21
- import { computeDmFreshnessAggregate } from "../../core/dm-freshness-metrics.js";
22
- const MAX_UPLOAD_SIZE = 100 * 1024; // 100 KB — credential files are small
23
- const MAX_OAUTH_STATE_AGE_MS = 10 * 60 * 1000;
24
- const PUBLIC_CONFIG_RUNTIME_KEYS = [
25
- "maxConcurrentSessions",
26
- "maxReactiveSessions",
27
- "delegatedProxyMaxConcurrent",
28
- "delegatedTaskModeEnabled",
29
- "delegatedTaskMaxPerDay",
30
- "delegatedTaskDefaultMaxToolCalls",
31
- "delegatedTaskDefaultMaxBudgetUsd",
32
- "delegatedTaskDefaultTimeoutMs",
33
- "delegatedTaskHeavyEnabled",
34
- "executeTimeoutMinutes",
35
- "agentDisplayName",
36
- "sessionTimeoutDmMinutes",
37
- "sessionTimeoutChannelMinutes",
38
- "sessionTimeoutDashboardMinutes",
39
- "timezone",
40
- "dayBoundaryHour",
41
- "hourlyCheckEnabled",
42
- "hourlyCheckIntervalMinutes",
43
- "hourlyCheckActiveStartHour",
44
- "hourlyCheckActiveEndHour",
45
- "hourlyCheckMinObservations",
46
- "authProbeDisabled",
47
- "authPreflightFreshnessMs",
48
- "maxNotificationsPerHour",
49
- "maxNotificationsPerDay",
50
- "quietHoursStart",
51
- "quietHoursEnd",
52
- "batchIntervalMinutes",
53
- "primaryPlatform",
54
- "defaultNotificationPlatforms",
55
- "whatsappEnabled",
56
- "whatsappAuthDir",
57
- "disallowedTools",
58
- "claudeExecutionPermissionMode",
59
- "codexExecutionPermissionMode",
60
- "geminiExecutionPermissionMode",
61
- "externalObsidianVaultPath",
62
- "externalObsidianVaultName",
63
- // SETUP-FLOW-REDESIGN-PLAN §6.3 — kill switch for the external-vault
64
- // file watcher. Surfaced so the Note step's "Watch for changes"
65
- // checkbox round-trips through the dashboard.
66
- "externalObsidianWatch",
67
- "primaryVaultPath",
68
- "primaryVaultName",
69
- // gitRepos / gitWatchedRepos / githubRepos removed at the unified-
70
- // repositories cutover (docs/design/appendices/unified-repositories.md);
71
- // dashboard reads the rows from /api/repositories instead.
72
- "googleCalendarId",
73
- "notionDatabaseIds",
74
- "character",
75
- "historyInjectionMaxMessages",
76
- "historyInjectionMaxTokens",
77
- "dmStalenessStrict",
78
- "obsidianDebounceSeconds",
79
- "schedulePollIntervalSeconds",
80
- "gitPollIntervalSeconds",
81
- "gitPushOverdueMinutes",
82
- "gitProjectUpdateDebounceMinutes",
83
- "notionPollIntervalSeconds",
84
- "calendarPollIntervalSeconds",
85
- "gmailPollIntervalSeconds",
86
- "mcpAutoProbeIntervalMinutes",
87
- "delegatedProbeIntervalMinutes",
88
- "autonomousDailyCostCapUsd",
89
- "autonomousMonthlyCostCapUsd",
90
- "primaryLanguage",
91
- "vaultMode",
92
- ];
93
- const PUBLIC_CONFIG_NULLABLE_STRING_KEYS = new Set([
94
- "whatsappAuthDir",
95
- "externalObsidianVaultPath",
96
- "externalObsidianVaultName",
97
- "primaryVaultPath",
98
- "primaryVaultName",
99
- ]);
100
- /**
101
- * Pre-defined static cost queries — no string interpolation of user input.
102
- * `byModel` is computed in JS via `aggregateByBilledModel` because the SDK
103
- * can route a request for one model to a sibling (e.g. opus-4-7 →
104
- * opus-4-6[1m]); SQL `GROUP BY model_used` would lump cost under the
105
- * requested model and produce a chart that disagrees with the per-row
106
- * billed-model badge on the same page.
107
- */
108
- const COST_QUERIES = {
109
- daily: {
110
- byPeriod: `SELECT date(started_at) as period,
111
- SUM(cost_usd) as total_cost, COUNT(*) as session_count,
112
- SUM(tokens_input) as total_input_tokens, SUM(tokens_output) as total_output_tokens
113
- FROM agent_actions WHERE started_at > datetime('now', '-30 days') AND cost_usd IS NOT NULL
114
- GROUP BY date(started_at) ORDER BY period DESC`,
115
- byModelRows: `SELECT model_used, model_usage_json, cost_usd
116
- FROM agent_actions
117
- WHERE started_at > datetime('now', '-30 days')
118
- AND cost_usd IS NOT NULL
119
- AND (model_used IS NOT NULL OR model_usage_json IS NOT NULL)`,
120
- byEventType: `SELECT action_type as event_type, SUM(cost_usd) as total_cost, COUNT(*) as session_count
121
- FROM agent_actions WHERE started_at > datetime('now', '-30 days') AND cost_usd IS NOT NULL
122
- GROUP BY action_type ORDER BY total_cost DESC`,
123
- },
124
- weekly: {
125
- byPeriod: `SELECT strftime('%Y-W%W', started_at) as period,
126
- SUM(cost_usd) as total_cost, COUNT(*) as session_count,
127
- SUM(tokens_input) as total_input_tokens, SUM(tokens_output) as total_output_tokens
128
- FROM agent_actions WHERE started_at > datetime('now', '-90 days') AND cost_usd IS NOT NULL
129
- GROUP BY strftime('%Y-W%W', started_at) ORDER BY period DESC`,
130
- byModelRows: `SELECT model_used, model_usage_json, cost_usd
131
- FROM agent_actions
132
- WHERE started_at > datetime('now', '-90 days')
133
- AND cost_usd IS NOT NULL
134
- AND (model_used IS NOT NULL OR model_usage_json IS NOT NULL)`,
135
- byEventType: `SELECT action_type as event_type, SUM(cost_usd) as total_cost, COUNT(*) as session_count
136
- FROM agent_actions WHERE started_at > datetime('now', '-90 days') AND cost_usd IS NOT NULL
137
- GROUP BY action_type ORDER BY total_cost DESC`,
138
- },
139
- monthly: {
140
- byPeriod: `SELECT strftime('%Y-%m', started_at) as period,
141
- SUM(cost_usd) as total_cost, COUNT(*) as session_count,
142
- SUM(tokens_input) as total_input_tokens, SUM(tokens_output) as total_output_tokens
143
- FROM agent_actions WHERE started_at > datetime('now', '-365 days') AND cost_usd IS NOT NULL
144
- GROUP BY strftime('%Y-%m', started_at) ORDER BY period DESC`,
145
- byModelRows: `SELECT model_used, model_usage_json, cost_usd
146
- FROM agent_actions
147
- WHERE started_at > datetime('now', '-365 days')
148
- AND cost_usd IS NOT NULL
149
- AND (model_used IS NOT NULL OR model_usage_json IS NOT NULL)`,
150
- byEventType: `SELECT action_type as event_type, SUM(cost_usd) as total_cost, COUNT(*) as session_count
151
- FROM agent_actions WHERE started_at > datetime('now', '-365 days') AND cost_usd IS NOT NULL
152
- GROUP BY action_type ORDER BY total_cost DESC`,
153
- },
154
- };
155
- /**
156
- * Aggregate raw `byModelRows` into the `{ model, total_cost, session_count }`
157
- * shape the dashboard expects, attributing cost to the actually-billed model
158
- * from `model_usage_json` rather than the requested `model_used`. When a row
159
- * has no usage breakdown we fall back to `model_used`. A row that touches
160
- * multiple billed models contributes its split cost to each bucket and is
161
- * counted once toward each model's `session_count`.
162
- *
163
- * Cost reconciliation: the SDK's `r.modelUsage[*].costUSD` covers LLM
164
- * inference only — server-side tools (web_search, code_execution) appear in
165
- * `r.total_cost_usd` (= row.cost_usd) but not in any per-model entry. If
166
- * `Σ per-model cost < row.cost_usd`, the residual is credited to
167
- * `model_used` (the requested model) so per-model totals add up to the
168
- * dashboard's overall cost. Without this, a chart row's "billed total"
169
- * silently drops tool-use spend.
170
- */
171
- export function aggregateByBilledModel(rows) {
172
- const map = new Map();
173
- // Per-row scratch; a single row counts toward `session_count` exactly once
174
- // per model it touched, even when residual handling credits the same model
175
- // twice (once from per-model breakdown, once from tool-use residual).
176
- const addCost = (model, cost) => {
177
- const bucket = map.get(model) ?? { total_cost: 0, session_count: 0 };
178
- bucket.total_cost += cost;
179
- map.set(model, bucket);
180
- };
181
- const incSession = (rowSeen, model) => {
182
- if (rowSeen.has(model))
183
- return;
184
- rowSeen.add(model);
185
- const bucket = map.get(model) ?? { total_cost: 0, session_count: 0 };
186
- bucket.session_count += 1;
187
- map.set(model, bucket);
188
- };
189
- // 0.0001¢ — below this, treat the residual as float-arithmetic noise and
190
- // skip the bookkeeping. Real tool-use costs are always orders of magnitude
191
- // above this.
192
- const RESIDUAL_EPSILON_USD = 0.000001;
193
- for (const row of rows) {
194
- const seenForRow = new Set();
195
- let parsed = null;
196
- if (row.model_usage_json) {
197
- try {
198
- parsed = JSON.parse(row.model_usage_json);
199
- }
200
- catch {
201
- parsed = null;
202
- }
203
- }
204
- let perModelTotal = 0;
205
- let touchedAny = false;
206
- if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
207
- for (const [modelId, entry] of Object.entries(parsed)) {
208
- if (!entry || typeof entry !== "object")
209
- continue;
210
- const v = entry;
211
- const cost = typeof v.costUsd === "number" ? v.costUsd : 0;
212
- addCost(modelId, cost);
213
- incSession(seenForRow, modelId);
214
- perModelTotal += cost;
215
- touchedAny = true;
216
- }
217
- }
218
- if (!touchedAny) {
219
- if (row.model_used) {
220
- addCost(row.model_used, row.cost_usd);
221
- incSession(seenForRow, row.model_used);
222
- }
223
- continue;
224
- }
225
- // Residual handles server-side tool cost (web_search, code execution)
226
- // that the SDK adds to total_cost_usd but not to any per-model bucket.
227
- const residual = row.cost_usd - perModelTotal;
228
- if (residual > RESIDUAL_EPSILON_USD && row.model_used) {
229
- addCost(row.model_used, residual);
230
- incSession(seenForRow, row.model_used);
231
- }
232
- }
233
- return [...map.entries()]
234
- .map(([model, v]) => ({ model, ...v }))
235
- .sort((a, b) => b.total_cost - a.total_cost);
236
- }
237
- const COST_PERIOD_SPECS = {
238
- daily: {
239
- bucketExpr: "date(started_at)",
240
- sinceExpr: "-30 days",
241
- },
242
- weekly: {
243
- bucketExpr: "strftime('%Y-W%W', started_at)",
244
- sinceExpr: "-90 days",
245
- },
246
- monthly: {
247
- bucketExpr: "strftime('%Y-%m', started_at)",
248
- sinceExpr: "-365 days",
249
- },
250
- };
251
- /** Escape HTML special characters to prevent XSS */
252
- function escapeHtml(s) {
253
- return s
254
- .replace(/&/g, "&amp;")
255
- .replace(/</g, "&lt;")
256
- .replace(/>/g, "&gt;")
257
- .replace(/"/g, "&quot;")
258
- .replace(/'/g, "&#039;");
259
- }
260
- function getLocalHourMinute(date, timeZone) {
261
- const formatter = new Intl.DateTimeFormat("en-US", {
262
- hour: "2-digit",
263
- minute: "2-digit",
264
- hour12: false,
265
- timeZone,
266
- });
267
- const parts = formatter.formatToParts(date);
268
- const hour = Number(parts.find((part) => part.type === "hour")?.value ?? "0");
269
- const minute = Number(parts.find((part) => part.type === "minute")?.value ?? "0");
270
- return { hour, minute };
271
- }
272
- function isHourlyCheckSlot(date, config) {
273
- if (!config.hourlyCheckEnabled)
274
- return false;
275
- const { hour, minute } = getLocalHourMinute(date, config.timezone || undefined);
276
- if (hour === config.dayBoundaryHour)
277
- return false;
278
- if (hour < config.hourlyCheckActiveStartHour || hour >= config.hourlyCheckActiveEndHour) {
279
- return false;
280
- }
281
- return minute % config.hourlyCheckIntervalMinutes === 0;
282
- }
283
- function getNextHourlyCheck(config) {
284
- if (!config.hourlyCheckEnabled) {
285
- return { active: false, nextRunAt: null };
286
- }
287
- const now = new Date();
288
- const active = isHourlyCheckSlot(now, config);
289
- const start = new Date(now.getTime() + 60_000);
290
- start.setSeconds(0, 0);
291
- for (let offset = 0; offset < 48 * 60; offset++) {
292
- const candidate = new Date(start.getTime() + offset * 60_000);
293
- if (isHourlyCheckSlot(candidate, config)) {
294
- return { active, nextRunAt: candidate.toISOString() };
295
- }
296
- }
297
- return { active, nextRunAt: null };
298
- }
299
- function isStringRecord(value) {
300
- if (!value || typeof value !== "object" || Array.isArray(value)) {
301
- return false;
302
- }
303
- return Object.entries(value).every(([key, entryValue]) => typeof key === "string" && typeof entryValue === "string");
304
- }
305
- function sameStringRecord(a, b) {
306
- const aEntries = Object.entries(a);
307
- const bEntries = Object.entries(b);
308
- if (aEntries.length !== bEntries.length) {
309
- return false;
310
- }
311
- return aEntries.every(([key, value]) => b[key] === value);
312
- }
313
- function buildSafeConfig(config, secretSummary) {
314
- const safeConfig = {};
315
- for (const key of PUBLIC_CONFIG_RUNTIME_KEYS) {
316
- const value = config[key];
317
- safeConfig[key] = PUBLIC_CONFIG_NULLABLE_STRING_KEYS.has(key)
318
- ? value ?? ""
319
- : value;
320
- }
321
- safeConfig.apiPort = config.apiPort;
322
- safeConfig.allowedTools = config.allowedToolsOverride ?? [];
323
- // Derived — the actual directory `getContextDir(config)` resolves to.
324
- // Surfaces the mode/path → disk outcome to the dashboard so the
325
- // Management Mode section can show the effective location without
326
- // reimplementing the resolution logic. Always an absolute path.
327
- safeConfig.contextDir = getContextDir(config);
328
- safeConfig.slackConfigured = secretSummary.slackConfigured;
329
- safeConfig.slackOwnerUserConfigured = !!config.slackOwnerUserId;
330
- safeConfig.telegramConfigured = secretSummary.telegramConfigured;
331
- safeConfig.telegramOwnerChatConfigured = !!config.telegramOwnerChatId;
332
- safeConfig.discordConfigured = secretSummary.discordConfigured;
333
- safeConfig.discordOwnerUserConfigured = !!config.discordOwnerUserId;
334
- safeConfig.notionConfigured = secretSummary.notionConfigured;
335
- safeConfig.githubConfigured = secretSummary.githubConfigured;
336
- safeConfig.githubWebhookSecretConfigured = secretSummary.githubWebhookSecretConfigured;
337
- safeConfig.apiTokenConfigured = secretSummary.apiTokenConfigured;
338
- safeConfig.whatsappOwnerPhoneConfigured = !!config.whatsappOwnerPhone;
339
- safeConfig.googleCalendarCredentialsConfigured = secretSummary.googleCalendarCredentialsConfigured;
340
- safeConfig.googleCalendarTokenConfigured = secretSummary.googleCalendarTokenConfigured;
341
- // SETUP-FLOW-REDESIGN-PLAN §6.1 — surface Outlook BYOA presence so
342
- // dashboards can decide when direct-mode Outlook integrations are
343
- // resumable.
344
- safeConfig.outlookClientConfigConfigured = secretSummary.outlookClientConfigConfigured;
345
- safeConfig.googleCredentialType = secretSummary.googleCredentialType;
346
- return safeConfig;
347
- }
348
- /**
349
- * Dashboard API routes — REST endpoints for the Dashboard UI.
350
- *
351
- * Provides:
352
- * - Config management (GET/PATCH /api/config)
353
- * - Event/action logs (GET /api/events)
354
- * - Conversation history (GET /api/conversations)
355
- * - Cost analytics (GET /api/cost)
356
- * - Approval queue (GET/POST /api/approvals)
357
- */
358
- const logger = createLogger("dashboard-api");
359
- export function createDashboardRoutes(deps) {
360
- const app = new Hono();
361
- const { db, config, services, secretBroker } = deps;
362
- const settingsStore = createSettingsStore(db);
363
- const oauthStates = new Map();
364
- // Dashboard-origin allowlist for OAuth start / callback.
365
- //
366
- // The OAuth callback HTML uses `window.opener.postMessage(..., target)`
367
- // to notify the dashboard that auth succeeded. `target` was previously
368
- // derived from the Origin/Referer headers at start time with a
369
- // `http://localhost:3000` fallback when neither was present. Both
370
- // headers are attacker-controlled in the request that *initiates* the
371
- // flow (the attacker's page can be `http://attacker.com`), so the
372
- // postMessage notification could be steered off the trusted dashboard.
373
- //
374
- // The notification body is just `{type: "google-auth-success"}` — no
375
- // tokens — but the attacker would still learn the user completed auth,
376
- // and a future widening of the payload would leak silently. Defence is
377
- // a closed allowlist: only same-origin localhost variants on the
378
- // configured dashboard port are accepted; anything else rejects the
379
- // OAuth start with 403.
380
- const dashboardPort = Number.parseInt(process.env.PA_DASHBOARD_PORT ?? "", 10) || 3000;
381
- const allowedDashboardOrigins = new Set([
382
- `http://localhost:${dashboardPort}`,
383
- `http://127.0.0.1:${dashboardPort}`,
384
- // IPv6 loopback — some dev environments (Docker desktop with IPv6
385
- // preference, certain Node IPv6-first configurations) emit origins
386
- // in this form. URL.origin returns the bracketed literal.
387
- `http://[::1]:${dashboardPort}`,
388
- ]);
389
- function parseOriginSafely(value) {
390
- if (!value)
391
- return null;
392
- try {
393
- return new URL(value).origin;
394
- }
395
- catch {
396
- return null;
397
- }
398
- }
399
- /**
400
- * Return the request's claimed dashboard origin only if it matches the
401
- * hardcoded allowlist. Origin is preferred (browser-set, never spoofable
402
- * from page JS); Referer is the fallback for browsers / configurations
403
- * that don't emit Origin on top-level navigations. Returns `null` when
404
- * neither header maps to an allowed origin — callers must reject the
405
- * request in that case rather than silently defaulting.
406
- */
407
- function resolveAllowedDashboardOrigin(originHeader, refererHeader) {
408
- const fromOrigin = parseOriginSafely(originHeader);
409
- if (fromOrigin && allowedDashboardOrigins.has(fromOrigin))
410
- return fromOrigin;
411
- const fromReferer = parseOriginSafely(refererHeader);
412
- if (fromReferer && allowedDashboardOrigins.has(fromReferer))
413
- return fromReferer;
414
- return null;
415
- }
416
- const agentActionColumns = new Set(db.pragma("table_info(agent_actions)").map((column) => column.name));
417
- const backendExpr = agentActionColumns.has("backend")
418
- ? "COALESCE(backend, 'claude')"
419
- : "'claude'";
420
- function pruneOauthStates(now = Date.now()) {
421
- for (const [state, data] of oauthStates.entries()) {
422
- if (now - data.createdAt > MAX_OAUTH_STATE_AGE_MS) {
423
- oauthStates.delete(state);
424
- }
425
- }
426
- }
427
- async function getSecretConfigSummary() {
428
- const [slackBotToken, slackAppToken, telegramBotToken, discordBotToken, notionApiKey, githubToken, githubWebhookSecret, apiToken, googleCredentialsJson, googleTokenJson,] = await Promise.all([
429
- secretBroker.getSlackBotToken(),
430
- secretBroker.getSlackAppToken(),
431
- secretBroker.getTelegramBotToken(),
432
- secretBroker.getDiscordBotToken(),
433
- secretBroker.getNotionApiKey(),
434
- secretBroker.getGitHubToken(),
435
- secretBroker.getGitHubWebhookSecret(),
436
- secretBroker.getApiToken(),
437
- secretBroker.getGoogleCredentialsJson(),
438
- secretBroker.getGoogleTokenJson(),
439
- ]);
440
- // SETUP-FLOW-REDESIGN-PLAN §6.1 — surface BYOA Outlook client config
441
- // presence so the connections page knows when direct-mode Outlook
442
- // integrations are resumable. Best-effort: if no blob store is
443
- // wired (test harness), report `false` rather than crashing.
444
- let outlookClientConfigConfigured = false;
445
- try {
446
- outlookClientConfigConfigured = deps.blobStore
447
- ? await deps.blobStore.exists("mail:outlook:client-config")
448
- : false;
449
- }
450
- catch {
451
- outlookClientConfigConfigured = false;
452
- }
453
- return {
454
- slackConfigured: !!(slackBotToken && slackAppToken),
455
- telegramConfigured: !!telegramBotToken,
456
- discordConfigured: !!discordBotToken,
457
- notionConfigured: !!notionApiKey,
458
- githubConfigured: !!githubToken,
459
- githubWebhookSecretConfigured: !!githubWebhookSecret,
460
- apiTokenConfigured: !!apiToken,
461
- googleCalendarCredentialsConfigured: !!googleCredentialsJson,
462
- googleCalendarTokenConfigured: !!googleTokenJson,
463
- outlookClientConfigConfigured,
464
- googleCredentialType: detectGoogleCredentialType(googleCredentialsJson),
465
- };
466
- }
467
- async function notifySecretChange(scope) {
468
- await deps.onSecretChanged?.(scope);
469
- }
470
- /**
471
- * design/15-character.md §15.6.1 live-overwrite: when character changes,
472
- * rewrite the `## Character` block inside every active session's
473
- * instruction files (CLAUDE.md / AGENTS.md / GEMINI.md) so the next turn
474
- * in the session picks up the new value without waiting for a session
475
- * spawn. Per-workdir errors are counted and logged but never thrown —
476
- * the DB write is already durable at the caller.
477
- *
478
- * Shared by PATCH /config (dashboard path, Approve tier) and
479
- * PATCH /config/character (agent path, Notify tier).
480
- */
481
- function fanOutCharacterToActiveSessions() {
482
- const sessions = db
483
- .prepare(`SELECT id FROM conversation_sessions WHERE status = 'active'`)
484
- .all();
485
- const totals = { rewritten: 0, skipped: 0, failed: 0, missing: 0 };
486
- for (const row of sessions) {
487
- const sessionId = typeof row.id === "bigint" ? Number(row.id) : row.id;
488
- const workdir = getSessionWorkdirPath(config.dataDir, sessionId);
489
- if (!existsSync(workdir)) {
490
- totals.missing++;
491
- continue;
492
- }
493
- try {
494
- const summary = rewriteCharacterBlock(workdir, config.character);
495
- totals.rewritten += summary.rewritten;
496
- totals.skipped += summary.skipped;
497
- totals.failed += summary.failed;
498
- }
499
- catch (err) {
500
- totals.failed++;
501
- logger.warn({ err, sessionId, workdir }, "rewriteCharacterBlock threw on character live-overwrite");
502
- }
503
- }
504
- logger.info({ ...totals, activeSessions: sessions.length }, "Character block fanned out to active session workdirs");
505
- }
506
- // ── Config API ──
507
- /** GET /config — return current configuration */
508
- app.get("/config", async (c) => {
509
- const secretSummary = await getSecretConfigSummary();
510
- const safeConfig = buildSafeConfig({ ...config, agentDisplayName: normalizeAgentDisplayName(config.agentDisplayName) }, secretSummary);
511
- return c.json(safeConfig);
512
- });
513
- /** GET /config/defaults — return Zod schema defaults for all editable keys */
514
- app.get("/config/defaults", (c) => {
515
- const zodDefaults = runtimeSettingsSchema.parse({});
516
- const defaults = {};
517
- for (const key of EDITABLE_RUNTIME_KEY_TUPLE) {
518
- const val = zodDefaults[key];
519
- // Mirror GET /config shape: allowedToolsOverride null → empty array
520
- if (key === "allowedToolsOverride") {
521
- defaults.allowedTools = val ?? [];
522
- }
523
- else {
524
- defaults[key] = val;
525
- }
526
- }
527
- // Bootstrap keys not in runtimeSettingsSchema
528
- defaults.apiPort = 8321;
529
- return c.json(defaults);
530
- });
531
- /** PATCH /config — update one or more config fields */
532
- app.patch("/config", async (c) => {
533
- const parsedBody = await readJsonBody(c);
534
- if (!parsedBody.ok)
535
- return parsedBody.response;
536
- const body = parsedBody.body;
537
- if (!body || typeof body !== "object" || Array.isArray(body)) {
538
- return c.json({ error: "Body must be a JSON object" }, 400);
539
- }
540
- const bodyRecord = { ...body };
541
- if (Object.hasOwn(bodyRecord, "notionDatabaseIdsBase")) {
542
- if (!Object.hasOwn(bodyRecord, "notionDatabaseIds")) {
543
- return c.json({
544
- error: "validation_failed",
545
- details: {
546
- notionDatabaseIdsBase: "notionDatabaseIdsBase requires notionDatabaseIds in the same request",
547
- },
548
- }, 400);
549
- }
550
- if (!isStringRecord(bodyRecord.notionDatabaseIdsBase)) {
551
- return c.json({
552
- error: "validation_failed",
553
- details: {
554
- notionDatabaseIdsBase: "notionDatabaseIdsBase must be an object mapping labels to database IDs",
555
- },
556
- }, 400);
557
- }
558
- if (!sameStringRecord(config.notionDatabaseIds, bodyRecord.notionDatabaseIdsBase)) {
559
- return c.json({
560
- error: "conflict",
561
- message: "Notion database mappings changed on another tab. Reload and try again.",
562
- }, 409);
563
- }
564
- delete bodyRecord.notionDatabaseIdsBase;
565
- }
566
- // Snapshot WhatsApp state BEFORE applying so we can detect a transition
567
- // and trigger live enable/disable of the adapter (no daemon restart).
568
- const prevWhatsappEnabled = config.whatsappEnabled;
569
- const prevWhatsappOwnerPhone = config.whatsappOwnerPhone;
570
- const prevWhatsappAuthDir = config.whatsappAuthDir;
571
- // EXECUTION-MODE-DESIGN.md §5.2 / §6.3 — snapshot pre-apply execution mode
572
- // so audit rows below can capture before → after per backend. The
573
- // dedicated `POST /api/setup/mode` is the usual path (it emits its own
574
- // audit row); this PATCH covers the power-user / env-style API caller
575
- // who edits the key directly without going through the settings UI.
576
- const prevExecMode = {
577
- claude: config.claudeExecutionPermissionMode,
578
- codex: config.codexExecutionPermissionMode,
579
- gemini: config.geminiExecutionPermissionMode,
580
- };
581
- // design/15-character.md §15.6.1 — snapshot character pre-apply so the
582
- // live-overwrite pass below has a stable "after" value to fan out to
583
- // every active session workdir.
584
- const prevCharacter = config.character;
585
- // gitRepos / gitWatchedRepos no longer live in config — repository
586
- // changes go through /api/repositories and trigger
587
- // `onGitReposChanged` directly from that route.
588
- // §6.2 Note Sources regeneration is centralized inside
589
- // applyConfigUpdates (via the db option) — no inline hook in this
590
- // handler. Any future caller of applyConfigUpdates that carries
591
- // externalObsidianVaultPath / externalObsidianWatch automatically
592
- // gets the same regeneration without copy-paste.
593
- const result = await applyConfigUpdates(config, settingsStore, bodyRecord, {
594
- db: deps.db,
595
- });
596
- if (Object.keys(result.errors).length > 0 && result.updated.length === 0) {
597
- return c.json({ error: "validation_failed", details: result.errors }, 400);
598
- }
599
- // Hot-reload cron schedules when schedule-related config changes
600
- const SCHEDULE_KEYS = [
601
- "dayBoundaryHour",
602
- "timezone",
603
- "hourlyCheckEnabled",
604
- "hourlyCheckIntervalMinutes",
605
- "hourlyCheckActiveStartHour",
606
- "hourlyCheckActiveEndHour",
607
- ];
608
- if (result.updated.some((k) => SCHEDULE_KEYS.includes(k))) {
609
- deps.onScheduleConfigChanged?.();
610
- }
611
- // git repository changes route through POST/PATCH /api/repositories
612
- // (unified-repositories cutover); they trigger onGitReposChanged
613
- // from there, not from the dashboard config PATCH path.
614
- // SCHEDULED-DM-IMPLEMENTATION-PLAN §6.7 — when quietHoursEnd
615
- // changes, retime every enabled `dm_session` recurring row whose
616
- // `task_context.pin_to_quiet_hours_end === true` so the briefing
617
- // tracks the user's quiet-hours edge by default. Rows with the
618
- // pin flag false (user-pinned a custom time) are left alone.
619
- if (result.updated.includes("quietHoursEnd")
620
- && typeof config.quietHoursEnd === "string"
621
- && /^\d{2}:\d{2}$/.test(config.quietHoursEnd)) {
622
- try {
623
- syncDmSessionTimesToQuietHours(db, config.quietHoursEnd);
624
- runDefaultSchedulesReconciler({
625
- db,
626
- contextDir: getContextDir(config, db),
627
- writeTracker: deps.writeTracker,
628
- onPromptContextChanged: deps.onPromptContextChanged,
629
- trigger: "manual",
630
- }).catch((err) => {
631
- logger.warn({ err }, "Default-schedules reconciler failed after quietHoursEnd change");
632
- });
633
- }
634
- catch (err) {
635
- logger.warn({ err }, "syncDmSessionTimesToQuietHours threw after dashboard config PATCH");
636
- }
637
- }
638
- // Hot-refresh DM session skill dirs when enabledMailProviders changes
639
- // through the generic config PATCH. The per-endpoint `PATCH /mail/providers`
640
- // handler already drives this through MailAccountRegistry.onScopeChanged,
641
- // but the dashboard's catch-all config PATCH bypasses that route, so
642
- // without this dispatch the scope toggle wouldn't reach active workdirs.
643
- if (result.updated.includes("enabledMailProviders")) {
644
- try {
645
- deps.services.mail?.onProviderSelectionChanged(config.enabledMailProviders);
646
- }
647
- catch (err) {
648
- logger.warn({ err }, "onProviderSelectionChanged threw after dashboard config PATCH");
649
- }
650
- }
651
- // Hot-reload WhatsApp adapter when whatsappEnabled / phone / auth dir change.
652
- // This eliminates the daemon-restart requirement that previously made
653
- // pairing impossible from the dashboard.
654
- const whatsappKeysTouched = result.updated.some((k) => ["whatsappEnabled", "whatsappOwnerPhone", "whatsappAuthDir"].includes(k));
655
- if (whatsappKeysTouched && deps.whatsappControls) {
656
- const phoneChanged = config.whatsappOwnerPhone !== prevWhatsappOwnerPhone;
657
- const authDirChanged = config.whatsappAuthDir !== prevWhatsappAuthDir;
658
- try {
659
- if (!config.whatsappEnabled && prevWhatsappEnabled) {
660
- // disabled — tear down
661
- await deps.whatsappControls.disable();
662
- }
663
- else if (config.whatsappEnabled) {
664
- if (!prevWhatsappEnabled) {
665
- // newly enabled — build and start
666
- await deps.whatsappControls.enable();
667
- }
668
- else if (phoneChanged || authDirChanged) {
669
- // settings changed while enabled — bounce
670
- await deps.whatsappControls.disable();
671
- await deps.whatsappControls.enable();
672
- }
673
- }
674
- // Drop "whatsappEnabled" / phone / auth dir from requiresRestart since
675
- // we just hot-reloaded them. Other restart-required keys (like Slack
676
- // tokens) still report restart.
677
- result.requiresRestart = result.requiresRestart.filter((k) => !["whatsappEnabled", "whatsappOwnerPhone", "whatsappAuthDir"].includes(k));
678
- }
679
- catch (err) {
680
- const message = toSafeErrorMessage(err, "unknown WhatsApp error");
681
- result.errors.whatsapp = `WhatsApp hot-reload failed: ${message}`;
682
- }
683
- }
684
- // EXECUTION-MODE-DESIGN.md §6.3 — emit one `execution_mode_changed`
685
- // audit row per backend whose mode moved through this PATCH, matching
686
- // the row shape that `POST /api/setup/mode` writes. Without this the
687
- // PATCH path would silently bypass audit coverage for a power-user
688
- // API caller.
689
- for (const [backend, key] of [
690
- ["claude", "claudeExecutionPermissionMode"],
691
- ["codex", "codexExecutionPermissionMode"],
692
- ["gemini", "geminiExecutionPermissionMode"],
693
- ]) {
694
- if (!result.updated.includes(key))
695
- continue;
696
- const before = prevExecMode[backend];
697
- const after = config[key];
698
- if (before === after)
699
- continue;
700
- try {
701
- db.prepare(`INSERT INTO agent_actions (action_type, trigger, result, detail, backend)
702
- VALUES (?, ?, ?, ?, ?)`).run("execution_mode_changed", "dashboard_config_patch", "success", JSON.stringify({ before, after }), backend);
703
- }
704
- catch (err) {
705
- logger.warn({ err, backend }, "failed to record execution_mode_changed audit row (PATCH path)");
706
- }
707
- }
708
- if (result.updated.includes("agentDisplayName")) {
709
- try {
710
- const rulesRelPath = CONTEXT_RELATIVE_PATHS.rules.management;
711
- const rulesSnapshotKey = rulesRelPath.replace(/\.md$/, "");
712
- const rulesPath = join(getContextDir(config, db), rulesRelPath);
713
- if (existsSync(rulesPath)) {
714
- const currentRules = readFileSync(rulesPath, "utf-8");
715
- const nextRules = upsertManagementRulesAgentIdentity(currentRules, normalizeAgentDisplayName(config.agentDisplayName));
716
- if (nextRules !== currentRules) {
717
- db.prepare("INSERT INTO md_file_snapshots (file_path, content, trigger) VALUES (?, ?, ?)").run(rulesSnapshotKey, currentRules, "agent_name_update");
718
- writeFileSync(rulesPath, nextRules, "utf-8");
719
- }
720
- }
721
- }
722
- catch (err) {
723
- const message = toSafeErrorMessage(err, `unknown ${CONTEXT_RELATIVE_PATHS.rules.management} error`);
724
- result.errors.agentDisplayName = `Saved config, but failed to sync ${CONTEXT_RELATIVE_PATHS.rules.management}: ${message}`;
725
- }
726
- deps.onPromptContextChanged?.("agentDisplayName", "config_update:agentDisplayName", "loud", { tierReason: "config_agent_display_name" });
727
- }
728
- // design/15-character.md §15.6.1 — character changed; fan the new value
729
- // out to every active session's instruction files.
730
- if (result.updated.includes("character") && config.character !== prevCharacter) {
731
- fanOutCharacterToActiveSessions();
732
- }
733
- return c.json({
734
- status: "updated",
735
- updated: result.updated,
736
- requiresRestart: result.requiresRestart,
737
- errors: result.errors,
738
- });
739
- });
740
- /**
741
- * GET /config/character — agent-callable read of the persona string.
742
- *
743
- * design/15-character.md §15.6 — the general /api/config surface is
744
- * Approve-tier (contains secret summaries, OAuth state, schedule keys),
745
- * so bearer-less callers (the agent's curl from a session workdir) need
746
- * a narrowly scoped read. Returns the single field shape `{character}`
747
- * so `jq .character` in skills keeps working.
748
- */
749
- app.get("/config/character", (c) => {
750
- return c.json({ character: config.character });
751
- });
752
- /**
753
- * PATCH /config/character — agent-callable write of the persona string.
754
- *
755
- * Notify tier: audit-logged by the auth middleware, no Bearer required.
756
- * Accepts only `{character: string}` — extra keys are rejected so this
757
- * route cannot be used as a side channel into other config fields.
758
- * Zod validation (max 1000 chars, no marker substring, non-blank-or-empty)
759
- * runs inside `applyConfigUpdates` as usual.
760
- */
761
- app.patch("/config/character", async (c) => {
762
- const parsedBody = await readJsonBody(c);
763
- if (!parsedBody.ok)
764
- return parsedBody.response;
765
- const body = parsedBody.body;
766
- if (!body || typeof body !== "object" || Array.isArray(body)) {
767
- return c.json({ error: "Body must be a JSON object" }, 400);
768
- }
769
- const bodyRecord = body;
770
- const extraKeys = Object.keys(bodyRecord).filter((k) => k !== "character");
771
- if (extraKeys.length > 0) {
772
- return c.json({
773
- error: "validation_failed",
774
- details: {
775
- _extraKeys: `Only "character" is accepted on this endpoint; got: ${extraKeys.join(", ")}`,
776
- },
777
- }, 400);
778
- }
779
- if (!Object.hasOwn(bodyRecord, "character")) {
780
- return c.json({
781
- error: "validation_failed",
782
- details: { character: "character field is required" },
783
- }, 400);
784
- }
785
- const prevCharacter = config.character;
786
- const result = await applyConfigUpdates(config, settingsStore, {
787
- character: bodyRecord.character,
788
- });
789
- if (Object.keys(result.errors).length > 0 && result.updated.length === 0) {
790
- return c.json({ error: "validation_failed", details: result.errors }, 400);
791
- }
792
- if (result.updated.includes("character") && config.character !== prevCharacter) {
793
- fanOutCharacterToActiveSessions();
794
- }
795
- return c.json({
796
- status: "updated",
797
- character: config.character,
798
- updated: result.updated,
799
- errors: result.errors,
800
- });
801
- });
802
- app.put("/secrets/slack", async (c) => {
803
- const parsedBody = await readJsonBody(c);
804
- if (!parsedBody.ok)
805
- return parsedBody.response;
806
- const body = parsedBody.body;
807
- const botToken = typeof body?.botToken === "string" ? body.botToken.trim() : "";
808
- const appToken = typeof body?.appToken === "string" ? body.appToken.trim() : "";
809
- const validationErrors = {};
810
- if (!botToken && !appToken) {
811
- return c.json({
812
- status: "validation_failed",
813
- configured: false,
814
- requiresRestart: false,
815
- validationErrors: {
816
- botToken: "Provide at least one Slack token to save.",
817
- appToken: "Provide at least one Slack token to save.",
818
- },
819
- }, 400);
820
- }
821
- if (botToken)
822
- await secretBroker.set("slackBotToken", botToken);
823
- if (appToken)
824
- await secretBroker.set("slackAppToken", appToken);
825
- await notifySecretChange("slack");
826
- return c.json({
827
- status: "updated",
828
- configured: (await getSecretConfigSummary()).slackConfigured,
829
- requiresRestart: false,
830
- validationErrors,
831
- });
832
- });
833
- app.put("/secrets/telegram", async (c) => {
834
- const parsedBody = await readJsonBody(c);
835
- if (!parsedBody.ok)
836
- return parsedBody.response;
837
- const body = parsedBody.body;
838
- const botToken = typeof body?.botToken === "string" ? body.botToken.trim() : "";
839
- if (!botToken) {
840
- return c.json({
841
- status: "validation_failed",
842
- configured: false,
843
- requiresRestart: false,
844
- validationErrors: { botToken: "Telegram bot token is required." },
845
- }, 400);
846
- }
847
- await secretBroker.set("telegramBotToken", botToken);
848
- await notifySecretChange("telegram");
849
- return c.json({
850
- status: "updated",
851
- configured: (await getSecretConfigSummary()).telegramConfigured,
852
- requiresRestart: false,
853
- validationErrors: {},
854
- });
855
- });
856
- app.put("/secrets/discord", async (c) => {
857
- const parsedBody = await readJsonBody(c);
858
- if (!parsedBody.ok)
859
- return parsedBody.response;
860
- const body = parsedBody.body;
861
- const botToken = typeof body?.botToken === "string" ? body.botToken.trim() : "";
862
- if (!botToken) {
863
- return c.json({
864
- status: "validation_failed",
865
- configured: false,
866
- requiresRestart: false,
867
- validationErrors: { botToken: "Discord bot token is required." },
868
- }, 400);
869
- }
870
- await secretBroker.set("discordBotToken", botToken);
871
- await notifySecretChange("discord");
872
- return c.json({
873
- status: "updated",
874
- configured: (await getSecretConfigSummary()).discordConfigured,
875
- requiresRestart: false,
876
- validationErrors: {},
877
- });
878
- });
879
- app.put("/secrets/notion", async (c) => {
880
- const parsedBody = await readJsonBody(c);
881
- if (!parsedBody.ok)
882
- return parsedBody.response;
883
- const body = parsedBody.body;
884
- const apiKey = typeof body?.apiKey === "string" ? body.apiKey.trim() : "";
885
- if (!apiKey) {
886
- return c.json({
887
- status: "validation_failed",
888
- configured: false,
889
- requiresRestart: false,
890
- validationErrors: { apiKey: "Notion API key is required." },
891
- }, 400);
892
- }
893
- await secretBroker.set("notionApiKey", apiKey);
894
- await notifySecretChange("notion");
895
- return c.json({
896
- status: "updated",
897
- configured: (await getSecretConfigSummary()).notionConfigured,
898
- requiresRestart: false,
899
- validationErrors: {},
900
- });
901
- });
902
- app.put("/secrets/github", async (c) => {
903
- const parsedBody = await readJsonBody(c);
904
- if (!parsedBody.ok)
905
- return parsedBody.response;
906
- const body = parsedBody.body;
907
- const token = typeof body?.token === "string" ? body.token.trim() : "";
908
- const webhookSecret = typeof body?.webhookSecret === "string" ? body.webhookSecret.trim() : "";
909
- if (!token && !webhookSecret) {
910
- return c.json({
911
- status: "validation_failed",
912
- configured: false,
913
- requiresRestart: false,
914
- validationErrors: {
915
- token: "Provide a GitHub token and/or webhook secret.",
916
- webhookSecret: "Provide a GitHub token and/or webhook secret.",
917
- },
918
- }, 400);
919
- }
920
- if (token)
921
- await secretBroker.set("githubToken", token);
922
- if (webhookSecret)
923
- await secretBroker.set("githubWebhookSecret", webhookSecret);
924
- await notifySecretChange("github");
925
- const summary = await getSecretConfigSummary();
926
- return c.json({
927
- status: "updated",
928
- configured: summary.githubConfigured || summary.githubWebhookSecretConfigured,
929
- requiresRestart: false,
930
- validationErrors: {},
931
- });
932
- });
933
- app.put("/secrets/google/credentials", async (c) => {
934
- const parsedBody = await readJsonBody(c);
935
- if (!parsedBody.ok)
936
- return parsedBody.response;
937
- const body = parsedBody.body;
938
- const raw = typeof body?.json === "string" ? body.json : "";
939
- if (!raw) {
940
- return c.json({
941
- status: "validation_failed",
942
- configured: false,
943
- requiresRestart: false,
944
- validationErrors: { json: "Credentials JSON is required." },
945
- }, 400);
946
- }
947
- let parsed;
948
- try {
949
- parsed = JSON.parse(raw);
950
- }
951
- catch {
952
- return c.json({
953
- status: "validation_failed",
954
- configured: false,
955
- requiresRestart: false,
956
- validationErrors: { json: "Invalid JSON file" },
957
- }, 400);
958
- }
959
- if (!parsed.installed && !parsed.web && parsed.type !== "service_account") {
960
- return c.json({
961
- status: "validation_failed",
962
- configured: false,
963
- requiresRestart: false,
964
- validationErrors: {
965
- json: "Invalid credentials format. Expected OAuth2 credentials JSON or a service account JSON.",
966
- },
967
- }, 400);
968
- }
969
- await secretBroker.set("googleCredentialsJson", raw);
970
- if (parsed.type === "service_account") {
971
- await secretBroker.delete("googleTokenJson");
972
- }
973
- await notifySecretChange("google");
974
- deps.onGoogleServicesReady?.();
975
- const summary = await getSecretConfigSummary();
976
- return c.json({
977
- status: "updated",
978
- configured: summary.googleCalendarCredentialsConfigured,
979
- requiresRestart: false,
980
- validationErrors: {},
981
- });
982
- });
983
- app.put("/secrets/google/token", async (c) => {
984
- const parsedBody = await readJsonBody(c);
985
- if (!parsedBody.ok)
986
- return parsedBody.response;
987
- const body = parsedBody.body;
988
- const raw = typeof body?.json === "string" ? body.json : "";
989
- if (!raw) {
990
- return c.json({
991
- status: "validation_failed",
992
- configured: false,
993
- requiresRestart: false,
994
- validationErrors: { json: "Token JSON is required." },
995
- }, 400);
996
- }
997
- try {
998
- JSON.parse(raw);
999
- }
1000
- catch {
1001
- return c.json({
1002
- status: "validation_failed",
1003
- configured: false,
1004
- requiresRestart: false,
1005
- validationErrors: { json: "Invalid JSON file" },
1006
- }, 400);
1007
- }
1008
- await secretBroker.saveGoogleTokenJson(raw);
1009
- await notifySecretChange("google");
1010
- deps.onGoogleServicesReady?.();
1011
- const summary = await getSecretConfigSummary();
1012
- return c.json({
1013
- status: "updated",
1014
- configured: summary.googleCalendarTokenConfigured,
1015
- requiresRestart: false,
1016
- validationErrors: {},
1017
- });
1018
- });
1019
- app.delete("/secrets/:name", async (c) => {
1020
- const name = c.req.param("name");
1021
- if (name === "apiToken") {
1022
- return c.json({
1023
- error: "api_token_not_deletable",
1024
- message: "The daemon API token cannot be deleted from the API. Rotate it explicitly instead.",
1025
- }, 400);
1026
- }
1027
- const secretNameByParam = {
1028
- slackBotToken: "slackBotToken",
1029
- slackAppToken: "slackAppToken",
1030
- telegramBotToken: "telegramBotToken",
1031
- discordBotToken: "discordBotToken",
1032
- notionApiKey: "notionApiKey",
1033
- githubToken: "githubToken",
1034
- githubWebhookSecret: "githubWebhookSecret",
1035
- googleCredentialsJson: "googleCredentialsJson",
1036
- googleTokenJson: "googleTokenJson",
1037
- };
1038
- const secretName = secretNameByParam[name];
1039
- if (!secretName) {
1040
- return c.json({ error: "unknown_secret" }, 404);
1041
- }
1042
- await secretBroker.delete(secretName);
1043
- const scopeBySecret = {
1044
- slackBotToken: "slack",
1045
- slackAppToken: "slack",
1046
- telegramBotToken: "telegram",
1047
- discordBotToken: "discord",
1048
- notionApiKey: "notion",
1049
- githubToken: "github",
1050
- githubWebhookSecret: "github",
1051
- googleCredentialsJson: "google",
1052
- googleTokenJson: "google",
1053
- };
1054
- await notifySecretChange(scopeBySecret[secretName]);
1055
- return c.json({
1056
- status: "deleted",
1057
- configured: false,
1058
- requiresRestart: false,
1059
- validationErrors: {},
1060
- });
1061
- });
1062
- app.get("/dashboard/next-check", (c) => {
1063
- return c.json(getNextHourlyCheck(config));
1064
- });
1065
- // STAGE-C-DM-FRESHNESS-PLAN §Task 4 — DM freshness aggregate. Powered
1066
- // by `agent_actions.detail.dm_freshness.*` rows the DM dispatch path
1067
- // writes via AuditLogger.logAction. Window defaults to 7 days; query
1068
- // param `days` overrides for ad-hoc inspection (clamped to 1..90).
1069
- app.get("/dashboard/dm-freshness", (c) => {
1070
- const daysParam = c.req.query("days");
1071
- let windowDays = 7;
1072
- if (daysParam !== undefined) {
1073
- const parsed = Number(daysParam);
1074
- if (!Number.isFinite(parsed) || parsed < 1 || parsed > 90) {
1075
- return c.json({
1076
- error: "invalid_window",
1077
- message: "days must be a number between 1 and 90",
1078
- }, 400);
1079
- }
1080
- windowDays = Math.round(parsed);
1081
- }
1082
- const aggregate = computeDmFreshnessAggregate(deps.db, windowDays);
1083
- return c.json(aggregate);
1084
- });
1085
- /**
1086
- * POST /messaging/whatsapp/pair
1087
- *
1088
- * Triggers Baileys pairing and waits up to ~10s for the first scannable QR.
1089
- * If WhatsApp isn't enabled yet, returns 409 with a clear hint instead of
1090
- * silently 404'ing — this surfaces the original setup-flow bug where users
1091
- * clicked Pair without first enabling.
1092
- */
1093
- app.post("/messaging/whatsapp/pair", async (c) => {
1094
- if (!deps.whatsappControls) {
1095
- return c.json({ error: "whatsapp_not_available" }, 404);
1096
- }
1097
- if (!config.whatsappEnabled) {
1098
- return c.json({
1099
- error: "whatsapp_not_enabled",
1100
- message: "Enable WhatsApp first (toggle the Enable button), then click Pair.",
1101
- }, 409);
1102
- }
1103
- if (!config.whatsappOwnerPhone) {
1104
- return c.json({
1105
- error: "whatsapp_phone_missing",
1106
- message: "Set the owner phone (E.164, e.g. +818012345678) and save before pairing.",
1107
- }, 409);
1108
- }
1109
- try {
1110
- const response = await deps.whatsappControls.waitForQr(10_000);
1111
- return c.json(response);
1112
- }
1113
- catch (err) {
1114
- const message = toSafeErrorMessage(err, "Unknown WhatsApp error");
1115
- return c.json({
1116
- error: "whatsapp_pair_failed",
1117
- message,
1118
- state: deps.whatsappControls.getQrResponse().state,
1119
- }, 500);
1120
- }
1121
- });
1122
- /**
1123
- * GET /messaging/whatsapp/qr
1124
- *
1125
- * Returns the current QR snapshot WITHOUT triggering a fresh pair flow.
1126
- * Dashboard polls this every ~3s while pairing is in progress so the user
1127
- * always sees the latest QR (Baileys rotates them every ~20s).
1128
- */
1129
- app.get("/messaging/whatsapp/qr", (c) => {
1130
- if (!deps.whatsappControls) {
1131
- return c.json({ error: "whatsapp_not_available" }, 404);
1132
- }
1133
- const response = deps.whatsappControls.getQrResponse();
1134
- return c.json({
1135
- ...response,
1136
- error: response.error ? toSafeErrorMessage(response.error) : null,
1137
- });
1138
- });
1139
- /**
1140
- * POST /messaging/whatsapp/reset
1141
- *
1142
- * Recovery path for "unlinked from phone" or "broken link" situations
1143
- * where the cached Baileys auth would otherwise prevent a fresh pair
1144
- * from succeeding. Tears the adapter down, wipes the auth directory
1145
- * (creds.json, session-*.json, qr.txt, …) plus the owner_channels
1146
- * mapping, then — if WhatsApp is currently enabled — rebuilds the
1147
- * adapter and waits up to ~10s for the first QR so the dashboard can
1148
- * render it in the same response.
1149
- */
1150
- app.post("/messaging/whatsapp/reset", async (c) => {
1151
- if (!deps.whatsappControls) {
1152
- return c.json({ error: "whatsapp_not_available" }, 404);
1153
- }
1154
- try {
1155
- const response = await deps.whatsappControls.reset(10_000);
1156
- return c.json(response);
1157
- }
1158
- catch (err) {
1159
- const message = toSafeErrorMessage(err, "Unknown WhatsApp error");
1160
- return c.json({
1161
- error: "whatsapp_reset_failed",
1162
- message,
1163
- state: deps.whatsappControls.getQrResponse().state,
1164
- }, 500);
1165
- }
1166
- });
1167
- /**
1168
- * GET /messaging/whatsapp/status
1169
- *
1170
- * Lightweight health probe — connection state + last error, no QR fetch.
1171
- */
1172
- app.get("/messaging/whatsapp/status", (c) => {
1173
- if (!deps.whatsappControls) {
1174
- return c.json({ error: "whatsapp_not_available" }, 404);
1175
- }
1176
- const response = deps.whatsappControls.getQrResponse();
1177
- return c.json({
1178
- enabled: config.whatsappEnabled,
1179
- initialized: deps.whatsappControls.isInitialized(),
1180
- state: response.state,
1181
- error: response.error ? toSafeErrorMessage(response.error) : null,
1182
- });
1183
- });
1184
- // ── Telegram pairing ──────────────────────────────────────────────────
1185
- //
1186
- // Three endpoints support the dashboard's QR-deep-link pairing flow:
1187
- // POST /messaging/telegram/test-token — getMe (validate token)
1188
- // POST /messaging/telegram/start-pairing — generate token + QR + deep link
1189
- // GET /messaging/telegram/pairing-status — poll until paired
1190
- //
1191
- // The QR encodes `https://t.me/<bot>?start=<token>`. When the user scans
1192
- // it, Telegram opens the bot and sends `/start <token>`; the adapter
1193
- // matches the token, captures the chat ID via discovery mode, and the
1194
- // daemon writes the ID into .env via the onOwnerDetected callback.
1195
- app.post("/messaging/telegram/test-token", async (c) => {
1196
- if (!deps.messagingControls?.telegram) {
1197
- return c.json({ error: "telegram_not_configured" }, 404);
1198
- }
1199
- // Accept an optional candidate token in the request body so the
1200
- // dashboard can validate an UNSAVED draft before persisting it.
1201
- const body = await c.req.json().catch(() => ({}));
1202
- const candidate = typeof body?.token === "string" && body.token.length > 0
1203
- ? body.token
1204
- : undefined;
1205
- try {
1206
- const info = await deps.messagingControls.telegram.testToken(candidate);
1207
- return c.json(info);
1208
- }
1209
- catch (err) {
1210
- return c.json({
1211
- error: "telegram_test_failed",
1212
- message: toSafeErrorMessage(err, "Telegram token validation failed"),
1213
- }, 400);
1214
- }
1215
- });
1216
- app.post("/messaging/telegram/start-pairing", async (c) => {
1217
- if (!deps.messagingControls?.telegram) {
1218
- return c.json({ error: "telegram_not_configured" }, 404);
1219
- }
1220
- try {
1221
- const result = await deps.messagingControls.telegram.startPairing();
1222
- return c.json(result);
1223
- }
1224
- catch (err) {
1225
- return c.json({
1226
- error: "telegram_pair_start_failed",
1227
- message: toSafeErrorMessage(err, "Telegram pairing could not start"),
1228
- }, 500);
1229
- }
1230
- });
1231
- app.get("/messaging/telegram/pairing-status", (c) => {
1232
- if (!deps.messagingControls?.telegram) {
1233
- return c.json({ error: "telegram_not_configured" }, 404);
1234
- }
1235
- return c.json(deps.messagingControls.telegram.getPairingStatus());
1236
- });
1237
- app.post("/messaging/telegram/cancel-pairing", (c) => {
1238
- if (!deps.messagingControls?.telegram) {
1239
- return c.json({ error: "telegram_not_configured" }, 404);
1240
- }
1241
- deps.messagingControls.telegram.cancelPairing();
1242
- return c.json({ status: "cancelled" });
1243
- });
1244
- // ── Slack pairing ─────────────────────────────────────────────────────
1245
- //
1246
- // Slack has no QR/deep-link mechanism, so we offer two helpers:
1247
- // 1. Token validation via auth.test
1248
- // 2. A pre-built app manifest (one-click app creation at api.slack.com)
1249
- // 3. Discovery mode for owner user ID — user DMs the bot, daemon captures
1250
- //
1251
- // The manifest uses Aitne's required scopes (im:history,
1252
- // chat:write, app_mentions:read) + Socket Mode + bot scopes. We do NOT
1253
- // include any oauth_redirect_url since Socket Mode bots don't need one.
1254
- app.post("/messaging/slack/test-token", async (c) => {
1255
- if (!deps.messagingControls?.slack) {
1256
- return c.json({ error: "slack_not_configured" }, 404);
1257
- }
1258
- const body = await c.req.json().catch(() => ({}));
1259
- const candidate = typeof body?.token === "string" && body.token.length > 0
1260
- ? body.token
1261
- : undefined;
1262
- try {
1263
- const info = await deps.messagingControls.slack.testToken(candidate);
1264
- return c.json(info);
1265
- }
1266
- catch (err) {
1267
- return c.json({
1268
- error: "slack_test_failed",
1269
- message: toSafeErrorMessage(err, "Slack token validation failed"),
1270
- }, 400);
1271
- }
1272
- });
1273
- app.get("/messaging/slack/manifest", (c) => {
1274
- // App manifest in JSON form. Slack supports both YAML and JSON in the
1275
- // `?manifest_json=` and `?manifest_yaml=` query params on the new-app
1276
- // create page (https://docs.slack.dev/app-manifests/...).
1277
- //
1278
- // Scope minimization (intentional, do not re-broaden):
1279
- // - app_mentions:read — for @mentions in channels the user invited the bot to
1280
- // - chat:write — required to send messages
1281
- // - files:read — required to download user-uploaded files
1282
- // - im:history — required to receive `message.im` events
1283
- // - im:read — list/inspect direct-message channels
1284
- // - im:write — open a DM channel with the owner
1285
- //
1286
- // We DELIBERATELY OMIT:
1287
- // - channels:history — would let the bot read every message in every
1288
- // channel it's added to. Aitne only DMs,
1289
- // so this scope is pure attack surface.
1290
- // - users:read — not needed; resolveUserChannel() uses
1291
- // conversations.open with the configured user ID.
1292
- const manifest = {
1293
- display_information: {
1294
- name: APP_NAME,
1295
- description: "Local-first proactive assistant",
1296
- background_color: "#1a1a2e",
1297
- },
1298
- features: {
1299
- bot_user: {
1300
- display_name: APP_NAME,
1301
- always_online: true,
1302
- },
1303
- },
1304
- oauth_config: {
1305
- scopes: {
1306
- bot: [
1307
- "app_mentions:read",
1308
- "chat:write",
1309
- "files:read",
1310
- "im:history",
1311
- "im:read",
1312
- "im:write",
1313
- ],
1314
- },
1315
- },
1316
- settings: {
1317
- event_subscriptions: {
1318
- bot_events: ["app_mention", "message.im"],
1319
- },
1320
- interactivity: { is_enabled: false },
1321
- org_deploy_enabled: false,
1322
- socket_mode_enabled: true,
1323
- token_rotation_enabled: false,
1324
- },
1325
- };
1326
- const manifestJson = JSON.stringify(manifest);
1327
- // Slack's "create app from manifest" deep link.
1328
- const createAppUrl = `https://api.slack.com/apps?new_app=1&manifest_json=${encodeURIComponent(manifestJson)}`;
1329
- return c.json({
1330
- manifest,
1331
- manifestJson,
1332
- createAppUrl,
1333
- instructions: [
1334
- "1. Click 'Open Slack app builder' below — Slack will pre-fill the manifest.",
1335
- "2. On the app page, scroll to 'Install App' and click Install to your workspace.",
1336
- "3. Copy the Bot User OAuth Token (xoxb-…) from 'OAuth & Permissions' into the field below.",
1337
- "4. Generate an App-Level Token (xapp-…) under 'Basic Information' → 'App-Level Tokens' with `connections:write` scope, paste it below.",
1338
- "5. Click Save Slack Config, then 'Generate pairing phrase' and DM the bot with the phrase.",
1339
- ],
1340
- });
1341
- });
1342
- /**
1343
- * POST /messaging/slack/start-pairing
1344
- *
1345
- * Generates a fresh magic phrase, registers it as the Slack adapter's
1346
- * pairing challenge, and returns it to the dashboard. The user must
1347
- * include this phrase in the next DM they send to the bot — only that
1348
- * matching DM captures the owner role. The previous "enable-discovery"
1349
- * endpoint was vulnerable to a 5-minute race where any DM could
1350
- * hijack ownership; the magic phrase closes that.
1351
- */
1352
- app.post("/messaging/slack/start-pairing", async (c) => {
1353
- if (!deps.messagingControls?.slack) {
1354
- return c.json({ error: "slack_not_configured" }, 404);
1355
- }
1356
- try {
1357
- const result = await deps.messagingControls.slack.startPairing();
1358
- return c.json(result);
1359
- }
1360
- catch (err) {
1361
- return c.json({
1362
- error: "slack_pair_start_failed",
1363
- message: toSafeErrorMessage(err, "Slack pairing could not start"),
1364
- }, 400);
1365
- }
1366
- });
1367
- app.post("/messaging/slack/cancel-pairing", (c) => {
1368
- if (!deps.messagingControls?.slack) {
1369
- return c.json({ error: "slack_not_configured" }, 404);
1370
- }
1371
- deps.messagingControls.slack.cancelPairing();
1372
- return c.json({ status: "cancelled" });
1373
- });
1374
- app.get("/messaging/slack/pairing-status", (c) => {
1375
- if (!deps.messagingControls?.slack) {
1376
- return c.json({ error: "slack_not_configured" }, 404);
1377
- }
1378
- return c.json(deps.messagingControls.slack.getPairingStatus());
1379
- });
1380
- // ── Discord pairing ───────────────────────────────────────────────────
1381
- //
1382
- // Discord parity: token validation + magic-phrase pairing for owner user ID.
1383
- app.post("/messaging/discord/test-token", async (c) => {
1384
- if (!deps.messagingControls?.discord) {
1385
- return c.json({ error: "discord_not_configured" }, 404);
1386
- }
1387
- const body = await c.req.json().catch(() => ({}));
1388
- const candidate = typeof body?.token === "string" && body.token.length > 0
1389
- ? body.token
1390
- : undefined;
1391
- try {
1392
- const info = await deps.messagingControls.discord.testToken(candidate);
1393
- return c.json(info);
1394
- }
1395
- catch (err) {
1396
- return c.json({
1397
- error: "discord_test_failed",
1398
- message: toSafeErrorMessage(err, "Discord token validation failed"),
1399
- }, 400);
1400
- }
1401
- });
1402
- app.post("/messaging/discord/start-pairing", async (c) => {
1403
- if (!deps.messagingControls?.discord) {
1404
- return c.json({ error: "discord_not_configured" }, 404);
1405
- }
1406
- try {
1407
- const result = await deps.messagingControls.discord.startPairing();
1408
- return c.json(result);
1409
- }
1410
- catch (err) {
1411
- return c.json({
1412
- error: "discord_pair_start_failed",
1413
- message: toSafeErrorMessage(err, "Discord pairing could not start"),
1414
- }, 400);
1415
- }
1416
- });
1417
- app.post("/messaging/discord/cancel-pairing", (c) => {
1418
- if (!deps.messagingControls?.discord) {
1419
- return c.json({ error: "discord_not_configured" }, 404);
1420
- }
1421
- deps.messagingControls.discord.cancelPairing();
1422
- return c.json({ status: "cancelled" });
1423
- });
1424
- app.get("/messaging/discord/pairing-status", (c) => {
1425
- if (!deps.messagingControls?.discord) {
1426
- return c.json({ error: "discord_not_configured" }, 404);
1427
- }
1428
- return c.json(deps.messagingControls.discord.getPairingStatus());
1429
- });
1430
- /** POST /config/upload/google-credentials — upload Google Calendar credentials JSON */
1431
- app.post("/config/upload/google-credentials", async (c) => {
1432
- const body = await c.req.parseBody();
1433
- const file = body["file"];
1434
- if (!file || !(file instanceof File)) {
1435
- return c.json({ error: "No file uploaded. Send as multipart with field name 'file'" }, 400);
1436
- }
1437
- if (file.size > MAX_UPLOAD_SIZE) {
1438
- return c.json({ error: `File too large (max ${MAX_UPLOAD_SIZE / 1024} KB)` }, 400);
1439
- }
1440
- const content = await file.text();
1441
- let parsed;
1442
- try {
1443
- parsed = JSON.parse(content);
1444
- }
1445
- catch {
1446
- return c.json({ error: "Invalid JSON file" }, 400);
1447
- }
1448
- // Basic validation: must be OAuth2 (installed/web) or service account
1449
- const obj = parsed;
1450
- if (!obj.installed && !obj.web && obj.type !== "service_account") {
1451
- return c.json({ error: "Invalid credentials format. Expected OAuth2 credentials JSON (with 'installed' or 'web' key) or a service account JSON." }, 400);
1452
- }
1453
- await secretBroker.set("googleCredentialsJson", content);
1454
- if (parsed.type === "service_account") {
1455
- await secretBroker.delete("googleTokenJson");
1456
- }
1457
- await notifySecretChange("google");
1458
- deps.onGoogleServicesReady?.();
1459
- return c.json({
1460
- status: "uploaded",
1461
- path: "keychain://google-credentials",
1462
- requiresRestart: false,
1463
- message: "Credentials saved.",
1464
- });
1465
- });
1466
- /** POST /config/upload/google-token — upload Google Calendar OAuth token JSON */
1467
- app.post("/config/upload/google-token", async (c) => {
1468
- const body = await c.req.parseBody();
1469
- const file = body["file"];
1470
- if (!file || !(file instanceof File)) {
1471
- return c.json({ error: "No file uploaded. Send as multipart with field name 'file'" }, 400);
1472
- }
1473
- if (file.size > MAX_UPLOAD_SIZE) {
1474
- return c.json({ error: `File too large (max ${MAX_UPLOAD_SIZE / 1024} KB)` }, 400);
1475
- }
1476
- const content = await file.text();
1477
- // Validate JSON
1478
- try {
1479
- JSON.parse(content);
1480
- }
1481
- catch {
1482
- return c.json({ error: "Invalid JSON file" }, 400);
1483
- }
1484
- await secretBroker.saveGoogleTokenJson(content);
1485
- await notifySecretChange("google");
1486
- deps.onGoogleServicesReady?.();
1487
- return c.json({
1488
- status: "uploaded",
1489
- path: "keychain://google-token",
1490
- requiresRestart: false,
1491
- message: "Token saved.",
1492
- });
1493
- });
1494
- // ── Google OAuth2 Authorization Flow ──
1495
- // Allows users to authenticate with just credentials.json — the daemon
1496
- // handles the full OAuth2 flow and saves the token automatically.
1497
- /** POST /config/google-auth/start — begin OAuth2 authorization */
1498
- app.post("/config/google-auth/start", async (c) => {
1499
- const credRaw = await secretBroker.getGoogleCredentialsJson();
1500
- if (!credRaw) {
1501
- return c.json({ error: "Upload credentials.json first" }, 400);
1502
- }
1503
- let cred;
1504
- try {
1505
- cred = parseGoogleCredentialsJson(credRaw);
1506
- }
1507
- catch {
1508
- return c.json({ error: "Credentials JSON is invalid. Upload it again." }, 400);
1509
- }
1510
- // Service accounts don't need OAuth2 authorization
1511
- if (cred.type === "service_account") {
1512
- return c.json({ error: "Service account credentials don't require OAuth authorization. Restart the daemon to activate." }, 400);
1513
- }
1514
- const clientConfig = getGoogleOAuthClientConfig(cred);
1515
- if (!clientConfig) {
1516
- return c.json({ error: "Invalid credentials format" }, 400);
1517
- }
1518
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1519
- let google;
1520
- try {
1521
- const mod = await import("googleapis");
1522
- google = mod.google;
1523
- }
1524
- catch {
1525
- return c.json({ error: "googleapis package not installed" }, 500);
1526
- }
1527
- // Use daemon's own port for the OAuth callback
1528
- const redirectUri = `http://localhost:${config.apiPort}/api/config/google-auth/callback`;
1529
- const oauth2Client = new google.auth.OAuth2(clientConfig.client_id, clientConfig.client_secret, redirectUri);
1530
- // Request scopes for Calendar + Gmail
1531
- const scopes = [
1532
- "https://www.googleapis.com/auth/calendar",
1533
- "https://www.googleapis.com/auth/gmail.modify",
1534
- "https://www.googleapis.com/auth/gmail.send",
1535
- ];
1536
- pruneOauthStates();
1537
- const state = randomUUID();
1538
- // Capture the dashboard origin so the callback can postMessage to the
1539
- // correct window. Origin/Referer must match the closed allowlist or
1540
- // the flow is refused — defending the postMessage target from the
1541
- // class of attacks described next to `allowedDashboardOrigins`.
1542
- const dashboardOrigin = resolveAllowedDashboardOrigin(c.req.header("origin"), c.req.header("referer"));
1543
- if (!dashboardOrigin) {
1544
- return c.json({
1545
- error: "untrusted_origin",
1546
- message: "OAuth flows must be initiated from the configured dashboard origin",
1547
- }, 403);
1548
- }
1549
- oauthStates.set(state, { createdAt: Date.now(), dashboardOrigin });
1550
- const authUrl = oauth2Client.generateAuthUrl({
1551
- access_type: "offline",
1552
- scope: scopes,
1553
- prompt: "consent", // Force consent to always get a refresh_token
1554
- state,
1555
- });
1556
- return c.json({ authUrl, redirectUri, scopes });
1557
- });
1558
- /** GET /config/google-auth/callback — OAuth2 redirect handler */
1559
- app.get("/config/google-auth/callback", async (c) => {
1560
- const code = c.req.query("code");
1561
- const error = c.req.query("error");
1562
- const state = c.req.query("state");
1563
- if (error) {
1564
- return c.html(`<!DOCTYPE html><html><body style="font-family:system-ui;text-align:center;padding:60px">
1565
- <h2 style="color:#dc2626">Authorization Failed</h2>
1566
- <p>${escapeHtml(error)}</p>
1567
- <p style="color:#666;font-size:14px">You can close this window.</p>
1568
- </body></html>`);
1569
- }
1570
- pruneOauthStates();
1571
- const stateData = state ? oauthStates.get(state) : undefined;
1572
- if (!state || !stateData) {
1573
- return c.html(`<!DOCTYPE html><html><body style="font-family:system-ui;text-align:center;padding:60px">
1574
- <h2 style="color:#dc2626">Authorization Failed</h2>
1575
- <p>Invalid or expired OAuth state.</p>
1576
- <p style="color:#666;font-size:14px">Start the authorization flow again from the dashboard.</p>
1577
- </body></html>`);
1578
- }
1579
- const { dashboardOrigin } = stateData;
1580
- oauthStates.delete(state);
1581
- // Defence-in-depth: the start handler already gates Origin/Referer
1582
- // against `allowedDashboardOrigins`, so a stored value should always
1583
- // pass this check. Re-validate before injecting into the callback
1584
- // HTML so a future code change that drops the start-side gate
1585
- // doesn't silently regress the postMessage target.
1586
- if (!allowedDashboardOrigins.has(dashboardOrigin)) {
1587
- logger.warn({ dashboardOrigin }, "OAuth callback refused — stored dashboard origin not in allowlist");
1588
- return c.html(`<!DOCTYPE html><html><body style="font-family:system-ui;text-align:center;padding:60px">
1589
- <h2 style="color:#dc2626">Authorization Failed</h2>
1590
- <p>Untrusted dashboard origin.</p>
1591
- </body></html>`);
1592
- }
1593
- if (!code) {
1594
- return c.html(`<!DOCTYPE html><html><body style="font-family:system-ui;text-align:center;padding:60px">
1595
- <h2 style="color:#dc2626">Error</h2>
1596
- <p>No authorization code received.</p>
1597
- </body></html>`);
1598
- }
1599
- // Re-create OAuth2 client from stored credentials
1600
- const credRaw = await secretBroker.getGoogleCredentialsJson();
1601
- if (!credRaw) {
1602
- return c.html(`<!DOCTYPE html><html><body style="font-family:system-ui;text-align:center;padding:60px">
1603
- <h2 style="color:#dc2626">Error</h2>
1604
- <p>Credentials not configured.</p>
1605
- </body></html>`);
1606
- }
1607
- try {
1608
- const cred = parseGoogleCredentialsJson(credRaw);
1609
- const clientConfig = getGoogleOAuthClientConfig(cred);
1610
- if (!clientConfig)
1611
- throw new Error("Invalid credentials");
1612
- const mod = await import("googleapis");
1613
- const google = mod.google;
1614
- const redirectUri = `http://localhost:${config.apiPort}/api/config/google-auth/callback`;
1615
- const oauth2Client = new google.auth.OAuth2(clientConfig.client_id, clientConfig.client_secret, redirectUri);
1616
- // Exchange authorization code for tokens
1617
- const { tokens } = await oauth2Client.getToken(code);
1618
- await secretBroker.saveGoogleTokenJson(JSON.stringify(tokens));
1619
- await notifySecretChange("google");
1620
- deps.onGoogleServicesReady?.();
1621
- const statusMsg = services.calendar || services.gmail
1622
- ? "Services activated."
1623
- : "Token saved.";
1624
- return c.html(`<!DOCTYPE html><html><body style="font-family:system-ui;text-align:center;padding:60px">
1625
- <h2 style="color:#059669">Authorization Successful</h2>
1626
- <p>${escapeHtml(statusMsg)}</p>
1627
- <p style="color:#666;font-size:14px">You can close this window.</p>
1628
- <script>
1629
- if (window.opener) {
1630
- window.opener.postMessage({ type: "google-auth-success" }, ${JSON.stringify(dashboardOrigin)});
1631
- }
1632
- </script>
1633
- </body></html>`);
1634
- }
1635
- catch (err) {
1636
- const msg = toSafeErrorMessage(err, "Unknown error");
1637
- return c.html(`<!DOCTYPE html><html><body style="font-family:system-ui;text-align:center;padding:60px">
1638
- <h2 style="color:#dc2626">Token Exchange Failed</h2>
1639
- <p>${escapeHtml(msg)}</p>
1640
- <p style="color:#666;font-size:14px">You can close this window and try again.</p>
1641
- </body></html>`);
1642
- }
1643
- });
1644
- /** POST /config/reset-safety — reset disallowedTools to defaults */
1645
- app.post("/config/reset-safety", async (c) => {
1646
- const defaults = [...DEFAULT_DISALLOWED_TOOLS];
1647
- // Actually persist the reset — update in-memory config and .env
1648
- // Use null for allowedToolsOverride to match the Zod default (null = "no override")
1649
- const result = await applyConfigUpdates(config, settingsStore, {
1650
- disallowedTools: defaults,
1651
- allowedToolsOverride: null,
1652
- });
1653
- return c.json({ status: "reset", disallowedTools: defaults, ...result });
1654
- });
1655
- // ── Events/Logs API ──
1656
- /** GET /events — paginated event/action log */
1657
- app.get("/events", (c) => {
1658
- const page = Math.max(1, Number(c.req.query("page") ?? "1"));
1659
- const limit = Math.min(Number(c.req.query("limit") ?? "50"), 100);
1660
- const offset = (page - 1) * limit;
1661
- const type = c.req.query("type");
1662
- const result = c.req.query("result");
1663
- const days = c.req.query("days"); // "1" (today), "7", "30"
1664
- let whereClause = "WHERE 1=1";
1665
- const params = [];
1666
- if (type) {
1667
- whereClause += " AND action_type = ?";
1668
- params.push(type);
1669
- }
1670
- if (result) {
1671
- whereClause += " AND result = ?";
1672
- params.push(result);
1673
- }
1674
- if (days) {
1675
- const d = Number(days);
1676
- if (d > 0 && d <= 365) {
1677
- // datetime(started_at) normalizes mixed ISO-8601 / SQL formats — the
1678
- // delegated_proxy.invoke writer historically inserted ISO-with-T-and-Z
1679
- // strings, which sort lexicographically above same-day SQL strings.
1680
- whereClause += " AND datetime(started_at) > datetime('now', '-' || ? || ' days')";
1681
- params.push(d);
1682
- }
1683
- }
1684
- const total = db
1685
- .prepare(`SELECT COUNT(*) as cnt FROM agent_actions ${whereClause}`)
1686
- .get(...params);
1687
- params.push(limit, offset);
1688
- const rows = db
1689
- .prepare(`SELECT id, event_id, action_type, trigger, model_used, model_usage_json, cost_usd,
1690
- tokens_input, tokens_output,
1691
- cache_creation_tokens, cache_read_tokens,
1692
- duration_ms, num_turns,
1693
- result, detail, started_at, completed_at, error
1694
- FROM agent_actions ${whereClause}
1695
- ORDER BY datetime(started_at) DESC, id DESC
1696
- LIMIT ? OFFSET ?`)
1697
- .all(...params);
1698
- return c.json({
1699
- events: rows,
1700
- pagination: {
1701
- page,
1702
- limit,
1703
- total: total.cnt,
1704
- totalPages: Math.ceil(total.cnt / limit),
1705
- },
1706
- });
1707
- });
1708
- // ── Conversations API ──
1709
- /** GET /conversations — paginated conversation sessions */
1710
- app.get("/conversations", (c) => {
1711
- const page = Number(c.req.query("page") ?? "1");
1712
- const limit = Math.min(Number(c.req.query("limit") ?? "20"), 50);
1713
- const offset = (page - 1) * limit;
1714
- const platform = c.req.query("platform");
1715
- const status = c.req.query("status");
1716
- const scope = c.req.query("scope");
1717
- const scopes = scope
1718
- ?.split(",")
1719
- .map((value) => value.trim())
1720
- .filter((value) => value.length > 0);
1721
- let whereClause = "WHERE 1=1";
1722
- const params = [];
1723
- if (platform) {
1724
- whereClause += " AND platform = ?";
1725
- params.push(platform);
1726
- }
1727
- if (status) {
1728
- whereClause += " AND status = ?";
1729
- params.push(status);
1730
- }
1731
- if (scopes && scopes.length > 0) {
1732
- if (scopes.length === 1) {
1733
- whereClause += " AND scope = ?";
1734
- params.push(scopes[0]);
1735
- }
1736
- else {
1737
- whereClause += ` AND scope IN (${scopes.map(() => "?").join(", ")})`;
1738
- params.push(...scopes);
1739
- }
1740
- }
1741
- else {
1742
- // Default view excludes docs_qa: QA transcripts are short lookups
1743
- // and would drown out chat in /activity. Operators opt in with the
1744
- // explicit `?scope=docs_qa` filter chip.
1745
- whereClause += " AND scope != ?";
1746
- params.push(DOCS_QA_SCOPE);
1747
- }
1748
- const total = db
1749
- .prepare(`SELECT COUNT(*) as cnt FROM conversation_sessions ${whereClause}`)
1750
- .get(...params);
1751
- params.push(limit, offset);
1752
- const rows = db
1753
- .prepare(`SELECT id, platform, channel_id, thread_id, scope, model, status,
1754
- message_count, started_at, last_message_at, is_dm, backend_session_id
1755
- FROM conversation_sessions ${whereClause}
1756
- ORDER BY last_message_at DESC
1757
- LIMIT ? OFFSET ?`)
1758
- .all(...params);
1759
- const sourcePlatformsStmt = db.prepare(`SELECT DISTINCT platform
1760
- FROM messages
1761
- WHERE session_id = ?
1762
- ORDER BY CASE platform
1763
- WHEN 'dashboard' THEN 0
1764
- WHEN 'whatsapp' THEN 1
1765
- WHEN 'telegram' THEN 2
1766
- WHEN 'slack' THEN 3
1767
- WHEN 'discord' THEN 4
1768
- ELSE 99
1769
- END, platform`);
1770
- const conversations = rows.map((row) => {
1771
- const sourcePlatforms = sourcePlatformsStmt.all(row.id).map((platformRow) => platformRow.platform);
1772
- const normalizedSourcePlatforms = sourcePlatforms.length > 0
1773
- ? sourcePlatforms
1774
- : row.platform !== "owner"
1775
- ? [row.platform]
1776
- : [];
1777
- const browserOnly = normalizedSourcePlatforms.length > 0
1778
- && normalizedSourcePlatforms.every((platform) => platform === "dashboard");
1779
- return {
1780
- id: row.id,
1781
- platform: row.platform,
1782
- channel_id: row.channel_id,
1783
- thread_id: row.thread_id,
1784
- model: row.model,
1785
- status: row.status,
1786
- message_count: row.message_count,
1787
- started_at: row.started_at,
1788
- last_message_at: row.last_message_at,
1789
- summary: null,
1790
- source_platforms: normalizedSourcePlatforms,
1791
- read_only_from_dashboard: normalizedSourcePlatforms.length === 0 ||
1792
- normalizedSourcePlatforms.some((platform) => platform !== "dashboard"),
1793
- // A session is continuable when the dispatcher can actually
1794
- // execute against it — not when its stored SDK session id is
1795
- // non-null. `continueDashboardSession` legitimately writes
1796
- // `backend_session_id = NULL` on the `shouldInvalidateSdkSession`
1797
- // path, and the dispatcher falls back to fresh-execute + history
1798
- // injection for NULL backends. The real gates are: scope,
1799
- // browser-only provenance, and the workdir surviving on disk.
1800
- continue_available: row.scope === DASHBOARD_CHAT_SCOPE
1801
- && browserOnly
1802
- && existsSync(getSessionWorkdirPath(config.dataDir, row.id)),
1803
- };
1804
- });
1805
- return c.json({
1806
- conversations,
1807
- pagination: {
1808
- page,
1809
- limit,
1810
- total: total.cnt,
1811
- totalPages: Math.ceil(total.cnt / limit),
1812
- },
1813
- });
1814
- });
1815
- /**
1816
- * DELETE /conversations — bulk-delete every non-active sidebar session.
1817
- * Scope is hard-coded to `dashboard_chat` + `owner_dm` (what the chat
1818
- * sidebar shows); the live active session is filtered out so deleting
1819
- * "all past sessions" never kills the current chat.
1820
- */
1821
- app.delete("/conversations", (c) => {
1822
- const result = deleteAllChatSidebarSessions({ db, dataDir: config.dataDir });
1823
- return c.json({ status: "deleted", deleted: result.deleted });
1824
- });
1825
- /** DELETE /conversations/:id — delete one non-active sidebar session. */
1826
- app.delete("/conversations/:id", (c) => {
1827
- const sessionId = Number(c.req.param("id"));
1828
- if (!Number.isFinite(sessionId) || sessionId <= 0) {
1829
- return c.json({ error: "invalid_session_id" }, 400);
1830
- }
1831
- const result = deleteChatSession({
1832
- db,
1833
- dataDir: config.dataDir,
1834
- sessionId,
1835
- });
1836
- if (!result.ok) {
1837
- return c.json({ error: "delete_failed", message: result.message }, result.status);
1838
- }
1839
- return c.json({ status: "deleted", deleted: result.deleted });
1840
- });
1841
- /** GET /conversations/:id/messages — messages for a specific conversation */
1842
- app.get("/conversations/:id/messages", (c) => {
1843
- const sessionId = Number(c.req.param("id"));
1844
- const limit = Math.min(Number(c.req.query("limit") ?? "50"), 200);
1845
- const before = c.req.query("before"); // cursor-based pagination
1846
- let whereClause = "WHERE session_id = ?";
1847
- const params = [sessionId];
1848
- if (before) {
1849
- whereClause += " AND id < ?";
1850
- params.push(Number(before));
1851
- }
1852
- params.push(limit);
1853
- const rows = db
1854
- .prepare(`SELECT id, role, content, platform, sender_id, timestamp
1855
- FROM messages ${whereClause}
1856
- ORDER BY id DESC
1857
- LIMIT ?`)
1858
- .all(...params);
1859
- // Chat-attachments Phase 1 — inline attachment refs per message so
1860
- // the dashboard transcript can render thumbnails/download chips
1861
- // alongside past messages without an extra round-trip per row.
1862
- // Skipped when the chat_attachments table doesn't exist (older DB
1863
- // snapshots / tests that don't run migrations).
1864
- const hasAttachments = (() => {
1865
- try {
1866
- const row = db
1867
- .prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name='chat_attachments'`)
1868
- .get();
1869
- return row !== undefined;
1870
- }
1871
- catch {
1872
- return false;
1873
- }
1874
- })();
1875
- const attachmentsByMessage = new Map();
1876
- if (hasAttachments && rows.length > 0) {
1877
- const ids = rows.map((r) => r.id);
1878
- const placeholders = ids.map(() => "?").join(",");
1879
- const attachmentRows = db
1880
- .prepare(`SELECT message_id, id, direction, original_filename, mime_type, size_bytes, caption
1881
- FROM chat_attachments
1882
- WHERE message_id IN (${placeholders})
1883
- ORDER BY created_at ASC`)
1884
- .all(...ids);
1885
- for (const a of attachmentRows) {
1886
- let bucket = attachmentsByMessage.get(a.message_id);
1887
- if (!bucket) {
1888
- bucket = [];
1889
- attachmentsByMessage.set(a.message_id, bucket);
1890
- }
1891
- bucket.push({
1892
- id: a.id,
1893
- direction: a.direction,
1894
- originalFilename: a.original_filename,
1895
- mimeType: a.mime_type,
1896
- sizeBytes: a.size_bytes,
1897
- caption: a.caption,
1898
- });
1899
- }
1900
- }
1901
- const enriched = rows.map((row) => {
1902
- const attachments = attachmentsByMessage.get(row.id);
1903
- return attachments && attachments.length > 0
1904
- ? { ...row, attachments }
1905
- : row;
1906
- });
1907
- return c.json({
1908
- messages: enriched.reverse(), // Return in chronological order
1909
- hasMore: rows.length === limit,
1910
- });
1911
- });
1912
- // ── Cost API ──
1913
- /** GET /cost — cost analytics */
1914
- app.get("/cost", (c) => {
1915
- const period = c.req.query("period") ?? "daily"; // daily, weekly, monthly
1916
- const periodKey = period in COST_QUERIES
1917
- ? period
1918
- : "daily";
1919
- const queries = COST_QUERIES[periodKey];
1920
- const spec = COST_PERIOD_SPECS[periodKey];
1921
- const byPeriod = db.prepare(queries.byPeriod).all();
1922
- const byModelRaw = db.prepare(queries.byModelRows).all();
1923
- const byModel = aggregateByBilledModel(byModelRaw);
1924
- const byEventType = db.prepare(queries.byEventType).all();
1925
- const byBackend = db
1926
- .prepare(`SELECT ${backendExpr} as backend,
1927
- SUM(cost_usd) as total_cost,
1928
- COUNT(*) as session_count
1929
- FROM agent_actions
1930
- WHERE started_at > datetime('now', ?)
1931
- AND cost_usd IS NOT NULL
1932
- GROUP BY 1
1933
- ORDER BY total_cost DESC`)
1934
- .all(spec.sinceExpr);
1935
- const byBackendPeriod = db
1936
- .prepare(`SELECT ${spec.bucketExpr} as period,
1937
- ${backendExpr} as backend,
1938
- SUM(cost_usd) as total_cost,
1939
- COUNT(*) as session_count
1940
- FROM agent_actions
1941
- WHERE started_at > datetime('now', ?)
1942
- AND cost_usd IS NOT NULL
1943
- GROUP BY 1, 2
1944
- ORDER BY period DESC, backend ASC`)
1945
- .all(spec.sinceExpr);
1946
- // Today's total (timezone-aware agent day, executed sessions only).
1947
- // datetime(started_at) normalizes mixed ISO-8601 / SQL formats — same
1948
- // rationale as the /events ORDER BY fix above.
1949
- const bounds = getAgentDayBoundsUtc(config.timezone, config.dayBoundaryHour);
1950
- const today = db
1951
- .prepare(`SELECT COALESCE(SUM(cost_usd), 0) as cost,
1952
- COUNT(*) as sessions
1953
- FROM agent_actions
1954
- WHERE datetime(started_at) >= ? AND datetime(started_at) < ?
1955
- AND cost_usd IS NOT NULL`)
1956
- .get(bounds.start, bounds.end);
1957
- return c.json({
1958
- period,
1959
- today: { costUsd: today.cost, sessions: today.sessions },
1960
- byPeriod,
1961
- byModel,
1962
- byEventType,
1963
- byBackend,
1964
- byBackendPeriod,
1965
- });
1966
- });
1967
- // ── Approvals API ──
1968
- /** GET /approvals — list pending approval requests */
1969
- app.get("/approvals", (c) => {
1970
- const rows = db
1971
- .prepare(`SELECT id, scheduled_for, task_type, task_description,
1972
- task_context, model, status, created_at
1973
- FROM agent_schedule
1974
- WHERE status = 'pending' AND task_type = 'approval'
1975
- ORDER BY created_at DESC`)
1976
- .all();
1977
- return c.json({ approvals: rows });
1978
- });
1979
- /** POST /approvals/:id/approve — approve a pending request */
1980
- app.post("/approvals/:id/approve", (c) => {
1981
- const id = Number(c.req.param("id"));
1982
- const result = db
1983
- .prepare("UPDATE agent_schedule SET status = 'pending', task_type = 'approved_task' WHERE id = ? AND status = 'pending' AND task_type = 'approval'")
1984
- .run(id);
1985
- if (result.changes === 0) {
1986
- return c.json({ error: "approval not found or already processed" }, 404);
1987
- }
1988
- return c.json({ status: "approved", id });
1989
- });
1990
- /** POST /approvals/:id/deny — deny a pending request */
1991
- app.post("/approvals/:id/deny", (c) => {
1992
- const id = Number(c.req.param("id"));
1993
- const result = db
1994
- .prepare("UPDATE agent_schedule SET status = 'skipped' WHERE id = ? AND status = 'pending' AND task_type = 'approval'")
1995
- .run(id);
1996
- if (result.changes === 0) {
1997
- return c.json({ error: "approval not found or already processed" }, 404);
1998
- }
1999
- return c.json({ status: "denied", id });
2000
- });
2001
- // ── Schedule API ──
2002
- /** GET /schedule/next — next pending scheduled task */
2003
- app.get("/schedule/next", (c) => {
2004
- const row = db
2005
- .prepare(`SELECT id, scheduled_for, task_type, task_description
2006
- FROM agent_schedule
2007
- WHERE status = 'pending' AND scheduled_for > datetime('now')
2008
- ORDER BY scheduled_for ASC LIMIT 1`)
2009
- .get();
2010
- return c.json({ next: row ?? null });
2011
- });
2012
- /** GET /schedule/list — all scheduled tasks (paginated) */
2013
- app.get("/schedule/list", (c) => {
2014
- const page = Math.max(1, Number(c.req.query("page") ?? "1"));
2015
- const limit = Math.min(Number(c.req.query("limit") ?? "20"), 50);
2016
- const status = c.req.query("status");
2017
- const type = c.req.query("type");
2018
- const offset = (page - 1) * limit;
2019
- let where = "1=1";
2020
- const params = [];
2021
- if (status) {
2022
- where += " AND status = ?";
2023
- params.push(status);
2024
- }
2025
- if (type) {
2026
- where += " AND task_type = ?";
2027
- params.push(type);
2028
- }
2029
- const total = db
2030
- .prepare(`SELECT COUNT(*) as count FROM agent_schedule WHERE ${where}`)
2031
- .get(...params).count;
2032
- params.push(limit, offset);
2033
- const schedules = db
2034
- .prepare(`SELECT id, scheduled_for, task_type, task_description, task_prompt, model, status, task_context, created_at
2035
- FROM agent_schedule WHERE ${where}
2036
- ORDER BY scheduled_for DESC LIMIT ? OFFSET ?`)
2037
- .all(...params);
2038
- return c.json({
2039
- schedules,
2040
- pagination: { page, limit, total, totalPages: Math.ceil(total / limit) },
2041
- });
2042
- });
2043
- // ── Search API ──
2044
- /** GET /search?q= — full-text search via FTS5 */
2045
- app.get("/search", (c) => {
2046
- const q = c.req.query("q");
2047
- if (!q || q.length < 2)
2048
- return c.json({ error: "query too short" }, 400);
2049
- if (q.length > 200)
2050
- return c.json({ error: "query too long" }, 400);
2051
- const limit = Math.min(Number(c.req.query("limit") ?? "20"), 50);
2052
- // Sanitize: wrap each word in double-quotes to disable FTS5 operators (NEAR, NOT, OR, etc.)
2053
- const safeQuery = q
2054
- .replace(/[^\w\s\u3000-\u9FFF\uF900-\uFAFF]/g, " ") // strip punctuation except CJK
2055
- .split(/\s+/)
2056
- .filter(Boolean)
2057
- .map((w) => `"${w}"`)
2058
- .join(" ");
2059
- if (!safeQuery)
2060
- return c.json({ actions: [], messages: [] });
2061
- let actions = [];
2062
- let messages = [];
2063
- try {
2064
- actions = db
2065
- .prepare(`SELECT a.id, a.action_type, a.started_at,
2066
- highlight(fts_actions, 1, '<mark>', '</mark>') as snippet
2067
- FROM fts_actions JOIN agent_actions a ON a.id = fts_actions.rowid
2068
- WHERE fts_actions MATCH ? ORDER BY rank LIMIT ?`)
2069
- .all(safeQuery, limit);
2070
- }
2071
- catch {
2072
- // FTS table may not exist yet
2073
- }
2074
- try {
2075
- messages = db
2076
- .prepare(`SELECT m.id, m.role, m.timestamp, m.session_id,
2077
- highlight(fts_messages, 0, '<mark>', '</mark>') as snippet
2078
- FROM fts_messages JOIN messages m ON m.id = fts_messages.rowid
2079
- WHERE fts_messages MATCH ? ORDER BY rank LIMIT ?`)
2080
- .all(safeQuery, limit);
2081
- }
2082
- catch {
2083
- // FTS table may not exist yet
2084
- }
2085
- return c.json({ actions, messages });
2086
- });
2087
- // ── Snapshots API ──
2088
- /** GET /snapshots/content/:id — single snapshot content */
2089
- app.get("/snapshots/content/:id", (c) => {
2090
- const id = Number(c.req.param("id"));
2091
- if (!Number.isSafeInteger(id) || id <= 0) {
2092
- return c.json({ error: "invalid id" }, 400);
2093
- }
2094
- const row = db
2095
- .prepare("SELECT id, file_path, content, trigger, created_at FROM md_file_snapshots WHERE id = ?")
2096
- .get(id);
2097
- if (!row)
2098
- return c.json({ error: "not_found" }, 404);
2099
- return c.json(row);
2100
- });
2101
- /** GET /snapshots/* — snapshot history for a context file */
2102
- app.get("/snapshots/*", (c) => {
2103
- const filePath = c.req.path.replace("/api/snapshots/", "");
2104
- // Validate: reject path traversal and unsafe characters
2105
- if (!filePath || /\.\./.test(filePath) || !/^[\w./-]+$/.test(filePath)) {
2106
- return c.json({ error: "invalid file path" }, 400);
2107
- }
2108
- const limit = Math.min(Number(c.req.query("limit") ?? "20"), 50);
2109
- const rows = db
2110
- .prepare(`SELECT id, file_path, trigger, session_id, created_at
2111
- FROM md_file_snapshots WHERE file_path = ?
2112
- ORDER BY created_at DESC LIMIT ?`)
2113
- .all(filePath, limit);
2114
- return c.json({ snapshots: rows });
2115
- });
2116
- // ── Notifications API ──
2117
- /** GET /notifications — notification history (paginated) */
2118
- app.get("/notifications", (c) => {
2119
- const page = Math.max(1, Number(c.req.query("page") ?? "1"));
2120
- const limit = Math.min(Number(c.req.query("limit") ?? "50"), 100);
2121
- const status = c.req.query("status");
2122
- const priority = c.req.query("priority");
2123
- const offset = (page - 1) * limit;
2124
- let where = "1=1";
2125
- const params = [];
2126
- if (status) {
2127
- where += " AND status = ?";
2128
- params.push(status);
2129
- }
2130
- if (priority) {
2131
- where += " AND priority = ?";
2132
- params.push(priority);
2133
- }
2134
- const total = db
2135
- .prepare(`SELECT COUNT(*) as count FROM notification_log WHERE ${where}`)
2136
- .get(...params).count;
2137
- params.push(limit, offset);
2138
- const notifications = db
2139
- .prepare(`SELECT
2140
- id,
2141
- dispatch_id,
2142
- content_summary AS message,
2143
- platform,
2144
- delivery_channel,
2145
- priority,
2146
- status,
2147
- user_reaction,
2148
- reacted_at,
2149
- created_at
2150
- FROM notification_log WHERE ${where}
2151
- ORDER BY created_at DESC LIMIT ? OFFSET ?`)
2152
- .all(...params);
2153
- return c.json({
2154
- notifications,
2155
- pagination: { page, limit, total, totalPages: Math.ceil(total / limit) },
2156
- });
2157
- });
2158
- return app;
2159
- }
2160
- //# sourceMappingURL=dashboard.js.map