@aitne/daemon 0.1.7 → 0.1.8

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 (959) hide show
  1. package/dist/adapters/dashboard-adapter.d.ts +18 -2
  2. package/dist/adapters/dashboard-adapter.d.ts.map +1 -1
  3. package/dist/adapters/dashboard-adapter.js +101 -51
  4. package/dist/adapters/dashboard-adapter.js.map +1 -1
  5. package/dist/adapters/discord.d.ts +8 -0
  6. package/dist/adapters/discord.d.ts.map +1 -1
  7. package/dist/adapters/discord.js +100 -21
  8. package/dist/adapters/discord.js.map +1 -1
  9. package/dist/adapters/message-hub.d.ts.map +1 -1
  10. package/dist/adapters/message-hub.js +7 -1
  11. package/dist/adapters/message-hub.js.map +1 -1
  12. package/dist/adapters/notification-manager.d.ts +102 -2
  13. package/dist/adapters/notification-manager.d.ts.map +1 -1
  14. package/dist/adapters/notification-manager.js +228 -8
  15. package/dist/adapters/notification-manager.js.map +1 -1
  16. package/dist/adapters/outbound-text.d.ts +16 -0
  17. package/dist/adapters/outbound-text.d.ts.map +1 -1
  18. package/dist/adapters/outbound-text.js +118 -1
  19. package/dist/adapters/outbound-text.js.map +1 -1
  20. package/dist/adapters/primary-platform-resolver.d.ts +69 -0
  21. package/dist/adapters/primary-platform-resolver.d.ts.map +1 -0
  22. package/dist/adapters/primary-platform-resolver.js +55 -0
  23. package/dist/adapters/primary-platform-resolver.js.map +1 -0
  24. package/dist/adapters/slack-adapter.d.ts +28 -0
  25. package/dist/adapters/slack-adapter.d.ts.map +1 -1
  26. package/dist/adapters/slack-adapter.js +134 -35
  27. package/dist/adapters/slack-adapter.js.map +1 -1
  28. package/dist/adapters/telegram-adapter.d.ts +7 -1
  29. package/dist/adapters/telegram-adapter.d.ts.map +1 -1
  30. package/dist/adapters/telegram-adapter.js +49 -18
  31. package/dist/adapters/telegram-adapter.js.map +1 -1
  32. package/dist/adapters/whatsapp-adapter.d.ts +33 -0
  33. package/dist/adapters/whatsapp-adapter.d.ts.map +1 -1
  34. package/dist/adapters/whatsapp-adapter.js +84 -0
  35. package/dist/adapters/whatsapp-adapter.js.map +1 -1
  36. package/dist/api/directory-picker.d.ts.map +1 -1
  37. package/dist/api/directory-picker.js +14 -0
  38. package/dist/api/directory-picker.js.map +1 -1
  39. package/dist/api/env-writer.d.ts.map +1 -1
  40. package/dist/api/env-writer.js +6 -1
  41. package/dist/api/env-writer.js.map +1 -1
  42. package/dist/api/helpers/agent-errors.d.ts +2600 -0
  43. package/dist/api/helpers/agent-errors.d.ts.map +1 -0
  44. package/dist/api/helpers/agent-errors.js +2506 -0
  45. package/dist/api/helpers/agent-errors.js.map +1 -0
  46. package/dist/api/integration-route-gate.d.ts.map +1 -1
  47. package/dist/api/integration-route-gate.js +10 -3
  48. package/dist/api/integration-route-gate.js.map +1 -1
  49. package/dist/api/routes/agent-schedule-plan-match.d.ts +5 -0
  50. package/dist/api/routes/agent-schedule-plan-match.d.ts.map +1 -0
  51. package/dist/api/routes/agent-schedule-plan-match.js +101 -0
  52. package/dist/api/routes/agent-schedule-plan-match.js.map +1 -0
  53. package/dist/api/routes/agent-schedule.d.ts +4 -0
  54. package/dist/api/routes/agent-schedule.d.ts.map +1 -0
  55. package/dist/api/routes/agent-schedule.js +750 -0
  56. package/dist/api/routes/agent-schedule.js.map +1 -0
  57. package/dist/api/routes/agent.d.ts.map +1 -1
  58. package/dist/api/routes/agent.js +209 -366
  59. package/dist/api/routes/agent.js.map +1 -1
  60. package/dist/api/routes/apple-calendar.d.ts.map +1 -1
  61. package/dist/api/routes/apple-calendar.js +109 -27
  62. package/dist/api/routes/apple-calendar.js.map +1 -1
  63. package/dist/api/routes/attachments.d.ts.map +1 -1
  64. package/dist/api/routes/attachments.js +113 -21
  65. package/dist/api/routes/attachments.js.map +1 -1
  66. package/dist/api/routes/backends.d.ts.map +1 -1
  67. package/dist/api/routes/backends.js +100 -4
  68. package/dist/api/routes/backends.js.map +1 -1
  69. package/dist/api/routes/books.d.ts.map +1 -1
  70. package/dist/api/routes/books.js +58 -18
  71. package/dist/api/routes/books.js.map +1 -1
  72. package/dist/api/routes/calendar.d.ts +3 -2
  73. package/dist/api/routes/calendar.d.ts.map +1 -1
  74. package/dist/api/routes/calendar.js +330 -55
  75. package/dist/api/routes/calendar.js.map +1 -1
  76. package/dist/api/routes/commands.d.ts.map +1 -1
  77. package/dist/api/routes/commands.js +20 -1
  78. package/dist/api/routes/commands.js.map +1 -1
  79. package/dist/api/routes/context/index.d.ts +33 -0
  80. package/dist/api/routes/context/index.d.ts.map +1 -0
  81. package/dist/api/routes/context/index.js +193 -0
  82. package/dist/api/routes/context/index.js.map +1 -0
  83. package/dist/api/routes/context/locks.d.ts +4 -0
  84. package/dist/api/routes/context/locks.d.ts.map +1 -0
  85. package/dist/api/routes/context/locks.js +136 -0
  86. package/dist/api/routes/context/locks.js.map +1 -0
  87. package/dist/api/routes/context/path-resolve.d.ts +15 -0
  88. package/dist/api/routes/context/path-resolve.d.ts.map +1 -0
  89. package/dist/api/routes/context/path-resolve.js +109 -0
  90. package/dist/api/routes/context/path-resolve.js.map +1 -0
  91. package/dist/api/routes/context/permissions.d.ts +35 -0
  92. package/dist/api/routes/context/permissions.d.ts.map +1 -0
  93. package/dist/api/routes/context/permissions.js +192 -0
  94. package/dist/api/routes/context/permissions.js.map +1 -0
  95. package/dist/api/routes/context/read.d.ts +4 -0
  96. package/dist/api/routes/context/read.d.ts.map +1 -0
  97. package/dist/api/routes/context/read.js +295 -0
  98. package/dist/api/routes/context/read.js.map +1 -0
  99. package/dist/api/routes/context/repair.d.ts +4 -0
  100. package/dist/api/routes/context/repair.d.ts.map +1 -0
  101. package/dist/api/routes/context/repair.js +114 -0
  102. package/dist/api/routes/context/repair.js.map +1 -0
  103. package/dist/api/routes/context/snapshots.d.ts +4 -0
  104. package/dist/api/routes/context/snapshots.d.ts.map +1 -0
  105. package/dist/api/routes/context/snapshots.js +177 -0
  106. package/dist/api/routes/context/snapshots.js.map +1 -0
  107. package/dist/api/routes/context/write.d.ts +4 -0
  108. package/dist/api/routes/context/write.d.ts.map +1 -0
  109. package/dist/api/routes/context/write.js +570 -0
  110. package/dist/api/routes/context/write.js.map +1 -0
  111. package/dist/api/routes/context.d.ts +2 -43
  112. package/dist/api/routes/context.d.ts.map +1 -1
  113. package/dist/api/routes/context.js +415 -558
  114. package/dist/api/routes/context.js.map +1 -1
  115. package/dist/api/routes/dashboard/config.d.ts +4 -0
  116. package/dist/api/routes/dashboard/config.d.ts.map +1 -0
  117. package/dist/api/routes/dashboard/config.js +499 -0
  118. package/dist/api/routes/dashboard/config.js.map +1 -0
  119. package/dist/api/routes/dashboard/conversations.d.ts +4 -0
  120. package/dist/api/routes/dashboard/conversations.d.ts.map +1 -0
  121. package/dist/api/routes/dashboard/conversations.js +309 -0
  122. package/dist/api/routes/dashboard/conversations.js.map +1 -0
  123. package/dist/api/routes/dashboard/cost-approvals.d.ts +29 -0
  124. package/dist/api/routes/dashboard/cost-approvals.d.ts.map +1 -0
  125. package/dist/api/routes/dashboard/cost-approvals.js +259 -0
  126. package/dist/api/routes/dashboard/cost-approvals.js.map +1 -0
  127. package/dist/api/routes/dashboard/index.d.ts +27 -0
  128. package/dist/api/routes/dashboard/index.d.ts.map +1 -0
  129. package/dist/api/routes/dashboard/index.js +47 -0
  130. package/dist/api/routes/dashboard/index.js.map +1 -0
  131. package/dist/api/routes/dashboard/messaging.d.ts +4 -0
  132. package/dist/api/routes/dashboard/messaging.d.ts.map +1 -0
  133. package/dist/api/routes/dashboard/messaging.js +351 -0
  134. package/dist/api/routes/dashboard/messaging.js.map +1 -0
  135. package/dist/api/routes/dashboard/notifications.d.ts +4 -0
  136. package/dist/api/routes/dashboard/notifications.d.ts.map +1 -0
  137. package/dist/api/routes/dashboard/notifications.js +109 -0
  138. package/dist/api/routes/dashboard/notifications.js.map +1 -0
  139. package/dist/api/routes/dashboard/oauth-google.d.ts +4 -0
  140. package/dist/api/routes/dashboard/oauth-google.d.ts.map +1 -0
  141. package/dist/api/routes/dashboard/oauth-google.js +293 -0
  142. package/dist/api/routes/dashboard/oauth-google.js.map +1 -0
  143. package/dist/api/routes/dashboard/schedule-readonly.d.ts +4 -0
  144. package/dist/api/routes/dashboard/schedule-readonly.d.ts.map +1 -0
  145. package/dist/api/routes/dashboard/schedule-readonly.js +46 -0
  146. package/dist/api/routes/dashboard/schedule-readonly.js.map +1 -0
  147. package/dist/api/routes/dashboard/secrets.d.ts +24 -0
  148. package/dist/api/routes/dashboard/secrets.d.ts.map +1 -0
  149. package/dist/api/routes/dashboard/secrets.js +307 -0
  150. package/dist/api/routes/dashboard/secrets.js.map +1 -0
  151. package/dist/api/routes/dashboard/snapshots.d.ts +4 -0
  152. package/dist/api/routes/dashboard/snapshots.d.ts.map +1 -0
  153. package/dist/api/routes/dashboard/snapshots.js +33 -0
  154. package/dist/api/routes/dashboard/snapshots.js.map +1 -0
  155. package/dist/api/routes/dashboard.d.ts.map +1 -1
  156. package/dist/api/routes/dashboard.js +20 -12
  157. package/dist/api/routes/dashboard.js.map +1 -1
  158. package/dist/api/routes/delegated.d.ts +5 -4
  159. package/dist/api/routes/delegated.d.ts.map +1 -1
  160. package/dist/api/routes/delegated.js +6 -5
  161. package/dist/api/routes/delegated.js.map +1 -1
  162. package/dist/api/routes/docs.d.ts.map +1 -1
  163. package/dist/api/routes/docs.js +72 -9
  164. package/dist/api/routes/docs.js.map +1 -1
  165. package/dist/api/routes/entities.d.ts.map +1 -1
  166. package/dist/api/routes/entities.js +112 -43
  167. package/dist/api/routes/entities.js.map +1 -1
  168. package/dist/api/routes/fs.d.ts.map +1 -1
  169. package/dist/api/routes/fs.js +27 -12
  170. package/dist/api/routes/fs.js.map +1 -1
  171. package/dist/api/routes/git-templates.d.ts.map +1 -1
  172. package/dist/api/routes/git-templates.js +107 -27
  173. package/dist/api/routes/git-templates.js.map +1 -1
  174. package/dist/api/routes/git.d.ts.map +1 -1
  175. package/dist/api/routes/git.js +55 -11
  176. package/dist/api/routes/git.js.map +1 -1
  177. package/dist/api/routes/github.d.ts.map +1 -1
  178. package/dist/api/routes/github.js +110 -17
  179. package/dist/api/routes/github.js.map +1 -1
  180. package/dist/api/routes/integrations/crud-patch.d.ts +17 -0
  181. package/dist/api/routes/integrations/crud-patch.d.ts.map +1 -0
  182. package/dist/api/routes/integrations/crud-patch.js +600 -0
  183. package/dist/api/routes/integrations/crud-patch.js.map +1 -0
  184. package/dist/api/routes/integrations/crud.d.ts +16 -0
  185. package/dist/api/routes/integrations/crud.d.ts.map +1 -0
  186. package/dist/api/routes/integrations/crud.js +158 -0
  187. package/dist/api/routes/integrations/crud.js.map +1 -0
  188. package/dist/api/routes/integrations/exec.d.ts +23 -0
  189. package/dist/api/routes/integrations/exec.d.ts.map +1 -0
  190. package/dist/api/routes/integrations/exec.js +356 -0
  191. package/dist/api/routes/integrations/exec.js.map +1 -0
  192. package/dist/api/routes/integrations/index.d.ts +62 -0
  193. package/dist/api/routes/integrations/index.d.ts.map +1 -0
  194. package/dist/api/routes/integrations/index.js +70 -0
  195. package/dist/api/routes/integrations/index.js.map +1 -0
  196. package/dist/api/routes/integrations/integrations/crud.d.ts +16 -0
  197. package/dist/api/routes/integrations/integrations/crud.d.ts.map +1 -0
  198. package/dist/api/routes/integrations/integrations/crud.js +158 -0
  199. package/dist/api/routes/integrations/integrations/crud.js.map +1 -0
  200. package/dist/api/routes/integrations/integrations/index.d.ts +55 -0
  201. package/dist/api/routes/integrations/integrations/index.d.ts.map +1 -0
  202. package/dist/api/routes/integrations/integrations/index.js +65 -0
  203. package/dist/api/routes/integrations/integrations/index.js.map +1 -0
  204. package/dist/api/routes/integrations/integrations/invoke.d.ts +38 -0
  205. package/dist/api/routes/integrations/integrations/invoke.d.ts.map +1 -0
  206. package/dist/api/routes/integrations/integrations/invoke.js +320 -0
  207. package/dist/api/routes/integrations/integrations/invoke.js.map +1 -0
  208. package/dist/api/routes/integrations/integrations/probe.d.ts +21 -0
  209. package/dist/api/routes/integrations/integrations/probe.d.ts.map +1 -0
  210. package/dist/api/routes/integrations/integrations/probe.js +247 -0
  211. package/dist/api/routes/integrations/integrations/probe.js.map +1 -0
  212. package/dist/api/routes/integrations/invoke.d.ts +38 -0
  213. package/dist/api/routes/integrations/invoke.d.ts.map +1 -0
  214. package/dist/api/routes/integrations/invoke.js +320 -0
  215. package/dist/api/routes/integrations/invoke.js.map +1 -0
  216. package/dist/api/routes/integrations/probe.d.ts +21 -0
  217. package/dist/api/routes/integrations/probe.d.ts.map +1 -0
  218. package/dist/api/routes/integrations/probe.js +247 -0
  219. package/dist/api/routes/integrations/probe.js.map +1 -0
  220. package/dist/api/routes/integrations.d.ts.map +1 -1
  221. package/dist/api/routes/integrations.js +65 -13
  222. package/dist/api/routes/integrations.js.map +1 -1
  223. package/dist/api/routes/knowledge.d.ts.map +1 -1
  224. package/dist/api/routes/knowledge.js +13 -2
  225. package/dist/api/routes/knowledge.js.map +1 -1
  226. package/dist/api/routes/mail/_pa_wip_mail/app-password.d.ts +4 -0
  227. package/dist/api/routes/mail/_pa_wip_mail/app-password.d.ts.map +1 -0
  228. package/dist/api/routes/mail/_pa_wip_mail/app-password.js +192 -0
  229. package/dist/api/routes/mail/_pa_wip_mail/app-password.js.map +1 -0
  230. package/dist/api/routes/mail/_pa_wip_mail/body-helpers.d.ts +55 -0
  231. package/dist/api/routes/mail/_pa_wip_mail/body-helpers.d.ts.map +1 -0
  232. package/dist/api/routes/mail/_pa_wip_mail/body-helpers.js +91 -0
  233. package/dist/api/routes/mail/_pa_wip_mail/body-helpers.js.map +1 -0
  234. package/dist/api/routes/mail/_pa_wip_mail/dependencies.d.ts +36 -0
  235. package/dist/api/routes/mail/_pa_wip_mail/dependencies.d.ts.map +1 -0
  236. package/dist/api/routes/mail/_pa_wip_mail/dependencies.js +2 -0
  237. package/dist/api/routes/mail/_pa_wip_mail/dependencies.js.map +1 -0
  238. package/dist/api/routes/mail/_pa_wip_mail/gating.d.ts +45 -0
  239. package/dist/api/routes/mail/_pa_wip_mail/gating.d.ts.map +1 -0
  240. package/dist/api/routes/mail/_pa_wip_mail/gating.js +98 -0
  241. package/dist/api/routes/mail/_pa_wip_mail/gating.js.map +1 -0
  242. package/dist/api/routes/mail/_pa_wip_mail/mail/accounts.d.ts +4 -0
  243. package/dist/api/routes/mail/_pa_wip_mail/mail/accounts.d.ts.map +1 -0
  244. package/dist/api/routes/mail/_pa_wip_mail/mail/accounts.js +289 -0
  245. package/dist/api/routes/mail/_pa_wip_mail/mail/accounts.js.map +1 -0
  246. package/dist/api/routes/mail/_pa_wip_mail/mail/app-password.d.ts +4 -0
  247. package/dist/api/routes/mail/_pa_wip_mail/mail/app-password.d.ts.map +1 -0
  248. package/dist/api/routes/mail/_pa_wip_mail/mail/app-password.js +192 -0
  249. package/dist/api/routes/mail/_pa_wip_mail/mail/app-password.js.map +1 -0
  250. package/dist/api/routes/mail/_pa_wip_mail/mail/body-helpers.d.ts +55 -0
  251. package/dist/api/routes/mail/_pa_wip_mail/mail/body-helpers.d.ts.map +1 -0
  252. package/dist/api/routes/mail/_pa_wip_mail/mail/body-helpers.js +91 -0
  253. package/dist/api/routes/mail/_pa_wip_mail/mail/body-helpers.js.map +1 -0
  254. package/dist/api/routes/mail/_pa_wip_mail/mail/dependencies.d.ts +36 -0
  255. package/dist/api/routes/mail/_pa_wip_mail/mail/dependencies.d.ts.map +1 -0
  256. package/dist/api/routes/mail/_pa_wip_mail/mail/dependencies.js +2 -0
  257. package/dist/api/routes/mail/_pa_wip_mail/mail/dependencies.js.map +1 -0
  258. package/dist/api/routes/mail/_pa_wip_mail/mail/drafts.d.ts +5 -0
  259. package/dist/api/routes/mail/_pa_wip_mail/mail/drafts.d.ts.map +1 -0
  260. package/dist/api/routes/mail/_pa_wip_mail/mail/drafts.js +139 -0
  261. package/dist/api/routes/mail/_pa_wip_mail/mail/drafts.js.map +1 -0
  262. package/dist/api/routes/mail/_pa_wip_mail/mail/gating.d.ts +45 -0
  263. package/dist/api/routes/mail/_pa_wip_mail/mail/gating.d.ts.map +1 -0
  264. package/dist/api/routes/mail/_pa_wip_mail/mail/gating.js +98 -0
  265. package/dist/api/routes/mail/_pa_wip_mail/mail/gating.js.map +1 -0
  266. package/dist/api/routes/mail/_pa_wip_mail/mail/index.d.ts +18 -0
  267. package/dist/api/routes/mail/_pa_wip_mail/mail/index.d.ts.map +1 -0
  268. package/dist/api/routes/mail/_pa_wip_mail/mail/index.js +40 -0
  269. package/dist/api/routes/mail/_pa_wip_mail/mail/index.js.map +1 -0
  270. package/dist/api/routes/mail/_pa_wip_mail/mail/messages.d.ts +15 -0
  271. package/dist/api/routes/mail/_pa_wip_mail/mail/messages.d.ts.map +1 -0
  272. package/dist/api/routes/mail/_pa_wip_mail/mail/messages.js +239 -0
  273. package/dist/api/routes/mail/_pa_wip_mail/mail/messages.js.map +1 -0
  274. package/dist/api/routes/mail/_pa_wip_mail/mail/outlook-config.d.ts +4 -0
  275. package/dist/api/routes/mail/_pa_wip_mail/mail/outlook-config.d.ts.map +1 -0
  276. package/dist/api/routes/mail/_pa_wip_mail/mail/outlook-config.js +73 -0
  277. package/dist/api/routes/mail/_pa_wip_mail/mail/outlook-config.js.map +1 -0
  278. package/dist/api/routes/mail/_pa_wip_mail/mail/provider-resolver.d.ts +64 -0
  279. package/dist/api/routes/mail/_pa_wip_mail/mail/provider-resolver.d.ts.map +1 -0
  280. package/dist/api/routes/mail/_pa_wip_mail/mail/provider-resolver.js +286 -0
  281. package/dist/api/routes/mail/_pa_wip_mail/mail/provider-resolver.js.map +1 -0
  282. package/dist/api/routes/mail/_pa_wip_mail/mail/providers.d.ts +4 -0
  283. package/dist/api/routes/mail/_pa_wip_mail/mail/providers.d.ts.map +1 -0
  284. package/dist/api/routes/mail/_pa_wip_mail/mail/providers.js +73 -0
  285. package/dist/api/routes/mail/_pa_wip_mail/mail/providers.js.map +1 -0
  286. package/dist/api/routes/mail/_pa_wip_mail/mail/tags-folders.d.ts +5 -0
  287. package/dist/api/routes/mail/_pa_wip_mail/mail/tags-folders.d.ts.map +1 -0
  288. package/dist/api/routes/mail/_pa_wip_mail/mail/tags-folders.js +35 -0
  289. package/dist/api/routes/mail/_pa_wip_mail/mail/tags-folders.js.map +1 -0
  290. package/dist/api/routes/mail/_pa_wip_mail/mail/validators.d.ts +23 -0
  291. package/dist/api/routes/mail/_pa_wip_mail/mail/validators.d.ts.map +1 -0
  292. package/dist/api/routes/mail/_pa_wip_mail/mail/validators.js +131 -0
  293. package/dist/api/routes/mail/_pa_wip_mail/mail/validators.js.map +1 -0
  294. package/dist/api/routes/mail/_pa_wip_mail/provider-resolver.d.ts +64 -0
  295. package/dist/api/routes/mail/_pa_wip_mail/provider-resolver.d.ts.map +1 -0
  296. package/dist/api/routes/mail/_pa_wip_mail/provider-resolver.js +286 -0
  297. package/dist/api/routes/mail/_pa_wip_mail/provider-resolver.js.map +1 -0
  298. package/dist/api/routes/mail/_pa_wip_mail/search-health.d.ts +4 -0
  299. package/dist/api/routes/mail/_pa_wip_mail/search-health.d.ts.map +1 -0
  300. package/dist/api/routes/mail/_pa_wip_mail/search-health.js +131 -0
  301. package/dist/api/routes/mail/_pa_wip_mail/search-health.js.map +1 -0
  302. package/dist/api/routes/mail/_pa_wip_mail/validators.d.ts +23 -0
  303. package/dist/api/routes/mail/_pa_wip_mail/validators.d.ts.map +1 -0
  304. package/dist/api/routes/mail/_pa_wip_mail/validators.js +131 -0
  305. package/dist/api/routes/mail/_pa_wip_mail/validators.js.map +1 -0
  306. package/dist/api/routes/mail/accounts.d.ts +4 -0
  307. package/dist/api/routes/mail/accounts.d.ts.map +1 -0
  308. package/dist/api/routes/mail/accounts.js +289 -0
  309. package/dist/api/routes/mail/accounts.js.map +1 -0
  310. package/dist/api/routes/mail/app-password.d.ts +4 -0
  311. package/dist/api/routes/mail/app-password.d.ts.map +1 -0
  312. package/dist/api/routes/mail/app-password.js +192 -0
  313. package/dist/api/routes/mail/app-password.js.map +1 -0
  314. package/dist/api/routes/mail/body-helpers.d.ts +56 -0
  315. package/dist/api/routes/mail/body-helpers.d.ts.map +1 -0
  316. package/dist/api/routes/mail/body-helpers.js +91 -0
  317. package/dist/api/routes/mail/body-helpers.js.map +1 -0
  318. package/dist/api/routes/mail/dependencies.d.ts +36 -0
  319. package/dist/api/routes/mail/dependencies.d.ts.map +1 -0
  320. package/dist/api/routes/mail/dependencies.js +2 -0
  321. package/dist/api/routes/mail/dependencies.js.map +1 -0
  322. package/dist/api/routes/mail/drafts.d.ts +5 -0
  323. package/dist/api/routes/mail/drafts.d.ts.map +1 -0
  324. package/dist/api/routes/mail/drafts.js +139 -0
  325. package/dist/api/routes/mail/drafts.js.map +1 -0
  326. package/dist/api/routes/mail/gating.d.ts +45 -0
  327. package/dist/api/routes/mail/gating.d.ts.map +1 -0
  328. package/dist/api/routes/mail/gating.js +99 -0
  329. package/dist/api/routes/mail/gating.js.map +1 -0
  330. package/dist/api/routes/mail/index.d.ts +18 -0
  331. package/dist/api/routes/mail/index.d.ts.map +1 -0
  332. package/dist/api/routes/mail/index.js +40 -0
  333. package/dist/api/routes/mail/index.js.map +1 -0
  334. package/dist/api/routes/mail/messages.d.ts +15 -0
  335. package/dist/api/routes/mail/messages.d.ts.map +1 -0
  336. package/dist/api/routes/mail/messages.js +239 -0
  337. package/dist/api/routes/mail/messages.js.map +1 -0
  338. package/dist/api/routes/mail/outlook-config.d.ts +4 -0
  339. package/dist/api/routes/mail/outlook-config.d.ts.map +1 -0
  340. package/dist/api/routes/mail/outlook-config.js +73 -0
  341. package/dist/api/routes/mail/outlook-config.js.map +1 -0
  342. package/dist/api/routes/mail/provider-resolver.d.ts +64 -0
  343. package/dist/api/routes/mail/provider-resolver.d.ts.map +1 -0
  344. package/dist/api/routes/mail/provider-resolver.js +286 -0
  345. package/dist/api/routes/mail/provider-resolver.js.map +1 -0
  346. package/dist/api/routes/mail/providers.d.ts +4 -0
  347. package/dist/api/routes/mail/providers.d.ts.map +1 -0
  348. package/dist/api/routes/mail/providers.js +73 -0
  349. package/dist/api/routes/mail/providers.js.map +1 -0
  350. package/dist/api/routes/mail/search-health.d.ts +4 -0
  351. package/dist/api/routes/mail/search-health.d.ts.map +1 -0
  352. package/dist/api/routes/mail/search-health.js +131 -0
  353. package/dist/api/routes/mail/search-health.js.map +1 -0
  354. package/dist/api/routes/mail/tags-folders.d.ts +5 -0
  355. package/dist/api/routes/mail/tags-folders.d.ts.map +1 -0
  356. package/dist/api/routes/mail/tags-folders.js +35 -0
  357. package/dist/api/routes/mail/tags-folders.js.map +1 -0
  358. package/dist/api/routes/mail/validators.d.ts +23 -0
  359. package/dist/api/routes/mail/validators.d.ts.map +1 -0
  360. package/dist/api/routes/mail/validators.js +131 -0
  361. package/dist/api/routes/mail/validators.js.map +1 -0
  362. package/dist/api/routes/mail.d.ts.map +1 -1
  363. package/dist/api/routes/mail.js +259 -67
  364. package/dist/api/routes/mail.js.map +1 -1
  365. package/dist/api/routes/managed-tasks.d.ts.map +1 -1
  366. package/dist/api/routes/managed-tasks.js +142 -54
  367. package/dist/api/routes/managed-tasks.js.map +1 -1
  368. package/dist/api/routes/mcp.d.ts.map +1 -1
  369. package/dist/api/routes/mcp.js +115 -47
  370. package/dist/api/routes/mcp.js.map +1 -1
  371. package/dist/api/routes/metrics.d.ts +1 -1
  372. package/dist/api/routes/metrics.js +2 -2
  373. package/dist/api/routes/notion.d.ts.map +1 -1
  374. package/dist/api/routes/notion.js +230 -54
  375. package/dist/api/routes/notion.js.map +1 -1
  376. package/dist/api/routes/observations.d.ts.map +1 -1
  377. package/dist/api/routes/observations.js +40 -169
  378. package/dist/api/routes/observations.js.map +1 -1
  379. package/dist/api/routes/obsidian.d.ts.map +1 -1
  380. package/dist/api/routes/obsidian.js +193 -32
  381. package/dist/api/routes/obsidian.js.map +1 -1
  382. package/dist/api/routes/profile-questions.d.ts.map +1 -1
  383. package/dist/api/routes/profile-questions.js +19 -3
  384. package/dist/api/routes/profile-questions.js.map +1 -1
  385. package/dist/api/routes/receipts.d.ts.map +1 -1
  386. package/dist/api/routes/receipts.js +64 -24
  387. package/dist/api/routes/receipts.js.map +1 -1
  388. package/dist/api/routes/recurring-schedules.d.ts.map +1 -1
  389. package/dist/api/routes/recurring-schedules.js +243 -13
  390. package/dist/api/routes/recurring-schedules.js.map +1 -1
  391. package/dist/api/routes/repositories.d.ts.map +1 -1
  392. package/dist/api/routes/repositories.js +278 -104
  393. package/dist/api/routes/repositories.js.map +1 -1
  394. package/dist/api/routes/schedule-model-resolver.d.ts +153 -0
  395. package/dist/api/routes/schedule-model-resolver.d.ts.map +1 -0
  396. package/dist/api/routes/schedule-model-resolver.js +282 -0
  397. package/dist/api/routes/schedule-model-resolver.js.map +1 -0
  398. package/dist/api/routes/schedule-options.d.ts +25 -0
  399. package/dist/api/routes/schedule-options.d.ts.map +1 -0
  400. package/dist/api/routes/schedule-options.js +77 -0
  401. package/dist/api/routes/schedule-options.js.map +1 -0
  402. package/dist/api/routes/schedule-validation.d.ts +146 -0
  403. package/dist/api/routes/schedule-validation.d.ts.map +1 -0
  404. package/dist/api/routes/schedule-validation.js +153 -0
  405. package/dist/api/routes/schedule-validation.js.map +1 -0
  406. package/dist/api/routes/setup.d.ts.map +1 -1
  407. package/dist/api/routes/setup.js +100 -26
  408. package/dist/api/routes/setup.js.map +1 -1
  409. package/dist/api/routes/skills.d.ts.map +1 -1
  410. package/dist/api/routes/skills.js +81 -30
  411. package/dist/api/routes/skills.js.map +1 -1
  412. package/dist/api/routes/sot-bindings.d.ts.map +1 -1
  413. package/dist/api/routes/sot-bindings.js +46 -11
  414. package/dist/api/routes/sot-bindings.js.map +1 -1
  415. package/dist/api/routes/sse.d.ts.map +1 -1
  416. package/dist/api/routes/sse.js +6 -1
  417. package/dist/api/routes/sse.js.map +1 -1
  418. package/dist/api/routes/system.d.ts.map +1 -1
  419. package/dist/api/routes/system.js +15 -2
  420. package/dist/api/routes/system.js.map +1 -1
  421. package/dist/api/routes/travel-bookings.d.ts.map +1 -1
  422. package/dist/api/routes/travel-bookings.js +26 -9
  423. package/dist/api/routes/travel-bookings.js.map +1 -1
  424. package/dist/api/routes/travel-time.d.ts.map +1 -1
  425. package/dist/api/routes/travel-time.js +50 -10
  426. package/dist/api/routes/travel-time.js.map +1 -1
  427. package/dist/api/routes/wiki.d.ts.map +1 -1
  428. package/dist/api/routes/wiki.js +49 -8
  429. package/dist/api/routes/wiki.js.map +1 -1
  430. package/dist/api/server.d.ts +15 -3
  431. package/dist/api/server.d.ts.map +1 -1
  432. package/dist/api/server.js +32 -10
  433. package/dist/api/server.js.map +1 -1
  434. package/dist/bootstrap/adapters.d.ts.map +1 -1
  435. package/dist/bootstrap/adapters.js +7 -4
  436. package/dist/bootstrap/adapters.js.map +1 -1
  437. package/dist/bootstrap/api.d.ts +205 -0
  438. package/dist/bootstrap/api.d.ts.map +1 -0
  439. package/dist/bootstrap/api.js +443 -0
  440. package/dist/bootstrap/api.js.map +1 -0
  441. package/dist/bootstrap/db.d.ts +119 -0
  442. package/dist/bootstrap/db.d.ts.map +1 -0
  443. package/dist/bootstrap/db.js +294 -0
  444. package/dist/bootstrap/db.js.map +1 -0
  445. package/dist/bootstrap/event-pipeline.d.ts +308 -0
  446. package/dist/bootstrap/event-pipeline.d.ts.map +1 -0
  447. package/dist/bootstrap/event-pipeline.js +704 -0
  448. package/dist/bootstrap/event-pipeline.js.map +1 -0
  449. package/dist/bootstrap/observers.d.ts +148 -0
  450. package/dist/bootstrap/observers.d.ts.map +1 -0
  451. package/dist/bootstrap/observers.js +558 -0
  452. package/dist/bootstrap/observers.js.map +1 -0
  453. package/dist/bootstrap/schedule-helpers.d.ts +122 -0
  454. package/dist/bootstrap/schedule-helpers.d.ts.map +1 -1
  455. package/dist/bootstrap/schedule-helpers.js +202 -4
  456. package/dist/bootstrap/schedule-helpers.js.map +1 -1
  457. package/dist/config.d.ts.map +1 -1
  458. package/dist/config.js +20 -3
  459. package/dist/config.js.map +1 -1
  460. package/dist/core/abort-utils.d.ts +14 -0
  461. package/dist/core/abort-utils.d.ts.map +1 -0
  462. package/dist/core/abort-utils.js +36 -0
  463. package/dist/core/abort-utils.js.map +1 -0
  464. package/dist/core/agent-core.d.ts +22 -3
  465. package/dist/core/agent-core.d.ts.map +1 -1
  466. package/dist/core/agent-core.js +3 -1
  467. package/dist/core/agent-core.js.map +1 -1
  468. package/dist/core/backends/auth-health-monitor.js +2 -3
  469. package/dist/core/backends/auth-health-monitor.js.map +1 -1
  470. package/dist/core/backends/backend-router.d.ts +11 -1
  471. package/dist/core/backends/backend-router.d.ts.map +1 -1
  472. package/dist/core/backends/backend-router.js +97 -2
  473. package/dist/core/backends/backend-router.js.map +1 -1
  474. package/dist/core/backends/claude-code-core.d.ts +51 -0
  475. package/dist/core/backends/claude-code-core.d.ts.map +1 -1
  476. package/dist/core/backends/claude-code-core.js +134 -11
  477. package/dist/core/backends/claude-code-core.js.map +1 -1
  478. package/dist/core/backends/claude-tool-collection.js +1 -1
  479. package/dist/core/backends/codex-core.d.ts +13 -1
  480. package/dist/core/backends/codex-core.d.ts.map +1 -1
  481. package/dist/core/backends/codex-core.js +436 -22
  482. package/dist/core/backends/codex-core.js.map +1 -1
  483. package/dist/core/backends/gemini-cli-core.d.ts +5 -1
  484. package/dist/core/backends/gemini-cli-core.d.ts.map +1 -1
  485. package/dist/core/backends/gemini-cli-core.js +298 -15
  486. package/dist/core/backends/gemini-cli-core.js.map +1 -1
  487. package/dist/core/backends/install-methods.d.ts.map +1 -1
  488. package/dist/core/backends/install-methods.js +22 -0
  489. package/dist/core/backends/install-methods.js.map +1 -1
  490. package/dist/core/backends/model-registry.d.ts +9 -4
  491. package/dist/core/backends/model-registry.d.ts.map +1 -1
  492. package/dist/core/backends/model-registry.js +153 -23
  493. package/dist/core/backends/model-registry.js.map +1 -1
  494. package/dist/core/backends/native-skill-discovery-probe.d.ts +80 -0
  495. package/dist/core/backends/native-skill-discovery-probe.d.ts.map +1 -0
  496. package/dist/core/backends/native-skill-discovery-probe.js +175 -0
  497. package/dist/core/backends/native-skill-discovery-probe.js.map +1 -0
  498. package/dist/core/backends/opencode-basic-auth-fetch.d.ts +27 -0
  499. package/dist/core/backends/opencode-basic-auth-fetch.d.ts.map +1 -0
  500. package/dist/core/backends/opencode-basic-auth-fetch.js +40 -0
  501. package/dist/core/backends/opencode-basic-auth-fetch.js.map +1 -0
  502. package/dist/core/backends/opencode-config-builder.d.ts +86 -0
  503. package/dist/core/backends/opencode-config-builder.d.ts.map +1 -0
  504. package/dist/core/backends/opencode-config-builder.js +172 -0
  505. package/dist/core/backends/opencode-config-builder.js.map +1 -0
  506. package/dist/core/backends/opencode-core.d.ts +316 -0
  507. package/dist/core/backends/opencode-core.d.ts.map +1 -0
  508. package/dist/core/backends/opencode-core.js +1502 -0
  509. package/dist/core/backends/opencode-core.js.map +1 -0
  510. package/dist/core/backends/opencode-event-mapper.d.ts +133 -0
  511. package/dist/core/backends/opencode-event-mapper.d.ts.map +1 -0
  512. package/dist/core/backends/opencode-event-mapper.js +198 -0
  513. package/dist/core/backends/opencode-event-mapper.js.map +1 -0
  514. package/dist/core/backends/opencode-mcp.d.ts +82 -0
  515. package/dist/core/backends/opencode-mcp.d.ts.map +1 -0
  516. package/dist/core/backends/opencode-mcp.js +165 -0
  517. package/dist/core/backends/opencode-mcp.js.map +1 -0
  518. package/dist/core/backends/opencode-server-manager.d.ts +114 -0
  519. package/dist/core/backends/opencode-server-manager.d.ts.map +1 -0
  520. package/dist/core/backends/opencode-server-manager.js +222 -0
  521. package/dist/core/backends/opencode-server-manager.js.map +1 -0
  522. package/dist/core/backends/opencode-types.d.ts +46 -0
  523. package/dist/core/backends/opencode-types.d.ts.map +1 -0
  524. package/dist/core/backends/opencode-types.js +14 -0
  525. package/dist/core/backends/opencode-types.js.map +1 -0
  526. package/dist/core/backends/plan-presets.d.ts +18 -5
  527. package/dist/core/backends/plan-presets.d.ts.map +1 -1
  528. package/dist/core/backends/plan-presets.js +144 -23
  529. package/dist/core/backends/plan-presets.js.map +1 -1
  530. package/dist/core/backends/process-config-cascade.d.ts +35 -0
  531. package/dist/core/backends/process-config-cascade.d.ts.map +1 -1
  532. package/dist/core/backends/process-config-cascade.js +35 -1
  533. package/dist/core/backends/process-config-cascade.js.map +1 -1
  534. package/dist/core/backends/prompt-utils.d.ts.map +1 -1
  535. package/dist/core/backends/prompt-utils.js +0 -2
  536. package/dist/core/backends/prompt-utils.js.map +1 -1
  537. package/dist/core/backends/quota-reset-hints.d.ts +44 -0
  538. package/dist/core/backends/quota-reset-hints.d.ts.map +1 -0
  539. package/dist/core/backends/quota-reset-hints.js +117 -0
  540. package/dist/core/backends/quota-reset-hints.js.map +1 -0
  541. package/dist/core/bang-commands/commands-close.d.ts +24 -0
  542. package/dist/core/bang-commands/commands-close.d.ts.map +1 -0
  543. package/dist/core/bang-commands/commands-close.js +24 -0
  544. package/dist/core/bang-commands/commands-close.js.map +1 -0
  545. package/dist/core/bang-commands/commands-cost.d.ts.map +1 -1
  546. package/dist/core/bang-commands/commands-cost.js +13 -0
  547. package/dist/core/bang-commands/commands-cost.js.map +1 -1
  548. package/dist/core/bang-commands/commands-help.d.ts.map +1 -1
  549. package/dist/core/bang-commands/commands-help.js +44 -5
  550. package/dist/core/bang-commands/commands-help.js.map +1 -1
  551. package/dist/core/bang-commands/commands-report.d.ts.map +1 -1
  552. package/dist/core/bang-commands/commands-report.js +1 -0
  553. package/dist/core/bang-commands/commands-report.js.map +1 -1
  554. package/dist/core/bang-commands/commands-stop-start.d.ts.map +1 -1
  555. package/dist/core/bang-commands/commands-stop-start.js +2 -0
  556. package/dist/core/bang-commands/commands-stop-start.js.map +1 -1
  557. package/dist/core/bang-commands/commands-wiki.d.ts.map +1 -1
  558. package/dist/core/bang-commands/commands-wiki.js +12 -1
  559. package/dist/core/bang-commands/commands-wiki.js.map +1 -1
  560. package/dist/core/bang-commands/format-utils.d.ts +13 -1
  561. package/dist/core/bang-commands/format-utils.d.ts.map +1 -1
  562. package/dist/core/bang-commands/format-utils.js +21 -2
  563. package/dist/core/bang-commands/format-utils.js.map +1 -1
  564. package/dist/core/bang-commands/index.d.ts +1 -0
  565. package/dist/core/bang-commands/index.d.ts.map +1 -1
  566. package/dist/core/bang-commands/index.js +3 -0
  567. package/dist/core/bang-commands/index.js.map +1 -1
  568. package/dist/core/bang-commands/registry.d.ts +50 -0
  569. package/dist/core/bang-commands/registry.d.ts.map +1 -1
  570. package/dist/core/bang-commands/registry.js +164 -19
  571. package/dist/core/bang-commands/registry.js.map +1 -1
  572. package/dist/core/channel-timeline.d.ts +18 -1
  573. package/dist/core/channel-timeline.d.ts.map +1 -1
  574. package/dist/core/channel-timeline.js +44 -0
  575. package/dist/core/channel-timeline.js.map +1 -1
  576. package/dist/core/context/activity-view-runner.js +9 -1
  577. package/dist/core/context/activity-view-runner.js.map +1 -1
  578. package/dist/core/context/default-schedules-runner.js +44 -4
  579. package/dist/core/context/default-schedules-runner.js.map +1 -1
  580. package/dist/core/context/domain-index-runner.js +9 -1
  581. package/dist/core/context/domain-index-runner.js.map +1 -1
  582. package/dist/core/context/entity-source-rename.d.ts.map +1 -1
  583. package/dist/core/context/entity-source-rename.js +9 -1
  584. package/dist/core/context/entity-source-rename.js.map +1 -1
  585. package/dist/core/context/policy-index-runner.js +9 -1
  586. package/dist/core/context/policy-index-runner.js.map +1 -1
  587. package/dist/core/context/reconciler-runner.js +9 -1
  588. package/dist/core/context/reconciler-runner.js.map +1 -1
  589. package/dist/core/context-builder.d.ts +97 -2
  590. package/dist/core/context-builder.d.ts.map +1 -1
  591. package/dist/core/context-builder.js +303 -30
  592. package/dist/core/context-builder.js.map +1 -1
  593. package/dist/core/context-frontmatter.d.ts +6 -0
  594. package/dist/core/context-frontmatter.d.ts.map +1 -1
  595. package/dist/core/context-frontmatter.js +120 -8
  596. package/dist/core/context-frontmatter.js.map +1 -1
  597. package/dist/core/context-health.js +21 -9
  598. package/dist/core/context-health.js.map +1 -1
  599. package/dist/core/context-validation/_pa_wip_context_validation/index.d.ts +19 -0
  600. package/dist/core/context-validation/_pa_wip_context_validation/index.d.ts.map +1 -0
  601. package/dist/core/context-validation/_pa_wip_context_validation/index.js +19 -0
  602. package/dist/core/context-validation/_pa_wip_context_validation/index.js.map +1 -0
  603. package/dist/core/context-validation/_pa_wip_context_validation/prepare-write.d.ts +94 -0
  604. package/dist/core/context-validation/_pa_wip_context_validation/prepare-write.d.ts.map +1 -0
  605. package/dist/core/context-validation/_pa_wip_context_validation/prepare-write.js +130 -0
  606. package/dist/core/context-validation/_pa_wip_context_validation/prepare-write.js.map +1 -0
  607. package/dist/core/context-validation/_pa_wip_context_validation/routine-rulebook.d.ts +60 -0
  608. package/dist/core/context-validation/_pa_wip_context_validation/routine-rulebook.d.ts.map +1 -0
  609. package/dist/core/context-validation/_pa_wip_context_validation/routine-rulebook.js +156 -0
  610. package/dist/core/context-validation/_pa_wip_context_validation/routine-rulebook.js.map +1 -0
  611. package/dist/core/context-validation/_pa_wip_context_validation/section.d.ts +41 -0
  612. package/dist/core/context-validation/_pa_wip_context_validation/section.d.ts.map +1 -0
  613. package/dist/core/context-validation/_pa_wip_context_validation/section.js +82 -0
  614. package/dist/core/context-validation/_pa_wip_context_validation/section.js.map +1 -0
  615. package/dist/core/context-validation/_pa_wip_context_validation/snapshot-debounce.d.ts +52 -0
  616. package/dist/core/context-validation/_pa_wip_context_validation/snapshot-debounce.d.ts.map +1 -0
  617. package/dist/core/context-validation/_pa_wip_context_validation/snapshot-debounce.js +110 -0
  618. package/dist/core/context-validation/_pa_wip_context_validation/snapshot-debounce.js.map +1 -0
  619. package/dist/core/context-validation/_pa_wip_context_validation/today.d.ts +85 -0
  620. package/dist/core/context-validation/_pa_wip_context_validation/today.d.ts.map +1 -0
  621. package/dist/core/context-validation/_pa_wip_context_validation/today.js +162 -0
  622. package/dist/core/context-validation/_pa_wip_context_validation/today.js.map +1 -0
  623. package/dist/core/context-validation/index.d.ts +19 -0
  624. package/dist/core/context-validation/index.d.ts.map +1 -0
  625. package/dist/core/context-validation/index.js +19 -0
  626. package/dist/core/context-validation/index.js.map +1 -0
  627. package/dist/core/context-validation/prepare-write.d.ts +95 -0
  628. package/dist/core/context-validation/prepare-write.d.ts.map +1 -0
  629. package/dist/core/context-validation/prepare-write.js +135 -0
  630. package/dist/core/context-validation/prepare-write.js.map +1 -0
  631. package/dist/core/context-validation/routine-rulebook.d.ts +60 -0
  632. package/dist/core/context-validation/routine-rulebook.d.ts.map +1 -0
  633. package/dist/core/context-validation/routine-rulebook.js +156 -0
  634. package/dist/core/context-validation/routine-rulebook.js.map +1 -0
  635. package/dist/core/context-validation/section.d.ts +41 -0
  636. package/dist/core/context-validation/section.d.ts.map +1 -0
  637. package/dist/core/context-validation/section.js +82 -0
  638. package/dist/core/context-validation/section.js.map +1 -0
  639. package/dist/core/context-validation/snapshot-debounce.d.ts +52 -0
  640. package/dist/core/context-validation/snapshot-debounce.d.ts.map +1 -0
  641. package/dist/core/context-validation/snapshot-debounce.js +110 -0
  642. package/dist/core/context-validation/snapshot-debounce.js.map +1 -0
  643. package/dist/core/context-validation/today.d.ts +85 -0
  644. package/dist/core/context-validation/today.d.ts.map +1 -0
  645. package/dist/core/context-validation/today.js +168 -0
  646. package/dist/core/context-validation/today.js.map +1 -0
  647. package/dist/core/daemon-api-cli.d.ts +6 -5
  648. package/dist/core/daemon-api-cli.d.ts.map +1 -1
  649. package/dist/core/daemon-api-cli.js +73 -32
  650. package/dist/core/daemon-api-cli.js.map +1 -1
  651. package/dist/core/dispatcher-error-handling.d.ts +13 -0
  652. package/dist/core/dispatcher-error-handling.d.ts.map +1 -1
  653. package/dist/core/dispatcher-error-handling.js +69 -0
  654. package/dist/core/dispatcher-error-handling.js.map +1 -1
  655. package/dist/core/dispatcher-hourly-check.d.ts +73 -1
  656. package/dist/core/dispatcher-hourly-check.d.ts.map +1 -1
  657. package/dist/core/dispatcher-hourly-check.js +249 -151
  658. package/dist/core/dispatcher-hourly-check.js.map +1 -1
  659. package/dist/core/dispatcher-message-handler.d.ts +11 -1
  660. package/dist/core/dispatcher-message-handler.d.ts.map +1 -1
  661. package/dist/core/dispatcher-message-handler.js +165 -47
  662. package/dist/core/dispatcher-message-handler.js.map +1 -1
  663. package/dist/core/dispatcher-morning-routine.d.ts +38 -30
  664. package/dist/core/dispatcher-morning-routine.d.ts.map +1 -1
  665. package/dist/core/dispatcher-morning-routine.js +162 -104
  666. package/dist/core/dispatcher-morning-routine.js.map +1 -1
  667. package/dist/core/dispatcher-prompt.d.ts +4 -1
  668. package/dist/core/dispatcher-prompt.d.ts.map +1 -1
  669. package/dist/core/dispatcher-prompt.js +18 -2
  670. package/dist/core/dispatcher-prompt.js.map +1 -1
  671. package/dist/core/dispatcher-repository-helpers.d.ts.map +1 -1
  672. package/dist/core/dispatcher-repository-helpers.js +5 -1
  673. package/dist/core/dispatcher-repository-helpers.js.map +1 -1
  674. package/dist/core/dispatcher-result-processor.d.ts.map +1 -1
  675. package/dist/core/dispatcher-result-processor.js +9 -4
  676. package/dist/core/dispatcher-result-processor.js.map +1 -1
  677. package/dist/core/dispatcher-scheduled-tasks.d.ts +1 -1
  678. package/dist/core/dispatcher-scheduled-tasks.d.ts.map +1 -1
  679. package/dist/core/dispatcher-scheduled-tasks.js +79 -16
  680. package/dist/core/dispatcher-scheduled-tasks.js.map +1 -1
  681. package/dist/core/dispatcher-types.d.ts +84 -12
  682. package/dist/core/dispatcher-types.d.ts.map +1 -1
  683. package/dist/core/dispatcher-types.js.map +1 -1
  684. package/dist/core/dispatcher.d.ts +50 -1
  685. package/dist/core/dispatcher.d.ts.map +1 -1
  686. package/dist/core/dispatcher.js +143 -8
  687. package/dist/core/dispatcher.js.map +1 -1
  688. package/dist/core/dm-freshness-metrics.d.ts +6 -5
  689. package/dist/core/dm-freshness-metrics.d.ts.map +1 -1
  690. package/dist/core/dm-freshness-metrics.js +7 -6
  691. package/dist/core/dm-freshness-metrics.js.map +1 -1
  692. package/dist/core/evening-review-verify.d.ts +164 -0
  693. package/dist/core/evening-review-verify.d.ts.map +1 -0
  694. package/dist/core/evening-review-verify.js +637 -0
  695. package/dist/core/evening-review-verify.js.map +1 -0
  696. package/dist/core/fetch-window-prompt-loader.d.ts +47 -0
  697. package/dist/core/fetch-window-prompt-loader.d.ts.map +1 -0
  698. package/dist/core/fetch-window-prompt-loader.js +72 -0
  699. package/dist/core/fetch-window-prompt-loader.js.map +1 -0
  700. package/dist/core/management-md.d.ts.map +1 -1
  701. package/dist/core/management-md.js +23 -9
  702. package/dist/core/management-md.js.map +1 -1
  703. package/dist/core/management-registry.d.ts +13 -21
  704. package/dist/core/management-registry.d.ts.map +1 -1
  705. package/dist/core/management-registry.js +27 -48
  706. package/dist/core/management-registry.js.map +1 -1
  707. package/dist/core/metrics.d.ts +88 -1
  708. package/dist/core/metrics.d.ts.map +1 -1
  709. package/dist/core/metrics.js +78 -2
  710. package/dist/core/metrics.js.map +1 -1
  711. package/dist/core/morning/agent-journal-appender.d.ts +197 -0
  712. package/dist/core/morning/agent-journal-appender.d.ts.map +1 -0
  713. package/dist/core/morning/agent-journal-appender.js +458 -0
  714. package/dist/core/morning/agent-journal-appender.js.map +1 -0
  715. package/dist/core/morning/handoff-parser.d.ts +45 -0
  716. package/dist/core/morning/handoff-parser.d.ts.map +1 -0
  717. package/dist/core/morning/handoff-parser.js +117 -0
  718. package/dist/core/morning/handoff-parser.js.map +1 -0
  719. package/dist/core/morning/journal-skeleton-builder.d.ts +157 -0
  720. package/dist/core/morning/journal-skeleton-builder.d.ts.map +1 -0
  721. package/dist/core/morning/journal-skeleton-builder.js +303 -0
  722. package/dist/core/morning/journal-skeleton-builder.js.map +1 -0
  723. package/dist/core/morning/orchestrator.d.ts +312 -0
  724. package/dist/core/morning/orchestrator.d.ts.map +1 -0
  725. package/dist/core/morning/orchestrator.js +827 -0
  726. package/dist/core/morning/orchestrator.js.map +1 -0
  727. package/dist/core/morning/parent-audit-emitter.d.ts +82 -0
  728. package/dist/core/morning/parent-audit-emitter.d.ts.map +1 -0
  729. package/dist/core/morning/parent-audit-emitter.js +120 -0
  730. package/dist/core/morning/parent-audit-emitter.js.map +1 -0
  731. package/dist/core/morning/roadmap-skeleton-builder.d.ts +159 -0
  732. package/dist/core/morning/roadmap-skeleton-builder.d.ts.map +1 -0
  733. package/dist/core/morning/roadmap-skeleton-builder.js +338 -0
  734. package/dist/core/morning/roadmap-skeleton-builder.js.map +1 -0
  735. package/dist/core/output-language-policy.js +1 -1
  736. package/dist/core/output-language-policy.js.map +1 -1
  737. package/dist/core/policy-files.d.ts +19 -2
  738. package/dist/core/policy-files.d.ts.map +1 -1
  739. package/dist/core/policy-files.js +65 -7
  740. package/dist/core/policy-files.js.map +1 -1
  741. package/dist/core/pre-pass-freshness.d.ts +28 -0
  742. package/dist/core/pre-pass-freshness.d.ts.map +1 -0
  743. package/dist/core/pre-pass-freshness.js +10 -0
  744. package/dist/core/pre-pass-freshness.js.map +1 -0
  745. package/dist/core/previous-week-digest.d.ts +130 -0
  746. package/dist/core/previous-week-digest.d.ts.map +1 -0
  747. package/dist/core/previous-week-digest.js +257 -0
  748. package/dist/core/previous-week-digest.js.map +1 -0
  749. package/dist/core/prompts.js +3 -3
  750. package/dist/core/prompts.js.map +1 -1
  751. package/dist/core/quiet-hours-sync.d.ts.map +1 -1
  752. package/dist/core/quiet-hours-sync.js +7 -0
  753. package/dist/core/quiet-hours-sync.js.map +1 -1
  754. package/dist/core/recurrence.d.ts +13 -0
  755. package/dist/core/recurrence.d.ts.map +1 -1
  756. package/dist/core/recurrence.js +108 -13
  757. package/dist/core/recurrence.js.map +1 -1
  758. package/dist/core/release-assets.d.ts +21 -1
  759. package/dist/core/release-assets.d.ts.map +1 -1
  760. package/dist/core/release-assets.js +58 -3
  761. package/dist/core/release-assets.js.map +1 -1
  762. package/dist/core/repository-management-docs.d.ts.map +1 -1
  763. package/dist/core/repository-management-docs.js +14 -4
  764. package/dist/core/repository-management-docs.js.map +1 -1
  765. package/dist/core/review-context.d.ts.map +1 -1
  766. package/dist/core/review-context.js +29 -1
  767. package/dist/core/review-context.js.map +1 -1
  768. package/dist/core/roadmap-maintenance.d.ts +213 -0
  769. package/dist/core/roadmap-maintenance.d.ts.map +1 -0
  770. package/dist/core/roadmap-maintenance.js +706 -0
  771. package/dist/core/roadmap-maintenance.js.map +1 -0
  772. package/dist/core/roadmap-validate.d.ts +5 -0
  773. package/dist/core/roadmap-validate.d.ts.map +1 -1
  774. package/dist/core/roadmap-validate.js +6 -69
  775. package/dist/core/roadmap-validate.js.map +1 -1
  776. package/dist/core/routine-acquisition-plan.d.ts +43 -7
  777. package/dist/core/routine-acquisition-plan.d.ts.map +1 -1
  778. package/dist/core/routine-acquisition-plan.js +99 -8
  779. package/dist/core/routine-acquisition-plan.js.map +1 -1
  780. package/dist/core/routine-fetch-window-retry.d.ts +41 -2
  781. package/dist/core/routine-fetch-window-retry.d.ts.map +1 -1
  782. package/dist/core/routine-fetch-window-retry.js +91 -8
  783. package/dist/core/routine-fetch-window-retry.js.map +1 -1
  784. package/dist/core/routine-fetch-window-runner.d.ts +55 -21
  785. package/dist/core/routine-fetch-window-runner.d.ts.map +1 -1
  786. package/dist/core/routine-fetch-window-runner.js +258 -35
  787. package/dist/core/routine-fetch-window-runner.js.map +1 -1
  788. package/dist/core/routine-windows.d.ts +17 -13
  789. package/dist/core/routine-windows.d.ts.map +1 -1
  790. package/dist/core/routine-windows.js +78 -36
  791. package/dist/core/routine-windows.js.map +1 -1
  792. package/dist/core/scheduler.d.ts +121 -37
  793. package/dist/core/scheduler.d.ts.map +1 -1
  794. package/dist/core/scheduler.js +359 -80
  795. package/dist/core/scheduler.js.map +1 -1
  796. package/dist/core/session-manager.d.ts +25 -6
  797. package/dist/core/session-manager.d.ts.map +1 -1
  798. package/dist/core/session-manager.js +32 -15
  799. package/dist/core/session-manager.js.map +1 -1
  800. package/dist/core/skeleton.d.ts.map +1 -1
  801. package/dist/core/skeleton.js +23 -23
  802. package/dist/core/skeleton.js.map +1 -1
  803. package/dist/core/skills-compiler.d.ts +275 -25
  804. package/dist/core/skills-compiler.d.ts.map +1 -1
  805. package/dist/core/skills-compiler.js +844 -205
  806. package/dist/core/skills-compiler.js.map +1 -1
  807. package/dist/core/skills-manifest.d.ts +104 -0
  808. package/dist/core/skills-manifest.d.ts.map +1 -1
  809. package/dist/core/skills-manifest.js +350 -39
  810. package/dist/core/skills-manifest.js.map +1 -1
  811. package/dist/core/wiki/git-precompile.d.ts +9 -0
  812. package/dist/core/wiki/git-precompile.d.ts.map +1 -1
  813. package/dist/core/wiki/git-precompile.js +7 -1
  814. package/dist/core/wiki/git-precompile.js.map +1 -1
  815. package/dist/core/workdir.d.ts +30 -1
  816. package/dist/core/workdir.d.ts.map +1 -1
  817. package/dist/core/workdir.js +140 -15
  818. package/dist/core/workdir.js.map +1 -1
  819. package/dist/db/entities-store.d.ts +5 -5
  820. package/dist/db/entities-store.js +5 -5
  821. package/dist/db/hourly-check-signals.d.ts.map +1 -1
  822. package/dist/db/hourly-check-signals.js +121 -35
  823. package/dist/db/hourly-check-signals.js.map +1 -1
  824. package/dist/db/observations.d.ts +1 -1
  825. package/dist/db/observations.js +1 -1
  826. package/dist/db/observations.js.map +1 -1
  827. package/dist/db/recurring-schedules.d.ts +32 -1
  828. package/dist/db/recurring-schedules.d.ts.map +1 -1
  829. package/dist/db/recurring-schedules.js +29 -10
  830. package/dist/db/recurring-schedules.js.map +1 -1
  831. package/dist/db/repositories-store.d.ts +2 -1
  832. package/dist/db/repositories-store.d.ts.map +1 -1
  833. package/dist/db/repositories-store.js +38 -3
  834. package/dist/db/repositories-store.js.map +1 -1
  835. package/dist/db/schema.d.ts.map +1 -1
  836. package/dist/db/schema.js +157 -51
  837. package/dist/db/schema.js.map +1 -1
  838. package/dist/db/wiki-store.d.ts.map +1 -1
  839. package/dist/db/wiki-store.js +3 -0
  840. package/dist/db/wiki-store.js.map +1 -1
  841. package/dist/index.js +308 -1480
  842. package/dist/index.js.map +1 -1
  843. package/dist/messaging/magic-phrase.d.ts +16 -0
  844. package/dist/messaging/magic-phrase.d.ts.map +1 -1
  845. package/dist/messaging/magic-phrase.js +53 -0
  846. package/dist/messaging/magic-phrase.js.map +1 -1
  847. package/dist/messaging/owner-channels.d.ts +24 -0
  848. package/dist/messaging/owner-channels.d.ts.map +1 -1
  849. package/dist/messaging/owner-channels.js +38 -0
  850. package/dist/messaging/owner-channels.js.map +1 -1
  851. package/dist/observers/calendar-poller.d.ts +2 -0
  852. package/dist/observers/calendar-poller.d.ts.map +1 -1
  853. package/dist/observers/calendar-poller.js +76 -54
  854. package/dist/observers/calendar-poller.js.map +1 -1
  855. package/dist/observers/delegated-sync-worker.d.ts +62 -0
  856. package/dist/observers/delegated-sync-worker.d.ts.map +1 -1
  857. package/dist/observers/delegated-sync-worker.js +128 -1
  858. package/dist/observers/delegated-sync-worker.js.map +1 -1
  859. package/dist/observers/git-watcher.d.ts +22 -0
  860. package/dist/observers/git-watcher.d.ts.map +1 -1
  861. package/dist/observers/git-watcher.js +31 -7
  862. package/dist/observers/git-watcher.js.map +1 -1
  863. package/dist/observers/imminent-event-scheduler.d.ts +2 -0
  864. package/dist/observers/imminent-event-scheduler.d.ts.map +1 -1
  865. package/dist/observers/imminent-event-scheduler.js +29 -0
  866. package/dist/observers/imminent-event-scheduler.js.map +1 -1
  867. package/dist/observers/notion-poller.d.ts +2 -0
  868. package/dist/observers/notion-poller.d.ts.map +1 -1
  869. package/dist/observers/notion-poller.js +44 -6
  870. package/dist/observers/notion-poller.js.map +1 -1
  871. package/dist/observers/poll-guard.d.ts +63 -0
  872. package/dist/observers/poll-guard.d.ts.map +1 -0
  873. package/dist/observers/poll-guard.js +89 -0
  874. package/dist/observers/poll-guard.js.map +1 -0
  875. package/dist/safety/absolute-block-audit.d.ts +17 -0
  876. package/dist/safety/absolute-block-audit.d.ts.map +1 -1
  877. package/dist/safety/absolute-block-audit.js +28 -2
  878. package/dist/safety/absolute-block-audit.js.map +1 -1
  879. package/dist/safety/agent-write-tracker.d.ts +42 -1
  880. package/dist/safety/agent-write-tracker.d.ts.map +1 -1
  881. package/dist/safety/agent-write-tracker.js +81 -1
  882. package/dist/safety/agent-write-tracker.js.map +1 -1
  883. package/dist/safety/always-disallowed.d.ts +34 -0
  884. package/dist/safety/always-disallowed.d.ts.map +1 -1
  885. package/dist/safety/always-disallowed.js +114 -7
  886. package/dist/safety/always-disallowed.js.map +1 -1
  887. package/dist/safety/audit.d.ts +20 -0
  888. package/dist/safety/audit.d.ts.map +1 -1
  889. package/dist/safety/audit.js +126 -0
  890. package/dist/safety/audit.js.map +1 -1
  891. package/dist/safety/risk-classifier.d.ts +17 -1
  892. package/dist/safety/risk-classifier.d.ts.map +1 -1
  893. package/dist/safety/risk-classifier.js +75 -7
  894. package/dist/safety/risk-classifier.js.map +1 -1
  895. package/dist/safety/subprocess-block-scanner.d.ts +89 -0
  896. package/dist/safety/subprocess-block-scanner.d.ts.map +1 -0
  897. package/dist/safety/subprocess-block-scanner.js +177 -0
  898. package/dist/safety/subprocess-block-scanner.js.map +1 -0
  899. package/dist/scheduler/hourly-check-gate.d.ts +23 -9
  900. package/dist/scheduler/hourly-check-gate.d.ts.map +1 -1
  901. package/dist/scheduler/hourly-check-gate.js +11 -6
  902. package/dist/scheduler/hourly-check-gate.js.map +1 -1
  903. package/dist/secrets/backend-api-key-env.d.ts.map +1 -1
  904. package/dist/secrets/backend-api-key-env.js +1 -0
  905. package/dist/secrets/backend-api-key-env.js.map +1 -1
  906. package/dist/services/delegated-backend-invoker.d.ts.map +1 -1
  907. package/dist/services/delegated-backend-invoker.js +8 -1
  908. package/dist/services/delegated-backend-invoker.js.map +1 -1
  909. package/dist/services/delegated-invoker-audit.d.ts.map +1 -1
  910. package/dist/services/delegated-invoker-audit.js +5 -1
  911. package/dist/services/delegated-invoker-audit.js.map +1 -1
  912. package/dist/services/delegated-proxy-config.d.ts +3 -2
  913. package/dist/services/delegated-proxy-config.d.ts.map +1 -1
  914. package/dist/services/delegated-proxy-config.js.map +1 -1
  915. package/dist/services/integrations/extract-write-item-id.d.ts +5 -2
  916. package/dist/services/integrations/extract-write-item-id.d.ts.map +1 -1
  917. package/dist/services/integrations/extract-write-item-id.js.map +1 -1
  918. package/dist/services/mcp/generators/index.d.ts +1 -0
  919. package/dist/services/mcp/generators/index.d.ts.map +1 -1
  920. package/dist/services/mcp/generators/index.js +3 -0
  921. package/dist/services/mcp/generators/index.js.map +1 -1
  922. package/dist/services/mcp/sdk-observations-server.d.ts +60 -0
  923. package/dist/services/mcp/sdk-observations-server.d.ts.map +1 -0
  924. package/dist/services/mcp/sdk-observations-server.js +161 -0
  925. package/dist/services/mcp/sdk-observations-server.js.map +1 -0
  926. package/dist/services/mcp/session-materializer.d.ts.map +1 -1
  927. package/dist/services/mcp/session-materializer.js +13 -9
  928. package/dist/services/mcp/session-materializer.js.map +1 -1
  929. package/dist/services/mcp/types.d.ts +1 -0
  930. package/dist/services/mcp/types.d.ts.map +1 -1
  931. package/dist/services/notion.d.ts +19 -1
  932. package/dist/services/notion.d.ts.map +1 -1
  933. package/dist/services/notion.js +41 -2
  934. package/dist/services/notion.js.map +1 -1
  935. package/dist/services/observations-batch.d.ts +100 -0
  936. package/dist/services/observations-batch.d.ts.map +1 -0
  937. package/dist/services/observations-batch.js +258 -0
  938. package/dist/services/observations-batch.js.map +1 -0
  939. package/dist/services/voice/transcriber.d.ts +23 -0
  940. package/dist/services/voice/transcriber.d.ts.map +1 -1
  941. package/dist/services/voice/transcriber.js +55 -0
  942. package/dist/services/voice/transcriber.js.map +1 -1
  943. package/dist/settings/runtime-settings.d.ts +9 -6
  944. package/dist/settings/runtime-settings.d.ts.map +1 -1
  945. package/dist/settings/runtime-settings.js +50 -17
  946. package/dist/settings/runtime-settings.js.map +1 -1
  947. package/package.json +3 -2
  948. package/dist/api/delegated-proxy-helper.d.ts +0 -33
  949. package/dist/api/delegated-proxy-helper.d.ts.map +0 -1
  950. package/dist/api/delegated-proxy-helper.js +0 -54
  951. package/dist/api/delegated-proxy-helper.js.map +0 -1
  952. package/dist/core/roadmap-merge.d.ts +0 -7
  953. package/dist/core/roadmap-merge.d.ts.map +0 -1
  954. package/dist/core/roadmap-merge.js +0 -187
  955. package/dist/core/roadmap-merge.js.map +0 -1
  956. package/dist/db/test-schemas.d.ts +0 -23
  957. package/dist/db/test-schemas.d.ts.map +0 -1
  958. package/dist/db/test-schemas.js +0 -111
  959. package/dist/db/test-schemas.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import { homedir } from "node:os";
