@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,1271 @@
1
+ import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
2
+ import { dirname, join, relative } from "node:path";
3
+ import { APP_NAME, BACKEND_IDS, INTEGRATION_DESCRIPTORS, INTEGRATION_KEYS, applyIntegrationModeFilter, collectSessionDeniedTools, filterDeniedToolsForBackend, selectSkillVariantFile, selectTaskFlowVariantSuffix, substituteBrandTokens, } from "@aitne/shared";
4
+ import { getProfileForEvent, getProfileForProcess, getSkillsForEvent, getSkillsForProcess } from "./skills-manifest.js";
5
+ import { applyCharacterBlockRewrite, buildCharacterBlock } from "./character-block.js";
6
+ import { createLogger } from "../logging.js";
7
+ import { loadCurationDeclaration, } from "./skill-curation/declarations.js";
8
+ import { OverlayStore } from "./skill-curation/overlay-store.js";
9
+ import { hasCurationAnchors, spliceCurationAnchors, } from "./skill-curation/splicer.js";
10
+ // Exported so tests can spy on `logger.warn` (e.g. the missing-reference
11
+ // branch of `renderReferenceIncludes`). Production callers do not import it.
12
+ export const logger = createLogger("skills-compiler");
13
+ /**
14
+ * Check whether the skill AND task-flow variants a given integration would
15
+ * require when delegated to `delegatedBackend` are all present on disk.
16
+ * Returns missing file paths split by kind.
17
+ *
18
+ * DELEGATED-MODE-V2-DESIGN.md §4.1.1 — variant filenames are keyed on
19
+ * **session backend**, not the delegated backend. Three resolutions:
20
+ * - sessionBackend === delegatedBackend → `null` (no skill body, native MCP)
21
+ * - sessionBackend !== delegatedBackend → `SKILL.delegated.<sessionBackend>.md`
22
+ * (cross-backend; the daemon proxy spawns delegatedBackend)
23
+ * - non-delegated touch → `SKILL.md` (no delegated variant required)
24
+ *
25
+ * Task flow variants always fire as `delegated.<sessionBackend>` whenever
26
+ * any touched integration is delegated, regardless of same- vs cross-backend
27
+ * (`selectTaskFlowVariantSuffix`).
28
+ *
29
+ * The gate enumerates every potential session backend (`BACKEND_IDS`) and
30
+ * defers to the resolvers; that keeps the gate automatically aligned with
31
+ * `selectSkillVariantFile` / `selectTaskFlowVariantSuffix` if those grow new
32
+ * cases. We pin the integration's mode locally as `delegated` with the
33
+ * supplied `delegatedBackend` so the resolvers see the post-PATCH state.
34
+ *
35
+ * Consumed by:
36
+ * - `SkillsCompiler.validateDelegatedVariants()` — startup aggregate
37
+ * - `PATCH /api/integrations/:key` — pre-commit hard reject (§4.7)
38
+ * - `buildIntegrationHealthMap` — surfaces the list in
39
+ * `/health.integrationModes.<key>.variantsMissing`
40
+ */
41
+ /**
42
+ * Walk a materialized session subdirectory and rewrite every `.md` file with
43
+ * `{APP_NAME}` tokens resolved. Called immediately after `cpSync(src, dest, …)`
44
+ * so the verbatim copy from `agent-assets/` becomes brand-substituted before
45
+ * any downstream transform (renderReferenceIncludes, applyIntegrationModeFilter,
46
+ * tool-deny filter) reads it. Idempotent — running it twice is a no-op.
47
+ */
48
+ function substituteBrandTokensInDir(dir) {
49
+ if (!existsSync(dir))
50
+ return;
51
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
52
+ const full = join(dir, entry.name);
53
+ if (entry.isDirectory()) {
54
+ substituteBrandTokensInDir(full);
55
+ }
56
+ else if (entry.isFile() && entry.name.endsWith(".md")) {
57
+ const original = readFileSync(full, "utf-8");
58
+ const substituted = substituteBrandTokens(original);
59
+ if (substituted !== original) {
60
+ writeFileSync(full, substituted, "utf-8");
61
+ }
62
+ }
63
+ }
64
+ }
65
+ export function missingDelegatedVariants(workspaceDir, integrationKey, delegatedBackend) {
66
+ const descriptor = INTEGRATION_DESCRIPTORS[integrationKey];
67
+ const skillsRoot = join(workspaceDir, "agent-assets", "skills");
68
+ const taskFlowsRoot = join(workspaceDir, "agent-assets", "task-flows");
69
+ // Synthetic post-PATCH state. The resolvers consume only `mode` and
70
+ // `delegatedBackend`; `lastChangedAt` is required by the type but not
71
+ // read here.
72
+ const integrationsState = {
73
+ [integrationKey]: {
74
+ mode: "delegated",
75
+ delegatedBackend,
76
+ deniedTools: [],
77
+ lastChangedAt: "1970-01-01T00:00:00.000Z",
78
+ },
79
+ };
80
+ // De-dup with sets — the same file path can come up under multiple
81
+ // session backends when descriptors share a slug, even though the
82
+ // current registry doesn't produce that today.
83
+ const skills = new Set();
84
+ for (const slug of descriptor.skillsTouched) {
85
+ for (const sessionBackend of BACKEND_IDS) {
86
+ const variantFile = selectSkillVariantFile(slug, sessionBackend, integrationsState);
87
+ // null → same-backend, no body materialized; no file required.
88
+ // SKILL.md → resolver fell back to direct/disabled; no delegated file.
89
+ if (variantFile === null || variantFile === "SKILL.md")
90
+ continue;
91
+ const variantPath = join(skillsRoot, slug, variantFile);
92
+ if (!existsSync(variantPath))
93
+ skills.add(variantPath);
94
+ }
95
+ }
96
+ const taskFlows = new Set();
97
+ for (const flowKey of descriptor.taskFlowsTouched) {
98
+ for (const sessionBackend of BACKEND_IDS) {
99
+ const suffix = selectTaskFlowVariantSuffix(flowKey, sessionBackend, integrationsState);
100
+ if (suffix === "direct")
101
+ continue;
102
+ const variantPath = join(taskFlowsRoot, `${flowKey}.${suffix}.md`);
103
+ if (!existsSync(variantPath))
104
+ taskFlows.add(variantPath);
105
+ }
106
+ }
107
+ return { skills: [...skills], taskFlows: [...taskFlows] };
108
+ }
109
+ /**
110
+ * Materializes backend-specific instruction files for session workdirs
111
+ * by reading directly from the source tree (agent-assets/agent-profiles/ and
112
+ * agent-assets/skills/). User-authored skills are managed separately via workdir.ts.
113
+ *
114
+ * Previous versions maintained a "deploy" layer at {dataDir}/prompts/{backendId}/
115
+ * that was an exact copy of source. That layer was removed in favour of reading
116
+ * source directly — every session now always gets the latest files.
117
+ */
118
+ export class SkillsCompiler {
119
+ workspaceDir;
120
+ configuredServices;
121
+ mailAccounts;
122
+ integrations;
123
+ character;
124
+ constructor(workspaceDir,
125
+ /** Set of configured service names (e.g. 'calendar', 'obsidian', 'notion', 'github'). */
126
+ configuredServices = new Set(),
127
+ /**
128
+ * Snapshot of active mail accounts (§Phase 5). When non-empty and the
129
+ * `mail` skill is part of the session, an `accounts.md` file is written
130
+ * into the session's mail skill dir so the agent can resolve labels →
131
+ * accountId without a round-trip to the daemon.
132
+ *
133
+ * Intentionally generated at session-materialization time (not into the
134
+ * checked-in `agent-assets/skills/mail/` source tree) so the repo stays
135
+ * git-clean. Deviation from the design-doc phrasing — see
136
+ * `docs/design/appendices/multi-mail-provider.md` §7.
137
+ */
138
+ mailAccounts = [],
139
+ /**
140
+ * Current integration states (Phase 3). Used by `selectSkillVariantFile`
141
+ * to choose the right SKILL.*.md variant at session-materialization time.
142
+ * Defaults to empty (all integrations treated as non-delegated → SKILL.md).
143
+ */
144
+ integrations = {},
145
+ /**
146
+ * User-defined communication style / persona (design §15.4). When
147
+ * non-empty, a `## Character (user-defined)` block is rendered into
148
+ * every backend's instruction file (CLAUDE.md / AGENTS.md / GEMINI.md)
149
+ * between the safety preamble and the profile body. Defaults to the
150
+ * empty string, which omits the block.
151
+ */
152
+ character = "") {
153
+ this.workspaceDir = workspaceDir;
154
+ this.configuredServices = configuredServices;
155
+ this.mailAccounts = mailAccounts;
156
+ this.integrations = integrations;
157
+ this.character = character;
158
+ }
159
+ /**
160
+ * P22 — skill-curation overlay context. When set, the materializer runs an
161
+ * extra pass that resolves `<!-- CURATION:<kind> id="<id>" -->` anchors in
162
+ * each skill's SKILL.md against `<dataDir>/skills/overlays/<slug>/<id>.json`
163
+ * (overlay) or `agent-assets/skills/<slug>/seeds/<id>.seed.json` (seed).
164
+ *
165
+ * Optional and default-OFF — daemon code is expected to call
166
+ * `setSkillCurationContext({ dataDir })` at startup. Test workspaces and
167
+ * lint passes that don't need overlays leave it unset, which short-circuits
168
+ * the pass and is safe (anchors already render to nothing if there's no
169
+ * overlay AND no seed; a missing context_dir simply skips the pass).
170
+ */
171
+ skillCurationDataDir = null;
172
+ skillCurationCacheInvalidated = new Set();
173
+ setSkillCurationContext(opts) {
174
+ this.skillCurationDataDir = opts.dataDir;
175
+ }
176
+ /** Called by the apply / revert flow so future session materializations
177
+ * re-render the affected skill's anchors. The cache itself is per-session
178
+ * (we always read overlays from disk fresh inside the materializer) — this
179
+ * flag exists so an in-process consumer can react to writes. */
180
+ invalidateSkillCurationCache(skillSlug) {
181
+ this.skillCurationCacheInvalidated.add(skillSlug);
182
+ }
183
+ /**
184
+ * Validate that all skill AND task-flow variants required by
185
+ * currently-delegated integrations exist on disk. Called at daemon
186
+ * startup after integration state is loaded; returns missing variant
187
+ * paths grouped by kind (empty arrays = everything present).
188
+ *
189
+ * §4.7 "Missing-variant policy": if any paths come back, the caller
190
+ * should refuse to enter delegated mode or at least log a loud warning.
191
+ * The per-integration variant for the hypothetical PATCH path lives in
192
+ * the standalone `missingDelegatedVariants` helper below; this method
193
+ * aggregates across every currently-delegated integration using its
194
+ * declared `delegatedBackend` (not the session backend — see the helper
195
+ * docstring for the rationale).
196
+ */
197
+ validateDelegatedVariants() {
198
+ const skills = [];
199
+ const taskFlows = [];
200
+ for (const key of INTEGRATION_KEYS) {
201
+ const state = this.integrations[key];
202
+ if (state?.mode !== "delegated" || !state.delegatedBackend)
203
+ continue;
204
+ const result = missingDelegatedVariants(this.workspaceDir, key, state.delegatedBackend);
205
+ skills.push(...result.skills);
206
+ taskFlows.push(...result.taskFlows);
207
+ }
208
+ return { skills, taskFlows };
209
+ }
210
+ /**
211
+ * Resolve the effective SKILL.md filename for a skill + session backend pair.
212
+ *
213
+ * - `"SKILL.md"` — direct/default body
214
+ * - `"SKILL.delegated.<backend>.md"` — cross-backend variant (only if it
215
+ * exists on disk; falls back to
216
+ * `"SKILL.md"` when missing)
217
+ * - `null` — same-backend native MCP; do NOT
218
+ * materialize the skill at all
219
+ * (DELEGATED-MODE-V2-DESIGN.md §4.1.2).
220
+ */
221
+ resolveSkillVariantFile(skillSlug, backendId) {
222
+ const candidate = selectSkillVariantFile(skillSlug, backendId, this.integrations);
223
+ if (candidate === null)
224
+ return null;
225
+ if (candidate === "SKILL.md")
226
+ return "SKILL.md";
227
+ const candidatePath = join(this.getSourceSkillsRoot(), skillSlug, candidate);
228
+ return existsSync(candidatePath) ? candidate : "SKILL.md";
229
+ }
230
+ getSourceSkillsRoot() {
231
+ return join(this.workspaceDir, "agent-assets", "skills");
232
+ }
233
+ getSourceProfilesRoot() {
234
+ return join(this.workspaceDir, "agent-assets", "agent-profiles");
235
+ }
236
+ getSourceTaskFlowsRoot() {
237
+ return join(this.workspaceDir, "agent-assets", "task-flows");
238
+ }
239
+ /** Read all source skill and profile files (for dashboard inspection). */
240
+ readSourceFiles() {
241
+ const files = [];
242
+ const profilesRoot = this.getSourceProfilesRoot();
243
+ const skillsRoot = this.getSourceSkillsRoot();
244
+ if (existsSync(profilesRoot)) {
245
+ for (const file of readTreeFiles(profilesRoot)) {
246
+ files.push({ ...file, path: join("agent-profiles", file.path) });
247
+ }
248
+ }
249
+ if (existsSync(skillsRoot)) {
250
+ for (const file of readTreeFiles(skillsRoot)) {
251
+ files.push({ ...file, path: join("skills", file.path) });
252
+ }
253
+ }
254
+ return files;
255
+ }
256
+ materializeSessionBundle(params) {
257
+ const profileName = params.processKey
258
+ ? getProfileForProcess(params.processKey)
259
+ : getProfileForEvent(params.eventType);
260
+ const manifestSkills = params.processKey
261
+ ? getSkillsForProcess(params.processKey)
262
+ : getSkillsForEvent(params.eventType);
263
+ // Custom bang command override: when the dispatcher passes a slug array
264
+ // we use it verbatim, ignoring the manifest. Empty array is allowed and
265
+ // means "no skills." `null` keeps manifest behavior — the override is a
266
+ // partial replacement so a future caller can pass just `profileBody`
267
+ // without affecting skill selection.
268
+ const skills = params.override?.skillSlugs !== null
269
+ && params.override?.skillSlugs !== undefined
270
+ ? [...params.override.skillSlugs]
271
+ : manifestSkills;
272
+ const profileBodyOverride = params.override?.profileBody ?? null;
273
+ // Always materialize the `mail` skill when the manifest asks for it —
274
+ // even if the current account list is empty. The skill is inert when
275
+ // `accounts.md` is empty (it carries an explicit "no accounts
276
+ // configured" marker), and materializing unconditionally gives
277
+ // `refreshSessionMailAccountsMd` a skill dir to target when the user
278
+ // adds their first account mid-session (0→N transition). Filtering
279
+ // here would leave the skill dir absent forever since refresh only
280
+ // writes into existing dirs.
281
+ if (params.backendId === "claude") {
282
+ this.materializeClaudeSession(params.sessionDir, profileName, skills, profileBodyOverride);
283
+ }
284
+ else {
285
+ this.materializeCliSession(params.sessionDir, profileName, skills, params.backendId, params.processKey ?? params.eventType, profileBodyOverride);
286
+ }
287
+ return { profile: profileName, skills };
288
+ }
289
+ /** Read raw profile .md without safety injection. */
290
+ readProfile(profileName) {
291
+ const profilePath = join(this.getSourceProfilesRoot(), `${profileName}.md`);
292
+ if (!existsSync(profilePath))
293
+ return null;
294
+ return substituteBrandTokens(readFileSync(profilePath, "utf-8"));
295
+ }
296
+ /**
297
+ * Read the shared safety preamble (_safety.md) and append the
298
+ * `<!-- safety:end -->` sentinel so downstream helpers (notably
299
+ * `insertCharacterBlock` in `character-block.ts`) can place the
300
+ * Character block directly below safety rather than above whichever
301
+ * `## ` heading the preamble opens with. See design §15.4.2 / §15.5.
302
+ */
303
+ readSafetyPreamble() {
304
+ const safetyPath = join(this.getSourceProfilesRoot(), "_safety.md");
305
+ if (!existsSync(safetyPath))
306
+ return null;
307
+ const content = substituteBrandTokens(readFileSync(safetyPath, "utf-8")).trim();
308
+ if (!content)
309
+ return null;
310
+ return `${content}\n\n<!-- safety:end -->`;
311
+ }
312
+ /**
313
+ * Read a profile .md and prepend the shared safety preamble (_safety.md).
314
+ * Used for Claude SDK sessions where skills are separate files.
315
+ * Returns null if the profile file doesn't exist.
316
+ *
317
+ * The safety preamble is emitted with a trailing `<!-- safety:end -->`
318
+ * sentinel so the Character-block rewriter can insert below safety even
319
+ * when the preamble itself starts with `## Safety Invariants` (design
320
+ * §15.4.2 / §15.5).
321
+ */
322
+ readProfileWithSafety(profileName) {
323
+ const profilePath = join(this.getSourceProfilesRoot(), `${profileName}.md`);
324
+ if (!existsSync(profilePath))
325
+ return null;
326
+ const profile = substituteBrandTokens(readFileSync(profilePath, "utf-8"));
327
+ const safety = this.readSafetyPreamble();
328
+ if (!safety)
329
+ return profile;
330
+ // Inject safety preamble after the first heading line
331
+ const lines = profile.split("\n");
332
+ const headingIdx = lines.findIndex((l) => l.startsWith("# "));
333
+ if (headingIdx >= 0) {
334
+ // Insert after heading + its following blank line (if any)
335
+ let insertIdx = headingIdx + 1;
336
+ while (insertIdx < lines.length && lines[insertIdx].trim() === "")
337
+ insertIdx++;
338
+ // Insert before the first non-blank content after heading
339
+ const descriptionEnd = lines.findIndex((l, i) => i > headingIdx && l.startsWith("## "));
340
+ const insertAt = descriptionEnd >= 0 ? descriptionEnd : insertIdx;
341
+ lines.splice(insertAt, 0, safety, "");
342
+ return lines.join("\n");
343
+ }
344
+ // No heading found — prepend
345
+ return `${safety}\n\n${profile}`;
346
+ }
347
+ /**
348
+ * Compose a synthesized profile document from a user-supplied body — used
349
+ * by custom bang commands whose `instruction_md` replaces the
350
+ * conversational profile. Wraps the body in a top-level heading so the
351
+ * downstream `applyCharacterBlockRewrite` insertion logic finds the
352
+ * `# ` anchor it expects, then prepends the safety preamble using the
353
+ * same shape as `readProfileWithSafety` so safety always lands above
354
+ * Character + body. Empty body inputs are caller-responsibility — the
355
+ * storage layer normalises whitespace-only strings to null.
356
+ */
357
+ composeClaudeProfileFromBody(body) {
358
+ const safety = this.readSafetyPreamble();
359
+ const heading = "# Custom command instructions";
360
+ const trimmedBody = body.trim();
361
+ if (!safety) {
362
+ return `${heading}\n\n${trimmedBody}\n`;
363
+ }
364
+ return `${heading}\n\n${safety}\n\n${trimmedBody}\n`;
365
+ }
366
+ materializeClaudeSession(sessionDir, profileName, skillSlugs, profileBodyOverride) {
367
+ let profileContent = profileBodyOverride !== null
368
+ ? this.composeClaudeProfileFromBody(profileBodyOverride)
369
+ : this.readProfileWithSafety(profileName);
370
+ if (profileContent) {
371
+ // Insert the user-defined character block between the safety
372
+ // preamble and the first profile `## ` section (design §15.4.2).
373
+ // `applyCharacterBlockRewrite` is idempotent — the input here is
374
+ // a fresh render with no existing block, so this is always the
375
+ // "insert" branch.
376
+ profileContent = applyCharacterBlockRewrite(profileContent, this.character);
377
+ profileContent += "\n\n" + renderDaemonApiUsageSection(true);
378
+ mkdirSync(dirname(join(sessionDir, "CLAUDE.md")), { recursive: true });
379
+ writeFileSync(join(sessionDir, "CLAUDE.md"), profileContent, "utf-8");
380
+ }
381
+ const skillsRoot = this.getSourceSkillsRoot();
382
+ const destSkillsRoot = join(sessionDir, ".claude", "skills");
383
+ mkdirSync(destSkillsRoot, { recursive: true });
384
+ // Re-materialize cleanup: a previous turn (especially one with a wider
385
+ // skill set or a different custom-command override) may have left
386
+ // built-in skill dirs that aren't in the current `skillSlugs`. Remove
387
+ // them so the next turn's tool inventory matches expectations.
388
+ // User-authored skills live alongside built-ins in the same dir but
389
+ // are recognised by absence-from-source — those we never touch here;
390
+ // `syncAllUserSkills` is the authoritative writer for that subset.
391
+ pruneStaleBuiltinSkillDirs(destSkillsRoot, skillsRoot, skillSlugs);
392
+ for (const skillSlug of skillSlugs) {
393
+ const src = join(skillsRoot, skillSlug);
394
+ if (!existsSync(join(src, "SKILL.md"))) {
395
+ continue;
396
+ }
397
+ const variantFile = this.resolveSkillVariantFile(skillSlug, "claude");
398
+ const destDir = join(destSkillsRoot, skillSlug);
399
+ // DELEGATED-MODE-V2-DESIGN.md §4.1.2 — same-backend native MCP. The
400
+ // agent already has the connector's tools in its inventory; a skill
401
+ // body would mis-direct it at the daemon proxy (which 409s in this
402
+ // case). Remove any prior-materialization leftovers from disk so a
403
+ // mode flip (direct ↔ delegated.same-backend) doesn't leave stale
404
+ // prose in the workdir.
405
+ if (variantFile === null) {
406
+ if (existsSync(destDir)) {
407
+ rmSync(destDir, { recursive: true, force: true });
408
+ }
409
+ continue;
410
+ }
411
+ cpSync(src, destDir, { recursive: true });
412
+ // Resolve `{APP_NAME}` brand tokens in the verbatim copy before any
413
+ // downstream transform reads them. Source-of-truth: branding.ts.
414
+ substituteBrandTokensInDir(destDir);
415
+ if (variantFile !== "SKILL.md") {
416
+ // Render variant (resolving {{> base }} partials) and overwrite SKILL.md.
417
+ // Wrap the inliner output: renderPartialIncludes reads from src verbatim,
418
+ // so an `{APP_NAME}` token in SKILL.base.md would slip through if we only
419
+ // substituted `raw`. Idempotent — re-running on already-substituted text
420
+ // is a no-op.
421
+ const raw = substituteBrandTokens(readFileSync(join(src, variantFile), "utf-8"));
422
+ const rendered = substituteBrandTokens(renderPartialIncludes(raw, join(src, "SKILL.base.md")));
423
+ writeFileSync(join(destDir, "SKILL.md"), rendered, "utf-8");
424
+ }
425
+ // Resolve `{{> ref:<name> }}` directives by inlining
426
+ // `references/<name>.md` from the SOURCE skill dir. Read from src so
427
+ // the references content is canonical (the directory copy under
428
+ // `destDir/references/` is identical, but reading from src makes the
429
+ // dependency direction explicit and matches the CLI path).
430
+ //
431
+ // Order: refs BEFORE strip-services. The CLI paths
432
+ // (`materializeCliSession` inline + directory copy) both run refs
433
+ // before strip; aligning Claude here preserves the byte-equivalence
434
+ // contract (plan §3.1) for the case where a reference file carries
435
+ // `<!-- service:* -->` markers — strip-first would leak those on
436
+ // Claude while CLI scrubs them.
437
+ const destSkillMdForRefs = join(destDir, "SKILL.md");
438
+ if (existsSync(destSkillMdForRefs)) {
439
+ const raw = readFileSync(destSkillMdForRefs, "utf-8");
440
+ // renderReferenceIncludes inlines `references/*.md` directly from src,
441
+ // bypassing the post-cpSync substitution walk. Wrap the result so a
442
+ // future `{APP_NAME}` token added to a reference file resolves cleanly.
443
+ const expanded = substituteBrandTokens(renderReferenceIncludes(raw, src));
444
+ if (expanded !== raw) {
445
+ writeFileSync(destSkillMdForRefs, expanded, "utf-8");
446
+ }
447
+ }
448
+ // Strip unconfigured service sections from external-services
449
+ if (skillSlug === "external-services" && this.configuredServices.size > 0) {
450
+ const destSkillMd = join(destDir, "SKILL.md");
451
+ const raw = readFileSync(destSkillMd, "utf-8");
452
+ const stripped = stripUnconfiguredServices(raw, this.configuredServices);
453
+ if (stripped !== raw) {
454
+ writeFileSync(destSkillMd, stripped, "utf-8");
455
+ }
456
+ }
457
+ // Mode-conditional sections (`<!-- mode:<predicate>:<key> -->`)
458
+ // collapse to the right branch for the current integration state.
459
+ // Runs AFTER service-strip so unrelated service sections that carry
460
+ // mode markers still see them. Runs BEFORE the deny pass so any
461
+ // `allowed-tools` entry inside a struck branch gets removed before
462
+ // deny-list filtering inspects the frontmatter.
463
+ const destSkillMdForMode = join(destDir, "SKILL.md");
464
+ if (existsSync(destSkillMdForMode)) {
465
+ const raw = readFileSync(destSkillMdForMode, "utf-8");
466
+ const filtered = applyIntegrationModeFilter(raw, this.integrations, "claude");
467
+ if (filtered !== raw) {
468
+ writeFileSync(destSkillMdForMode, filtered, "utf-8");
469
+ }
470
+ }
471
+ // §7.7 — apply tool-deny policy AFTER partial includes and
472
+ // service-section stripping. For Claude this rewrites the
473
+ // `allowed-tools` frontmatter; the SDK enforces hard.
474
+ const destSkillMdForDeny = join(destDir, "SKILL.md");
475
+ if (existsSync(destSkillMdForDeny)) {
476
+ const raw = readFileSync(destSkillMdForDeny, "utf-8");
477
+ const filtered = applyAllDeniedToolsForSkill(raw, skillSlug, "claude", this.integrations);
478
+ if (filtered !== raw) {
479
+ writeFileSync(destSkillMdForDeny, filtered, "utf-8");
480
+ }
481
+ }
482
+ // P22 — skill-curation anchor splicer pass. Runs LAST so anchors
483
+ // resolve over the fully transformed body (mode-conditional + deny
484
+ // already applied). No-op when no curation context is configured or
485
+ // when the skill ships no curation.json.
486
+ this.spliceCurationAnchorsInSkill(destDir, skillSlug);
487
+ if (skillSlug === "mail") {
488
+ // Always write accounts.md — the empty marker (rendered when the
489
+ // list is empty) tells the agent not to guess ids, and having the
490
+ // file unconditionally keeps the refresh hook's existsSync checks
491
+ // truthful on both 0→N and N→0 transitions.
492
+ writeFileSync(join(destDir, "accounts.md"), this.mailAccounts.length > 0
493
+ ? renderMailAccountsMd(this.mailAccounts)
494
+ : EMPTY_MAIL_ACCOUNTS_MD, "utf-8");
495
+ }
496
+ }
497
+ }
498
+ /**
499
+ * P22 §1.5 — splice CURATION anchors in a single skill's materialized
500
+ * SKILL.md against overlay/seed JSON. Pure file I/O — overlay store
501
+ * dictates payload precedence (overlay > seed > strip-line). No-op when
502
+ * no curation context is configured or when the skill has no anchors.
503
+ */
504
+ spliceCurationAnchorsInSkill(destDir, skillSlug) {
505
+ if (!this.skillCurationDataDir)
506
+ return;
507
+ const skillMdPath = join(destDir, "SKILL.md");
508
+ if (!existsSync(skillMdPath))
509
+ return;
510
+ const md = readFileSync(skillMdPath, "utf-8");
511
+ if (!hasCurationAnchors(md))
512
+ return;
513
+ let decl;
514
+ try {
515
+ decl = loadCurationDeclaration(this.getSourceSkillsRoot(), skillSlug);
516
+ }
517
+ catch (err) {
518
+ logger.warn({ skillSlug, err: err instanceof Error ? err.message : String(err) }, "skill_curation.declaration.invalid");
519
+ return;
520
+ }
521
+ const overlay = new OverlayStore(this.skillCurationDataDir, this.getSourceSkillsRoot());
522
+ const knownIds = decl ? new Set(decl.sections.map((s) => s.id)) : undefined;
523
+ const result = spliceCurationAnchors(md, (sectionId, kind) => overlay.readPayload(skillSlug, sectionId, kind), { knownSectionIds: knownIds });
524
+ if (result.warnings.length > 0) {
525
+ for (const w of result.warnings) {
526
+ logger.warn({ skillSlug, anchorId: w.anchorId, code: w.code, message: w.message }, w.code);
527
+ }
528
+ }
529
+ if (result.body !== md) {
530
+ writeFileSync(skillMdPath, result.body, "utf-8");
531
+ }
532
+ }
533
+ materializeCliSession(sessionDir, profileName, skillSlugs, backendId, processKey, profileBodyOverride) {
534
+ // Skills are inlined in the instruction file (AGENTS.md / GEMINI.md) for
535
+ // guaranteed availability AND copied to the backend-specific skill
536
+ // directory for native CLI skill discovery. The directory copy only adds
537
+ // ~20 tokens per skill at session start (name + description); full body
538
+ // is lazy-loaded on activation. Belt-and-suspenders: inline ensures task
539
+ // flow prompts always have API references in context; directories let the
540
+ // CLI's native skill activation and tooling work.
541
+ const skillsRoot = this.getSourceSkillsRoot();
542
+ const skillContents = {};
543
+ for (const skillSlug of skillSlugs) {
544
+ const src = join(skillsRoot, skillSlug);
545
+ const variantFile = this.resolveSkillVariantFile(skillSlug, backendId);
546
+ // DELEGATED-MODE-V2-DESIGN.md §4.1.2 — same-backend native MCP path:
547
+ // skip the inline. The connector's own tool descriptions, present in
548
+ // the CLI's tool inventory at session-init, are the authoritative
549
+ // surface for the agent.
550
+ if (variantFile === null)
551
+ continue;
552
+ const skillMdPath = join(src, variantFile);
553
+ if (!existsSync(skillMdPath)) {
554
+ continue;
555
+ }
556
+ let raw = substituteBrandTokens(readFileSync(skillMdPath, "utf-8"));
557
+ // Resolve {{> base }} partials before inlining. Wrap the result —
558
+ // SKILL.base.md is read directly from src and would slip past the
559
+ // single-point-of-change contract if it grew an `{APP_NAME}` token.
560
+ raw = substituteBrandTokens(renderPartialIncludes(raw, join(src, "SKILL.base.md")));
561
+ // Resolve `{{> ref:<name> }}` directives by inlining
562
+ // `references/<name>.md` from the source skill dir. Runs AFTER the
563
+ // base-partial resolver so a base-partial fragment can itself carry
564
+ // `{{> ref:* }}` markers (one-level nesting cap; references inside
565
+ // references are intentionally NOT resolved per §4.7 / NG5). Same
566
+ // src-bypass concern as above — wrap the result.
567
+ raw = substituteBrandTokens(renderReferenceIncludes(raw, src));
568
+ // Strip unconfigured service sections before inlining
569
+ if (skillSlug === "external-services" && this.configuredServices.size > 0) {
570
+ raw = stripUnconfiguredServices(raw, this.configuredServices);
571
+ }
572
+ // Mode-conditional sections — see materializeClaudeSession for the
573
+ // ordering rationale. Same filter, same ordering: service-strip
574
+ // then mode-filter then deny.
575
+ raw = applyIntegrationModeFilter(raw, this.integrations, backendId);
576
+ // §7.7 — apply tool-deny policy. For CLI backends this appends the
577
+ // soft-enforcement prose block; the inline-into-AGENTS.md path
578
+ // strips frontmatter below, so the deny block must already be in
579
+ // body content before that strip.
580
+ raw = applyAllDeniedToolsForSkill(raw, skillSlug, backendId, this.integrations);
581
+ // Inline content for instruction file — strip frontmatter (Claude-specific
582
+ // YAML metadata like allowed-tools has no meaning for CLI backends).
583
+ skillContents[skillSlug] = stripFrontmatter(raw);
584
+ }
585
+ // Read profile and safety separately so renderCliInstructionFile can
586
+ // place safety at the top level for prominence (instead of burying it
587
+ // inside the profile section). For custom bang commands the dispatcher
588
+ // passes a `profileBodyOverride` that replaces the persona body; the
589
+ // safety + character + skills sections still wrap around it via
590
+ // `renderCliInstructionFile`.
591
+ const profileContent = profileBodyOverride !== null
592
+ ? profileBodyOverride.trim()
593
+ : (this.readProfile(profileName) ?? "");
594
+ const safetyContent = this.readSafetyPreamble();
595
+ const characterBlock = buildCharacterBlock(this.character);
596
+ // DELEGATED-MODE-V2-DESIGN.md §4.3.3-§4.3.4 — same-backend deny prose.
597
+ // Codex's connector apps (`mcp__codex_apps__*`) are built into the CLI
598
+ // and have no admin-policy or per-tool deny surface (γ outcome). Prose
599
+ // injection into AGENTS.md is the only enforcement available. For
600
+ // Gemini, the admin-policy already hard-denies the same tools; the
601
+ // prose duplicates intent so the agent doesn't waste tokens drafting
602
+ // calls that will be denied at the policy layer.
603
+ const sameBackendDenyBlock = buildSameBackendDenyBlock(this.integrations, backendId);
604
+ const instruction = renderCliInstructionFile({
605
+ backendId,
606
+ processKey,
607
+ profileName,
608
+ profileContent,
609
+ safetyContent,
610
+ characterBlock,
611
+ skillSlugs,
612
+ skillContents,
613
+ sameBackendDenyBlock,
614
+ });
615
+ writeFileSync(join(sessionDir, backendId === "codex" ? "AGENTS.md" : "GEMINI.md"), instruction, "utf-8");
616
+ // Copy skills to the backend-specific skill directory for native CLI
617
+ // discovery: .codex/skills/<slug>/ or .gemini/skills/<slug>/
618
+ const cliSkillsDir = cliSkillsDirName(backendId);
619
+ const destSkillsRoot = join(sessionDir, cliSkillsDir, "skills");
620
+ mkdirSync(destSkillsRoot, { recursive: true });
621
+ // See `materializeClaudeSession` — same prune contract for CLI workdirs.
622
+ pruneStaleBuiltinSkillDirs(destSkillsRoot, skillsRoot, skillSlugs);
623
+ for (const skillSlug of skillSlugs) {
624
+ const src = join(skillsRoot, skillSlug);
625
+ const variantFile = this.resolveSkillVariantFile(skillSlug, backendId);
626
+ const destDir = join(destSkillsRoot, skillSlug);
627
+ // §4.1.2 same-backend short-circuit: no SKILL.md / .codex/skills/<slug>
628
+ // / .gemini/skills/<slug> directory written. The connector ships its
629
+ // own descriptions; injecting prose only confuses the dispatch.
630
+ // Remove any prior-materialization leftovers so a mode flip doesn't
631
+ // leak stale prose into the workdir.
632
+ if (variantFile === null) {
633
+ if (existsSync(destDir)) {
634
+ rmSync(destDir, { recursive: true, force: true });
635
+ }
636
+ continue;
637
+ }
638
+ const variantPath = join(src, variantFile);
639
+ if (!existsSync(variantPath)) {
640
+ continue;
641
+ }
642
+ // Copy the whole skill directory (scripts/, references/, etc.)
643
+ cpSync(src, destDir, { recursive: true });
644
+ // Resolve `{APP_NAME}` brand tokens in the verbatim copy before any
645
+ // downstream transform reads them. Source-of-truth: branding.ts.
646
+ substituteBrandTokensInDir(destDir);
647
+ // Render variant (resolving partials), adapt frontmatter for CLI, and
648
+ // write as SKILL.md in the dest dir.
649
+ let adapted = substituteBrandTokens(readFileSync(variantPath, "utf-8"));
650
+ // SKILL.base.md and references/*.md are read directly from src by these
651
+ // inliners; wrap the results so future tokens added to those files still
652
+ // reach single-point-of-change. Idempotent.
653
+ adapted = substituteBrandTokens(renderPartialIncludes(adapted, join(src, "SKILL.base.md")));
654
+ // Resolve `{{> ref:<name> }}` directives — keeps the
655
+ // `.codex/skills/<slug>/SKILL.md` and `.gemini/skills/<slug>/SKILL.md`
656
+ // bodies byte-identical to the inline-into-AGENTS.md / GEMINI.md
657
+ // copy emitted above (modulo CLI frontmatter strip), preserving the
658
+ // "guaranteed availability" contract that motivated this resolver.
659
+ adapted = substituteBrandTokens(renderReferenceIncludes(adapted, src));
660
+ if (skillSlug === "external-services" && this.configuredServices.size > 0) {
661
+ adapted = stripUnconfiguredServices(adapted, this.configuredServices);
662
+ }
663
+ // Mode-conditional filter — keep this dest-dir copy byte-aligned with
664
+ // the inline copy emitted into AGENTS.md / GEMINI.md (modulo
665
+ // adaptSkillForCli's frontmatter strip). The filter is idempotent so
666
+ // running it on both copies independently is safe.
667
+ adapted = applyIntegrationModeFilter(adapted, this.integrations, backendId);
668
+ // §7.7 — apply tool-deny policy BEFORE adaptSkillForCli strips
669
+ // frontmatter so the soft-enforcement prose block lands in body
670
+ // content (CLI skills carry only `name` + `description` in
671
+ // frontmatter, no `allowed-tools` to filter).
672
+ adapted = applyAllDeniedToolsForSkill(adapted, skillSlug, backendId, this.integrations);
673
+ adapted = adaptSkillForCli(adapted);
674
+ writeFileSync(join(destDir, "SKILL.md"), adapted, "utf-8");
675
+ // P22 — splice CURATION anchors against overlay/seed JSON so the
676
+ // CLI-side .codex/.gemini skill copy stays byte-equivalent to the
677
+ // Claude-side copy after curation. No-op when no curation context.
678
+ this.spliceCurationAnchorsInSkill(destDir, skillSlug);
679
+ if (skillSlug === "mail") {
680
+ writeFileSync(join(destDir, "accounts.md"), this.mailAccounts.length > 0
681
+ ? renderMailAccountsMd(this.mailAccounts)
682
+ : EMPTY_MAIL_ACCOUNTS_MD, "utf-8");
683
+ }
684
+ }
685
+ }
686
+ }
687
+ export const EMPTY_MAIL_ACCOUNTS_MD = [
688
+ "# Mail accounts",
689
+ "",
690
+ "No active mail accounts are configured right now. The `mail` skill's API",
691
+ "calls will fail without an `accountId` — do NOT guess account ids. If no",
692
+ "account matches, tell the user no active mail account is configured and",
693
+ "stop — account setup is outside this skill's scope.",
694
+ "",
695
+ ].join("\n");
696
+ export function renderMailAccountsMd(accounts) {
697
+ const rows = accounts.map((a) => {
698
+ const label = a.label ? ` (${a.label})` : "";
699
+ return `| \`${a.id}\` | ${a.kind} | ${a.email}${label} | ${a.idleEnabled ? "IDLE" : "poll"} |`;
700
+ });
701
+ return [
702
+ "# Mail accounts",
703
+ "",
704
+ "Active mail accounts this session can use. Resolve `accountId` from this",
705
+ "table before calling `/api/mail/:accountId/*`. Inactive / unhealthy",
706
+ "accounts are omitted by design — no global \"primary\" default exists;",
707
+ "pick the account from conversation context (reply thread, user mention,",
708
+ "or a single active row) and ask when ambiguous.",
709
+ "",
710
+ "| accountId | kind | email | transport |",
711
+ "|---|---|---|---|",
712
+ ...rows,
713
+ "",
714
+ ].join("\n");
715
+ }
716
+ /**
717
+ * Return the backend-specific skills directory name for a given backend.
718
+ * Returns null for Claude (which uses `.claude/skills/` managed separately).
719
+ */
720
+ export function cliSkillsDirName(backendId) {
721
+ switch (backendId) {
722
+ case "codex": return ".codex";
723
+ case "gemini": return ".gemini";
724
+ default: return null;
725
+ }
726
+ }
727
+ /**
728
+ * Session instruction files the live-overwrite path (design §15.6.1 /
729
+ * §15.9) walks when the owner PATCHes `character` mid-session. Each file
730
+ * corresponds to a backend (CLAUDE.md = Claude Code SDK, AGENTS.md =
731
+ * Codex CLI, GEMINI.md = Gemini CLI). A workdir that has already seen a
732
+ * heavy-tier fallback can contain two of these side-by-side — see
733
+ * CLAUDE.md "Fallback re-materialization".
734
+ */
735
+ const CHARACTER_INSTRUCTION_FILES = [
736
+ "CLAUDE.md",
737
+ "AGENTS.md",
738
+ "GEMINI.md",
739
+ ];
740
+ /**
741
+ * Rewrite the `## Character (user-defined)` block inside every backend
742
+ * instruction file that currently lives in `workdir`. Used by the
743
+ * `PATCH /api/config` live-overwrite path (§15.6.1) so an owner editing
744
+ * character on the dashboard doesn't have to wait for the next session
745
+ * spawn for the change to land.
746
+ *
747
+ * Multi-backend aware: a workdir that has seen a Claude→Codex fallback
748
+ * contains both CLAUDE.md and AGENTS.md, and both must end up byte-
749
+ * identical in their character block. Each write is atomic (tmp +
750
+ * rename, both on the same filesystem so rename stays cheap) and
751
+ * per-file errors are logged without failing the whole call.
752
+ *
753
+ * Returns a summary of how many files were rewritten. Useful for
754
+ * instrumentation and for the dashboard PATCH handler to log.
755
+ *
756
+ * The helper is an FS wrapper: its pure parse/compose half lives in
757
+ * `character-block.ts` and is covered 100% there. This side is excluded
758
+ * from coverage along with the rest of `skills-compiler.ts`.
759
+ */
760
+ export function rewriteCharacterBlock(workdir, character) {
761
+ const summary = { rewritten: 0, skipped: 0, failed: 0 };
762
+ for (const name of CHARACTER_INSTRUCTION_FILES) {
763
+ const target = join(workdir, name);
764
+ if (!existsSync(target)) {
765
+ summary.skipped++;
766
+ continue;
767
+ }
768
+ try {
769
+ const current = readFileSync(target, "utf-8");
770
+ const next = applyCharacterBlockRewrite(current, character);
771
+ if (next === current) {
772
+ summary.skipped++;
773
+ continue;
774
+ }
775
+ // `.tmp` lives next to the target so the rename stays on one
776
+ // filesystem (design R1 mitigation).
777
+ const tmp = `${target}.tmp`;
778
+ writeFileSync(tmp, next, "utf-8");
779
+ renameSync(tmp, target);
780
+ summary.rewritten++;
781
+ }
782
+ catch (err) {
783
+ // Per-file logging so a partial failure (e.g. CLAUDE.md written,
784
+ // AGENTS.md EACCES) is recoverable post-hoc — the outer PATCH
785
+ // handler only sees aggregate totals.
786
+ logger.warn({ err, target }, "rewriteCharacterBlock failed to update instruction file");
787
+ summary.failed++;
788
+ }
789
+ }
790
+ return summary;
791
+ }
792
+ function renderCliInstructionFile(params) {
793
+ const toolName = params.backendId === "codex" ? "AGENTS.md" : "GEMINI.md";
794
+ const parts = [
795
+ `# ${APP_NAME} ${toolName}`,
796
+ "",
797
+ `Process key: \`${params.processKey}\``,
798
+ `Profile: \`${params.profileName}\``,
799
+ "",
800
+ ];
801
+ // Safety invariants at top level for prominence — CLI backends don't
802
+ // have a separate project-instruction layer, so burying safety inside
803
+ // the profile section risks it being overlooked by weaker models.
804
+ if (params.safetyContent) {
805
+ parts.push(params.safetyContent, "");
806
+ }
807
+ // User-defined character sits immediately after safety so it strictly
808
+ // outranks every profile / skill / task-flow layer below it, and
809
+ // strictly below safety (design §15.4.2 / §15.5).
810
+ if (params.characterBlock) {
811
+ parts.push(params.characterBlock, "");
812
+ }
813
+ // DELEGATED-MODE-V2-DESIGN.md §4.3.4 — same-backend integration deny block.
814
+ // Sits right after character / safety (above behavioral rules + skills) so
815
+ // weak models cannot miss it. For Codex this is the only enforcement
816
+ // surface; for Gemini it duplicates the admin-policy hard-deny.
817
+ if (params.sameBackendDenyBlock) {
818
+ parts.push(params.sameBackendDenyBlock, "");
819
+ }
820
+ // Behavioral rules that Claude Code receives via system prompt append but
821
+ // CLI backends don't have a system prompt layer for.
822
+ parts.push("## Behavioral rules", "", "- WhatsApp outbound messages are prefixed by the daemon. Do not add that prefix yourself unless the user explicitly asks.", "");
823
+ // Daemon-API usage hoisted ABOVE the skills (was: appended at the end
824
+ // of the file). Skill bodies inline below carry hundreds of `curl
825
+ // http://localhost:8321/api/...` examples; for Codex specifically those
826
+ // examples target endpoints that return 401 because Codex does not
827
+ // hold the read-sensitive token. Surfacing the constraint up-front
828
+ // gives the agent the routing rule before it reads the first skill.
829
+ // For Gemini / Claude the section is informational; the position is
830
+ // kept consistent so the rendered file shape is uniform.
831
+ parts.push(renderDaemonApiUsageSection(params.backendId !== "codex"), "");
832
+ parts.push("## Runtime profile", "", params.profileContent.trim(), "", "## Skills", "");
833
+ if (params.skillSlugs.length === 0) {
834
+ parts.push("No process-scoped built-in skills were selected for this turn.");
835
+ }
836
+ else {
837
+ for (const slug of params.skillSlugs) {
838
+ const content = params.skillContents[slug];
839
+ if (content) {
840
+ parts.push(`### ${slug}`, "", content.trim(), "");
841
+ }
842
+ else {
843
+ parts.push(`### ${slug}`, "", `See \`skills/${slug}/SKILL.md\` for details.`, "");
844
+ }
845
+ }
846
+ }
847
+ parts.push("", "User-authored skills may also exist under `skills/<name>/SKILL.md`.");
848
+ return parts.join("\n");
849
+ }
850
+ function renderDaemonApiUsageSection(readSensitiveAvailable) {
851
+ const lines = [
852
+ "## Daemon API Usage",
853
+ "",
854
+ "- Use plain `curl` for daemon API calls. The daemon prepends a session-local wrapper on PATH.",
855
+ "- Never use absolute curl paths, alternative HTTP clients, connection overrides, or custom auth headers.",
856
+ ];
857
+ if (readSensitiveAvailable) {
858
+ lines.push("- The wrapper auto-attaches session auth for read-sensitive endpoints.");
859
+ }
860
+ else {
861
+ lines.push("", "### Read-sensitive endpoints are UNAVAILABLE on this backend", "", "Codex sessions do not receive the read-sensitive daemon token. The", "wrapper still prepends headers it can supply, but the daemon answers", "personal-data reads with `401 Unauthorized` regardless. Endpoints", "below are affected; the skill bodies in `## Skills` describe them", "as if they were available — treat the section as a contract you", "cannot satisfy on this backend.", "", "- Context vault: `GET /api/context/*`, `GET /api/context/list/*`", "- Mail (multi-provider): `GET /api/mail/*` (read), search, providers", "- Calendar (direct mode): `GET /api/calendar/*`", "- Notion (direct mode): `GET /api/notion/{query,search,pages}`", "- Obsidian: `GET /api/obsidian/*`", "- Observations: `GET /api/observations`", "- Reading list / receipts / travel bookings", "", "If a skill body directs you at one of these reads, stop and tell", "the user the task needs a different backend (Claude or Gemini).", "Do not hammer the endpoint — the 401 is permanent for this", "session, not transient. Writes and autonomous-tier endpoints", "stay reachable; the gate is read-sensitive scope only.");
862
+ }
863
+ return lines.join("\n");
864
+ }
865
+ /**
866
+ * Strip service sections from external-services/SKILL.md that correspond to
867
+ * unconfigured integrations. Sections are delimited by HTML comments:
868
+ * <!-- service:calendar --> ... <!-- /service:calendar -->
869
+ * When `configuredServices` is empty the content is returned unchanged — the
870
+ * "no services configured yet" case keeps every section so the agent can see
871
+ * the full menu. Only strips once the user has configured at least one
872
+ * service (and therefore expressed an intent to narrow the surface).
873
+ */
874
+ export function stripUnconfiguredServices(content, configuredServices) {
875
+ if (configuredServices.size === 0)
876
+ return content;
877
+ const servicePattern = /<!-- service:(\w+) -->\n([\s\S]*?)<!-- \/service:\1 -->\n?/g;
878
+ return content.replace(servicePattern, (match, service) => configuredServices.has(service) ? match : "");
879
+ }
880
+ /** Strip YAML frontmatter (--- ... ---) from markdown content. */
881
+ function stripFrontmatter(content) {
882
+ if (!content.startsWith("---"))
883
+ return content;
884
+ const endIdx = content.indexOf("\n---", 3);
885
+ if (endIdx < 0)
886
+ return content;
887
+ return content.slice(endIdx + 4).replace(/^\n+/, "");
888
+ }
889
+ /**
890
+ * Adapt a SKILL.md for CLI backends (Codex / Gemini): retain only `name`,
891
+ * `description`, and `when_to_use` frontmatter fields, stripping
892
+ * Claude-specific fields like `allowed-tools`. The body content is
893
+ * preserved unchanged.
894
+ *
895
+ * `when_to_use` is the secondary trigger-shape clarification documented
896
+ * in `SKILLS-PHASE-2-PLAN.md` §3.2 / §5; the Claude Agent SDK reads it
897
+ * verbatim from `q.when_to_use` (verified against
898
+ * `claude-agent-sdk@0.2.98/cli.js`). Preserving it on the CLI side keeps
899
+ * the per-backend skill frontmatter aligned even though Codex / Gemini
900
+ * do not currently consume the field — drift would surface as a missing
901
+ * activation hint when they eventually do.
902
+ *
903
+ * Assumes `name`, `description`, and `when_to_use` are each single-line
904
+ * YAML scalars (no `|` / `>` block forms). A multi-line `when_to_use:`
905
+ * is matched only by its first line — the `.+` regex stops at the
906
+ * newline — but since YAML block scalars start with the line that
907
+ * contains only `|` or `>`, the captured value would be the empty
908
+ * indicator and the inlined value would be useless. Phase 2 v1 keeps
909
+ * this conservative: callers must use single-line scalars (NG5).
910
+ */
911
+ export function adaptSkillForCli(content) {
912
+ if (!content.startsWith("---"))
913
+ return content;
914
+ const endIdx = content.indexOf("\n---", 3);
915
+ if (endIdx < 0)
916
+ return content;
917
+ const frontmatter = content.slice(4, endIdx);
918
+ const body = content.slice(endIdx + 4);
919
+ const nameMatch = frontmatter.match(/^name:\s*(.+)$/m);
920
+ const descMatch = frontmatter.match(/^description:\s*(.+)$/m);
921
+ const whenMatch = frontmatter.match(/^when_to_use:\s*(.+)$/m);
922
+ // Reject multi-line block scalars (`when_to_use: |` / `when_to_use: >`):
923
+ // their first-line capture would just be the indicator. Falling through
924
+ // to "no when_to_use" matches the documented contract (§3.4.2 #9).
925
+ const whenIsBlockScalar = whenMatch !== null && /^[|>][-+]?\s*$/.test(whenMatch[1].trim());
926
+ const parts = ["---"];
927
+ if (nameMatch)
928
+ parts.push(`name: ${nameMatch[1].trim()}`);
929
+ if (descMatch)
930
+ parts.push(`description: ${descMatch[1].trim()}`);
931
+ if (whenMatch && !whenIsBlockScalar) {
932
+ parts.push(`when_to_use: ${whenMatch[1].trim()}`);
933
+ }
934
+ parts.push("---");
935
+ return parts.join("\n") + body;
936
+ }
937
+ /**
938
+ * Resolve `{{> base }}` include directives in a skill/task-flow variant file.
939
+ * Reads `SKILL.base.md` (or `<key>.base.md` for task flows) from `basePath`
940
+ * and replaces every occurrence of `{{> base }}` with the base file's content
941
+ * (frontmatter stripped). A missing or empty base file is silently ignored.
942
+ *
943
+ * Only `{{> base }}` is supported — this is intentionally minimal (§4.7
944
+ * design note: "~40 lines of pure TS").
945
+ *
946
+ * @deprecated DELEGATED-PROXY-API-DESIGN.md §11 — after Phase D no in-tree
947
+ * skill uses `{{> base }}`: mail / external-services unified their bodies
948
+ * during Phase D, and the lone surviving `notion/SKILL.base.md` was
949
+ * removed in Phase 9 (its hourly-check read-only constraint moved to
950
+ * `routine.hourly_check.md` task-flow where the rule applies in every
951
+ * integration mode, including same-backend delegated where the skill
952
+ * body is dropped). The helper is retained for future composition needs;
953
+ * remove the call sites in `materializeClaudeSession` /
954
+ * `materializeCliSession` when no consumer reappears.
955
+ */
956
+ export function renderPartialIncludes(content, basePath) {
957
+ if (!content.includes("{{> base }}"))
958
+ return content;
959
+ if (!existsSync(basePath))
960
+ return content.replace(/\{\{> base \}\}/g, "");
961
+ const baseRaw = readFileSync(basePath, "utf-8");
962
+ const baseContent = stripFrontmatter(baseRaw).trim();
963
+ return content.replace(/\{\{> base \}\}/g, baseContent);
964
+ }
965
+ /**
966
+ * Resolve `{{> ref:<name> }}` directives in a skill body by inlining
967
+ * `references/<name>.md` (frontmatter stripped) from the skill's source dir.
968
+ *
969
+ * Mirrors `renderPartialIncludes` but is intra-skill, not cross-skill: each
970
+ * skill carries its own `references/` dir. Used by progressive-disclosure
971
+ * skills (planned for `mail`, `roadmap`, `reading`, `user-interview` after
972
+ * Phase 2-B) so heavy reference tables can live next to the skill body
973
+ * without bloating the navigation overview.
974
+ *
975
+ * Behaviour:
976
+ * - Missing `references/<name>.md` → directive replaced with empty string;
977
+ * logged at WARN. (Mirrors the deprecated helper's missing-base behaviour.)
978
+ * - The directive matches `{{> ref:<name> }}` with the strict-kebab name
979
+ * pattern `[a-z][a-z0-9-]*`. Path-traversal (`../`, leading underscore,
980
+ * uppercase) is rejected at the regex level — `existsSync` is never
981
+ * consulted for invalid names.
982
+ * - Multiple occurrences each inline the same file's content (re-read per
983
+ * occurrence — pinned by the unit tests so a later caching refactor must
984
+ * surface as a deliberate change).
985
+ * - Frontmatter on the reference file (if present) is stripped before
986
+ * inline, so reference files can carry `---\nkind: reference\n---`
987
+ * headers for tooling without leaking YAML into skill bodies.
988
+ * - The resolver is NOT fence-aware; a directive inside a triple-backtick
989
+ * fence is still expanded. This matches `renderPartialIncludes` and is
990
+ * deliberate for v1 — fence-aware resolution would be a separate refactor.
991
+ *
992
+ * Phase 2-A ships compiler-only; no in-tree skill carries a directive yet
993
+ * (`skills-manifest.test.ts` pins `0` as the lockstep count). Phase 2-B
994
+ * starts emitting them per the migration map in `SKILLS-PHASE-2-PLAN.md`.
995
+ */
996
+ export function renderReferenceIncludes(content, skillSrcDir) {
997
+ return content.replace(/\{\{> ref:([a-z][a-z0-9-]*) \}\}/g, (_match, name) => {
998
+ const refPath = join(skillSrcDir, "references", `${name}.md`);
999
+ if (!existsSync(refPath)) {
1000
+ logger.warn({ skillSrcDir, name }, "renderReferenceIncludes: missing reference file");
1001
+ return "";
1002
+ }
1003
+ return stripFrontmatter(readFileSync(refPath, "utf-8")).trim();
1004
+ });
1005
+ }
1006
+ /**
1007
+ * §7.7 — apply the per-integration tool-deny policy to a delegated skill
1008
+ * body. Two enforcement modes:
1009
+ *
1010
+ * - **Claude (hard enforcement):** parse the YAML frontmatter and remove
1011
+ * every `allowed-tools` entry whose unsuffixed name (after the
1012
+ * descriptor's `toolNamespace`) is in `deniedTools`. The Claude Agent
1013
+ * SDK refuses to invoke any tool not present in `allowed-tools`, so
1014
+ * this is hard enforcement at the SDK boundary.
1015
+ *
1016
+ * - **Codex / Gemini (soft enforcement):** append a "Denied tools (do
1017
+ * not invoke)" prose block at the end of the skill body listing the
1018
+ * full namespaced tool names. The CLI surfaces have no per-tool deny
1019
+ * mechanism comparable to Claude's `allowed-tools`; the prose is the
1020
+ * only guard. Documented soft-enforcement gap.
1021
+ *
1022
+ * Stale entries (a deniedTools name that doesn't match any tool in the
1023
+ * active backend's `capabilityTools`) are silently ignored — the API
1024
+ * already rejects them at PATCH time, but a delegatedBackend swap can
1025
+ * leave Claude-namespaced names in a list now active for Codex.
1026
+ *
1027
+ * Run AFTER `renderPartialIncludes` and `stripUnconfiguredServices` so
1028
+ * partial includes and service-section gating land first.
1029
+ */
1030
+ export function applyDeniedTools(content, integrationKey, backendId, deniedTools) {
1031
+ if (deniedTools.length === 0)
1032
+ return content;
1033
+ const descriptor = INTEGRATION_DESCRIPTORS[integrationKey];
1034
+ const connector = descriptor.backendConnectors[backendId];
1035
+ if (!connector)
1036
+ return content;
1037
+ const { active } = filterDeniedToolsForBackend(integrationKey, backendId, deniedTools);
1038
+ if (active.length === 0)
1039
+ return content;
1040
+ const namespacedDenied = active.map((t) => `${connector.toolNamespace}${t}`);
1041
+ if (backendId === "claude") {
1042
+ return filterClaudeAllowedTools(content, new Set(namespacedDenied));
1043
+ }
1044
+ return appendCliDenyBlock(content, namespacedDenied);
1045
+ }
1046
+ /**
1047
+ * Strip every `allowed-tools` frontmatter entry whose name appears in
1048
+ * `deniedSet`. Preserves frontmatter ordering, line breaks, and any other
1049
+ * fields. Tolerates two YAML shapes:
1050
+ *
1051
+ * allowed-tools:
1052
+ * - name1
1053
+ * - name2
1054
+ *
1055
+ * allowed-tools: [name1, name2]
1056
+ *
1057
+ * The first form is what every skill in `agent-assets/skills/` uses today;
1058
+ * the inline form is supported because it's valid YAML and the API + UI
1059
+ * have no way to prevent a hand-edited skill from using it.
1060
+ */
1061
+ function filterClaudeAllowedTools(content, deniedSet) {
1062
+ if (!content.startsWith("---"))
1063
+ return content;
1064
+ const endIdx = content.indexOf("\n---", 3);
1065
+ if (endIdx < 0)
1066
+ return content;
1067
+ const frontmatter = content.slice(4, endIdx);
1068
+ const body = content.slice(endIdx + 4);
1069
+ const lines = frontmatter.split("\n");
1070
+ const out = [];
1071
+ let inAllowedTools = false;
1072
+ for (const line of lines) {
1073
+ if (/^allowed-tools:\s*\[/.test(line)) {
1074
+ // Inline-array form: parse, filter, re-emit on one line.
1075
+ const m = /^(allowed-tools:\s*)\[([^\]]*)\]/.exec(line);
1076
+ if (m) {
1077
+ const items = m[2]
1078
+ .split(",")
1079
+ .map((s) => s.trim().replace(/^["']|["']$/g, ""))
1080
+ .filter((s) => s.length > 0 && !deniedSet.has(s));
1081
+ out.push(`${m[1]}[${items.join(", ")}]`);
1082
+ continue;
1083
+ }
1084
+ }
1085
+ if (/^allowed-tools:\s*$/.test(line)) {
1086
+ inAllowedTools = true;
1087
+ out.push(line);
1088
+ continue;
1089
+ }
1090
+ if (inAllowedTools) {
1091
+ // Block-list form continuation. A block-list item is ` - <name>`;
1092
+ // anything else (next top-level key, blank, or end of frontmatter)
1093
+ // ends the section.
1094
+ const itemMatch = /^\s*-\s*(.+?)\s*$/.exec(line);
1095
+ if (itemMatch) {
1096
+ const name = itemMatch[1].replace(/^["']|["']$/g, "");
1097
+ if (!deniedSet.has(name))
1098
+ out.push(line);
1099
+ continue;
1100
+ }
1101
+ // Anything else closes the block.
1102
+ inAllowedTools = false;
1103
+ }
1104
+ out.push(line);
1105
+ }
1106
+ return `---\n${out.join("\n")}\n---${body}`;
1107
+ }
1108
+ /**
1109
+ * DELEGATED-MODE-V2-DESIGN.md §4.3.3-§4.3.4 — render a top-level prose
1110
+ * deny block listing every same-backend integration tool the user has
1111
+ * denied. Returns `null` when no integration is in same-backend mode for
1112
+ * this backend or the deny lists are empty.
1113
+ *
1114
+ * Codex (γ outcome): this prose is the ONLY enforcement surface — the
1115
+ * Codex CLI's connector apps have no admin-policy or per-tool deny config.
1116
+ * The agent profile (`AGENTS.md`) inlines this block above the behavioral
1117
+ * rules so it is impossible to miss.
1118
+ *
1119
+ * Gemini: duplicate intent — admin-policy already hard-denies these tools
1120
+ * (§4.3.3 hard enforcement), but echoing the deny in prose saves tokens
1121
+ * the model would otherwise spend drafting a doomed call.
1122
+ */
1123
+ export function buildSameBackendDenyBlock(integrations, sessionBackend) {
1124
+ const map = collectSessionDeniedTools(integrations, sessionBackend);
1125
+ if (map.size === 0)
1126
+ return null;
1127
+ const lines = [
1128
+ "## Denied tools (per-integration)",
1129
+ "",
1130
+ "The user has restricted the following connector tools for this session.",
1131
+ "Do NOT invoke them in any flow — including hourly check, morning routine,",
1132
+ "or DM responses. If a workflow appears to require one, stop and tell the",
1133
+ "user the tool is denied.",
1134
+ ];
1135
+ for (const [key, names] of map.entries()) {
1136
+ lines.push("", `### ${key}`, "");
1137
+ for (const n of names)
1138
+ lines.push(`- \`${n}\``);
1139
+ }
1140
+ return lines.join("\n");
1141
+ }
1142
+ /**
1143
+ * Append a soft-enforcement deny block to a CLI skill body. The block is
1144
+ * idempotent — re-running with the same denied set produces identical
1145
+ * output.
1146
+ */
1147
+ function appendCliDenyBlock(content, namespacedDenied) {
1148
+ // Strip any prior deny block we wrote, so re-materialization with a
1149
+ // changed list doesn't accumulate stale ones. The block starts with
1150
+ // `\n## Denied tools (do not invoke)` (one preceding newline, the join
1151
+ // contributes the second) and runs until either the next `## ` heading
1152
+ // or end of file.
1153
+ const stripped = content.replace(/\n+## Denied tools \(do not invoke\)[\s\S]*?(?=\n## (?!Denied tools)|$)/, "");
1154
+ const items = namespacedDenied.map((n) => `- \`${n}\``).join("\n");
1155
+ // Two leading empty strings → block begins with "\n\n## " so the heading
1156
+ // sits on its own paragraph (markdown convention) regardless of what
1157
+ // trailing whitespace the body carried.
1158
+ const block = [
1159
+ "",
1160
+ "",
1161
+ "## Denied tools (do not invoke)",
1162
+ "",
1163
+ "The user has restricted these connector tools for this integration. Do",
1164
+ "NOT invoke them in any flow — including hourly check, morning routine,",
1165
+ "or DM responses. If a workflow appears to require one, stop and tell",
1166
+ "the user the tool is denied.",
1167
+ "",
1168
+ items,
1169
+ "",
1170
+ ].join("\n");
1171
+ return stripped.replace(/\s*$/, "") + block;
1172
+ }
1173
+ /**
1174
+ * Apply the deny pass for every integration whose `skillsTouched` OR
1175
+ * `deniedToolsAppliesToSkills` includes the given skill slug. A skill that
1176
+ * touches no integration leaves content unchanged. Touching multiple
1177
+ * integrations runs the pass once per integration so each contributes its
1178
+ * own deny list.
1179
+ *
1180
+ * Hard enforcement of the same deny list for cross-backend delegated
1181
+ * calls lives at the `POST /api/integrations/:key/invoke` chokepoint
1182
+ * (DELEGATED-MODE-V2-DESIGN.md §4.3.2). For same-backend native MCP it
1183
+ * is enforced via SDK `disallowedTools` (Claude) / admin policy
1184
+ * (Gemini); see `collectSessionDeniedTools` (§4.3.3).
1185
+ */
1186
+ export function applyAllDeniedToolsForSkill(content, skillSlug, backendId, integrations) {
1187
+ let result = content;
1188
+ for (const key of INTEGRATION_KEYS) {
1189
+ const descriptor = INTEGRATION_DESCRIPTORS[key];
1190
+ const touched = descriptor.skillsTouched.includes(skillSlug)
1191
+ || (descriptor.deniedToolsAppliesToSkills?.includes(skillSlug) ?? false);
1192
+ if (!touched)
1193
+ continue;
1194
+ const state = integrations[key];
1195
+ if (!state)
1196
+ continue;
1197
+ if (state.mode !== "delegated")
1198
+ continue;
1199
+ if (!state.delegatedBackend || state.delegatedBackend !== backendId)
1200
+ continue;
1201
+ const denied = state.deniedTools ?? [];
1202
+ if (denied.length === 0)
1203
+ continue;
1204
+ result = applyDeniedTools(result, key, backendId, denied);
1205
+ }
1206
+ return result;
1207
+ }
1208
+ /**
1209
+ * Remove any built-in skill directory under `destRoot` whose slug is not
1210
+ * in `keep`. Recognises a directory as a built-in by its presence under
1211
+ * the source `agent-assets/skills/` tree — anything else (user-authored
1212
+ * skill, accounts.md, etc.) is left alone, since `syncAllUserSkills` is
1213
+ * the canonical writer for those.
1214
+ *
1215
+ * Idempotent and side-effect-free when there is nothing to prune.
1216
+ * Exported for unit testing only.
1217
+ */
1218
+ export function pruneStaleBuiltinSkillDirs(destRoot, sourceSkillsRoot, keep) {
1219
+ if (!existsSync(destRoot))
1220
+ return;
1221
+ if (!existsSync(sourceSkillsRoot))
1222
+ return;
1223
+ const keepSet = new Set(keep);
1224
+ const builtinSlugs = new Set();
1225
+ for (const entry of readdirSync(sourceSkillsRoot, { withFileTypes: true })) {
1226
+ if (entry.isDirectory())
1227
+ builtinSlugs.add(entry.name);
1228
+ }
1229
+ for (const entry of readdirSync(destRoot, { withFileTypes: true })) {
1230
+ if (!entry.isDirectory())
1231
+ continue;
1232
+ if (!builtinSlugs.has(entry.name))
1233
+ continue;
1234
+ if (keepSet.has(entry.name))
1235
+ continue;
1236
+ rmSync(join(destRoot, entry.name), { recursive: true, force: true });
1237
+ }
1238
+ }
1239
+ function readTreeFiles(root) {
1240
+ if (!existsSync(root)) {
1241
+ return [];
1242
+ }
1243
+ const files = [];
1244
+ for (const relPath of walkTree(root)) {
1245
+ const absPath = join(root, relPath);
1246
+ const stat = statSync(absPath);
1247
+ files.push({
1248
+ path: relPath,
1249
+ content: readFileSync(absPath, "utf-8"),
1250
+ updatedAt: stat.mtime.toISOString(),
1251
+ });
1252
+ }
1253
+ return files;
1254
+ }
1255
+ function walkTree(root, current = root) {
1256
+ if (!existsSync(current)) {
1257
+ return [];
1258
+ }
1259
+ const entries = readdirSync(current, { withFileTypes: true });
1260
+ const files = [];
1261
+ for (const entry of entries) {
1262
+ const absPath = join(current, entry.name);
1263
+ if (entry.isDirectory()) {
1264
+ files.push(...walkTree(root, absPath));
1265
+ continue;
1266
+ }
1267
+ files.push(relative(root, absPath));
1268
+ }
1269
+ return files.sort();
1270
+ }
1271
+ //# sourceMappingURL=skills-compiler.js.map