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.
- package/README.md +67 -118
- package/apps/mac-helper/Sources/AgentXHelper/AXTree.swift +159 -0
- package/apps/mac-helper/Sources/AgentXHelper/Brand.swift +63 -0
- package/apps/mac-helper/Sources/AgentXHelper/Focus.swift +97 -0
- package/apps/mac-helper/Sources/AgentXHelper/HUD.swift +179 -0
- package/apps/mac-helper/Sources/AgentXHelper/OCR.swift +117 -0
- package/apps/mac-helper/Sources/AgentXHelper/Pointer.swift +309 -0
- package/apps/mac-helper/Sources/AgentXHelper/Screens.swift +67 -0
- package/apps/mac-helper/Sources/AgentXHelper/Typer.swift +185 -0
- package/apps/mac-helper/Sources/AgentXHelper/Vision.swift +201 -0
- package/apps/mac-helper/Sources/AgentXHelper/main.swift +265 -0
- package/apps/mac-helper/build.sh +39 -0
- package/apps/mac-voice/Resources/Info.plist +18 -0
- package/apps/mac-voice/Sources/AgentXVoice/AgentClient.swift +108 -0
- package/apps/mac-voice/Sources/AgentXVoice/Brand.swift +123 -0
- package/apps/mac-voice/Sources/AgentXVoice/Config.swift +68 -0
- package/apps/mac-voice/Sources/AgentXVoice/Hold.swift +74 -0
- package/apps/mac-voice/Sources/AgentXVoice/Hotkey.swift +76 -0
- package/apps/mac-voice/Sources/AgentXVoice/Markdown.swift +140 -0
- package/apps/mac-voice/Sources/AgentXVoice/Panel.swift +275 -0
- package/apps/mac-voice/Sources/AgentXVoice/Progress.swift +147 -0
- package/apps/mac-voice/Sources/AgentXVoice/Recorder.swift +139 -0
- package/apps/mac-voice/Sources/AgentXVoice/ResultCard.swift +162 -0
- package/apps/mac-voice/Sources/AgentXVoice/SmartPaste.swift +72 -0
- package/apps/mac-voice/Sources/AgentXVoice/Speech.swift +192 -0
- package/apps/mac-voice/Sources/AgentXVoice/StepLabel.swift +159 -0
- package/apps/mac-voice/Sources/AgentXVoice/main.swift +380 -0
- package/apps/mac-voice/build.sh +32 -0
- package/dist/{App-BPNHIGUX.js → App-CKPH3HHF.js} +2 -2
- package/dist/{ChatApp-6XSSZB4U.js → ChatApp-MX7IG4K2.js} +2 -2
- package/dist/agent-2U574KBZ.js +2 -0
- package/dist/article-fields-L4D2BOGY.js +2 -0
- package/dist/article-quality-44ONVGLN.js +3 -0
- package/dist/article-quality-44ONVGLN.js.map +1 -0
- package/dist/{audit-JU3HWISB.js → audit-4245CX6P.js} +2 -2
- package/dist/backfill-MTD2B62I.js +6 -0
- package/dist/backfill-MTD2B62I.js.map +1 -0
- package/dist/{board-dashboard-M3372FLO.js → board-dashboard-QR7CVTKA.js} +1411 -453
- package/dist/board-dashboard-QR7CVTKA.js.map +1 -0
- package/dist/{builtin-FRKAQMFS.js → builtin-B67DMJ3M.js} +2 -2
- package/dist/calibration-ILS5OI44.js +2 -0
- package/dist/{chunk-V3U4OF7L.js → chunk-3LYM22IV.js} +46 -48
- package/dist/chunk-3LYM22IV.js.map +1 -0
- package/dist/chunk-3SCPRYJB.js +5 -0
- package/dist/chunk-3SCPRYJB.js.map +1 -0
- package/dist/chunk-4BR7D2OU.js +36 -0
- package/dist/chunk-4BR7D2OU.js.map +1 -0
- package/dist/{chunk-P4VWIVKN.js → chunk-52ZPELD2.js} +403 -29
- package/dist/chunk-52ZPELD2.js.map +1 -0
- package/dist/chunk-5IA2CYHN.js +5 -0
- package/dist/{chunk-O6YPEOQF.js.map → chunk-5IA2CYHN.js.map} +1 -1
- package/dist/chunk-64CAIB3C.js +9 -0
- package/dist/chunk-64CAIB3C.js.map +1 -0
- package/dist/{chunk-5U35WAZF.js → chunk-77OV7346.js} +6 -6
- package/dist/chunk-77OV7346.js.map +1 -0
- package/dist/chunk-AJ5RMU7X.js +2 -0
- package/dist/chunk-AJ5RMU7X.js.map +1 -0
- package/dist/chunk-AJONZWLT.js +2 -0
- package/dist/chunk-AJONZWLT.js.map +1 -0
- package/dist/chunk-BH3GTCZ6.js +2 -0
- package/dist/chunk-BH3GTCZ6.js.map +1 -0
- package/dist/chunk-E3UJHQGN.js +1189 -0
- package/dist/chunk-E3UJHQGN.js.map +1 -0
- package/dist/chunk-EVWEG3VD.js +3 -0
- package/dist/chunk-EVWEG3VD.js.map +1 -0
- package/dist/chunk-F4HZTZHW.js +2 -0
- package/dist/chunk-F4HZTZHW.js.map +1 -0
- package/dist/chunk-F6CNF7V3.js +25 -0
- package/dist/chunk-F6CNF7V3.js.map +1 -0
- package/dist/chunk-FIOB3MEX.js +2 -0
- package/dist/{chunk-H5D7ATXS.js → chunk-FKBGJYWQ.js} +5 -5
- package/dist/chunk-FKBGJYWQ.js.map +1 -0
- package/dist/{chunk-BVGJSPW4.js → chunk-G2HMRDUQ.js} +7 -7
- package/dist/chunk-G2HMRDUQ.js.map +1 -0
- package/dist/chunk-H2QQU2XV.js +109 -0
- package/dist/chunk-H2QQU2XV.js.map +1 -0
- package/dist/{chunk-LDHPMJ7M.js → chunk-IWMW5432.js} +3 -3
- package/dist/chunk-IWMW5432.js.map +1 -0
- package/dist/chunk-K33GIBSE.js +2 -0
- package/dist/chunk-K33GIBSE.js.map +1 -0
- package/dist/chunk-L2WSPY6S.js +2 -0
- package/dist/chunk-L2WSPY6S.js.map +1 -0
- package/dist/chunk-LCIREYTD.js +54 -0
- package/dist/chunk-LCIREYTD.js.map +1 -0
- package/dist/chunk-MHIMGM4G.js +126 -0
- package/dist/chunk-MHIMGM4G.js.map +1 -0
- package/dist/chunk-P5ZBBEPL.js +13 -0
- package/dist/chunk-P5ZBBEPL.js.map +1 -0
- package/dist/{chunk-JTJIPNXY.js → chunk-PNWNVOEZ.js} +1 -1
- package/dist/chunk-PNWNVOEZ.js.map +1 -0
- package/dist/chunk-QHTQPBHU.js +45 -0
- package/dist/chunk-QHTQPBHU.js.map +1 -0
- package/dist/chunk-S2MNL5V6.js +2 -0
- package/dist/chunk-S2MNL5V6.js.map +1 -0
- package/dist/chunk-SCTIUFL4.js +5 -0
- package/dist/{chunk-K2CAPYES.js.map → chunk-SCTIUFL4.js.map} +1 -1
- package/dist/chunk-ULLAE6LE.js +157 -0
- package/dist/chunk-ULLAE6LE.js.map +1 -0
- package/dist/{chunk-DJEZ2HVU.js → chunk-VDMYBPYB.js} +1 -1
- package/dist/chunk-VDMYBPYB.js.map +1 -0
- package/dist/chunk-VIH7ARPF.js +547 -0
- package/dist/chunk-VIH7ARPF.js.map +1 -0
- package/dist/chunk-W5C2GDNC.js +32 -0
- package/dist/{chunk-JP5IEXR7.js.map → chunk-W5C2GDNC.js.map} +1 -1
- package/dist/chunk-WPMX3VGI.js +3 -0
- package/dist/chunk-WPMX3VGI.js.map +1 -0
- package/dist/chunk-YLBERT7N.js +24 -0
- package/dist/chunk-YLBERT7N.js.map +1 -0
- package/dist/chunk-YLGIZRHV.js +114 -0
- package/dist/chunk-YLGIZRHV.js.map +1 -0
- package/dist/chunk-ZMYGXHPT.js +121 -0
- package/dist/chunk-ZMYGXHPT.js.map +1 -0
- package/dist/chunk-ZTEU5JVQ.js +2 -0
- package/dist/chunk-ZTEU5JVQ.js.map +1 -0
- package/dist/{chunk-2WVX3LEC.js → chunk-ZVP6GB4G.js} +1 -1
- package/dist/chunk-ZVP6GB4G.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/client-ZLSXGPTV.js +2 -0
- package/dist/{compaction-NWEMOSHA.js → compaction-FD4R23HZ.js} +4 -4
- package/dist/config-HMW3EBZL.js +2 -0
- package/dist/config-mutator-4SZ5YEVD.js +2 -0
- package/dist/{conflict-detector-D7VIYPDI.js → conflict-detector-ZPOT3M2C.js} +2 -2
- package/dist/conflict-detector-ZPOT3M2C.js.map +1 -0
- package/dist/context-planner-AQHJMVY2.js +17 -0
- package/dist/context-planner-AQHJMVY2.js.map +1 -0
- package/dist/debug-3MEUO2P2.js +2 -0
- package/dist/{discover-XJXQXXIO.js → discover-D4VVRNAI.js} +2 -2
- package/dist/discover-D4VVRNAI.js.map +1 -0
- package/dist/doctor-LRYV3QLK.js +2 -0
- package/dist/editor-chat-OB7IQOB5.js +137 -0
- package/dist/editor-chat-OB7IQOB5.js.map +1 -0
- package/dist/entry-triage-LK34TSQD.js +2 -0
- package/dist/entry-triage-LK34TSQD.js.map +1 -0
- package/dist/facts-YVEJOM7O.js +22 -0
- package/dist/facts-YVEJOM7O.js.map +1 -0
- package/dist/heal-FVLBHYP7.js +2 -0
- package/dist/index.d.ts +1040 -64
- package/dist/index.js +12 -19
- package/dist/index.js.map +1 -1
- package/dist/{ingest-whatsapp-LZE62INA.js → ingest-whatsapp-NS4OWDOU.js} +2 -2
- package/dist/loader-4ZGTK7LD.js +2 -0
- package/dist/loader-BOKE5M5S.js +2 -0
- package/dist/memory-extract-F5ZHWY5E.js +2 -0
- package/dist/{migrate-v2-QO7SLKIM.js → migrate-v2-V4WN2VVM.js} +2 -2
- package/dist/ntfy-X7EPB3TG.js +4 -0
- package/dist/ntfy-X7EPB3TG.js.map +1 -0
- package/dist/processes-WU23U2OJ.js +2 -0
- package/dist/program-GSZ5AYAM.js +2 -0
- package/dist/{projects-api-KRME2YKZ.js → projects-api-QE6L65SK.js} +2 -2
- package/dist/{projects-mutate-3NHVG437.js → projects-mutate-MY7JTLSZ.js} +2 -2
- package/dist/providers-KO2DODIO.js +2 -0
- package/dist/query-SQDHE4HV.js +2 -0
- package/dist/questions-4B4KSPXG.js +3 -0
- package/dist/questions-4B4KSPXG.js.map +1 -0
- package/dist/recipes-7S4MC5OJ.js +2 -0
- package/dist/registry-LE6FWYZC.js +2 -0
- package/dist/review-candidates-RQU5KNZM.js +4 -0
- package/dist/review-candidates-RQU5KNZM.js.map +1 -0
- package/dist/review-store-B4YE3EFK.js +4 -0
- package/dist/review-store-B4YE3EFK.js.map +1 -0
- package/dist/{rotation-memo-B3EXXSEH.js → rotation-memo-7T75BLEX.js} +2 -2
- package/dist/routing-ILERJXB6.js +2 -0
- package/dist/runner-YRBVNYTY.js +2 -0
- package/dist/scheduler-BFM3EINS.js +2 -0
- package/dist/seat-7WM7II2B.js +2 -0
- package/dist/select-X4KVMOP5.js +2 -0
- package/dist/select-X4KVMOP5.js.map +1 -0
- package/dist/store-MCOA6N4F.js +2 -0
- package/dist/{subagent-WV7QKQ3L.js → subagent-2SJHSSJS.js} +2 -2
- package/dist/{surface-usage-PRL6Z4U3.js → surface-usage-NS74AXSE.js} +2 -2
- package/dist/timers-PCB4ZIBD.js +2 -0
- package/dist/triage-backtest-JNO7RKX7.js +2 -0
- package/dist/triage-backtest-JNO7RKX7.js.map +1 -0
- package/dist/types-H5ENIUIT.js +2 -0
- package/dist/types-OIFU3KSQ.js +2 -0
- package/dist/types-OIFU3KSQ.js.map +1 -0
- package/dist/web/workflow-editor.global.js +1542 -0
- package/dist/web/workflow-editor.global.js.map +1 -0
- package/dist/{whatsapp-state-XMTCSRXU.js → whatsapp-state-6D6FHHD2.js} +2 -2
- package/dist/wiki-2AUFSIKO.js +2 -0
- package/dist/wiki-2AUFSIKO.js.map +1 -0
- package/dist/workflows/templates/branching.yaml +1 -1
- package/dist/{workspace-setup-TBQAHYHJ.js → workspace-setup-B3F3TUDE.js} +2 -2
- package/dist/workspace-setup-B3F3TUDE.js.map +1 -0
- package/package.json +14 -3
- package/scripts/postinstall.mjs +80 -0
- package/dist/agent-5QMITZT6.js +0 -2
- package/dist/architect-SEPWMWS4.js +0 -2
- package/dist/board-dashboard-M3372FLO.js.map +0 -1
- package/dist/chunk-2WVX3LEC.js.map +0 -1
- package/dist/chunk-3WQFCIB6.js +0 -24
- package/dist/chunk-3WQFCIB6.js.map +0 -1
- package/dist/chunk-4YCH6IZV.js +0 -2
- package/dist/chunk-53NRX2NA.js +0 -2
- package/dist/chunk-53NRX2NA.js.map +0 -1
- package/dist/chunk-5U35WAZF.js.map +0 -1
- package/dist/chunk-BFXONUUN.js +0 -108
- package/dist/chunk-BFXONUUN.js.map +0 -1
- package/dist/chunk-BFZUG66X.js +0 -45
- package/dist/chunk-BFZUG66X.js.map +0 -1
- package/dist/chunk-BTHHSY7D.js +0 -13
- package/dist/chunk-BTHHSY7D.js.map +0 -1
- package/dist/chunk-BVGJSPW4.js.map +0 -1
- package/dist/chunk-D46VZ7K7.js +0 -116
- package/dist/chunk-D46VZ7K7.js.map +0 -1
- package/dist/chunk-DJEZ2HVU.js.map +0 -1
- package/dist/chunk-E5CXCI33.js +0 -155
- package/dist/chunk-E5CXCI33.js.map +0 -1
- package/dist/chunk-FDWOECJY.js +0 -54
- package/dist/chunk-FDWOECJY.js.map +0 -1
- package/dist/chunk-H5D7ATXS.js.map +0 -1
- package/dist/chunk-HR4JSRZS.js +0 -3
- package/dist/chunk-HR4JSRZS.js.map +0 -1
- package/dist/chunk-ISEBLHWX.js +0 -118
- package/dist/chunk-ISEBLHWX.js.map +0 -1
- package/dist/chunk-JP5IEXR7.js +0 -32
- package/dist/chunk-JTJIPNXY.js.map +0 -1
- package/dist/chunk-K2CAPYES.js +0 -5
- package/dist/chunk-LDHPMJ7M.js.map +0 -1
- package/dist/chunk-METYYZKQ.js +0 -1115
- package/dist/chunk-METYYZKQ.js.map +0 -1
- package/dist/chunk-MTAPOCGA.js +0 -47
- package/dist/chunk-MTAPOCGA.js.map +0 -1
- package/dist/chunk-O6YPEOQF.js +0 -5
- package/dist/chunk-P4VWIVKN.js.map +0 -1
- package/dist/chunk-SR3X25TN.js +0 -3
- package/dist/chunk-SR3X25TN.js.map +0 -1
- package/dist/chunk-UHE5FCPB.js +0 -431
- package/dist/chunk-UHE5FCPB.js.map +0 -1
- package/dist/chunk-V3U4OF7L.js.map +0 -1
- package/dist/chunk-VJUTQAPJ.js +0 -2
- package/dist/chunk-VJUTQAPJ.js.map +0 -1
- package/dist/chunk-VT5XYFDD.js +0 -126
- package/dist/chunk-VT5XYFDD.js.map +0 -1
- package/dist/client-HGKAC6VP.js +0 -2
- package/dist/config-A4RWEJHV.js +0 -2
- package/dist/config-mutator-MNSFUN7D.js +0 -2
- package/dist/conflict-detector-D7VIYPDI.js.map +0 -1
- package/dist/context-planner-45GEWKGL.js +0 -17
- package/dist/context-planner-45GEWKGL.js.map +0 -1
- package/dist/debug-N3B5NVJU.js +0 -2
- package/dist/discover-XJXQXXIO.js.map +0 -1
- package/dist/doctor-3Q36ZFE6.js +0 -2
- package/dist/heal-HZ3EQD52.js +0 -2
- package/dist/loader-5CA3O5GM.js +0 -2
- package/dist/loader-6IHUCPVO.js +0 -2
- package/dist/memory-extract-AENFVVO5.js +0 -2
- package/dist/processes-UIC4XXA6.js +0 -2
- package/dist/program-SAUNRCCD.js +0 -2
- package/dist/providers-L27BJ5A6.js +0 -2
- package/dist/query-HZYYRCLU.js +0 -2
- package/dist/recipes-EPLE2SNT.js +0 -2
- package/dist/registry-HK3WQ7BS.js +0 -2
- package/dist/runner-BFYDWPUO.js +0 -2
- package/dist/scheduler-6T2SU5ST.js +0 -2
- package/dist/store-I3HEWVLQ.js +0 -2
- package/dist/timers-5LPZN55J.js +0 -2
- package/dist/types-VECTMYTO.js +0 -2
- package/dist/types-Y6ZCZ52Z.js +0 -2
- package/dist/wiki-M6YNRFC4.js +0 -2
- /package/dist/{App-BPNHIGUX.js.map → App-CKPH3HHF.js.map} +0 -0
- /package/dist/{ChatApp-6XSSZB4U.js.map → ChatApp-MX7IG4K2.js.map} +0 -0
- /package/dist/{agent-5QMITZT6.js.map → agent-2U574KBZ.js.map} +0 -0
- /package/dist/{architect-SEPWMWS4.js.map → article-fields-L4D2BOGY.js.map} +0 -0
- /package/dist/{audit-JU3HWISB.js.map → audit-4245CX6P.js.map} +0 -0
- /package/dist/{builtin-FRKAQMFS.js.map → builtin-B67DMJ3M.js.map} +0 -0
- /package/dist/{chunk-4YCH6IZV.js.map → calibration-ILS5OI44.js.map} +0 -0
- /package/dist/{client-HGKAC6VP.js.map → chunk-FIOB3MEX.js.map} +0 -0
- /package/dist/{config-A4RWEJHV.js.map → client-ZLSXGPTV.js.map} +0 -0
- /package/dist/{compaction-NWEMOSHA.js.map → compaction-FD4R23HZ.js.map} +0 -0
- /package/dist/{config-mutator-MNSFUN7D.js.map → config-HMW3EBZL.js.map} +0 -0
- /package/dist/{debug-N3B5NVJU.js.map → config-mutator-4SZ5YEVD.js.map} +0 -0
- /package/dist/{doctor-3Q36ZFE6.js.map → debug-3MEUO2P2.js.map} +0 -0
- /package/dist/{heal-HZ3EQD52.js.map → doctor-LRYV3QLK.js.map} +0 -0
- /package/dist/{loader-5CA3O5GM.js.map → heal-FVLBHYP7.js.map} +0 -0
- /package/dist/{ingest-whatsapp-LZE62INA.js.map → ingest-whatsapp-NS4OWDOU.js.map} +0 -0
- /package/dist/{loader-6IHUCPVO.js.map → loader-4ZGTK7LD.js.map} +0 -0
- /package/dist/{memory-extract-AENFVVO5.js.map → loader-BOKE5M5S.js.map} +0 -0
- /package/dist/{processes-UIC4XXA6.js.map → memory-extract-F5ZHWY5E.js.map} +0 -0
- /package/dist/{migrate-v2-QO7SLKIM.js.map → migrate-v2-V4WN2VVM.js.map} +0 -0
- /package/dist/{program-SAUNRCCD.js.map → processes-WU23U2OJ.js.map} +0 -0
- /package/dist/{providers-L27BJ5A6.js.map → program-GSZ5AYAM.js.map} +0 -0
- /package/dist/{projects-api-KRME2YKZ.js.map → projects-api-QE6L65SK.js.map} +0 -0
- /package/dist/{projects-mutate-3NHVG437.js.map → projects-mutate-MY7JTLSZ.js.map} +0 -0
- /package/dist/{query-HZYYRCLU.js.map → providers-KO2DODIO.js.map} +0 -0
- /package/dist/{recipes-EPLE2SNT.js.map → query-SQDHE4HV.js.map} +0 -0
- /package/dist/{registry-HK3WQ7BS.js.map → recipes-7S4MC5OJ.js.map} +0 -0
- /package/dist/{runner-BFYDWPUO.js.map → registry-LE6FWYZC.js.map} +0 -0
- /package/dist/{rotation-memo-B3EXXSEH.js.map → rotation-memo-7T75BLEX.js.map} +0 -0
- /package/dist/{scheduler-6T2SU5ST.js.map → routing-ILERJXB6.js.map} +0 -0
- /package/dist/{store-I3HEWVLQ.js.map → runner-YRBVNYTY.js.map} +0 -0
- /package/dist/{surface-usage-PRL6Z4U3.js.map → scheduler-BFM3EINS.js.map} +0 -0
- /package/dist/{timers-5LPZN55J.js.map → seat-7WM7II2B.js.map} +0 -0
- /package/dist/{types-VECTMYTO.js.map → store-MCOA6N4F.js.map} +0 -0
- /package/dist/{subagent-WV7QKQ3L.js.map → subagent-2SJHSSJS.js.map} +0 -0
- /package/dist/{types-Y6ZCZ52Z.js.map → surface-usage-NS74AXSE.js.map} +0 -0
- /package/dist/{wiki-M6YNRFC4.js.map → timers-PCB4ZIBD.js.map} +0 -0
- /package/dist/{workspace-setup-TBQAHYHJ.js.map → types-H5ENIUIT.js.map} +0 -0
- /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
|
|
427
|
-
/** The
|
|
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
|
|
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. "
|
|
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.
|
|
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
|
|
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
|
|
629
|
-
* agent's tool list — keeps non-
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
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 (
|
|
1516
|
-
*
|
|
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-
|
|
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", "
|
|
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 (
|
|
1964
|
-
*
|
|
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-
|
|
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", "
|
|
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-
|
|
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 `@
|
|
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
|
-
/**
|
|
4969
|
-
*
|
|
4970
|
-
* live operator visibility
|
|
4971
|
-
|
|
4972
|
-
|
|
4973
|
-
|
|
4974
|
-
*
|
|
4975
|
-
|
|
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
|
|
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
|
-
* ("
|
|
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.
|
|
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
|
|
5372
|
-
* the author to pick from
|
|
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
|
|
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
|
|
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 "
|
|
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 →
|
|
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
|
|
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 "
|
|
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 `@
|
|
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
|
-
*
|
|
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
|
|
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
|
|
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-
|
|
8777
|
-
* @
|
|
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., "
|
|
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
|
/**
|