3
3
  import { join } from "node:path";
4
- import { INTEGRATION_DESCRIPTORS, INTEGRATION_KEYS, isAutonomousProcessKey, isPlausibleOpenAiApiKey, matchRunAllowedToolPattern, } from "@aitne/shared";
4
+ import { INTEGRATION_DESCRIPTORS, INTEGRATION_KEYS, isAutonomousProcessKey, isMessageEvent, isPlausibleOpenAiApiKey, matchRunAllowedToolPattern, } from "@aitne/shared";
5
5
  import { getContextDir } from "../../config.js";
6
6
  import { cleanupSessionWorkdir, createSessionWorkdir } from "../workdir.js";
7
7
  import { BackendDecisiveFailure, BackendQuotaError, DelegatedProxyTimeoutError, classifyAbortReason, } from "../agent-core.js";
@@ -12,8 +12,11 @@ import { materializeMcpForSession } from "../../services/mcp/session-materialize
12
12
  import { parseMcpToolName } from "../../services/mcp/risk.js";
13
13
  import { logMcpToolCall } from "../../services/mcp/tool-audit.js";
14
14
  import { buildDaemonApiCliEnv } from "../daemon-api-cli.js";
15
+ import { noteNativeSkillToolIfPresent, probeCliNativeSkillSubcommand, } from "./native-skill-discovery-probe.js";
15
16
  import { createOutputCapturePath, CliPathCache, parseJsonLine, readFileIfExists, removeFileIfExists, runLineCommand, } from "./cli-utils.js";
