@aitne/daemon 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1386) hide show
  1. package/LICENSE +21 -0
  2. package/dist/adapters/composite-dashboard-stream.d.ts +42 -0
  3. package/dist/adapters/composite-dashboard-stream.d.ts.map +1 -0
  4. package/dist/adapters/composite-dashboard-stream.js +49 -0
  5. package/dist/adapters/composite-dashboard-stream.js.map +1 -0
  6. package/dist/adapters/dashboard-adapter.d.ts +104 -0
  7. package/dist/adapters/dashboard-adapter.d.ts.map +1 -0
  8. package/dist/adapters/dashboard-adapter.js +216 -0
  9. package/dist/adapters/dashboard-adapter.js.map +1 -0
  10. package/dist/adapters/discord.d.ts +77 -0
  11. package/dist/adapters/discord.d.ts.map +1 -0
  12. package/dist/adapters/discord.js +339 -0
  13. package/dist/adapters/discord.js.map +1 -0
  14. package/dist/adapters/docs-qa-adapter.d.ts +123 -0
  15. package/dist/adapters/docs-qa-adapter.d.ts.map +1 -0
  16. package/dist/adapters/docs-qa-adapter.js +218 -0
  17. package/dist/adapters/docs-qa-adapter.js.map +1 -0
  18. package/dist/adapters/message-hub.d.ts +70 -0
  19. package/dist/adapters/message-hub.d.ts.map +1 -0
  20. package/dist/adapters/message-hub.js +359 -0
  21. package/dist/adapters/message-hub.js.map +1 -0
  22. package/dist/adapters/notification-manager.d.ts +99 -0
  23. package/dist/adapters/notification-manager.d.ts.map +1 -0
  24. package/dist/adapters/notification-manager.js +498 -0
  25. package/dist/adapters/notification-manager.js.map +1 -0
  26. package/dist/adapters/outbound-text.d.ts +28 -0
  27. package/dist/adapters/outbound-text.d.ts.map +1 -0
  28. package/dist/adapters/outbound-text.js +58 -0
  29. package/dist/adapters/outbound-text.js.map +1 -0
  30. package/dist/adapters/slack-adapter.d.ts +82 -0
  31. package/dist/adapters/slack-adapter.d.ts.map +1 -0
  32. package/dist/adapters/slack-adapter.js +359 -0
  33. package/dist/adapters/slack-adapter.js.map +1 -0
  34. package/dist/adapters/telegram-adapter.d.ts +107 -0
  35. package/dist/adapters/telegram-adapter.d.ts.map +1 -0
  36. package/dist/adapters/telegram-adapter.js +477 -0
  37. package/dist/adapters/telegram-adapter.js.map +1 -0
  38. package/dist/adapters/types.d.ts +92 -0
  39. package/dist/adapters/types.d.ts.map +1 -0
  40. package/dist/adapters/types.js +2 -0
  41. package/dist/adapters/types.js.map +1 -0
  42. package/dist/adapters/whatsapp-adapter.d.ts +213 -0
  43. package/dist/adapters/whatsapp-adapter.d.ts.map +1 -0
  44. package/dist/adapters/whatsapp-adapter.js +1216 -0
  45. package/dist/adapters/whatsapp-adapter.js.map +1 -0
  46. package/dist/api/chat-binding-query.d.ts +36 -0
  47. package/dist/api/chat-binding-query.d.ts.map +1 -0
  48. package/dist/api/chat-binding-query.js +63 -0
  49. package/dist/api/chat-binding-query.js.map +1 -0
  50. package/dist/api/chat-session-resume.d.ts +12 -0
  51. package/dist/api/chat-session-resume.d.ts.map +1 -0
  52. package/dist/api/chat-session-resume.js +21 -0
  53. package/dist/api/chat-session-resume.js.map +1 -0
  54. package/dist/api/delegated-proxy-helper.d.ts +33 -0
  55. package/dist/api/delegated-proxy-helper.d.ts.map +1 -0
  56. package/dist/api/delegated-proxy-helper.js +54 -0
  57. package/dist/api/delegated-proxy-helper.js.map +1 -0
  58. package/dist/api/directory-picker.d.ts +38 -0
  59. package/dist/api/directory-picker.d.ts.map +1 -0
  60. package/dist/api/directory-picker.js +278 -0
  61. package/dist/api/directory-picker.js.map +1 -0
  62. package/dist/api/env-writer.d.ts +25 -0
  63. package/dist/api/env-writer.d.ts.map +1 -0
  64. package/dist/api/env-writer.js +421 -0
  65. package/dist/api/env-writer.js.map +1 -0
  66. package/dist/api/integration-route-gate.d.ts +60 -0
  67. package/dist/api/integration-route-gate.d.ts.map +1 -0
  68. package/dist/api/integration-route-gate.js +83 -0
  69. package/dist/api/integration-route-gate.js.map +1 -0
  70. package/dist/api/json-body.d.ts +29 -0
  71. package/dist/api/json-body.d.ts.map +1 -0
  72. package/dist/api/json-body.js +87 -0
  73. package/dist/api/json-body.js.map +1 -0
  74. package/dist/api/routes/activity-sources.d.ts +20 -0
  75. package/dist/api/routes/activity-sources.d.ts.map +1 -0
  76. package/dist/api/routes/activity-sources.js +18 -0
  77. package/dist/api/routes/activity-sources.js.map +1 -0
  78. package/dist/api/routes/agent.d.ts +4 -0
  79. package/dist/api/routes/agent.d.ts.map +1 -0
  80. package/dist/api/routes/agent.js +619 -0
  81. package/dist/api/routes/agent.js.map +1 -0
  82. package/dist/api/routes/apple-calendar.d.ts +31 -0
  83. package/dist/api/routes/apple-calendar.d.ts.map +1 -0
  84. package/dist/api/routes/apple-calendar.js +310 -0
  85. package/dist/api/routes/apple-calendar.js.map +1 -0
  86. package/dist/api/routes/attachments.d.ts +36 -0
  87. package/dist/api/routes/attachments.d.ts.map +1 -0
  88. package/dist/api/routes/attachments.js +305 -0
  89. package/dist/api/routes/attachments.js.map +1 -0
  90. package/dist/api/routes/backends.d.ts +4 -0
  91. package/dist/api/routes/backends.d.ts.map +1 -0
  92. package/dist/api/routes/backends.js +1132 -0
  93. package/dist/api/routes/backends.js.map +1 -0
  94. package/dist/api/routes/books.d.ts +63 -0
  95. package/dist/api/routes/books.d.ts.map +1 -0
  96. package/dist/api/routes/books.js +467 -0
  97. package/dist/api/routes/books.js.map +1 -0
  98. package/dist/api/routes/calendar.d.ts +36 -0
  99. package/dist/api/routes/calendar.d.ts.map +1 -0
  100. package/dist/api/routes/calendar.js +351 -0
  101. package/dist/api/routes/calendar.js.map +1 -0
  102. package/dist/api/routes/commands.d.ts +4 -0
  103. package/dist/api/routes/commands.d.ts.map +1 -0
  104. package/dist/api/routes/commands.js +251 -0
  105. package/dist/api/routes/commands.js.map +1 -0
  106. package/dist/api/routes/context.d.ts +57 -0
  107. package/dist/api/routes/context.d.ts.map +1 -0
  108. package/dist/api/routes/context.js +1765 -0
  109. package/dist/api/routes/context.js.map +1 -0
  110. package/dist/api/routes/dashboard.d.ts +29 -0
  111. package/dist/api/routes/dashboard.d.ts.map +1 -0
  112. package/dist/api/routes/dashboard.js +2062 -0
  113. package/dist/api/routes/dashboard.js.map +1 -0
  114. package/dist/api/routes/delegated-sync.d.ts +4 -0
  115. package/dist/api/routes/delegated-sync.d.ts.map +1 -0
  116. package/dist/api/routes/delegated-sync.js +192 -0
  117. package/dist/api/routes/delegated-sync.js.map +1 -0
  118. package/dist/api/routes/delegated.d.ts +42 -0
  119. package/dist/api/routes/delegated.d.ts.map +1 -0
  120. package/dist/api/routes/delegated.js +250 -0
  121. package/dist/api/routes/delegated.js.map +1 -0
  122. package/dist/api/routes/docs.d.ts +34 -0
  123. package/dist/api/routes/docs.d.ts.map +1 -0
  124. package/dist/api/routes/docs.js +580 -0
  125. package/dist/api/routes/docs.js.map +1 -0
  126. package/dist/api/routes/entities.d.ts +9 -0
  127. package/dist/api/routes/entities.d.ts.map +1 -0
  128. package/dist/api/routes/entities.js +176 -0
  129. package/dist/api/routes/entities.js.map +1 -0
  130. package/dist/api/routes/git-accounts.d.ts +23 -0
  131. package/dist/api/routes/git-accounts.d.ts.map +1 -0
  132. package/dist/api/routes/git-accounts.js +227 -0
  133. package/dist/api/routes/git-accounts.js.map +1 -0
  134. package/dist/api/routes/git-templates.d.ts +50 -0
  135. package/dist/api/routes/git-templates.d.ts.map +1 -0
  136. package/dist/api/routes/git-templates.js +276 -0
  137. package/dist/api/routes/git-templates.js.map +1 -0
  138. package/dist/api/routes/git.d.ts +34 -0
  139. package/dist/api/routes/git.d.ts.map +1 -0
  140. package/dist/api/routes/git.js +126 -0
  141. package/dist/api/routes/git.js.map +1 -0
  142. package/dist/api/routes/github.d.ts +34 -0
  143. package/dist/api/routes/github.d.ts.map +1 -0
  144. package/dist/api/routes/github.js +465 -0
  145. package/dist/api/routes/github.js.map +1 -0
  146. package/dist/api/routes/health.d.ts +4 -0
  147. package/dist/api/routes/health.d.ts.map +1 -0
  148. package/dist/api/routes/health.js +257 -0
  149. package/dist/api/routes/health.js.map +1 -0
  150. package/dist/api/routes/integrations-reconcile.d.ts +33 -0
  151. package/dist/api/routes/integrations-reconcile.d.ts.map +1 -0
  152. package/dist/api/routes/integrations-reconcile.js +463 -0
  153. package/dist/api/routes/integrations-reconcile.js.map +1 -0
  154. package/dist/api/routes/integrations.d.ts +19 -0
  155. package/dist/api/routes/integrations.d.ts.map +1 -0
  156. package/dist/api/routes/integrations.js +1384 -0
  157. package/dist/api/routes/integrations.js.map +1 -0
  158. package/dist/api/routes/knowledge.d.ts +4 -0
  159. package/dist/api/routes/knowledge.d.ts.map +1 -0
  160. package/dist/api/routes/knowledge.js +224 -0
  161. package/dist/api/routes/knowledge.js.map +1 -0
  162. package/dist/api/routes/mail.d.ts +39 -0
  163. package/dist/api/routes/mail.d.ts.map +1 -0
  164. package/dist/api/routes/mail.js +1406 -0
  165. package/dist/api/routes/mail.js.map +1 -0
  166. package/dist/api/routes/managed-tasks.d.ts +48 -0
  167. package/dist/api/routes/managed-tasks.d.ts.map +1 -0
  168. package/dist/api/routes/managed-tasks.js +844 -0
  169. package/dist/api/routes/managed-tasks.js.map +1 -0
  170. package/dist/api/routes/mcp.d.ts +50 -0
  171. package/dist/api/routes/mcp.d.ts.map +1 -0
  172. package/dist/api/routes/mcp.js +470 -0
  173. package/dist/api/routes/mcp.js.map +1 -0
  174. package/dist/api/routes/metrics.d.ts +13 -0
  175. package/dist/api/routes/metrics.d.ts.map +1 -0
  176. package/dist/api/routes/metrics.js +117 -0
  177. package/dist/api/routes/metrics.js.map +1 -0
  178. package/dist/api/routes/notion.d.ts +35 -0
  179. package/dist/api/routes/notion.d.ts.map +1 -0
  180. package/dist/api/routes/notion.js +442 -0
  181. package/dist/api/routes/notion.js.map +1 -0
  182. package/dist/api/routes/observations.d.ts +4 -0
  183. package/dist/api/routes/observations.d.ts.map +1 -0
  184. package/dist/api/routes/observations.js +177 -0
  185. package/dist/api/routes/observations.js.map +1 -0
  186. package/dist/api/routes/obsidian.d.ts +16 -0
  187. package/dist/api/routes/obsidian.d.ts.map +1 -0
  188. package/dist/api/routes/obsidian.js +321 -0
  189. package/dist/api/routes/obsidian.js.map +1 -0
  190. package/dist/api/routes/profile-questions.d.ts +17 -0
  191. package/dist/api/routes/profile-questions.d.ts.map +1 -0
  192. package/dist/api/routes/profile-questions.js +115 -0
  193. package/dist/api/routes/profile-questions.js.map +1 -0
  194. package/dist/api/routes/receipts.d.ts +4 -0
  195. package/dist/api/routes/receipts.d.ts.map +1 -0
  196. package/dist/api/routes/receipts.js +155 -0
  197. package/dist/api/routes/receipts.js.map +1 -0
  198. package/dist/api/routes/recurring-schedules.d.ts +4 -0
  199. package/dist/api/routes/recurring-schedules.d.ts.map +1 -0
  200. package/dist/api/routes/recurring-schedules.js +137 -0
  201. package/dist/api/routes/recurring-schedules.js.map +1 -0
  202. package/dist/api/routes/repositories.d.ts +40 -0
  203. package/dist/api/routes/repositories.d.ts.map +1 -0
  204. package/dist/api/routes/repositories.js +857 -0
  205. package/dist/api/routes/repositories.js.map +1 -0
  206. package/dist/api/routes/setup-migrate.d.ts +74 -0
  207. package/dist/api/routes/setup-migrate.d.ts.map +1 -0
  208. package/dist/api/routes/setup-migrate.js +944 -0
  209. package/dist/api/routes/setup-migrate.js.map +1 -0
  210. package/dist/api/routes/setup.d.ts +4 -0
  211. package/dist/api/routes/setup.d.ts.map +1 -0
  212. package/dist/api/routes/setup.js +443 -0
  213. package/dist/api/routes/setup.js.map +1 -0
  214. package/dist/api/routes/skill-curation.d.ts +5 -0
  215. package/dist/api/routes/skill-curation.d.ts.map +1 -0
  216. package/dist/api/routes/skill-curation.js +728 -0
  217. package/dist/api/routes/skill-curation.js.map +1 -0
  218. package/dist/api/routes/skills.d.ts +52 -0
  219. package/dist/api/routes/skills.d.ts.map +1 -0
  220. package/dist/api/routes/skills.js +429 -0
  221. package/dist/api/routes/skills.js.map +1 -0
  222. package/dist/api/routes/sot-bindings.d.ts +20 -0
  223. package/dist/api/routes/sot-bindings.d.ts.map +1 -0
  224. package/dist/api/routes/sot-bindings.js +163 -0
  225. package/dist/api/routes/sot-bindings.js.map +1 -0
  226. package/dist/api/routes/sse.d.ts +86 -0
  227. package/dist/api/routes/sse.d.ts.map +1 -0
  228. package/dist/api/routes/sse.js +378 -0
  229. package/dist/api/routes/sse.js.map +1 -0
  230. package/dist/api/routes/system.d.ts +4 -0
  231. package/dist/api/routes/system.d.ts.map +1 -0
  232. package/dist/api/routes/system.js +207 -0
  233. package/dist/api/routes/system.js.map +1 -0
  234. package/dist/api/routes/task-flows.d.ts +30 -0
  235. package/dist/api/routes/task-flows.d.ts.map +1 -0
  236. package/dist/api/routes/task-flows.js +155 -0
  237. package/dist/api/routes/task-flows.js.map +1 -0
  238. package/dist/api/routes/travel-bookings.d.ts +4 -0
  239. package/dist/api/routes/travel-bookings.d.ts.map +1 -0
  240. package/dist/api/routes/travel-bookings.js +142 -0
  241. package/dist/api/routes/travel-bookings.js.map +1 -0
  242. package/dist/api/routes/travel-time.d.ts +8 -0
  243. package/dist/api/routes/travel-time.d.ts.map +1 -0
  244. package/dist/api/routes/travel-time.js +87 -0
  245. package/dist/api/routes/travel-time.js.map +1 -0
  246. package/dist/api/routes/triggers.d.ts +4 -0
  247. package/dist/api/routes/triggers.d.ts.map +1 -0
  248. package/dist/api/routes/triggers.js +101 -0
  249. package/dist/api/routes/triggers.js.map +1 -0
  250. package/dist/api/routes/voice.d.ts +48 -0
  251. package/dist/api/routes/voice.d.ts.map +1 -0
  252. package/dist/api/routes/voice.js +232 -0
  253. package/dist/api/routes/voice.js.map +1 -0
  254. package/dist/api/server.d.ts +428 -0
  255. package/dist/api/server.d.ts.map +1 -0
  256. package/dist/api/server.js +558 -0
  257. package/dist/api/server.js.map +1 -0
  258. package/dist/config.d.ts +136 -0
  259. package/dist/config.d.ts.map +1 -0
  260. package/dist/config.js +699 -0
  261. package/dist/config.js.map +1 -0
  262. package/dist/core/agent-core.d.ts +517 -0
  263. package/dist/core/agent-core.d.ts.map +1 -0
  264. package/dist/core/agent-core.js +102 -0
  265. package/dist/core/agent-core.js.map +1 -0
  266. package/dist/core/alerts.d.ts +86 -0
  267. package/dist/core/alerts.d.ts.map +1 -0
  268. package/dist/core/alerts.js +304 -0
  269. package/dist/core/alerts.js.map +1 -0
  270. package/dist/core/atomic-write.d.ts +51 -0
  271. package/dist/core/atomic-write.d.ts.map +1 -0
  272. package/dist/core/atomic-write.js +135 -0
  273. package/dist/core/atomic-write.js.map +1 -0
  274. package/dist/core/backends/api-key-probe.d.ts +40 -0
  275. package/dist/core/backends/api-key-probe.d.ts.map +1 -0
  276. package/dist/core/backends/api-key-probe.js +116 -0
  277. package/dist/core/backends/api-key-probe.js.map +1 -0
  278. package/dist/core/backends/auth-health-monitor.d.ts +373 -0
  279. package/dist/core/backends/auth-health-monitor.d.ts.map +1 -0
  280. package/dist/core/backends/auth-health-monitor.js +950 -0
  281. package/dist/core/backends/auth-health-monitor.js.map +1 -0
  282. package/dist/core/backends/auth-recovery.d.ts +263 -0
  283. package/dist/core/backends/auth-recovery.d.ts.map +1 -0
  284. package/dist/core/backends/auth-recovery.js +1086 -0
  285. package/dist/core/backends/auth-recovery.js.map +1 -0
  286. package/dist/core/backends/auth-telemetry.d.ts +81 -0
  287. package/dist/core/backends/auth-telemetry.d.ts.map +1 -0
  288. package/dist/core/backends/auth-telemetry.js +108 -0
  289. package/dist/core/backends/auth-telemetry.js.map +1 -0
  290. package/dist/core/backends/backend-router.d.ts +272 -0
  291. package/dist/core/backends/backend-router.d.ts.map +1 -0
  292. package/dist/core/backends/backend-router.js +759 -0
  293. package/dist/core/backends/backend-router.js.map +1 -0
  294. package/dist/core/backends/claude-code-core.d.ts +299 -0
  295. package/dist/core/backends/claude-code-core.d.ts.map +1 -0
  296. package/dist/core/backends/claude-code-core.js +2541 -0
  297. package/dist/core/backends/claude-code-core.js.map +1 -0
  298. package/dist/core/backends/claude-credentials-store.d.ts +83 -0
  299. package/dist/core/backends/claude-credentials-store.d.ts.map +1 -0
  300. package/dist/core/backends/claude-credentials-store.js +243 -0
  301. package/dist/core/backends/claude-credentials-store.js.map +1 -0
  302. package/dist/core/backends/cli-utils.d.ts +95 -0
  303. package/dist/core/backends/cli-utils.d.ts.map +1 -0
  304. package/dist/core/backends/cli-utils.js +464 -0
  305. package/dist/core/backends/cli-utils.js.map +1 -0
  306. package/dist/core/backends/codex-core.d.ts +127 -0
  307. package/dist/core/backends/codex-core.d.ts.map +1 -0
  308. package/dist/core/backends/codex-core.js +1693 -0
  309. package/dist/core/backends/codex-core.js.map +1 -0
  310. package/dist/core/backends/gemini-cli-core.d.ts +367 -0
  311. package/dist/core/backends/gemini-cli-core.d.ts.map +1 -0
  312. package/dist/core/backends/gemini-cli-core.js +2331 -0
  313. package/dist/core/backends/gemini-cli-core.js.map +1 -0
  314. package/dist/core/backends/idle-watchdog.d.ts +77 -0
  315. package/dist/core/backends/idle-watchdog.d.ts.map +1 -0
  316. package/dist/core/backends/idle-watchdog.js +94 -0
  317. package/dist/core/backends/idle-watchdog.js.map +1 -0
  318. package/dist/core/backends/install-methods.d.ts +93 -0
  319. package/dist/core/backends/install-methods.d.ts.map +1 -0
  320. package/dist/core/backends/install-methods.js +267 -0
  321. package/dist/core/backends/install-methods.js.map +1 -0
  322. package/dist/core/backends/model-registry.d.ts +58 -0
  323. package/dist/core/backends/model-registry.d.ts.map +1 -0
  324. package/dist/core/backends/model-registry.js +539 -0
  325. package/dist/core/backends/model-registry.js.map +1 -0
  326. package/dist/core/backends/plan-presets.d.ts +123 -0
  327. package/dist/core/backends/plan-presets.d.ts.map +1 -0
  328. package/dist/core/backends/plan-presets.js +235 -0
  329. package/dist/core/backends/plan-presets.js.map +1 -0
  330. package/dist/core/backends/price-fetcher.d.ts +48 -0
  331. package/dist/core/backends/price-fetcher.d.ts.map +1 -0
  332. package/dist/core/backends/price-fetcher.js +248 -0
  333. package/dist/core/backends/price-fetcher.js.map +1 -0
  334. package/dist/core/backends/process-config-cascade.d.ts +68 -0
  335. package/dist/core/backends/process-config-cascade.d.ts.map +1 -0
  336. package/dist/core/backends/process-config-cascade.js +173 -0
  337. package/dist/core/backends/process-config-cascade.js.map +1 -0
  338. package/dist/core/backends/prompt-utils.d.ts +6 -0
  339. package/dist/core/backends/prompt-utils.d.ts.map +1 -0
  340. package/dist/core/backends/prompt-utils.js +80 -0
  341. package/dist/core/backends/prompt-utils.js.map +1 -0
  342. package/dist/core/backends/proxy-model-registry.d.ts +110 -0
  343. package/dist/core/backends/proxy-model-registry.d.ts.map +1 -0
  344. package/dist/core/backends/proxy-model-registry.js +195 -0
  345. package/dist/core/backends/proxy-model-registry.js.map +1 -0
  346. package/dist/core/backends/silent-api-error-detector.d.ts +31 -0
  347. package/dist/core/backends/silent-api-error-detector.d.ts.map +1 -0
  348. package/dist/core/backends/silent-api-error-detector.js +44 -0
  349. package/dist/core/backends/silent-api-error-detector.js.map +1 -0
  350. package/dist/core/bang-commands/commands-cost.d.ts +13 -0
  351. package/dist/core/bang-commands/commands-cost.d.ts.map +1 -0
  352. package/dist/core/bang-commands/commands-cost.js +91 -0
  353. package/dist/core/bang-commands/commands-cost.js.map +1 -0
  354. package/dist/core/bang-commands/commands-report.d.ts +18 -0
  355. package/dist/core/bang-commands/commands-report.d.ts.map +1 -0
  356. package/dist/core/bang-commands/commands-report.js +105 -0
  357. package/dist/core/bang-commands/commands-report.js.map +1 -0
  358. package/dist/core/bang-commands/commands-stop-start.d.ts +4 -0
  359. package/dist/core/bang-commands/commands-stop-start.d.ts.map +1 -0
  360. package/dist/core/bang-commands/commands-stop-start.js +88 -0
  361. package/dist/core/bang-commands/commands-stop-start.js.map +1 -0
  362. package/dist/core/bang-commands/format-utils.d.ts +34 -0
  363. package/dist/core/bang-commands/format-utils.d.ts.map +1 -0
  364. package/dist/core/bang-commands/format-utils.js +118 -0
  365. package/dist/core/bang-commands/format-utils.js.map +1 -0
  366. package/dist/core/bang-commands/index.d.ts +20 -0
  367. package/dist/core/bang-commands/index.d.ts.map +1 -0
  368. package/dist/core/bang-commands/index.js +31 -0
  369. package/dist/core/bang-commands/index.js.map +1 -0
  370. package/dist/core/bang-commands/registry.d.ts +72 -0
  371. package/dist/core/bang-commands/registry.d.ts.map +1 -0
  372. package/dist/core/bang-commands/registry.js +174 -0
  373. package/dist/core/bang-commands/registry.js.map +1 -0
  374. package/dist/core/bang-commands/user-commands.d.ts +86 -0
  375. package/dist/core/bang-commands/user-commands.d.ts.map +1 -0
  376. package/dist/core/bang-commands/user-commands.js +212 -0
  377. package/dist/core/bang-commands/user-commands.js.map +1 -0
  378. package/dist/core/channel-timeline.d.ts +28 -0
  379. package/dist/core/channel-timeline.d.ts.map +1 -0
  380. package/dist/core/channel-timeline.js +117 -0
  381. package/dist/core/channel-timeline.js.map +1 -0
  382. package/dist/core/character-block.d.ts +37 -0
  383. package/dist/core/character-block.d.ts.map +1 -0
  384. package/dist/core/character-block.js +162 -0
  385. package/dist/core/character-block.js.map +1 -0
  386. package/dist/core/context/activity-sources.d.ts +37 -0
  387. package/dist/core/context/activity-sources.d.ts.map +1 -0
  388. package/dist/core/context/activity-sources.js +69 -0
  389. package/dist/core/context/activity-sources.js.map +1 -0
  390. package/dist/core/context/activity-view-reconciler.d.ts +110 -0
  391. package/dist/core/context/activity-view-reconciler.d.ts.map +1 -0
  392. package/dist/core/context/activity-view-reconciler.js +252 -0
  393. package/dist/core/context/activity-view-reconciler.js.map +1 -0
  394. package/dist/core/context/activity-view-runner.d.ts +38 -0
  395. package/dist/core/context/activity-view-runner.d.ts.map +1 -0
  396. package/dist/core/context/activity-view-runner.js +402 -0
  397. package/dist/core/context/activity-view-runner.js.map +1 -0
  398. package/dist/core/context/default-schedules-reconciler.d.ts +85 -0
  399. package/dist/core/context/default-schedules-reconciler.d.ts.map +1 -0
  400. package/dist/core/context/default-schedules-reconciler.js +153 -0
  401. package/dist/core/context/default-schedules-reconciler.js.map +1 -0
  402. package/dist/core/context/default-schedules-runner.d.ts +40 -0
  403. package/dist/core/context/default-schedules-runner.d.ts.map +1 -0
  404. package/dist/core/context/default-schedules-runner.js +233 -0
  405. package/dist/core/context/default-schedules-runner.js.map +1 -0
  406. package/dist/core/context/domain-index-reconciler.d.ts +81 -0
  407. package/dist/core/context/domain-index-reconciler.d.ts.map +1 -0
  408. package/dist/core/context/domain-index-reconciler.js +199 -0
  409. package/dist/core/context/domain-index-reconciler.js.map +1 -0
  410. package/dist/core/context/domain-index-runner.d.ts +35 -0
  411. package/dist/core/context/domain-index-runner.d.ts.map +1 -0
  412. package/dist/core/context/domain-index-runner.js +223 -0
  413. package/dist/core/context/domain-index-runner.js.map +1 -0
  414. package/dist/core/context/entity-mirror.d.ts +227 -0
  415. package/dist/core/context/entity-mirror.d.ts.map +1 -0
  416. package/dist/core/context/entity-mirror.js +629 -0
  417. package/dist/core/context/entity-mirror.js.map +1 -0
  418. package/dist/core/context/entity-source-rename.d.ts +61 -0
  419. package/dist/core/context/entity-source-rename.d.ts.map +1 -0
  420. package/dist/core/context/entity-source-rename.js +237 -0
  421. package/dist/core/context/entity-source-rename.js.map +1 -0
  422. package/dist/core/context/index-reconciler.d.ts +61 -0
  423. package/dist/core/context/index-reconciler.d.ts.map +1 -0
  424. package/dist/core/context/index-reconciler.js +329 -0
  425. package/dist/core/context/index-reconciler.js.map +1 -0
  426. package/dist/core/context/policy-index-reconciler.d.ts +102 -0
  427. package/dist/core/context/policy-index-reconciler.d.ts.map +1 -0
  428. package/dist/core/context/policy-index-reconciler.js +202 -0
  429. package/dist/core/context/policy-index-reconciler.js.map +1 -0
  430. package/dist/core/context/policy-index-runner.d.ts +66 -0
  431. package/dist/core/context/policy-index-runner.d.ts.map +1 -0
  432. package/dist/core/context/policy-index-runner.js +406 -0
  433. package/dist/core/context/policy-index-runner.js.map +1 -0
  434. package/dist/core/context/reconciler-runner.d.ts +44 -0
  435. package/dist/core/context/reconciler-runner.d.ts.map +1 -0
  436. package/dist/core/context/reconciler-runner.js +273 -0
  437. package/dist/core/context/reconciler-runner.js.map +1 -0
  438. package/dist/core/context-builder.d.ts +115 -0
  439. package/dist/core/context-builder.d.ts.map +1 -0
  440. package/dist/core/context-builder.js +1148 -0
  441. package/dist/core/context-builder.js.map +1 -0
  442. package/dist/core/context-frontmatter-backfill.d.ts +33 -0
  443. package/dist/core/context-frontmatter-backfill.d.ts.map +1 -0
  444. package/dist/core/context-frontmatter-backfill.js +111 -0
  445. package/dist/core/context-frontmatter-backfill.js.map +1 -0
  446. package/dist/core/context-frontmatter.d.ts +13 -0
  447. package/dist/core/context-frontmatter.d.ts.map +1 -0
  448. package/dist/core/context-frontmatter.js +325 -0
  449. package/dist/core/context-frontmatter.js.map +1 -0
  450. package/dist/core/context-health.d.ts +51 -0
  451. package/dist/core/context-health.d.ts.map +1 -0
  452. package/dist/core/context-health.js +304 -0
  453. package/dist/core/context-health.js.map +1 -0
  454. package/dist/core/context-paths.d.ts +183 -0
  455. package/dist/core/context-paths.d.ts.map +1 -0
  456. package/dist/core/context-paths.js +241 -0
  457. package/dist/core/context-paths.js.map +1 -0
  458. package/dist/core/context-staleness.d.ts +45 -0
  459. package/dist/core/context-staleness.d.ts.map +1 -0
  460. package/dist/core/context-staleness.js +88 -0
  461. package/dist/core/context-staleness.js.map +1 -0
  462. package/dist/core/custom-routine-scheduler.d.ts +151 -0
  463. package/dist/core/custom-routine-scheduler.d.ts.map +1 -0
  464. package/dist/core/custom-routine-scheduler.js +335 -0
  465. package/dist/core/custom-routine-scheduler.js.map +1 -0
  466. package/dist/core/daemon-api-cli.d.ts +33 -0
  467. package/dist/core/daemon-api-cli.d.ts.map +1 -0
  468. package/dist/core/daemon-api-cli.js +614 -0
  469. package/dist/core/daemon-api-cli.js.map +1 -0
  470. package/dist/core/dashboard-session-cleanup.d.ts +39 -0
  471. package/dist/core/dashboard-session-cleanup.d.ts.map +1 -0
  472. package/dist/core/dashboard-session-cleanup.js +108 -0
  473. package/dist/core/dashboard-session-cleanup.js.map +1 -0
  474. package/dist/core/dashboard-session-controls.d.ts +41 -0
  475. package/dist/core/dashboard-session-controls.d.ts.map +1 -0
  476. package/dist/core/dashboard-session-controls.js +154 -0
  477. package/dist/core/dashboard-session-controls.js.map +1 -0
  478. package/dist/core/delegated-connector-health.d.ts +63 -0
  479. package/dist/core/delegated-connector-health.d.ts.map +1 -0
  480. package/dist/core/delegated-connector-health.js +157 -0
  481. package/dist/core/delegated-connector-health.js.map +1 -0
  482. package/dist/core/dispatcher.d.ts +999 -0
  483. package/dist/core/dispatcher.d.ts.map +1 -0
  484. package/dist/core/dispatcher.js +4378 -0
  485. package/dist/core/dispatcher.js.map +1 -0
  486. package/dist/core/dm-freshness-metrics.d.ts +73 -0
  487. package/dist/core/dm-freshness-metrics.d.ts.map +1 -0
  488. package/dist/core/dm-freshness-metrics.js +138 -0
  489. package/dist/core/dm-freshness-metrics.js.map +1 -0
  490. package/dist/core/docs/citation-validator.d.ts +73 -0
  491. package/dist/core/docs/citation-validator.d.ts.map +1 -0
  492. package/dist/core/docs/citation-validator.js +195 -0
  493. package/dist/core/docs/citation-validator.js.map +1 -0
  494. package/dist/core/docs/extract-terms.d.ts +78 -0
  495. package/dist/core/docs/extract-terms.d.ts.map +1 -0
  496. package/dist/core/docs/extract-terms.js +147 -0
  497. package/dist/core/docs/extract-terms.js.map +1 -0
  498. package/dist/core/docs/indexer.d.ts +104 -0
  499. package/dist/core/docs/indexer.d.ts.map +1 -0
  500. package/dist/core/docs/indexer.js +340 -0
  501. package/dist/core/docs/indexer.js.map +1 -0
  502. package/dist/core/drift-effects.d.ts +30 -0
  503. package/dist/core/drift-effects.d.ts.map +1 -0
  504. package/dist/core/drift-effects.js +384 -0
  505. package/dist/core/drift-effects.js.map +1 -0
  506. package/dist/core/event-bus.d.ts +56 -0
  507. package/dist/core/event-bus.d.ts.map +1 -0
  508. package/dist/core/event-bus.js +135 -0
  509. package/dist/core/event-bus.js.map +1 -0
  510. package/dist/core/git-project-docs.d.ts +77 -0
  511. package/dist/core/git-project-docs.d.ts.map +1 -0
  512. package/dist/core/git-project-docs.js +439 -0
  513. package/dist/core/git-project-docs.js.map +1 -0
  514. package/dist/core/health-monitor.d.ts +57 -0
  515. package/dist/core/health-monitor.d.ts.map +1 -0
  516. package/dist/core/health-monitor.js +137 -0
  517. package/dist/core/health-monitor.js.map +1 -0
  518. package/dist/core/heartbeat.d.ts +26 -0
  519. package/dist/core/heartbeat.d.ts.map +1 -0
  520. package/dist/core/heartbeat.js +48 -0
  521. package/dist/core/heartbeat.js.map +1 -0
  522. package/dist/core/integration-health.d.ts +49 -0
  523. package/dist/core/integration-health.d.ts.map +1 -0
  524. package/dist/core/integration-health.js +89 -0
  525. package/dist/core/integration-health.js.map +1 -0
  526. package/dist/core/integration-lifecycle.d.ts +79 -0
  527. package/dist/core/integration-lifecycle.d.ts.map +1 -0
  528. package/dist/core/integration-lifecycle.js +153 -0
  529. package/dist/core/integration-lifecycle.js.map +1 -0
  530. package/dist/core/integration-main-backend.d.ts +36 -0
  531. package/dist/core/integration-main-backend.d.ts.map +1 -0
  532. package/dist/core/integration-main-backend.js +59 -0
  533. package/dist/core/integration-main-backend.js.map +1 -0
  534. package/dist/core/integration-probe.d.ts +98 -0
  535. package/dist/core/integration-probe.d.ts.map +1 -0
  536. package/dist/core/integration-probe.js +152 -0
  537. package/dist/core/integration-probe.js.map +1 -0
  538. package/dist/core/management-md-write-lock.d.ts +68 -0
  539. package/dist/core/management-md-write-lock.d.ts.map +1 -0
  540. package/dist/core/management-md-write-lock.js +93 -0
  541. package/dist/core/management-md-write-lock.js.map +1 -0
  542. package/dist/core/management-md.d.ts +186 -0
  543. package/dist/core/management-md.d.ts.map +1 -0
  544. package/dist/core/management-md.js +652 -0
  545. package/dist/core/management-md.js.map +1 -0
  546. package/dist/core/management-registry.d.ts +245 -0
  547. package/dist/core/management-registry.d.ts.map +1 -0
  548. package/dist/core/management-registry.js +906 -0
  549. package/dist/core/management-registry.js.map +1 -0
  550. package/dist/core/management-telemetry.d.ts +100 -0
  551. package/dist/core/management-telemetry.d.ts.map +1 -0
  552. package/dist/core/management-telemetry.js +156 -0
  553. package/dist/core/management-telemetry.js.map +1 -0
  554. package/dist/core/message-recorder.d.ts +38 -0
  555. package/dist/core/message-recorder.d.ts.map +1 -0
  556. package/dist/core/message-recorder.js +88 -0
  557. package/dist/core/message-recorder.js.map +1 -0
  558. package/dist/core/metrics.d.ts +338 -0
  559. package/dist/core/metrics.d.ts.map +1 -0
  560. package/dist/core/metrics.js +747 -0
  561. package/dist/core/metrics.js.map +1 -0
  562. package/dist/core/migration-backup.d.ts +218 -0
  563. package/dist/core/migration-backup.d.ts.map +1 -0
  564. package/dist/core/migration-backup.js +934 -0
  565. package/dist/core/migration-backup.js.map +1 -0
  566. package/dist/core/overview-write-lock.d.ts +48 -0
  567. package/dist/core/overview-write-lock.d.ts.map +1 -0
  568. package/dist/core/overview-write-lock.js +56 -0
  569. package/dist/core/overview-write-lock.js.map +1 -0
  570. package/dist/core/path-compat.d.ts +22 -0
  571. package/dist/core/path-compat.d.ts.map +1 -0
  572. package/dist/core/path-compat.js +67 -0
  573. package/dist/core/path-compat.js.map +1 -0
  574. package/dist/core/path-rewrite.d.ts +58 -0
  575. package/dist/core/path-rewrite.d.ts.map +1 -0
  576. package/dist/core/path-rewrite.js +141 -0
  577. package/dist/core/path-rewrite.js.map +1 -0
  578. package/dist/core/policy-files.d.ts +108 -0
  579. package/dist/core/policy-files.d.ts.map +1 -0
  580. package/dist/core/policy-files.js +198 -0
  581. package/dist/core/policy-files.js.map +1 -0
  582. package/dist/core/profile-questions/seed.d.ts +44 -0
  583. package/dist/core/profile-questions/seed.d.ts.map +1 -0
  584. package/dist/core/profile-questions/seed.js +173 -0
  585. package/dist/core/profile-questions/seed.js.map +1 -0
  586. package/dist/core/profile-questions/slot-filled.d.ts +51 -0
  587. package/dist/core/profile-questions/slot-filled.d.ts.map +1 -0
  588. package/dist/core/profile-questions/slot-filled.js +118 -0
  589. package/dist/core/profile-questions/slot-filled.js.map +1 -0
  590. package/dist/core/prompts.d.ts +111 -0
  591. package/dist/core/prompts.d.ts.map +1 -0
  592. package/dist/core/prompts.js +267 -0
  593. package/dist/core/prompts.js.map +1 -0
  594. package/dist/core/quiet-hours-sync.d.ts +15 -0
  595. package/dist/core/quiet-hours-sync.d.ts.map +1 -0
  596. package/dist/core/quiet-hours-sync.js +51 -0
  597. package/dist/core/quiet-hours-sync.js.map +1 -0
  598. package/dist/core/read-sensitive-token-manager.d.ts +19 -0
  599. package/dist/core/read-sensitive-token-manager.d.ts.map +1 -0
  600. package/dist/core/read-sensitive-token-manager.js +29 -0
  601. package/dist/core/read-sensitive-token-manager.js.map +1 -0
  602. package/dist/core/recurrence.d.ts +24 -0
  603. package/dist/core/recurrence.d.ts.map +1 -0
  604. package/dist/core/recurrence.js +162 -0
  605. package/dist/core/recurrence.js.map +1 -0
  606. package/dist/core/reinstall.d.ts +107 -0
  607. package/dist/core/reinstall.d.ts.map +1 -0
  608. package/dist/core/reinstall.js +163 -0
  609. package/dist/core/reinstall.js.map +1 -0
  610. package/dist/core/release-assets.d.ts +106 -0
  611. package/dist/core/release-assets.d.ts.map +1 -0
  612. package/dist/core/release-assets.js +434 -0
  613. package/dist/core/release-assets.js.map +1 -0
  614. package/dist/core/repository-management-docs.d.ts +216 -0
  615. package/dist/core/repository-management-docs.d.ts.map +1 -0
  616. package/dist/core/repository-management-docs.js +855 -0
  617. package/dist/core/repository-management-docs.js.map +1 -0
  618. package/dist/core/retention.d.ts +164 -0
  619. package/dist/core/retention.d.ts.map +1 -0
  620. package/dist/core/retention.js +1008 -0
  621. package/dist/core/retention.js.map +1 -0
  622. package/dist/core/review-context.d.ts +48 -0
  623. package/dist/core/review-context.d.ts.map +1 -0
  624. package/dist/core/review-context.js +282 -0
  625. package/dist/core/review-context.js.map +1 -0
  626. package/dist/core/roadmap-horizon.d.ts +48 -0
  627. package/dist/core/roadmap-horizon.d.ts.map +1 -0
  628. package/dist/core/roadmap-horizon.js +213 -0
  629. package/dist/core/roadmap-horizon.js.map +1 -0
  630. package/dist/core/roadmap-ids.d.ts +57 -0
  631. package/dist/core/roadmap-ids.d.ts.map +1 -0
  632. package/dist/core/roadmap-ids.js +118 -0
  633. package/dist/core/roadmap-ids.js.map +1 -0
  634. package/dist/core/roadmap-merge.d.ts +7 -0
  635. package/dist/core/roadmap-merge.d.ts.map +1 -0
  636. package/dist/core/roadmap-merge.js +187 -0
  637. package/dist/core/roadmap-merge.js.map +1 -0
  638. package/dist/core/roadmap-refresh-triggers.d.ts +32 -0
  639. package/dist/core/roadmap-refresh-triggers.d.ts.map +1 -0
  640. package/dist/core/roadmap-refresh-triggers.js +51 -0
  641. package/dist/core/roadmap-refresh-triggers.js.map +1 -0
  642. package/dist/core/roadmap-truncate.d.ts +49 -0
  643. package/dist/core/roadmap-truncate.d.ts.map +1 -0
  644. package/dist/core/roadmap-truncate.js +152 -0
  645. package/dist/core/roadmap-truncate.js.map +1 -0
  646. package/dist/core/roadmap-validate.d.ts +31 -0
  647. package/dist/core/roadmap-validate.d.ts.map +1 -0
  648. package/dist/core/roadmap-validate.js +403 -0
  649. package/dist/core/roadmap-validate.js.map +1 -0
  650. package/dist/core/roadmap-write-lock.d.ts +53 -0
  651. package/dist/core/roadmap-write-lock.d.ts.map +1 -0
  652. package/dist/core/roadmap-write-lock.js +59 -0
  653. package/dist/core/roadmap-write-lock.js.map +1 -0
  654. package/dist/core/schedule-insert-helper.d.ts +46 -0
  655. package/dist/core/schedule-insert-helper.d.ts.map +1 -0
  656. package/dist/core/schedule-insert-helper.js +52 -0
  657. package/dist/core/schedule-insert-helper.js.map +1 -0
  658. package/dist/core/schedule-maintenance.d.ts +22 -0
  659. package/dist/core/schedule-maintenance.d.ts.map +1 -0
  660. package/dist/core/schedule-maintenance.js +57 -0
  661. package/dist/core/schedule-maintenance.js.map +1 -0
  662. package/dist/core/scheduler.d.ts +208 -0
  663. package/dist/core/scheduler.d.ts.map +1 -0
  664. package/dist/core/scheduler.js +896 -0
  665. package/dist/core/scheduler.js.map +1 -0
  666. package/dist/core/semaphore.d.ts +13 -0
  667. package/dist/core/semaphore.d.ts.map +1 -0
  668. package/dist/core/semaphore.js +31 -0
  669. package/dist/core/semaphore.js.map +1 -0
  670. package/dist/core/session-gate.d.ts +37 -0
  671. package/dist/core/session-gate.d.ts.map +1 -0
  672. package/dist/core/session-gate.js +69 -0
  673. package/dist/core/session-gate.js.map +1 -0
  674. package/dist/core/session-manager.d.ts +252 -0
  675. package/dist/core/session-manager.d.ts.map +1 -0
  676. package/dist/core/session-manager.js +716 -0
  677. package/dist/core/session-manager.js.map +1 -0
  678. package/dist/core/signal-detector.d.ts +97 -0
  679. package/dist/core/signal-detector.d.ts.map +1 -0
  680. package/dist/core/signal-detector.js +215 -0
  681. package/dist/core/signal-detector.js.map +1 -0
  682. package/dist/core/skeleton.d.ts +83 -0
  683. package/dist/core/skeleton.d.ts.map +1 -0
  684. package/dist/core/skeleton.js +255 -0
  685. package/dist/core/skeleton.js.map +1 -0
  686. package/dist/core/skill-curation/apply-proposal.d.ts +71 -0
  687. package/dist/core/skill-curation/apply-proposal.d.ts.map +1 -0
  688. package/dist/core/skill-curation/apply-proposal.js +175 -0
  689. package/dist/core/skill-curation/apply-proposal.js.map +1 -0
  690. package/dist/core/skill-curation/auto-revert.d.ts +43 -0
  691. package/dist/core/skill-curation/auto-revert.d.ts.map +1 -0
  692. package/dist/core/skill-curation/auto-revert.js +155 -0
  693. package/dist/core/skill-curation/auto-revert.js.map +1 -0
  694. package/dist/core/skill-curation/classify-diff.d.ts +27 -0
  695. package/dist/core/skill-curation/classify-diff.d.ts.map +1 -0
  696. package/dist/core/skill-curation/classify-diff.js +0 -0
  697. package/dist/core/skill-curation/classify-diff.js.map +1 -0
  698. package/dist/core/skill-curation/declarations.d.ts +32 -0
  699. package/dist/core/skill-curation/declarations.d.ts.map +1 -0
  700. package/dist/core/skill-curation/declarations.js +171 -0
  701. package/dist/core/skill-curation/declarations.js.map +1 -0
  702. package/dist/core/skill-curation/knowledge-map.d.ts +26 -0
  703. package/dist/core/skill-curation/knowledge-map.d.ts.map +1 -0
  704. package/dist/core/skill-curation/knowledge-map.js +154 -0
  705. package/dist/core/skill-curation/knowledge-map.js.map +1 -0
  706. package/dist/core/skill-curation/orphan-overlay.d.ts +35 -0
  707. package/dist/core/skill-curation/orphan-overlay.d.ts.map +1 -0
  708. package/dist/core/skill-curation/orphan-overlay.js +167 -0
  709. package/dist/core/skill-curation/orphan-overlay.js.map +1 -0
  710. package/dist/core/skill-curation/overlay-store.d.ts +41 -0
  711. package/dist/core/skill-curation/overlay-store.d.ts.map +1 -0
  712. package/dist/core/skill-curation/overlay-store.js +143 -0
  713. package/dist/core/skill-curation/overlay-store.js.map +1 -0
  714. package/dist/core/skill-curation/render/convention-notes.d.ts +4 -0
  715. package/dist/core/skill-curation/render/convention-notes.d.ts.map +1 -0
  716. package/dist/core/skill-curation/render/convention-notes.js +13 -0
  717. package/dist/core/skill-curation/render/convention-notes.js.map +1 -0
  718. package/dist/core/skill-curation/render/cross-references.d.ts +4 -0
  719. package/dist/core/skill-curation/render/cross-references.d.ts.map +1 -0
  720. package/dist/core/skill-curation/render/cross-references.js +10 -0
  721. package/dist/core/skill-curation/render/cross-references.js.map +1 -0
  722. package/dist/core/skill-curation/render/frontmatter-schema.d.ts +4 -0
  723. package/dist/core/skill-curation/render/frontmatter-schema.d.ts.map +1 -0
  724. package/dist/core/skill-curation/render/frontmatter-schema.js +25 -0
  725. package/dist/core/skill-curation/render/frontmatter-schema.js.map +1 -0
  726. package/dist/core/skill-curation/render/index.d.ts +5 -0
  727. package/dist/core/skill-curation/render/index.d.ts.map +1 -0
  728. package/dist/core/skill-curation/render/index.js +42 -0
  729. package/dist/core/skill-curation/render/index.js.map +1 -0
  730. package/dist/core/skill-curation/render/knowledge-layout.d.ts +4 -0
  731. package/dist/core/skill-curation/render/knowledge-layout.d.ts.map +1 -0
  732. package/dist/core/skill-curation/render/knowledge-layout.js +36 -0
  733. package/dist/core/skill-curation/render/knowledge-layout.js.map +1 -0
  734. package/dist/core/skill-curation/render/routing-table.d.ts +4 -0
  735. package/dist/core/skill-curation/render/routing-table.d.ts.map +1 -0
  736. package/dist/core/skill-curation/render/routing-table.js +37 -0
  737. package/dist/core/skill-curation/render/routing-table.js.map +1 -0
  738. package/dist/core/skill-curation/render/search-recipes.d.ts +4 -0
  739. package/dist/core/skill-curation/render/search-recipes.d.ts.map +1 -0
  740. package/dist/core/skill-curation/render/search-recipes.js +39 -0
  741. package/dist/core/skill-curation/render/search-recipes.js.map +1 -0
  742. package/dist/core/skill-curation/run-token.d.ts +27 -0
  743. package/dist/core/skill-curation/run-token.d.ts.map +1 -0
  744. package/dist/core/skill-curation/run-token.js +81 -0
  745. package/dist/core/skill-curation/run-token.js.map +1 -0
  746. package/dist/core/skill-curation/signals.d.ts +49 -0
  747. package/dist/core/skill-curation/signals.d.ts.map +1 -0
  748. package/dist/core/skill-curation/signals.js +149 -0
  749. package/dist/core/skill-curation/signals.js.map +1 -0
  750. package/dist/core/skill-curation/smoke-test.d.ts +39 -0
  751. package/dist/core/skill-curation/smoke-test.d.ts.map +1 -0
  752. package/dist/core/skill-curation/smoke-test.js +313 -0
  753. package/dist/core/skill-curation/smoke-test.js.map +1 -0
  754. package/dist/core/skill-curation/splicer.d.ts +16 -0
  755. package/dist/core/skill-curation/splicer.d.ts.map +1 -0
  756. package/dist/core/skill-curation/splicer.js +78 -0
  757. package/dist/core/skill-curation/splicer.js.map +1 -0
  758. package/dist/core/skill-curation/workdir.d.ts +40 -0
  759. package/dist/core/skill-curation/workdir.d.ts.map +1 -0
  760. package/dist/core/skill-curation/workdir.js +242 -0
  761. package/dist/core/skill-curation/workdir.js.map +1 -0
  762. package/dist/core/skills-compiler.d.ts +391 -0
  763. package/dist/core/skills-compiler.d.ts.map +1 -0
  764. package/dist/core/skills-compiler.js +1271 -0
  765. package/dist/core/skills-compiler.js.map +1 -0
  766. package/dist/core/skills-manifest.d.ts +8 -0
  767. package/dist/core/skills-manifest.d.ts.map +1 -0
  768. package/dist/core/skills-manifest.js +408 -0
  769. package/dist/core/skills-manifest.js.map +1 -0
  770. package/dist/core/system-reset.d.ts +268 -0
  771. package/dist/core/system-reset.d.ts.map +1 -0
  772. package/dist/core/system-reset.js +816 -0
  773. package/dist/core/system-reset.js.map +1 -0
  774. package/dist/core/template-store.d.ts +170 -0
  775. package/dist/core/template-store.d.ts.map +1 -0
  776. package/dist/core/template-store.js +388 -0
  777. package/dist/core/template-store.js.map +1 -0
  778. package/dist/core/template-versions.d.ts +95 -0
  779. package/dist/core/template-versions.d.ts.map +1 -0
  780. package/dist/core/template-versions.js +175 -0
  781. package/dist/core/template-versions.js.map +1 -0
  782. package/dist/core/today-agent-plan.d.ts +33 -0
  783. package/dist/core/today-agent-plan.d.ts.map +1 -0
  784. package/dist/core/today-agent-plan.js +120 -0
  785. package/dist/core/today-agent-plan.js.map +1 -0
  786. package/dist/core/today-direct-writer.d.ts +62 -0
  787. package/dist/core/today-direct-writer.d.ts.map +1 -0
  788. package/dist/core/today-direct-writer.js +132 -0
  789. package/dist/core/today-direct-writer.js.map +1 -0
  790. package/dist/core/today-write-lock.d.ts +89 -0
  791. package/dist/core/today-write-lock.d.ts.map +1 -0
  792. package/dist/core/today-write-lock.js +154 -0
  793. package/dist/core/today-write-lock.js.map +1 -0
  794. package/dist/core/trigger-dispatch.d.ts +31 -0
  795. package/dist/core/trigger-dispatch.d.ts.map +1 -0
  796. package/dist/core/trigger-dispatch.js +100 -0
  797. package/dist/core/trigger-dispatch.js.map +1 -0
  798. package/dist/core/trigger-evaluator.d.ts +59 -0
  799. package/dist/core/trigger-evaluator.d.ts.map +1 -0
  800. package/dist/core/trigger-evaluator.js +243 -0
  801. package/dist/core/trigger-evaluator.js.map +1 -0
  802. package/dist/core/workdir.d.ts +241 -0
  803. package/dist/core/workdir.d.ts.map +1 -0
  804. package/dist/core/workdir.js +565 -0
  805. package/dist/core/workdir.js.map +1 -0
  806. package/dist/db/automation-triggers.d.ts +90 -0
  807. package/dist/db/automation-triggers.d.ts.map +1 -0
  808. package/dist/db/automation-triggers.js +199 -0
  809. package/dist/db/automation-triggers.js.map +1 -0
  810. package/dist/db/client.d.ts +6 -0
  811. package/dist/db/client.d.ts.map +1 -0
  812. package/dist/db/client.js +47 -0
  813. package/dist/db/client.js.map +1 -0
  814. package/dist/db/entities-store.d.ts +92 -0
  815. package/dist/db/entities-store.d.ts.map +1 -0
  816. package/dist/db/entities-store.js +180 -0
  817. package/dist/db/entities-store.js.map +1 -0
  818. package/dist/db/hourly-check-signals.d.ts +78 -0
  819. package/dist/db/hourly-check-signals.d.ts.map +1 -0
  820. package/dist/db/hourly-check-signals.js +289 -0
  821. package/dist/db/hourly-check-signals.js.map +1 -0
  822. package/dist/db/integration-probe-store.d.ts +27 -0
  823. package/dist/db/integration-probe-store.d.ts.map +1 -0
  824. package/dist/db/integration-probe-store.js +75 -0
  825. package/dist/db/integration-probe-store.js.map +1 -0
  826. package/dist/db/integrations-store.d.ts +19 -0
  827. package/dist/db/integrations-store.d.ts.map +1 -0
  828. package/dist/db/integrations-store.js +85 -0
  829. package/dist/db/integrations-store.js.map +1 -0
  830. package/dist/db/managed-tasks-store.d.ts +130 -0
  831. package/dist/db/managed-tasks-store.d.ts.map +1 -0
  832. package/dist/db/managed-tasks-store.js +238 -0
  833. package/dist/db/managed-tasks-store.js.map +1 -0
  834. package/dist/db/management-parse-failures-store.d.ts +45 -0
  835. package/dist/db/management-parse-failures-store.d.ts.map +1 -0
  836. package/dist/db/management-parse-failures-store.js +36 -0
  837. package/dist/db/management-parse-failures-store.js.map +1 -0
  838. package/dist/db/observations.d.ts +145 -0
  839. package/dist/db/observations.d.ts.map +1 -0
  840. package/dist/db/observations.js +287 -0
  841. package/dist/db/observations.js.map +1 -0
  842. package/dist/db/recurring-schedules.d.ts +70 -0
  843. package/dist/db/recurring-schedules.d.ts.map +1 -0
  844. package/dist/db/recurring-schedules.js +213 -0
  845. package/dist/db/recurring-schedules.js.map +1 -0
  846. package/dist/db/repositories-store.d.ts +296 -0
  847. package/dist/db/repositories-store.d.ts.map +1 -0
  848. package/dist/db/repositories-store.js +754 -0
  849. package/dist/db/repositories-store.js.map +1 -0
  850. package/dist/db/runtime-state.d.ts +61 -0
  851. package/dist/db/runtime-state.d.ts.map +1 -0
  852. package/dist/db/runtime-state.js +104 -0
  853. package/dist/db/runtime-state.js.map +1 -0
  854. package/dist/db/schema.d.ts +4 -0
  855. package/dist/db/schema.d.ts.map +1 -0
  856. package/dist/db/schema.js +1338 -0
  857. package/dist/db/schema.js.map +1 -0
  858. package/dist/db/sot-bindings-store.d.ts +41 -0
  859. package/dist/db/sot-bindings-store.d.ts.map +1 -0
  860. package/dist/db/sot-bindings-store.js +64 -0
  861. package/dist/db/sot-bindings-store.js.map +1 -0
  862. package/dist/db/test-schemas.d.ts +23 -0
  863. package/dist/db/test-schemas.d.ts.map +1 -0
  864. package/dist/db/test-schemas.js +111 -0
  865. package/dist/db/test-schemas.js.map +1 -0
  866. package/dist/db/voice-transcripts-store.d.ts +28 -0
  867. package/dist/db/voice-transcripts-store.d.ts.map +1 -0
  868. package/dist/db/voice-transcripts-store.js +43 -0
  869. package/dist/db/voice-transcripts-store.js.map +1 -0
  870. package/dist/index.d.ts +2 -0
  871. package/dist/index.d.ts.map +1 -0
  872. package/dist/index.js +2913 -0
  873. package/dist/index.js.map +1 -0
  874. package/dist/init.d.ts +7 -0
  875. package/dist/init.d.ts.map +1 -0
  876. package/dist/init.js +32 -0
  877. package/dist/init.js.map +1 -0
  878. package/dist/log-buffer.d.ts +71 -0
  879. package/dist/log-buffer.d.ts.map +1 -0
  880. package/dist/log-buffer.js +201 -0
  881. package/dist/log-buffer.js.map +1 -0
  882. package/dist/logging.d.ts +5 -0
  883. package/dist/logging.d.ts.map +1 -0
  884. package/dist/logging.js +130 -0
  885. package/dist/logging.js.map +1 -0
  886. package/dist/management-rules.d.ts +2 -0
  887. package/dist/management-rules.d.ts.map +1 -0
  888. package/dist/management-rules.js +62 -0
  889. package/dist/management-rules.js.map +1 -0
  890. package/dist/messaging/constants.d.ts +33 -0
  891. package/dist/messaging/constants.d.ts.map +1 -0
  892. package/dist/messaging/constants.js +52 -0
  893. package/dist/messaging/constants.js.map +1 -0
  894. package/dist/messaging/magic-phrase.d.ts +16 -0
  895. package/dist/messaging/magic-phrase.d.ts.map +1 -0
  896. package/dist/messaging/magic-phrase.js +103 -0
  897. package/dist/messaging/magic-phrase.js.map +1 -0
  898. package/dist/messaging/owner-channels.d.ts +20 -0
  899. package/dist/messaging/owner-channels.d.ts.map +1 -0
  900. package/dist/messaging/owner-channels.js +41 -0
  901. package/dist/messaging/owner-channels.js.map +1 -0
  902. package/dist/observers/calendar-poller.d.ts +51 -0
  903. package/dist/observers/calendar-poller.d.ts.map +1 -0
  904. package/dist/observers/calendar-poller.js +128 -0
  905. package/dist/observers/calendar-poller.js.map +1 -0
  906. package/dist/observers/context-index-reconciler-observer.d.ts +72 -0
  907. package/dist/observers/context-index-reconciler-observer.d.ts.map +1 -0
  908. package/dist/observers/context-index-reconciler-observer.js +253 -0
  909. package/dist/observers/context-index-reconciler-observer.js.map +1 -0
  910. package/dist/observers/delegated-probe-observer.d.ts +83 -0
  911. package/dist/observers/delegated-probe-observer.d.ts.map +1 -0
  912. package/dist/observers/delegated-probe-observer.js +237 -0
  913. package/dist/observers/delegated-probe-observer.js.map +1 -0
  914. package/dist/observers/delegated-sync-worker.d.ts +375 -0
  915. package/dist/observers/delegated-sync-worker.d.ts.map +1 -0
  916. package/dist/observers/delegated-sync-worker.js +1087 -0
  917. package/dist/observers/delegated-sync-worker.js.map +1 -0
  918. package/dist/observers/entity-mirror-observer.d.ts +55 -0
  919. package/dist/observers/entity-mirror-observer.d.ts.map +1 -0
  920. package/dist/observers/entity-mirror-observer.js +73 -0
  921. package/dist/observers/entity-mirror-observer.js.map +1 -0
  922. package/dist/observers/git-delegated-cron.d.ts +41 -0
  923. package/dist/observers/git-delegated-cron.d.ts.map +1 -0
  924. package/dist/observers/git-delegated-cron.js +159 -0
  925. package/dist/observers/git-delegated-cron.js.map +1 -0
  926. package/dist/observers/git-event-classifier.d.ts +52 -0
  927. package/dist/observers/git-event-classifier.d.ts.map +1 -0
  928. package/dist/observers/git-event-classifier.js +70 -0
  929. package/dist/observers/git-event-classifier.js.map +1 -0
  930. package/dist/observers/git-watcher.d.ts +162 -0
  931. package/dist/observers/git-watcher.d.ts.map +1 -0
  932. package/dist/observers/git-watcher.js +768 -0
  933. package/dist/observers/git-watcher.js.map +1 -0
  934. package/dist/observers/github-poller-classifier.d.ts +101 -0
  935. package/dist/observers/github-poller-classifier.d.ts.map +1 -0
  936. package/dist/observers/github-poller-classifier.js +199 -0
  937. package/dist/observers/github-poller-classifier.js.map +1 -0
  938. package/dist/observers/github-poller.d.ts +291 -0
  939. package/dist/observers/github-poller.d.ts.map +1 -0
  940. package/dist/observers/github-poller.js +609 -0
  941. package/dist/observers/github-poller.js.map +1 -0
  942. package/dist/observers/imminent-event-scheduler.d.ts +34 -0
  943. package/dist/observers/imminent-event-scheduler.d.ts.map +1 -0
  944. package/dist/observers/imminent-event-scheduler.js +125 -0
  945. package/dist/observers/imminent-event-scheduler.js.map +1 -0
  946. package/dist/observers/mail-poller.d.ts +133 -0
  947. package/dist/observers/mail-poller.d.ts.map +1 -0
  948. package/dist/observers/mail-poller.js +563 -0
  949. package/dist/observers/mail-poller.js.map +1 -0
  950. package/dist/observers/mail-reconciliation.d.ts +87 -0
  951. package/dist/observers/mail-reconciliation.d.ts.map +1 -0
  952. package/dist/observers/mail-reconciliation.js +241 -0
  953. package/dist/observers/mail-reconciliation.js.map +1 -0
  954. package/dist/observers/manager.d.ts +67 -0
  955. package/dist/observers/manager.d.ts.map +1 -0
  956. package/dist/observers/manager.js +136 -0
  957. package/dist/observers/manager.js.map +1 -0
  958. package/dist/observers/notion-poller.d.ts +43 -0
  959. package/dist/observers/notion-poller.d.ts.map +1 -0
  960. package/dist/observers/notion-poller.js +184 -0
  961. package/dist/observers/notion-poller.js.map +1 -0
  962. package/dist/observers/observation-summarizer/index.d.ts +13 -0
  963. package/dist/observers/observation-summarizer/index.d.ts.map +1 -0
  964. package/dist/observers/observation-summarizer/index.js +13 -0
  965. package/dist/observers/observation-summarizer/index.js.map +1 -0
  966. package/dist/observers/observation-summarizer/pre-filter.d.ts +62 -0
  967. package/dist/observers/observation-summarizer/pre-filter.d.ts.map +1 -0
  968. package/dist/observers/observation-summarizer/pre-filter.js +189 -0
  969. package/dist/observers/observation-summarizer/pre-filter.js.map +1 -0
  970. package/dist/observers/observation-summarizer/response-parser.d.ts +30 -0
  971. package/dist/observers/observation-summarizer/response-parser.d.ts.map +1 -0
  972. package/dist/observers/observation-summarizer/response-parser.js +106 -0
  973. package/dist/observers/observation-summarizer/response-parser.js.map +1 -0
  974. package/dist/observers/observation-summarizer/summarizer-client.d.ts +83 -0
  975. package/dist/observers/observation-summarizer/summarizer-client.d.ts.map +1 -0
  976. package/dist/observers/observation-summarizer/summarizer-client.js +185 -0
  977. package/dist/observers/observation-summarizer/summarizer-client.js.map +1 -0
  978. package/dist/observers/observation-summarizer/summarizer-prompts.d.ts +51 -0
  979. package/dist/observers/observation-summarizer/summarizer-prompts.d.ts.map +1 -0
  980. package/dist/observers/observation-summarizer/summarizer-prompts.js +286 -0
  981. package/dist/observers/observation-summarizer/summarizer-prompts.js.map +1 -0
  982. package/dist/observers/observation-summarizer/worker.d.ts +106 -0
  983. package/dist/observers/observation-summarizer/worker.d.ts.map +1 -0
  984. package/dist/observers/observation-summarizer/worker.js +311 -0
  985. package/dist/observers/observation-summarizer/worker.js.map +1 -0
  986. package/dist/observers/obsidian-watcher.d.ts +90 -0
  987. package/dist/observers/obsidian-watcher.d.ts.map +1 -0
  988. package/dist/observers/obsidian-watcher.js +166 -0
  989. package/dist/observers/obsidian-watcher.js.map +1 -0
  990. package/dist/observers/primary-vault-watcher.d.ts +73 -0
  991. package/dist/observers/primary-vault-watcher.d.ts.map +1 -0
  992. package/dist/observers/primary-vault-watcher.js +115 -0
  993. package/dist/observers/primary-vault-watcher.js.map +1 -0
  994. package/dist/observers/repository-management-cron.d.ts +70 -0
  995. package/dist/observers/repository-management-cron.d.ts.map +1 -0
  996. package/dist/observers/repository-management-cron.js +166 -0
  997. package/dist/observers/repository-management-cron.js.map +1 -0
  998. package/dist/observers/skill-curation-walker.d.ts +33 -0
  999. package/dist/observers/skill-curation-walker.d.ts.map +1 -0
  1000. package/dist/observers/skill-curation-walker.js +216 -0
  1001. package/dist/observers/skill-curation-walker.js.map +1 -0
  1002. package/dist/safety/absolute-block-audit.d.ts +22 -0
  1003. package/dist/safety/absolute-block-audit.d.ts.map +1 -0
  1004. package/dist/safety/absolute-block-audit.js +32 -0
  1005. package/dist/safety/absolute-block-audit.js.map +1 -0
  1006. package/dist/safety/agent-write-tracker.d.ts +42 -0
  1007. package/dist/safety/agent-write-tracker.d.ts.map +1 -0
  1008. package/dist/safety/agent-write-tracker.js +82 -0
  1009. package/dist/safety/agent-write-tracker.js.map +1 -0
  1010. package/dist/safety/always-disallowed.d.ts +66 -0
  1011. package/dist/safety/always-disallowed.d.ts.map +1 -0
  1012. package/dist/safety/always-disallowed.js +347 -0
  1013. package/dist/safety/always-disallowed.js.map +1 -0
  1014. package/dist/safety/audit.d.ts +118 -0
  1015. package/dist/safety/audit.d.ts.map +1 -0
  1016. package/dist/safety/audit.js +324 -0
  1017. package/dist/safety/audit.js.map +1 -0
  1018. package/dist/safety/integration-write-tracker.d.ts +58 -0
  1019. package/dist/safety/integration-write-tracker.d.ts.map +1 -0
  1020. package/dist/safety/integration-write-tracker.js +41 -0
  1021. package/dist/safety/integration-write-tracker.js.map +1 -0
  1022. package/dist/safety/risk-classifier.d.ts +65 -0
  1023. package/dist/safety/risk-classifier.d.ts.map +1 -0
  1024. package/dist/safety/risk-classifier.js +763 -0
  1025. package/dist/safety/risk-classifier.js.map +1 -0
  1026. package/dist/scheduler/hourly-check-gate.d.ts +73 -0
  1027. package/dist/scheduler/hourly-check-gate.d.ts.map +1 -0
  1028. package/dist/scheduler/hourly-check-gate.js +128 -0
  1029. package/dist/scheduler/hourly-check-gate.js.map +1 -0
  1030. package/dist/secrets/backend-api-key-env.d.ts +104 -0
  1031. package/dist/secrets/backend-api-key-env.d.ts.map +1 -0
  1032. package/dist/secrets/backend-api-key-env.js +197 -0
  1033. package/dist/secrets/backend-api-key-env.js.map +1 -0
  1034. package/dist/secrets/codex-home-materializer.d.ts +35 -0
  1035. package/dist/secrets/codex-home-materializer.d.ts.map +1 -0
  1036. package/dist/secrets/codex-home-materializer.js +76 -0
  1037. package/dist/secrets/codex-home-materializer.js.map +1 -0
  1038. package/dist/secrets/encrypted-blob-store.d.ts +20 -0
  1039. package/dist/secrets/encrypted-blob-store.d.ts.map +1 -0
  1040. package/dist/secrets/encrypted-blob-store.js +80 -0
  1041. package/dist/secrets/encrypted-blob-store.js.map +1 -0
  1042. package/dist/secrets/platform-secret-store.d.ts +17 -0
  1043. package/dist/secrets/platform-secret-store.d.ts.map +1 -0
  1044. package/dist/secrets/platform-secret-store.js +37 -0
  1045. package/dist/secrets/platform-secret-store.js.map +1 -0
  1046. package/dist/secrets/redaction.d.ts +2 -0
  1047. package/dist/secrets/redaction.d.ts.map +1 -0
  1048. package/dist/secrets/redaction.js +2 -0
  1049. package/dist/secrets/redaction.js.map +1 -0
  1050. package/dist/secrets/secret-broker.d.ts +61 -0
  1051. package/dist/secrets/secret-broker.d.ts.map +1 -0
  1052. package/dist/secrets/secret-broker.js +160 -0
  1053. package/dist/secrets/secret-broker.js.map +1 -0
  1054. package/dist/secrets/secret-names.d.ts +34 -0
  1055. package/dist/secrets/secret-names.d.ts.map +1 -0
  1056. package/dist/secrets/secret-names.js +39 -0
  1057. package/dist/secrets/secret-names.js.map +1 -0
  1058. package/dist/secrets/secret-store.d.ts +8 -0
  1059. package/dist/secrets/secret-store.d.ts.map +1 -0
  1060. package/dist/secrets/secret-store.js +2 -0
  1061. package/dist/secrets/secret-store.js.map +1 -0
  1062. package/dist/secrets/types.d.ts +7 -0
  1063. package/dist/secrets/types.d.ts.map +1 -0
  1064. package/dist/secrets/types.js +2 -0
  1065. package/dist/secrets/types.js.map +1 -0
  1066. package/dist/services/apple-calendar/caldav-client.d.ts +48 -0
  1067. package/dist/services/apple-calendar/caldav-client.d.ts.map +1 -0
  1068. package/dist/services/apple-calendar/caldav-client.js +86 -0
  1069. package/dist/services/apple-calendar/caldav-client.js.map +1 -0
  1070. package/dist/services/apple-calendar/caldav-codec.d.ts +67 -0
  1071. package/dist/services/apple-calendar/caldav-codec.d.ts.map +1 -0
  1072. package/dist/services/apple-calendar/caldav-codec.js +341 -0
  1073. package/dist/services/apple-calendar/caldav-codec.js.map +1 -0
  1074. package/dist/services/apple-calendar/index.d.ts +3 -0
  1075. package/dist/services/apple-calendar/index.d.ts.map +1 -0
  1076. package/dist/services/apple-calendar/index.js +2 -0
  1077. package/dist/services/apple-calendar/index.js.map +1 -0
  1078. package/dist/services/apple-calendar/service.d.ts +75 -0
  1079. package/dist/services/apple-calendar/service.d.ts.map +1 -0
  1080. package/dist/services/apple-calendar/service.js +374 -0
  1081. package/dist/services/apple-calendar/service.js.map +1 -0
  1082. package/dist/services/apple-calendar/types.d.ts +78 -0
  1083. package/dist/services/apple-calendar/types.d.ts.map +1 -0
  1084. package/dist/services/apple-calendar/types.js +17 -0
  1085. package/dist/services/apple-calendar/types.js.map +1 -0
  1086. package/dist/services/attachments/hardlink.d.ts +11 -0
  1087. package/dist/services/attachments/hardlink.d.ts.map +1 -0
  1088. package/dist/services/attachments/hardlink.js +56 -0
  1089. package/dist/services/attachments/hardlink.js.map +1 -0
  1090. package/dist/services/attachments/sanitize.d.ts +21 -0
  1091. package/dist/services/attachments/sanitize.d.ts.map +1 -0
  1092. package/dist/services/attachments/sanitize.js +128 -0
  1093. package/dist/services/attachments/sanitize.js.map +1 -0
  1094. package/dist/services/attachments/store.d.ts +146 -0
  1095. package/dist/services/attachments/store.d.ts.map +1 -0
  1096. package/dist/services/attachments/store.js +477 -0
  1097. package/dist/services/attachments/store.js.map +1 -0
  1098. package/dist/services/calendar/outlook/graph-calendar-client.d.ts +114 -0
  1099. package/dist/services/calendar/outlook/graph-calendar-client.d.ts.map +1 -0
  1100. package/dist/services/calendar/outlook/graph-calendar-client.js +146 -0
  1101. package/dist/services/calendar/outlook/graph-calendar-client.js.map +1 -0
  1102. package/dist/services/calendar.d.ts +115 -0
  1103. package/dist/services/calendar.d.ts.map +1 -0
  1104. package/dist/services/calendar.js +281 -0
  1105. package/dist/services/calendar.js.map +1 -0
  1106. package/dist/services/delegated-backend-invoker.d.ts +414 -0
  1107. package/dist/services/delegated-backend-invoker.d.ts.map +1 -0
  1108. package/dist/services/delegated-backend-invoker.js +2372 -0
  1109. package/dist/services/delegated-backend-invoker.js.map +1 -0
  1110. package/dist/services/delegated-proxy-config.d.ts +93 -0
  1111. package/dist/services/delegated-proxy-config.d.ts.map +1 -0
  1112. package/dist/services/delegated-proxy-config.js +98 -0
  1113. package/dist/services/delegated-proxy-config.js.map +1 -0
  1114. package/dist/services/delegated-task-result-cache.d.ts +176 -0
  1115. package/dist/services/delegated-task-result-cache.d.ts.map +1 -0
  1116. package/dist/services/delegated-task-result-cache.js +0 -0
  1117. package/dist/services/delegated-task-result-cache.js.map +1 -0
  1118. package/dist/services/delegated-task-runtime.d.ts +346 -0
  1119. package/dist/services/delegated-task-runtime.d.ts.map +1 -0
  1120. package/dist/services/delegated-task-runtime.js +589 -0
  1121. package/dist/services/delegated-task-runtime.js.map +1 -0
  1122. package/dist/services/delegated-task-session-pool.d.ts +182 -0
  1123. package/dist/services/delegated-task-session-pool.d.ts.map +1 -0
  1124. package/dist/services/delegated-task-session-pool.js +292 -0
  1125. package/dist/services/delegated-task-session-pool.js.map +1 -0
  1126. package/dist/services/delegated-tool-runtime.d.ts +50 -0
  1127. package/dist/services/delegated-tool-runtime.d.ts.map +1 -0
  1128. package/dist/services/delegated-tool-runtime.js +120 -0
  1129. package/dist/services/delegated-tool-runtime.js.map +1 -0
  1130. package/dist/services/fts5.d.ts +40 -0
  1131. package/dist/services/fts5.d.ts.map +1 -0
  1132. package/dist/services/fts5.js +54 -0
  1133. package/dist/services/fts5.js.map +1 -0
  1134. package/dist/services/git-account-registry.d.ts +164 -0
  1135. package/dist/services/git-account-registry.d.ts.map +1 -0
  1136. package/dist/services/git-account-registry.js +297 -0
  1137. package/dist/services/git-account-registry.js.map +1 -0
  1138. package/dist/services/github.d.ts +49 -0
  1139. package/dist/services/github.d.ts.map +1 -0
  1140. package/dist/services/github.js +123 -0
  1141. package/dist/services/github.js.map +1 -0
  1142. package/dist/services/gmail-classifier.d.ts +62 -0
  1143. package/dist/services/gmail-classifier.d.ts.map +1 -0
  1144. package/dist/services/gmail-classifier.js +221 -0
  1145. package/dist/services/gmail-classifier.js.map +1 -0
  1146. package/dist/services/gmail.d.ts +192 -0
  1147. package/dist/services/gmail.d.ts.map +1 -0
  1148. package/dist/services/gmail.js +678 -0
  1149. package/dist/services/gmail.js.map +1 -0
  1150. package/dist/services/google-auth.d.ts +16 -0
  1151. package/dist/services/google-auth.d.ts.map +1 -0
  1152. package/dist/services/google-auth.js +37 -0
  1153. package/dist/services/google-auth.js.map +1 -0
  1154. package/dist/services/google-maps.d.ts +35 -0
  1155. package/dist/services/google-maps.d.ts.map +1 -0
  1156. package/dist/services/google-maps.js +82 -0
  1157. package/dist/services/google-maps.js.map +1 -0
  1158. package/dist/services/integrations/extract-write-item-id.d.ts +64 -0
  1159. package/dist/services/integrations/extract-write-item-id.d.ts.map +1 -0
  1160. package/dist/services/integrations/extract-write-item-id.js +188 -0
  1161. package/dist/services/integrations/extract-write-item-id.js.map +1 -0
  1162. package/dist/services/integrations/reconcile.d.ts +136 -0
  1163. package/dist/services/integrations/reconcile.d.ts.map +1 -0
  1164. package/dist/services/integrations/reconcile.js +218 -0
  1165. package/dist/services/integrations/reconcile.js.map +1 -0
  1166. package/dist/services/integrations/snapshot-partitions.d.ts +40 -0
  1167. package/dist/services/integrations/snapshot-partitions.d.ts.map +1 -0
  1168. package/dist/services/integrations/snapshot-partitions.js +113 -0
  1169. package/dist/services/integrations/snapshot-partitions.js.map +1 -0
  1170. package/dist/services/journal/render.d.ts +15 -0
  1171. package/dist/services/journal/render.d.ts.map +1 -0
  1172. package/dist/services/journal/render.js +17 -0
  1173. package/dist/services/journal/render.js.map +1 -0
  1174. package/dist/services/journal/writer.d.ts +26 -0
  1175. package/dist/services/journal/writer.d.ts.map +1 -0
  1176. package/dist/services/journal/writer.js +50 -0
  1177. package/dist/services/journal/writer.js.map +1 -0
  1178. package/dist/services/mail/account-registry.d.ts +208 -0
  1179. package/dist/services/mail/account-registry.d.ts.map +1 -0
  1180. package/dist/services/mail/account-registry.js +554 -0
  1181. package/dist/services/mail/account-registry.js.map +1 -0
  1182. package/dist/services/mail/gmail/auth-failure-classifier.d.ts +24 -0
  1183. package/dist/services/mail/gmail/auth-failure-classifier.d.ts.map +1 -0
  1184. package/dist/services/mail/gmail/auth-failure-classifier.js +67 -0
  1185. package/dist/services/mail/gmail/auth-failure-classifier.js.map +1 -0
  1186. package/dist/services/mail/gmail/gmail-provider.d.ts +58 -0
  1187. package/dist/services/mail/gmail/gmail-provider.d.ts.map +1 -0
  1188. package/dist/services/mail/gmail/gmail-provider.js +434 -0
  1189. package/dist/services/mail/gmail/gmail-provider.js.map +1 -0
  1190. package/dist/services/mail/gmail/legacy-row.d.ts +24 -0
  1191. package/dist/services/mail/gmail/legacy-row.d.ts.map +1 -0
  1192. package/dist/services/mail/gmail/legacy-row.js +71 -0
  1193. package/dist/services/mail/gmail/legacy-row.js.map +1 -0
  1194. package/dist/services/mail/gmail/poll-cursor.d.ts +12 -0
  1195. package/dist/services/mail/gmail/poll-cursor.d.ts.map +1 -0
  1196. package/dist/services/mail/gmail/poll-cursor.js +32 -0
  1197. package/dist/services/mail/gmail/poll-cursor.js.map +1 -0
  1198. package/dist/services/mail/html-to-plaintext.d.ts +27 -0
  1199. package/dist/services/mail/html-to-plaintext.d.ts.map +1 -0
  1200. package/dist/services/mail/html-to-plaintext.js +163 -0
  1201. package/dist/services/mail/html-to-plaintext.js.map +1 -0
  1202. package/dist/services/mail/imap/app-password.d.ts +27 -0
  1203. package/dist/services/mail/imap/app-password.d.ts.map +1 -0
  1204. package/dist/services/mail/imap/app-password.js +86 -0
  1205. package/dist/services/mail/imap/app-password.js.map +1 -0
  1206. package/dist/services/mail/imap/auth-failure-classifier.d.ts +21 -0
  1207. package/dist/services/mail/imap/auth-failure-classifier.d.ts.map +1 -0
  1208. package/dist/services/mail/imap/auth-failure-classifier.js +54 -0
  1209. package/dist/services/mail/imap/auth-failure-classifier.js.map +1 -0
  1210. package/dist/services/mail/imap/capabilities.d.ts +30 -0
  1211. package/dist/services/mail/imap/capabilities.d.ts.map +1 -0
  1212. package/dist/services/mail/imap/capabilities.js +70 -0
  1213. package/dist/services/mail/imap/capabilities.js.map +1 -0
  1214. package/dist/services/mail/imap/client.d.ts +15 -0
  1215. package/dist/services/mail/imap/client.d.ts.map +1 -0
  1216. package/dist/services/mail/imap/client.js +60 -0
  1217. package/dist/services/mail/imap/client.js.map +1 -0
  1218. package/dist/services/mail/imap/cursor.d.ts +19 -0
  1219. package/dist/services/mail/imap/cursor.d.ts.map +1 -0
  1220. package/dist/services/mail/imap/cursor.js +47 -0
  1221. package/dist/services/mail/imap/cursor.js.map +1 -0
  1222. package/dist/services/mail/imap/folder-resolver.d.ts +24 -0
  1223. package/dist/services/mail/imap/folder-resolver.d.ts.map +1 -0
  1224. package/dist/services/mail/imap/folder-resolver.js +58 -0
  1225. package/dist/services/mail/imap/folder-resolver.js.map +1 -0
  1226. package/dist/services/mail/imap/icloud-provider.d.ts +5 -0
  1227. package/dist/services/mail/imap/icloud-provider.d.ts.map +1 -0
  1228. package/dist/services/mail/imap/icloud-provider.js +5 -0
  1229. package/dist/services/mail/imap/icloud-provider.js.map +1 -0
  1230. package/dist/services/mail/imap/imap-provider-base.d.ts +173 -0
  1231. package/dist/services/mail/imap/imap-provider-base.d.ts.map +1 -0
  1232. package/dist/services/mail/imap/imap-provider-base.js +1004 -0
  1233. package/dist/services/mail/imap/imap-provider-base.js.map +1 -0
  1234. package/dist/services/mail/imap/query-translator.d.ts +13 -0
  1235. package/dist/services/mail/imap/query-translator.d.ts.map +1 -0
  1236. package/dist/services/mail/imap/query-translator.js +114 -0
  1237. package/dist/services/mail/imap/query-translator.js.map +1 -0
  1238. package/dist/services/mail/imap/reconcile-planner.d.ts +56 -0
  1239. package/dist/services/mail/imap/reconcile-planner.d.ts.map +1 -0
  1240. package/dist/services/mail/imap/reconcile-planner.js +52 -0
  1241. package/dist/services/mail/imap/reconcile-planner.js.map +1 -0
  1242. package/dist/services/mail/imap/reply-mime.d.ts +24 -0
  1243. package/dist/services/mail/imap/reply-mime.d.ts.map +1 -0
  1244. package/dist/services/mail/imap/reply-mime.js +77 -0
  1245. package/dist/services/mail/imap/reply-mime.js.map +1 -0
  1246. package/dist/services/mail/imap/yahoo-provider.d.ts +5 -0
  1247. package/dist/services/mail/imap/yahoo-provider.d.ts.map +1 -0
  1248. package/dist/services/mail/imap/yahoo-provider.js +5 -0
  1249. package/dist/services/mail/imap/yahoo-provider.js.map +1 -0
  1250. package/dist/services/mail/mail-search.d.ts +35 -0
  1251. package/dist/services/mail/mail-search.d.ts.map +1 -0
  1252. package/dist/services/mail/mail-search.js +59 -0
  1253. package/dist/services/mail/mail-search.js.map +1 -0
  1254. package/dist/services/mail/outlook/auth-failure-classifier.d.ts +38 -0
  1255. package/dist/services/mail/outlook/auth-failure-classifier.d.ts.map +1 -0
  1256. package/dist/services/mail/outlook/auth-failure-classifier.js +91 -0
  1257. package/dist/services/mail/outlook/auth-failure-classifier.js.map +1 -0
  1258. package/dist/services/mail/outlook/client-config.d.ts +34 -0
  1259. package/dist/services/mail/outlook/client-config.d.ts.map +1 -0
  1260. package/dist/services/mail/outlook/client-config.js +58 -0
  1261. package/dist/services/mail/outlook/client-config.js.map +1 -0
  1262. package/dist/services/mail/outlook/delta-cursor.d.ts +66 -0
  1263. package/dist/services/mail/outlook/delta-cursor.d.ts.map +1 -0
  1264. package/dist/services/mail/outlook/delta-cursor.js +85 -0
  1265. package/dist/services/mail/outlook/delta-cursor.js.map +1 -0
  1266. package/dist/services/mail/outlook/graph-client.d.ts +98 -0
  1267. package/dist/services/mail/outlook/graph-client.d.ts.map +1 -0
  1268. package/dist/services/mail/outlook/graph-client.js +198 -0
  1269. package/dist/services/mail/outlook/graph-client.js.map +1 -0
  1270. package/dist/services/mail/outlook/msal-app-factory.d.ts +20 -0
  1271. package/dist/services/mail/outlook/msal-app-factory.d.ts.map +1 -0
  1272. package/dist/services/mail/outlook/msal-app-factory.js +62 -0
  1273. package/dist/services/mail/outlook/msal-app-factory.js.map +1 -0
  1274. package/dist/services/mail/outlook/msal-cache-plugin.d.ts +19 -0
  1275. package/dist/services/mail/outlook/msal-cache-plugin.d.ts.map +1 -0
  1276. package/dist/services/mail/outlook/msal-cache-plugin.js +30 -0
  1277. package/dist/services/mail/outlook/msal-cache-plugin.js.map +1 -0
  1278. package/dist/services/mail/outlook/oauth-device-code.d.ts +26 -0
  1279. package/dist/services/mail/outlook/oauth-device-code.d.ts.map +1 -0
  1280. package/dist/services/mail/outlook/oauth-device-code.js +32 -0
  1281. package/dist/services/mail/outlook/oauth-device-code.js.map +1 -0
  1282. package/dist/services/mail/outlook/oauth-loopback.d.ts +41 -0
  1283. package/dist/services/mail/outlook/oauth-loopback.d.ts.map +1 -0
  1284. package/dist/services/mail/outlook/oauth-loopback.js +223 -0
  1285. package/dist/services/mail/outlook/oauth-loopback.js.map +1 -0
  1286. package/dist/services/mail/outlook/outlook-provider.d.ts +100 -0
  1287. package/dist/services/mail/outlook/outlook-provider.d.ts.map +1 -0
  1288. package/dist/services/mail/outlook/outlook-provider.js +619 -0
  1289. package/dist/services/mail/outlook/outlook-provider.js.map +1 -0
  1290. package/dist/services/mail/outlook/query-translator.d.ts +10 -0
  1291. package/dist/services/mail/outlook/query-translator.d.ts.map +1 -0
  1292. package/dist/services/mail/outlook/query-translator.js +103 -0
  1293. package/dist/services/mail/outlook/query-translator.js.map +1 -0
  1294. package/dist/services/mail/provider.d.ts +267 -0
  1295. package/dist/services/mail/provider.d.ts.map +1 -0
  1296. package/dist/services/mail/provider.js +34 -0
  1297. package/dist/services/mail/provider.js.map +1 -0
  1298. package/dist/services/mail/query-utils.d.ts +13 -0
  1299. package/dist/services/mail/query-utils.d.ts.map +1 -0
  1300. package/dist/services/mail/query-utils.js +18 -0
  1301. package/dist/services/mail/query-utils.js.map +1 -0
  1302. package/dist/services/mail-classifier.d.ts +25 -0
  1303. package/dist/services/mail-classifier.d.ts.map +1 -0
  1304. package/dist/services/mail-classifier.js +52 -0
  1305. package/dist/services/mail-classifier.js.map +1 -0
  1306. package/dist/services/mail-ingestion.d.ts +139 -0
  1307. package/dist/services/mail-ingestion.d.ts.map +1 -0
  1308. package/dist/services/mail-ingestion.js +223 -0
  1309. package/dist/services/mail-ingestion.js.map +1 -0
  1310. package/dist/services/mcp/auto-probe.d.ts +76 -0
  1311. package/dist/services/mcp/auto-probe.d.ts.map +1 -0
  1312. package/dist/services/mcp/auto-probe.js +147 -0
  1313. package/dist/services/mcp/auto-probe.js.map +1 -0
  1314. package/dist/services/mcp/generators/claude.d.ts +18 -0
  1315. package/dist/services/mcp/generators/claude.d.ts.map +1 -0
  1316. package/dist/services/mcp/generators/claude.js +90 -0
  1317. package/dist/services/mcp/generators/claude.js.map +1 -0
  1318. package/dist/services/mcp/generators/codex.d.ts +22 -0
  1319. package/dist/services/mcp/generators/codex.d.ts.map +1 -0
  1320. package/dist/services/mcp/generators/codex.js +102 -0
  1321. package/dist/services/mcp/generators/codex.js.map +1 -0
  1322. package/dist/services/mcp/generators/gemini.d.ts +20 -0
  1323. package/dist/services/mcp/generators/gemini.d.ts.map +1 -0
  1324. package/dist/services/mcp/generators/gemini.js +97 -0
  1325. package/dist/services/mcp/generators/gemini.js.map +1 -0
  1326. package/dist/services/mcp/generators/index.d.ts +20 -0
  1327. package/dist/services/mcp/generators/index.d.ts.map +1 -0
  1328. package/dist/services/mcp/generators/index.js +29 -0
  1329. package/dist/services/mcp/generators/index.js.map +1 -0
  1330. package/dist/services/mcp/generators/types.d.ts +47 -0
  1331. package/dist/services/mcp/generators/types.d.ts.map +1 -0
  1332. package/dist/services/mcp/generators/types.js +40 -0
  1333. package/dist/services/mcp/generators/types.js.map +1 -0
  1334. package/dist/services/mcp/probe.d.ts +31 -0
  1335. package/dist/services/mcp/probe.d.ts.map +1 -0
  1336. package/dist/services/mcp/probe.js +437 -0
  1337. package/dist/services/mcp/probe.js.map +1 -0
  1338. package/dist/services/mcp/registry.d.ts +84 -0
  1339. package/dist/services/mcp/registry.d.ts.map +1 -0
  1340. package/dist/services/mcp/registry.js +387 -0
  1341. package/dist/services/mcp/registry.js.map +1 -0
  1342. package/dist/services/mcp/risk.d.ts +82 -0
  1343. package/dist/services/mcp/risk.d.ts.map +1 -0
  1344. package/dist/services/mcp/risk.js +126 -0
  1345. package/dist/services/mcp/risk.js.map +1 -0
  1346. package/dist/services/mcp/session-materializer.d.ts +123 -0
  1347. package/dist/services/mcp/session-materializer.d.ts.map +1 -0
  1348. package/dist/services/mcp/session-materializer.js +361 -0
  1349. package/dist/services/mcp/session-materializer.js.map +1 -0
  1350. package/dist/services/mcp/tool-audit.d.ts +53 -0
  1351. package/dist/services/mcp/tool-audit.d.ts.map +1 -0
  1352. package/dist/services/mcp/tool-audit.js +74 -0
  1353. package/dist/services/mcp/tool-audit.js.map +1 -0
  1354. package/dist/services/mcp/types.d.ts +88 -0
  1355. package/dist/services/mcp/types.d.ts.map +1 -0
  1356. package/dist/services/mcp/types.js +94 -0
  1357. package/dist/services/mcp/types.js.map +1 -0
  1358. package/dist/services/notion.d.ts +134 -0
  1359. package/dist/services/notion.d.ts.map +1 -0
  1360. package/dist/services/notion.js +350 -0
  1361. package/dist/services/notion.js.map +1 -0
  1362. package/dist/services/obsidian.d.ts +116 -0
  1363. package/dist/services/obsidian.d.ts.map +1 -0
  1364. package/dist/services/obsidian.js +305 -0
  1365. package/dist/services/obsidian.js.map +1 -0
  1366. package/dist/services/service-registry.d.ts +31 -0
  1367. package/dist/services/service-registry.d.ts.map +1 -0
  1368. package/dist/services/service-registry.js +15 -0
  1369. package/dist/services/service-registry.js.map +1 -0
  1370. package/dist/services/voice/transcriber-impl.d.ts +15 -0
  1371. package/dist/services/voice/transcriber-impl.d.ts.map +1 -0
  1372. package/dist/services/voice/transcriber-impl.js +129 -0
  1373. package/dist/services/voice/transcriber-impl.js.map +1 -0
  1374. package/dist/services/voice/transcriber.d.ts +117 -0
  1375. package/dist/services/voice/transcriber.d.ts.map +1 -0
  1376. package/dist/services/voice/transcriber.js +201 -0
  1377. package/dist/services/voice/transcriber.js.map +1 -0
  1378. package/dist/settings/runtime-settings.d.ts +232 -0
  1379. package/dist/settings/runtime-settings.d.ts.map +1 -0
  1380. package/dist/settings/runtime-settings.js +769 -0
  1381. package/dist/settings/runtime-settings.js.map +1 -0
  1382. package/dist/settings/settings-store.d.ts +13 -0
  1383. package/dist/settings/settings-store.d.ts.map +1 -0
  1384. package/dist/settings/settings-store.js +87 -0
  1385. package/dist/settings/settings-store.js.map +1 -0
  1386. package/package.json +85 -0
