agentix-cli 0.26.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/README.md +67 -118
  2. package/apps/mac-helper/Sources/AgentXHelper/AXTree.swift +159 -0
  3. package/apps/mac-helper/Sources/AgentXHelper/Brand.swift +63 -0
  4. package/apps/mac-helper/Sources/AgentXHelper/Focus.swift +97 -0
  5. package/apps/mac-helper/Sources/AgentXHelper/HUD.swift +179 -0
  6. package/apps/mac-helper/Sources/AgentXHelper/OCR.swift +117 -0
  7. package/apps/mac-helper/Sources/AgentXHelper/Pointer.swift +309 -0
  8. package/apps/mac-helper/Sources/AgentXHelper/Screens.swift +67 -0
  9. package/apps/mac-helper/Sources/AgentXHelper/Typer.swift +185 -0
  10. package/apps/mac-helper/Sources/AgentXHelper/Vision.swift +201 -0
  11. package/apps/mac-helper/Sources/AgentXHelper/main.swift +265 -0
  12. package/apps/mac-helper/build.sh +39 -0
  13. package/apps/mac-voice/Resources/Info.plist +18 -0
  14. package/apps/mac-voice/Sources/AgentXVoice/AgentClient.swift +108 -0
  15. package/apps/mac-voice/Sources/AgentXVoice/Brand.swift +123 -0
  16. package/apps/mac-voice/Sources/AgentXVoice/Config.swift +68 -0
  17. package/apps/mac-voice/Sources/AgentXVoice/Hold.swift +74 -0
  18. package/apps/mac-voice/Sources/AgentXVoice/Hotkey.swift +76 -0
  19. package/apps/mac-voice/Sources/AgentXVoice/Markdown.swift +140 -0
  20. package/apps/mac-voice/Sources/AgentXVoice/Panel.swift +275 -0
  21. package/apps/mac-voice/Sources/AgentXVoice/Progress.swift +147 -0
  22. package/apps/mac-voice/Sources/AgentXVoice/Recorder.swift +139 -0
  23. package/apps/mac-voice/Sources/AgentXVoice/ResultCard.swift +162 -0
  24. package/apps/mac-voice/Sources/AgentXVoice/SmartPaste.swift +72 -0
  25. package/apps/mac-voice/Sources/AgentXVoice/Speech.swift +192 -0
  26. package/apps/mac-voice/Sources/AgentXVoice/StepLabel.swift +159 -0
  27. package/apps/mac-voice/Sources/AgentXVoice/main.swift +380 -0
  28. package/apps/mac-voice/build.sh +32 -0
  29. package/dist/{App-BPNHIGUX.js → App-CKPH3HHF.js} +2 -2
  30. package/dist/{ChatApp-6XSSZB4U.js → ChatApp-MX7IG4K2.js} +2 -2
  31. package/dist/agent-2U574KBZ.js +2 -0
  32. package/dist/article-fields-L4D2BOGY.js +2 -0
  33. package/dist/article-quality-44ONVGLN.js +3 -0
  34. package/dist/article-quality-44ONVGLN.js.map +1 -0
  35. package/dist/{audit-JU3HWISB.js → audit-4245CX6P.js} +2 -2
  36. package/dist/backfill-MTD2B62I.js +6 -0
  37. package/dist/backfill-MTD2B62I.js.map +1 -0
  38. package/dist/{board-dashboard-M3372FLO.js → board-dashboard-QR7CVTKA.js} +1411 -453
  39. package/dist/board-dashboard-QR7CVTKA.js.map +1 -0
  40. package/dist/{builtin-FRKAQMFS.js → builtin-B67DMJ3M.js} +2 -2
  41. package/dist/calibration-ILS5OI44.js +2 -0
  42. package/dist/{chunk-V3U4OF7L.js → chunk-3LYM22IV.js} +46 -48
  43. package/dist/chunk-3LYM22IV.js.map +1 -0
  44. package/dist/chunk-3SCPRYJB.js +5 -0
  45. package/dist/chunk-3SCPRYJB.js.map +1 -0
  46. package/dist/chunk-4BR7D2OU.js +36 -0
  47. package/dist/chunk-4BR7D2OU.js.map +1 -0
  48. package/dist/{chunk-P4VWIVKN.js → chunk-52ZPELD2.js} +403 -29
  49. package/dist/chunk-52ZPELD2.js.map +1 -0
  50. package/dist/chunk-5IA2CYHN.js +5 -0
  51. package/dist/{chunk-O6YPEOQF.js.map → chunk-5IA2CYHN.js.map} +1 -1
  52. package/dist/chunk-64CAIB3C.js +9 -0
  53. package/dist/chunk-64CAIB3C.js.map +1 -0
  54. package/dist/{chunk-5U35WAZF.js → chunk-77OV7346.js} +6 -6
  55. package/dist/chunk-77OV7346.js.map +1 -0
  56. package/dist/chunk-AJ5RMU7X.js +2 -0
  57. package/dist/chunk-AJ5RMU7X.js.map +1 -0
  58. package/dist/chunk-AJONZWLT.js +2 -0
  59. package/dist/chunk-AJONZWLT.js.map +1 -0
  60. package/dist/chunk-BH3GTCZ6.js +2 -0
  61. package/dist/chunk-BH3GTCZ6.js.map +1 -0
  62. package/dist/chunk-E3UJHQGN.js +1189 -0
  63. package/dist/chunk-E3UJHQGN.js.map +1 -0
  64. package/dist/chunk-EVWEG3VD.js +3 -0
  65. package/dist/chunk-EVWEG3VD.js.map +1 -0
  66. package/dist/chunk-F4HZTZHW.js +2 -0
  67. package/dist/chunk-F4HZTZHW.js.map +1 -0
  68. package/dist/chunk-F6CNF7V3.js +25 -0
  69. package/dist/chunk-F6CNF7V3.js.map +1 -0
  70. package/dist/chunk-FIOB3MEX.js +2 -0
  71. package/dist/{chunk-H5D7ATXS.js → chunk-FKBGJYWQ.js} +5 -5
  72. package/dist/chunk-FKBGJYWQ.js.map +1 -0
  73. package/dist/{chunk-BVGJSPW4.js → chunk-G2HMRDUQ.js} +7 -7
  74. package/dist/chunk-G2HMRDUQ.js.map +1 -0
  75. package/dist/chunk-H2QQU2XV.js +109 -0
  76. package/dist/chunk-H2QQU2XV.js.map +1 -0
  77. package/dist/{chunk-LDHPMJ7M.js → chunk-IWMW5432.js} +3 -3
  78. package/dist/chunk-IWMW5432.js.map +1 -0
  79. package/dist/chunk-K33GIBSE.js +2 -0
  80. package/dist/chunk-K33GIBSE.js.map +1 -0
  81. package/dist/chunk-L2WSPY6S.js +2 -0
  82. package/dist/chunk-L2WSPY6S.js.map +1 -0
  83. package/dist/chunk-LCIREYTD.js +54 -0
  84. package/dist/chunk-LCIREYTD.js.map +1 -0
  85. package/dist/chunk-MHIMGM4G.js +126 -0
  86. package/dist/chunk-MHIMGM4G.js.map +1 -0
  87. package/dist/chunk-P5ZBBEPL.js +13 -0
  88. package/dist/chunk-P5ZBBEPL.js.map +1 -0
  89. package/dist/{chunk-JTJIPNXY.js → chunk-PNWNVOEZ.js} +1 -1
  90. package/dist/chunk-PNWNVOEZ.js.map +1 -0
  91. package/dist/chunk-QHTQPBHU.js +45 -0
  92. package/dist/chunk-QHTQPBHU.js.map +1 -0
  93. package/dist/chunk-S2MNL5V6.js +2 -0
  94. package/dist/chunk-S2MNL5V6.js.map +1 -0
  95. package/dist/chunk-SCTIUFL4.js +5 -0
  96. package/dist/{chunk-K2CAPYES.js.map → chunk-SCTIUFL4.js.map} +1 -1
  97. package/dist/chunk-ULLAE6LE.js +157 -0
  98. package/dist/chunk-ULLAE6LE.js.map +1 -0
  99. package/dist/{chunk-DJEZ2HVU.js → chunk-VDMYBPYB.js} +1 -1
  100. package/dist/chunk-VDMYBPYB.js.map +1 -0
  101. package/dist/chunk-VIH7ARPF.js +547 -0
  102. package/dist/chunk-VIH7ARPF.js.map +1 -0
  103. package/dist/chunk-W5C2GDNC.js +32 -0
  104. package/dist/{chunk-JP5IEXR7.js.map → chunk-W5C2GDNC.js.map} +1 -1
  105. package/dist/chunk-WPMX3VGI.js +3 -0
  106. package/dist/chunk-WPMX3VGI.js.map +1 -0
  107. package/dist/chunk-YLBERT7N.js +24 -0
  108. package/dist/chunk-YLBERT7N.js.map +1 -0
  109. package/dist/chunk-YLGIZRHV.js +114 -0
  110. package/dist/chunk-YLGIZRHV.js.map +1 -0
  111. package/dist/chunk-ZMYGXHPT.js +121 -0
  112. package/dist/chunk-ZMYGXHPT.js.map +1 -0
  113. package/dist/chunk-ZTEU5JVQ.js +2 -0
  114. package/dist/chunk-ZTEU5JVQ.js.map +1 -0
  115. package/dist/{chunk-2WVX3LEC.js → chunk-ZVP6GB4G.js} +1 -1
  116. package/dist/chunk-ZVP6GB4G.js.map +1 -0
  117. package/dist/cli.js +1 -1
  118. package/dist/cli.js.map +1 -1
  119. package/dist/client-ZLSXGPTV.js +2 -0
  120. package/dist/{compaction-NWEMOSHA.js → compaction-FD4R23HZ.js} +4 -4
  121. package/dist/config-HMW3EBZL.js +2 -0
  122. package/dist/config-mutator-4SZ5YEVD.js +2 -0
  123. package/dist/{conflict-detector-D7VIYPDI.js → conflict-detector-ZPOT3M2C.js} +2 -2
  124. package/dist/conflict-detector-ZPOT3M2C.js.map +1 -0
  125. package/dist/context-planner-AQHJMVY2.js +17 -0
  126. package/dist/context-planner-AQHJMVY2.js.map +1 -0
  127. package/dist/debug-3MEUO2P2.js +2 -0
  128. package/dist/{discover-XJXQXXIO.js → discover-D4VVRNAI.js} +2 -2
  129. package/dist/discover-D4VVRNAI.js.map +1 -0
  130. package/dist/doctor-LRYV3QLK.js +2 -0
  131. package/dist/editor-chat-OB7IQOB5.js +137 -0
  132. package/dist/editor-chat-OB7IQOB5.js.map +1 -0
  133. package/dist/entry-triage-LK34TSQD.js +2 -0
  134. package/dist/entry-triage-LK34TSQD.js.map +1 -0
  135. package/dist/facts-YVEJOM7O.js +22 -0
  136. package/dist/facts-YVEJOM7O.js.map +1 -0
  137. package/dist/heal-FVLBHYP7.js +2 -0
  138. package/dist/index.d.ts +1040 -64
  139. package/dist/index.js +12 -19
  140. package/dist/index.js.map +1 -1
  141. package/dist/{ingest-whatsapp-LZE62INA.js → ingest-whatsapp-NS4OWDOU.js} +2 -2
  142. package/dist/loader-4ZGTK7LD.js +2 -0
  143. package/dist/loader-BOKE5M5S.js +2 -0
  144. package/dist/memory-extract-F5ZHWY5E.js +2 -0
  145. package/dist/{migrate-v2-QO7SLKIM.js → migrate-v2-V4WN2VVM.js} +2 -2
  146. package/dist/ntfy-X7EPB3TG.js +4 -0
  147. package/dist/ntfy-X7EPB3TG.js.map +1 -0
  148. package/dist/processes-WU23U2OJ.js +2 -0
  149. package/dist/program-GSZ5AYAM.js +2 -0
  150. package/dist/{projects-api-KRME2YKZ.js → projects-api-QE6L65SK.js} +2 -2
  151. package/dist/{projects-mutate-3NHVG437.js → projects-mutate-MY7JTLSZ.js} +2 -2
  152. package/dist/providers-KO2DODIO.js +2 -0
  153. package/dist/query-SQDHE4HV.js +2 -0
  154. package/dist/questions-4B4KSPXG.js +3 -0
  155. package/dist/questions-4B4KSPXG.js.map +1 -0
  156. package/dist/recipes-7S4MC5OJ.js +2 -0
  157. package/dist/registry-LE6FWYZC.js +2 -0
  158. package/dist/review-candidates-RQU5KNZM.js +4 -0
  159. package/dist/review-candidates-RQU5KNZM.js.map +1 -0
  160. package/dist/review-store-B4YE3EFK.js +4 -0
  161. package/dist/review-store-B4YE3EFK.js.map +1 -0
  162. package/dist/{rotation-memo-B3EXXSEH.js → rotation-memo-7T75BLEX.js} +2 -2
  163. package/dist/routing-ILERJXB6.js +2 -0
  164. package/dist/runner-YRBVNYTY.js +2 -0
  165. package/dist/scheduler-BFM3EINS.js +2 -0
  166. package/dist/seat-7WM7II2B.js +2 -0
  167. package/dist/select-X4KVMOP5.js +2 -0
  168. package/dist/select-X4KVMOP5.js.map +1 -0
  169. package/dist/store-MCOA6N4F.js +2 -0
  170. package/dist/{subagent-WV7QKQ3L.js → subagent-2SJHSSJS.js} +2 -2
  171. package/dist/{surface-usage-PRL6Z4U3.js → surface-usage-NS74AXSE.js} +2 -2
  172. package/dist/timers-PCB4ZIBD.js +2 -0
  173. package/dist/triage-backtest-JNO7RKX7.js +2 -0
  174. package/dist/triage-backtest-JNO7RKX7.js.map +1 -0
  175. package/dist/types-H5ENIUIT.js +2 -0
  176. package/dist/types-OIFU3KSQ.js +2 -0
  177. package/dist/types-OIFU3KSQ.js.map +1 -0
  178. package/dist/web/workflow-editor.global.js +1542 -0
  179. package/dist/web/workflow-editor.global.js.map +1 -0
  180. package/dist/{whatsapp-state-XMTCSRXU.js → whatsapp-state-6D6FHHD2.js} +2 -2
  181. package/dist/wiki-2AUFSIKO.js +2 -0
  182. package/dist/wiki-2AUFSIKO.js.map +1 -0
  183. package/dist/workflows/templates/branching.yaml +1 -1
  184. package/dist/{workspace-setup-TBQAHYHJ.js → workspace-setup-B3F3TUDE.js} +2 -2
  185. package/dist/workspace-setup-B3F3TUDE.js.map +1 -0
  186. package/package.json +14 -3
  187. package/scripts/postinstall.mjs +80 -0
  188. package/dist/agent-5QMITZT6.js +0 -2
  189. package/dist/architect-SEPWMWS4.js +0 -2
  190. package/dist/board-dashboard-M3372FLO.js.map +0 -1
  191. package/dist/chunk-2WVX3LEC.js.map +0 -1
  192. package/dist/chunk-3WQFCIB6.js +0 -24
  193. package/dist/chunk-3WQFCIB6.js.map +0 -1
  194. package/dist/chunk-4YCH6IZV.js +0 -2
  195. package/dist/chunk-53NRX2NA.js +0 -2
  196. package/dist/chunk-53NRX2NA.js.map +0 -1
  197. package/dist/chunk-5U35WAZF.js.map +0 -1
  198. package/dist/chunk-BFXONUUN.js +0 -108
  199. package/dist/chunk-BFXONUUN.js.map +0 -1
  200. package/dist/chunk-BFZUG66X.js +0 -45
  201. package/dist/chunk-BFZUG66X.js.map +0 -1
  202. package/dist/chunk-BTHHSY7D.js +0 -13
  203. package/dist/chunk-BTHHSY7D.js.map +0 -1
  204. package/dist/chunk-BVGJSPW4.js.map +0 -1
  205. package/dist/chunk-D46VZ7K7.js +0 -116
  206. package/dist/chunk-D46VZ7K7.js.map +0 -1
  207. package/dist/chunk-DJEZ2HVU.js.map +0 -1
  208. package/dist/chunk-E5CXCI33.js +0 -155
  209. package/dist/chunk-E5CXCI33.js.map +0 -1
  210. package/dist/chunk-FDWOECJY.js +0 -54
  211. package/dist/chunk-FDWOECJY.js.map +0 -1
  212. package/dist/chunk-H5D7ATXS.js.map +0 -1
  213. package/dist/chunk-HR4JSRZS.js +0 -3
  214. package/dist/chunk-HR4JSRZS.js.map +0 -1
  215. package/dist/chunk-ISEBLHWX.js +0 -118
  216. package/dist/chunk-ISEBLHWX.js.map +0 -1
  217. package/dist/chunk-JP5IEXR7.js +0 -32
  218. package/dist/chunk-JTJIPNXY.js.map +0 -1
  219. package/dist/chunk-K2CAPYES.js +0 -5
  220. package/dist/chunk-LDHPMJ7M.js.map +0 -1
  221. package/dist/chunk-METYYZKQ.js +0 -1115
  222. package/dist/chunk-METYYZKQ.js.map +0 -1
  223. package/dist/chunk-MTAPOCGA.js +0 -47
  224. package/dist/chunk-MTAPOCGA.js.map +0 -1
  225. package/dist/chunk-O6YPEOQF.js +0 -5
  226. package/dist/chunk-P4VWIVKN.js.map +0 -1
  227. package/dist/chunk-SR3X25TN.js +0 -3
  228. package/dist/chunk-SR3X25TN.js.map +0 -1
  229. package/dist/chunk-UHE5FCPB.js +0 -431
  230. package/dist/chunk-UHE5FCPB.js.map +0 -1
  231. package/dist/chunk-V3U4OF7L.js.map +0 -1
  232. package/dist/chunk-VJUTQAPJ.js +0 -2
  233. package/dist/chunk-VJUTQAPJ.js.map +0 -1
  234. package/dist/chunk-VT5XYFDD.js +0 -126
  235. package/dist/chunk-VT5XYFDD.js.map +0 -1
  236. package/dist/client-HGKAC6VP.js +0 -2
  237. package/dist/config-A4RWEJHV.js +0 -2
  238. package/dist/config-mutator-MNSFUN7D.js +0 -2
  239. package/dist/conflict-detector-D7VIYPDI.js.map +0 -1
  240. package/dist/context-planner-45GEWKGL.js +0 -17
  241. package/dist/context-planner-45GEWKGL.js.map +0 -1
  242. package/dist/debug-N3B5NVJU.js +0 -2
  243. package/dist/discover-XJXQXXIO.js.map +0 -1
  244. package/dist/doctor-3Q36ZFE6.js +0 -2
  245. package/dist/heal-HZ3EQD52.js +0 -2
  246. package/dist/loader-5CA3O5GM.js +0 -2
  247. package/dist/loader-6IHUCPVO.js +0 -2
  248. package/dist/memory-extract-AENFVVO5.js +0 -2
  249. package/dist/processes-UIC4XXA6.js +0 -2
  250. package/dist/program-SAUNRCCD.js +0 -2
  251. package/dist/providers-L27BJ5A6.js +0 -2
  252. package/dist/query-HZYYRCLU.js +0 -2
  253. package/dist/recipes-EPLE2SNT.js +0 -2
  254. package/dist/registry-HK3WQ7BS.js +0 -2
  255. package/dist/runner-BFYDWPUO.js +0 -2
  256. package/dist/scheduler-6T2SU5ST.js +0 -2
  257. package/dist/store-I3HEWVLQ.js +0 -2
  258. package/dist/timers-5LPZN55J.js +0 -2
  259. package/dist/types-VECTMYTO.js +0 -2
  260. package/dist/types-Y6ZCZ52Z.js +0 -2
  261. package/dist/wiki-M6YNRFC4.js +0 -2
  262. /package/dist/{App-BPNHIGUX.js.map → App-CKPH3HHF.js.map} +0 -0
  263. /package/dist/{ChatApp-6XSSZB4U.js.map → ChatApp-MX7IG4K2.js.map} +0 -0
  264. /package/dist/{agent-5QMITZT6.js.map → agent-2U574KBZ.js.map} +0 -0
  265. /package/dist/{architect-SEPWMWS4.js.map → article-fields-L4D2BOGY.js.map} +0 -0
  266. /package/dist/{audit-JU3HWISB.js.map → audit-4245CX6P.js.map} +0 -0
  267. /package/dist/{builtin-FRKAQMFS.js.map → builtin-B67DMJ3M.js.map} +0 -0
  268. /package/dist/{chunk-4YCH6IZV.js.map → calibration-ILS5OI44.js.map} +0 -0
  269. /package/dist/{client-HGKAC6VP.js.map → chunk-FIOB3MEX.js.map} +0 -0
  270. /package/dist/{config-A4RWEJHV.js.map → client-ZLSXGPTV.js.map} +0 -0
  271. /package/dist/{compaction-NWEMOSHA.js.map → compaction-FD4R23HZ.js.map} +0 -0
  272. /package/dist/{config-mutator-MNSFUN7D.js.map → config-HMW3EBZL.js.map} +0 -0
  273. /package/dist/{debug-N3B5NVJU.js.map → config-mutator-4SZ5YEVD.js.map} +0 -0
  274. /package/dist/{doctor-3Q36ZFE6.js.map → debug-3MEUO2P2.js.map} +0 -0
  275. /package/dist/{heal-HZ3EQD52.js.map → doctor-LRYV3QLK.js.map} +0 -0
  276. /package/dist/{loader-5CA3O5GM.js.map → heal-FVLBHYP7.js.map} +0 -0
  277. /package/dist/{ingest-whatsapp-LZE62INA.js.map → ingest-whatsapp-NS4OWDOU.js.map} +0 -0
  278. /package/dist/{loader-6IHUCPVO.js.map → loader-4ZGTK7LD.js.map} +0 -0
  279. /package/dist/{memory-extract-AENFVVO5.js.map → loader-BOKE5M5S.js.map} +0 -0
  280. /package/dist/{processes-UIC4XXA6.js.map → memory-extract-F5ZHWY5E.js.map} +0 -0
  281. /package/dist/{migrate-v2-QO7SLKIM.js.map → migrate-v2-V4WN2VVM.js.map} +0 -0
  282. /package/dist/{program-SAUNRCCD.js.map → processes-WU23U2OJ.js.map} +0 -0
  283. /package/dist/{providers-L27BJ5A6.js.map → program-GSZ5AYAM.js.map} +0 -0
  284. /package/dist/{projects-api-KRME2YKZ.js.map → projects-api-QE6L65SK.js.map} +0 -0
  285. /package/dist/{projects-mutate-3NHVG437.js.map → projects-mutate-MY7JTLSZ.js.map} +0 -0
  286. /package/dist/{query-HZYYRCLU.js.map → providers-KO2DODIO.js.map} +0 -0
  287. /package/dist/{recipes-EPLE2SNT.js.map → query-SQDHE4HV.js.map} +0 -0
  288. /package/dist/{registry-HK3WQ7BS.js.map → recipes-7S4MC5OJ.js.map} +0 -0
  289. /package/dist/{runner-BFYDWPUO.js.map → registry-LE6FWYZC.js.map} +0 -0
  290. /package/dist/{rotation-memo-B3EXXSEH.js.map → rotation-memo-7T75BLEX.js.map} +0 -0
  291. /package/dist/{scheduler-6T2SU5ST.js.map → routing-ILERJXB6.js.map} +0 -0
  292. /package/dist/{store-I3HEWVLQ.js.map → runner-YRBVNYTY.js.map} +0 -0
  293. /package/dist/{surface-usage-PRL6Z4U3.js.map → scheduler-BFM3EINS.js.map} +0 -0
  294. /package/dist/{timers-5LPZN55J.js.map → seat-7WM7II2B.js.map} +0 -0
  295. /package/dist/{types-VECTMYTO.js.map → store-MCOA6N4F.js.map} +0 -0
  296. /package/dist/{subagent-WV7QKQ3L.js.map → subagent-2SJHSSJS.js.map} +0 -0
  297. /package/dist/{types-Y6ZCZ52Z.js.map → surface-usage-NS74AXSE.js.map} +0 -0
  298. /package/dist/{wiki-M6YNRFC4.js.map → timers-PCB4ZIBD.js.map} +0 -0
  299. /package/dist/{workspace-setup-TBQAHYHJ.js.map → types-H5ENIUIT.js.map} +0 -0
  300. /package/dist/{whatsapp-state-XMTCSRXU.js.map → whatsapp-state-6D6FHHD2.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -29,6 +29,31 @@ interface ProviderOptions {
29
29
  * marks the task aborted in the registry; the underlying request
30
30
  * can hang for hours waiting for the model to finish thinking. */
31
31
  abortSignal?: AbortSignal;
32
+ /** Force the model to call one specific tool, making its whole reply the
33
+ * tool's structured `input`. Anthropic renders this as
34
+ * `tool_choice: {type:"tool", name}`; OpenAI as
35
+ * `tool_choice: {type:"function", function:{name}}`. Providers that
36
+ * can't force a tool (the claude-code CLI on OAuth) ignore it — callers
37
+ * must check `PROVIDER_CAPABILITIES[name].structuredOutput` first. */
38
+ toolChoice?: {
39
+ type: "tool";
40
+ name: string;
41
+ };
42
+ /** OpenAI-compatible structured-output passthrough. Anthropic ignores it;
43
+ * use `toolChoice` there instead. */
44
+ responseFormat?: {
45
+ type: "json_schema";
46
+ name: string;
47
+ schema: Record<string, unknown>;
48
+ };
49
+ /** Ask for the token distribution behind the answer. Only meaningful on
50
+ * OpenAI-compatible providers, and only useful when the answer is a
51
+ * single token — see src/decisions/backends/local-llm.ts, which is the
52
+ * one caller that has a use for it. */
53
+ logprobs?: {
54
+ enabled: true;
55
+ topK: number;
56
+ };
32
57
  }
33
58
  type StreamEvent = {
34
59
  type: "text_delta";
@@ -423,12 +448,12 @@ declare function getLegacyTools(): Array<{
423
448
  declare function formatToolsForSystemPrompt(): string;
424
449
  declare const ALL_TOOL_NAMES: string[];
425
450
 
426
- interface NoqtaToolContext {
427
- /** The noqta.tn user UUID this tool call impersonates. */
451
+ interface AcmeToolContext {
452
+ /** The example.com user UUID this tool call impersonates. */
428
453
  userId: string;
429
454
  /** Logical agent id (for the audit table's X-Agent-Id column). */
430
455
  agentId?: string;
431
- /** Override the noqta.tn base URL — defaults to NOQTA_API_URL env or https://noqta.tn. */
456
+ /** Override the example.com base URL — defaults to ACME_API_URL env or https://example.com. */
432
457
  apiUrl?: string;
433
458
  }
434
459
 
@@ -517,10 +542,10 @@ declare const skillFrontmatterSchema: z.ZodObject<{
517
542
  }>, "many">>;
518
543
  /** If true, skill is auto-injected into context when triggers match (per-turn) */
519
544
  autoInject: z.ZodOptional<z.ZodBoolean>;
520
- /** Reference card ids cited by this skill (e.g. "ksi.gitlab.project.ksi-v2").
545
+ /** Reference card ids cited by this skill (e.g. "initech.gitlab.project.initech-v2").
521
546
  * Audit lint flags FAILING when any id does not resolve. */
522
547
  references: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
523
- /** Skills this one delegates to (e.g. ksi-cx-email → [hotmail]). Audit lint
548
+ /** Skills this one delegates to (e.g. initech-cx-email → [hotmail]). Audit lint
524
549
  * flags FAILING when a delegate has no SKILL.md. */
525
550
  delegatesTo: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
526
551
  /** Free-form category — used by recipes and audit rules. Common values:
@@ -623,12 +648,12 @@ interface GenerateOptions {
623
648
  lintCommand?: string;
624
649
  maxAttempts?: number;
625
650
  };
626
- /** Enables the noqta workspace tool catalog (list_projects, create_task,
651
+ /** Enables the acme workspace tool catalog (list_projects, create_task,
627
652
  * …) in the agentic loop and threads the user_id through to the
628
- * executor. Without this set, the noqta-tools are absent from the
629
- * agent's tool list — keeps non-noqta agents clean. The bearer is
653
+ * executor. Without this set, the acme-tools are absent from the
654
+ * agent's tool list — keeps non-acme agents clean. The bearer is
630
655
  * read from env at dispatch time and NEVER enters the prompt. */
631
- noqtaContext?: NoqtaToolContext;
656
+ acmeContext?: AcmeToolContext;
632
657
  /** Provider-level options forwarded to `createProvider`. Today only
633
658
  * `thinking` (for DeepSeek thinking-mode). Wired from
634
659
  * `providers.<name>.thinking` in agentx.json by the daemon's
@@ -738,12 +763,12 @@ interface ToolExecutorOptions {
738
763
  interactive?: boolean;
739
764
  overwrite?: boolean;
740
765
  dryRun?: boolean;
741
- /** When set, noqta-tools (list_projects, create_task, etc.) become
766
+ /** When set, acme-tools (list_projects, create_task, etc.) become
742
767
  * available — the executor dispatches them by POSTing to
743
768
  * /api/agent/tools with the server-held bearer. The bearer NEVER
744
- * enters the model's prompt context. Omit to leave noqta-tools off
769
+ * enters the model's prompt context. Omit to leave acme-tools off
745
770
  * (the agent will see "Unknown tool" if it calls one anyway). */
746
- noqtaContext?: NoqtaToolContext;
771
+ acmeContext?: AcmeToolContext;
747
772
  /** Operator-cancel signal. When fired we short-circuit `execute()`
748
773
  * before dispatch and forward to execa as `cancelSignal` so a
749
774
  * hung shell command can't outlive the abort. */
@@ -1070,7 +1095,7 @@ declare class PermissionManager {
1070
1095
  }
1071
1096
  declare const globalPermissions: PermissionManager;
1072
1097
 
1073
- declare const HOOK_EVENTS: readonly ["pre:generate", "post:generate", "pre:file-write", "post:file-write", "pre:prompt", "post:response", "pre:command", "on:error", "pre:tool-call", "post:tool-call", "pre:channel-message", "post:channel-message", "pre:a2a-task", "pre:cron-run", "post:cron-run", "on:gitlab-pipeline", "on:gitlab-issue", "on:gitlab-mr", "on:gitlab-note", "on:github-issue", "on:github-pr", "on:github-push", "on:stripe-event", "on:sentry-issue", "on:vercel-deployment", "on:odoo-event", "on:hubspot-event"];
1098
+ declare const HOOK_EVENTS: readonly ["pre:generate", "post:generate", "pre:file-write", "post:file-write", "pre:prompt", "post:response", "pre:command", "on:error", "pre:tool-call", "post:tool-call", "pre:channel-message", "post:channel-message", "pre:a2a-task", "pre:cron-run", "post:cron-run", "on:gitlab-pipeline", "on:gitlab-issue", "on:gitlab-mr", "on:gitlab-note", "on:github-issue", "on:github-pr", "on:github-push", "on:n8n", "on:stripe-event", "on:sentry-issue", "on:vercel-deployment", "on:odoo-event", "on:hubspot-event"];
1074
1099
  type HookEvent = (typeof HOOK_EVENTS)[number];
1075
1100
  declare const BLOCKING_EVENTS: HookEvent[];
1076
1101
  declare const hookDefinitionSchema: z.ZodObject<{
@@ -1512,8 +1537,8 @@ declare const agentConfigSchema: z.ZodObject<{
1512
1537
  * .claude/settings.json permissions.allow with the codegraph_* tools,
1513
1538
  * (c) appends a CodeGraph instruction section to the managed CLAUDE.md,
1514
1539
  * and (d) background-indexes the workspace at daemon boot if .codegraph/
1515
- * is missing. Off by default — flip on for coding agents (mtgl-v2-coder,
1516
- * ksi-v2-coder, hasanah-coding, etc.) where token-volume on exploration
1540
+ * is missing. Off by default — flip on for coding agents (globex-v2-coder,
1541
+ * initech-v2-coder, umbrella-coding, etc.) where token-volume on exploration
1517
1542
  * loops is the bottleneck. */
1518
1543
  codegraph: z.ZodDefault<z.ZodBoolean>;
1519
1544
  /** Per-agent override for the global `session.contextStrategy`. Lets
@@ -1523,7 +1548,7 @@ declare const agentConfigSchema: z.ZodObject<{
1523
1548
  contextStrategy: z.ZodOptional<z.ZodEnum<["layered", "planner"]>>;
1524
1549
  /** When true, the registry resolves references-recipes for this agent's
1525
1550
  * workspace and renders a deterministic [Verified References] block at
1526
- * priority 4.7. Off by default — flip on per agent (pm-ksi, devops-agent,
1551
+ * priority 4.7. Off by default — flip on per agent (pm-initech, devops-agent,
1527
1552
  * etc.) once a `references/` registry exists in the agent's workspace
1528
1553
  * or repo root. See src/agents/references/. */
1529
1554
  contextReferences: z.ZodDefault<z.ZodBoolean>;
@@ -1603,7 +1628,7 @@ declare const agentConfigSchema: z.ZodObject<{
1603
1628
  integrations: z.ZodDefault<z.ZodArray<z.ZodObject<{
1604
1629
  /** Service identifier — open string, well-known values in INTEGRATION_KINDS. */
1605
1630
  kind: z.ZodString;
1606
- /** Human-readable label (e.g. "@cx_bot", "Noqta CRM", "anis@noqta.tn"). Unique per (agent, kind). */
1631
+ /** Human-readable label (e.g. "@cx_bot", "Acme CRM", "alex@example.com"). Unique per (agent, kind). */
1607
1632
  label: z.ZodString;
1608
1633
  credentials: z.ZodDefault<z.ZodObject<{
1609
1634
  /** Env var holding the secret. Uppercase identifier; daemon resolves at use-time. */
@@ -1786,12 +1811,31 @@ declare const agentConfigSchema: z.ZodObject<{
1786
1811
  metadata?: Record<string, string | number | boolean> | undefined;
1787
1812
  }[] | undefined;
1788
1813
  }>;
1789
- declare const cronJobSchema: z.ZodObject<{
1814
+ declare const cronJobSchema: z.ZodEffects<z.ZodObject<{
1790
1815
  enabled: z.ZodDefault<z.ZodBoolean>;
1791
1816
  schedule: z.ZodString;
1792
1817
  timezone: z.ZodDefault<z.ZodString>;
1793
1818
  agent: z.ZodString;
1794
- prompt: z.ZodString;
1819
+ prompt: z.ZodDefault<z.ZodString>;
1820
+ /**
1821
+ * A shell command to run INSTEAD of dispatching the agent.
1822
+ *
1823
+ * Seven of this fleet's twenty-six crons were a single command wrapped
1824
+ * in an agent, and every one of them carried a paragraph like "Run this
1825
+ * EXACT command. Do NOT substitute, rewrite, shorten, or fall back to
1826
+ * alternative commands." That paragraph is a scar: it exists because
1827
+ * models kept substituting, and no amount of prompt severity makes a
1828
+ * language model a deterministic executor.
1829
+ *
1830
+ * Measured before this existed: ~$0.31 and ~24s per run to execute one
1831
+ * `node script.js` and repeat ten lines of its output — a 114k-token
1832
+ * context for a job with no judgement in it at all.
1833
+ *
1834
+ * When set, the scheduler runs the command directly. No model, no
1835
+ * tokens, no improvisation. `agent` is still required and is who gets
1836
+ * told when it fails.
1837
+ */
1838
+ command: z.ZodOptional<z.ZodString>;
1795
1839
  timeout: z.ZodDefault<z.ZodNumber>;
1796
1840
  model: z.ZodOptional<z.ZodString>;
1797
1841
  /** Soft cap on output length. Claude Code CLI has no hard flag for this,
@@ -1821,6 +1865,7 @@ declare const cronJobSchema: z.ZodObject<{
1821
1865
  timezone: string;
1822
1866
  onError: ("notify" | "log" | "disable")[];
1823
1867
  model?: string | undefined;
1868
+ command?: string | undefined;
1824
1869
  notify?: {
1825
1870
  channel: string;
1826
1871
  chatId: string;
@@ -1828,11 +1873,44 @@ declare const cronJobSchema: z.ZodObject<{
1828
1873
  } | undefined;
1829
1874
  maxOutputTokens?: number | undefined;
1830
1875
  }, {
1876
+ agent: string;
1877
+ schedule: string;
1878
+ model?: string | undefined;
1879
+ enabled?: boolean | undefined;
1880
+ command?: string | undefined;
1881
+ prompt?: string | undefined;
1882
+ timeout?: number | undefined;
1883
+ timezone?: string | undefined;
1884
+ notify?: {
1885
+ channel: string;
1886
+ chatId: string;
1887
+ accountId?: string | undefined;
1888
+ } | undefined;
1889
+ maxOutputTokens?: number | undefined;
1890
+ onError?: "notify" | "log" | "disable" | ("notify" | "log" | "disable")[] | undefined;
1891
+ }>, {
1892
+ enabled: boolean;
1831
1893
  agent: string;
1832
1894
  prompt: string;
1895
+ timeout: number;
1896
+ schedule: string;
1897
+ timezone: string;
1898
+ onError: ("notify" | "log" | "disable")[];
1899
+ model?: string | undefined;
1900
+ command?: string | undefined;
1901
+ notify?: {
1902
+ channel: string;
1903
+ chatId: string;
1904
+ accountId?: string | undefined;
1905
+ } | undefined;
1906
+ maxOutputTokens?: number | undefined;
1907
+ }, {
1908
+ agent: string;
1833
1909
  schedule: string;
1834
1910
  model?: string | undefined;
1835
1911
  enabled?: boolean | undefined;
1912
+ command?: string | undefined;
1913
+ prompt?: string | undefined;
1836
1914
  timeout?: number | undefined;
1837
1915
  timezone?: string | undefined;
1838
1916
  notify?: {
@@ -1960,8 +2038,8 @@ declare const daemonConfigSchema: z.ZodObject<{
1960
2038
  * .claude/settings.json permissions.allow with the codegraph_* tools,
1961
2039
  * (c) appends a CodeGraph instruction section to the managed CLAUDE.md,
1962
2040
  * and (d) background-indexes the workspace at daemon boot if .codegraph/
1963
- * is missing. Off by default — flip on for coding agents (mtgl-v2-coder,
1964
- * ksi-v2-coder, hasanah-coding, etc.) where token-volume on exploration
2041
+ * is missing. Off by default — flip on for coding agents (globex-v2-coder,
2042
+ * initech-v2-coder, umbrella-coding, etc.) where token-volume on exploration
1965
2043
  * loops is the bottleneck. */
1966
2044
  codegraph: z.ZodDefault<z.ZodBoolean>;
1967
2045
  /** Per-agent override for the global `session.contextStrategy`. Lets
@@ -1971,7 +2049,7 @@ declare const daemonConfigSchema: z.ZodObject<{
1971
2049
  contextStrategy: z.ZodOptional<z.ZodEnum<["layered", "planner"]>>;
1972
2050
  /** When true, the registry resolves references-recipes for this agent's
1973
2051
  * workspace and renders a deterministic [Verified References] block at
1974
- * priority 4.7. Off by default — flip on per agent (pm-ksi, devops-agent,
2052
+ * priority 4.7. Off by default — flip on per agent (pm-initech, devops-agent,
1975
2053
  * etc.) once a `references/` registry exists in the agent's workspace
1976
2054
  * or repo root. See src/agents/references/. */
1977
2055
  contextReferences: z.ZodDefault<z.ZodBoolean>;
@@ -2051,7 +2129,7 @@ declare const daemonConfigSchema: z.ZodObject<{
2051
2129
  integrations: z.ZodDefault<z.ZodArray<z.ZodObject<{
2052
2130
  /** Service identifier — open string, well-known values in INTEGRATION_KINDS. */
2053
2131
  kind: z.ZodString;
2054
- /** Human-readable label (e.g. "@cx_bot", "Noqta CRM", "anis@noqta.tn"). Unique per (agent, kind). */
2132
+ /** Human-readable label (e.g. "@cx_bot", "Acme CRM", "alex@example.com"). Unique per (agent, kind). */
2055
2133
  label: z.ZodString;
2056
2134
  credentials: z.ZodDefault<z.ZodObject<{
2057
2135
  /** Env var holding the secret. Uppercase identifier; daemon resolves at use-time. */
@@ -2485,7 +2563,7 @@ declare const daemonConfigSchema: z.ZodObject<{
2485
2563
  /** If set, the agent lives on a remote mesh peer (node id). Forces the
2486
2564
  * username→agent map to resolve to this mapping even when a local
2487
2565
  * agent's token resolves to the same GitLab user — prevents collisions
2488
- * like two agents both claiming @devops-noqta. */
2566
+ * like two agents both claiming @devops-acme. */
2489
2567
  node: z.ZodOptional<z.ZodString>;
2490
2568
  }, "strip", z.ZodTypeAny, {
2491
2569
  agentId: string;
@@ -2626,6 +2704,37 @@ declare const daemonConfigSchema: z.ZodObject<{
2626
2704
  clientId?: string | undefined;
2627
2705
  privateKeyFile?: string | undefined;
2628
2706
  }>>;
2707
+ /** ntfy push notifications — outbound only. The operator-facing tap on
2708
+ * the shoulder: cron failures, task errors, and anything an agent decides
2709
+ * is worth interrupting a human for. `chatId` on an outgoing message is
2710
+ * the topic; empty falls back to `topic` here. */
2711
+ ntfy: z.ZodDefault<z.ZodObject<{
2712
+ enabled: z.ZodDefault<z.ZodBoolean>;
2713
+ /** Self-hosted ntfy base URL. Defaults to the public server. */
2714
+ server: z.ZodDefault<z.ZodString>;
2715
+ /** Default topic. Treat it as a secret — on ntfy.sh, knowing the topic
2716
+ * is the only thing needed to read or publish to it. */
2717
+ topic: z.ZodOptional<z.ZodString>;
2718
+ /** Access token for protected topics. */
2719
+ token: z.ZodOptional<z.ZodString>;
2720
+ /** 1 (min) .. 5 (max). ntfy's own default is 3. */
2721
+ defaultPriority: z.ZodDefault<z.ZodNumber>;
2722
+ defaultTitle: z.ZodOptional<z.ZodString>;
2723
+ }, "strip", z.ZodTypeAny, {
2724
+ enabled: boolean;
2725
+ server: string;
2726
+ defaultPriority: number;
2727
+ token?: string | undefined;
2728
+ topic?: string | undefined;
2729
+ defaultTitle?: string | undefined;
2730
+ }, {
2731
+ enabled?: boolean | undefined;
2732
+ token?: string | undefined;
2733
+ server?: string | undefined;
2734
+ topic?: string | undefined;
2735
+ defaultPriority?: number | undefined;
2736
+ defaultTitle?: string | undefined;
2737
+ }>>;
2629
2738
  webrtc: z.ZodDefault<z.ZodObject<{
2630
2739
  enabled: z.ZodDefault<z.ZodBoolean>;
2631
2740
  /** ICE STUN servers for NAT discovery. Default is Google's public STUN. */
@@ -2866,6 +2975,14 @@ declare const daemonConfigSchema: z.ZodObject<{
2866
2975
  clientId?: string | undefined;
2867
2976
  privateKeyFile?: string | undefined;
2868
2977
  };
2978
+ ntfy: {
2979
+ enabled: boolean;
2980
+ server: string;
2981
+ defaultPriority: number;
2982
+ token?: string | undefined;
2983
+ topic?: string | undefined;
2984
+ defaultTitle?: string | undefined;
2985
+ };
2869
2986
  webrtc: {
2870
2987
  enabled: boolean;
2871
2988
  stunServers: string[];
@@ -2979,6 +3096,14 @@ declare const daemonConfigSchema: z.ZodObject<{
2979
3096
  clientId?: string | undefined;
2980
3097
  privateKeyFile?: string | undefined;
2981
3098
  } | undefined;
3099
+ ntfy?: {
3100
+ enabled?: boolean | undefined;
3101
+ token?: string | undefined;
3102
+ server?: string | undefined;
3103
+ topic?: string | undefined;
3104
+ defaultPriority?: number | undefined;
3105
+ defaultTitle?: string | undefined;
3106
+ } | undefined;
2982
3107
  webrtc?: {
2983
3108
  enabled?: boolean | undefined;
2984
3109
  stunServers?: string[] | undefined;
@@ -3010,12 +3135,31 @@ declare const daemonConfigSchema: z.ZodObject<{
3010
3135
  } | undefined;
3011
3136
  } | undefined;
3012
3137
  }>>;
3013
- crons: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
3138
+ crons: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodObject<{
3014
3139
  enabled: z.ZodDefault<z.ZodBoolean>;
3015
3140
  schedule: z.ZodString;
3016
3141
  timezone: z.ZodDefault<z.ZodString>;
3017
3142
  agent: z.ZodString;
3018
- prompt: z.ZodString;
3143
+ prompt: z.ZodDefault<z.ZodString>;
3144
+ /**
3145
+ * A shell command to run INSTEAD of dispatching the agent.
3146
+ *
3147
+ * Seven of this fleet's twenty-six crons were a single command wrapped
3148
+ * in an agent, and every one of them carried a paragraph like "Run this
3149
+ * EXACT command. Do NOT substitute, rewrite, shorten, or fall back to
3150
+ * alternative commands." That paragraph is a scar: it exists because
3151
+ * models kept substituting, and no amount of prompt severity makes a
3152
+ * language model a deterministic executor.
3153
+ *
3154
+ * Measured before this existed: ~$0.31 and ~24s per run to execute one
3155
+ * `node script.js` and repeat ten lines of its output — a 114k-token
3156
+ * context for a job with no judgement in it at all.
3157
+ *
3158
+ * When set, the scheduler runs the command directly. No model, no
3159
+ * tokens, no improvisation. `agent` is still required and is who gets
3160
+ * told when it fails.
3161
+ */
3162
+ command: z.ZodOptional<z.ZodString>;
3019
3163
  timeout: z.ZodDefault<z.ZodNumber>;
3020
3164
  model: z.ZodOptional<z.ZodString>;
3021
3165
  /** Soft cap on output length. Claude Code CLI has no hard flag for this,
@@ -3045,6 +3189,7 @@ declare const daemonConfigSchema: z.ZodObject<{
3045
3189
  timezone: string;
3046
3190
  onError: ("notify" | "log" | "disable")[];
3047
3191
  model?: string | undefined;
3192
+ command?: string | undefined;
3048
3193
  notify?: {
3049
3194
  channel: string;
3050
3195
  chatId: string;
@@ -3052,11 +3197,44 @@ declare const daemonConfigSchema: z.ZodObject<{
3052
3197
  } | undefined;
3053
3198
  maxOutputTokens?: number | undefined;
3054
3199
  }, {
3200
+ agent: string;
3201
+ schedule: string;
3202
+ model?: string | undefined;
3203
+ enabled?: boolean | undefined;
3204
+ command?: string | undefined;
3205
+ prompt?: string | undefined;
3206
+ timeout?: number | undefined;
3207
+ timezone?: string | undefined;
3208
+ notify?: {
3209
+ channel: string;
3210
+ chatId: string;
3211
+ accountId?: string | undefined;
3212
+ } | undefined;
3213
+ maxOutputTokens?: number | undefined;
3214
+ onError?: "notify" | "log" | "disable" | ("notify" | "log" | "disable")[] | undefined;
3215
+ }>, {
3216
+ enabled: boolean;
3055
3217
  agent: string;
3056
3218
  prompt: string;
3219
+ timeout: number;
3220
+ schedule: string;
3221
+ timezone: string;
3222
+ onError: ("notify" | "log" | "disable")[];
3223
+ model?: string | undefined;
3224
+ command?: string | undefined;
3225
+ notify?: {
3226
+ channel: string;
3227
+ chatId: string;
3228
+ accountId?: string | undefined;
3229
+ } | undefined;
3230
+ maxOutputTokens?: number | undefined;
3231
+ }, {
3232
+ agent: string;
3057
3233
  schedule: string;
3058
3234
  model?: string | undefined;
3059
3235
  enabled?: boolean | undefined;
3236
+ command?: string | undefined;
3237
+ prompt?: string | undefined;
3060
3238
  timeout?: number | undefined;
3061
3239
  timezone?: string | undefined;
3062
3240
  notify?: {
@@ -3425,6 +3603,22 @@ declare const daemonConfigSchema: z.ZodObject<{
3425
3603
  project?: string | undefined;
3426
3604
  displayName?: string | undefined;
3427
3605
  }>, "many">>;
3606
+ clients: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
3607
+ name: z.ZodOptional<z.ZodString>;
3608
+ kind: z.ZodOptional<z.ZodEnum<["client", "internal", "own"]>>;
3609
+ respondWithin: z.ZodOptional<z.ZodString>;
3610
+ standing: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
3611
+ }, "strip", z.ZodTypeAny, {
3612
+ standing: string[];
3613
+ name?: string | undefined;
3614
+ kind?: "client" | "internal" | "own" | undefined;
3615
+ respondWithin?: string | undefined;
3616
+ }, {
3617
+ name?: string | undefined;
3618
+ kind?: "client" | "internal" | "own" | undefined;
3619
+ respondWithin?: string | undefined;
3620
+ standing?: string[] | undefined;
3621
+ }>>>;
3428
3622
  workTickMinutes: z.ZodDefault<z.ZodNumber>;
3429
3623
  idleQueueThreshold: z.ZodDefault<z.ZodNumber>;
3430
3624
  standup: z.ZodDefault<z.ZodObject<{
@@ -3496,6 +3690,12 @@ declare const daemonConfigSchema: z.ZodObject<{
3496
3690
  project?: string | undefined;
3497
3691
  displayName?: string | undefined;
3498
3692
  }[];
3693
+ clients: Record<string, {
3694
+ standing: string[];
3695
+ name?: string | undefined;
3696
+ kind?: "client" | "internal" | "own" | undefined;
3697
+ respondWithin?: string | undefined;
3698
+ }>;
3499
3699
  workTickMinutes: number;
3500
3700
  idleQueueThreshold: number;
3501
3701
  standup: {
@@ -3557,6 +3757,12 @@ declare const daemonConfigSchema: z.ZodObject<{
3557
3757
  project?: string | undefined;
3558
3758
  displayName?: string | undefined;
3559
3759
  }[] | undefined;
3760
+ clients?: Record<string, {
3761
+ name?: string | undefined;
3762
+ kind?: "client" | "internal" | "own" | undefined;
3763
+ respondWithin?: string | undefined;
3764
+ standing?: string[] | undefined;
3765
+ }> | undefined;
3560
3766
  workTickMinutes?: number | undefined;
3561
3767
  idleQueueThreshold?: number | undefined;
3562
3768
  standup?: {
@@ -3579,7 +3785,8 @@ declare const daemonConfigSchema: z.ZodObject<{
3579
3785
  type: "gitlab";
3580
3786
  projects: string[];
3581
3787
  }>]>;
3582
- primaryToolLabel: z.ZodOptional<z.ZodString>;
3788
+ primaryToolLabel: z.ZodOptional<z.ZodString>; /** Non-secret metadata — username, email, host URL, portal id, JID, etc.
3789
+ * Visible in the dashboard and to skills. */
3583
3790
  labels: z.ZodDefault<z.ZodArray<z.ZodObject<{
3584
3791
  name: z.ZodString;
3585
3792
  color: z.ZodDefault<z.ZodString>;
@@ -3828,12 +4035,395 @@ declare const daemonConfigSchema: z.ZodObject<{
3828
4035
  bm25?: number | undefined;
3829
4036
  } | undefined;
3830
4037
  }>>;
4038
+ decisions: z.ZodDefault<z.ZodObject<{
4039
+ enabled: z.ZodDefault<z.ZodBoolean>;
4040
+ dbPath: z.ZodDefault<z.ZodString>;
4041
+ /** State can contain message text. With this on, only the hash is kept,
4042
+ * which costs the ability to replay a decision offline. */
4043
+ redactState: z.ZodDefault<z.ZodBoolean>;
4044
+ /** Keep the serialized state for this many rows per seat, then prune to
4045
+ * hashes. Enough to replay and to grade an alternative backend on
4046
+ * identical inputs, without growing without bound. */
4047
+ keepStateRows: z.ZodDefault<z.ZodNumber>;
4048
+ defaultBackend: z.ZodDefault<z.ZodString>;
4049
+ backends: z.ZodDefault<z.ZodObject<{
4050
+ local: z.ZodDefault<z.ZodObject<{
4051
+ provider: z.ZodDefault<z.ZodString>;
4052
+ model: z.ZodDefault<z.ZodString>;
4053
+ /** auto resolves to a forced tool where the provider guarantees one,
4054
+ * and JSON-in-text otherwise (claude-code on OAuth cannot force a
4055
+ * tool). Never resolves to logprobs: that costs one call per
4056
+ * question, so it has to be asked for. */
4057
+ structureMode: z.ZodDefault<z.ZodEnum<["auto", "tool", "text"]>>;
4058
+ normalizeProbabilities: z.ZodDefault<z.ZodBoolean>;
4059
+ nRetryMalformedStructure: z.ZodDefault<z.ZodNumber>;
4060
+ maxStateChars: z.ZodDefault<z.ZodNumber>;
4061
+ }, "strip", z.ZodTypeAny, {
4062
+ provider: string;
4063
+ model: string;
4064
+ structureMode: "tool" | "text" | "auto";
4065
+ normalizeProbabilities: boolean;
4066
+ nRetryMalformedStructure: number;
4067
+ maxStateChars: number;
4068
+ }, {
4069
+ provider?: string | undefined;
4070
+ model?: string | undefined;
4071
+ structureMode?: "tool" | "text" | "auto" | undefined;
4072
+ normalizeProbabilities?: boolean | undefined;
4073
+ nRetryMalformedStructure?: number | undefined;
4074
+ maxStateChars?: number | undefined;
4075
+ }>>;
4076
+ /** A simple-jev server (featherless-ai/simple-jev). Reads the model's
4077
+ * next-token logits rather than asking it to write a probability, so
4078
+ * the distribution is the model's posterior instead of a number it
4079
+ * chose. Still not calibrated to correctness — that comes from
4080
+ * `agentx decisions recalibrate`. */
4081
+ simpleJev: z.ZodDefault<z.ZodObject<{
4082
+ baseUrl: z.ZodDefault<z.ZodString>;
4083
+ model: z.ZodOptional<z.ZodString>;
4084
+ apiKeyEnv: z.ZodOptional<z.ZodString>;
4085
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
4086
+ maxStateChars: z.ZodDefault<z.ZodNumber>;
4087
+ /** Their Choice takes 2-50 candidates, well under Jev's 255. */
4088
+ maxChoiceOptions: z.ZodDefault<z.ZodNumber>;
4089
+ }, "strip", z.ZodTypeAny, {
4090
+ baseUrl: string;
4091
+ timeoutMs: number;
4092
+ maxStateChars: number;
4093
+ maxChoiceOptions: number;
4094
+ model?: string | undefined;
4095
+ apiKeyEnv?: string | undefined;
4096
+ }, {
4097
+ model?: string | undefined;
4098
+ baseUrl?: string | undefined;
4099
+ apiKeyEnv?: string | undefined;
4100
+ timeoutMs?: number | undefined;
4101
+ maxStateChars?: number | undefined;
4102
+ maxChoiceOptions?: number | undefined;
4103
+ }>>;
4104
+ /** TypeSafe Jev through OpenRouter's alpha decisions endpoint.
4105
+ * Verified live 2026-09-19 — resolves to typesafe/jev-1.13-20260917,
4106
+ * provider "TypeSafe", ~0.5s round trip. The id is "jev-latest";
4107
+ * the namespaced "typesafe/jev-latest" 400s, and neither appears in
4108
+ * OpenRouter's public model list. Needs OPENROUTER_API_KEY. */
4109
+ jev: z.ZodDefault<z.ZodObject<{
4110
+ baseUrl: z.ZodDefault<z.ZodString>;
4111
+ path: z.ZodDefault<z.ZodString>;
4112
+ model: z.ZodDefault<z.ZodString>;
4113
+ apiKeyEnv: z.ZodDefault<z.ZodString>;
4114
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
4115
+ maxStateChars: z.ZodDefault<z.ZodNumber>;
4116
+ maxChoiceOptions: z.ZodDefault<z.ZodNumber>;
4117
+ }, "strip", z.ZodTypeAny, {
4118
+ model: string;
4119
+ path: string;
4120
+ baseUrl: string;
4121
+ apiKeyEnv: string;
4122
+ timeoutMs: number;
4123
+ maxStateChars: number;
4124
+ maxChoiceOptions: number;
4125
+ }, {
4126
+ model?: string | undefined;
4127
+ path?: string | undefined;
4128
+ baseUrl?: string | undefined;
4129
+ apiKeyEnv?: string | undefined;
4130
+ timeoutMs?: number | undefined;
4131
+ maxStateChars?: number | undefined;
4132
+ maxChoiceOptions?: number | undefined;
4133
+ }>>;
4134
+ /** Jev direct from TypeSafe rather than through OpenRouter. Same
4135
+ * contract, different billing and rate limits. Needs TYPESAFE_API_KEY. */
4136
+ typesafe: z.ZodDefault<z.ZodObject<{
4137
+ baseUrl: z.ZodDefault<z.ZodString>;
4138
+ path: z.ZodDefault<z.ZodString>;
4139
+ model: z.ZodDefault<z.ZodString>;
4140
+ apiKeyEnv: z.ZodDefault<z.ZodString>;
4141
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
4142
+ maxStateChars: z.ZodDefault<z.ZodNumber>;
4143
+ maxChoiceOptions: z.ZodDefault<z.ZodNumber>;
4144
+ }, "strip", z.ZodTypeAny, {
4145
+ model: string;
4146
+ path: string;
4147
+ baseUrl: string;
4148
+ apiKeyEnv: string;
4149
+ timeoutMs: number;
4150
+ maxStateChars: number;
4151
+ maxChoiceOptions: number;
4152
+ }, {
4153
+ model?: string | undefined;
4154
+ path?: string | undefined;
4155
+ baseUrl?: string | undefined;
4156
+ apiKeyEnv?: string | undefined;
4157
+ timeoutMs?: number | undefined;
4158
+ maxStateChars?: number | undefined;
4159
+ maxChoiceOptions?: number | undefined;
4160
+ }>>;
4161
+ }, "strip", z.ZodTypeAny, {
4162
+ local: {
4163
+ provider: string;
4164
+ model: string;
4165
+ structureMode: "tool" | "text" | "auto";
4166
+ normalizeProbabilities: boolean;
4167
+ nRetryMalformedStructure: number;
4168
+ maxStateChars: number;
4169
+ };
4170
+ simpleJev: {
4171
+ baseUrl: string;
4172
+ timeoutMs: number;
4173
+ maxStateChars: number;
4174
+ maxChoiceOptions: number;
4175
+ model?: string | undefined;
4176
+ apiKeyEnv?: string | undefined;
4177
+ };
4178
+ jev: {
4179
+ model: string;
4180
+ path: string;
4181
+ baseUrl: string;
4182
+ apiKeyEnv: string;
4183
+ timeoutMs: number;
4184
+ maxStateChars: number;
4185
+ maxChoiceOptions: number;
4186
+ };
4187
+ typesafe: {
4188
+ model: string;
4189
+ path: string;
4190
+ baseUrl: string;
4191
+ apiKeyEnv: string;
4192
+ timeoutMs: number;
4193
+ maxStateChars: number;
4194
+ maxChoiceOptions: number;
4195
+ };
4196
+ }, {
4197
+ local?: {
4198
+ provider?: string | undefined;
4199
+ model?: string | undefined;
4200
+ structureMode?: "tool" | "text" | "auto" | undefined;
4201
+ normalizeProbabilities?: boolean | undefined;
4202
+ nRetryMalformedStructure?: number | undefined;
4203
+ maxStateChars?: number | undefined;
4204
+ } | undefined;
4205
+ simpleJev?: {
4206
+ model?: string | undefined;
4207
+ baseUrl?: string | undefined;
4208
+ apiKeyEnv?: string | undefined;
4209
+ timeoutMs?: number | undefined;
4210
+ maxStateChars?: number | undefined;
4211
+ maxChoiceOptions?: number | undefined;
4212
+ } | undefined;
4213
+ jev?: {
4214
+ model?: string | undefined;
4215
+ path?: string | undefined;
4216
+ baseUrl?: string | undefined;
4217
+ apiKeyEnv?: string | undefined;
4218
+ timeoutMs?: number | undefined;
4219
+ maxStateChars?: number | undefined;
4220
+ maxChoiceOptions?: number | undefined;
4221
+ } | undefined;
4222
+ typesafe?: {
4223
+ model?: string | undefined;
4224
+ path?: string | undefined;
4225
+ baseUrl?: string | undefined;
4226
+ apiKeyEnv?: string | undefined;
4227
+ timeoutMs?: number | undefined;
4228
+ maxStateChars?: number | undefined;
4229
+ maxChoiceOptions?: number | undefined;
4230
+ } | undefined;
4231
+ }>>;
4232
+ seats: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDefault<z.ZodObject<{
4233
+ /** off: the seat is unreachable. shadow: runs and records, incumbent stays
4234
+ * authoritative. active: the answer is used. */
4235
+ mode: z.ZodDefault<z.ZodEnum<["off", "shadow", "active"]>>;
4236
+ /** Backend name from the decisions registry. Per-seat, so one seat can be
4237
+ * graded against a different backend than another at the same time. */
4238
+ backend: z.ZodOptional<z.ZodString>;
4239
+ model: z.ZodOptional<z.ZodString>;
4240
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
4241
+ /** Post-hoc temperature fitted on this seat's own labeled rows. 1 means
4242
+ * "not calibrated yet", which is where every seat starts — see
4243
+ * `agentx decisions calibrate`. */
4244
+ temperature: z.ZodDefault<z.ZodNumber>;
4245
+ /** Fraction of would-be-skips to run anyway. Not a tuning knob: a skipped
4246
+ * decision can never be graded, so without exploration an active seat's
4247
+ * metrics are computed on the biased sample it selected for itself.
4248
+ * Setting this to 0 in active mode means the calibration report stops
4249
+ * being trustworthy the day you promote the seat. */
4250
+ explore: z.ZodDefault<z.ZodNumber>;
4251
+ }, "strip", z.ZodTypeAny, {
4252
+ temperature: number;
4253
+ mode: "active" | "off" | "shadow";
4254
+ timeoutMs: number;
4255
+ explore: number;
4256
+ model?: string | undefined;
4257
+ backend?: string | undefined;
4258
+ }, {
4259
+ model?: string | undefined;
4260
+ temperature?: number | undefined;
4261
+ backend?: string | undefined;
4262
+ mode?: "active" | "off" | "shadow" | undefined;
4263
+ timeoutMs?: number | undefined;
4264
+ explore?: number | undefined;
4265
+ }>>>>;
4266
+ /** Model routing driven by the task-tier seat. Models are scoped to their
4267
+ * CLI engine; the legacy cheapModel applies only to Claude Code. */
4268
+ routing: z.ZodDefault<z.ZodObject<{
4269
+ cheapModel: z.ZodOptional<z.ZodString>;
4270
+ cheapModels: z.ZodOptional<z.ZodObject<{
4271
+ "claude-code": z.ZodOptional<z.ZodString>;
4272
+ "codex-cli": z.ZodOptional<z.ZodString>;
4273
+ }, "strip", z.ZodTypeAny, {
4274
+ "claude-code"?: string | undefined;
4275
+ "codex-cli"?: string | undefined;
4276
+ }, {
4277
+ "claude-code"?: string | undefined;
4278
+ "codex-cli"?: string | undefined;
4279
+ }>>;
4280
+ }, "strip", z.ZodTypeAny, {
4281
+ cheapModel?: string | undefined;
4282
+ cheapModels?: {
4283
+ "claude-code"?: string | undefined;
4284
+ "codex-cli"?: string | undefined;
4285
+ } | undefined;
4286
+ }, {
4287
+ cheapModel?: string | undefined;
4288
+ cheapModels?: {
4289
+ "claude-code"?: string | undefined;
4290
+ "codex-cli"?: string | undefined;
4291
+ } | undefined;
4292
+ }>>;
4293
+ }, "strip", z.ZodTypeAny, {
4294
+ enabled: boolean;
4295
+ dbPath: string;
4296
+ redactState: boolean;
4297
+ keepStateRows: number;
4298
+ defaultBackend: string;
4299
+ backends: {
4300
+ local: {
4301
+ provider: string;
4302
+ model: string;
4303
+ structureMode: "tool" | "text" | "auto";
4304
+ normalizeProbabilities: boolean;
4305
+ nRetryMalformedStructure: number;
4306
+ maxStateChars: number;
4307
+ };
4308
+ simpleJev: {
4309
+ baseUrl: string;
4310
+ timeoutMs: number;
4311
+ maxStateChars: number;
4312
+ maxChoiceOptions: number;
4313
+ model?: string | undefined;
4314
+ apiKeyEnv?: string | undefined;
4315
+ };
4316
+ jev: {
4317
+ model: string;
4318
+ path: string;
4319
+ baseUrl: string;
4320
+ apiKeyEnv: string;
4321
+ timeoutMs: number;
4322
+ maxStateChars: number;
4323
+ maxChoiceOptions: number;
4324
+ };
4325
+ typesafe: {
4326
+ model: string;
4327
+ path: string;
4328
+ baseUrl: string;
4329
+ apiKeyEnv: string;
4330
+ timeoutMs: number;
4331
+ maxStateChars: number;
4332
+ maxChoiceOptions: number;
4333
+ };
4334
+ };
4335
+ seats: Record<string, {
4336
+ temperature: number;
4337
+ mode: "active" | "off" | "shadow";
4338
+ timeoutMs: number;
4339
+ explore: number;
4340
+ model?: string | undefined;
4341
+ backend?: string | undefined;
4342
+ }>;
4343
+ routing: {
4344
+ cheapModel?: string | undefined;
4345
+ cheapModels?: {
4346
+ "claude-code"?: string | undefined;
4347
+ "codex-cli"?: string | undefined;
4348
+ } | undefined;
4349
+ };
4350
+ }, {
4351
+ enabled?: boolean | undefined;
4352
+ dbPath?: string | undefined;
4353
+ redactState?: boolean | undefined;
4354
+ keepStateRows?: number | undefined;
4355
+ defaultBackend?: string | undefined;
4356
+ backends?: {
4357
+ local?: {
4358
+ provider?: string | undefined;
4359
+ model?: string | undefined;
4360
+ structureMode?: "tool" | "text" | "auto" | undefined;
4361
+ normalizeProbabilities?: boolean | undefined;
4362
+ nRetryMalformedStructure?: number | undefined;
4363
+ maxStateChars?: number | undefined;
4364
+ } | undefined;
4365
+ simpleJev?: {
4366
+ model?: string | undefined;
4367
+ baseUrl?: string | undefined;
4368
+ apiKeyEnv?: string | undefined;
4369
+ timeoutMs?: number | undefined;
4370
+ maxStateChars?: number | undefined;
4371
+ maxChoiceOptions?: number | undefined;
4372
+ } | undefined;
4373
+ jev?: {
4374
+ model?: string | undefined;
4375
+ path?: string | undefined;
4376
+ baseUrl?: string | undefined;
4377
+ apiKeyEnv?: string | undefined;
4378
+ timeoutMs?: number | undefined;
4379
+ maxStateChars?: number | undefined;
4380
+ maxChoiceOptions?: number | undefined;
4381
+ } | undefined;
4382
+ typesafe?: {
4383
+ model?: string | undefined;
4384
+ path?: string | undefined;
4385
+ baseUrl?: string | undefined;
4386
+ apiKeyEnv?: string | undefined;
4387
+ timeoutMs?: number | undefined;
4388
+ maxStateChars?: number | undefined;
4389
+ maxChoiceOptions?: number | undefined;
4390
+ } | undefined;
4391
+ } | undefined;
4392
+ seats?: Record<string, {
4393
+ model?: string | undefined;
4394
+ temperature?: number | undefined;
4395
+ backend?: string | undefined;
4396
+ mode?: "active" | "off" | "shadow" | undefined;
4397
+ timeoutMs?: number | undefined;
4398
+ explore?: number | undefined;
4399
+ } | undefined> | undefined;
4400
+ routing?: {
4401
+ cheapModel?: string | undefined;
4402
+ cheapModels?: {
4403
+ "claude-code"?: string | undefined;
4404
+ "codex-cli"?: string | undefined;
4405
+ } | undefined;
4406
+ } | undefined;
4407
+ }>>;
3831
4408
  /** Workflow engine — declarative state machines that bind channel events
3832
4409
  * to agents. Off by default; existing installs see no change until
3833
4410
  * flipped. Definitions live under `dir` (default .agentx/workflows/). */
3834
4411
  workflows: z.ZodDefault<z.ZodObject<{
3835
4412
  enabled: z.ZodDefault<z.ZodBoolean>;
3836
4413
  dir: z.ZodDefault<z.ZodString>;
4414
+ /** n8n keeps its several hundred connectors; we keep the agents. Point
4415
+ * this at your n8n and the workflow builder lists YOUR n8n workflows as
4416
+ * steps, so nobody has to copy a webhook URL by hand. */
4417
+ n8n: z.ZodDefault<z.ZodObject<{
4418
+ baseUrl: z.ZodDefault<z.ZodString>;
4419
+ apiKey: z.ZodDefault<z.ZodString>;
4420
+ }, "strip", z.ZodTypeAny, {
4421
+ apiKey: string;
4422
+ baseUrl: string;
4423
+ }, {
4424
+ apiKey?: string | undefined;
4425
+ baseUrl?: string | undefined;
4426
+ }>>;
3837
4427
  matching: z.ZodDefault<z.ZodObject<{
3838
4428
  enabled: z.ZodDefault<z.ZodBoolean>;
3839
4429
  mode: z.ZodDefault<z.ZodEnum<["suggest", "auto"]>>;
@@ -3857,6 +4447,10 @@ declare const daemonConfigSchema: z.ZodObject<{
3857
4447
  }, "strip", z.ZodTypeAny, {
3858
4448
  dir: string;
3859
4449
  enabled: boolean;
4450
+ n8n: {
4451
+ apiKey: string;
4452
+ baseUrl: string;
4453
+ };
3860
4454
  matching: {
3861
4455
  enabled: boolean;
3862
4456
  mode: "auto" | "suggest";
@@ -3867,6 +4461,10 @@ declare const daemonConfigSchema: z.ZodObject<{
3867
4461
  }, {
3868
4462
  dir?: string | undefined;
3869
4463
  enabled?: boolean | undefined;
4464
+ n8n?: {
4465
+ apiKey?: string | undefined;
4466
+ baseUrl?: string | undefined;
4467
+ } | undefined;
3870
4468
  matching?: {
3871
4469
  enabled?: boolean | undefined;
3872
4470
  mode?: "auto" | "suggest" | undefined;
@@ -4039,6 +4637,17 @@ declare const daemonConfigSchema: z.ZodObject<{
4039
4637
  * Raise for Max 20×, lower if your workload stays under the cap naturally. */
4040
4638
  maxClaudeCodeDispatchesPerHour: z.ZodDefault<z.ZodNumber>;
4041
4639
  maxClaudeCodeDispatchesPer5h: z.ZodDefault<z.ZodNumber>;
4640
+ /** How many requests BEFORE the immediate predecessor to show the
4641
+ * session-continuity seat. 0 keeps today's two-message state exactly.
4642
+ *
4643
+ * Off by default on purpose. A probe over 27 hand-written turns found
4644
+ * that at 3, the seat's safety question (`needsHistory`) becomes
4645
+ * cleanly separable where two messages leave it straddling zero — but
4646
+ * that rests on 7 positive examples from synthetic scenarios, and this
4647
+ * seat's failure mode is the agent silently losing conversation
4648
+ * context. The promotion gate for that wants labelled production rows,
4649
+ * not a good afternoon on a fixture. Raise it to collect them. */
4650
+ continuityStateTurns: z.ZodDefault<z.ZodNumber>;
4042
4651
  }, "strip", z.ZodTypeAny, {
4043
4652
  contextStrategy: "layered" | "planner";
4044
4653
  staleMinutes: number;
@@ -4046,6 +4655,7 @@ declare const daemonConfigSchema: z.ZodObject<{
4046
4655
  tierTwoThresholdTokens: number;
4047
4656
  maxClaudeCodeDispatchesPerHour: number;
4048
4657
  maxClaudeCodeDispatchesPer5h: number;
4658
+ continuityStateTurns: number;
4049
4659
  }, {
4050
4660
  contextStrategy?: "layered" | "planner" | undefined;
4051
4661
  staleMinutes?: number | undefined;
@@ -4053,9 +4663,10 @@ declare const daemonConfigSchema: z.ZodObject<{
4053
4663
  tierTwoThresholdTokens?: number | undefined;
4054
4664
  maxClaudeCodeDispatchesPerHour?: number | undefined;
4055
4665
  maxClaudeCodeDispatchesPer5h?: number | undefined;
4666
+ continuityStateTurns?: number | undefined;
4056
4667
  }>>;
4057
4668
  /** Move B — JS/TS plugins. Each entry is an installed npm package name
4058
- * (e.g. `agentx-plugin-mattermost` or `@noqta/plugin-mattermost`); the
4669
+ * (e.g. `agentx-plugin-mattermost` or `@acme/plugin-mattermost`); the
4059
4670
  * loader does a dynamic `import(name)` at boot, validates the manifest,
4060
4671
  * and calls plugin.setup(ctx). Plugins can register channel adapters
4061
4672
  * via ctx.addChannel() and subscribe to bus events via ctx.on(). Empty
@@ -4272,6 +4883,14 @@ declare const daemonConfigSchema: z.ZodObject<{
4272
4883
  clientId?: string | undefined;
4273
4884
  privateKeyFile?: string | undefined;
4274
4885
  };
4886
+ ntfy: {
4887
+ enabled: boolean;
4888
+ server: string;
4889
+ defaultPriority: number;
4890
+ token?: string | undefined;
4891
+ topic?: string | undefined;
4892
+ defaultTitle?: string | undefined;
4893
+ };
4275
4894
  webrtc: {
4276
4895
  enabled: boolean;
4277
4896
  stunServers: string[];
@@ -4312,6 +4931,7 @@ declare const daemonConfigSchema: z.ZodObject<{
4312
4931
  timezone: string;
4313
4932
  onError: ("notify" | "log" | "disable")[];
4314
4933
  model?: string | undefined;
4934
+ command?: string | undefined;
4315
4935
  notify?: {
4316
4936
  channel: string;
4317
4937
  chatId: string;
@@ -4396,9 +5016,71 @@ declare const daemonConfigSchema: z.ZodObject<{
4396
5016
  token?: string | undefined;
4397
5017
  draftAgent?: string | undefined;
4398
5018
  };
5019
+ decisions: {
5020
+ enabled: boolean;
5021
+ dbPath: string;
5022
+ redactState: boolean;
5023
+ keepStateRows: number;
5024
+ defaultBackend: string;
5025
+ backends: {
5026
+ local: {
5027
+ provider: string;
5028
+ model: string;
5029
+ structureMode: "tool" | "text" | "auto";
5030
+ normalizeProbabilities: boolean;
5031
+ nRetryMalformedStructure: number;
5032
+ maxStateChars: number;
5033
+ };
5034
+ simpleJev: {
5035
+ baseUrl: string;
5036
+ timeoutMs: number;
5037
+ maxStateChars: number;
5038
+ maxChoiceOptions: number;
5039
+ model?: string | undefined;
5040
+ apiKeyEnv?: string | undefined;
5041
+ };
5042
+ jev: {
5043
+ model: string;
5044
+ path: string;
5045
+ baseUrl: string;
5046
+ apiKeyEnv: string;
5047
+ timeoutMs: number;
5048
+ maxStateChars: number;
5049
+ maxChoiceOptions: number;
5050
+ };
5051
+ typesafe: {
5052
+ model: string;
5053
+ path: string;
5054
+ baseUrl: string;
5055
+ apiKeyEnv: string;
5056
+ timeoutMs: number;
5057
+ maxStateChars: number;
5058
+ maxChoiceOptions: number;
5059
+ };
5060
+ };
5061
+ seats: Record<string, {
5062
+ temperature: number;
5063
+ mode: "active" | "off" | "shadow";
5064
+ timeoutMs: number;
5065
+ explore: number;
5066
+ model?: string | undefined;
5067
+ backend?: string | undefined;
5068
+ }>;
5069
+ routing: {
5070
+ cheapModel?: string | undefined;
5071
+ cheapModels?: {
5072
+ "claude-code"?: string | undefined;
5073
+ "codex-cli"?: string | undefined;
5074
+ } | undefined;
5075
+ };
5076
+ };
4399
5077
  workflows: {
4400
5078
  dir: string;
4401
5079
  enabled: boolean;
5080
+ n8n: {
5081
+ apiKey: string;
5082
+ baseUrl: string;
5083
+ };
4402
5084
  matching: {
4403
5085
  enabled: boolean;
4404
5086
  mode: "auto" | "suggest";
@@ -4442,6 +5124,7 @@ declare const daemonConfigSchema: z.ZodObject<{
4442
5124
  tierTwoThresholdTokens: number;
4443
5125
  maxClaudeCodeDispatchesPerHour: number;
4444
5126
  maxClaudeCodeDispatchesPer5h: number;
5127
+ continuityStateTurns: number;
4445
5128
  };
4446
5129
  plugins: string[];
4447
5130
  processPool: {
@@ -4502,6 +5185,12 @@ declare const daemonConfigSchema: z.ZodObject<{
4502
5185
  project?: string | undefined;
4503
5186
  displayName?: string | undefined;
4504
5187
  }[];
5188
+ clients: Record<string, {
5189
+ standing: string[];
5190
+ name?: string | undefined;
5191
+ kind?: "client" | "internal" | "own" | undefined;
5192
+ respondWithin?: string | undefined;
5193
+ }>;
4505
5194
  workTickMinutes: number;
4506
5195
  idleQueueThreshold: number;
4507
5196
  standup: {
@@ -4693,6 +5382,14 @@ declare const daemonConfigSchema: z.ZodObject<{
4693
5382
  clientId?: string | undefined;
4694
5383
  privateKeyFile?: string | undefined;
4695
5384
  } | undefined;
5385
+ ntfy?: {
5386
+ enabled?: boolean | undefined;
5387
+ token?: string | undefined;
5388
+ server?: string | undefined;
5389
+ topic?: string | undefined;
5390
+ defaultPriority?: number | undefined;
5391
+ defaultTitle?: string | undefined;
5392
+ } | undefined;
4696
5393
  webrtc?: {
4697
5394
  enabled?: boolean | undefined;
4698
5395
  stunServers?: string[] | undefined;
@@ -4726,10 +5423,11 @@ declare const daemonConfigSchema: z.ZodObject<{
4726
5423
  } | undefined;
4727
5424
  crons?: Record<string, {
4728
5425
  agent: string;
4729
- prompt: string;
4730
5426
  schedule: string;
4731
5427
  model?: string | undefined;
4732
5428
  enabled?: boolean | undefined;
5429
+ command?: string | undefined;
5430
+ prompt?: string | undefined;
4733
5431
  timeout?: number | undefined;
4734
5432
  timezone?: string | undefined;
4735
5433
  notify?: {
@@ -4823,6 +5521,12 @@ declare const daemonConfigSchema: z.ZodObject<{
4823
5521
  project?: string | undefined;
4824
5522
  displayName?: string | undefined;
4825
5523
  }[] | undefined;
5524
+ clients?: Record<string, {
5525
+ name?: string | undefined;
5526
+ kind?: "client" | "internal" | "own" | undefined;
5527
+ respondWithin?: string | undefined;
5528
+ standing?: string[] | undefined;
5529
+ }> | undefined;
4826
5530
  workTickMinutes?: number | undefined;
4827
5531
  idleQueueThreshold?: number | undefined;
4828
5532
  standup?: {
@@ -4879,9 +5583,71 @@ declare const daemonConfigSchema: z.ZodObject<{
4879
5583
  }[] | undefined;
4880
5584
  draftAgent?: string | undefined;
4881
5585
  } | undefined;
5586
+ decisions?: {
5587
+ enabled?: boolean | undefined;
5588
+ dbPath?: string | undefined;
5589
+ redactState?: boolean | undefined;
5590
+ keepStateRows?: number | undefined;
5591
+ defaultBackend?: string | undefined;
5592
+ backends?: {
5593
+ local?: {
5594
+ provider?: string | undefined;
5595
+ model?: string | undefined;
5596
+ structureMode?: "tool" | "text" | "auto" | undefined;
5597
+ normalizeProbabilities?: boolean | undefined;
5598
+ nRetryMalformedStructure?: number | undefined;
5599
+ maxStateChars?: number | undefined;
5600
+ } | undefined;
5601
+ simpleJev?: {
5602
+ model?: string | undefined;
5603
+ baseUrl?: string | undefined;
5604
+ apiKeyEnv?: string | undefined;
5605
+ timeoutMs?: number | undefined;
5606
+ maxStateChars?: number | undefined;
5607
+ maxChoiceOptions?: number | undefined;
5608
+ } | undefined;
5609
+ jev?: {
5610
+ model?: string | undefined;
5611
+ path?: string | undefined;
5612
+ baseUrl?: string | undefined;
5613
+ apiKeyEnv?: string | undefined;
5614
+ timeoutMs?: number | undefined;
5615
+ maxStateChars?: number | undefined;
5616
+ maxChoiceOptions?: number | undefined;
5617
+ } | undefined;
5618
+ typesafe?: {
5619
+ model?: string | undefined;
5620
+ path?: string | undefined;
5621
+ baseUrl?: string | undefined;
5622
+ apiKeyEnv?: string | undefined;
5623
+ timeoutMs?: number | undefined;
5624
+ maxStateChars?: number | undefined;
5625
+ maxChoiceOptions?: number | undefined;
5626
+ } | undefined;
5627
+ } | undefined;
5628
+ seats?: Record<string, {
5629
+ model?: string | undefined;
5630
+ temperature?: number | undefined;
5631
+ backend?: string | undefined;
5632
+ mode?: "active" | "off" | "shadow" | undefined;
5633
+ timeoutMs?: number | undefined;
5634
+ explore?: number | undefined;
5635
+ } | undefined> | undefined;
5636
+ routing?: {
5637
+ cheapModel?: string | undefined;
5638
+ cheapModels?: {
5639
+ "claude-code"?: string | undefined;
5640
+ "codex-cli"?: string | undefined;
5641
+ } | undefined;
5642
+ } | undefined;
5643
+ } | undefined;
4882
5644
  workflows?: {
4883
5645
  dir?: string | undefined;
4884
5646
  enabled?: boolean | undefined;
5647
+ n8n?: {
5648
+ apiKey?: string | undefined;
5649
+ baseUrl?: string | undefined;
5650
+ } | undefined;
4885
5651
  matching?: {
4886
5652
  enabled?: boolean | undefined;
4887
5653
  mode?: "auto" | "suggest" | undefined;
@@ -4925,6 +5691,7 @@ declare const daemonConfigSchema: z.ZodObject<{
4925
5691
  tierTwoThresholdTokens?: number | undefined;
4926
5692
  maxClaudeCodeDispatchesPerHour?: number | undefined;
4927
5693
  maxClaudeCodeDispatchesPer5h?: number | undefined;
5694
+ continuityStateTurns?: number | undefined;
4928
5695
  } | undefined;
4929
5696
  plugins?: string[] | undefined;
4930
5697
  processPool?: {
@@ -4959,20 +5726,36 @@ interface PeerState {
4959
5726
  consecutiveFailures: number;
4960
5727
  /** Last probe error message — surfaced for debugging via /mesh. */
4961
5728
  lastError?: string;
5729
+ /** True once the peer has answered at least one probe in this process.
5730
+ * Distinguishes "temporarily unreachable node we know hosts these
5731
+ * agents" from "peer configured but never seen" — only the former is
5732
+ * worth deferring messages for. */
5733
+ everHealthy: boolean;
4962
5734
  }
4963
5735
  declare class A2AMesh {
4964
5736
  private peers;
4965
5737
  private healthTimer?;
4966
5738
  private config;
4967
5739
  private log;
4968
- /** Optional callback fired on peer state transitions (recovered /
4969
- * lost / skills changed). Daemon wires this to the event bus for
4970
- * live operator visibility. */
4971
- private peerChangeCallback?;
4972
- /** Register a listener for peer state transitions. Only one listener
4973
- * is kept — repeat calls overwrite. Used by the daemon to bridge
4974
- * into the EventBus without introducing a circular dependency. */
4975
- onPeerChange(cb: typeof A2AMesh.prototype.peerChangeCallback): void;
5740
+ /** Listeners fired on peer state transitions (recovered / lost /
5741
+ * skills changed). The daemon bridges these into the EventBus for
5742
+ * live operator visibility; the router uses them to replay messages
5743
+ * it deferred while a peer was unreachable. */
5744
+ private peerChangeCallbacks;
5745
+ /** Register a listener for peer state transitions. Every registered
5746
+ * listener is called — an earlier single-callback field meant the
5747
+ * daemon's EventBus bridge silently displaced any other subscriber,
5748
+ * which is why the router could not learn about peer recovery.
5749
+ * Used to reach the daemon/router without a circular dependency. */
5750
+ onPeerChange(cb: (event: {
5751
+ peer: string;
5752
+ healthy: boolean;
5753
+ skills: string[];
5754
+ delta: "recovered" | "lost" | "skills-changed";
5755
+ }) => void): void;
5756
+ /** Fan a transition out to every listener. One throwing listener must
5757
+ * not stop the others or abort the discovery loop. */
5758
+ private emitPeerChange;
4976
5759
  constructor(config: DaemonConfig, log?: (...args: unknown[]) => void);
4977
5760
  /**
4978
5761
  * Start the mesh: discover peers and begin health checks.
@@ -5042,7 +5825,7 @@ declare class A2AMesh {
5042
5825
  * the sender used, instead of falling back to api/default. Without
5043
5826
  * this, a GitLab webhook routed across the mesh lands in the
5044
5827
  * recipient's api:default bucket with no project, no issue id, no
5045
- * channelMeta — i.e., the mtgl/hasanah confusion incident on
5828
+ * channelMeta — i.e., the globex/umbrella confusion incident on
5046
5829
  * 2026-04-29 issue #709. Shape matches AgentTask.context. */
5047
5830
  context?: Record<string, unknown>;
5048
5831
  }): Promise<string>;
@@ -5075,7 +5858,7 @@ declare class A2AMesh {
5075
5858
  *
5076
5859
  * Peer lookup is tolerant: the `to` field comes from whichever daemon
5077
5860
  * originated the signal, which often spells the same node differently
5078
- * ("MacBook-Local" vs "macbook-local"). Match on a normalized name so config
5861
+ * ("HQ-Local" vs "hq-local"). Match on a normalized name so config
5079
5862
  * drift across sides doesn't break the signaling path.
5080
5863
  */
5081
5864
  sendSignal(peerName: string, signal: unknown): Promise<boolean>;
@@ -5102,6 +5885,18 @@ declare class A2AMesh {
5102
5885
  * dashboards and /mesh; look them up per-request by peer name instead.
5103
5886
  */
5104
5887
  authHeaders(peerName: string): Record<string, string>;
5888
+ /**
5889
+ * Find the peer that hosts `agentId`, including peers that are currently
5890
+ * unreachable but were healthy earlier in this process (their last-known
5891
+ * skill list is retained across a failed probe).
5892
+ *
5893
+ * Routing uses this to tell a genuinely unknown agent apart from one whose
5894
+ * node is simply down: the first is a drop, the second is a deferral.
5895
+ */
5896
+ findAgentPeer(agentId: string): {
5897
+ peer: string;
5898
+ healthy: boolean;
5899
+ } | undefined;
5105
5900
  directory(): Array<{
5106
5901
  peer: string;
5107
5902
  peerUrl: string;
@@ -5228,12 +6023,20 @@ declare class AgentXDaemon {
5228
6023
  private workflowDispatcher?;
5229
6024
  private workflowStore?;
5230
6025
  private workflowRuns?;
6026
+ private wfHealth?;
6027
+ /** Shares the daemon's SQLite handle; absent when running without one. */
6028
+ private _assistant?;
6029
+ private assistantStore;
6030
+ /** Workflow health for the monitor. Cached for a minute: the dashboard
6031
+ * polls every 15s and dormancy does not change on that timescale. */
6032
+ private workflowHealth;
5231
6033
  private db;
5232
6034
  private loadedPlugins;
5233
6035
  private readonly agentMemory;
5234
6036
  private contacts;
5235
6037
  /** Persistent-claude process registry. Null when no agent has
5236
6038
  * persistentProcess: true (legacy spawn-per-task path). */
6039
+ private sessionMonitor?;
5237
6040
  private processRegistry;
5238
6041
  /** Unified observability bus. Publishers (workflow engine, mesh,
5239
6042
  * channels, signals) emit here; subscribers (SSE, CLI, board
@@ -5254,6 +6057,11 @@ declare class AgentXDaemon {
5254
6057
  * reload cron jobs + in-memory config. Channels / agents / mesh changes
5255
6058
  * still require a restart — we log a warning so the operator knows.
5256
6059
  */
6060
+ /** Bring up the typed-decision seat: register in-tree backends, open the
6061
+ * shadow store, and hand the runtime its config. Best-effort — a seat
6062
+ * that cannot record still answers, and a seat that cannot answer
6063
+ * returns null and leaves its call site's existing behaviour alone. */
6064
+ private initDecisions;
5257
6065
  private startConfigWatcher;
5258
6066
  /**
5259
6067
  * Re-read agentx.json, diff against the in-memory config, apply what we
@@ -5358,7 +6166,7 @@ declare class AgentXDaemon {
5358
6166
  private handleMemoryApi;
5359
6167
  private handleWorkflowEvent;
5360
6168
  /** Mesh-callable outbound send. A peer's workflow `action.send` invokes
5361
- * this when the channel lives on this node (e.g. clawd-server hosts
6169
+ * this when the channel lives on this node (e.g. peer-server hosts
5362
6170
  * whatsapp; macbook's workflow forwards here). Just unwraps to the local
5363
6171
  * router's outbound path so all the same per-account/per-bot resolution
5364
6172
  * applies. Authentication is currently the mesh token at the network
@@ -5368,20 +6176,13 @@ declare class AgentXDaemon {
5368
6176
  * every healthy mesh peer that hosts the channel — a channel's "true"
5369
6177
  * chat list is spread across whichever nodes are actually paired
5370
6178
  * (e.g. macbook has the channel enabled but WhatsApp Baileys is unpaired,
5371
- * while clawd-server is paired; macbook's list is empty but we still want
5372
- * the author to pick from clawd-server's cache). Dedup by `id`; the first
6179
+ * while peer-server is paired; macbook's list is empty but we still want
6180
+ * the author to pick from peer-server's cache). Dedup by `id`; the first
5373
6181
  * source with a given id wins.
5374
6182
  *
5375
6183
  * `sources` in the response tells the editor where the entries came from
5376
6184
  * so it can show that metadata alongside. */
5377
6185
  private handleChannelChats;
5378
- /** Replay a draft as an ad-hoc workflow. The draft itself stays in
5379
- * `_drafts/`; we register a copy as `_adhoc-replay-<draftId>-<ts>.yaml`
5380
- * in the active store, hot-reload, and fire it through the dispatcher.
5381
- * Input is sourced from a trace pulled out of the draft's
5382
- * `sourceTaskIds` — caller can override which trace via `taskId` in the
5383
- * body, or supply a payload directly via `input`. */
5384
- private handleWorkflowDraftReplay;
5385
6186
  /** Manual run endpoint used by `agentx workflow run <id>`. Only workflows
5386
6187
  * whose trigger node is `trigger.manual` are runnable here — any other
5387
6188
  * source expects a live event and shouldn't race with a manual kick. */
@@ -5712,6 +6513,13 @@ interface AgentResponse {
5712
6513
  * actually is, so rotation decisions must use it, never `usage`.
5713
6514
  * Undefined on non-streaming paths (result JSON has no per-call data). */
5714
6515
  contextTokens?: number;
6516
+ /** Agentic-loop iterations the provider took inside THIS user turn, from
6517
+ * the CLI result event's `num_turns`. Distinct from a conversation turn:
6518
+ * one user message can cost many of these when the agent chains tools.
6519
+ * Benchmarks need it to tell "JEV made the agent cheaper" apart from
6520
+ * "JEV made the agent do less work". Undefined when the provider does
6521
+ * not report it. */
6522
+ numTurns?: number;
5715
6523
  /** The model Claude actually billed for (from the CLI's init event). When
5716
6524
  * absent, cost reporting should fall back to the model override / agent
5717
6525
  * config. Knowing the billed model is what makes cache-aware pricing
@@ -5757,12 +6565,12 @@ declare function executeSdk(agent: AgentDef, task: AgentTask, apiKey: string, hi
5757
6565
  * lets the daemon's POST /chat?stream=true actually stream Claude/DeepSeek
5758
6566
  * tokens — without it, the orchestrator returned only after the agentic
5759
6567
  * loop finished and SSE clients saw `role` then `stop` with no content
5760
- * between (the failure mode that surfaced on the noqta-public smoke test
6568
+ * between (the failure mode that surfaced on the acme-public smoke test
5761
6569
  * after the tier switch).
5762
6570
  */
5763
6571
  /** Side-channel for reasoning/thinking chunks — distinct from
5764
6572
  * StreamCallback so callers can route them to a different UI lane
5765
- * (e.g. a collapsible thinking block on noqta.tn, a dimmed terminal
6573
+ * (e.g. a collapsible thinking block on example.com, a dimmed terminal
5766
6574
  * block in the dashboard) without polluting the visible response. */
5767
6575
  type ThinkingCallback = (text: string) => void;
5768
6576
  declare function executeOrchestrator(agent: AgentDef, task: AgentTask, apiKey?: string, historyContext?: string, onDelta?: StreamCallback, providerOpts?: {
@@ -5988,7 +6796,7 @@ interface SeededMessage {
5988
6796
  timestamp: string;
5989
6797
  externalId?: string;
5990
6798
  /** Optional channel-side account/bot identity that handled this message
5991
- * (e.g., Telegram accountId "noqta_cx_bot"). Captured by adapters that
6799
+ * (e.g., Telegram accountId "acme_cx_bot"). Captured by adapters that
5992
6800
  * shadow-log outbound, so seeded history preserves the audit trail of
5993
6801
  * which bot identity actually sent each line. Renderers may ignore it. */
5994
6802
  accountId?: string;
@@ -6214,6 +7022,15 @@ declare class SessionStore {
6214
7022
  * Check if a native CLI session is stale (idle too long for resume to be useful).
6215
7023
  * When stale, the resumed context will be too far behind — better to start fresh.
6216
7024
  */
7025
+ /**
7026
+ * How long since this session last did anything, in ms.
7027
+ *
7028
+ * Used to reason about whether the provider's prompt cache for it is
7029
+ * still warm — a cold cache changes which model is cheaper, because the
7030
+ * saving from a cached read only exists while the cache exists. Returns
7031
+ * null when there is no native session to resume.
7032
+ */
7033
+ sessionIdleMs(agentId: string, channel: string, chatId: string): number | null;
6217
7034
  isSessionStale(agentId: string, channel: string, chatId: string): boolean;
6218
7035
  /**
6219
7036
  * Build a summary of recent messages from OTHER sessions for the same agent today.
@@ -6429,6 +7246,30 @@ declare class WikiStore {
6429
7246
  * Search articles by keyword. Returns articles the agent can read.
6430
7247
  */
6431
7248
  search(query: string, agentId: string, maxResults?: number): WikiArticle[];
7249
+ /**
7250
+ * findRelevant, then re-ranked by the wiki-rerank seat.
7251
+ *
7252
+ * Recall comes from findRelevant rather than search() because
7253
+ * findRelevant is the function everything actually calls — search()
7254
+ * turned out to have no callers at all. Additive on purpose: the
7255
+ * synchronous findRelevant is untouched and its existing callers stay
7256
+ * as they are. Measured on the 12-query eval against this
7257
+ * wiki, re-ranking moves R@1 from 33.3% to 50.0% and R@3 from 41.7% to
7258
+ * 66.7%, for about $0.0005 and 550ms a query.
7259
+ *
7260
+ * Fail-open in every direction. Seat off, backend down, no key, fewer
7261
+ * than two candidates — all return BM25's own order, which is what the
7262
+ * caller would have got anyway.
7263
+ *
7264
+ * Note what this cannot do: it only reorders what BM25 shortlisted. In
7265
+ * the eval R@3 sat exactly on that ceiling, so every remaining miss was
7266
+ * an article BM25 never returned. Widening the shortlist does not fix
7267
+ * that — past 30 the extra candidates measurably diluted the ranking.
7268
+ */
7269
+ findRelevantReranked(query: string, agentId?: string, maxResults?: number, opts?: {
7270
+ shortlist?: number;
7271
+ excerptChars?: number;
7272
+ }): Promise<WikiArticle[]>;
6432
7273
  /**
6433
7274
  * Find articles relevant to a message (for context injection).
6434
7275
  *
@@ -6922,8 +7763,8 @@ declare const classificationSchema: z.ZodObject<{
6922
7763
  channel?: string | undefined;
6923
7764
  preview?: string | undefined;
6924
7765
  agentId?: string | undefined;
6925
- sender?: string | undefined;
6926
7766
  confidence?: number | undefined;
7767
+ sender?: string | undefined;
6927
7768
  }, {
6928
7769
  path: string[];
6929
7770
  status: "pending" | "approved" | "rejected";
@@ -6933,13 +7774,13 @@ declare const classificationSchema: z.ZodObject<{
6933
7774
  channel?: string | undefined;
6934
7775
  preview?: string | undefined;
6935
7776
  agentId?: string | undefined;
7777
+ confidence?: number | undefined;
6936
7778
  sender?: string | undefined;
6937
7779
  proposedAxes?: Record<string, Record<string, string>> | undefined;
6938
7780
  leaf?: {
6939
7781
  output?: string | undefined;
6940
7782
  input?: string | undefined;
6941
7783
  } | undefined;
6942
- confidence?: number | undefined;
6943
7784
  }>;
6944
7785
  type Classification = z.infer<typeof classificationSchema>;
6945
7786
  /** Row in the fingerprint → path snap cache. */
@@ -7142,7 +7983,7 @@ declare class GraphStore {
7142
7983
  * Commit a full classification path: for each path element that doesn't
7143
7984
  * yet exist, infer its schema level by matching the proposed axes against
7144
7985
  * the level's required axes (first match ≥ cursor wins — this handles
7145
- * paths that skip levels, like business → noqta where location is
7986
+ * paths that skip levels, like business → acme where location is
7146
7987
  * absent). Refreshes the node list between adds so callers in a loop
7147
7988
  * don't hit "Node id already exists" on the second iteration.
7148
7989
  */
@@ -7160,6 +8001,10 @@ declare class GraphStore {
7160
8001
  * state, not the original).
7161
8002
  */
7162
8003
  listPendingClassifications(limit?: number): Classification[];
8004
+ /** Every classification, newest-first, collapsed one row per message.
8005
+ * The human-label queue needs the whole population rather than one
8006
+ * status, because the rows worth checking are the auto-approved ones. */
8007
+ listAllClassifications(): Classification[];
7163
8008
  /** Same contract as listPendingClassifications but filtered to any status. */
7164
8009
  listByStatus(status: Classification["status"], limit?: number): Classification[];
7165
8010
  /**
@@ -7321,8 +8166,11 @@ declare class LandscapeBuilder {
7321
8166
  interface RunningTask {
7322
8167
  /** Unique id for this execution (timestamp-based). */
7323
8168
  id: string;
7324
- /** First 200 chars of the user message, for display. */
8169
+ /** First 200 chars of the user message, for dense lists. */
7325
8170
  messagePreview: string;
8171
+ /** The whole request. A task page shows what was actually asked, and the
8172
+ * preview cuts mid-sentence — or mid-JSON, which reads as a bug. */
8173
+ message: string;
7326
8174
  /** Origin channel (telegram, whatsapp, gitlab, api, cron, business, a2a, …). */
7327
8175
  channel: string;
7328
8176
  /** Group / chat / issue id from which the task arrived. */
@@ -7450,9 +8298,9 @@ declare class AgentRegistry {
7450
8298
  * When `atMentionsOnly` is true, only `@`-prefixed mentions are considered.
7451
8299
  * This is used for messages originating from another bot (cross-daemon
7452
8300
  * Telegram cascades, for example) where we don't want bare-word matches
7453
- * like "nadia" in prose or "devops-mtgl" quoted in a reply to trigger
8301
+ * like "marketing" in prose or "devops-globex" quoted in a reply to trigger
7454
8302
  * agents spuriously. Intentional handoffs still work because agents
7455
- * write explicit `@noqta_X_bot` handles.
8303
+ * write explicit `@acme_X_bot` handles.
7456
8304
  */
7457
8305
  findByMention(text: string, opts?: {
7458
8306
  atMentionsOnly?: boolean;
@@ -7478,6 +8326,16 @@ declare class AgentRegistry {
7478
8326
  *
7479
8327
  * Errors are swallowed by design — memory continuity is best-effort,
7480
8328
  * it must never block or break the rotation it's hooked into. */
8329
+ /**
8330
+ * Ask the session-continuity seat whether to rotate before any
8331
+ * mechanical trigger fires. Returns true only for a confident,
8332
+ * active-mode early rotation.
8333
+ *
8334
+ * Never throws: askSeat is fail-open by contract, and everything else
8335
+ * here is a guarded read. Off, shadow, backend error and missing
8336
+ * history all return false, which is today's behaviour exactly.
8337
+ */
8338
+ private maybeRotateForContinuity;
7481
8339
  private captureRotationMemoAsync;
7482
8340
  /**
7483
8341
  * Build peer list for context engine.
@@ -7981,7 +8839,7 @@ declare const businessConfigSchema: z.ZodObject<{
7981
8839
  * existing agentx.json files validate without modification. */
7982
8840
  projects: z.ZodDefault<z.ZodArray<z.ZodObject<{
7983
8841
  /** Project identifier. For GitLab/GitHub: "owner/repo". For
7984
- * noqta-internal projects: a stable string. */
8842
+ * acme-internal projects: a stable string. */
7985
8843
  id: z.ZodString;
7986
8844
  /** AgentId of the PM for this project. Looked up by
7987
8845
  * `Organization.pmFor(project)` at dispatch time. */
@@ -8036,6 +8894,32 @@ declare const businessConfigSchema: z.ZodObject<{
8036
8894
  project?: string | undefined;
8037
8895
  displayName?: string | undefined;
8038
8896
  }>, "many">>;
8897
+ /** Overrides for derived clients. Keyed by client id; absent entries get
8898
+ * defaults, so this stays empty until you need a clock or an
8899
+ * authorization. */
8900
+ clients: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
8901
+ /** Display name. Defaults to the client id. */
8902
+ name: z.ZodOptional<z.ZodString>;
8903
+ /** "client" is someone who is waiting on you and can be let down; "own"
8904
+ * is your own product; "internal" is machinery with no external clock. */
8905
+ kind: z.ZodOptional<z.ZodEnum<["client", "internal", "own"]>>;
8906
+ /** How long a wait may last before it starts costing: "4h", "90m", "2d".
8907
+ * Unset means no external clock, so delay is flat. */
8908
+ respondWithin: z.ZodOptional<z.ZodString>;
8909
+ /** Capabilities an agent may exercise unattended. "*" means all. Ignored
8910
+ * for kind "client" — see mayProceedUnattended(). */
8911
+ standing: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
8912
+ }, "strip", z.ZodTypeAny, {
8913
+ standing: string[];
8914
+ name?: string | undefined;
8915
+ kind?: "client" | "internal" | "own" | undefined;
8916
+ respondWithin?: string | undefined;
8917
+ }, {
8918
+ name?: string | undefined;
8919
+ kind?: "client" | "internal" | "own" | undefined;
8920
+ respondWithin?: string | undefined;
8921
+ standing?: string[] | undefined;
8922
+ }>>>;
8039
8923
  /** Work-tick cadence in minutes during business hours. Default 15. */
8040
8924
  workTickMinutes: z.ZodDefault<z.ZodNumber>;
8041
8925
  /** Max queue depth for an idle agent before skipping the work tick (avoids piling up). */
@@ -8124,6 +9008,12 @@ declare const businessConfigSchema: z.ZodObject<{
8124
9008
  project?: string | undefined;
8125
9009
  displayName?: string | undefined;
8126
9010
  }[];
9011
+ clients: Record<string, {
9012
+ standing: string[];
9013
+ name?: string | undefined;
9014
+ kind?: "client" | "internal" | "own" | undefined;
9015
+ respondWithin?: string | undefined;
9016
+ }>;
8127
9017
  workTickMinutes: number;
8128
9018
  idleQueueThreshold: number;
8129
9019
  standup: {
@@ -8185,6 +9075,12 @@ declare const businessConfigSchema: z.ZodObject<{
8185
9075
  project?: string | undefined;
8186
9076
  displayName?: string | undefined;
8187
9077
  }[] | undefined;
9078
+ clients?: Record<string, {
9079
+ name?: string | undefined;
9080
+ kind?: "client" | "internal" | "own" | undefined;
9081
+ respondWithin?: string | undefined;
9082
+ standing?: string[] | undefined;
9083
+ }> | undefined;
8188
9084
  workTickMinutes?: number | undefined;
8189
9085
  idleQueueThreshold?: number | undefined;
8190
9086
  standup?: {
@@ -8523,11 +9419,27 @@ declare class MessageRouter {
8523
9419
  private inflight;
8524
9420
  /** In-flight mesh forwards (this node is awaiting a peer's response).
8525
9421
  * Counted so the daemon's shutdown drain can wait for these in addition
8526
- * to local agent tasks — otherwise a clawd restart mid-forward kills the
9422
+ * to local agent tasks — otherwise a peer restart mid-forward kills the
8527
9423
  * awaiter, the peer's response lands on a dead connection, and the
8528
9424
  * inflight-replay re-runs the task on the peer. */
8529
9425
  private activeMeshForwards;
8530
9426
  getActiveMeshForwardCount(): number;
9427
+ /** Messages addressed to an agent on a mesh peer that was unreachable at
9428
+ * the moment they arrived, keyed by peer name, replayed when the peer
9429
+ * comes back.
9430
+ *
9431
+ * Before this existed a peer flap was silently destructive: the routing
9432
+ * pipeline saw an agent that no healthy peer advertised, called it
9433
+ * `unknown_agent`, and dropped the message for good. The mesh recovers on
9434
+ * its own within a probe cycle (~60s), but nothing replayed what was lost
9435
+ * in between, so the person who @-mentioned the agent just watched it
9436
+ * ignore them. Deliberately in-memory: a daemon restart drops the queue,
9437
+ * which is the safe direction — a stale replay is worse than a miss.
9438
+ * Bounded by both age and count so a peer that never returns cannot grow
9439
+ * it without limit. */
9440
+ private deferredByPeer;
9441
+ private readonly MESH_DEFER_TTL_MS;
9442
+ private readonly MESH_DEFER_MAX_PER_PEER;
8531
9443
  constructor(registry: AgentRegistry, config: DaemonConfig, hooks?: HookRegistry, log?: (...args: unknown[]) => void);
8532
9444
  private loadDedupFromDisk;
8533
9445
  private scheduleDedupSave;
@@ -8648,7 +9560,7 @@ declare class MessageRouter {
8648
9560
  * Why a comment at all: this used to be ❌-only, on the reasoning that
8649
9561
  * transient failures would pollute the thread. In practice a reporter who
8650
9562
  * @-mentions a bot and gets 👀 then silence assumes the bot is ignoring
8651
- * them and keeps re-pinging — on noqta/minbar#46 that was 9 mentions over
9563
+ * them and keeps re-pinging — on acme/soylent#46 that was 9 mentions over
8652
9564
  * 74 minutes of upstream 529s, every one of them silently dropped. One
8653
9565
  * comment per outage is far cheaper than that. Nothing retries on its own,
8654
9566
  * so the text says plainly that a re-mention is what resumes it.
@@ -8678,6 +9590,27 @@ declare class MessageRouter {
8678
9590
  * Used when the channel adapter resolved the agent but it's not local.
8679
9591
  */
8680
9592
  private handleViaMeshByAgentId;
9593
+ /**
9594
+ * Hold a message addressed to an agent on an unreachable peer.
9595
+ *
9596
+ * Deduped by the same `<channel>:<accountId>:<id>` key the inbound dedupe
9597
+ * uses, because the upstream that delivered the message often redelivers it
9598
+ * while the peer is still down (GitLab retries its webhook), and we do not
9599
+ * want the agent to answer the same mention twice on recovery.
9600
+ */
9601
+ private deferForPeer;
9602
+ /**
9603
+ * Replay everything held for a peer that just came back.
9604
+ *
9605
+ * Runs sequentially: each entry is a real agent turn on the remote node,
9606
+ * and firing a backlog at it in parallel would spike a node that has only
9607
+ * just recovered. Entries older than the TTL are dropped rather than
9608
+ * answered — a reply to a 40-minute-old mention is noise.
9609
+ */
9610
+ private replayDeferred;
9611
+ /** Held-message counts by peer — surfaced to the daemon for /health and
9612
+ * the dashboard so a growing backlog is visible rather than inferred. */
9613
+ getDeferredMeshCounts(): Record<string, number>;
8681
9614
  /**
8682
9615
  * Route to a specific named mesh peer by agentId.
8683
9616
  * Used when preferNode is set on the incoming message.
@@ -8773,8 +9706,8 @@ declare class TelegramAdapter implements ChannelAdapter {
8773
9706
  private groupStore;
8774
9707
  /** Account IDs of bots currently active (member/administrator) in a group.
8775
9708
  * Used by the router to pick the correct bot when an agent has multiple
8776
- * Telegram accounts bound to it (e.g. pm-ksi → both @noqta_ksi_bot and
8777
- * @noqta_pm_ksi_bot) — the in-group account should win, otherwise messages
9709
+ * Telegram accounts bound to it (e.g. pm-initech → both @acme_initech_bot and
9710
+ * @acme_pm_initech_bot) — the in-group account should win, otherwise messages
8778
9711
  * to the absent bot get silently dropped by multi-account-dedup. */
8779
9712
  getGroupBotAccounts(groupId: string): string[];
8780
9713
  /**
@@ -9075,7 +10008,7 @@ declare class WhatsAppAdapter implements ChannelAdapter {
9075
10008
  * Baileys' HistoryMessage shape to the channel-agnostic SeededMessage
9076
10009
  * shape consumed by SessionStore on cold session create. Bounded by the
9077
10010
  * caller's maxMessages/maxChars; fromMe → role:agent. The chatId is the
9078
- * Baileys jid (e.g., "21694xxx@s.whatsapp.net" for DMs). */
10011
+ * Baileys jid (e.g., "1000000xxx@s.whatsapp.net" for DMs). */
9079
10012
  seedHistory(chatId: string, opts: {
9080
10013
  sinceISO?: string;
9081
10014
  maxMessages: number;
@@ -9094,6 +10027,9 @@ interface CronJobState {
9094
10027
  timezone: string;
9095
10028
  agent: string;
9096
10029
  prompt: string;
10030
+ /** Run this shell command instead of dispatching the agent. See the
10031
+ * cron schema in daemon/config.ts for why this exists. */
10032
+ command?: string;
9097
10033
  timeout: number;
9098
10034
  model?: string;
9099
10035
  /** Soft output-length cap appended to the prompt at invocation time.
@@ -9145,6 +10081,23 @@ declare class CronScheduler {
9145
10081
  setNotifyCallback(cb: CronNotifyCallback): void;
9146
10082
  start(): Promise<void>;
9147
10083
  stop(): Promise<void>;
10084
+ /** Node stores a timer delay in a 32-bit signed int. Anything larger is
10085
+ * silently coerced to 1ms — the timer fires IMMEDIATELY and only a
10086
+ * TimeoutOverflowWarning on stderr says why. ~24.8 days. */
10087
+ private static readonly MAX_TIMEOUT_MS;
10088
+ /**
10089
+ * Arm a timer for an absolute moment, however far away.
10090
+ *
10091
+ * A job scheduled further out than 24.8 days used to fire the instant
10092
+ * the daemon started, every restart, forever. A monthly accounting job
10093
+ * set for the 20th ran a month early on every deploy — and because the
10094
+ * only symptom was a warning about integers, it read as noise.
10095
+ *
10096
+ * Long waits are split into hops. Each hop recomputes the remaining time
10097
+ * from the TARGET rather than subtracting a constant, so the schedule
10098
+ * cannot drift across sleeps, clock adjustments or a slow hop.
10099
+ */
10100
+ private armTimer;
9148
10101
  private scheduleNext;
9149
10102
  private scheduleRetry;
9150
10103
  /**
@@ -9154,6 +10107,20 @@ declare class CronScheduler {
9154
10107
  * until the 1c per-source promotion lands.
9155
10108
  */
9156
10109
  private recordCronDecisionInLedger;
10110
+ /**
10111
+ * Run a cron whose work is a shell command, with no model involved.
10112
+ *
10113
+ * Failure handling deliberately mirrors the agent path — same
10114
+ * consecutiveErrors, same notify, same disable-after-three, same retry —
10115
+ * so an operator does not have to learn two sets of cron semantics
10116
+ * depending on how a job happens to be defined.
10117
+ *
10118
+ * Only the output TAIL is kept. The agent prompts this replaces all said
10119
+ * "report the exit code plus the last 10 lines", which was the right
10120
+ * instinct: a run record is read by a person after something broke, and
10121
+ * the end of the output is where the breakage is.
10122
+ */
10123
+ private executeCommandJob;
9157
10124
  private executeJob;
9158
10125
  /**
9159
10126
  * Detect cron jobs that should have fired while the daemon was down.
@@ -9196,6 +10163,15 @@ interface ProviderCapabilities {
9196
10163
  vision: boolean;
9197
10164
  thinking: boolean;
9198
10165
  maxContext: number;
10166
+ /** Can be made to return a value matching a schema, rather than prose the
10167
+ * caller has to parse. False does NOT mean "no structured output" — it
10168
+ * means no *guarantee*, so callers fall back to JSON-in-text plus a
10169
+ * correction round. The claude-code CLI on an OAuth credential is the
10170
+ * case that matters: ClaudeCodeProvider.generateRaw() throws there. */
10171
+ structuredOutput: boolean;
10172
+ /** Exposes per-token logprobs. The only source of a probability that is
10173
+ * the model's own posterior rather than a number it wrote out. */
10174
+ logprobs: boolean;
9199
10175
  }
9200
10176
  declare const PROVIDER_CAPABILITIES: Record<string, ProviderCapabilities>;
9201
10177
  /**