16
17
  import { probeApiKeyServerSide } from "./api-key-probe.js";
18
+ import { extractGenericQuotaResetHint } from "./quota-reset-hints.js";
19
+ import { auditStreamObservation, extractCodexShellCall, } from "../../safety/subprocess-block-scanner.js";
17
20
  import { extractSilentApiErrors, logSilentApiErrors, } from "./silent-api-error-detector.js";
18
21
  import { estimateTextInputTokens, findRegisteredModel, getModelsForBackend, latestLiteFor, } from "./model-registry.js";
19
22
  import { PriceFetcher } from "./price-fetcher.js";
@@ -26,6 +29,23 @@ const EMPTY_USAGE = {
26
29
  cacheCreationInputTokens: 0,
27
30
  cacheReadInputTokens: 0,
28
31
  };
32
+ /**
33
+ * Per-event stream-idle threshold for reactive `runTurn` execution
34
+ * (DMs, routines, scheduled tasks). Distinct from the delegated-path
35
+ * `DELEGATED_PROXY_DEFAULTS.idleTimeoutMsByBackend.codex` (60s) because
36
+ * reactive turns can include longer silences during legitimate work —
37
+ * extended thinking, MCP cold-starts, server-side tools (`web_search`,
38
+ * file reads). The threshold catches a fully hung CLI subprocess (zero
39
+ * stream events) well before `executeTimeoutMinutes` (default 30 min)
40
+ * fires; healthy turns rarely go 5 min silent end-to-end.
41
+ *
42
+ * Audit 2026-05-17: the delegated path already had this guard (see the
43
+ * `runDelegatedTool` wiring lower in this file); the reactive path was
44
+ * unprotected and a single hung subprocess could pin a session for the
45
+ * full 30-min wall-clock, blocking morning-routine / hourly-check
46
+ * dispatch downstream.
47
+ */
48
+ const REACTIVE_IDLE_TIMEOUT_MS = 5 * 60 * 1000;
29
49
  // Probe prompt is derived from `INTEGRATION_DESCRIPTORS.backendConnectors.codex`
