@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,1384 @@
1
+ import { Hono } from "hono";
2
+ import { BACKEND_IDS, DELEGATED_TASK_HARD_CAPS, INTEGRATION_DESCRIPTORS, INTEGRATION_KEYS, filterDeniedToolsForBackend, integrationPatchSchema, isIntegrationKey, recommendedStarterDeniedTools, validateDeniedTools, } from "@aitne/shared";
3
+ // `matchToolPattern` and `mapErrorClassToHttpStatus` were used by the
4
+ // dormant `/invoke` route reservation block-commented at lines ~708-896.
5
+ // They are removed from the import list because eslint flags them as
6
+ // unused; re-add when un-commenting that block.
7
+ import { checkOutputSchema } from "../../services/delegated-task-runtime.js";
8
+ import { readIntegrations, updateIntegrationState, } from "../../db/integrations-store.js";
9
+ import { writeManagementMd } from "../../core/management-md.js";
10
+ import { missingDelegatedVariants } from "../../core/skills-compiler.js";
11
+ import { evaluateProbe, getConnector, makeUserManagedProbeResult, } from "../../core/integration-probe.js";
12
+ import { LiveProbeUnsupportedError } from "../../core/agent-core.js";
13
+ import { deleteProbesForIntegration, readProbe, writeProbe, } from "../../db/integration-probe-store.js";
14
+ import { knownProxyModels, listProxyModelOptions, proxyModelIsKnown, resolveCanonicalDelegatedModel, } from "../../core/backends/proxy-model-registry.js";
15
+ import { readJsonBody } from "../json-body.js";
16
+ import { createLogger } from "../../logging.js";
17
+ import { extractWriteItemIds } from "../../services/integrations/extract-write-item-id.js";
18
+ import { markIntegrationWrite } from "../../safety/integration-write-tracker.js";
19
+ import { createSettingsStore } from "../../settings/settings-store.js";
20
+ const logger = createLogger("integrations-api");
21
+ /**
22
+ * Integration Delegation Framework — `/api/integrations` routes (Phase 1).
23
+ *
24
+ * Scope per `GOOGLE_AUTH_DELEGATION_DESIGN.md` Phase 1:
25
+ * - `GET /api/integrations` — list every registered integration with its
26
+ * descriptor metadata and current state.
27
+ * - `PATCH /api/integrations/:key` — change a single integration's mode.
28
+ * Runs a minimal lifecycle: validate → DB update → re-render
29
+ * `integrations.md` → audit row. Observer gating, route-410 middleware,
30
+ * skill variant selection, and the connector probe all land in later
31
+ * phases.
32
+ *
33
+ * Risk tier: Approve (dashboard-only mutation, registered in
34
+ * `risk-classifier.ts`).
35
+ */
36
+ export function createIntegrationRoutes(deps) {
37
+ const app = new Hono();
38
+ const { db, config } = deps;
39
+ app.get("/integrations", (c) => {
40
+ const state = readIntegrations(db);
41
+ const integrations = INTEGRATION_KEYS.map((key) => {
42
+ const descriptor = INTEGRATION_DESCRIPTORS[key];
43
+ return {
44
+ key: descriptor.key,
45
+ displayName: descriptor.displayName,
46
+ supportedModes: descriptor.supportedModes,
47
+ directSetup: descriptor.directSetup ?? null,
48
+ backendConnectors: descriptor.backendConnectors,
49
+ skillsTouched: descriptor.skillsTouched,
50
+ taskFlowsTouched: descriptor.taskFlowsTouched,
51
+ observersTouched: descriptor.observersTouched,
52
+ apiRoutesTouched: descriptor.apiRoutesTouched,
53
+ userManagedConnector: descriptor.userManagedConnector ?? false,
54
+ state: state[key],
55
+ };
56
+ });
57
+ return c.json({ integrations });
58
+ });
59
+ // DELEGATED-PROXY-API-DESIGN.md §7 — last N delegated-proxy invocations for
60
+ // an integration. Drives the IntegrationCard's "Recent calls" collapsible
61
+ // table so the user can spot slow / failing connectors without leaving the
62
+ // /connections page. Daemon-side filter (rather than dashboard reading the
63
+ // generic cost table and post-filtering) because:
64
+ // - integrationKey lives inside `detail` JSON; SQLite-side JSON1 extract
65
+ // keeps the response payload small and skips the parent-event noise.
66
+ // - cost.ts dashboards already aggregate; a per-integration debug view
67
+ // belongs alongside the integration's other state for cohesion.
68
+ //
69
+ // Limit defaults to 50 (the design's stated cap), bounded at 200 so a
70
+ // typo-driven `?limit=99999` cannot DoS the response.
71
+ app.get("/integrations/:key/recent-proxy-calls", (c) => {
72
+ const key = c.req.param("key");
73
+ if (!isIntegrationKey(key)) {
74
+ return c.json({ error: "unknown_integration", key }, 404);
75
+ }
76
+ const rawLimit = c.req.query("limit");
77
+ let limit = 50;
78
+ if (rawLimit !== undefined) {
79
+ const parsed = Number.parseInt(rawLimit, 10);
80
+ if (!Number.isFinite(parsed) || parsed < 1) {
81
+ return c.json({
82
+ error: "invalid_limit",
83
+ message: "limit must be a positive integer (default 50, max 200)",
84
+ }, 400);
85
+ }
86
+ limit = Math.min(parsed, 200);
87
+ }
88
+ const rows = db
89
+ .prepare(`SELECT id, started_at, completed_at, model_used, backend,
90
+ cost_usd, tokens_input, tokens_output, duration_ms,
91
+ num_turns, result, error, detail
92
+ FROM agent_actions
93
+ WHERE action_type = 'delegated_proxy.invoke'
94
+ AND json_extract(detail, '$.integrationKey') = ?
95
+ ORDER BY id DESC
96
+ LIMIT ?`)
97
+ .all(key, limit);
98
+ const calls = rows.map((row) => {
99
+ const detail = row.detail ? safeParseJson(row.detail) : null;
100
+ return {
101
+ id: row.id,
102
+ startedAt: row.started_at,
103
+ completedAt: row.completed_at,
104
+ modelId: row.model_used,
105
+ backend: row.backend,
106
+ costUsd: row.cost_usd,
107
+ tokensInput: row.tokens_input,
108
+ tokensOutput: row.tokens_output,
109
+ durationMs: row.duration_ms,
110
+ numTurns: row.num_turns,
111
+ result: row.result,
112
+ // detail.errorClass is the structured DelegatedErrorClass when the
113
+ // call failed inside the proxy pipeline (auth_error, no_tool_call,
114
+ // etc.). detail.toolName is always present. We surface both so the
115
+ // table can render a human label without re-parsing on the client.
116
+ errorClass: detail?.errorClass ?? null,
117
+ toolName: detail?.toolName ?? null,
118
+ errorMessage: row.error,
119
+ };
120
+ });
121
+ return c.json({
122
+ key,
123
+ limit,
124
+ calls,
125
+ });
126
+ });
127
+ // DELEGATED-PROXY-API-DESIGN.md §6.1 / §7 — list known proxy-model options
128
+ // for a backend (registered + custom-pinned). Drives the dashboard model
129
+ // dropdown so the daemon stays the source of truth for the registered
130
+ // model surface; clients don't need to keep their own registry mirror.
131
+ app.get("/integrations/proxy-models/:backend", (c) => {
132
+ const backend = c.req.param("backend");
133
+ if (!BACKEND_IDS.includes(backend)) {
134
+ return c.json({
135
+ error: "invalid_backend",
136
+ message: `Unknown backend '${backend}'.`,
137
+ supportedBackends: BACKEND_IDS,
138
+ }, 400);
139
+ }
140
+ const backendId = backend;
141
+ const options = listProxyModelOptions(backendId);
142
+ const canonical = resolveCanonicalDelegatedModel(backendId, db);
143
+ return c.json({
144
+ backend: backendId,
145
+ canonical,
146
+ options,
147
+ });
148
+ });
149
+ app.patch("/integrations/:key", async (c) => {
150
+ const key = c.req.param("key");
151
+ if (!isIntegrationKey(key)) {
152
+ return c.json({ error: "unknown_integration", key }, 404);
153
+ }
154
+ const parsedBody = await readJsonBody(c);
155
+ if (!parsedBody.ok)
156
+ return parsedBody.response;
157
+ const parsed = integrationPatchSchema.safeParse(parsedBody.body);
158
+ if (!parsed.success) {
159
+ return c.json({
160
+ error: "validation_error",
161
+ issues: parsed.error.issues.map((i) => ({
162
+ path: i.path,
163
+ message: i.message,
164
+ })),
165
+ }, 400);
166
+ }
167
+ const descriptor = INTEGRATION_DESCRIPTORS[key];
168
+ if (!descriptor.supportedModes.includes(parsed.data.mode)) {
169
+ return c.json({
170
+ error: "unsupported_mode",
171
+ key,
172
+ mode: parsed.data.mode,
173
+ supportedModes: descriptor.supportedModes,
174
+ }, 400);
175
+ }
176
+ const previous = readIntegrations(db)[key];
177
+ // Compute the side-effect-relevant flags up-front:
178
+ // - modeChanged: probe-cache eviction + lifecycle observer flip + variants
179
+ // gate all key off this. A pure deniedTools edit must NOT trigger any of
180
+ // them — those are mode-change concerns.
181
+ // - effectiveBackend: which backend the post-PATCH state will run against.
182
+ // Used for both the missing-variants gate and the deniedTools validator.
183
+ // If the user omits delegatedBackend on a delegated→delegated edit
184
+ // (e.g. just toggling tool permissions), we keep the previous backend.
185
+ const modeChanged = parsed.data.mode !== previous.mode
186
+ || (parsed.data.delegatedBackend ?? null) !==
187
+ (previous.delegatedBackend ?? null);
188
+ const effectiveBackend = parsed.data.mode === "delegated"
189
+ ? (parsed.data.delegatedBackend ?? previous.delegatedBackend ?? null)
190
+ : null;
191
+ if (parsed.data.mode === "delegated") {
192
+ if (!effectiveBackend) {
193
+ return c.json({
194
+ error: "validation_error",
195
+ issues: [{
196
+ path: ["delegatedBackend"],
197
+ message: "delegatedBackend is required when mode is 'delegated'",
198
+ }],
199
+ }, 400);
200
+ }
201
+ // User-managed connector integrations (e.g. Outlook) skip the
202
+ // descriptor-driven connector check and the variant gate: the user
203
+ // installs an Outlook / Microsoft Graph MCP on their selected
204
+ // backend (Claude Code Connector / Codex MCP / Gemini extension)
205
+ // and the daemon trusts that wiring. Capability probing is the
206
+ // user's responsibility on the backend side.
207
+ if (!descriptor.userManagedConnector) {
208
+ if (!descriptor.backendConnectors[effectiveBackend]) {
209
+ return c.json({
210
+ error: "backend_not_supported",
211
+ key,
212
+ backend: effectiveBackend,
213
+ availableBackends: Object.keys(descriptor.backendConnectors),
214
+ }, 400);
215
+ }
216
+ // §4.7 "Missing-variant policy" — only re-run the gate when the user
217
+ // is actually changing mode or backend. A pure deniedTools edit on an
218
+ // already-delegated integration leaves the variant set unchanged, so
219
+ // re-walking the file system would be wasted work AND would surface a
220
+ // stale-during-author error if a variant was momentarily missing.
221
+ //
222
+ // DELEGATED-MODE-V2-DESIGN.md §11 (Phase 3) re-activated the
223
+ // legacy variant gate for every delegated integration. gmail and
224
+ // google_calendar now ship `SKILL.delegated.<sessionBackend>.md`
225
+ // (cross-backend) and resolve to `null` for same-backend, so
226
+ // missing variants are a real configuration error.
227
+ if (modeChanged) {
228
+ const missing = missingDelegatedVariants(config.workspaceDir, key, effectiveBackend);
229
+ if (missing.skills.length > 0 || missing.taskFlows.length > 0) {
230
+ return c.json({
231
+ error: "missing_variants",
232
+ key,
233
+ backend: effectiveBackend,
234
+ missingSkills: missing.skills,
235
+ missingTaskFlows: missing.taskFlows,
236
+ message: `Cannot enter delegated mode for '${key}' on backend '${effectiveBackend}' — ${missing.skills.length + missing.taskFlows.length} variant file(s) missing. Author the listed files or narrow the registry's skillsTouched / taskFlowsTouched before retrying.`,
237
+ }, 400);
238
+ }
239
+ }
240
+ }
241
+ }
242
+ // DELEGATED-PROXY-API-DESIGN.md §6.1 — `delegatedModel` validation.
243
+ // The schema rejects empty strings already; here we additionally
244
+ // reject values that don't appear in the registered model list for
245
+ // the effective backend (or in user-pinned `process_backend_config`
246
+ // rows for the same backend, per §4.2's "trust custom pins" rule).
247
+ // The value is *allowed* on any mode so the user can pre-stage a pin
248
+ // before flipping to delegated; validation only runs when we have a
249
+ // backend to validate against.
250
+ if (parsed.data.delegatedModel !== undefined
251
+ && parsed.data.delegatedModel !== null
252
+ && effectiveBackend) {
253
+ const candidate = parsed.data.delegatedModel;
254
+ if (!proxyModelIsKnown(db, effectiveBackend, candidate)) {
255
+ return c.json({
256
+ error: "unknown_model",
257
+ key,
258
+ backend: effectiveBackend,
259
+ model: candidate,
260
+ knownModels: knownProxyModels(db, effectiveBackend),
261
+ message: `Model '${candidate}' is not registered for backend '${effectiveBackend}'. Pick one of the known models or pass null to use the canonical light-tier default.`,
262
+ }, 400);
263
+ }
264
+ }
265
+ // §7.7 — `deniedTools` validation. We accept the field on any mode so
266
+ // the user can pre-stage a deny list before flipping to delegated, but
267
+ // validation only runs against the effective backend when one exists.
268
+ // For non-delegated modes, deniedTools persists as-is (no live backend
269
+ // to validate against — the value is inert until delegated).
270
+ //
271
+ // DELEGATED-MODE-V2-DESIGN.md §4.5.4 — first-time delegated setup
272
+ // pre-populates `deniedTools` with the recommended starter list when
273
+ // the caller didn't supply one (PATCH omits the field). This keeps the
274
+ // CLAUDE.md "destructive ops require user confirmation" invariant
275
+ // intact on a fresh install. The user opts out explicitly by passing
276
+ // `deniedTools: []` (empty array, distinct from undefined).
277
+ //
278
+ // The starter floor fires in two distinct shapes — both arrive at an
279
+ // effectively-empty deny set after the PATCH and would otherwise leave
280
+ // the agent unconstrained:
281
+ //
282
+ // (a) Entering delegated mode for the first time on this integration
283
+ // (previous mode was direct/disabled) AND no curated list was
284
+ // already pre-staged — re-entry from disabled with prior denies
285
+ // kept means the user already curated, don't overwrite.
286
+ //
287
+ // (b) Backend swap (delegated → delegated, different `delegatedBackend`)
288
+ // where every entry in `previous.deniedTools` is namespace-stale on
289
+ // the new backend. The user's curation referenced tools the new
290
+ // connector doesn't expose (e.g. Claude's `label_message` carried
291
+ // into a Codex session), so the materializer's stale-drop pass
292
+ // would empty the disallowedTools array silently — closing the
293
+ // same §4.5.4 floor the design wrote (a) to defend. The original
294
+ // design framed §4.5.4 as "first delegated setup only" and missed
295
+ // this case; surfaced during the 2026-04-26 implementation review.
296
+ //
297
+ // The wizard UI for the opt-out / "use recommended" / "I'll edit"
298
+ // branches is Phase 4 polish (see §Phase 4.2). For now the API default
299
+ // closes the safety floor; the dashboard editor card surfaces the
300
+ // populated list for editing.
301
+ const enteringDelegated = parsed.data.mode === "delegated" && previous.mode !== "delegated";
302
+ const omittedDeniedTools = parsed.data.deniedTools === undefined;
303
+ const previousDeniedToolsEmpty = (previous.deniedTools ?? []).length === 0;
304
+ const swappingDelegatedBackend = parsed.data.mode === "delegated"
305
+ && previous.mode === "delegated"
306
+ && effectiveBackend !== null
307
+ && previous.delegatedBackend !== undefined
308
+ && previous.delegatedBackend !== effectiveBackend;
309
+ // For shape (b): the previous list had at least one entry (otherwise the
310
+ // floor was already empty and shape (a)'s logic doesn't apply here either),
311
+ // and *every* entry is stale on the new backend.
312
+ const swapWipesAllDenies = swappingDelegatedBackend
313
+ && (previous.deniedTools ?? []).length > 0
314
+ && filterDeniedToolsForBackend(key, effectiveBackend, previous.deniedTools ?? []).active.length === 0;
315
+ const useStarter = effectiveBackend !== null
316
+ && omittedDeniedTools
317
+ && ((enteringDelegated && previousDeniedToolsEmpty)
318
+ || swapWipesAllDenies);
319
+ const finalDeniedTools = useStarter
320
+ ? recommendedStarterDeniedTools(key, effectiveBackend)
321
+ : parsed.data.deniedTools !== undefined
322
+ ? parsed.data.deniedTools
323
+ : (previous.deniedTools ?? []);
324
+ if (useStarter && finalDeniedTools.length > 0) {
325
+ logger.info({
326
+ key,
327
+ backend: effectiveBackend,
328
+ starter: finalDeniedTools,
329
+ // Distinguish the two shapes so log readers can spot the
330
+ // backend-swap fallback separately from first-time setup.
331
+ // `enteringDelegated` covers shape (a); `swapWipesAllDenies`
332
+ // covers shape (b). They are mutually exclusive by construction
333
+ // (a requires `previous.mode !== "delegated"`, b requires
334
+ // `previous.mode === "delegated"`).
335
+ trigger: enteringDelegated ? "first_delegated" : "backend_swap_stale",
336
+ previousBackend: swappingDelegatedBackend
337
+ ? previous.delegatedBackend
338
+ : null,
339
+ }, "applied starter deniedTools floor");
340
+ }
341
+ if (effectiveBackend && parsed.data.deniedTools !== undefined) {
342
+ const result = validateDeniedTools(key, effectiveBackend, finalDeniedTools);
343
+ if (!result.ok) {
344
+ if (result.error === "unknown_tool") {
345
+ return c.json({
346
+ error: "unknown_tool",
347
+ key,
348
+ backend: effectiveBackend,
349
+ tool: result.tool,
350
+ knownTools: result.knownTools,
351
+ message: `Tool '${result.tool}' is not declared in the ${effectiveBackend} connector for '${key}'. Pick a tool from the descriptor's capability list.`,
352
+ }, 400);
353
+ }
354
+ if (result.error === "denial_breaks_required_capability") {
355
+ return c.json({
356
+ error: "denial_breaks_required_capability",
357
+ key,
358
+ backend: effectiveBackend,
359
+ capability: result.capability,
360
+ remainingTools: result.remainingTools,
361
+ message: `Denying these tools removes the only path for required capability '${result.capability}'. Keep at least one of: ${result.remainingTools.join(", ")}.`,
362
+ }, 400);
363
+ }
364
+ // "no_connector" should be unreachable — we already validated
365
+ // `descriptor.backendConnectors[effectiveBackend]` above. Map to a
366
+ // 500 rather than a 400 because it indicates a server-side mismatch.
367
+ return c.json({ error: "internal_error" }, 500);
368
+ }
369
+ }
370
+ // DELEGATED-PROXY-API-DESIGN.md §4.2 — `delegatedModel` carry-over
371
+ // rules:
372
+ // - PATCH omits the field → preserve previous value (mode-flip
373
+ // idempotent: direct ↔ delegated keeps the pin).
374
+ // - PATCH passes `null` → clear the pin (canonical fallback at
375
+ // call time). Surfaced by the dashboard's "Reset to default"
376
+ // affordance after a backend swap.
377
+ // - PATCH passes a non-empty string → validated above and stored.
378
+ // Same shape for `delegatedMaxTurns` (forward-compat — no UI yet).
379
+ const finalDelegatedModel = parsed.data.delegatedModel === undefined
380
+ ? (previous.delegatedModel ?? null)
381
+ : parsed.data.delegatedModel;
382
+ const finalDelegatedMaxTurns = parsed.data.delegatedMaxTurns === undefined
383
+ ? (previous.delegatedMaxTurns ?? null)
384
+ : parsed.data.delegatedMaxTurns;
385
+ const finalDelegatedSyncEnabled = parsed.data.delegatedSyncEnabled === undefined
386
+ ? previous.delegatedSyncEnabled
387
+ : parsed.data.delegatedSyncEnabled;
388
+ const stamped = new Date().toISOString();
389
+ try {
390
+ const next = updateIntegrationState(db, key, {
391
+ mode: parsed.data.mode,
392
+ // Only carry delegatedBackend when mode is delegated. The schema
393
+ // already enforces presence in that branch (superRefine), so a
394
+ // direct/disabled flip drops it cleanly. Don't fall back to the
395
+ // previous value here — that breaks the delegated → direct path
396
+ // (the integration would keep its old backend forever).
397
+ ...(parsed.data.mode === "delegated" && parsed.data.delegatedBackend
398
+ ? { delegatedBackend: parsed.data.delegatedBackend }
399
+ : {}),
400
+ // Always persist the resolved delegatedModel/delegatedMaxTurns —
401
+ // null clears, undefined was already collapsed above to the
402
+ // previous value or null. Keeps the JSON blob shape stable
403
+ // across PATCHes even when the field is inert (mode !== delegated).
404
+ ...(finalDelegatedModel !== null
405
+ ? { delegatedModel: finalDelegatedModel }
406
+ : {}),
407
+ ...(finalDelegatedMaxTurns !== null
408
+ ? { delegatedMaxTurns: finalDelegatedMaxTurns }
409
+ : {}),
410
+ ...(finalDelegatedSyncEnabled === false
411
+ ? { delegatedSyncEnabled: false }
412
+ : {}),
413
+ deniedTools: finalDeniedTools,
414
+ lastChangedAt: stamped,
415
+ });
416
+ await writeManagementMd(config.dataDir, next, {
417
+ externalObsidianVaultPath: config.externalObsidianVaultPath,
418
+ externalObsidianWatch: config.externalObsidianWatch,
419
+ });
420
+ // §4.11 probe-cache eviction is a *mode-change* concern. A pure
421
+ // deniedTools edit doesn't invalidate which capabilities the
422
+ // connector exposes — the live probe answer is identical, only what
423
+ // the agent is allowed to invoke from the skill body changes. So
424
+ // gate eviction on modeChanged.
425
+ if (modeChanged) {
426
+ const cleared = deleteProbesForIntegration(db, key);
427
+ if (cleared > 0) {
428
+ logger.info({ key, cleared }, "cleared stale probe cache after integration mode change");
429
+ }
430
+ }
431
+ // DELEGATED-MODE-V2-DESIGN.md §4.4 #2 — a deniedTools-only edit must
432
+ // also re-materialize active DM workdirs, since the per-session
433
+ // `disallowedTools` array (Claude SDK), admin-policy TOML (Gemini),
434
+ // and AGENTS.md prose block (Codex) are derived from `state.deniedTools`
435
+ // at materialization time. A stale workdir would leak the old policy
436
+ // into the next turn. We compute the policy diff up front so we can
437
+ // gate the lifecycle callback on it.
438
+ const policyDiff = diffDeniedTools(previous.deniedTools ?? [], next[key].deniedTools ?? []);
439
+ const policyChanged = policyDiff.added.length > 0 || policyDiff.removed.length > 0;
440
+ const syncChanged = (previous.delegatedSyncEnabled ?? true)
441
+ !== (next[key].delegatedSyncEnabled ?? true);
442
+ // §4.10 lifecycle step 4 — observer flip side of the callback is
443
+ // gated on `wasDirect !== isDirect` inside `applyIntegrationModeChange`,
444
+ // so calling it on a deniedTools-only edit is safe: observer
445
+ // start/stop is a no-op, only `rematerializeDmSessions` fires.
446
+ if ((modeChanged || policyChanged || syncChanged) && deps.onIntegrationModeChange) {
447
+ void Promise.resolve()
448
+ .then(() => deps.onIntegrationModeChange?.(key, previous, next[key]))
449
+ .catch((err) => {
450
+ logger.error({ err, key }, "integration mode-change side-effects failed — DB state already updated");
451
+ });
452
+ }
453
+ // §7.7 audit. Two distinct action types so log readers can filter:
454
+ // - integration.mode_change: mode or delegatedBackend moved
455
+ // - integration.policy_change: deniedTools diff (with no mode flip)
456
+ // Both can fire on a single PATCH when the user changes mode AND
457
+ // deniedTools simultaneously — that's intentional, the diff is at
458
+ // different granularities.
459
+ if (modeChanged) {
460
+ recordAuditModeChange(db, key, previous, next[key]);
461
+ }
462
+ if (policyChanged) {
463
+ recordAuditPolicyChange(db, key, policyDiff);
464
+ }
465
+ logger.info({
466
+ key,
467
+ from: previous.mode,
468
+ to: next[key].mode,
469
+ delegatedBackend: next[key].delegatedBackend,
470
+ delegatedModelFrom: previous.delegatedModel ?? null,
471
+ delegatedModelTo: next[key].delegatedModel ?? null,
472
+ deniedToolsAdded: policyDiff.added,
473
+ deniedToolsRemoved: policyDiff.removed,
474
+ }, modeChanged
475
+ ? "integration mode updated"
476
+ : "integration policy updated (deniedTools / delegatedModel)");
477
+ // Auto-enable the global task-mode flag the first time *any*
478
+ // integration enters delegated mode. Rationale:
479
+ // - The legacy `/integrations/:key/invoke` RPC is dead (commented
480
+ // out 2026-05-01 in this same file); every delegated skill body
481
+ // and task flow now talks to `/exec`.
482
+ // - `/exec` is gated by `delegatedTaskModeEnabled`, originally a
483
+ // Phase-1 canary that defaults `false`. With `/invoke` gone,
484
+ // "delegated mode + task mode off" is a degenerate state with
485
+ // no productive use — the agent calls `/exec`, gets 503,
486
+ // fails. So flipping an integration to delegated *is* the
487
+ // enablement signal.
488
+ // - We only flip on the transition into delegated, not on every
489
+ // PATCH against an already-delegated integration. A pure
490
+ // deniedTools edit must not silently re-enable a flag the
491
+ // operator manually toggled off; emergency-disable is the
492
+ // flag's remaining role.
493
+ const enteringDelegated = next[key].mode === "delegated" && previous.mode !== "delegated";
494
+ if (enteringDelegated && !config.delegatedTaskModeEnabled) {
495
+ try {
496
+ createSettingsStore(db).set("delegatedTaskModeEnabled", true);
497
+ config.delegatedTaskModeEnabled = true;
498
+ logger.info({ key, backend: effectiveBackend, trigger: "first_delegated" }, "auto-enabled delegatedTaskModeEnabled — first delegated integration");
499
+ }
500
+ catch (err) {
501
+ // Settings write is best-effort: even if persistence fails the
502
+ // in-memory config update above keeps /exec working for this
503
+ // process; a daemon restart would re-apply the same heal via
504
+ // the startup default-correction path in index.ts.
505
+ logger.error({ err, key }, "failed to persist delegatedTaskModeEnabled auto-enable; in-memory config still updated");
506
+ }
507
+ }
508
+ return c.json({ ok: true, integration: next[key] });
509
+ }
510
+ catch (err) {
511
+ logger.error({ err, key }, "integration mode update failed");
512
+ return c.json({ error: "internal_error" }, 500);
513
+ }
514
+ });
515
+ // ─────────────────────────────────────────────────────────────────────
516
+ // RESERVED — POST /integrations/:key/invoke (RPC-style tool dispatch)
517
+ //
518
+ // Commented out 2026-05-01 as part of the /exec-only migration. The
519
+ // RPC `{tool, args}` shape required the caller to know the delegated
520
+ // backend's exact bare tool name (Claude `search_threads` vs Codex
521
+ // `search_emails` vs Gemini `search`) and arg names (`pageSize` vs
522
+ // `max_results` vs `maxResults`). That coupling broke under:
523
+ // - cross-backend tool-name divergence (the alias-translation gap
524
+ // that caused the 2026-05-01 wrong_tool incidents),
525
+ // - any custom MCP server the user installs (registry-invisible),
526
+ // - backend swaps that should be transparent to the agent.
527
+ //
528
+ // `POST /integrations/:key/exec` (task mode) is the canonical surface
529
+ // now: the agent describes intent in natural language + outputSchema,
530
+ // the daemon's delegate picks the tool. The handler body and the
531
+ // supporting `resolveCanonicalBareTool` helper are preserved verbatim
532
+ // for **future reactivation** — possible reactivation scenarios:
533
+ // 1. A low-latency RPC fast path for cost-sensitive callers.
534
+ // 2. A debug/admin endpoint for direct tool dispatch.
535
+ // 3. A per-integration opt-in once full cross-backend alias
536
+ // translation is in place.
537
+ //
538
+ // DO NOT DELETE. The internal `DelegatedBackendInvoker.invoke()` API
539
+ // and each core's `runDelegatedTool()` remain wired (used by
540
+ // `delegated-sync-worker` for hourly drift detection — see
541
+ // `packages/daemon/src/observers/delegated-sync-worker.ts:504`).
542
+ //
543
+ // Original docstring (preserved for the reactivation-time author):
544
+ // POST /integrations/:key/invoke — DELEGATED-MODE-V2-DESIGN.md §4.2.
545
+ // Generic chokepoint for cross-backend delegated tool calls. The
546
+ // agent's cross-backend skill body
547
+ // (`SKILL.delegated.<sessionBackend>.md`) directs it here for any
548
+ // connector tool on a delegatedBackend that differs from the DM
549
+ // session backend. Body: `{tool, args}` — the daemon does NOT
550
+ // enumerate or validate the tool name (no per-tool routeMap
551
+ // maintenance); it forwards verbatim to `DelegatedBackendInvoker`.
552
+ //
553
+ // Pre-flight order (cheapest first, fail-fast):
554
+ // 1. Integration must be in `delegated` mode (409 mode_mismatch).
555
+ // 2. If `x-session-backend` is set and matches `state.delegatedBackend`,
556
+ // the caller is misusing the endpoint — same-backend agents have
557
+ // native MCP and the skill is not provisioned (§4.1.2). Surface as
558
+ // 409 to make accidental misuse loud rather than spawning a useless
559
+ // subprocess.
560
+ // 3. `state.deniedTools` patterns enforced via `matchToolPattern`. The
561
+ // stored entries are bare names (no `mcp__*` prefix), so we strip the
562
+ // connector's `toolNamespace` from the body's `tool` before matching.
563
+ //
564
+ // Risk tier: Autonomous (no Bearer required). Cost / failure
565
+ // attribution lands in `agent_actions` via the invoker
566
+ // (`action_type='delegated_proxy.invoke'`).
567
+ // ─────────────────────────────────────────────────────────────────────
568
+ /*
569
+ app.post("/integrations/:key/invoke", async (c) => {
570
+ const key = c.req.param("key");
571
+ if (!isIntegrationKey(key)) {
572
+ return c.json({ error: "unknown_integration", key }, 404);
573
+ }
574
+
575
+ const parsedBody = await readJsonBody(c);
576
+ if (!parsedBody.ok) return parsedBody.response;
577
+
578
+ const body = parsedBody.body as { tool?: unknown; args?: unknown } | null;
579
+ const toolRaw = body?.tool;
580
+ if (typeof toolRaw !== "string" || toolRaw.length === 0) {
581
+ return c.json(
582
+ {
583
+ error: "validation_error",
584
+ message: "`tool` must be a non-empty string (bare tool name or fully-qualified MCP name)",
585
+ },
586
+ 400,
587
+ );
588
+ }
589
+ // §4.2.1 contract — `args` is `object`. Reject arrays, scalars, and null
590
+ // here so the failure surfaces at the route boundary with a precise 400
591
+ // rather than as a downstream invoker / connector parse error.
592
+ const argsRaw = body?.args;
593
+ if (
594
+ argsRaw !== undefined
595
+ && (argsRaw === null
596
+ || typeof argsRaw !== "object"
597
+ || Array.isArray(argsRaw))
598
+ ) {
599
+ return c.json(
600
+ {
601
+ error: "validation_error",
602
+ message: "`args` must be a JSON object (or omitted to send {})",
603
+ },
604
+ 400,
605
+ );
606
+ }
607
+ const args = (argsRaw as Record<string, unknown> | undefined) ?? {};
608
+
609
+ if (!deps.delegatedInvoker) {
610
+ // Boot ordering / test wiring case — invoker not registered. Surface
611
+ // explicitly so the caller knows this isn't a precondition mismatch.
612
+ return c.json(
613
+ {
614
+ error: "unimplemented",
615
+ message: "delegated invoker is not wired into this daemon instance",
616
+ integration: key,
617
+ backend: null,
618
+ mode: "delegated",
619
+ },
620
+ 501,
621
+ );
622
+ }
623
+
624
+ const state = readIntegrations(db)[key];
625
+ if (!state || state.mode !== "delegated" || !state.delegatedBackend) {
626
+ return c.json(
627
+ {
628
+ error: "mode_mismatch",
629
+ message: `${key} is not in delegated mode (mode=${state?.mode ?? "missing"})`,
630
+ integration: key,
631
+ backend: null,
632
+ mode: "delegated",
633
+ },
634
+ 409,
635
+ );
636
+ }
637
+
638
+ const sessionBackendHeader = c.req.header("x-session-backend");
639
+ if (
640
+ sessionBackendHeader
641
+ && sessionBackendHeader === state.delegatedBackend
642
+ ) {
643
+ return c.json(
644
+ {
645
+ error: "mode_mismatch",
646
+ message: `session backend matches delegatedBackend (${sessionBackendHeader}) — use native MCP instead`,
647
+ integration: key,
648
+ backend: state.delegatedBackend,
649
+ mode: "delegated",
650
+ },
651
+ 409,
652
+ );
653
+ }
654
+
655
+ // Strip the connector's namespace prefix if the body included it,
656
+ // then translate cross-backend aliases to the delegated connector's
657
+ // canonical tool name. Translation runs BEFORE the deniedTools check
658
+ // because deny entries are stored as backend-canonical names (the
659
+ // skill body trains the user on that form): checking pre-translation
660
+ // silently lets a denied call through if the agent used a sibling
661
+ // backend's alias.
662
+ const connector = INTEGRATION_DESCRIPTORS[key].backendConnectors[state.delegatedBackend];
663
+ const namespace = connector?.toolNamespace ?? "";
664
+ const incomingBareTool = namespace && toolRaw.startsWith(namespace)
665
+ ? toolRaw.slice(namespace.length)
666
+ : toolRaw;
667
+ const bareTool = resolveCanonicalBareTool(connector, incomingBareTool);
668
+ if (bareTool !== incomingBareTool) {
669
+ logger.debug(
670
+ {
671
+ integration: key,
672
+ backend: state.delegatedBackend,
673
+ from: incomingBareTool,
674
+ to: bareTool,
675
+ },
676
+ "delegated invoke: translated cross-backend tool alias",
677
+ );
678
+ }
679
+
680
+ if ((state.deniedTools ?? []).some((pattern) => matchToolPattern(pattern, bareTool))) {
681
+ return c.json(
682
+ {
683
+ error: "denied_tool",
684
+ message: `tool '${bareTool}' is denied by user settings for integration '${key}'`,
685
+ integration: key,
686
+ backend: state.delegatedBackend,
687
+ mode: "delegated",
688
+ tool: bareTool,
689
+ },
690
+ 403,
691
+ );
692
+ }
693
+
694
+ // The invoker forwards verbatim — connector validates the tool name and
695
+ // arg shape. We always send the fully-qualified tool string so the
696
+ // subprocess prompt unambiguously points at one tool.
697
+ const fullyQualifiedTool = namespace ? `${namespace}${bareTool}` : bareTool;
698
+
699
+ const result = await deps.delegatedInvoker.invoke({
700
+ integrationKey: key,
701
+ toolName: fullyQualifiedTool,
702
+ toolArgs: args,
703
+ parentEventId: c.req.header("x-event-id"),
704
+ parentProcessKey: c.req.header("x-process-key"),
705
+ });
706
+
707
+ if (result.ok) {
708
+ // INTEGRATION-DRIFT-DETECTION-PLAN.md §11 Phase 4 — actor attribution.
709
+ // Successful writes mark the persistent `integration_writes` table so
710
+ // the next reconcile diff resolves `actor='agent'` and the agent does
711
+ // not re-discover its own write as a user-originated observation.
712
+ // Decision tree:
713
+ // 1. `bareTool` in `connector.destructiveTools` → it's a write.
714
+ // 2. Walk `result.toolResult` for canonical id keys (extractor).
715
+ // 3. If the response had no id (label_message / label_thread /
716
+ // bulk_label_matching_emails return `{ ok: true }`), fall back
717
+ // to `args.messageId` / `args.threadId` / each entry of
718
+ // `args.messageIds` / `args.threadIds`.
719
+ // Failure to extract any id is logged at debug and the call still
720
+ // returns 2xx — losing one attribution mark causes one self-noticed
721
+ // observation, never data loss.
722
+ maybeMarkIntegrationWrite(deps.db, {
723
+ integration: key,
724
+ connector,
725
+ bareTool,
726
+ toolResult: result.toolResult,
727
+ args,
728
+ });
729
+ return c.json({
730
+ toolResult: result.toolResult,
731
+ cost: {
732
+ tokensInput: result.cost.tokensInput,
733
+ tokensOutput: result.cost.tokensOutput,
734
+ cacheCreationTokens: result.cost.cacheCreationTokens,
735
+ cacheReadTokens: result.cost.cacheReadTokens,
736
+ costUsd: result.cost.costUsd,
737
+ durationMs: result.cost.durationMs,
738
+ numTurns: result.cost.numTurns,
739
+ },
740
+ });
741
+ }
742
+
743
+ const status = mapErrorClassToHttpStatus(result.errorClass);
744
+ return c.json(
745
+ {
746
+ error: result.errorClass,
747
+ message: result.message,
748
+ integration: key,
749
+ backend: result.backendId ?? state.delegatedBackend,
750
+ mode: "delegated",
751
+ },
752
+ status,
753
+ );
754
+ });
755
+ */
756
+ // ── end of reserved /invoke route ────────────────────────────────────
757
+ // POST /integrations/:key/exec — DELEGATED-TASK-MODE-DESIGN.md §4.1.
758
+ // Task-mode invocation: the calling agent describes intent in natural
759
+ // language and pins an `outputSchema`; the daemon spawns the
760
+ // delegatedBackend with `allowedTools` restricted to the integration's
761
+ // connector and validates the final assistant JSON against the schema.
762
+ //
763
+ // Pre-flight order (cheapest first; matches /invoke ordering):
764
+ // 1. Integration is registered (404 unknown_integration).
765
+ // 2. Body is valid JSON (400 invalid_json_body).
766
+ // 3. Body fields parse: task non-empty string, outputSchema present
767
+ // and within 4 KB, caps within hard bounds, allowDestructive bool.
768
+ // 4. Kill switch (config.delegatedTaskModeEnabled): 503 if false.
769
+ // 5. Integration is delegated with non-null delegatedBackend (409).
770
+ // 6. delegatedBackend ∈ {claude, gemini} — Codex returns 501.
771
+ // 7. x-session-backend header (if set) ≠ delegatedBackend (409 same
772
+ // defense-in-depth as /invoke — same-backend should use native MCP).
773
+ // 8. Invoker wired (501).
774
+ //
775
+ // Risk tier: Autonomous (no Bearer required). Same rationale as /invoke —
776
+ // tool-level safety lives in `state.deniedTools` + `destructiveTools`,
777
+ // both enforced at the chokepoint by the invoker.
778
+ app.post("/integrations/:key/exec", async (c) => {
779
+ const key = c.req.param("key");
780
+ if (!isIntegrationKey(key)) {
781
+ return c.json({ error: "unknown_integration", key }, 404);
782
+ }
783
+ const parsedBody = await readJsonBody(c);
784
+ if (!parsedBody.ok)
785
+ return parsedBody.response;
786
+ const body = parsedBody.body;
787
+ // Field-level validation. Each branch maps to `validation_error` /
788
+ // `schema_too_large` per §10.
789
+ if (typeof body?.task !== "string" || body.task.trim().length === 0) {
790
+ return c.json({
791
+ error: "validation_error",
792
+ message: "`task` must be a non-empty string",
793
+ }, 400);
794
+ }
795
+ const schemaCheck = checkOutputSchema(body.outputSchema);
796
+ if (!schemaCheck.ok) {
797
+ const errorCode = schemaCheck.reason === "too_large"
798
+ ? "schema_too_large"
799
+ : "validation_error";
800
+ return c.json({
801
+ error: errorCode,
802
+ message: schemaCheck.message,
803
+ field: "outputSchema",
804
+ }, 400);
805
+ }
806
+ const outputSchema = body.outputSchema;
807
+ const config = deps.config;
808
+ if (!config.delegatedTaskModeEnabled) {
809
+ return c.json({
810
+ error: "task_mode_disabled",
811
+ // Auto-enable on `PATCH /api/integrations/:key` to delegated
812
+ // (and the matching startup heal in `index.ts`) make this
813
+ // path a deliberate operator action: the flag was either
814
+ // explicitly disabled via `PATCH /api/config` or its
815
+ // emergency-disable use case fired. Surface that fact rather
816
+ // than promising a dashboard toggle that does not exist.
817
+ message: "Task mode is currently disabled (config.delegatedTaskModeEnabled=false). Re-enable via PATCH /api/config { delegatedTaskModeEnabled: true }, or flip an integration to delegated to auto-enable.",
818
+ integration: key,
819
+ mode: "delegated",
820
+ }, 503);
821
+ }
822
+ const allowDestructive = body.allowDestructive === true;
823
+ const maxToolCalls = clampNumber(body.maxToolCalls, config.delegatedTaskDefaultMaxToolCalls, 1, DELEGATED_TASK_HARD_CAPS.maxToolCalls);
824
+ if (maxToolCalls === null) {
825
+ return c.json({
826
+ error: "validation_error",
827
+ message: `maxToolCalls must be an integer between 1 and ${DELEGATED_TASK_HARD_CAPS.maxToolCalls}`,
828
+ }, 400);
829
+ }
830
+ const maxBudgetUsd = clampNumber(body.maxBudgetUsd, config.delegatedTaskDefaultMaxBudgetUsd, 0, DELEGATED_TASK_HARD_CAPS.maxBudgetUsd, true);
831
+ if (maxBudgetUsd === null) {
832
+ return c.json({
833
+ error: "validation_error",
834
+ message: `maxBudgetUsd must be a number between 0 and ${DELEGATED_TASK_HARD_CAPS.maxBudgetUsd}`,
835
+ }, 400);
836
+ }
837
+ const timeoutMs = clampNumber(body.timeoutMs, config.delegatedTaskDefaultTimeoutMs, 1000, DELEGATED_TASK_HARD_CAPS.maxTimeoutMs);
838
+ if (timeoutMs === null) {
839
+ return c.json({
840
+ error: "validation_error",
841
+ message: `timeoutMs must be an integer between 1000 and ${DELEGATED_TASK_HARD_CAPS.maxTimeoutMs}`,
842
+ }, 400);
843
+ }
844
+ if (!deps.delegatedInvoker) {
845
+ return c.json({
846
+ error: "unimplemented",
847
+ message: "delegated invoker is not wired into this daemon instance",
848
+ integration: key,
849
+ backend: null,
850
+ mode: "delegated",
851
+ }, 501);
852
+ }
853
+ const state = readIntegrations(deps.db)[key];
854
+ if (!state || state.mode !== "delegated" || !state.delegatedBackend) {
855
+ return c.json({
856
+ error: "mode_mismatch",
857
+ message: `${key} is not in delegated mode (mode=${state?.mode ?? "missing"})`,
858
+ integration: key,
859
+ backend: null,
860
+ mode: "delegated",
861
+ }, 409);
862
+ }
863
+ // Codex task mode landed in Phase 1.5 — daemon-side stream pre-emption
864
+ // (see codex-core.ts `runDelegatedTask`) gates allowed-tools / destructive
865
+ // calls without relying on a CLI-level allowedTools surface. The 501
866
+ // short-circuit that previously fired here for `state.delegatedBackend
867
+ // === "codex"` is gone; Codex /exec requests now flow through the
868
+ // invoker like Claude and Gemini.
869
+ const sessionBackendHeader = c.req.header("x-session-backend");
870
+ if (sessionBackendHeader
871
+ && sessionBackendHeader === state.delegatedBackend) {
872
+ return c.json({
873
+ error: "mode_mismatch",
874
+ message: `session backend matches delegatedBackend (${sessionBackendHeader}) — use native MCP instead`,
875
+ integration: key,
876
+ backend: state.delegatedBackend,
877
+ mode: "delegated",
878
+ }, 409);
879
+ }
880
+ const result = await deps.delegatedInvoker.task({
881
+ integrationKey: key,
882
+ task: body.task.trim(),
883
+ outputSchema,
884
+ maxToolCalls,
885
+ maxBudgetUsd,
886
+ timeoutMs,
887
+ allowDestructive,
888
+ heavy: body.heavy === true,
889
+ // §13 Phase 3.3 — pass-through opt-in. Defense-in-depth: the
890
+ // invoker also enforces `allowDestructive === false` before
891
+ // checking the cache, so a buggy caller that sets cacheable on a
892
+ // destructive task can't poison the cache.
893
+ cacheable: body.cacheable === true,
894
+ parentEventId: c.req.header("x-event-id"),
895
+ parentProcessKey: c.req.header("x-process-key"),
896
+ });
897
+ // INTEGRATION-DRIFT-DETECTION-PLAN.md §11 Phase 4 — actor
898
+ // attribution at the /exec chokepoint. /invoke called this once per
899
+ // request because there was a single tool. /exec is a loop: walk
900
+ // the trace and mark every successful destructive step.
901
+ //
902
+ // Runs BEFORE the result.ok / error split because failed tasks
903
+ // still strand real side effects in the trace:
904
+ // - timeout / subprocess_crashed / loop_aborted / budget_exhausted:
905
+ // earlier ok steps already landed before the wall-clock /
906
+ // budget / turn cap fired.
907
+ // - schema_violation / parse_error: the model called the tool
908
+ // successfully and then mis-formatted its final JSON. The §6.2
909
+ // retry is suppressed when `writeClassToolFired` is true, so
910
+ // the side effect landed exactly once and needs marking
911
+ // exactly once.
912
+ // - policy_violation: the violating step is `status: "error"`
913
+ // (Codex aborts before pairing) but earlier ok destructive
914
+ // steps in the same task are still real.
915
+ // Skipping the loop on failure was the same shape of bug as the
916
+ // old /invoke→/exec migration miss: an agent-issued send_email
917
+ // that schema-violates on output would land in Gmail, return 502,
918
+ // and surface as "I noticed you sent…" on the next reconcile.
919
+ //
920
+ // Bare-tool resolution: trace `toolName` is the fully-qualified
921
+ // `mcp__server__tool` (or dotted `server.tool`) form the core
922
+ // observed mid-stream. Strip `connector.toolNamespace` to recover
923
+ // the bare name for the destructiveTools membership check; if the
924
+ // namespace doesn't match, the tool wasn't from this connector
925
+ // (e.g. an internal Read/Write step) and we ignore it.
926
+ //
927
+ // Each trace step carries the upstream `toolResult` (the cores
928
+ // JSON-parse the connector response when possible, fall back to
929
+ // raw string). extractWriteItemIds first walks the response
930
+ // shape (recovers id-in-response writes — send_email,
931
+ // create_event, notion-create-pages) and then falls back to
932
+ // args-side extraction (recovers id-in-args writes — delete /
933
+ // update / label / archive). Older snapshots / stub cores that
934
+ // don't populate toolResult degrade to args-only without crashing.
935
+ //
936
+ // `result.trace` is required on the success union and optional on
937
+ // the error union — guard with truthiness.
938
+ if (result.trace && result.trace.length > 0) {
939
+ const descriptor = INTEGRATION_DESCRIPTORS[key];
940
+ const connector = descriptor.backendConnectors[state.delegatedBackend];
941
+ if (connector) {
942
+ const namespace = connector.toolNamespace;
943
+ for (const step of result.trace) {
944
+ if (step.status !== "ok")
945
+ continue;
946
+ if (!step.toolName.startsWith(namespace))
947
+ continue;
948
+ const bareTool = step.toolName.slice(namespace.length);
949
+ if (!connector.destructiveTools.includes(bareTool))
950
+ continue;
951
+ maybeMarkIntegrationWrite(deps.db, {
952
+ integration: key,
953
+ connector,
954
+ bareTool,
955
+ toolResult: step.toolResult,
956
+ args: step.toolArgs,
957
+ });
958
+ }
959
+ }
960
+ }
961
+ if (result.ok) {
962
+ return c.json({
963
+ result: result.result,
964
+ needsConfirmation: result.needsConfirmation,
965
+ confirmationPlan: result.confirmationPlan,
966
+ trace: result.trace,
967
+ cost: result.cost,
968
+ });
969
+ }
970
+ const status = mapTaskErrorClassToHttpStatus(result.errorClass);
971
+ return c.json({
972
+ error: result.errorClass,
973
+ message: result.message,
974
+ ...(result.raw !== undefined ? { raw: result.raw } : {}),
975
+ ...(result.trace ? { trace: result.trace } : {}),
976
+ ...(result.cost ? { cost: result.cost } : {}),
977
+ integration: key,
978
+ backend: result.backendId ?? state.delegatedBackend,
979
+ mode: "delegated",
980
+ }, status);
981
+ });
982
+ // POST /integrations/:key/probe — evaluate or read the cached connector
983
+ // probe for a given backend. Phase 2 supports two modes:
984
+ // - Live probe: caller passes `{tools: [...]}` (the names the agent
985
+ // subprocess reported). The evaluator computes presence + persists.
986
+ // - Cached read: body omits `tools`. Returns the latest stored row, or
987
+ // a 404 marker if no probe has been taken yet. The dashboard's
988
+ // refresh button and post-Apply background refresh use the live path;
989
+ // /health and the setup wizard's initial render use the cached path.
990
+ // No live agent subprocess is launched here — keeping that out of the
991
+ // boot critical path is what saves the per-Opus probe cost called out
992
+ // in the §7 POC.
993
+ app.post("/integrations/:key/probe", async (c) => {
994
+ const key = c.req.param("key");
995
+ if (!isIntegrationKey(key)) {
996
+ return c.json({ error: "unknown_integration", key }, 404);
997
+ }
998
+ const body = await readOptionalJsonBody(c);
999
+ if (body === null) {
1000
+ return c.json({ error: "invalid_json_body" }, 400);
1001
+ }
1002
+ const backend = resolveProbeBackend(body.backend, db, key);
1003
+ if (!backend.ok)
1004
+ return c.json(backend.error, backend.status);
1005
+ const descriptorForProbe = INTEGRATION_DESCRIPTORS[key];
1006
+ const isUserManaged = descriptorForProbe.userManagedConnector === true;
1007
+ // Connector existence is a descriptor-driven precondition. User-
1008
+ // managed integrations (Outlook today) intentionally ship with an
1009
+ // empty `backendConnectors` and skip this check — the user's MCP /
1010
+ // connector on the chosen backend is the source of truth, not the
1011
+ // registry. Backend availability + auth still get verified for
1012
+ // user-managed in the live-probe branch below.
1013
+ if (!isUserManaged) {
1014
+ const connector = getConnector(key, backend.value);
1015
+ if (!connector) {
1016
+ return c.json({
1017
+ error: "backend_not_supported",
1018
+ key,
1019
+ backend: backend.value,
1020
+ availableBackends: Object.keys(descriptorForProbe.backendConnectors),
1021
+ }, 400);
1022
+ }
1023
+ }
1024
+ // §4.11 live probe — `liveProbe: true` asks the daemon to spawn the
1025
+ // target backend and enumerate its MCP tool list. User-initiated only;
1026
+ // never fired from boot or PATCH. The descriptor + cached read paths
1027
+ // cover the other two calling conventions.
1028
+ //
1029
+ // For user-managed integrations the spawn + probeTools() call still
1030
+ // fires (this is what enforces §4.12.2 checks #1 backend resolvable
1031
+ // and #2 backend auth valid). Only the descriptor-side capability
1032
+ // evaluation is replaced by `makeUserManagedProbeResult`, which
1033
+ // carries the full live tool list as `presentTools` so dashboards
1034
+ // can show "we found N tools on your backend."
1035
+ if (body.liveProbe === true) {
1036
+ const core = deps.agentBackends?.find((c) => c.backendId === backend.value);
1037
+ if (!core) {
1038
+ return c.json({
1039
+ error: "backend_core_unavailable",
1040
+ backend: backend.value,
1041
+ message: `Backend '${backend.value}' is not registered in this daemon — cannot run live probe.`,
1042
+ }, 503);
1043
+ }
1044
+ try {
1045
+ const tools = await core.probeTools();
1046
+ const result = isUserManaged
1047
+ ? makeUserManagedProbeResult(key, backend.value, tools)
1048
+ : evaluateProbe({
1049
+ tools,
1050
+ integration: key,
1051
+ backend: backend.value,
1052
+ });
1053
+ writeProbe(db, result);
1054
+ logger.info({
1055
+ key,
1056
+ backend: backend.value,
1057
+ present: result.present,
1058
+ missingRequired: result.missingRequired,
1059
+ toolCount: result.presentTools.length,
1060
+ userManaged: isUserManaged,
1061
+ }, "integration live probe persisted");
1062
+ return c.json({
1063
+ ok: true,
1064
+ cached: false,
1065
+ liveProbe: true,
1066
+ ...(isUserManaged ? { userManaged: true } : {}),
1067
+ result,
1068
+ });
1069
+ }
1070
+ catch (err) {
1071
+ if (err instanceof LiveProbeUnsupportedError) {
1072
+ return c.json({
1073
+ error: "live_probe_unsupported",
1074
+ backend: backend.value,
1075
+ message: err.reason,
1076
+ }, 501);
1077
+ }
1078
+ logger.error({ err, key, backend: backend.value }, "live probe failed");
1079
+ return c.json({
1080
+ error: "live_probe_failed",
1081
+ backend: backend.value,
1082
+ message: err instanceof Error ? err.message : String(err),
1083
+ }, 500);
1084
+ }
1085
+ }
1086
+ const tools = body?.tools;
1087
+ if (tools === undefined) {
1088
+ const cached = readProbe(db, key, backend.value);
1089
+ // 200 + result:null when there's no cached row — distinguishes
1090
+ // "endpoint missing" (which the unknown_integration / 404 above
1091
+ // covers) from "endpoint worked but the cache is empty," so the
1092
+ // dashboard callers can branch without parsing error codes.
1093
+ return c.json({
1094
+ ok: true,
1095
+ cached: cached !== null,
1096
+ ...(isUserManaged ? { userManaged: true } : {}),
1097
+ result: cached,
1098
+ });
1099
+ }
1100
+ if (!Array.isArray(tools) || tools.some((t) => typeof t !== "string")) {
1101
+ return c.json({
1102
+ error: "invalid_body",
1103
+ message: "`tools` must be an array of MCP tool names (strings).",
1104
+ }, 400);
1105
+ }
1106
+ try {
1107
+ const result = isUserManaged
1108
+ ? makeUserManagedProbeResult(key, backend.value, tools)
1109
+ : evaluateProbe({
1110
+ tools: tools,
1111
+ integration: key,
1112
+ backend: backend.value,
1113
+ });
1114
+ writeProbe(db, result);
1115
+ logger.info({
1116
+ key,
1117
+ backend: backend.value,
1118
+ present: result.present,
1119
+ missingRequired: result.missingRequired,
1120
+ toolCount: result.presentTools.length,
1121
+ userManaged: isUserManaged,
1122
+ }, "integration probe persisted");
1123
+ return c.json({
1124
+ ok: true,
1125
+ cached: false,
1126
+ ...(isUserManaged ? { userManaged: true } : {}),
1127
+ result,
1128
+ });
1129
+ }
1130
+ catch (err) {
1131
+ logger.error({ err, key, backend: backend.value }, "probe evaluation failed");
1132
+ return c.json({ error: "internal_error" }, 500);
1133
+ }
1134
+ });
1135
+ return app;
1136
+ }
1137
+ /**
1138
+ * Tolerant JSON body reader for POST routes that accept an empty body
1139
+ * (e.g. `POST /integrations/:key/probe` with no `tools` defaults to a
1140
+ * cached read). Returns `{}` for an empty body, `null` for invalid JSON,
1141
+ * and the parsed value otherwise.
1142
+ */
1143
+ async function readOptionalJsonBody(c) {
1144
+ try {
1145
+ const raw = await c.req.text();
1146
+ if (raw.trim() === "")
1147
+ return {};
1148
+ return JSON.parse(raw);
1149
+ }
1150
+ catch {
1151
+ return null;
1152
+ }
1153
+ }
1154
+ function resolveProbeBackend(raw, db, key) {
1155
+ if (typeof raw === "string") {
1156
+ if (!BACKEND_IDS.includes(raw)) {
1157
+ return {
1158
+ ok: false,
1159
+ status: 400,
1160
+ error: {
1161
+ error: "invalid_backend",
1162
+ message: `Unknown backend '${raw}'.`,
1163
+ supportedBackends: BACKEND_IDS,
1164
+ },
1165
+ };
1166
+ }
1167
+ return { ok: true, value: raw };
1168
+ }
1169
+ if (raw !== undefined) {
1170
+ return {
1171
+ ok: false,
1172
+ status: 400,
1173
+ error: {
1174
+ error: "invalid_backend",
1175
+ message: "`backend` must be a string when provided.",
1176
+ },
1177
+ };
1178
+ }
1179
+ // Default to the integration's `delegatedBackend` when one is
1180
+ // configured — this is the backend the wizard would commit against.
1181
+ const state = readIntegrations(db)[key];
1182
+ if (state.delegatedBackend) {
1183
+ return { ok: true, value: state.delegatedBackend };
1184
+ }
1185
+ return {
1186
+ ok: false,
1187
+ status: 400,
1188
+ error: {
1189
+ error: "backend_required",
1190
+ message: "Pass `backend` in the request body — this integration is not currently delegated, so the daemon cannot infer one.",
1191
+ },
1192
+ };
1193
+ }
1194
+ function recordAuditModeChange(db, key, previous, next) {
1195
+ try {
1196
+ db.prepare(`INSERT INTO agent_actions
1197
+ (event_id, action_type, trigger, result, detail, started_at, completed_at)
1198
+ VALUES (?, 'integration.mode_change', 'reactive', 'success', ?, datetime('now'), datetime('now'))`).run(`integration:${key}:${Date.now()}`, JSON.stringify({
1199
+ key,
1200
+ from: {
1201
+ mode: previous.mode,
1202
+ delegatedBackend: previous.delegatedBackend ?? null,
1203
+ },
1204
+ to: {
1205
+ mode: next.mode,
1206
+ delegatedBackend: next.delegatedBackend ?? null,
1207
+ },
1208
+ }));
1209
+ }
1210
+ catch (err) {
1211
+ logger.warn({ err, key }, "failed to write integration audit row");
1212
+ }
1213
+ }
1214
+ function recordAuditPolicyChange(db, key, diff) {
1215
+ try {
1216
+ db.prepare(`INSERT INTO agent_actions
1217
+ (event_id, action_type, trigger, result, detail, started_at, completed_at)
1218
+ VALUES (?, 'integration.policy_change', 'reactive', 'success', ?, datetime('now'), datetime('now'))`).run(`integration:${key}:policy:${Date.now()}`, JSON.stringify({ key, deniedTools: diff }));
1219
+ }
1220
+ catch (err) {
1221
+ logger.warn({ err, key }, "failed to write integration policy audit row");
1222
+ }
1223
+ }
1224
+ function diffDeniedTools(previous, next) {
1225
+ const prevSet = new Set(previous);
1226
+ const nextSet = new Set(next);
1227
+ const added = next.filter((t) => !prevSet.has(t));
1228
+ const removed = previous.filter((t) => !nextSet.has(t));
1229
+ return { added, removed };
1230
+ }
1231
+ /**
1232
+ * Clamp a numeric request-body field to [min, max], applying `defaultValue`
1233
+ * when omitted. Returns null on invalid input (NaN / wrong type), letting
1234
+ * the caller surface a validation_error. When `allowFloat` is true (used
1235
+ * for USD budgets), accepts floating-point; otherwise integer-only.
1236
+ */
1237
+ function clampNumber(raw, defaultValue, min, max, allowFloat = false) {
1238
+ if (raw === undefined || raw === null)
1239
+ return defaultValue;
1240
+ if (typeof raw !== "number" || !Number.isFinite(raw))
1241
+ return null;
1242
+ if (!allowFloat && !Number.isInteger(raw))
1243
+ return null;
1244
+ if (raw < min || raw > max)
1245
+ return null;
1246
+ return raw;
1247
+ }
1248
+ /**
1249
+ * DELEGATED-TASK-MODE-DESIGN.md §10 — map the task-mode error class to an
1250
+ * HTTP status code. Mirrors the design's table 1:1.
1251
+ */
1252
+ function mapTaskErrorClassToHttpStatus(errorClass) {
1253
+ switch (errorClass) {
1254
+ case "task_mode_disabled":
1255
+ return 503;
1256
+ case "task_quota_exhausted":
1257
+ return 429;
1258
+ case "task_mode_unsupported":
1259
+ return 501;
1260
+ case "delegated_proxy_busy":
1261
+ return 503;
1262
+ case "denied_tool":
1263
+ return 403;
1264
+ case "precondition":
1265
+ return 409;
1266
+ case "auth_error":
1267
+ return 502;
1268
+ case "tool_failed":
1269
+ case "tool_unavailable":
1270
+ case "parse_error":
1271
+ case "schema_violation":
1272
+ case "policy_violation":
1273
+ case "post_write_format_failure":
1274
+ case "loop_aborted":
1275
+ case "budget_exhausted":
1276
+ return 502;
1277
+ case "timeout":
1278
+ case "cancelled":
1279
+ return 504;
1280
+ case "subprocess_crashed":
1281
+ default:
1282
+ return 500;
1283
+ }
1284
+ }
1285
+ function safeParseJson(s) {
1286
+ try {
1287
+ const parsed = JSON.parse(s);
1288
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
1289
+ return parsed;
1290
+ }
1291
+ return null;
1292
+ }
1293
+ catch {
1294
+ return null;
1295
+ }
1296
+ }
1297
+ /**
1298
+ * INTEGRATION-DRIFT-DETECTION-PLAN.md §11 Phase 4 — delegated chokepoint
1299
+ * actor attribution. Branches on `connector.destructiveTools` membership;
1300
+ * non-destructive tools (search / read / list) are left untouched. For
1301
+ * write tools we run the response-shape extractor and fall back to args-
1302
+ * shape extraction (for `{ ok: true }`-only label / archive responses);
1303
+ * each surfaced id is marked in the persistent `integration_writes`
1304
+ * table with the per-integration default TTL.
1305
+ *
1306
+ * Called from two surfaces:
1307
+ * - The `/exec` success path (active) — once per successful destructive
1308
+ * trace step. Each trace entry carries the parsed upstream
1309
+ * `toolResult`, so the response-shape extractor and the args-side
1310
+ * fallback both fire normally — symmetric to the legacy /invoke path
1311
+ * (id-in-response writes like send_email / create_event /
1312
+ * notion-create-pages are recovered in addition to id-in-args
1313
+ * deletes / updates / labels).
1314
+ * - The reserved `/invoke` route (commented) — once per call with the
1315
+ * full upstream `result.toolResult`. Same response-shape walk.
1316
+ *
1317
+ * Idempotent on extraction miss: returning early without any mark is the
1318
+ * documented degradation path (causes one self-noticed observation, not
1319
+ * data loss). The route handler always returns 2xx on a successful
1320
+ * upstream call — this helper never throws back.
1321
+ */
1322
+ function maybeMarkIntegrationWrite(db, args) {
1323
+ if (!args.connector)
1324
+ return;
1325
+ if (!args.connector.destructiveTools.includes(args.bareTool))
1326
+ return;
1327
+ const extracted = extractWriteItemIds({
1328
+ integration: args.integration,
1329
+ bareTool: args.bareTool,
1330
+ toolResult: args.toolResult,
1331
+ args: args.args,
1332
+ });
1333
+ if (extracted.itemIds.length === 0) {
1334
+ logger.debug({
1335
+ integration: args.integration,
1336
+ bareTool: args.bareTool,
1337
+ reason: extracted.reason,
1338
+ }, "destructive tool succeeded but no item id extracted — actor attribution will fall through to 'user' on next reconcile");
1339
+ return;
1340
+ }
1341
+ for (const id of extracted.itemIds) {
1342
+ markIntegrationWrite(db, args.integration, id);
1343
+ }
1344
+ logger.debug({
1345
+ integration: args.integration,
1346
+ bareTool: args.bareTool,
1347
+ reason: extracted.reason,
1348
+ itemCount: extracted.itemIds.length,
1349
+ }, "marked integration_writes for destructive delegated call");
1350
+ }
1351
+ // ─────────────────────────────────────────────────────────────────────
1352
+ // RESERVED — `resolveCanonicalBareTool`
1353
+ //
1354
+ // Helper for the commented-out RPC `/invoke` route. Preserved verbatim
1355
+ // alongside the route handler for future reactivation.
1356
+ //
1357
+ // The /exec migration removed the brittle "agent supplies the bare
1358
+ // tool name" coupling that this helper compensated for; future RPC
1359
+ // re-introduction (admin endpoint, cost-sensitive fast path) would
1360
+ // likely want a *more* complete cross-backend alias translator
1361
+ // (walk every connector under the integration, not just the active
1362
+ // one) — see the alias-divergence root-cause notes in the route
1363
+ // handler comment above for context.
1364
+ //
1365
+ // DO NOT DELETE.
1366
+ // ─────────────────────────────────────────────────────────────────────
1367
+ /*
1368
+ function resolveCanonicalBareTool(
1369
+ connector: IntegrationBackendConnector | undefined,
1370
+ bare: string,
1371
+ ): string {
1372
+ if (!connector) return bare;
1373
+ const capTools = connector.capabilityTools;
1374
+ for (const aliases of Object.values(capTools)) {
1375
+ if (aliases.includes(bare)) return bare;
1376
+ }
1377
+ const aliasesForKey = capTools[bare];
1378
+ if (aliasesForKey && aliasesForKey.length > 0) {
1379
+ return aliasesForKey[0];
1380
+ }
1381
+ return bare;
1382
+ }
1383
+ */
1384
+ //# sourceMappingURL=integrations.js.map