@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,1693 @@
1
+ import { existsSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { INTEGRATION_DESCRIPTORS, INTEGRATION_KEYS, isAutonomousProcessKey, isPlausibleOpenAiApiKey, matchRunAllowedToolPattern, } from "@aitne/shared";
5
+ import { getContextDir } from "../../config.js";
6
+ import { cleanupSessionWorkdir, createSessionWorkdir } from "../workdir.js";
7
+ import { BackendDecisiveFailure, BackendQuotaError, DelegatedProxyTimeoutError, classifyAbortReason, } from "../agent-core.js";
8
+ import { IdleWatchdog } from "./idle-watchdog.js";
9
+ import { DELEGATED_PROXY_DEFAULTS } from "../../services/delegated-proxy-config.js";
10
+ import { buildDelegatedToolPrompt, emptyCost, flattenToolResultContent, tryParseToolResult, withDurationMs, } from "../../services/delegated-tool-runtime.js";
11
+ import { materializeMcpForSession } from "../../services/mcp/session-materializer.js";
12
+ import { parseMcpToolName } from "../../services/mcp/risk.js";
13
+ import { logMcpToolCall } from "../../services/mcp/tool-audit.js";
14
+ import { buildDaemonApiCliEnv } from "../daemon-api-cli.js";
15
+ import { createOutputCapturePath, CliPathCache, parseJsonLine, readFileIfExists, removeFileIfExists, runLineCommand, } from "./cli-utils.js";
16
+ import { probeApiKeyServerSide } from "./api-key-probe.js";
17
+ import { extractSilentApiErrors, logSilentApiErrors, } from "./silent-api-error-detector.js";
18
+ import { estimateTextInputTokens, findRegisteredModel, getModelsForBackend, latestLiteFor, } from "./model-registry.js";
19
+ import { PriceFetcher } from "./price-fetcher.js";
20
+ import { buildExecutionPrompt, buildSummaryPrompt } from "./prompt-utils.js";
21
+ import { createLogger } from "../../logging.js";
22
+ const logger = createLogger("codex-core");
23
+ const EMPTY_USAGE = {
24
+ inputTokens: 0,
25
+ outputTokens: 0,
26
+ cacheCreationInputTokens: 0,
27
+ cacheReadInputTokens: 0,
28
+ };
29
+ // Probe prompt is derived from `INTEGRATION_DESCRIPTORS.backendConnectors.codex`
30
+ // so adding a new delegated integration (Slack, GitHub, …) requires only the
31
+ // registry update. The line-based filter below (`l.startsWith("mcp__")`) is
32
+ // permissive enough to accept any namespace the registry declares; the prompt
33
+ // is what actually drives ToolSearch to enumerate them. See
34
+ // `docs/design/17-delegated-mode-v2.md` §7.1.
35
+ export const CODEX_PROBE_TOOLS_PROMPT = (() => {
36
+ const meta = [];
37
+ for (const key of INTEGRATION_KEYS) {
38
+ const descriptor = INTEGRATION_DESCRIPTORS[key];
39
+ const connector = descriptor.backendConnectors.codex;
40
+ if (!connector)
41
+ continue;
42
+ const seen = new Set();
43
+ for (const tools of Object.values(connector.capabilityTools)) {
44
+ for (const t of tools)
45
+ seen.add(t);
46
+ }
47
+ meta.push({
48
+ displayName: descriptor.displayName,
49
+ toolNamespace: connector.toolNamespace,
50
+ requiredCapabilities: connector.requiredCapabilities,
51
+ capabilityToolNames: Array.from(seen),
52
+ });
53
+ }
54
+ const prefixes = meta.map((m) => `'${m.toolNamespace}'`).join(", ");
55
+ const lines = [];
56
+ const queries = meta.map((m) => {
57
+ // Same semantic query approach as the Claude probe — display name +
58
+ // requiredCapabilities expanded to word tokens. Avoids the
59
+ // bag-of-fragments dilution that all-tool-name splitting causes.
60
+ const queryWords = [
61
+ m.displayName,
62
+ ...m.requiredCapabilities.flatMap((c) => c.split(/[-_]/)),
63
+ "connector tools",
64
+ ]
65
+ .join(" ")
66
+ .replace(/\s+/g, " ")
67
+ .trim();
68
+ return `'${queryWords}'`;
69
+ });
70
+ lines.push(`Use \`tool_search\` for each of these queries with the highest result limit available: ${queries.join("; ")}.`);
71
+ lines.push("Do not call any of the searched tools.");
72
+ lines.push(`After the searches, print only full tool names from the search results that start with one of: ${prefixes}.`);
73
+ for (const m of meta) {
74
+ if (m.capabilityToolNames.length === 0)
75
+ continue;
76
+ const fullNames = m.capabilityToolNames
77
+ .map((n) => m.toolNamespace + n)
78
+ .join(", ");
79
+ lines.push(`Include these ${m.displayName} tools if present: ${fullNames}.`);
80
+ }
81
+ lines.push("One tool name per line. No markdown fences. No explanation. If no such tools are available, print NONE.");
82
+ return lines.join(" ");
83
+ })();
84
+ export class CodexCore {
85
+ config;
86
+ priceFetcher;
87
+ backendId = "codex";
88
+ // Lazily re-resolved with a 60 s TTL — see ClaudeCodeCore for rationale (§9.4).
89
+ cliPathCache;
90
+ get cliPath() {
91
+ return this.cliPathCache.get();
92
+ }
93
+ constructor(config, priceFetcher = new PriceFetcher(config.dataDir)) {
94
+ this.config = config;
95
+ this.priceFetcher = priceFetcher;
96
+ this.cliPathCache = new CliPathCache("codex");
97
+ }
98
+ mcpContext;
99
+ setMcpContext(context) {
100
+ this.mcpContext = context;
101
+ }
102
+ async materializeMcp(sessionDir, processKey) {
103
+ if (!this.mcpContext) {
104
+ return {
105
+ servers: [],
106
+ env: {},
107
+ configPath: null,
108
+ claudeMcpServers: null,
109
+ disallowedTools: [],
110
+ };
111
+ }
112
+ // Allow mode bypasses the approve-tier MCP strip (see claude-code-core
113
+ // for the rationale — "strong permission mode" enables every MCP tool,
114
+ // autonomous routines included).
115
+ const allowMode = this.config.codexExecutionPermissionMode === "allow";
116
+ const autonomous = !allowMode && (processKey ? isAutonomousProcessKey(processKey) : false);
117
+ return materializeMcpForSession({
118
+ db: this.mcpContext.db,
119
+ blobStore: this.mcpContext.blobStore,
120
+ sessionDir,
121
+ backendId: this.backendId,
122
+ autonomous,
123
+ contextDir: getContextDir(this.config),
124
+ });
125
+ }
126
+ async execute(params, streamCallbacks) {
127
+ return await this.runTurn({
128
+ prompt: buildExecutionPrompt(params.prompt, params.context, params.event, params.conversationHistory),
129
+ modelId: params.modelId,
130
+ eventType: params.event.type,
131
+ processKey: params.processKey,
132
+ sessionDir: params.sessionDir,
133
+ maxBudgetUsd: params.maxBudgetUsd,
134
+ persistSession: params.persistSession ?? false,
135
+ turnToken: params.turnToken,
136
+ stagedAttachments: params.stagedAttachments,
137
+ sessionDbId: params.sessionDbId,
138
+ eventCorrelationId: params.event.correlationId,
139
+ }, streamCallbacks);
140
+ }
141
+ async executeResume(params, streamCallbacks) {
142
+ return await this.runTurn({
143
+ prompt: params.message,
144
+ modelId: params.modelId,
145
+ eventType: "message.received",
146
+ sessionDir: params.sessionDir,
147
+ resumeSessionId: params.sessionId,
148
+ maxBudgetUsd: params.maxBudgetUsd,
149
+ persistSession: true,
150
+ turnToken: params.turnToken,
151
+ stagedAttachments: params.stagedAttachments,
152
+ sessionDbId: params.sessionDbId,
153
+ eventCorrelationId: params.eventCorrelationId,
154
+ }, streamCallbacks);
155
+ }
156
+ async summarize(conversationText) {
157
+ const result = await this.runTurn({
158
+ prompt: buildSummaryPrompt(conversationText),
159
+ modelId: this.pickSummaryModel(),
160
+ eventType: "message.received",
161
+ persistSession: false,
162
+ });
163
+ return result.output;
164
+ }
165
+ async checkAuth() {
166
+ if (!this.cliPath) {
167
+ return { ok: false, reason: "Codex CLI is not installed or not on PATH." };
168
+ }
169
+ const rawApiKey = process.env.OPENAI_API_KEY?.trim();
170
+ if (rawApiKey) {
171
+ if (!isPlausibleOpenAiApiKey(rawApiKey)) {
172
+ return {
173
+ ok: false,
174
+ reason: "OPENAI_API_KEY is set but does not look like an OpenAI key (expected `sk-…`).",
175
+ };
176
+ }
177
+ return { ok: true, method: "api_key" };
178
+ }
179
+ if (existsSync(join(homedir(), ".codex", "auth.json"))) {
180
+ return { ok: true, method: "oauth" };
181
+ }
182
+ return {
183
+ ok: false,
184
+ reason: "Codex is not authenticated. Run `codex login` or set OPENAI_API_KEY.",
185
+ };
186
+ }
187
+ /**
188
+ * Detailed auth probe. Two modes:
189
+ * - **API key** (`OPENAI_API_KEY`): format check + server-side probe via
190
+ * `probeApiKeyServerSide("openai", ...)` (roadmap §9.1). Throws on
191
+ * network/timeout so `checkAll()` records `probe_network_error`.
192
+ * - **OAuth** (`codex login`): relies on `codex login status` exit code —
193
+ * Phase 0 confirmed that `auth.json.last_refresh` age is not a
194
+ * trustworthy staleness signal (CLI returns exit 0 even after 10+ days).
195
+ */
196
+ async checkAuthDetailed() {
197
+ if (!this.cliPath) {
198
+ return {
199
+ ok: false,
200
+ status: "missing",
201
+ method: "cli_login",
202
+ detail: "Codex CLI not found on PATH",
203
+ recoveryCommand: "npm install -g @openai/codex",
204
+ };
205
+ }
206
+ const rawApiKey = process.env.OPENAI_API_KEY?.trim();
207
+ if (rawApiKey) {
208
+ if (!isPlausibleOpenAiApiKey(rawApiKey)) {
209
+ return {
210
+ ok: false,
211
+ status: "expired",
212
+ method: "api_key",
213
+ detail: "OPENAI_API_KEY does not match OpenAI key format (expected `sk-…`).",
214
+ recoveryCommand: "Unset OPENAI_API_KEY or replace it with a valid OpenAI API key",
215
+ };
216
+ }
217
+ // Format is plausible — attempt a server-side probe to detect
218
+ // revoked keys within 1 hourly cycle (roadmap §9.1).
219
+ const probe = await probeApiKeyServerSide("openai", rawApiKey);
220
+ return {
221
+ ok: probe.ok,
222
+ status: probe.ok ? "ok" : "expired",
223
+ method: "api_key",
224
+ detail: probe.detail,
225
+ ...(!probe.ok && {
226
+ recoveryCommand: "Unset OPENAI_API_KEY or replace it with a valid OpenAI API key",
227
+ }),
228
+ };
229
+ }
230
+ try {
231
+ const result = await runLineCommand({
232
+ command: this.cliPath,
233
+ args: ["login", "status"],
234
+ cwd: process.cwd(),
235
+ timeoutMs: 10_000,
236
+ });
237
+ if (result.exitCode === 0) {
238
+ return { ok: true, status: "ok", method: "oauth" };
239
+ }
240
+ return {
241
+ ok: false,
242
+ status: "expired",
243
+ method: "oauth",
244
+ detail: "Codex login status reported failure",
245
+ recoveryCommand: "codex login",
246
+ };
247
+ }
248
+ catch (err) {
249
+ logger.warn({ err }, "codex login status probe failed");
250
+ return {
251
+ ok: false,
252
+ status: "expired",
253
+ method: "oauth",
254
+ detail: err instanceof Error ? err.message : "Codex login status failed",
255
+ recoveryCommand: "codex login",
256
+ };
257
+ }
258
+ }
259
+ listModels() {
260
+ return getModelsForBackend(this.backendId);
261
+ }
262
+ /**
263
+ * Phase 5 §4.11 live probe. Codex doesn't expose a zero-turn tool
264
+ * manifest, so we prompt the agent to discover and print connector tool
265
+ * names. Codex apps are lazy-loaded behind `tool_search` on current CLI
266
+ * builds, so the prompt explicitly opens that catalog before printing
267
+ * `mcp__...` names. The output is plain-text (one per line), one
268
+ * minimum-tokens turn.
269
+ *
270
+ * Tools whose names don't start with `mcp__` (built-ins like `Bash`,
271
+ * `Read`) are out of scope — probes are only used to evaluate
272
+ * connector-namespaced tools via `evaluateProbe`.
273
+ */
274
+ async probeTools() {
275
+ if (!this.cliPath) {
276
+ throw new Error("Codex CLI is not installed or not on PATH");
277
+ }
278
+ const sessionDir = createSessionWorkdir(this.config.workspaceDir, "message.received", undefined, { backendId: this.backendId, character: this.config.character });
279
+ const outputPath = createOutputCapturePath(sessionDir, "probe");
280
+ const prompt = CODEX_PROBE_TOOLS_PROMPT;
281
+ const modelId = this.pickSummaryModel();
282
+ const args = [
283
+ "exec",
284
+ "--json",
285
+ "--color",
286
+ "never",
287
+ "--dangerously-bypass-approvals-and-sandbox",
288
+ "--skip-git-repo-check",
289
+ "--output-last-message",
290
+ outputPath,
291
+ "--model",
292
+ modelId,
293
+ "--ephemeral",
294
+ prompt,
295
+ ];
296
+ const lines = [];
297
+ try {
298
+ const result = await runLineCommand({
299
+ command: this.cliPath,
300
+ args,
301
+ cwd: sessionDir,
302
+ env: buildDaemonApiCliEnv(sessionDir, this.config.apiPort, { sessionBackend: "codex" }),
303
+ timeoutMs: 60_000,
304
+ onStdoutLine: (line) => {
305
+ const event = parseJsonLine(line);
306
+ if (!event)
307
+ return;
308
+ const text = extractCodexText(event);
309
+ if (text)
310
+ lines.push(...text.split(/\r?\n/));
311
+ },
312
+ });
313
+ if (result.exitCode !== 0 && result.exitCode !== null) {
314
+ throw new Error(`codex exec exited with code ${result.exitCode}: ${result.stderrLines.slice(-3).join(" | ")}`);
315
+ }
316
+ const finalMessage = readFileIfExists(outputPath);
317
+ const combined = [
318
+ ...lines,
319
+ ...(finalMessage ? finalMessage.split(/\r?\n/) : []),
320
+ ];
321
+ const tools = combined
322
+ .map((l) => l.trim())
323
+ .filter((l) => l.startsWith("mcp__"));
324
+ const deduped = Array.from(new Set(tools));
325
+ logger.info({ toolCount: deduped.length }, "Live probe collected tool manifest via codex exec");
326
+ return deduped;
327
+ }
328
+ finally {
329
+ removeFileIfExists(outputPath);
330
+ cleanupSessionWorkdir(sessionDir);
331
+ }
332
+ }
333
+ async runTurn(params, streamCallbacks) {
334
+ // Pre-flight auth gate — ClaudeCodeCore does NOT have this because
335
+ // the Agent SDK's first HTTP round-trip returns a decisive 401 on
336
+ // its own, so a Claude pre-flight would double-read credentials
337
+ // for no benefit. For Codex we're about to spawn a CLI subprocess
338
+ // (costly TTFB), so it is cheaper to read credentials once here
339
+ // and surface `BackendDecisiveFailure("auth")` before the subprocess
340
+ // even boots. See the class-level comment on `ClaudeCodeCore` for
341
+ // the full rationale and `IAgentCore.checkAuth` for the contract.
342
+ const auth = await this.checkAuth();
343
+ if (!auth.ok) {
344
+ logger.warn({ reason: auth.reason }, "Codex auth check failed");
345
+ throw new BackendDecisiveFailure(this.backendId, "auth", new Error(auth.reason));
346
+ }
347
+ this.assertPromptWithinMaxBudget(params.prompt, params.maxBudgetUsd, params.modelId);
348
+ const startMs = Date.now();
349
+ const sessionDir = params.sessionDir ?? createSessionWorkdir(this.config.workspaceDir, params.eventType, `${this.config.dataDir}/skills`, {
350
+ backendId: this.backendId,
351
+ processKey: params.processKey,
352
+ character: this.config.character,
353
+ });
354
+ const ownsSessionDir = !params.sessionDir;
355
+ const outputPath = createOutputCapturePath(sessionDir, "codex-last-message");
356
+ const mcp = await this.materializeMcp(sessionDir, params.processKey);
357
+ logger.info({ eventType: params.eventType, model: params.modelId, promptLen: params.prompt.length, mcpServers: mcp.servers.map((s) => s.id) }, "Codex execute started");
358
+ let streamed = false;
359
+ const deferStreamingUntilBudgetCheck = params.maxBudgetUsd !== undefined;
360
+ try {
361
+ let sessionId = params.resumeSessionId ?? null;
362
+ let actualModelId = params.modelId;
363
+ let usage = { ...EMPTY_USAGE };
364
+ let lastError = null;
365
+ let sawCompletion = false;
366
+ let numTurns = 0;
367
+ let stopReason = null;
368
+ const outputChunks = [];
369
+ // Accumulate every scrap of subprocess text (tool-output item fields +
370
+ // raw stderr lines) so we can scan once for `PA_API_ERROR` markers after
371
+ // the run. Collecting up front — rather than scanning per-line — keeps
372
+ // each occurrence logged exactly once across multi-line payloads.
373
+ const apiOutputBuffer = [];
374
+ const runResult = await runLineCommand({
375
+ command: "codex",
376
+ args: this.buildArgs(params, outputPath),
377
+ cwd: sessionDir,
378
+ env: {
379
+ ...buildDaemonApiCliEnv(sessionDir, this.config.apiPort, {
380
+ sessionBackend: "codex",
381
+ sessionId: params.sessionDbId,
382
+ eventCorrelationId: params.eventCorrelationId,
383
+ }),
384
+ ...mcp.env,
385
+ ...(params.turnToken ? { PA_TURN_TOKEN: params.turnToken } : {}),
386
+ },
387
+ timeoutMs: this.config.executeTimeoutMinutes * 60 * 1000,
388
+ onStdoutLine: (line) => {
389
+ const event = parseJsonLine(line);
390
+ if (!event?.type) {
391
+ return;
392
+ }
393
+ if (event.type === "thread.started" && typeof event.thread_id === "string") {
394
+ sessionId = event.thread_id;
395
+ return;
396
+ }
397
+ if (event.type === "turn.started") {
398
+ numTurns += 1;
399
+ return;
400
+ }
401
+ if (event.type === "turn.completed") {
402
+ sawCompletion = true;
403
+ usage = extractCodexUsage(event) ?? usage;
404
+ actualModelId = event.model ?? actualModelId;
405
+ stopReason = event.stop_reason ?? event.reason ?? stopReason;
406
+ return;
407
+ }
408
+ if (event.type === "turn.failed") {
409
+ lastError = event.error?.message ?? lastError;
410
+ return;
411
+ }
412
+ if (event.type === "error") {
413
+ const message = event.message?.trim();
414
+ if (message && !message.startsWith("Reconnecting...")) {
415
+ lastError = message;
416
+ }
417
+ return;
418
+ }
419
+ collectCodexItemText(event, apiOutputBuffer);
420
+ // B-003 Phase 4.4 — persist MCP tool call to `mcp_tool_calls`.
421
+ const mcpCall = extractMcpToolCall(event);
422
+ if (mcpCall) {
423
+ logger.debug({
424
+ serverId: mcpCall.serverId,
425
+ toolName: mcpCall.toolName,
426
+ sessionId,
427
+ eventType: params.eventType,
428
+ }, "mcp.tool_call");
429
+ if (this.mcpContext?.db) {
430
+ try {
431
+ logMcpToolCall(this.mcpContext.db, {
432
+ serverId: mcpCall.serverId,
433
+ toolName: mcpCall.toolName,
434
+ eventType: params.eventType,
435
+ sessionId: sessionId ?? undefined,
436
+ });
437
+ }
438
+ catch (err) {
439
+ logger.warn({ err, serverId: mcpCall.serverId }, "mcp.tool_call audit insert failed");
440
+ }
441
+ }
442
+ }
443
+ const delta = extractCodexText(event);
444
+ if (!delta) {
445
+ return;
446
+ }
447
+ outputChunks.push(delta);
448
+ if (!deferStreamingUntilBudgetCheck) {
449
+ streamCallbacks?.onText?.(delta);
450
+ streamed = true;
451
+ }
452
+ },
453
+ onStderrLine: (line) => {
454
+ apiOutputBuffer.push(line);
455
+ if (isLikelyCodexFailure(line)) {
456
+ lastError = line.trim();
457
+ }
458
+ },
459
+ });
460
+ const apiErrors = extractSilentApiErrors(apiOutputBuffer.join("\n"));
461
+ if (apiErrors.length > 0) {
462
+ logSilentApiErrors(logger, apiErrors, {
463
+ backendId: this.backendId,
464
+ sessionId,
465
+ eventType: params.eventType,
466
+ });
467
+ }
468
+ if (runResult.timedOut) {
469
+ const err = new BackendDecisiveFailure(this.backendId, "timeout", new Error(`Codex execution exceeded timeout of ${this.config.executeTimeoutMinutes} minutes`));
470
+ logger.error({ err, eventType: params.eventType, model: params.modelId, durationMs: Date.now() - startMs }, "Codex execute timed out");
471
+ throw err;
472
+ }
473
+ const capturedOutput = readFileIfExists(outputPath);
474
+ const outputSource = capturedOutput && capturedOutput.trim().length > 0
475
+ ? capturedOutput
476
+ : outputChunks.join("");
477
+ const output = outputSource.trim();
478
+ const combinedFailure = lastError
479
+ ?? firstFailureLine(runResult.stderrLines)
480
+ ?? firstFailureLine(runResult.stdoutLines);
481
+ if (!sawCompletion || runResult.exitCode !== 0) {
482
+ const failureMsg = combinedFailure ?? "Codex execution did not complete successfully.";
483
+ const classified = this.classifyFailure(failureMsg);
484
+ logger.error({ err: classified, eventType: params.eventType, model: params.modelId, exitCode: runResult.exitCode, durationMs: Date.now() - startMs }, "Codex execute failed");
485
+ throw classified;
486
+ }
487
+ const { costUsd, costSource } = this.priceFetcher.estimateUsageCost({
488
+ backendId: this.backendId,
489
+ modelId: actualModelId,
490
+ usage,
491
+ fallbackModel: findRegisteredModel(this.backendId, actualModelId),
492
+ });
493
+ this.assertWithinMaxBudget(costUsd, params.maxBudgetUsd, actualModelId);
494
+ if (output && !streamed) {
495
+ streamCallbacks?.onText?.(output);
496
+ }
497
+ const durationMs = Date.now() - startMs;
498
+ logger.info({ eventType: params.eventType, model: actualModelId, durationMs, costUsd, numTurns: numTurns || 1 }, "Codex execute completed");
499
+ return {
500
+ output,
501
+ sessionId,
502
+ backendId: this.backendId,
503
+ modelId: actualModelId,
504
+ costSource,
505
+ costUsd,
506
+ usage,
507
+ modelUsage: usage.inputTokens || usage.outputTokens
508
+ ? {
509
+ [actualModelId]: {
510
+ inputTokens: usage.inputTokens,
511
+ outputTokens: usage.outputTokens,
512
+ costUsd,
513
+ },
514
+ }
515
+ : {},
516
+ numTurns: numTurns || 1,
517
+ durationMs,
518
+ durationApiMs: durationMs,
519
+ model: actualModelId,
520
+ isError: false,
521
+ stopReason,
522
+ contextUpdated: false,
523
+ // advisorCallCount omitted — non-Anthropic backends never populate
524
+ // this field, consumers treat undefined as 0.
525
+ };
526
+ }
527
+ finally {
528
+ removeFileIfExists(outputPath);
529
+ streamCallbacks?.onEnd?.();
530
+ if (ownsSessionDir) {
531
+ cleanupSessionWorkdir(sessionDir);
532
+ }
533
+ }
534
+ }
535
+ buildArgs(params, outputPath) {
536
+ // ─────────────────────────────────────────────────────────────────────
537
+ // Sandbox network-access asymmetry (known limitation).
538
+ //
539
+ // `-c sandbox_workspace_write.network_access=true` is required for the
540
+ // agent to reach the daemon API at http://localhost:${apiPort}/... under
541
+ // the workspace-write sandbox. Without it, Seatbelt/sandbox-exec blocks
542
+ // ALL network egress and `curl http://localhost:8321/api/health` fails
543
+ // with a connection-refused sandbox denial (verified 2026-04-11, Codex
544
+ // v0.118.0).
545
+ //
546
+ // HOWEVER: this flag is a binary on/off switch in Codex's sandbox model.
547
+ // There is no host-scoped allowlist. Once enabled, the agent can reach
548
+ // ANY external host (verified: curl https://example.com → HTTP 200).
549
+ //
550
+ // This is MORE PERMISSIVE than the Claude Code backend, which uses a
551
+ // PreToolUse hook (`bashCurlHook` in claude-code-core.ts) to restrict
552
+ // curl targets to localhost:${apiPort}. The Gemini backend achieves the
553
+ // same localhost restriction via a generated TOML admin policy
554
+ // (`generateAdminPolicy()` in gemini-cli-core.ts).
555
+ //
556
+ // Codex has neither a hook system nor an admin-policy layer for shell
557
+ // commands, so the localhost-only restriction cannot currently be
558
+ // enforced on this backend. As long as `message.dm` is routed primarily
559
+ // to Claude Code (the default), this asymmetry is latent. If the default
560
+ // binding changes to Codex, revisit by either:
561
+ // (a) generating a config.toml with a stricter sandbox profile, or
562
+ // (b) wrapping curl with a shim that validates URLs before exec.
563
+ //
564
+ // Tracked: BUG-DM-BACKEND-PERMISSIONS.md §5 / §9.
565
+ //
566
+ // Allow mode: `--dangerously-bypass-approvals-and-sandbox` skips both
567
+ // approvals AND sandboxing. No workspace-write network override needed
568
+ // because the sandbox itself is off.
569
+ //
570
+ // `codex exec resume` argv narrowing (verified on 0.121.0):
571
+ // `codex exec resume` rejects `--sandbox` and `--color`. Both are
572
+ // accepted by the fresh `codex exec` subcommand but not by the
573
+ // resume subcommand. We therefore:
574
+ // - Use `-c sandbox_mode="workspace-write"` (config-override form)
575
+ // for strict mode instead of `--sandbox workspace-write`, since
576
+ // `-c` IS accepted by both exec and resume. Functionally
577
+ // equivalent; keeps one branch for both code paths.
578
+ // - Drop `--color never` from the resume invocation. It remains
579
+ // in fresh exec where it is still accepted.
580
+ // ─────────────────────────────────────────────────────────────────────
581
+ const allowMode = this.config.codexExecutionPermissionMode === "allow";
582
+ //
583
+ // EXECUTION-MODE-DESIGN.md §6 absolute-block layer — Codex gap.
584
+ //
585
+ // The absolute-block list (rm -rf, sudo, curl | sh, secret-path reads)
586
+ // cannot be enforced at the daemon layer on Codex:
587
+ //
588
+ // - Strict mode: the workspace-write sandbox blocks file writes
589
+ // outside `cwd`, which contains some of the damage (e.g. a
590
+ // `Write(~/.ssh/authorized_keys)` would be denied by the
591
+ // sandbox). It does NOT pattern-match shell commands — `rm -rf`
592
+ // INSIDE the session workdir, `sudo`, and `curl | sh` are not
593
+ // intercepted.
594
+ //
595
+ // - Allow mode: `--dangerously-bypass-approvals-and-sandbox` turns
596
+ // off both approvals and the sandbox entirely. There is no hook
597
+ // or admin-policy layer we can attach to. The user has
598
+ // explicitly opted in.
599
+ //
600
+ // Accepted gap per design sign-off. If / when Codex ships a hook
601
+ // system or admin-policy layer for shell commands, wire
602
+ // `ALWAYS_DISALLOWED_TOOLS` + the `classifyAbsoluteBlock` helper
603
+ // from `safety/always-disallowed.ts` here, mirroring the Claude
604
+ // Code implementation.
605
+ //
606
+ // DELEGATED-MODE-V2-DESIGN.md §4.3.4 — same-backend MCP-tool deny
607
+ // shares the same accepted-gap surface (γ outcome). Codex's built-in
608
+ // connector apps (`mcp__codex_apps__*`) are not exposed in
609
+ // `.codex/config.toml` and there is no per-tool disable flag at the
610
+ // CLI layer. Enforcement is prose-only via the `## Denied tools
611
+ // (per-integration)` block in AGENTS.md (rendered by
612
+ // `skills-compiler.buildSameBackendDenyBlock`). Cross-backend
613
+ // delegation provides hard enforcement at the
614
+ // `/api/integrations/:key/invoke` chokepoint, so users requiring
615
+ // strict deny should pick a non-Codex DM backend.
616
+ //
617
+ const sandboxArgs = allowMode
618
+ ? ["--dangerously-bypass-approvals-and-sandbox"]
619
+ : [
620
+ "-c",
621
+ 'sandbox_mode="workspace-write"',
622
+ "-c",
623
+ "sandbox_workspace_write.network_access=true",
624
+ ];
625
+ const imageArgs = buildCodexImageArgs(params.stagedAttachments, CODEX_ARGV_BUDGET_BYTES);
626
+ if (params.resumeSessionId) {
627
+ return [
628
+ "exec",
629
+ "resume",
630
+ params.resumeSessionId,
631
+ "--json",
632
+ // NOTE: `--color never` omitted — rejected by `codex exec resume`.
633
+ ...sandboxArgs,
634
+ "--skip-git-repo-check",
635
+ "--output-last-message",
636
+ outputPath,
637
+ "--model",
638
+ params.modelId,
639
+ ...imageArgs,
640
+ params.prompt,
641
+ ];
642
+ }
643
+ return [
644
+ "exec",
645
+ "--json",
646
+ "--color",
647
+ "never",
648
+ ...sandboxArgs,
649
+ "--skip-git-repo-check",
650
+ "--output-last-message",
651
+ outputPath,
652
+ "--model",
653
+ params.modelId,
654
+ ...(params.persistSession ? [] : ["--ephemeral"]),
655
+ ...imageArgs,
656
+ params.prompt,
657
+ ];
658
+ }
659
+ pickSummaryModel() {
660
+ // Registry-derived lite-tier model is the canonical pick (compaction
661
+ // summaries are short-shape and benefit from the cheapest model).
662
+ // Falls through to "any registered model" when the registry has no
663
+ // available lite entry, then throws when the registry is empty for
664
+ // this backend — preferable to the prior silent literal fallback
665
+ // that hid registry misconfiguration.
666
+ const liteFromRegistry = latestLiteFor(this.backendId);
667
+ if (liteFromRegistry)
668
+ return liteFromRegistry;
669
+ const anyFromRegistry = this.listModels()[0]?.modelId;
670
+ if (anyFromRegistry)
671
+ return anyFromRegistry;
672
+ throw new Error(`pickSummaryModel: no models registered for backend ${this.backendId}`);
673
+ }
674
+ classifyFailure(message) {
675
+ if (isMaxBudgetMessage(message)) {
676
+ return new BackendQuotaError(this.backendId, "max_budget_usd", null, message);
677
+ }
678
+ if (/rate limit|usage limit|quota/i.test(message)) {
679
+ return new BackendQuotaError(this.backendId, "rate_limited", null, message);
680
+ }
681
+ if (/unauthorized|forbidden|api key|login/i.test(message)) {
682
+ return new BackendDecisiveFailure(this.backendId, "auth", new Error(message));
683
+ }
684
+ if (/timed out|timeout/i.test(message)) {
685
+ return new BackendDecisiveFailure(this.backendId, "timeout", new Error(message));
686
+ }
687
+ return new BackendDecisiveFailure(this.backendId, "other_non_retryable", new Error(message));
688
+ }
689
+ assertWithinMaxBudget(costUsd, maxBudgetUsd, modelId) {
690
+ if (maxBudgetUsd === undefined || costUsd <= maxBudgetUsd) {
691
+ return;
692
+ }
693
+ throw new BackendQuotaError(this.backendId, "max_budget_usd", null, `Codex estimated cost $${costUsd.toFixed(4)} exceeded the per-turn budget limit $${maxBudgetUsd.toFixed(2)} for ${modelId}.`);
694
+ }
695
+ assertPromptWithinMaxBudget(prompt, maxBudgetUsd, modelId) {
696
+ if (maxBudgetUsd === undefined) {
697
+ return;
698
+ }
699
+ const estimatedUsage = {
700
+ inputTokens: estimateTextInputTokens(prompt),
701
+ outputTokens: 0,
702
+ cacheCreationInputTokens: 0,
703
+ cacheReadInputTokens: 0,
704
+ };
705
+ const { costUsd } = this.priceFetcher.estimateUsageCost({
706
+ backendId: this.backendId,
707
+ modelId,
708
+ usage: estimatedUsage,
709
+ fallbackModel: findRegisteredModel(this.backendId, modelId),
710
+ });
711
+ if (costUsd <= maxBudgetUsd) {
712
+ return;
713
+ }
714
+ throw new BackendQuotaError(this.backendId, "max_budget_usd", null, `Codex estimated prompt cost $${costUsd.toFixed(4)} exceeded the per-turn budget limit $${maxBudgetUsd.toFixed(2)} for ${modelId}.`);
715
+ }
716
+ /**
717
+ * Delegated proxy invocation — Codex CLI path.
718
+ *
719
+ * Spawns `codex exec --json --ephemeral --skip-git-repo-check
720
+ * --output-last-message <path> --model <m> <prompt>` in the
721
+ * pre-materialized `sessionDir`, parses JSONL events, and matches the
722
+ * first `mcp__codex_apps__*` tool call whose name equals the requested
723
+ * tool. The tool result is extracted from item-output fields (`output`,
724
+ * `aggregated_output`, `stdout`) emitted on the same item or on a
725
+ * subsequent paired item — the precise pairing semantics differ across
726
+ * Codex CLI versions, so the implementation is defensive: it captures
727
+ * the first non-empty output that arrives after the matching call and
728
+ * within the same turn. The captured-last-message file is the final
729
+ * fallback (model-text path; less reliable but better than 502 if the
730
+ * structured pairing changes shape upstream).
731
+ *
732
+ * Error classes mirror the Claude path. `auth_error` is detected via
733
+ * the existing `classifyFailure` regex; `tool_error` arrives as a
734
+ * `turn.failed` event or as a non-zero subprocess exit code with a
735
+ * recognisable message.
736
+ */
737
+ async runDelegatedTool(params) {
738
+ const startMs = Date.now();
739
+ const { toolName, toolArgs, modelId, sessionDir, abortSignal } = params;
740
+ if (!this.cliPath) {
741
+ return {
742
+ ok: false,
743
+ errorClass: "subprocess_crashed",
744
+ message: "codex CLI not found on PATH",
745
+ cost: withDurationMs(emptyCost(), startMs),
746
+ };
747
+ }
748
+ const auth = await this.checkAuth();
749
+ if (!auth.ok) {
750
+ return {
751
+ ok: false,
752
+ errorClass: "auth_error",
753
+ message: auth.reason,
754
+ cost: withDurationMs(emptyCost(), startMs),
755
+ };
756
+ }
757
+ const prompt = buildDelegatedToolPrompt(toolName, toolArgs);
758
+ const outputPath = createOutputCapturePath(sessionDir, "codex-delegated-last-message");
759
+ // Mirror the user's execution mode rather than hard-coding strict
760
+ // sandbox. The proxy session itself runs proxy.md (one tool call,
761
+ // no Bash / Edit / Write), so the sandbox is purely defensive — but
762
+ // forcing strict on a user who explicitly opted into allow mode is
763
+ // an inconsistency that surfaces when delegated.
764
+ const allowMode = this.config.codexExecutionPermissionMode === "allow";
765
+ const sandboxArgs = allowMode
766
+ ? ["--dangerously-bypass-approvals-and-sandbox"]
767
+ : [
768
+ "-c",
769
+ 'sandbox_mode="workspace-write"',
770
+ "-c",
771
+ "sandbox_workspace_write.network_access=true",
772
+ ];
773
+ const args = [
774
+ "exec",
775
+ "--json",
776
+ "--color",
777
+ "never",
778
+ ...sandboxArgs,
779
+ "--skip-git-repo-check",
780
+ "--output-last-message",
781
+ outputPath,
782
+ "--model",
783
+ modelId,
784
+ "--ephemeral",
785
+ prompt,
786
+ ];
787
+ let capturedToolItemId = null;
788
+ let capturedResultRaw = null;
789
+ let capturedToolError = null;
790
+ let wrongToolName = null;
791
+ let usage = { ...EMPTY_USAGE };
792
+ let actualModelId = modelId;
793
+ let numTurns = 0;
794
+ let lastError = null;
795
+ let sawTurnCompleted = false;
796
+ const stderrBuffer = [];
797
+ // Local aborter bridged from the caller's signal so we can also
798
+ // trigger an early abort on wrong-tool detection. See gemini-cli-core
799
+ // for the full rationale: this caps wrong_tool failures at ~5s
800
+ // instead of waiting for the wall-clock or natural completion.
801
+ const proxyAborter = new AbortController();
802
+ const callerAbortListener = () => {
803
+ proxyAborter.abort(abortSignal?.reason);
804
+ };
805
+ if (abortSignal) {
806
+ if (abortSignal.aborted) {
807
+ proxyAborter.abort(abortSignal.reason);
808
+ }
809
+ else {
810
+ abortSignal.addEventListener("abort", callerAbortListener, {
811
+ once: true,
812
+ });
813
+ }
814
+ }
815
+ // Idle watchdog — same pattern as gemini-cli-core. Catches a hung
816
+ // codex CLI subprocess (no stream events at all) before the local
817
+ // safety-net timer or the caller's wall-clock signal fires. Tuned
818
+ // for codex's typical first-event time (5-15 s); tripping at 60 s
819
+ // is well outside the healthy distribution.
820
+ let idleTimedOut = false;
821
+ const idleTimeoutMs = DELEGATED_PROXY_DEFAULTS.idleTimeoutMsByBackend.codex
822
+ ?? DELEGATED_PROXY_DEFAULTS.idleTimeoutMs;
823
+ const idleWatchdog = new IdleWatchdog({
824
+ idleTimeoutMs,
825
+ onTimeout: (idleMs) => {
826
+ idleTimedOut = true;
827
+ logger.warn({ idleMs, idleTimeoutMs, toolName }, "codex delegated proxy idle watchdog tripped");
828
+ proxyAborter.abort(new DelegatedProxyTimeoutError(`codex stream idle for ${idleMs}ms (limit ${idleTimeoutMs}ms)`));
829
+ },
830
+ });
831
+ try {
832
+ idleWatchdog.start();
833
+ const runResult = await runLineCommand({
834
+ command: this.cliPath,
835
+ args,
836
+ cwd: sessionDir,
837
+ env: buildDaemonApiCliEnv(sessionDir, this.config.apiPort, { sessionBackend: "codex" }),
838
+ // Wall-clock is enforced by the invoker via abortSignal — we still
839
+ // pass a generous local timeout as a safety net (callers can
840
+ // disable it by setting their own abortSignal).
841
+ timeoutMs: 120_000,
842
+ abortSignal: proxyAborter.signal,
843
+ onStdoutLine: (line) => {
844
+ idleWatchdog.beat();
845
+ const event = parseJsonLine(line);
846
+ if (!event?.type)
847
+ return;
848
+ if (event.type === "turn.started") {
849
+ numTurns += 1;
850
+ return;
851
+ }
852
+ if (event.type === "turn.completed") {
853
+ sawTurnCompleted = true;
854
+ usage = extractCodexUsage(event) ?? usage;
855
+ actualModelId = event.model ?? actualModelId;
856
+ return;
857
+ }
858
+ if (event.type === "turn.failed") {
859
+ lastError = event.error?.message ?? lastError;
860
+ return;
861
+ }
862
+ if (event.type === "error") {
863
+ const message = event.message?.trim();
864
+ if (message && !message.startsWith("Reconnecting...")) {
865
+ lastError = message;
866
+ }
867
+ return;
868
+ }
869
+ // Match MCP tool calls by item.name / item.tool. We accept the
870
+ // first item that resolves to the requested tool name; any
871
+ // earlier item resolving to a different MCP tool flips the
872
+ // wrong_tool flag.
873
+ const item = event.item;
874
+ if (item && typeof item === "object") {
875
+ const bag = item;
876
+ const itemId = typeof bag.id === "string"
877
+ ? bag.id
878
+ : typeof bag.call_id === "string"
879
+ ? bag.call_id
880
+ : null;
881
+ const callMatch = extractMcpToolCall(event);
882
+ if (callMatch && itemId !== null && capturedToolItemId === null) {
883
+ const fullName = callMatch.toolName.startsWith("mcp__")
884
+ ? callMatch.toolName
885
+ : `mcp__${callMatch.serverId}__${callMatch.toolName}`;
886
+ if (callMatch.toolName === toolName
887
+ || fullName === toolName
888
+ || itemMatchesToolName(bag, toolName)) {
889
+ capturedToolItemId = itemId;
890
+ }
891
+ else if (wrongToolName === null) {
892
+ wrongToolName = fullName;
893
+ // Early abort: see gemini-cli-core comment on the same
894
+ // pattern. The post-await classifier checks
895
+ // `wrongToolName` before `abortSignal?.aborted` so the
896
+ // failure is attributed correctly.
897
+ proxyAborter.abort(new Error("wrong_tool"));
898
+ }
899
+ }
900
+ // Pair tool result by call_id / parent_id when available;
901
+ // otherwise treat the first non-empty output that arrives
902
+ // after the matching call as the result. The output may live
903
+ // on the call item itself (some Codex versions backfill it)
904
+ // or on a separate function_call_output item.
905
+ if (capturedToolItemId !== null && capturedResultRaw === null) {
906
+ const pairedId = typeof bag.call_id === "string"
907
+ ? bag.call_id
908
+ : typeof bag.parent_id === "string"
909
+ ? bag.parent_id
910
+ : itemId;
911
+ const paired = pairedId === capturedToolItemId;
912
+ if (paired || itemId === capturedToolItemId) {
913
+ const collected = collectItemOutput(bag);
914
+ if (collected !== null) {
915
+ capturedResultRaw = collected;
916
+ // Codex marks tool errors with `is_error` or `error`
917
+ // fields on the output item.
918
+ if (bag.is_error === true
919
+ || (typeof bag.error === "string"
920
+ && bag.error.trim().length > 0)) {
921
+ capturedToolError =
922
+ typeof bag.error === "string"
923
+ ? bag.error
924
+ : capturedResultRaw;
925
+ }
926
+ }
927
+ }
928
+ }
929
+ }
930
+ },
931
+ onStderrLine: (line) => {
932
+ idleWatchdog.beat();
933
+ stderrBuffer.push(line);
934
+ if (isLikelyCodexFailure(line)) {
935
+ lastError = line.trim();
936
+ }
937
+ },
938
+ });
939
+ if (capturedResultRaw === null && capturedToolItemId !== null) {
940
+ // Structured stream pairing did not yield a result block — fall
941
+ // back to the captured `--output-last-message` content. The
942
+ // proxy.md prompt instructs the model to return the tool's raw
943
+ // result, so the assistant's final message should already be the
944
+ // tool output (less reliable than structured matching, but a
945
+ // graceful degradation when pairing semantics drift across
946
+ // Codex versions).
947
+ const lastMessage = readFileIfExists(outputPath);
948
+ if (lastMessage && lastMessage.trim().length > 0) {
949
+ capturedResultRaw = lastMessage.trim();
950
+ }
951
+ }
952
+ const cost = withDurationMs({
953
+ tokensInput: usage.inputTokens,
954
+ tokensOutput: usage.outputTokens,
955
+ cacheCreationTokens: usage.cacheCreationInputTokens,
956
+ cacheReadTokens: usage.cacheReadInputTokens,
957
+ costUsd: this.priceFetcher.estimateUsageCost({
958
+ backendId: this.backendId,
959
+ modelId: actualModelId,
960
+ usage,
961
+ fallbackModel: findRegisteredModel(this.backendId, actualModelId),
962
+ }).costUsd,
963
+ durationMs: 0,
964
+ numTurns: numTurns || (sawTurnCompleted ? 1 : 0),
965
+ }, startMs);
966
+ // wrong_tool check is hoisted above the abort branch because the
967
+ // early-abort path (proxyAborter.abort) sets `wrongToolName` and
968
+ // triggers a kill — without this ordering the failure would
969
+ // surface as `cancelled` instead of the actual upstream cause.
970
+ // The idle-watchdog branch sits between wrong_tool and the
971
+ // caller's abortSignal: an idle hang aborts via proxyAborter and
972
+ // does not propagate to abortSignal, so without this ordering the
973
+ // failure would mis-classify as `no_tool_call`.
974
+ if (wrongToolName !== null) {
975
+ return {
976
+ ok: false,
977
+ errorClass: "wrong_tool",
978
+ message: `model called '${wrongToolName}' instead of requested '${toolName}'`,
979
+ cost,
980
+ };
981
+ }
982
+ if (idleTimedOut) {
983
+ return {
984
+ ok: false,
985
+ errorClass: "timeout",
986
+ message: `delegated proxy stream went idle (no codex events for ${idleTimeoutMs}ms)`,
987
+ cost,
988
+ };
989
+ }
990
+ if (abortSignal?.aborted) {
991
+ const errorClass = classifyAbortReason(abortSignal.reason);
992
+ return {
993
+ ok: false,
994
+ errorClass,
995
+ message: errorClass === "timeout"
996
+ ? "delegated proxy timed out (wall-clock)"
997
+ : "delegated proxy cancelled by caller",
998
+ cost,
999
+ };
1000
+ }
1001
+ if (runResult.timedOut) {
1002
+ return {
1003
+ ok: false,
1004
+ errorClass: "timeout",
1005
+ message: "codex subprocess exceeded local safety-net timeout",
1006
+ cost,
1007
+ };
1008
+ }
1009
+ if (capturedResultRaw !== null && capturedToolError === null) {
1010
+ return {
1011
+ ok: true,
1012
+ toolResult: tryParseToolResult(capturedResultRaw),
1013
+ cost,
1014
+ };
1015
+ }
1016
+ if (capturedToolError !== null) {
1017
+ return {
1018
+ ok: false,
1019
+ errorClass: "tool_error",
1020
+ message: flattenToolResultContent(capturedToolError),
1021
+ cost,
1022
+ };
1023
+ }
1024
+ const failure = lastError ?? firstFailureLine(stderrBuffer);
1025
+ if (failure && /unauthorized|forbidden|api key|login|auth/i.test(failure)) {
1026
+ return {
1027
+ ok: false,
1028
+ errorClass: "auth_error",
1029
+ message: failure,
1030
+ cost,
1031
+ };
1032
+ }
1033
+ if (runResult.exitCode !== 0 && runResult.exitCode !== null) {
1034
+ return {
1035
+ ok: false,
1036
+ errorClass: "subprocess_crashed",
1037
+ message: failure ?? `codex exec exited ${runResult.exitCode}`,
1038
+ cost,
1039
+ };
1040
+ }
1041
+ if (capturedToolItemId === null) {
1042
+ return {
1043
+ ok: false,
1044
+ errorClass: "no_tool_call",
1045
+ message: failure
1046
+ ?? `model did not invoke '${toolName}' (sawTurnCompleted=${sawTurnCompleted})`,
1047
+ cost,
1048
+ };
1049
+ }
1050
+ return {
1051
+ ok: false,
1052
+ errorClass: "parse_error",
1053
+ message: failure
1054
+ ?? `codex emitted '${toolName}' call but no output payload could be paired`,
1055
+ cost,
1056
+ };
1057
+ }
1058
+ catch (err) {
1059
+ const message = err instanceof Error ? err.message : String(err);
1060
+ const cost = withDurationMs(emptyCost(), startMs);
1061
+ if (abortSignal?.aborted) {
1062
+ return {
1063
+ ok: false,
1064
+ errorClass: classifyAbortReason(abortSignal.reason),
1065
+ message,
1066
+ cost,
1067
+ };
1068
+ }
1069
+ return { ok: false, errorClass: "subprocess_crashed", message, cost };
1070
+ }
1071
+ finally {
1072
+ idleWatchdog.stop();
1073
+ removeFileIfExists(outputPath);
1074
+ if (abortSignal && !abortSignal.aborted) {
1075
+ abortSignal.removeEventListener("abort", callerAbortListener);
1076
+ }
1077
+ }
1078
+ }
1079
+ /**
1080
+ * DELEGATED-TASK-MODE-DESIGN.md §9 — Codex task mode (Phase 1.5+).
1081
+ *
1082
+ * Codex CLI has no per-spawn allowedTools surface for MCP calls and no
1083
+ * PreToolUse hook, so allowed-tools enforcement lives entirely in
1084
+ * daemon-side stream pre-emption: we observe each `tool_use` item on
1085
+ * stdout, gate it against `allowedTools` and the destructive denylist,
1086
+ * and abort the subprocess (via the local AbortController) when the
1087
+ * model reaches outside the per-task envelope.
1088
+ *
1089
+ * Race window (accepted): a fast tool's side effect can land before our
1090
+ * SIGTERM arrives. The session's materialized `.codex/` config restricts
1091
+ * the MCP surface to the integration's connector (so out-of-scope tools
1092
+ * are unreachable to begin with), and `allowDestructive=false` removes
1093
+ * destructive entries from `allowedTools` upstream — but a destructive
1094
+ * connector tool that the prompt instructs the model NOT to call could
1095
+ * still race a SIGTERM. The prompt's destructive-section + the
1096
+ * `needsConfirmation` envelope are the load-bearing guardrails for that
1097
+ * narrow case; stream pre-emption is the second line.
1098
+ *
1099
+ * Output extraction: Codex CLI does not expose a structured-output API
1100
+ * (Anthropic-style `outputFormat: 'json_schema'`), so we pin
1101
+ * `--output-last-message` to a file and let the runtime helper
1102
+ * (`extractAndValidateResult`) handle fence-stripping + Ajv validation.
1103
+ * The `structuredOutput` field on the result is intentionally omitted
1104
+ * for Codex; the invoker falls back to text-extract automatically.
1105
+ */
1106
+ async runDelegatedTask(params) {
1107
+ const startMs = Date.now();
1108
+ const { systemPrompt, allowedTools, destructiveTools, writeClassTools, modelId, maxToolCalls, timeoutMs, sessionDir, abortSignal, onToolStep, allowDestructive, } = params;
1109
+ const trace = [];
1110
+ let writeClassToolFired = false;
1111
+ const writeClassMatcher = (name) => writeClassTools.some((pattern) => matchRunAllowedToolPattern(pattern, name));
1112
+ if (!this.cliPath) {
1113
+ return {
1114
+ ok: false,
1115
+ errorClass: "subprocess_crashed",
1116
+ message: "codex CLI not found on PATH",
1117
+ cost: withDurationMs(emptyCost(), startMs),
1118
+ trace,
1119
+ writeClassToolFired,
1120
+ };
1121
+ }
1122
+ const auth = await this.checkAuth();
1123
+ if (!auth.ok) {
1124
+ return {
1125
+ ok: false,
1126
+ errorClass: "auth_error",
1127
+ message: auth.reason,
1128
+ cost: withDurationMs(emptyCost(), startMs),
1129
+ trace,
1130
+ writeClassToolFired,
1131
+ };
1132
+ }
1133
+ const outputPath = createOutputCapturePath(sessionDir, "codex-delegated-task-last-message");
1134
+ // Mirror runDelegatedTool's sandbox decision so the proxy session's
1135
+ // posture matches the user's configured execution mode (Allow vs Safe).
1136
+ // In both modes the per-task allowed-tools envelope is enforced by
1137
+ // stream pre-emption below — sandbox bypass only relaxes shell/file
1138
+ // restrictions, which the task subprocess does not exercise anyway.
1139
+ const allowMode = this.config.codexExecutionPermissionMode === "allow";
1140
+ const sandboxArgs = allowMode
1141
+ ? ["--dangerously-bypass-approvals-and-sandbox"]
1142
+ : [
1143
+ "-c",
1144
+ 'sandbox_mode="workspace-write"',
1145
+ "-c",
1146
+ "sandbox_workspace_write.network_access=true",
1147
+ ];
1148
+ const args = [
1149
+ "exec",
1150
+ "--json",
1151
+ "--color",
1152
+ "never",
1153
+ ...sandboxArgs,
1154
+ "--skip-git-repo-check",
1155
+ "--output-last-message",
1156
+ outputPath,
1157
+ "--model",
1158
+ modelId,
1159
+ "--ephemeral",
1160
+ systemPrompt,
1161
+ ];
1162
+ // Local aborter bridged from the caller's signal so we can also
1163
+ // trigger an early abort on policy_violation / loop_aborted detection.
1164
+ // Mirrors the pattern in runDelegatedTool and gemini-cli-core's
1165
+ // task-mode implementation.
1166
+ const aborter = new AbortController();
1167
+ const callerListener = () => {
1168
+ aborter.abort(abortSignal?.reason);
1169
+ };
1170
+ if (abortSignal) {
1171
+ if (abortSignal.aborted) {
1172
+ aborter.abort(abortSignal.reason);
1173
+ }
1174
+ else {
1175
+ abortSignal.addEventListener("abort", callerListener, { once: true });
1176
+ }
1177
+ }
1178
+ const isAllowedTool = (name) => allowedTools.some((pattern) => matchRunAllowedToolPattern(pattern, name));
1179
+ const destructiveSet = allowDestructive
1180
+ ? new Set()
1181
+ : new Set(destructiveTools);
1182
+ const pendingByItemId = new Map();
1183
+ let toolCallCount = 0;
1184
+ let loopAborted = false;
1185
+ let policyViolationTool = null;
1186
+ let usage = { ...EMPTY_USAGE };
1187
+ let actualModelId = modelId;
1188
+ let numTurns = 0;
1189
+ let lastError = null;
1190
+ let sawTurnCompleted = false;
1191
+ const stderrBuffer = [];
1192
+ try {
1193
+ const runResult = await runLineCommand({
1194
+ command: this.cliPath,
1195
+ args,
1196
+ cwd: sessionDir,
1197
+ env: buildDaemonApiCliEnv(sessionDir, this.config.apiPort, {
1198
+ sessionBackend: "codex",
1199
+ }),
1200
+ // Wall-clock is enforced by the caller's abortSignal (the route
1201
+ // handler clamps timeoutMs to DELEGATED_TASK_HARD_CAPS.maxTimeoutMs
1202
+ // = 5min). Local timeoutMs is a safety net pegged to the caller
1203
+ // bound + 60s grace so the abort fires first and gives a clean
1204
+ // errorClass=timeout via classifyAbortReason.
1205
+ timeoutMs: timeoutMs + 60_000,
1206
+ abortSignal: aborter.signal,
1207
+ onStdoutLine: (line) => {
1208
+ const event = parseJsonLine(line);
1209
+ if (!event?.type)
1210
+ return;
1211
+ if (event.type === "turn.started") {
1212
+ numTurns += 1;
1213
+ return;
1214
+ }
1215
+ if (event.type === "turn.completed") {
1216
+ sawTurnCompleted = true;
1217
+ usage = extractCodexUsage(event) ?? usage;
1218
+ actualModelId = event.model ?? actualModelId;
1219
+ return;
1220
+ }
1221
+ if (event.type === "turn.failed") {
1222
+ lastError = event.error?.message ?? lastError;
1223
+ return;
1224
+ }
1225
+ if (event.type === "error") {
1226
+ const message = event.message?.trim();
1227
+ if (message && !message.startsWith("Reconnecting...")) {
1228
+ lastError = message;
1229
+ }
1230
+ return;
1231
+ }
1232
+ const item = event.item;
1233
+ if (!item || typeof item !== "object")
1234
+ return;
1235
+ const bag = item;
1236
+ const itemId = typeof bag.id === "string"
1237
+ ? bag.id
1238
+ : typeof bag.call_id === "string"
1239
+ ? bag.call_id
1240
+ : null;
1241
+ // Stream pre-emption: gate every MCP tool_use against the
1242
+ // per-task allowed-tools / destructive envelope before the
1243
+ // subprocess can act on it. The race-window caveat (model side
1244
+ // effect lands before SIGTERM) is documented at the top of this
1245
+ // method.
1246
+ const callMatch = extractMcpToolCall(event);
1247
+ if (callMatch && itemId !== null) {
1248
+ // Prefer the verbatim `bag.name` (or `bag.tool_name`) when
1249
+ // it's already the fully-qualified `mcp__server__tool` form —
1250
+ // splitting + reconstructing via serverId+toolName loses
1251
+ // dotted namespace prefixes like `gmail.` (e.g. Codex's gmail
1252
+ // MCP registers `gmail._search_emails`, but `bag.tool` carries
1253
+ // only `_search_emails`, dropping the `gmail.` segment).
1254
+ const verbatim = typeof bag.name === "string" && bag.name.startsWith("mcp__")
1255
+ ? bag.name
1256
+ : typeof bag.tool_name === "string"
1257
+ && bag.tool_name.startsWith("mcp__")
1258
+ ? bag.tool_name
1259
+ : null;
1260
+ const fullName = verbatim
1261
+ ?? (callMatch.toolName.startsWith("mcp__")
1262
+ ? callMatch.toolName
1263
+ : `mcp__${callMatch.serverId}__${callMatch.toolName}`);
1264
+ if (!pendingByItemId.has(itemId)) {
1265
+ if (!isAllowedTool(fullName) || destructiveSet.has(fullName)) {
1266
+ policyViolationTool = fullName;
1267
+ loopAborted = true;
1268
+ aborter.abort(new Error("policy_violation"));
1269
+ return;
1270
+ }
1271
+ toolCallCount += 1;
1272
+ if (toolCallCount > maxToolCalls) {
1273
+ loopAborted = true;
1274
+ aborter.abort(new Error("loop_aborted"));
1275
+ return;
1276
+ }
1277
+ if (writeClassMatcher(fullName)) {
1278
+ writeClassToolFired = true;
1279
+ }
1280
+ pendingByItemId.set(itemId, {
1281
+ name: fullName,
1282
+ args: extractCodexCallArgs(bag),
1283
+ startedAt: Date.now(),
1284
+ });
1285
+ return;
1286
+ }
1287
+ }
1288
+ // Tool result pairing: bind the first non-empty output that
1289
+ // arrives for a known pending tool_use. Codex emits the output
1290
+ // either backfilled on the call item itself (older versions) or
1291
+ // on a paired function_call_output item.
1292
+ if (pendingByItemId.size > 0) {
1293
+ const pairedId = typeof bag.call_id === "string"
1294
+ ? bag.call_id
1295
+ : typeof bag.parent_id === "string"
1296
+ ? bag.parent_id
1297
+ : itemId;
1298
+ if (pairedId !== null && pendingByItemId.has(pairedId)) {
1299
+ const pending = pendingByItemId.get(pairedId);
1300
+ const collected = collectItemOutput(bag);
1301
+ if (pending && collected !== null) {
1302
+ pendingByItemId.delete(pairedId);
1303
+ const isErrorResult = bag.is_error === true
1304
+ || (typeof bag.error === "string"
1305
+ && bag.error.trim().length > 0);
1306
+ // `collected` is the connector response as a string —
1307
+ // either a JSON-encoded object (the common path:
1308
+ // `bag.output` was the Codex-side tool_result envelope)
1309
+ // or a free-form text reply (`stdout` / `stderr`). Try
1310
+ // JSON-parse for the response-shape walker downstream;
1311
+ // fall back to the raw string so the field is always
1312
+ // populated for ok steps.
1313
+ let parsedToolResult = collected;
1314
+ try {
1315
+ parsedToolResult = JSON.parse(collected);
1316
+ }
1317
+ catch {
1318
+ /* keep raw string */
1319
+ }
1320
+ const step = {
1321
+ toolName: pending.name,
1322
+ toolArgs: pending.args,
1323
+ durationMs: Date.now() - pending.startedAt,
1324
+ status: isErrorResult ? "error" : "ok",
1325
+ costUsd: null,
1326
+ tokensInput: null,
1327
+ tokensOutput: null,
1328
+ toolResult: parsedToolResult,
1329
+ };
1330
+ trace.push(step);
1331
+ onToolStep?.(step);
1332
+ }
1333
+ }
1334
+ }
1335
+ },
1336
+ onStderrLine: (line) => {
1337
+ stderrBuffer.push(line);
1338
+ if (isLikelyCodexFailure(line)) {
1339
+ lastError = line.trim();
1340
+ }
1341
+ },
1342
+ });
1343
+ const cost = withDurationMs({
1344
+ tokensInput: usage.inputTokens,
1345
+ tokensOutput: usage.outputTokens,
1346
+ cacheCreationTokens: usage.cacheCreationInputTokens,
1347
+ cacheReadTokens: usage.cacheReadInputTokens,
1348
+ costUsd: this.priceFetcher.estimateUsageCost({
1349
+ backendId: this.backendId,
1350
+ modelId: actualModelId,
1351
+ usage,
1352
+ fallbackModel: findRegisteredModel(this.backendId, actualModelId),
1353
+ }).costUsd,
1354
+ durationMs: 0,
1355
+ numTurns: numTurns || (sawTurnCompleted ? 1 : 0),
1356
+ }, startMs);
1357
+ if (policyViolationTool) {
1358
+ return {
1359
+ ok: false,
1360
+ errorClass: "policy_violation",
1361
+ message: `subprocess attempted to call '${policyViolationTool}' which is outside the per-task allowlist`,
1362
+ cost,
1363
+ trace,
1364
+ writeClassToolFired,
1365
+ };
1366
+ }
1367
+ if (loopAborted) {
1368
+ return {
1369
+ ok: false,
1370
+ errorClass: "loop_aborted",
1371
+ message: `subprocess exceeded maxToolCalls=${maxToolCalls}`,
1372
+ cost,
1373
+ trace,
1374
+ writeClassToolFired,
1375
+ };
1376
+ }
1377
+ if (abortSignal?.aborted) {
1378
+ const errorClass = classifyAbortReason(abortSignal.reason);
1379
+ return {
1380
+ ok: false,
1381
+ errorClass,
1382
+ message: errorClass === "timeout"
1383
+ ? "delegated task timed out (wall-clock)"
1384
+ : "delegated task cancelled by caller",
1385
+ cost,
1386
+ trace,
1387
+ writeClassToolFired,
1388
+ };
1389
+ }
1390
+ if (runResult.timedOut) {
1391
+ return {
1392
+ ok: false,
1393
+ errorClass: "timeout",
1394
+ message: "codex subprocess exceeded local safety-net timeout",
1395
+ cost,
1396
+ trace,
1397
+ writeClassToolFired,
1398
+ };
1399
+ }
1400
+ const lastMessage = readFileIfExists(outputPath);
1401
+ const finalText = lastMessage?.trim() ?? "";
1402
+ if (finalText.length === 0) {
1403
+ const failure = lastError ?? firstFailureLine(stderrBuffer);
1404
+ if (failure
1405
+ && /unauthorized|forbidden|api key|login|auth/i.test(failure)) {
1406
+ return {
1407
+ ok: false,
1408
+ errorClass: "auth_error",
1409
+ message: failure,
1410
+ cost,
1411
+ trace,
1412
+ writeClassToolFired,
1413
+ };
1414
+ }
1415
+ return {
1416
+ ok: false,
1417
+ errorClass: "parse_error",
1418
+ message: failure
1419
+ ?? `codex emitted no final assistant message (sawTurnCompleted=${sawTurnCompleted})`,
1420
+ cost,
1421
+ trace,
1422
+ writeClassToolFired,
1423
+ };
1424
+ }
1425
+ return {
1426
+ ok: true,
1427
+ rawAssistantText: finalText,
1428
+ cost,
1429
+ trace,
1430
+ writeClassToolFired,
1431
+ };
1432
+ }
1433
+ catch (err) {
1434
+ const message = err instanceof Error ? err.message : String(err);
1435
+ const cost = withDurationMs(emptyCost(), startMs);
1436
+ if (abortSignal?.aborted || aborter.signal.aborted) {
1437
+ return {
1438
+ ok: false,
1439
+ errorClass: classifyAbortReason(abortSignal?.reason ?? aborter.signal.reason),
1440
+ message,
1441
+ cost,
1442
+ trace,
1443
+ writeClassToolFired,
1444
+ };
1445
+ }
1446
+ return {
1447
+ ok: false,
1448
+ errorClass: "subprocess_crashed",
1449
+ message,
1450
+ cost,
1451
+ trace,
1452
+ writeClassToolFired,
1453
+ };
1454
+ }
1455
+ finally {
1456
+ removeFileIfExists(outputPath);
1457
+ if (abortSignal) {
1458
+ abortSignal.removeEventListener("abort", callerListener);
1459
+ }
1460
+ }
1461
+ }
1462
+ }
1463
+ /**
1464
+ * Best-effort extraction of tool-call arguments from a Codex
1465
+ * `function_call` / `mcp_call` item. Codex serialises args as a JSON
1466
+ * string in `bag.arguments`; older versions may use `bag.input` instead.
1467
+ * Returns `null` when nothing parseable is present so the trace's
1468
+ * `toolArgs` field stays informative.
1469
+ */
1470
+ function extractCodexCallArgs(bag) {
1471
+ const candidates = ["arguments", "input", "args"];
1472
+ for (const key of candidates) {
1473
+ const value = bag[key];
1474
+ if (value === undefined || value === null)
1475
+ continue;
1476
+ if (typeof value === "string") {
1477
+ const trimmed = value.trim();
1478
+ if (trimmed.length === 0)
1479
+ continue;
1480
+ try {
1481
+ return JSON.parse(trimmed);
1482
+ }
1483
+ catch {
1484
+ return trimmed;
1485
+ }
1486
+ }
1487
+ if (typeof value === "object")
1488
+ return value;
1489
+ }
1490
+ return null;
1491
+ }
1492
+ /**
1493
+ * Codex MCP items can carry the tool name on multiple fields depending on
1494
+ * CLI version (`name`, `tool`, `tool_name`). Returns true when any of
1495
+ * them match the requested tool — used as a belt-and-suspenders check
1496
+ * after `extractMcpToolCall` has run, in case the parsing path missed.
1497
+ */
1498
+ function itemMatchesToolName(bag, toolName) {
1499
+ const candidates = ["name", "tool", "tool_name"];
1500
+ for (const key of candidates) {
1501
+ const v = bag[key];
1502
+ if (typeof v === "string" && (v === toolName || `mcp__${v}` === toolName)) {
1503
+ return true;
1504
+ }
1505
+ }
1506
+ return false;
1507
+ }
1508
+ /**
1509
+ * Pull the first non-empty output payload from a Codex item. Tries the
1510
+ * structured `output` field first (object → JSON); falls back to the
1511
+ * text-shaped fields the existing `collectCodexItemText` helper scans.
1512
+ */
1513
+ function collectItemOutput(bag) {
1514
+ const structured = bag.output;
1515
+ if (structured !== undefined && structured !== null) {
1516
+ if (typeof structured === "string" && structured.length > 0) {
1517
+ return structured;
1518
+ }
1519
+ if (typeof structured === "object") {
1520
+ try {
1521
+ return JSON.stringify(structured);
1522
+ }
1523
+ catch {
1524
+ /* fall through to text fields */
1525
+ }
1526
+ }
1527
+ }
1528
+ const fields = ["aggregated_output", "stdout", "stderr"];
1529
+ for (const key of fields) {
1530
+ const v = bag[key];
1531
+ if (typeof v === "string" && v.length > 0) {
1532
+ return v;
1533
+ }
1534
+ }
1535
+ return null;
1536
+ }
1537
+ function isMaxBudgetMessage(message) {
1538
+ return /max(?:imum)? budget|max_budget_usd|budget limit|per-turn budget/i.test(message);
1539
+ }
1540
+ /**
1541
+ * Codex argv byte budget. macOS `ARG_MAX` is ~1 MB and the kernel counts
1542
+ * env vars too, so we cap our contribution at 120 KB to leave plenty of
1543
+ * headroom for the prompt body (which can exceed 50 KB on long-context
1544
+ * routines) + env. Matches the chat-file-attachments envelope (see
1545
+ * `docs/design/04-daemon-api.md` §4.3.23).
1546
+ */
1547
+ export const CODEX_ARGV_BUDGET_BYTES = 120_000;
1548
+ /**
1549
+ * Translate staged image attachments into repeated `--image <absolutePath>`
1550
+ * argv pairs. Non-image attachments stay staged-only (the agent opens them
1551
+ * via shell `cat` / `grep`). If emitting flags for every image would push
1552
+ * argv past the budget, drop the entire list — partial emission would
1553
+ * silently bias the model's attention toward the first N images in an
1554
+ * order that's not visible in the prompt. All-or-nothing is easier to
1555
+ * diagnose and the `[Attached files]` text block still names every file.
1556
+ *
1557
+ * Pure function — unit-testable without a CLI subprocess.
1558
+ */
1559
+ export function buildCodexImageArgs(staged, budgetBytes) {
1560
+ if (!staged || staged.length === 0)
1561
+ return [];
1562
+ const images = staged.filter((att) => att.mimeType.toLowerCase().startsWith("image/"));
1563
+ if (images.length === 0)
1564
+ return [];
1565
+ let totalBytes = 0;
1566
+ const args = [];
1567
+ for (const img of images) {
1568
+ // Approximate argv cost: flag name + path + null separators the kernel
1569
+ // adds between args. utf-8 covers macOS paths with non-ASCII chars.
1570
+ totalBytes += Buffer.byteLength("--image", "utf8") + 1;
1571
+ totalBytes += Buffer.byteLength(img.absolutePath, "utf8") + 1;
1572
+ args.push("--image", img.absolutePath);
1573
+ }
1574
+ if (totalBytes > budgetBytes) {
1575
+ logger.warn({ imageCount: images.length, totalBytes, budgetBytes }, "Codex --image argv would exceed budget — dropping to staged-only references");
1576
+ return [];
1577
+ }
1578
+ return args;
1579
+ }
1580
+ function extractCodexUsage(event) {
1581
+ const usage = event.usage;
1582
+ if (!usage || typeof usage !== "object") {
1583
+ return null;
1584
+ }
1585
+ const totalInputTokens = readNumber(usage.input_tokens);
1586
+ const cacheReadInputTokens = readNumber(usage.cached_input_tokens);
1587
+ return {
1588
+ inputTokens: nonCachedInputTokens(totalInputTokens, cacheReadInputTokens),
1589
+ outputTokens: readNumber(usage.output_tokens),
1590
+ cacheCreationInputTokens: 0,
1591
+ cacheReadInputTokens,
1592
+ };
1593
+ }
1594
+ function nonCachedInputTokens(totalInputTokens, cacheReadInputTokens, cacheCreationInputTokens = 0) {
1595
+ return Math.max(totalInputTokens - cacheReadInputTokens - cacheCreationInputTokens, 0);
1596
+ }
1597
+ function extractCodexText(event) {
1598
+ if (typeof event.output_text === "string") {
1599
+ return event.output_text;
1600
+ }
1601
+ if (typeof event.delta === "string") {
1602
+ return event.delta;
1603
+ }
1604
+ if (typeof event.text === "string") {
1605
+ return event.text;
1606
+ }
1607
+ const item = event.item;
1608
+ if (!item || typeof item !== "object") {
1609
+ return "";
1610
+ }
1611
+ if (typeof item.delta === "string") {
1612
+ return item.delta;
1613
+ }
1614
+ if (typeof item.text === "string") {
1615
+ return item.text;
1616
+ }
1617
+ return "";
1618
+ }
1619
+ function isLikelyCodexFailure(line) {
1620
+ return /error|failed|unauthorized|forbidden|rate limit|quota/i.test(line);
1621
+ }
1622
+ /**
1623
+ * Copy any string-valued subprocess-output fields from a Codex JSONL event's
1624
+ * `item` into the given sink. Codex emits tool/command output under a small
1625
+ * set of well-known fields; we scan these (not the whole event graph) so that
1626
+ * a command echo like `echo PA_API_ERROR` never false-positives on the
1627
+ * command-text itself.
1628
+ */
1629
+ /**
1630
+ * Detect an MCP tool call in a Codex JSONL event. Returns null when the
1631
+ * event does not describe an MCP invocation (plain function calls, text
1632
+ * deltas, turn events, etc.). Two shapes are recognised:
1633
+ *
1634
+ * 1. Items whose `name` matches the cross-runtime `mcp__<server>__<tool>`
1635
+ * convention. This is the form emitted by Codex's function-call items
1636
+ * when the underlying tool is an MCP export.
1637
+ * 2. Items that declare `server` + `tool` (or `server_label` + `name`)
1638
+ * fields directly. Surfaced by newer Codex builds for MCP tools and
1639
+ * preferred when present because no string parsing is required.
1640
+ *
1641
+ * Logging is fire-and-forget — unparseable inputs silently return null so
1642
+ * benign shape changes upstream don't spam the log.
1643
+ */
1644
+ function extractMcpToolCall(event) {
1645
+ const item = event.item;
1646
+ if (!item || typeof item !== "object")
1647
+ return null;
1648
+ const bag = item;
1649
+ const serverField = typeof bag.server === "string"
1650
+ ? bag.server
1651
+ : typeof bag.server_label === "string"
1652
+ ? bag.server_label
1653
+ : null;
1654
+ const toolField = typeof bag.tool === "string"
1655
+ ? bag.tool
1656
+ : typeof bag.tool_name === "string"
1657
+ ? bag.tool_name
1658
+ : null;
1659
+ if (serverField && toolField) {
1660
+ return { serverId: serverField, toolName: toolField };
1661
+ }
1662
+ const name = typeof bag.name === "string"
1663
+ ? bag.name
1664
+ : typeof bag.tool_name === "string"
1665
+ ? bag.tool_name
1666
+ : null;
1667
+ if (name) {
1668
+ const parsed = parseMcpToolName(name);
1669
+ if (parsed)
1670
+ return parsed;
1671
+ }
1672
+ return null;
1673
+ }
1674
+ function collectCodexItemText(event, sink) {
1675
+ const item = event.item;
1676
+ if (!item || typeof item !== "object")
1677
+ return;
1678
+ const fields = ["output", "stdout", "stderr", "aggregated_output"];
1679
+ for (const key of fields) {
1680
+ const value = item[key];
1681
+ if (typeof value === "string" && value.length > 0) {
1682
+ sink.push(value);
1683
+ }
1684
+ }
1685
+ }
1686
+ function firstFailureLine(lines) {
1687
+ const line = lines.find((candidate) => isLikelyCodexFailure(candidate));
1688
+ return line?.trim() ?? null;
1689
+ }
1690
+ function readNumber(value) {
1691
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
1692
+ }
1693
+ //# sourceMappingURL=codex-core.js.map