30
50
  // so adding a new delegated integration (Slack, GitHub, …) requires only the
31
51
  // registry update. The line-based filter below (`l.startsWith("mcp__")`) is
@@ -87,6 +107,10 @@ export class CodexCore {
87
107
  backendId = "codex";
88
108
  // Lazily re-resolved with a 60 s TTL — see ClaudeCodeCore for rationale (§9.4).
89
109
  cliPathCache;
110
+ /** Legacy shared read token injected into the Codex subprocess env. */
111
+ readToken;
112
+ /** Scoped token manager preferred over the legacy shared read token. */
113
+ readTokenManager;
90
114
  get cliPath() {
91
115
  return this.cliPathCache.get();
92
116
  }
@@ -95,6 +119,20 @@ export class CodexCore {
95
119
  this.priceFetcher = priceFetcher;
96
120
  this.cliPathCache = new CliPathCache("codex");
97
121
  }
122
+ /** Set the per-daemon-boot read token for subprocess-local daemon API auth. */
123
+ setReadToken(token) {
124
+ this.readToken = token;
125
+ }
126
+ setReadTokenManager(manager) {
127
+ this.readTokenManager = manager;
128
+ }
129
+ /** Resolve the env-injected read token: per-scope token if a manager is wired,
130
+ * otherwise the legacy shared token. Returns `undefined` when neither is set
131
+ * (production wires both at startup via index.ts; tests typically wire neither).
132
+ */
133
+ issueReadToken(scope) {
134
+ return this.readTokenManager?.issue(scope) ?? this.readToken;
135
+ }
98
136
  mcpContext;
99
137
  setMcpContext(context) {
100
138
  this.mcpContext = context;
@@ -157,6 +195,7 @@ export class CodexCore {
157
195
  sessionDbId: params.sessionDbId,
158
196
  eventCorrelationId: params.event.correlationId,
159
197
  webSearchEnabled: params.webSearchEnabled ?? false,
198
+ ...(isMessageEvent(params.event) ? { messageText: params.event.content } : {}),
160
199
  }, streamCallbacks);
161
200
  }