@@ -0,0 +1,1338 @@
1
+ import { DEFAULT_CLAUDE_HIGH_MODEL, DEFAULT_CLAUDE_LITE_MODEL, DEFAULT_CLAUDE_MEDIUM_MODEL, } from "../core/backends/model-registry.js";
2
+ // Seed-row default models are interpolated from MODEL_REGISTRY's canonical
3
+ // constants instead of hardcoded literals so a default-model bump is a
4
+ // one-line edit in `model-registry.ts` (the registry is also the source of
5
+ // truth for tier resolution; see docs/maintenance.md §1). Both constants
6
+ // are internal `as const` strings — no untrusted input feeds these
7
+ // interpolations, so there is no SQL-injection surface.
8
+ const SCHEMA = `
9
+ -- ── Conversation & Messaging ─────────────────────────────────────────────────
10
+
11
+ CREATE TABLE IF NOT EXISTS conversation_sessions (
12
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
13
+ platform TEXT NOT NULL,
14
+ channel_id TEXT NOT NULL,
15
+ thread_id TEXT,
16
+ scope TEXT NOT NULL DEFAULT 'thread'
17
+ CHECK (scope IN ('thread', 'owner_dm', 'dashboard_chat', 'docs_qa')),
18
+ scope_key TEXT NOT NULL DEFAULT '',
19
+ backend_session_id TEXT,
20
+ backend TEXT,
21
+ -- Medium-tier alias to match recurring_schedules / agent_schedule.
22
+ -- Production INSERTs always pass model explicitly (session-manager.ts);
23
+ -- this DEFAULT is the safety-net path. The 'sonnet' alias is resolved
24
+ -- at runtime by claude-code-core.ts:resolveActualModelId so the row
25
+ -- forward-tracks DEFAULT_CLAUDE_MEDIUM_MODEL bumps.
26
+ model TEXT DEFAULT 'sonnet',
27
+ status TEXT DEFAULT 'active' CHECK (status IN ('active', 'expired', 'closed')),
28
+ started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
29
+ last_message_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
30
+ message_count INTEGER DEFAULT 0,
31
+ is_dm INTEGER DEFAULT 0
32
+ );
33
+ CREATE INDEX IF NOT EXISTS idx_sessions_lookup
34
+ ON conversation_sessions(platform, channel_id, thread_id, status);
35
+ CREATE INDEX IF NOT EXISTS idx_sessions_scope
36
+ ON conversation_sessions(scope, scope_key, status);
37
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_conv_sessions_scope_active
38
+ ON conversation_sessions(scope, scope_key)
39
+ WHERE status = 'active';
40
+
41
+ CREATE TABLE IF NOT EXISTS dm_conversation_log (
42
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
43
+ platform TEXT NOT NULL,
44
+ scope TEXT NOT NULL DEFAULT 'platform_dm'
45
+ CHECK (scope IN ('platform_dm', 'owner_dm')),
46
+ scope_key TEXT NOT NULL DEFAULT '',
47
+ summary TEXT NOT NULL,
48
+ message_count INTEGER NOT NULL DEFAULT 0,
49
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
50
+ );
51
+ CREATE INDEX IF NOT EXISTS idx_dm_log_platform
52
+ ON dm_conversation_log(platform, created_at DESC);
53
+ CREATE INDEX IF NOT EXISTS idx_dm_log_scope
54
+ ON dm_conversation_log(scope, scope_key, created_at DESC);
55
+
56
+ CREATE TABLE IF NOT EXISTS messages (
57
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
58
+ session_id INTEGER REFERENCES conversation_sessions(id),
59
+ role TEXT NOT NULL CHECK (role IN ('user', 'assistant', 'system')),
60
+ content TEXT NOT NULL,
61
+ platform TEXT NOT NULL,
62
+ sender_id TEXT,
63
+ timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
64
+ metadata JSON DEFAULT '{}',
65
+ backend TEXT,
66
+ model_id TEXT,
67
+ notification_dispatch_id TEXT
68
+ );
69
+ CREATE INDEX IF NOT EXISTS idx_messages_session ON messages(session_id, timestamp);
70
+
71
+ -- ── Agent Actions & Schedule ──────────────────────────────────────────────────
72
+
73
+ CREATE TABLE IF NOT EXISTS agent_actions (
74
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
75
+ event_id TEXT,
76
+ action_type TEXT NOT NULL,
77
+ trigger TEXT,
78
+ model_used TEXT,
79
+ cost_usd REAL,
80
+ tokens_input INTEGER,
81
+ tokens_output INTEGER,
82
+ duration_ms INTEGER,
83
+ num_turns INTEGER,
84
+ -- DELEGATED-TASK-MODE-DESIGN.md §11.1 — 'in_progress' is a transient
85
+ -- state for delegated_task.exec rows: written before subprocess spawn
86
+ -- so step rows can record the header id, then flipped to
87
+ -- success/failed at completion. The boot-time janitor closes any rows
88
+ -- that survive a crash. All other action_types should still settle to
89
+ -- one of the four terminal states.
90
+ result TEXT CHECK (result IN ('success', 'failed', 'partial', 'skipped', 'in_progress')),
91
+ detail JSON,
92
+ started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
93
+ completed_at TIMESTAMP,
94
+ error TEXT,
95
+ context_updated INTEGER DEFAULT 0,
96
+ cache_creation_tokens INTEGER,
97
+ cache_read_tokens INTEGER,
98
+ model_usage_json TEXT,
99
+ backend TEXT,
100
+ cost_source TEXT,
101
+ advisor_call_count INTEGER NOT NULL DEFAULT 0,
102
+ -- ── Trigger provenance (docs/design/19-dashboard-ia-and-triggers.md) ──
103
+ -- source_kind tags the upstream surface that produced this action:
104
+ -- 'trigger' — fired by an automation_triggers row
105
+ -- 'message' — owner DM / mention / dashboard chat
106
+ -- 'cron' — built-in routine (morning, hourly, evening, ...)
107
+ -- 'observation' — hourly-check consumed pending observations
108
+ -- 'manual' — Run-now / dashboard-driven invocation
109
+ -- NULL — legacy / not yet classified
110
+ -- source_ref is the id of the upstream entity (e.g. trigger id).
111
+ -- These columns are nullable; dispatcher populates them as wiring lands.
112
+ source_kind TEXT,
113
+ source_ref TEXT
114
+ );
115
+ CREATE INDEX IF NOT EXISTS idx_actions_date ON agent_actions(date(started_at));
116
+ CREATE INDEX IF NOT EXISTS idx_agent_actions_backend_time
117
+ ON agent_actions(backend, started_at);
118
+ CREATE INDEX IF NOT EXISTS idx_agent_actions_source
119
+ ON agent_actions(source_kind, source_ref, started_at DESC)
120
+ WHERE source_kind IS NOT NULL;
121
+
122
+ -- recurring_schedules is created before agent_schedule so the FK reference
123
+ -- in agent_schedule is syntactically valid. SQLite doesn't validate FK
124
+ -- targets at CREATE TABLE time so the reverse FK in recurring_schedules is fine.
125
+ CREATE TABLE IF NOT EXISTS recurring_schedules (
126
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
127
+ task_type TEXT NOT NULL,
128
+ task_description TEXT,
129
+ -- Optional override for the agent task body. When NULL, dispatch falls back
130
+ -- to task_description (preserves behavior for system-generated rows that
131
+ -- only carry a short label, and for skill-created schedules predating
132
+ -- this column). When set, replaces task_description as the task-slot
133
+ -- value the dispatcher injects into the task-flow template.
134
+ task_prompt TEXT,
135
+ task_context JSON DEFAULT '{}',
136
+ -- NULL means "no operator override — let BackendRouter resolve tier
137
+ -- from process-key defaults / process_backend_config". Concrete
138
+ -- 'sonnet' / 'opus' is reserved for explicit operator escape hatches
139
+ -- (PATCH /api/recurring-schedules with model field). Defaulting to
140
+ -- 'sonnet' here forced the row's requestedModel downstream and
141
+ -- silently bypassed process_backend_config overrides for
142
+ -- agent.task / agent.dm_task.
143
+ model TEXT,
144
+ recurrence_rule JSON NOT NULL,
145
+ enabled INTEGER NOT NULL DEFAULT 1,
146
+ last_scheduled_id INTEGER,
147
+ next_run_at TIMESTAMP,
148
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
149
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
150
+ FOREIGN KEY (last_scheduled_id) REFERENCES agent_schedule(id)
151
+ );
152
+ CREATE INDEX IF NOT EXISTS idx_recurring_enabled
153
+ ON recurring_schedules(enabled, next_run_at)
154
+ WHERE enabled = 1;
155
+
156
+ CREATE TABLE IF NOT EXISTS agent_schedule (
157
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
158
+ scheduled_for TIMESTAMP NOT NULL,
159
+ task_type TEXT NOT NULL,
160
+ task_description TEXT,
161
+ -- Optional override for the agent task body. See recurring_schedules
162
+ -- for the full rationale. NULL = dispatch uses task_description.
163
+ task_prompt TEXT,
164
+ task_context JSON DEFAULT '{}',
165
+ correlation_id TEXT,
166
+ -- See recurring_schedules.model: NULL means "no override". The
167
+ -- scheduler propagates a non-NULL value as event.requestedModel,
168
+ -- which the dispatcher converts into a hard requestedTier that
169
+ -- supersedes process_backend_config. Default-to-'sonnet' would
170
+ -- pin every materialised row to the light tier and defeat the
171
+ -- per-process backend pinning UI.
172
+ model TEXT,
173
+ status TEXT DEFAULT 'pending'
174
+ CHECK (status IN ('pending', 'running', 'completed', 'skipped', 'failed')),
175
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
176
+ recurring_schedule_id INTEGER REFERENCES recurring_schedules(id)
177
+ );
178
+ CREATE INDEX IF NOT EXISTS idx_schedule_pending
179
+ ON agent_schedule(scheduled_for) WHERE status = 'pending';
180
+
181
+ -- ── Automation Triggers (docs/design/19-dashboard-ia-and-triggers.md) ────────
182
+ --
183
+ -- A Trigger is a per-domain rule: when an event happens, run the LLM with a
184
+ -- user-defined free-form prompt. There is no action_kind enum — the LLM
185
+ -- decides what to do (DM owner, write MD, run analysis) by reading the prompt
186
+ -- and using whatever skills are in scope.
187
+ --
188
+ -- v1 scope: only cron event types are dispatched; for them, a paired
189
+ -- recurring_schedule row carries the schedule and the prompt is propagated
190
+ -- via task_description. Realtime events (push.failed, pr.opened, ...) are
191
+ -- accepted by the schema but not yet wired to observers — see Phase 2.5.
192
+ CREATE TABLE IF NOT EXISTS automation_triggers (
193
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
194
+ domain TEXT NOT NULL,
195
+ event_type TEXT NOT NULL,
196
+ prompt TEXT NOT NULL,
197
+ -- For cron triggers, the recurring_schedules row that drives firing.
198
+ -- ON DELETE SET NULL so a manual recurring_schedule cleanup doesn't
199
+ -- cascade into orphaned triggers; the trigger row stays as a record.
200
+ recurring_schedule_id INTEGER REFERENCES recurring_schedules(id) ON DELETE SET NULL,
201
+ enabled INTEGER NOT NULL DEFAULT 1,
202
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
203
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
204
+ );
205
+ CREATE INDEX IF NOT EXISTS idx_automation_triggers_domain
206
+ ON automation_triggers(domain, enabled);
207
+
208
+ -- ── Notifications & Channels ──────────────────────────────────────────────────
209
+
210
+ CREATE TABLE IF NOT EXISTS notification_log (
211
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
212
+ dispatch_id TEXT NOT NULL DEFAULT '',
213
+ notification_type TEXT,
214
+ priority TEXT CHECK (priority IN ('critical', 'high', 'normal', 'low')),
215
+ platform TEXT,
216
+ delivery_channel TEXT,
217
+ delivery_message_id TEXT,
218
+ content_summary TEXT,
219
+ user_reaction TEXT,
220
+ reacted_at TIMESTAMP,
221
+ status TEXT DEFAULT 'delivered'
222
+ CHECK (status IN ('delivered', 'batched', 'suppressed', 'failed')),
223
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
224
+ delivered_at TIMESTAMP
225
+ );
226
+ CREATE INDEX IF NOT EXISTS idx_notification_dispatch
227
+ ON notification_log(dispatch_id, platform);
228
+
229
+ CREATE TABLE IF NOT EXISTS owner_channels (
230
+ platform TEXT PRIMARY KEY,
231
+ sender_id TEXT,
232
+ channel_id TEXT NOT NULL,
233
+ last_inbound_at TIMESTAMP,
234
+ last_outbound_at TIMESTAMP,
235
+ metadata JSON DEFAULT '{}'
236
+ );
237
+
238
+ -- ── Persistent State & Context ────────────────────────────────────────────────
239
+
240
+ CREATE TABLE IF NOT EXISTS md_file_snapshots (
241
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
242
+ file_path TEXT NOT NULL,
243
+ content TEXT NOT NULL,
244
+ trigger TEXT NOT NULL,
245
+ session_id TEXT,
246
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
247
+ );
248
+ CREATE INDEX IF NOT EXISTS idx_snapshots_file
249
+ ON md_file_snapshots(file_path, created_at DESC);
250
+
251
+ CREATE TABLE IF NOT EXISTS observations (
252
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
253
+ source TEXT NOT NULL,
254
+ ref TEXT NOT NULL,
255
+ change_type TEXT NOT NULL
256
+ CHECK (change_type IN ('created', 'modified', 'deleted')),
257
+ actor TEXT NOT NULL DEFAULT 'user'
258
+ CHECK (actor IN ('user', 'agent', 'system', 'unknown')),
259
+ observed_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
260
+ payload TEXT,
261
+ consumed_at TIMESTAMP,
262
+ consumed_by TEXT,
263
+ -- cost-reduction-structural section A -- pre-summarization at insert time.
264
+ -- The summarizer worker (observers/observation-summarizer.ts) drains
265
+ -- pending rows asynchronously and populates these columns; the
266
+ -- hourly_check skill consumes the summary instead of fetching raw
267
+ -- content unless novelty_score >= 2. NULL novelty_score + non-
268
+ -- 'done' status means hourly_check falls back to legacy fetch-on-doubt.
269
+ summary_text TEXT,
270
+ novelty_score INTEGER CHECK (novelty_score IS NULL OR (novelty_score >= 0 AND novelty_score <= 3)),
271
+ summary_at TEXT,
272
+ summary_backend TEXT,
273
+ summary_status TEXT NOT NULL DEFAULT 'pending'
274
+ CHECK (summary_status IN ('pending', 'done', 'skipped', 'failed'))
275
+ );
276
+ CREATE INDEX IF NOT EXISTS idx_obs_pending
277
+ ON observations(consumed_at) WHERE consumed_at IS NULL;
278
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_obs_unique_pending
279
+ ON observations(source, ref) WHERE consumed_at IS NULL;
280
+ CREATE INDEX IF NOT EXISTS idx_obs_observed_at
281
+ ON observations(observed_at);
282
+ CREATE INDEX IF NOT EXISTS idx_obs_summary_status
283
+ ON observations(summary_status, observed_at);
284
+
285
+ CREATE TABLE IF NOT EXISTS runtime_state (
286
+ key TEXT PRIMARY KEY,
287
+ value_json TEXT NOT NULL,
288
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
289
+ );
290
+
291
+ CREATE TABLE IF NOT EXISTS settings (
292
+ key TEXT PRIMARY KEY,
293
+ value_json TEXT NOT NULL,
294
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
295
+ );
296
+
297
+ CREATE TABLE IF NOT EXISTS user_bang_commands (
298
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
299
+ command TEXT NOT NULL UNIQUE,
300
+ description TEXT NOT NULL DEFAULT '',
301
+ prompt TEXT NOT NULL,
302
+ backend_id TEXT NOT NULL CHECK (backend_id IN ('claude', 'codex', 'gemini')),
303
+ model_id TEXT NOT NULL,
304
+ enabled INTEGER NOT NULL DEFAULT 1,
305
+ -- JSON array of skill slugs to materialize into the per-turn workdir.
306
+ -- NULL = legacy default (notify only). [] = no skills.
307
+ enabled_skills_json TEXT,
308
+ -- Custom CLAUDE.md / AGENTS.md / GEMINI.md profile body. Replaces the
309
+ -- conversational profile when non-NULL; safety preamble + character
310
+ -- block + skills section are still emitted around it.
311
+ instruction_md TEXT,
312
+ created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
313
+ updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
314
+ );
315
+ CREATE INDEX IF NOT EXISTS idx_user_bang_commands_enabled
316
+ ON user_bang_commands(enabled, command);
317
+
318
+ -- ── Unified Repositories (docs/design/appendices/unified-repositories.md) ───
319
+ --
320
+ -- One Repository row replaces the legacy split between gitRepos,
321
+ -- gitWatchedRepos, and githubRepos. A row pairs an optional GitHub
322
+ -- remote and an optional local clone; at least one side must be present
323
+ -- (CHECK constraint). local_only = 1 is an explicit user choice that
324
+ -- forbids ever pairing a GitHub remote — the second CHECK enforces that
325
+ -- the boolean and the columns agree.
326
+
327
+ CREATE TABLE IF NOT EXISTS repositories (
328
+ id TEXT PRIMARY KEY,
329
+ github_owner TEXT,
330
+ github_repo TEXT,
331
+ github_account TEXT,
332
+ local_path TEXT,
333
+ local_only INTEGER NOT NULL DEFAULT 0
334
+ CHECK (local_only IN (0, 1)),
335
+ display_name TEXT,
336
+ classification TEXT NOT NULL DEFAULT 'repo-only'
337
+ CHECK (classification IN ('project', 'repo-only')),
338
+ category TEXT NOT NULL DEFAULT 'other'
339
+ CHECK (category IN ('work', 'personal', 'research', 'client', 'other')),
340
+ poll_priority TEXT NOT NULL DEFAULT 'normal'
341
+ CHECK (poll_priority IN ('high', 'normal')),
342
+ poll_interval_sec INTEGER,
343
+ created_at INTEGER NOT NULL,
344
+ updated_at INTEGER NOT NULL,
345
+ CHECK (
346
+ (github_owner IS NULL AND github_repo IS NULL)
347
+ OR (github_owner IS NOT NULL AND github_repo IS NOT NULL)
348
+ ),
349
+ CHECK (
350
+ (github_owner IS NOT NULL AND github_repo IS NOT NULL)
351
+ OR local_path IS NOT NULL
352
+ ),
353
+ CHECK (
354
+ (local_only = 1 AND github_owner IS NULL AND github_repo IS NULL)
355
+ OR local_only = 0
356
+ )
357
+ );
358
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_repositories_github
359
+ ON repositories (github_owner, github_repo)
360
+ WHERE github_owner IS NOT NULL AND github_repo IS NOT NULL;
361
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_repositories_local
362
+ ON repositories (local_path)
363
+ WHERE local_path IS NOT NULL;
364
+
365
+ CREATE TABLE IF NOT EXISTS repository_triggers (
366
+ id TEXT PRIMARY KEY,
367
+ repository_id TEXT NOT NULL
368
+ REFERENCES repositories(id) ON DELETE CASCADE,
369
+ name TEXT NOT NULL,
370
+ enabled INTEGER NOT NULL DEFAULT 1
371
+ CHECK (enabled IN (0, 1)),
372
+ event_type TEXT NOT NULL,
373
+ filters_json TEXT NOT NULL DEFAULT '{}',
374
+ backend TEXT NOT NULL
375
+ CHECK (backend IN ('claude', 'codex', 'gemini')),
376
+ model TEXT NOT NULL,
377
+ workdir_mode TEXT NOT NULL
378
+ CHECK (workdir_mode IN ('temp', 'local-clone')),
379
+ prompt TEXT NOT NULL,
380
+ instruction_md TEXT,
381
+ last_fired_at INTEGER,
382
+ fire_count INTEGER NOT NULL DEFAULT 0,
383
+ created_at INTEGER NOT NULL,
384
+ updated_at INTEGER NOT NULL,
385
+ CHECK (
386
+ (workdir_mode = 'temp' AND instruction_md IS NOT NULL)
387
+ OR workdir_mode = 'local-clone'
388
+ )
389
+ );
390
+ CREATE INDEX IF NOT EXISTS idx_triggers_repo
391
+ ON repository_triggers (repository_id);
392
+ CREATE INDEX IF NOT EXISTS idx_triggers_event
393
+ ON repository_triggers (event_type, enabled);
394
+
395
+ CREATE TABLE IF NOT EXISTS repository_management (
396
+ repository_id TEXT PRIMARY KEY
397
+ REFERENCES repositories(id) ON DELETE CASCADE,
398
+ enabled INTEGER NOT NULL DEFAULT 0
399
+ CHECK (enabled IN (0, 1)),
400
+ init_completed_at INTEGER,
401
+ last_scan_at INTEGER,
402
+ last_scan_status TEXT
403
+ CHECK (last_scan_status IS NULL OR last_scan_status IN ('ok', 'failed', 'skipped_no_activity')),
404
+ scan_failure_count INTEGER NOT NULL DEFAULT 0,
405
+ created_at INTEGER NOT NULL,
406
+ updated_at INTEGER NOT NULL
407
+ );
408
+
409
+ -- ── Full-text Search (FTS5) ───────────────────────────────────────────────────
410
+
411
+ CREATE VIRTUAL TABLE IF NOT EXISTS fts_actions USING fts5(
412
+ action_type, detail,
413
+ content='agent_actions', content_rowid='id',
414
+ tokenize='trigram'
415
+ );
416
+ CREATE VIRTUAL TABLE IF NOT EXISTS fts_messages USING fts5(
417
+ content,
418
+ content='messages', content_rowid='id',
419
+ tokenize='trigram'
420
+ );
421
+
422
+ CREATE TRIGGER IF NOT EXISTS trg_actions_ai AFTER INSERT ON agent_actions BEGIN
423
+ INSERT INTO fts_actions(rowid, action_type, detail)
424
+ VALUES (new.id, new.action_type, json_extract(new.detail, '$'));
425
+ END;
426
+ CREATE TRIGGER IF NOT EXISTS trg_actions_ad AFTER DELETE ON agent_actions BEGIN
427
+ INSERT INTO fts_actions(fts_actions, rowid, action_type, detail)
428
+ VALUES ('delete', old.id, old.action_type, json_extract(old.detail, '$'));
429
+ END;
430
+ CREATE TRIGGER IF NOT EXISTS trg_messages_ai AFTER INSERT ON messages BEGIN
431
+ INSERT INTO fts_messages(rowid, content) VALUES (new.id, new.content);
432
+ END;
433
+ CREATE TRIGGER IF NOT EXISTS trg_messages_ad AFTER DELETE ON messages BEGIN
434
+ INSERT INTO fts_messages(fts_messages, rowid, content)
435
+ VALUES ('delete', old.id, old.content);
436
+ END;
437
+
438
+ -- ── Docs & QA full-text index (DOCS_QA_DESIGN.md §7) ─────────────────────────
439
+ --
440
+ -- Contentless FTS5 table — the source of truth lives on disk under
441
+ -- docs/user/, the indexer re-builds rows on boot scan and on chokidar
442
+ -- file events. Column order matches the bm25 weights vector
443
+ -- (3.0, 2.5, 2.0, 1.5, 1.2, 1.0) applied at query time. Unindexed columns
444
+ -- (slug, tags, process_keys, config_keys, category, section, status, anchors)
445
+ -- are filter-only and are never ranked.
446
+
447
+ CREATE VIRTUAL TABLE IF NOT EXISTS fts_docs USING fts5(
448
+ slug UNINDEXED,
449
+ title, keywords, aliases, summary, ask_examples, body,
450
+ tags UNINDEXED, process_keys UNINDEXED, config_keys UNINDEXED,
451
+ category UNINDEXED, section UNINDEXED, status UNINDEXED,
452
+ anchors UNINDEXED,
453
+ related UNINDEXED,
454
+ tokenize='trigram'
455
+ );
456
+
457
+ -- ── Docs term subindex (DOCS-QA-SEARCH-PRECISION-PLAN.md §6) ────────────
458
+ --
459
+ -- Term-granular companion to fts_docs. Populated by indexer.ts at the
460
+ -- same time as fts_docs. One row per doc-level "header" (frontmatter
461
+ -- title + aliases + keywords merged) plus one row per H2/H3 section.
462
+ -- Query path: /api/docs/term-search hits this table first; the body
463
+ -- index is a fallback. Tokenizer is unicode61 because term lookups are
464
+ -- almost always Latin-script identifier-style queries; CJK fallback is
465
+ -- handled by the trigram body index.
466
+ CREATE VIRTUAL TABLE IF NOT EXISTS fts_doc_terms USING fts5(
467
+ slug UNINDEXED,
468
+ anchor UNINDEXED,
469
+ term, aliases, summary,
470
+ category UNINDEXED,
471
+ tokenize='unicode61 remove_diacritics 2'
472
+ );
473
+
474
+ -- ── Body word index — DOCS-QA-SEARCH-PRECISION-PLAN.md §7 ───────────────
475
+ --
476
+ -- Word-boundary English companion to fts_docs (which keeps trigram
477
+ -- tokenization for CJK substring fallback). Carries the same ranked-
478
+ -- text columns as fts_docs plus the two filter columns the search
479
+ -- route actually uses (category, tags) so the ASCII branch can stay
480
+ -- a single-table query. Storing UNINDEXED columns on a contentless
481
+ -- FTS5 table costs only the raw bytes — they are not tokenized, do
482
+ -- not participate in BM25, and do not enlarge the FTS index.
483
+ CREATE VIRTUAL TABLE IF NOT EXISTS fts_docs_word USING fts5(
484
+ slug UNINDEXED,
485
+ title, keywords, aliases, summary, ask_examples, body,
486
+ category UNINDEXED, tags UNINDEXED,
487
+ tokenize='unicode61 remove_diacritics 2'
488
+ );
489
+
490
+ -- Side-table per Q7: lets /api/docs/health report indexer drift and the
491
+ -- P5 lint pass detect docs whose on-disk hash diverges from the indexed
492
+ -- copy. (slug, body_hash, frontmatter_hash) is the change-detection
493
+ -- triple; indexed_at is informational.
494
+ CREATE TABLE IF NOT EXISTS docs_revisions (
495
+ slug TEXT PRIMARY KEY,
496
+ body_hash TEXT NOT NULL,
497
+ frontmatter_hash TEXT NOT NULL,
498
+ indexed_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
499
+ );
500
+
501
+ -- ── Multi-backend Config ──────────────────────────────────────────────────────
502
+
503
+ CREATE TABLE IF NOT EXISTS backends (
504
+ id TEXT PRIMARY KEY,
505
+ enabled INTEGER NOT NULL DEFAULT 0,
506
+ auth_method TEXT,
507
+ auth_status TEXT NOT NULL DEFAULT 'unknown',
508
+ auth_checked_at TEXT,
509
+ last_error TEXT,
510
+ created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
511
+ updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
512
+ web_search_enabled INTEGER NOT NULL DEFAULT 0,
513
+ auth_detail TEXT,
514
+ auth_first_expired_at TEXT,
515
+ auth_notified_at TEXT,
516
+ auth_notification_count INTEGER NOT NULL DEFAULT 0,
517
+ auth_last_success_at TEXT,
518
+ auth_keepalive_notified_at TEXT,
519
+ auth_last_verified_at TEXT
520
+ );
521
+
522
+ CREATE TABLE IF NOT EXISTS backend_global_defaults (
523
+ singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
524
+ default_backend TEXT NOT NULL,
525
+ default_lite_model TEXT NOT NULL,
526
+ default_medium_model TEXT NOT NULL,
527
+ default_high_model TEXT NOT NULL,
528
+ updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
529
+ advisor_enabled INTEGER NOT NULL DEFAULT 0,
530
+ advisor_model TEXT,
531
+ FOREIGN KEY (default_backend) REFERENCES backends(id)
532
+ );
533
+
534
+ CREATE TABLE IF NOT EXISTS process_backend_config (
535
+ process_key TEXT PRIMARY KEY,
536
+ main_backend TEXT NOT NULL,
537
+ main_model TEXT NOT NULL,
538
+ fallback_backend TEXT,
539
+ fallback_model TEXT,
540
+ max_turns INTEGER NOT NULL DEFAULT 50,
541
+ max_budget_usd REAL NOT NULL DEFAULT 1.00,
542
+ updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
543
+ updated_by TEXT NOT NULL DEFAULT 'user',
544
+ FOREIGN KEY (main_backend) REFERENCES backends(id),
545
+ FOREIGN KEY (fallback_backend) REFERENCES backends(id)
546
+ );
547
+
548
+ -- ── Auth Telemetry ────────────────────────────────────────────────────────────
549
+
550
+ CREATE TABLE IF NOT EXISTS auth_telemetry_counters (
551
+ backend_id TEXT NOT NULL,
552
+ counter_key TEXT NOT NULL,
553
+ bucket_hour TEXT NOT NULL,
554
+ source TEXT NOT NULL DEFAULT 'reactive',
555
+ count INTEGER NOT NULL DEFAULT 0,
556
+ PRIMARY KEY (backend_id, counter_key, bucket_hour, source)
557
+ );
558
+ CREATE INDEX IF NOT EXISTS idx_auth_telemetry_bucket
559
+ ON auth_telemetry_counters(bucket_hour);
560
+
561
+ -- ── Life Management ───────────────────────────────────────────────────────────
562
+
563
+ CREATE TABLE IF NOT EXISTS books (
564
+ id INTEGER PRIMARY KEY,
565
+ title TEXT NOT NULL,
566
+ author TEXT,
567
+ source TEXT NOT NULL DEFAULT 'kindle',
568
+ status TEXT DEFAULT 'reading',
569
+ started_at TEXT,
570
+ completed_at TEXT,
571
+ rating INTEGER,
572
+ notes TEXT,
573
+ created_at TEXT DEFAULT (datetime('now'))
574
+ );
575
+ CREATE INDEX IF NOT EXISTS idx_books_status ON books(status);
576
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_books_title_author
577
+ ON books(title, COALESCE(author, ''));
578
+
579
+ CREATE TABLE IF NOT EXISTS reading_highlights (
580
+ id INTEGER PRIMARY KEY,
581
+ book_id INTEGER REFERENCES books(id),
582
+ content TEXT NOT NULL,
583
+ location TEXT,
584
+ note TEXT,
585
+ highlighted_at TEXT,
586
+ created_at TEXT DEFAULT (datetime('now'))
587
+ );
588
+ CREATE INDEX IF NOT EXISTS idx_reading_highlights_book
589
+ ON reading_highlights(book_id);
590
+
591
+ -- ── Multi-provider Mail ───────────────────────────────────────────────────────
592
+
593
+ CREATE TABLE IF NOT EXISTS mail_accounts (
594
+ id TEXT PRIMARY KEY,
595
+ kind TEXT NOT NULL,
596
+ email TEXT NOT NULL,
597
+ label TEXT,
598
+ auth_type TEXT NOT NULL,
599
+ auth_status TEXT NOT NULL DEFAULT 'healthy',
600
+ secret_blob_name TEXT NOT NULL,
601
+ poll_cursor_json TEXT,
602
+ poll_interval_seconds INTEGER NOT NULL DEFAULT 300,
603
+ idle_enabled INTEGER NOT NULL DEFAULT 0,
604
+ idle_fallback_until TEXT,
605
+ unified_poll INTEGER NOT NULL DEFAULT 1,
606
+ active INTEGER NOT NULL DEFAULT 1,
607
+ created_at_utc TEXT NOT NULL,
608
+ last_error TEXT,
609
+ last_error_at_utc TEXT,
610
+ last_poll_at_utc TEXT,
611
+ consecutive_error_count INTEGER NOT NULL DEFAULT 0,
612
+ imap_capabilities_json TEXT,
613
+ UNIQUE(kind, email)
614
+ );
615
+
616
+ CREATE TABLE IF NOT EXISTS mail_messages_index (
617
+ account_id TEXT NOT NULL REFERENCES mail_accounts(id) ON DELETE CASCADE,
618
+ provider_msg_id TEXT NOT NULL,
619
+ rfc822_msg_id TEXT,
620
+ thread_id TEXT,
621
+ folder TEXT NOT NULL,
622
+ received_at_utc TEXT NOT NULL,
623
+ subject TEXT,
624
+ from_email TEXT,
625
+ to_emails_json TEXT,
626
+ snippet TEXT,
627
+ is_read INTEGER NOT NULL DEFAULT 0,
628
+ flags_json TEXT,
629
+ has_attachment INTEGER NOT NULL DEFAULT 0,
630
+ deleted_at_utc TEXT,
631
+ observed_at_utc TEXT NOT NULL,
632
+ PRIMARY KEY (account_id, provider_msg_id)
633
+ );
634
+ CREATE INDEX IF NOT EXISTS idx_mail_messages_thread
635
+ ON mail_messages_index(account_id, thread_id);
636
+ CREATE INDEX IF NOT EXISTS idx_mail_messages_received
637
+ ON mail_messages_index(received_at_utc);
638
+ CREATE INDEX IF NOT EXISTS idx_mail_messages_unread
639
+ ON mail_messages_index(account_id, is_read, received_at_utc)
640
+ WHERE is_read = 0 AND deleted_at_utc IS NULL;
641
+
642
+ CREATE VIRTUAL TABLE IF NOT EXISTS fts_mail_messages USING fts5(
643
+ account_id UNINDEXED,
644
+ provider_msg_id UNINDEXED,
645
+ subject,
646
+ snippet,
647
+ tokenize = 'unicode61 remove_diacritics 2'
648
+ );
649
+
650
+ CREATE TRIGGER IF NOT EXISTS trg_mail_messages_ai
651
+ AFTER INSERT ON mail_messages_index
652
+ WHEN NEW.deleted_at_utc IS NULL
653
+ BEGIN
654
+ INSERT INTO fts_mail_messages(account_id, provider_msg_id, subject, snippet)
655
+ VALUES (NEW.account_id, NEW.provider_msg_id,
656
+ COALESCE(NEW.subject, ''), COALESCE(NEW.snippet, ''));
657
+ END;
658
+ CREATE TRIGGER IF NOT EXISTS trg_mail_messages_ad
659
+ AFTER DELETE ON mail_messages_index
660
+ BEGIN
661
+ DELETE FROM fts_mail_messages
662
+ WHERE account_id = OLD.account_id
663
+ AND provider_msg_id = OLD.provider_msg_id;
664
+ END;
665
+ CREATE TRIGGER IF NOT EXISTS trg_mail_messages_au
666
+ AFTER UPDATE OF subject, snippet, deleted_at_utc ON mail_messages_index
667
+ BEGIN
668
+ DELETE FROM fts_mail_messages
669
+ WHERE account_id = OLD.account_id
670
+ AND provider_msg_id = OLD.provider_msg_id;
671
+ INSERT INTO fts_mail_messages(account_id, provider_msg_id, subject, snippet)
672
+ SELECT NEW.account_id, NEW.provider_msg_id,
673
+ COALESCE(NEW.subject, ''), COALESCE(NEW.snippet, '')
674
+ WHERE NEW.deleted_at_utc IS NULL;
675
+ END;
676
+
677
+ CREATE TABLE IF NOT EXISTS parse_failures (
678
+ id INTEGER PRIMARY KEY,
679
+ account_id TEXT,
680
+ provider_msg_id TEXT,
681
+ sender TEXT,
682
+ subject TEXT,
683
+ snippet TEXT,
684
+ error_reason TEXT NOT NULL,
685
+ created_at TEXT DEFAULT (datetime('now'))
686
+ );
687
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_parse_failures_account_msg
688
+ ON parse_failures(account_id, provider_msg_id)
689
+ WHERE provider_msg_id IS NOT NULL;
690
+ CREATE INDEX IF NOT EXISTS idx_parse_failures_created_at
691
+ ON parse_failures(created_at);
692
+ CREATE INDEX IF NOT EXISTS idx_parse_failures_account
693
+ ON parse_failures(account_id);
694
+
695
+ CREATE TABLE IF NOT EXISTS travel_bookings (
696
+ id INTEGER PRIMARY KEY,
697
+ type TEXT NOT NULL,
698
+ provider TEXT NOT NULL,
699
+ destination TEXT,
700
+ start_date TEXT,
701
+ end_date TEXT,
702
+ confirmation_number TEXT,
703
+ amount INTEGER,
704
+ currency TEXT NOT NULL DEFAULT 'USD',
705
+ status TEXT DEFAULT 'upcoming',
706
+ provider_msg_id TEXT,
707
+ account_id TEXT,
708
+ created_at TEXT DEFAULT (datetime('now'))
709
+ );
710
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_travel_bookings_account_msg
711
+ ON travel_bookings(account_id, provider_msg_id)
712
+ WHERE provider_msg_id IS NOT NULL;
713
+ CREATE INDEX IF NOT EXISTS idx_travel_bookings_start ON travel_bookings(start_date);
714
+ CREATE INDEX IF NOT EXISTS idx_travel_bookings_status ON travel_bookings(status);
715
+ CREATE INDEX IF NOT EXISTS idx_travel_bookings_type ON travel_bookings(type);
716
+ CREATE INDEX IF NOT EXISTS idx_travel_bookings_account ON travel_bookings(account_id);
717
+
718
+ CREATE TABLE IF NOT EXISTS receipts (
719
+ id INTEGER PRIMARY KEY,
720
+ provider_msg_id TEXT NOT NULL,
721
+ attachment_id TEXT NOT NULL,
722
+ filename TEXT NOT NULL,
723
+ mime_type TEXT NOT NULL,
724
+ size_bytes INTEGER,
725
+ category TEXT,
726
+ obsidian_path TEXT,
727
+ saved_at TEXT,
728
+ account_id TEXT,
729
+ created_at TEXT DEFAULT (datetime('now')),
730
+ UNIQUE(account_id, provider_msg_id, attachment_id)
731
+ );
732
+ CREATE INDEX IF NOT EXISTS idx_receipts_category ON receipts(category);
733
+ CREATE INDEX IF NOT EXISTS idx_receipts_saved
734
+ ON receipts(saved_at) WHERE saved_at IS NOT NULL;
735
+ CREATE INDEX IF NOT EXISTS idx_receipts_account ON receipts(account_id);
736
+
737
+ -- ── Management Mode ───────────────────────────────────────────────────────────
738
+
739
+ CREATE TABLE IF NOT EXISTS migration_backups (
740
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
741
+ created_at TEXT NOT NULL,
742
+ source_path TEXT NOT NULL,
743
+ target_path TEXT NOT NULL,
744
+ backup_path TEXT NOT NULL,
745
+ files_count INTEGER NOT NULL,
746
+ bytes INTEGER NOT NULL,
747
+ status TEXT NOT NULL CHECK (status IN ('pending', 'completed', 'rolled_back', 'expired')),
748
+ expires_at TEXT NOT NULL,
749
+ rollback_completed_at TEXT
750
+ );
751
+ CREATE INDEX IF NOT EXISTS idx_migration_backups_status_expires
752
+ ON migration_backups(status, expires_at);
753
+
754
+ -- ── MCP Servers ───────────────────────────────────────────────────────────────
755
+
756
+ CREATE TABLE IF NOT EXISTS mcp_servers (
757
+ id TEXT PRIMARY KEY,
758
+ name TEXT NOT NULL,
759
+ transport TEXT NOT NULL CHECK (transport IN ('stdio', 'http', 'sse')),
760
+ command TEXT,
761
+ args TEXT,
762
+ cwd TEXT,
763
+ url TEXT,
764
+ env_keys TEXT NOT NULL DEFAULT '[]',
765
+ header_keys TEXT NOT NULL DEFAULT '[]',
766
+ backends TEXT NOT NULL,
767
+ enabled INTEGER NOT NULL DEFAULT 0,
768
+ risk_tier TEXT NOT NULL DEFAULT 'approve' CHECK (risk_tier IN ('read', 'approve')),
769
+ tool_allowlist TEXT,
770
+ last_probe_at INTEGER,
771
+ last_probe_status TEXT,
772
+ created_at INTEGER NOT NULL,
773
+ updated_at INTEGER NOT NULL
774
+ );
775
+ CREATE INDEX IF NOT EXISTS idx_mcp_servers_enabled ON mcp_servers(enabled);
776
+
777
+ CREATE TABLE IF NOT EXISTS mcp_tool_calls (
778
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
779
+ server_id TEXT NOT NULL,
780
+ tool_name TEXT NOT NULL,
781
+ event_type TEXT,
782
+ session_id TEXT,
783
+ ok INTEGER,
784
+ error TEXT,
785
+ called_at INTEGER NOT NULL,
786
+ duration_ms INTEGER
787
+ );
788
+ CREATE INDEX IF NOT EXISTS idx_mcp_tool_calls_server
789
+ ON mcp_tool_calls(server_id, called_at DESC);
790
+
791
+ -- ── Chat Attachments ──────────────────────────────────────────────────────────
792
+
793
+ CREATE TABLE IF NOT EXISTS chat_attachments (
794
+ id TEXT PRIMARY KEY,
795
+ session_id INTEGER,
796
+ message_id INTEGER,
797
+ direction TEXT NOT NULL CHECK (direction IN ('inbound', 'outbound')),
798
+ provenance TEXT NOT NULL,
799
+ path TEXT NOT NULL,
800
+ original_filename TEXT NOT NULL,
801
+ safe_filename TEXT NOT NULL,
802
+ mime_type TEXT NOT NULL,
803
+ size_bytes INTEGER NOT NULL,
804
+ turn_token TEXT,
805
+ caption TEXT,
806
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
807
+ FOREIGN KEY (session_id) REFERENCES conversation_sessions(id) ON DELETE SET NULL,
808
+ FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
809
+ );
810
+ CREATE INDEX IF NOT EXISTS idx_chat_attachments_session
811
+ ON chat_attachments(session_id);
812
+ CREATE INDEX IF NOT EXISTS idx_chat_attachments_message
813
+ ON chat_attachments(message_id);
814
+ CREATE INDEX IF NOT EXISTS idx_chat_attachments_turn
815
+ ON chat_attachments(turn_token) WHERE turn_token IS NOT NULL;
816
+
817
+ -- ── Voice Transcripts (local Whisper) ────────────────────────────────────────
818
+ -- Cached transcription of inbound audio attachments produced by the
819
+ -- VoiceTranscriber service. Keyed 1:1 to chat_attachments.id so a
820
+ -- re-dispatch of the same turn does not re-run inference. See
821
+ -- docs/design/appendices/voice-transcription.md.
822
+ CREATE TABLE IF NOT EXISTS voice_transcripts (
823
+ attachment_id TEXT PRIMARY KEY
824
+ REFERENCES chat_attachments(id) ON DELETE CASCADE,
825
+ model TEXT NOT NULL,
826
+ language TEXT,
827
+ duration_sec REAL,
828
+ transcript TEXT NOT NULL,
829
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
830
+ );
831
+
832
+ -- ── Integration Delegation ────────────────────────────────────────────────────
833
+
834
+ CREATE TABLE IF NOT EXISTS integration_probes (
835
+ integration_key TEXT NOT NULL,
836
+ backend_id TEXT NOT NULL,
837
+ result_json TEXT NOT NULL,
838
+ probed_at TEXT NOT NULL,
839
+ PRIMARY KEY (integration_key, backend_id)
840
+ );
841
+ CREATE INDEX IF NOT EXISTS idx_integration_probes_recency
842
+ ON integration_probes(probed_at);
843
+
844
+ -- ── Integration Drift Detection (INTEGRATION-DRIFT-DETECTION-PLAN.md §4) ─────
845
+ -- Mode-agnostic snapshot store. Each (integration, window_key) partition
846
+ -- holds the last-fetched payload set; reconcile diffs incoming items against
847
+ -- it. window_key partitions diffs so a deletion in a narrow window does not
848
+ -- emit a phantom 'deleted' for an item still alive in a wider window. The
849
+ -- per-integration normalizer's inWindow predicate further distinguishes
850
+ -- "slid out of window" prunes from real upstream deletions.
851
+ --
852
+ -- payload_json carries only the fields needed for diff + render (target
853
+ -- <2 KB). actor_hint pre-marks items the caller wrote itself; the reconciler
854
+ -- still consults integration_writes (below) as the authoritative source.
855
+ CREATE TABLE IF NOT EXISTS integration_snapshots (
856
+ integration TEXT NOT NULL,
857
+ window_key TEXT NOT NULL,
858
+ item_id TEXT NOT NULL,
859
+ content_hash TEXT NOT NULL,
860
+ payload_json TEXT NOT NULL,
861
+ item_start TEXT,
862
+ fetched_at TEXT NOT NULL,
863
+ actor_hint TEXT NOT NULL DEFAULT 'user'
864
+ CHECK (actor_hint IN ('user', 'agent', 'system', 'unknown')),
865
+ PRIMARY KEY (integration, window_key, item_id)
866
+ );
867
+ -- Imminent-event scheduler scans this index range to find calendar events
868
+ -- starting in [now, now+15min] without a full table scan.
869
+ CREATE INDEX IF NOT EXISTS idx_integration_snapshots_imminent
870
+ ON integration_snapshots(integration, item_start)
871
+ WHERE item_start IS NOT NULL;
872
+ CREATE INDEX IF NOT EXISTS idx_integration_snapshots_fetched_at
873
+ ON integration_snapshots(integration, window_key, fetched_at);
874
+
875
+ -- Generalises AgentWriteTracker (in-memory, path-keyed) to integration
876
+ -- writes with (integration, item_id) keys that survive process restarts.
877
+ -- Reconcile consults this on every created/modified diff entry: a row
878
+ -- whose expires_at > now tags the diff actor='agent' instead of 'user',
879
+ -- so the agent's own calendar/mail/notion writes do not surface as
880
+ -- user-originated observations on the next reconcile.
881
+ --
882
+ -- TTL default is set per-integration in code (15 min for calendar, 30 min
883
+ -- for slower-cadence integrations like Gmail/Notion). Cleanup runs as part
884
+ -- of the daily retention pass.
885
+ CREATE TABLE IF NOT EXISTS integration_writes (
886
+ integration TEXT NOT NULL,
887
+ item_id TEXT NOT NULL,
888
+ written_at TEXT NOT NULL,
889
+ written_by TEXT NOT NULL DEFAULT 'agent',
890
+ expires_at TEXT NOT NULL,
891
+ PRIMARY KEY (integration, item_id)
892
+ );
893
+ CREATE INDEX IF NOT EXISTS idx_integration_writes_expires
894
+ ON integration_writes(expires_at);
895
+
896
+ -- INTEGRATION-DRIFT-PHASE-7-PLAN.md §3.2 — persistent dedup for the
897
+ -- 15-minute imminent-meeting reminder. Pre-Phase-7 the scheduler kept
898
+ -- an in-memory Set, which was lost on every daemon restart and re-DMed
899
+ -- every imminent event whose start lay within the next 15 minutes. The
900
+ -- table is a separate primary-key store (not a column on
901
+ -- integration_snapshots) so adding it is idempotent under the project's
902
+ -- CREATE-IF-NOT-EXISTS-only policy regardless of prior schema state.
903
+ -- Cleanup runs daily via retention.ts (rows older than 24 h are pruned;
904
+ -- a calendar event cannot stay imminent longer than 15 min so 24 h is a
905
+ -- comfortable safety margin).
906
+ CREATE TABLE IF NOT EXISTS imminent_event_notifications (
907
+ item_id TEXT PRIMARY KEY,
908
+ notified_at TEXT NOT NULL
909
+ );
910
+ CREATE INDEX IF NOT EXISTS idx_imminent_event_notifications_notified_at
911
+ ON imminent_event_notifications(notified_at);
912
+
913
+ -- ── Management Registry & Entities (docs/design/21-management-registry-and-entities.md) ──
914
+ --
915
+ -- L1 — Section B authoritative storage for managed tasks (§9.2).
916
+ -- The file at <contextDir>/rules/management.md is a deterministic render
917
+ -- from this table; user hand-edits are parsed back via the registry
918
+ -- watcher (§7.2 management-registry.ts), with parse failures triggering
919
+ -- a re-render from this table (FR-13).
920
+ --
921
+ -- Hard-delete on stop (§8.5 ADR): rows are removed when the user stops a
922
+ -- managed task. History is recovered from \`agent_actions\` rows tagged
923
+ -- \`management_task.*\` plus \`md_file_snapshots\` for the file itself.
924
+ --
925
+ -- The (app_normalized, cadence) UNIQUE constraint is the DB-layer
926
+ -- defense for §NFR-3 / §12 ("two registrations from two devices") —
927
+ -- since stops are hard-delete, the constraint applies to all rows.
928
+ CREATE TABLE IF NOT EXISTS managed_tasks (
929
+ -- 'mt_<n>' allocated from managed_task_seq. Never reused so historical
930
+ -- agent_actions references stay unambiguous after a stop+re-register.
931
+ id TEXT PRIMARY KEY,
932
+ -- Free-text user-typed description rendered in management.md's "Intent"
933
+ -- column. Length-capped via APP/INTENT validators in management-domains.ts.
934
+ intent TEXT NOT NULL,
935
+ -- User-typed app label as it appears in management.md's "App" column.
936
+ app TEXT NOT NULL,
937
+ -- Lower-cased + whitespace-collapsed dedup key (normalizeAppLabel).
938
+ -- Indexed below for the registration-time semantic-dedup probe.
939
+ app_normalized TEXT NOT NULL,
940
+ -- Human-readable cadence string (e.g. "daily 10:00 (Asia/Tokyo)").
941
+ -- The cron form lives on recurring_schedules; this column preserves
942
+ -- the user's natural-language phrasing for the rendered table.
943
+ cadence TEXT NOT NULL,
944
+ -- Primary L2 directory (e.g. 'work/meetings/'). The leading 'context/'
945
+ -- is implicit. NULL is permitted only between row creation and the
946
+ -- first successful run (§FR-16); the scheduled-managed-task skill
947
+ -- backfills it on first fire. The CHECK enforces the trailing-slash
948
+ -- invariant from §9.1; the <domain>/<type-plural> shape is enforced
949
+ -- by the API layer via isValidOutputPath().
950
+ output_path TEXT,
951
+ -- One-to-one with the underlying recurring_schedules row. ON DELETE
952
+ -- CASCADE means deleting the schedule cleans up the managed-task row.
953
+ -- The user-facing stop flow (§10.3) deletes managed_tasks first and
954
+ -- the API route then deletes the matching recurring_schedules row in
955
+ -- the same transaction; the FK + UNIQUE here are the integrity floor.
956
+ schedule_id INTEGER NOT NULL UNIQUE
957
+ REFERENCES recurring_schedules(id) ON DELETE CASCADE,
958
+ -- ISO-8601 UTC. Set by scheduled-managed-task on every fire.
959
+ last_run_at TEXT,
960
+ -- Free text 'ok (3 new)' / 'failed: ...' (≤120 chars; enforced by
961
+ -- managedTaskRunResultSchema rather than a CHECK).
962
+ last_result TEXT,
963
+ -- Bumped on each failed fire; reset on success. Used by §10.4's
964
+ -- three-strikes notify rule.
965
+ consecutive_failures INTEGER NOT NULL DEFAULT 0,
966
+ created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
967
+ updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
968
+ CHECK (output_path IS NULL OR output_path LIKE '%/'),
969
+ -- §NFR-3 / §12 — defense-in-depth dedup floor.
970
+ --
971
+ -- IMPORTANT: this UNIQUE keys on the *human-readable* cadence string
972
+ -- ("daily 10:00 (Asia/Tokyo)"), NOT on the resolved cron. So two
973
+ -- semantically-equivalent natural-language phrasings -- "every day
974
+ -- at 10am" vs the same intent rephrased -- slip past this check;
975
+ -- the LLM-judged semantic dedup at registration time (§10.1 step 2)
976
+ -- is the primary defense.
977
+ --
978
+ -- The constraint still helps: it catches exact-string retries and
979
+ -- prevents accidental dual-DM duplicates from racing into the DB.
980
+ -- Future work (tracked in OQ alongside output_path multi-paths) is to
981
+ -- denormalize the cron string onto this table and switch the
982
+ -- UNIQUE key to (app_normalized, cron). That is a Phase 3 / route-
983
+ -- layer concern, not a P1 schema change, since both sides need to
984
+ -- agree on cron-normalization rules first.
985
+ UNIQUE (app_normalized, cadence)
986
+ );
987
+ CREATE INDEX IF NOT EXISTS idx_managed_tasks_app
988
+ ON managed_tasks(app_normalized);
989
+ CREATE INDEX IF NOT EXISTS idx_managed_tasks_output_path
990
+ ON managed_tasks(output_path)
991
+ WHERE output_path IS NOT NULL;
992
+
993
+ -- §9.2 — sequence allocator for stable mt_<n> ids that survive deletes.
994
+ -- Singleton row enforced via PK CHECK; the seed below is idempotent
995
+ -- (INSERT OR IGNORE) so re-applying the schema is a no-op.
996
+ CREATE TABLE IF NOT EXISTS managed_task_seq (
997
+ singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
998
+ next_id INTEGER NOT NULL DEFAULT 1
999
+ );
1000
+ INSERT OR IGNORE INTO managed_task_seq (singleton, next_id) VALUES (1, 1);
1001
+
1002
+ -- §7.6 — entity-mirror table. NOT authoritative (the L2 .md file is);
1003
+ -- this is a watcher-maintained SQLite mirror that backs the §7.6 lookup
1004
+ -- contract (GET /api/entities). On boot, the entity-mirror reconciler
1005
+ -- walks the L2 directory tree and rebuilds this table; if the mirror
1006
+ -- diverges from disk, the file wins and the table is rewritten.
1007
+ --
1008
+ -- 'path' is the relative-to-contextDir form ('work/meetings/foo.md'),
1009
+ -- matching parseEntityPath() output and the .sources frontmatter
1010
+ -- structure documented in §9.3.
1011
+ CREATE TABLE IF NOT EXISTS entities (
1012
+ path TEXT PRIMARY KEY,
1013
+ domain TEXT NOT NULL,
1014
+ -- Singular form ('meeting', 'trip', ...) — matches frontmatter.type.
1015
+ type TEXT NOT NULL,
1016
+ slug TEXT NOT NULL,
1017
+ title TEXT NOT NULL,
1018
+ status TEXT,
1019
+ -- ISO date when present in frontmatter; NULL when the entity has
1020
+ -- no calendar-style anchor (e.g. an open-ended project).
1021
+ date TEXT,
1022
+ last_synced_at TEXT,
1023
+ -- Verbatim mirror of frontmatter.sources (JSON object). Indexed
1024
+ -- key membership lives in entity_source_keys (sidecar) so the §7.6
1025
+ -- (source_key, external_id) lookup runs through a real index.
1026
+ sources_json TEXT NOT NULL DEFAULT '{}'
1027
+ );
1028
+ CREATE INDEX IF NOT EXISTS idx_entities_domain_type_date
1029
+ ON entities(domain, type, date);
1030
+ CREATE INDEX IF NOT EXISTS idx_entities_status
1031
+ ON entities(status)
1032
+ WHERE status IS NOT NULL;
1033
+
1034
+ -- §7.6.1 — sidecar M:N index from entity path → source-key. SQLite's
1035
+ -- json_each is a virtual table and not indexable, so this sidecar
1036
+ -- provides the (source_key, ...) seek path. Insert/update is atomic
1037
+ -- with the parent entities upsert; ON DELETE CASCADE keeps the two
1038
+ -- in lockstep when an entity row is removed.
1039
+ --
1040
+ -- 'source_key' is the verbatim user-typed key (the JSON path into
1041
+ -- 'sources_json' uses it as-is). 'source_key_normalized' is the
1042
+ -- lower-cased dedup form — joins from the activity-view + by-source
1043
+ -- lookups match through it so a third casing variant (ZOOM vs Zoom vs
1044
+ -- zoom) doesn't silently drop a row from the rendered view.
1045
+ CREATE TABLE IF NOT EXISTS entity_source_keys (
1046
+ path TEXT NOT NULL REFERENCES entities(path) ON DELETE CASCADE,
1047
+ source_key TEXT NOT NULL,
1048
+ source_key_normalized TEXT GENERATED ALWAYS AS (LOWER(source_key)) STORED,
1049
+ PRIMARY KEY (path, source_key)
1050
+ );
1051
+ CREATE INDEX IF NOT EXISTS idx_entity_source_keys_lookup
1052
+ ON entity_source_keys(source_key, path);
1053
+ CREATE INDEX IF NOT EXISTS idx_entity_source_keys_normalized
1054
+ ON entity_source_keys(source_key_normalized, path);
1055
+
1056
+ -- §9.1 parse rules — drop-with-warning destination for management.md hand-edit
1057
+ -- failures. The mail-side \`parse_failures\` table above is shaped for IMAP
1058
+ -- ingestion (account_id, provider_msg_id); reusing it would have forced
1059
+ -- nullable mail columns onto a vault-rules failure record. A dedicated
1060
+ -- table keeps the shapes loose-coupled and lets dashboard consumers query
1061
+ -- one or the other without UNION gymnastics.
1062
+ --
1063
+ -- Rows are surfaced on the dashboard's degraded-mode banner (P6) and in the
1064
+ -- §14.3 metric \`aitne_management_parse_failures_total\` (P8). Retention:
1065
+ -- swept by the existing daily retention job alongside other transient
1066
+ -- diagnostics — see core/retention.ts (additive at P8).
1067
+ CREATE TABLE IF NOT EXISTS management_parse_failures (
1068
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
1069
+ -- Section identifier ('A', 'B', 'C') so the dashboard can surface the
1070
+ -- right hint. NULL when the failure is at file level (frontmatter, etc).
1071
+ section TEXT,
1072
+ -- Free-text reason, stable across releases (callers grep by prefix).
1073
+ reason TEXT NOT NULL,
1074
+ -- Verbatim raw line / cell that failed; helps the user repair the edit.
1075
+ raw TEXT,
1076
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
1077
+ );
1078
+ CREATE INDEX IF NOT EXISTS idx_management_parse_failures_created_at
1079
+ ON management_parse_failures(created_at DESC);
1080
+
1081
+ -- ── Skill curation (P22 — appendix p22-skill-self-optimization.md) ──────────
1082
+ --
1083
+ -- Three tables that drive the self-curation loop. Signals are the evidence
1084
+ -- stream — Preview release ships only structure_diff (the hourly walker);
1085
+ -- search_miss / agent_feedback / owner_correction signal types were
1086
+ -- removed when the feature pivoted to "silent background optimization,
1087
+ -- no user feedback collection". Proposals are the optimizer agent's typed-
1088
+ -- payload submissions; runs are an explicit envelope for correlating
1089
+ -- proposals + run-token validation.
1090
+
1091
+ CREATE TABLE IF NOT EXISTS skill_curation_signals (
1092
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
1093
+ skill_slug TEXT NOT NULL,
1094
+ section_id TEXT,
1095
+ signal_type TEXT NOT NULL CHECK (signal_type IN ('structure_diff')),
1096
+ payload_json TEXT NOT NULL,
1097
+ observed_at INTEGER NOT NULL,
1098
+ consumed_at INTEGER,
1099
+ consumed_by_proposal_id INTEGER
1100
+ );
1101
+ CREATE INDEX IF NOT EXISTS idx_skill_signals_unconsumed
1102
+ ON skill_curation_signals(skill_slug, consumed_at)
1103
+ WHERE consumed_at IS NULL;
1104
+ CREATE INDEX IF NOT EXISTS idx_skill_signals_observed_at
1105
+ ON skill_curation_signals(observed_at);
1106
+
1107
+ CREATE TABLE IF NOT EXISTS skill_curation_proposals (
1108
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
1109
+ run_id TEXT NOT NULL,
1110
+ skill_slug TEXT NOT NULL,
1111
+ section_id TEXT NOT NULL,
1112
+ section_kind TEXT NOT NULL,
1113
+ schema_version INTEGER NOT NULL,
1114
+ renderer_version_at_proposal TEXT NOT NULL,
1115
+ prev_payload_json TEXT NOT NULL,
1116
+ new_payload_json TEXT NOT NULL,
1117
+ rendered_md TEXT NOT NULL,
1118
+ diff_additions INTEGER NOT NULL,
1119
+ diff_modifications INTEGER NOT NULL,
1120
+ diff_removals INTEGER NOT NULL,
1121
+ diff_kind TEXT NOT NULL CHECK (diff_kind IN (
1122
+ 'additive_only', 'cosmetic_only', 'mixed', 'destructive'
1123
+ )),
1124
+ rationale TEXT NOT NULL,
1125
+ signals_json TEXT NOT NULL,
1126
+ smoke_passed_at INTEGER,
1127
+ smoke_failures_json TEXT,
1128
+ -- Per P22 §4 (post-approval-removal): every proposal that survives the
1129
+ -- chokepoint is 'applied' immediately; the only system-driven roll-back
1130
+ -- is 'auto_reverted' (set by the §5.3 sweep). All other terminal
1131
+ -- statuses describe rejection causes — the row is still persisted so
1132
+ -- failed attempts remain inspectable from the dashboard.
1133
+ status TEXT NOT NULL CHECK (status IN (
1134
+ 'applied', 'auto_reverted', 'conflict',
1135
+ 'smoke_failed', 'diff_caps', 'render_budget'
1136
+ )),
1137
+ proposed_at INTEGER NOT NULL,
1138
+ decided_at INTEGER,
1139
+ decided_by TEXT,
1140
+ applied_overlay_path TEXT
1141
+ );
1142
+ CREATE INDEX IF NOT EXISTS idx_proposals_status
1143
+ ON skill_curation_proposals(status, proposed_at DESC);
1144
+ CREATE INDEX IF NOT EXISTS idx_proposals_skill_section
1145
+ ON skill_curation_proposals(skill_slug, section_id, proposed_at DESC);
1146
+ CREATE INDEX IF NOT EXISTS idx_proposals_run
1147
+ ON skill_curation_proposals(run_id);
1148
+
1149
+ CREATE TABLE IF NOT EXISTS skill_curation_runs (
1150
+ id TEXT PRIMARY KEY,
1151
+ started_at INTEGER NOT NULL,
1152
+ finalized_at INTEGER,
1153
+ cadence TEXT NOT NULL,
1154
+ backend TEXT NOT NULL,
1155
+ model TEXT NOT NULL,
1156
+ target_skills_json TEXT NOT NULL,
1157
+ status TEXT NOT NULL DEFAULT 'running' CHECK (status IN (
1158
+ 'running', 'finalized', 'aborted'
1159
+ )),
1160
+ proposal_count INTEGER NOT NULL DEFAULT 0,
1161
+ notes TEXT,
1162
+ -- 0 = scheduler/cadence-driven, 1 = owner-clicked "Run now" (P22 §6.4).
1163
+ -- Manual runs reset the cadence interval gate (auto-cron sleeps for one
1164
+ -- cadence interval after a manual click).
1165
+ is_manual INTEGER NOT NULL DEFAULT 0
1166
+ );
1167
+ CREATE INDEX IF NOT EXISTS idx_skill_runs_started
1168
+ ON skill_curation_runs(started_at DESC);
1169
+
1170
+ -- ── Seed data ─────────────────────────────────────────────────────────────────
1171
+
1172
+ INSERT OR IGNORE INTO backends
1173
+ (id, enabled, auth_status, auth_notification_count, web_search_enabled, created_at, updated_at)
1174
+ VALUES
1175
+ ('claude', 1, 'unknown', 0, 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
1176
+ ('codex', 0, 'unknown', 0, 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
1177
+ ('gemini', 0, 'unknown', 0, 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
1178
+
1179
+ INSERT OR IGNORE INTO backend_global_defaults
1180
+ (singleton, default_backend, default_lite_model, default_medium_model, default_high_model, advisor_enabled, updated_at)
1181
+ VALUES
1182
+ (1, 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', '${DEFAULT_CLAUDE_HIGH_MODEL}', 0, CURRENT_TIMESTAMP);
1183
+
1184
+ -- Per-process seeds. Two tiers are wired in at install time:
1185
+ -- - Sonnet (DEFAULT_CLAUDE_MEDIUM_MODEL) for "main agent work" surfaces
1186
+ -- where output quality drives the operator's daily experience: DMs,
1187
+ -- dashboard chat, hourly check, daily/weekly/monthly review, morning
1188
+ -- routine, scheduled tasks, git.project.* one-shots. Standard
1189
+ -- 50-turn / $1.00 envelope (git.project.* span 30–100 turns and
1190
+ -- $0.50–$2.00 — retemplate is widest because re-template work is
1191
+ -- unbounded by shape).
1192
+ -- - Haiku (DEFAULT_CLAUDE_LITE_MODEL) for "delegated/simple" surfaces —
1193
+ -- Gmail classification, GitHub event triage, git-poll observers,
1194
+ -- calendar-change handlers. Tight 20-turn / $0.20 envelope keeps an
1195
+ -- autonomous loop bounded.
1196
+ -- No row seeds at the Opus tier (DEFAULT_CLAUDE_HIGH_MODEL); the
1197
+ -- onboarding briefing (routine.morning_routine_initial) and knowledge
1198
+ -- import (knowledge.import) resolve to high via tier inference but have
1199
+ -- no install-time row in this table. Operators can pin any row to Opus
1200
+ -- per-row from /settings/models when one-shot quality matters most.
1201
+ INSERT OR IGNORE INTO process_backend_config
1202
+ (process_key, main_backend, main_model, max_turns, max_budget_usd, updated_by)
1203
+ VALUES
1204
+ ('message.dm', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 50, 1.00, 'user'),
1205
+ ('message.mention', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 50, 1.00, 'user'),
1206
+ ('dashboard.chat', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 50, 1.00, 'user'),
1207
+ -- DOCS_QA_DESIGN.md §10.2 — seeded with updated_by='cascade' so the
1208
+ -- first user-driven write to message.dm cascades into this row. If we
1209
+ -- seeded as 'user', the cascade would skip and dashboard.docs_qa
1210
+ -- would silently drift on day one. Envelope (20 turns, $0.50) matches
1211
+ -- INHERITOR_DEFAULTS in process-config-cascade.ts.
1212
+ ('dashboard.docs_qa', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 20, 0.50, 'cascade'),
1213
+ ('routine.morning_routine', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 50, 1.00, 'user'),
1214
+ ('routine.hourly_check', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 50, 1.00, 'user'),
1215
+ -- $0.30 budget: a typical drift-triggered refresh on Sonnet runs ~$0.10
1216
+ -- in 4 turns; the previous $0.10 cap left zero headroom and any larger
1217
+ -- today.md / longer drift summary tipped over the SDK max_budget guard
1218
+ -- and surfaced as BackendQuotaError(max_budget_usd). 3x observed cost
1219
+ -- matches the headroom convention used by dashboard.docs_qa.
1220
+ ('routine.today_refresh', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 20, 0.30, 'user'),
1221
+ ('routine.evening_review', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 50, 1.00, 'user'),
1222
+ ('routine.weekly_review', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 50, 1.00, 'user'),
1223
+ ('routine.monthly_review', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 50, 1.00, 'user'),
1224
+ -- Delegated / simple backend surfaces — Haiku (lite tier), tighter envelope.
1225
+ ('calendar.change', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 20, 0.20, 'user'),
1226
+ ('gmail_classify', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 20, 0.20, 'user'),
1227
+ ('github.pull_request.review_requested', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 20, 0.20, 'user'),
1228
+ ('github.assigned', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 20, 0.20, 'user'),
1229
+ ('github.security_alert', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 20, 0.20, 'user'),
1230
+ ('github.workflow_run.failed', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 20, 0.20, 'user'),
1231
+ ('git.push.detected', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 20, 0.20, 'user'),
1232
+ ('git.local_ahead.stale', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 20, 0.20, 'user'),
1233
+ ('git.push.force_pushed', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 20, 0.20, 'user'),
1234
+ ('git.branch.created', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 20, 0.20, 'user'),
1235
+ ('git.tag.created', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 20, 0.20, 'user'),
1236
+ ('git.merge_to_default', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 20, 0.20, 'user'),
1237
+ -- git.project.init / .update / .retemplate are operator-driven one-shot
1238
+ -- runs whose output goes straight into curated project docs. All three
1239
+ -- seed at medium tier (Sonnet); operators who want a heavier model can
1240
+ -- pin per-row from /settings/models. Envelopes are sized so the $
1241
+ -- cap binds first on Sonnet (per-turn ~5x cheaper than Opus, so the
1242
+ -- previous Opus-era caps were retuned: init 50/$2 → 50/$1 and
1243
+ -- retemplate 200/$5 → 100/$2 — same effective bound, no free 5x
1244
+ -- runaway headroom). Update was always Sonnet, unchanged.
1245
+ ('git.project.init', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 50, 1.00, 'user'),
1246
+ ('git.project.update', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 30, 0.50, 'user'),
1247
+ ('git.project.retemplate', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 100, 2.00, 'user'),
1248
+ ('git.lifecycle.poll', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 20, 0.20, 'user'),
1249
+ ('agent.task', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 50, 1.00, 'user'),
1250
+ -- P22 — skill self-optimization. Medium tier with a small envelope; the
1251
+ -- workdir is read-only besides the curation API, so the optimizer only
1252
+ -- needs enough turns to GET signals + payloads and POST proposals. The
1253
+ -- per-run rate limit (max 20 proposals) keeps this bounded even on a
1254
+ -- runaway prompt.
1255
+ ('routine.skill_curation', 'claude', '${DEFAULT_CLAUDE_MEDIUM_MODEL}', 60, 0.50, 'user'),
1256
+ -- cost-reduction-structural §A — per-observation summarizer. Lite tier
1257
+ -- (Haiku-class) with a tight 1-turn / $0.05 envelope. The summarizer
1258
+ -- is a single non-tool model call per observation; turns/budget are
1259
+ -- intentionally tight so a runaway prompt or accidental loop is
1260
+ -- bounded inside the worker's per-call timeout.
1261
+ ('observation.summarize', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 1, 0.05, 'user'),
1262
+ -- cost-reduction-structural §B — Stage 2 lite-tier triage. Strict
1263
+ -- JSON-only output (~2K input / ~50 output) decides log_only vs
1264
+ -- escalate. 1-turn / $0.05 mirrors observation.summarize: the
1265
+ -- dispatcher clamps allowedToolsOverride to [] (Claude only) and
1266
+ -- the seeded max_turns=1 caps every backend at one assistant turn,
1267
+ -- so this envelope is the absolute ceiling — defense-in-depth on
1268
+ -- top of the prompt's "no tools" contract.
1269
+ ('routine.hourly_check.triage', 'claude', '${DEFAULT_CLAUDE_LITE_MODEL}', 1, 0.05, 'user');
1270
+
1271
+ INSERT OR IGNORE INTO settings (key, value_json, updated_at)
1272
+ VALUES (
1273
+ 'integrations',
1274
+ json_object(
1275
+ 'gmail', json_object('mode', 'disabled', 'lastChangedAt', strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
1276
+ 'google_calendar', json_object('mode', 'disabled', 'lastChangedAt', strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
1277
+ 'notion', json_object('mode', 'disabled', 'lastChangedAt', strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
1278
+ 'git', json_object('mode', 'direct', 'lastChangedAt', strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
1279
+ 'github', json_object('mode', 'direct', 'lastChangedAt', strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
1280
+ ),
1281
+ CURRENT_TIMESTAMP
1282
+ );
1283
+
1284
+ -- ── Stage C DM-freshness rollup (STAGE-C-DM-FRESHNESS-PLAN §Task 4) ────────
1285
+ -- Per-day rollup of DM dispatches that recorded freshness telemetry. The
1286
+ -- view filters on the JSON probe (\`dm_freshness IS NOT NULL\`) rather than
1287
+ -- a specific event-type whitelist so it picks up every DM action_type the
1288
+ -- dispatch path tags — this avoids drift if a future event type joins the
1289
+ -- DM dispatch surface. Read by GET /api/dashboard/dm-freshness; the
1290
+ -- endpoint additionally exposes p50/p95 lag computed in JS because SQLite
1291
+ -- has no native percentile_cont.
1292
+ CREATE VIEW IF NOT EXISTS dm_freshness_metrics AS
1293
+ SELECT
1294
+ date(started_at) AS day,
1295
+ COUNT(*) AS total_dm_turns,
1296
+ SUM(CASE WHEN json_extract(detail, '$.dm_freshness.resumed') = 1 THEN 1 ELSE 0 END) AS resumed_turns,
1297
+ AVG(CAST(json_extract(detail, '$.dm_freshness.agent_log_lag_minutes') AS REAL)) AS avg_lag_minutes,
1298
+ SUM(CASE WHEN json_extract(detail, '$.dm_freshness.trigger_matched') = 1 THEN 1 ELSE 0 END) AS trigger_matched_turns,
1299
+ SUM(CASE
1300
+ WHEN json_extract(detail, '$.dm_freshness.trigger_matched') = 1
1301
+ AND json_extract(detail, '$.dm_freshness.refetched_today') = 1
1302
+ THEN 1 ELSE 0 END) AS refetch_hits,
1303
+ SUM(CAST(json_extract(detail, '$.dm_freshness.loud_writes_since_session_start') AS INTEGER)) AS total_loud_writes_seen,
1304
+ SUM(CAST(json_extract(detail, '$.dm_freshness.quiet_writes_since_session_start') AS INTEGER)) AS total_quiet_writes_seen
1305
+ FROM agent_actions
1306
+ WHERE json_extract(detail, '$.dm_freshness') IS NOT NULL
1307
+ GROUP BY day
1308
+ ORDER BY day DESC;
1309
+ `;
1310
+ /** Apply the complete schema and seed data to a database. Idempotent. */
1311
+ export function applySchema(db) {
1312
+ db.exec(SCHEMA);
1313
+ ensureMessagesNotificationDispatchColumn(db);
1314
+ ensureUserBangCommandsCustomColumns(db);
1315
+ db.exec(`
1316
+ CREATE INDEX IF NOT EXISTS idx_messages_dispatch
1317
+ ON messages(notification_dispatch_id)
1318
+ WHERE notification_dispatch_id IS NOT NULL;
1319
+ `);
1320
+ }
1321
+ function ensureMessagesNotificationDispatchColumn(db) {
1322
+ const columns = db.pragma("table_info(messages)");
1323
+ if (columns.some((column) => column.name === "notification_dispatch_id")) {
1324
+ return;
1325
+ }
1326
+ db.exec("ALTER TABLE messages ADD COLUMN notification_dispatch_id TEXT");
1327
+ }
1328
+ function ensureUserBangCommandsCustomColumns(db) {
1329
+ const columns = db.pragma("table_info(user_bang_commands)");
1330
+ const names = new Set(columns.map((column) => column.name));
1331
+ if (!names.has("enabled_skills_json")) {
1332
+ db.exec("ALTER TABLE user_bang_commands ADD COLUMN enabled_skills_json TEXT");
1333
+ }
1334
+ if (!names.has("instruction_md")) {
1335
+ db.exec("ALTER TABLE user_bang_commands ADD COLUMN instruction_md TEXT");
1336
+ }
1337
+ }
1338
+ //# sourceMappingURL=schema.js.map