162
201
  async executeResume(params, streamCallbacks) {
@@ -173,6 +212,9 @@ export class CodexCore {
173
212
  sessionDbId: params.sessionDbId,
174
213
  eventCorrelationId: params.eventCorrelationId,
175
214
  webSearchEnabled: params.webSearchEnabled ?? false,
215
+ // Resume turns carry the user's reply text in `params.message`;
216
+ // forward it as the predicate's messageText signal.
217
+ messageText: params.message,
176
218
  }, streamCallbacks);
177
219
  }
178
220
  async summarize(conversationText) {
@@ -316,12 +358,16 @@ export class CodexCore {
316
358
  prompt,
317
359
  ];
318
360
  const lines = [];
361
+ const daemonReadToken = this.issueReadToken(sessionDir);
319
362
  try {
320
363
  const result = await runLineCommand({
321
364
  command: this.cliPath,
322
365
  args,
323
366
  cwd: sessionDir,
324
- env: buildDaemonApiCliEnv(sessionDir, this.config.apiPort, { sessionBackend: "codex" }),
367
+ env: buildDaemonApiCliEnv(sessionDir, this.config.apiPort, {
368
+ ...(daemonReadToken ? { readToken: daemonReadToken } : {}),
369
+ sessionBackend: "codex",
370
+ }),
325
371
  timeoutMs: 60_000,
326
372
  onStdoutLine: (line) => {
327
373
  const event = parseJsonLine(line);
@@ -345,9 +391,21 @@ export class CodexCore {
345
391
  .filter((l) => l.startsWith("mcp__"));
346
392
  const deduped = Array.from(new Set(tools));
347
393
  logger.info({ toolCount: deduped.length }, "Live probe collected tool manifest via codex exec");
394
+ // docs/design/appendices/skills-unification.md Phase 1 item 13 — forward-compat
395
+ // signals. Two probes run side by side:
396
+ // - Name-pattern scan over `deduped` (mcp__-filtered). Cheap
397
+ // defence-in-depth; will not fire on a non-MCP native surface
398
+ // but is harmless when present.
399
+ // - `codex --help` scan for a top-level `skill`/`skills`
400
+ // subcommand. This is the ground-truth detector — Codex's
401
+ // hypothetical future form (`codex skill <command>`) trips
402
+ // here regardless of how its tool inventory is shaped.
403
+ noteNativeSkillToolIfPresent("codex", deduped);
404
+ void probeCliNativeSkillSubcommand(this.cliPath, "codex");
348
405
  return deduped;
349
406
  }
350
407
  finally {
408
+ this.readTokenManager?.revoke(sessionDir);
351
409
  removeFileIfExists(outputPath);
352
410
  cleanupSessionWorkdir(sessionDir);
353
411
  }
@@ -372,14 +430,52 @@ export class CodexCore {
372
430
  backendId: this.backendId,
373
431
  processKey: params.processKey,
374
432
  character: this.config.character,
433
+ contextDir: getContextDir(this.config),
434
+ // docs/design/appendices/skills-unification.md Phase 4 — feed the conditional
435
+ // manifest predicates. `db` is the same handle threaded through
436
+ // `setMcpContext`; `messageText` is the inbound DM text (resume
437
+ // turns send the user's reply, fresh executes send the original
438
+ // event content). Both fields are optional — a `summarize` /
439
+ // probe path without either still resolves to the conservative
440
+ // include branch.
441
+ ...(this.mcpContext?.db ? { db: this.mcpContext.db } : {}),
442
+ ...(typeof params.messageText === "string" ? { messageText: params.messageText } : {}),
375
443
  ...(params.wikiWorkspaceName ? { wikiWorkspaceName: params.wikiWorkspaceName } : {}),
376
444
  });
377
445
  const ownsSessionDir = !params.sessionDir;
378
446
  const outputPath = createOutputCapturePath(sessionDir, "codex-last-message");
447
+ const daemonReadToken = this.issueReadToken(sessionDir);
379
448
  const mcp = await this.materializeMcp(sessionDir, params.processKey);
380
449
  logger.info({ eventType: params.eventType, model: params.modelId, promptLen: params.prompt.length, mcpServers: mcp.servers.map((s) => s.id) }, "Codex execute started");
450
+ // Stream text deltas live as they arrive — mirrors ClaudeCodeCore so
451
+ // owner-facing surfaces (dashboard chat, owner DM) get the same
452
+ // incremental-output UX regardless of which backend serves the turn.
453
+ // The post-completion `assertWithinMaxBudget` still enforces the budget
454
+ // cap; an exceeded turn surfaces as `BackendQuotaError` AFTER text has
455
+ // streamed, exactly as Claude behaves. The earlier "defer until budget
456
+ // check" guard buffered the entire turn — which made interactive flows
457
+ // like `setup.initial` look frozen for minutes when the model finally
458
+ // returned a single multi-block response in one chunk.
381
459
  let streamed = false;
382
- const deferStreamingUntilBudgetCheck = params.maxBudgetUsd !== undefined;
460
+ // Reactive idle watchdog (audit 2026-05-17 C1). Declared outside the
461
+ // outer try so the outer finally below can always call stop() — even
462
+ // if a setup line between here and runLineCommand throws. Mirrors the
463
+ // delegated-path wiring in `runDelegatedTool` (~line 1350): each
464
+ // arrived stream event resets the timer, and when the gap exceeds
465
+ // REACTIVE_IDLE_TIMEOUT_MS the aborter fires — runLineCommand reaps
466
+ // the subprocess via its existing kill-tree path. Distinct from
467
+ // `runResult.timedOut` so the post-await classifier surfaces idle
468
+ // hangs with a distinct message.
469
+ let idleTimedOut = false;
470
+ const idleAborter = new AbortController();
471
+ const idleWatchdog = new IdleWatchdog({
472
+ idleTimeoutMs: REACTIVE_IDLE_TIMEOUT_MS,
473
+ onTimeout: (idleMs) => {
474
+ idleTimedOut = true;
475
+ logger.warn({ idleMs, idleTimeoutMs: REACTIVE_IDLE_TIMEOUT_MS, eventType: params.eventType }, "codex reactive idle watchdog tripped — aborting");
476
+ idleAborter.abort(new Error(`codex reactive stream idle for ${idleMs}ms (limit ${REACTIVE_IDLE_TIMEOUT_MS}ms)`));
477
+ },
478
+ });
383
479
  try {
384
480
  let sessionId = params.resumeSessionId ?? null;
385
481
  let actualModelId = params.modelId;
@@ -394,12 +490,29 @@ export class CodexCore {
394
490
  // the run. Collecting up front — rather than scanning per-line — keeps
395
491
  // each occurrence logged exactly once across multi-line payloads.
396
492
  const apiOutputBuffer = [];
493
+ // Per-turn set of item IDs whose `item.started` / `item.completed`
494
+ // declared a reasoning type. Used to filter follow-on `item.updated`
495
+ // deltas, which usually omit the type and carry only `id + delta`
496
+ // — `shouldDropAsReasoning` consults this on every event.
497
+ const reasoningItemIds = new Set();
498
+ // Per-turn flag tripped whenever any event is dropped by the
499
+ // reasoning gate. The `--output-last-message` file written by
500
+ // codex CLI is NOT covered by the stream-level filter — when
501
+ // reasoning was observed but the stream produced no final
502
+ // assistant text, the file may itself contain a reasoning
503
+ // summary (codex CLI's GPT-5 behavior under tool-only turns
504
+ // and certain Responses-API relay shapes). Consulting this
505
+ // flag below makes the file-fallback path refuse such content
506
+ // instead of writing it verbatim to the chat bubble / DB.
507
+ let observedReasoning = false;
508
+ idleWatchdog.start();
397
509
  const runResult = await runLineCommand({
398
510
  command: "codex",
399
511
  args: this.buildArgs(params, outputPath),
400
512
  cwd: sessionDir,
401
513
  env: {
402
514
  ...buildDaemonApiCliEnv(sessionDir, this.config.apiPort, {
515
+ ...(daemonReadToken ? { readToken: daemonReadToken } : {}),
403
516
  sessionBackend: "codex",
404
517
  sessionId: params.sessionDbId,
405
518
  eventCorrelationId: params.eventCorrelationId,
@@ -408,7 +521,9 @@ export class CodexCore {
408
521
  ...(params.turnToken ? { PA_TURN_TOKEN: params.turnToken } : {}),
409
522
  },
410
523
  timeoutMs: this.config.executeTimeoutMinutes * 60 * 1000,
524
+ abortSignal: idleAborter.signal,
411
525
  onStdoutLine: (line) => {
526
+ idleWatchdog.beat();
412
527
  const event = parseJsonLine(line);
413
528
  if (!event?.type) {
414
529
  return;
@@ -439,7 +554,45 @@ export class CodexCore {
439
554
  }
440
555
  return;
441
556
  }
557
+ // Reasoning filter — must run BEFORE every text-bearing path
558
+ // below (`extractCodexText`, `collectCodexItemText`, the tool
559
+ // / shell-call audits). Two steps:
560
+ //
561
+ // 1. Record reasoning item IDs from any event that declares
562
+ // the item type (`item.started` and `item.completed` are
563
+ // the canonical carriers; `item.updated` typically omits
564
+ // it — that's why ID tracking is necessary, not optional).
565
+ // 2. Drop the event entirely when it is reasoning by any
566
+ // signal: outer event type, declared item type, OR an
567
+ // `item.updated` delta whose `item.id` was previously
568
+ // recorded as reasoning.
569
+ //
570
+ // The two-step ordering matters: a single `item.completed`
571
+ // with `{id, type: "reasoning", text: "..."}` must first
572
+ // register the ID (so any straggling deltas for the same ID
573
+ // are still filtered) and THEN be dropped.
574
+ rememberReasoningItem(event, reasoningItemIds);
575
+ if (shouldDropAsReasoning(event, reasoningItemIds)) {
576
+ observedReasoning = true;
577
+ return;
578
+ }
442
579
  collectCodexItemText(event, apiOutputBuffer);
580
+ // EXECUTION-MODE-DESIGN.md §6.3 — stream-side absolute-block
581
+ // observability. Codex has no PreToolUse hook, so we classify
582
+ // each shell-call item the moment it surfaces and write a
583
+ // `blocked_absolute` audit row with `result='partial'` on a hit.
584
+ // The actual rejection (if any) happens in the workspace-write
585
+ // sandbox out-of-band; the row tells operators the agent
586
+ // *attempted* an absolute-block-listed pattern.
587
+ const codexShellCall = extractCodexShellCall(event.item);
588
+ if (codexShellCall) {
589
+ auditStreamObservation(codexShellCall, {
590
+ db: this.mcpContext?.db,
591
+ backend: this.backendId,
592
+ mode: this.config.codexExecutionPermissionMode,
593
+ sessionId: params.sessionDbId,
594
+ });
595
+ }
443
596
  // B-003 Phase 4.4 — persist MCP tool call to `mcp_tool_calls`.
444
597
  const mcpCall = extractMcpToolCall(event);
445
598
  if (mcpCall) {
@@ -468,12 +621,11 @@ export class CodexCore {
468
621
  return;
469
622
  }
470
623
  outputChunks.push(delta);
471
- if (!deferStreamingUntilBudgetCheck) {
472
- streamCallbacks?.onText?.(delta);
473
- streamed = true;
474
- }
624
+ streamCallbacks?.onText?.(delta);
625
+ streamed = true;
475
626
  },
476
627
  onStderrLine: (line) => {
628
+ idleWatchdog.beat();
477
629
  apiOutputBuffer.push(line);
478
630
  if (isLikelyCodexFailure(line)) {
479
631
  lastError = line.trim();
@@ -488,15 +640,61 @@ export class CodexCore {
488
640
  eventType: params.eventType,
489
641
  });
490
642
  }
643
+ // Order matters: idle-trip is checked before wall-clock timeout so
644
+ // the post-await classifier surfaces the precise reason. The
645
+ // idle-aborter trips runResult.timedOut=false (an external abort
646
+ // is reported via non-zero exit per cli-utils.ts contract), but
647
+ // we still throw a `timeout` failure here because that matches
648
+ // the dispatcher's retry semantics.
649
+ if (idleTimedOut) {
650
+ const err = new BackendDecisiveFailure(this.backendId, "timeout", new Error(`Codex reactive stream went idle for ${REACTIVE_IDLE_TIMEOUT_MS}ms (no events from CLI subprocess)`));
651
+ logger.error({ err, eventType: params.eventType, model: params.modelId, durationMs: Date.now() - startMs }, "Codex execute idle-timed-out");
652
+ throw err;
653
+ }
491
654
  if (runResult.timedOut) {
492
655
  const err = new BackendDecisiveFailure(this.backendId, "timeout", new Error(`Codex execution exceeded timeout of ${this.config.executeTimeoutMinutes} minutes`));
493
656
  logger.error({ err, eventType: params.eventType, model: params.modelId, durationMs: Date.now() - startMs }, "Codex execute timed out");
494
657
  throw err;
495
658
  }
496
659
  const capturedOutput = readFileIfExists(outputPath);
497
- const outputSource = capturedOutput && capturedOutput.trim().length > 0
498
- ? capturedOutput
499
- : outputChunks.join("");
660
+ // File-vs-stream precedence minimal change from the original.
661
+ //
662
+ // Original semantics (preserved): the `--output-last-message`
663
+ // file is the authoritative final assistant text; the stream
664
+ // chunks are the fallback. Codex CLI writes the file at turn
665
+ // close after assembling the full agent_message, so it is more
666
+ // resilient than chunk replay against mid-stream truncation or
667
+ // transport hiccups.
668
+ //
669
+ // Safety amendment (new): when reasoning items appeared on the
670
+ // wire during the turn, the file is untrustworthy. Codex's
671
+ // GPT-5 path can write a reasoning summary to the same file
672
+ // when no agent_message item was produced, and the
673
+ // stream-level `shouldDropAsReasoning` gate cannot see that
674
+ // path. Suppress the file in that case and fall back to the
675
+ // (already filtered) stream chunks — which means an empty
676
+ // bubble for reasoning-only turns, but never reasoning
677
+ // narration surfacing as the assistant message.
678
+ const streamJoined = outputChunks.join("");
679
+ let outputSource;
680
+ if (capturedOutput !== null
681
+ && capturedOutput.trim().length > 0
682
+ && !observedReasoning) {
683
+ outputSource = capturedOutput;
684
+ }
685
+ else {
686
+ if (observedReasoning
687
+ && capturedOutput !== null
688
+ && capturedOutput.trim().length > 0) {
689
+ logger.warn({
690
+ eventType: params.eventType,
691
+ sessionId,
692
+ fileBytes: capturedOutput.trim().length,
693
+ streamBytes: streamJoined.trim().length,
694
+ }, "Codex --output-last-message suppressed: reasoning was observed during the turn; the file may carry a reasoning summary instead of an agent_message. Falling back to filtered stream chunks.");
695
+ }
696
+ outputSource = streamJoined;
697
+ }
500
698
  const output = outputSource.trim();
501
699
  const combinedFailure = lastError
502
700
  ?? firstFailureLine(runResult.stderrLines)
@@ -513,7 +711,12 @@ export class CodexCore {
513
711
  usage,
514
712
  fallbackModel: findRegisteredModel(this.backendId, actualModelId),
515
713
  });
516
- this.assertWithinMaxBudget(costUsd, params.maxBudgetUsd, actualModelId);
714
+ this.assertWithinMaxBudget(costUsd, params.maxBudgetUsd, actualModelId, {
715
+ usage,
716
+ costSource,
717
+ numTurns: numTurns || 1,
718
+ durationMs: Date.now() - startMs,
719
+ });
517
720
  if (output && !streamed) {
518
721
  streamCallbacks?.onText?.(output);
519
722
  }
@@ -548,9 +751,17 @@ export class CodexCore {
548
751
  };
549
752
  }
550
753
  finally {
754
+ // Stop the reactive idle watchdog first — idempotent if start()
755
+ // was never reached, but always safe.
756
+ idleWatchdog.stop();
551
757
  removeFileIfExists(outputPath);
552
758
  streamCallbacks?.onEnd?.();
553
759
  if (ownsSessionDir) {
760
+ // Mirror ClaudeCodeCore: only revoke when we own the temp dir.
761
+ // Caller-owned (persistent) dirs survive across turns and reuse the
762
+ // same scope, so revoking here would invalidate a token still in use
763
+ // by a subsequent resume on the same session.
764
+ this.readTokenManager?.revoke(sessionDir);
554
765
  cleanupSessionWorkdir(sessionDir);
555
766
  }
556
767
  }
@@ -634,8 +845,9 @@ export class CodexCore {
634
845
  // (per-integration)` block in AGENTS.md (rendered by
635
846
  // `skills-compiler.buildSameBackendDenyBlock`). Cross-backend
636
847
  // delegation provides hard enforcement at the
637
- // `/api/integrations/:key/invoke` chokepoint, so users requiring
638
- // strict deny should pick a non-Codex DM backend.
848
+ // `/api/integrations/:key/exec` task-mode chokepoint (the legacy
849
+ // `/invoke` RPC was retired 2026-05-01), so users requiring strict
850
+ // deny should pick a non-Codex DM backend.
639
851
  //
640
852
  const sandboxArgs = allowMode
641
853
  ? ["--dangerously-bypass-approvals-and-sandbox"]
@@ -712,7 +924,12 @@ export class CodexCore {
712
924
  return new BackendQuotaError(this.backendId, "max_budget_usd", null, message);
713
925
  }
714
926
  if (/rate limit|usage limit|quota/i.test(message)) {
715
- return new BackendQuotaError(this.backendId, "rate_limited", null, message);
927
+ // Best-effort reset-time extraction so the dashboard can surface
928
+ // "quota resets at HH:MM (TZ)" instead of a bare "rate_limited" tag.
929
+ // OpenAI rate-limit messages typically carry "try again in Xm" or
930
+ // an ISO retry-after; the helper falls through to null when neither
931
+ // pattern matches, preserving the original behaviour.
932
+ return new BackendQuotaError(this.backendId, "rate_limited", extractGenericQuotaResetHint(message), message);
716
933
  }
717
934
  if (/unauthorized|forbidden|api key|login/i.test(message)) {
718
935
  return new BackendDecisiveFailure(this.backendId, "auth", new Error(message));
@@ -722,11 +939,20 @@ export class CodexCore {
722
939
  }
723
940
  return new BackendDecisiveFailure(this.backendId, "other_non_retryable", new Error(message));
724
941
  }
725
- assertWithinMaxBudget(costUsd, maxBudgetUsd, modelId) {
942
+ assertWithinMaxBudget(costUsd, maxBudgetUsd, modelId,
943
+ /**
944
+ * Spend metadata for the just-completed turn. Codex enforces
945
+ * `max_budget_usd` post-hoc — by the time we reject here OpenAI has
946
+ * already consumed tokens — so we hand the actual usage to the
947
+ * BackendQuotaError so the dispatcher's error path can write a
948
+ * `result='failed'` agent_actions row with `cost_usd` populated.
949
+ * Without this the dashboard silently misses budget-rejected spend.
950
+ */
951
+ spend) {
726
952
  if (maxBudgetUsd === undefined || costUsd <= maxBudgetUsd) {
727
953
  return;
728
954
  }
729
- 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}.`);
955
+ 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}.`, spend ? { ...spend, modelId, costUsd } : null);
730
956
  }
731
957
  assertPromptWithinMaxBudget(prompt, maxBudgetUsd, modelId) {
732
958
  if (maxBudgetUsd === undefined) {
@@ -830,6 +1056,16 @@ export class CodexCore {
830
1056
  let lastError = null;
831
1057
  let sawTurnCompleted = false;
832
1058
  const stderrBuffer = [];
1059
+ // Reasoning-gate state — same shape as the main executeTurn path.
1060
+ // The delegated proxy expects exactly one tool result; if codex
1061
+ // emitted reasoning summaries during the turn AND structured
1062
+ // pairing yielded nothing, the `--output-last-message` fallback
1063
+ // below would otherwise hand the reasoning text to
1064
+ // `tryParseToolResult` and surface it as a fake "tool result"
1065
+ // string. Tracking reasoning observation lets that fallback
1066
+ // refuse such content.
1067
+ const reasoningItemIds = new Set();
1068
+ let observedReasoning = false;
833
1069
  // Local aborter bridged from the caller's signal so we can also
834
1070
  // trigger an early abort on wrong-tool detection. See gemini-cli-core
835
1071
  // for the full rationale: this caps wrong_tool failures at ~5s
@@ -864,13 +1100,17 @@ export class CodexCore {
864
1100
  proxyAborter.abort(new DelegatedProxyTimeoutError(`codex stream idle for ${idleMs}ms (limit ${idleTimeoutMs}ms)`));
865
1101
  },
866
1102
  });
1103
+ const daemonReadToken = this.issueReadToken(sessionDir);
867
1104
  try {
868
1105
  idleWatchdog.start();
869
1106
  const runResult = await runLineCommand({
870
1107
  command: this.cliPath,
871
1108
  args,
872
1109
  cwd: sessionDir,
873
- env: buildDaemonApiCliEnv(sessionDir, this.config.apiPort, { sessionBackend: "codex" }),
1110
+ env: buildDaemonApiCliEnv(sessionDir, this.config.apiPort, {
1111
+ ...(daemonReadToken ? { readToken: daemonReadToken } : {}),
1112
+ sessionBackend: "codex",
1113
+ }),
874
1114
  // Wall-clock is enforced by the invoker via abortSignal — we still
875
1115
  // pass a generous local timeout as a safety net (callers can
876
1116
  // disable it by setting their own abortSignal).
@@ -902,6 +1142,14 @@ export class CodexCore {
902
1142
  }
903
1143
  return;
904
1144
  }
1145
+ // Reasoning gate — must run before tool-call matching so a
1146
+ // reasoning item never accidentally feeds into the pairing
1147
+ // logic and never poisons the file fallback below.
1148
+ rememberReasoningItem(event, reasoningItemIds);
1149
+ if (shouldDropAsReasoning(event, reasoningItemIds)) {
1150
+ observedReasoning = true;
1151
+ return;
1152
+ }
905
1153
  // Match MCP tool calls by item.name / item.tool. We accept the
906
1154
  // first item that resolves to the requested tool name; any
907
1155
  // earlier item resolving to a different MCP tool flips the
@@ -980,9 +1228,18 @@ export class CodexCore {
980
1228
  // tool output (less reliable than structured matching, but a
981
1229
  // graceful degradation when pairing semantics drift across
982
1230
  // Codex versions).
983
- const lastMessage = readFileIfExists(outputPath);
984
- if (lastMessage && lastMessage.trim().length > 0) {
985
- capturedResultRaw = lastMessage.trim();
1231
+ //
1232
+ // Reasoning gate when reasoning was observed during the turn
1233
+ // the file may itself contain a reasoning summary (codex 0.121+
1234
+ // GPT-5 behavior). Surfacing it as a fake "tool result" would
1235
+ // poison the downstream `tryParseToolResult` walker. Skip the
1236
+ // fallback in that case and let the caller classify the run
1237
+ // as no-result.
1238
+ if (!observedReasoning) {
1239
+ const lastMessage = readFileIfExists(outputPath);
1240
+ if (lastMessage && lastMessage.trim().length > 0) {
1241
+ capturedResultRaw = lastMessage.trim();
1242
+ }
986
1243
  }
987
1244
  }
988
1245
  const cost = withDurationMs({
@@ -1107,6 +1364,10 @@ export class CodexCore {
1107
1364
  finally {
1108
1365
  idleWatchdog.stop();
1109
1366
  removeFileIfExists(outputPath);
1367
+ // Invoker owns sessionDir lifecycle, but the readToken scope is keyed
1368
+ // on the same path — revoke here so a leaked token cannot outlive the
1369
+ // delegated proxy run.
1370
+ this.readTokenManager?.revoke(sessionDir);
1110
1371
  if (abortSignal && !abortSignal.aborted) {
1111
1372
  abortSignal.removeEventListener("abort", callerAbortListener);
1112
1373
  }
@@ -1225,12 +1486,24 @@ export class CodexCore {
1225
1486
  let lastError = null;
1226
1487
  let sawTurnCompleted = false;
1227
1488
  const stderrBuffer = [];
1489
+ // Reasoning-gate state — mirrors executeTurn / runDelegatedTool.
1490
+ // Delegated tasks pull `rawAssistantText` from the file written by
1491
+ // `--output-last-message`; if reasoning was observed and that file
1492
+ // is the only text source, the dispatcher's structured-output
1493
+ // validator would receive reasoning narration in place of the
1494
+ // expected JSON envelope, leaking GPT-5's internal deliberation
1495
+ // into delegated-task traces and surfacing as a parse_error
1496
+ // wrapped around reasoning content.
1497
+ const reasoningItemIds = new Set();
1498
+ let observedReasoning = false;
1499
+ const daemonReadToken = this.issueReadToken(sessionDir);
1228
1500
  try {
1229
1501
  const runResult = await runLineCommand({
1230
1502
  command: this.cliPath,
1231
1503
  args,
1232
1504
  cwd: sessionDir,
1233
1505
  env: buildDaemonApiCliEnv(sessionDir, this.config.apiPort, {
1506
+ ...(daemonReadToken ? { readToken: daemonReadToken } : {}),
1234
1507
  sessionBackend: "codex",
1235
1508
  }),
1236
1509
  // Wall-clock is enforced by the caller's abortSignal (the route
@@ -1265,6 +1538,15 @@ export class CodexCore {
1265
1538
  }
1266
1539
  return;
1267
1540
  }
1541
+ // Reasoning gate — must precede tool-call matching and the
1542
+ // pairing logic so reasoning items are excluded from both,
1543
+ // and so `observedReasoning` is set in time to suppress the
1544
+ // file fallback after the run completes.
1545
+ rememberReasoningItem(event, reasoningItemIds);
1546
+ if (shouldDropAsReasoning(event, reasoningItemIds)) {
1547
+ observedReasoning = true;
1548
+ return;
1549
+ }
1268
1550
  const item = event.item;
1269
1551
  if (!item || typeof item !== "object")
1270
1552
  return;
@@ -1433,7 +1715,18 @@ export class CodexCore {
1433
1715
  writeClassToolFired,
1434
1716
  };
1435
1717
  }
1436
- const lastMessage = readFileIfExists(outputPath);
1718
+ // Reasoning gate on the file fallback. The delegated task path
1719
+ // has no stream-side text accumulator (unlike executeTurn's
1720
+ // `outputChunks`), so the file IS the only text source. When
1721
+ // reasoning was observed during the run, codex CLI may have
1722
+ // written a reasoning summary to `--output-last-message` —
1723
+ // returning that as `rawAssistantText` would feed reasoning
1724
+ // narration into the dispatcher's structured-output validator.
1725
+ // Treat it as no-output instead and let the standard
1726
+ // parse_error path surface a clean failure.
1727
+ const lastMessage = observedReasoning
1728
+ ? null
1729
+ : readFileIfExists(outputPath);
1437
1730
  const finalText = lastMessage?.trim() ?? "";
1438
1731
  if (finalText.length === 0) {
1439
1732
  const failure = lastError ?? firstFailureLine(stderrBuffer);
@@ -1452,7 +1745,9 @@ export class CodexCore {
1452
1745
  ok: false,
1453
1746
  errorClass: "parse_error",
1454
1747
  message: failure
1455
- ?? `codex emitted no final assistant message (sawTurnCompleted=${sawTurnCompleted})`,
1748
+ ?? (observedReasoning
1749
+ ? `codex emitted only reasoning summaries; no final assistant message (sawTurnCompleted=${sawTurnCompleted})`
1750
+ : `codex emitted no final assistant message (sawTurnCompleted=${sawTurnCompleted})`),
1456
1751
  cost,
1457
1752
  trace,
1458
1753
  writeClassToolFired,
@@ -1490,6 +1785,9 @@ export class CodexCore {
1490
1785
  }
1491
1786
  finally {
1492
1787
  removeFileIfExists(outputPath);
1788
+ // See runDelegatedTool — invoker owns the dir, but the readToken scope
1789
+ // matches the dir path and must not outlive the run.
1790
+ this.readTokenManager?.revoke(sessionDir);
1493
1791
  if (abortSignal) {
1494
1792
  abortSignal.removeEventListener("abort", callerListener);
1495
1793
  }
@@ -1630,6 +1928,122 @@ function extractCodexUsage(event) {
1630
1928
  function nonCachedInputTokens(totalInputTokens, cacheReadInputTokens, cacheCreationInputTokens = 0) {
1631
1929
  return Math.max(totalInputTokens - cacheReadInputTokens - cacheCreationInputTokens, 0);
1632
1930
  }
1931
+ /**
1932
+ * Codex reasoning detection — schema-defensive across naming variants.
1933
+ *
1934
+ * Reasoning summaries (GPT-5 family, codex 0.121+) surface in three
1935
+ * shapes we must drop before they reach `outputChunks` or
1936
+ * `streamCallbacks.onText`:
1937
+ *
1938
+ * 1. Outer event-level reasoning types from older codex builds —
1939
+ * `agent_reasoning`, `agent_reasoning_delta`, …
1940
+ * 2. `item.completed` (or `item.started`) carrying the item type
1941
+ * directly. The field name varies across codex versions: `type`,
1942
+ * `item_type`, `kind` — all three are accepted defensively, same
1943
+ * pattern as `extractCodexShellCall`'s multi-shape probe.
1944
+ * 3. `item.updated` deltas. The item type is usually only declared on
1945
+ * `item.started` / `item.completed`; the streaming updates carry
1946
+ * only `id` + `delta`. The caller must remember which item IDs are
1947
+ * reasoning (`rememberReasoningItem`) and check IDs on every
1948
+ * event (`shouldDropAsReasoning`).
1949
+ *
1950
+ * Keeping (2) and (3) separate from the shell-call audit guarantees
1951
+ * a reasoning event never reaches `extractMcpToolCall` /
1952
+ * `extractCodexShellCall` either — those helpers don't false-match on
1953
+ * reasoning shapes today, but the early return makes the contract
1954
+ * explicit.
1955
+ */
1956
+ // Item types carried inside `event.item.type` / `item.item_type` /
1957
+ // `item.kind` for events that wrap a reasoning summary.
1958
+ //
1959
+ // **Verified shapes** (covered by existing tests, observed in the
1960
+ // wild): `reasoning` (codex 0.121+), `agent_reasoning` (older builds).
1961
+ //
1962
+ // **Defensive entries** (added by the file-fallback hardening,
1963
+ // 2026-05-16, not yet confirmed from codex-rs source — additions are
1964
+ // safe because the names are reasoning-specific enough that a false
1965
+ // positive is implausible): `reasoning_summary` — plausible naming if
1966
+ // codex-rs ever differentiates the summary item from the in-progress
1967
+ // reasoning stream. Drop this entry if a future codex release
1968
+ // repurposes the name for something else.
1969
+ const CODEX_REASONING_ITEM_TYPES = new Set([
1970
+ "reasoning",
1971
+ "agent_reasoning",
1972
+ "reasoning_summary",
1973
+ ]);
1974
+ // Outer-level `event.type` values that ALWAYS carry reasoning content
1975
+ // (typically in `event.delta` / `event.text`, with no `event.item`
1976
+ // wrapper, so item-id tracking does not catch them).
1977
+ //
1978
+ // **Verified shapes**: `agent_reasoning`, `agent_reasoning_delta`,
1979
+ // `agent_reasoning_section_break` — emitted by older codex builds and
1980
+ // covered by the existing reasoning-filter regression tests.
1981
+ //
1982
+ // **Defensive entries** (added 2026-05-16 — NOT confirmed against
1983
+ // codex-rs source, included because the bug surface is real and the
1984
+ // false-positive risk is near-zero given how reasoning-specific the
1985
+ // names are): the `response.reasoning_summary_*` family follows
1986
+ // OpenAI's Responses API streaming schema, which codex CLI is known
1987
+ // to relay verbatim in some configurations (GPT-5 / o-series models
1988
+ // against certain backends). The bare `reasoning_*` short forms hedge
1989
+ // against codex pre-release variants. If any of these conflict with a
1990
+ // future non-reasoning event type, remove only the conflicting entry
1991
+ // — the verified set above is the load-bearing minimum.
1992
+ const CODEX_REASONING_OUTER_EVENT_TYPES = new Set([
1993
+ "agent_reasoning",
1994
+ "agent_reasoning_delta",
1995
+ "agent_reasoning_section_break",
1996
+ "response.reasoning_summary_text.delta",
1997
+ "response.reasoning_summary_text.done",
1998
+ "response.reasoning_summary_part.added",
1999
+ "response.reasoning_summary_part.done",
2000
+ "response.reasoning.delta",
2001
+ "response.reasoning.done",
2002
+ "reasoning_delta",
2003
+ "reasoning_section_break",
2004
+ ]);
2005
+ function readCodexItemId(event) {
2006
+ const item = event.item;
2007
+ if (!item || typeof item !== "object")
2008
+ return null;
2009
+ const id = item.id;
2010
+ return typeof id === "string" && id.length > 0 ? id : null;
2011
+ }
2012
+ function readCodexItemTypeName(event) {
2013
+ const item = event.item;
2014
+ if (!item || typeof item !== "object")
2015
+ return null;
2016
+ const bag = item;
2017
+ for (const key of ["type", "item_type", "kind"]) {
2018
+ const value = bag[key];
2019
+ if (typeof value === "string" && value.length > 0)
2020
+ return value;
2021
+ }
2022
+ return null;
2023
+ }
2024
+ function rememberReasoningItem(event, reasoningItemIds) {
2025
+ const id = readCodexItemId(event);
2026
+ if (!id)
2027
+ return;
2028
+ const typeName = readCodexItemTypeName(event);
2029
+ if (typeName && CODEX_REASONING_ITEM_TYPES.has(typeName)) {
2030
+ reasoningItemIds.add(id);
2031
+ }
2032
+ }
2033
+ function shouldDropAsReasoning(event, reasoningItemIds) {
2034
+ if (event.type && CODEX_REASONING_OUTER_EVENT_TYPES.has(event.type)) {
2035
+ return true;
2036
+ }
2037
+ const typeName = readCodexItemTypeName(event);
2038
+ if (typeName && CODEX_REASONING_ITEM_TYPES.has(typeName)) {
2039
+ return true;
2040
+ }
2041
+ const id = readCodexItemId(event);
2042
+ if (id && reasoningItemIds.has(id)) {
2043
+ return true;
2044
+ }
2045
+ return false;
2046
+ }
1633
2047
  function extractCodexText(event) {
1634
2048
  if (typeof event.output_text === "string") {
1635
2049
  return event.output_text;