awb-agent-manager 1.6.76 → 1.6.78
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 +18 -9
- package/dist/lib/agent-manager-commands.d.ts +2 -0
- package/dist/lib/agent-manager-commands.js +31 -13
- package/dist/lib/agent-manager-commands.js.map +1 -1
- package/dist/lib/cli-adapters/index.d.ts +3 -0
- package/dist/lib/cli-adapters/index.js +12 -3
- package/dist/lib/cli-adapters/index.js.map +1 -1
- package/dist/lib/constants.d.ts +1 -0
- package/dist/lib/constants.js +1 -0
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/event-dispatcher.d.ts +4 -0
- package/dist/lib/event-dispatcher.js +146 -0
- package/dist/lib/event-dispatcher.js.map +1 -1
- package/dist/lib/instance-heartbeat.d.ts +3 -0
- package/dist/lib/instance-heartbeat.js +4 -0
- package/dist/lib/instance-heartbeat.js.map +1 -1
- package/dist/lib/managed-agent-context.d.ts +2 -0
- package/dist/lib/managed-agent-context.js +1 -0
- package/dist/lib/managed-agent-context.js.map +1 -1
- package/dist/lib/managed-agent-store.d.ts +2 -0
- package/dist/lib/managed-agent-store.js.map +1 -1
- package/dist/lib/orphan-cleanup.d.ts +1 -0
- package/dist/lib/orphan-cleanup.js +56 -1
- package/dist/lib/orphan-cleanup.js.map +1 -1
- package/dist/lib/outbox.d.ts +28 -0
- package/dist/lib/outbox.js +169 -0
- package/dist/lib/outbox.js.map +1 -0
- package/dist/lib/rest.d.ts +36 -2
- package/dist/lib/rest.js +78 -6
- package/dist/lib/rest.js.map +1 -1
- package/dist/lib/runtime/acp/acp-client.d.ts +29 -0
- package/dist/lib/runtime/acp/acp-client.js +227 -0
- package/dist/lib/runtime/acp/acp-client.js.map +1 -0
- package/dist/lib/runtime/acp/acp-types.d.ts +118 -0
- package/dist/lib/runtime/acp/acp-types.js +2 -0
- package/dist/lib/runtime/acp/acp-types.js.map +1 -0
- package/dist/lib/runtime/acp/json-rpc-peer.d.ts +34 -0
- package/dist/lib/runtime/acp/json-rpc-peer.js +262 -0
- package/dist/lib/runtime/acp/json-rpc-peer.js.map +1 -0
- package/dist/lib/runtime/collaboration-governor.d.ts +29 -0
- package/dist/lib/runtime/collaboration-governor.js +125 -0
- package/dist/lib/runtime/collaboration-governor.js.map +1 -0
- package/dist/lib/runtime/hermes/hermes-process.d.ts +26 -0
- package/dist/lib/runtime/hermes/hermes-process.js +128 -0
- package/dist/lib/runtime/hermes/hermes-process.js.map +1 -0
- package/dist/lib/runtime/hermes/hermes-runtime.d.ts +38 -0
- package/dist/lib/runtime/hermes/hermes-runtime.js +146 -0
- package/dist/lib/runtime/hermes/hermes-runtime.js.map +1 -0
- package/dist/lib/runtime/hermes/hermes-session-store.d.ts +29 -0
- package/dist/lib/runtime/hermes/hermes-session-store.js +96 -0
- package/dist/lib/runtime/hermes/hermes-session-store.js.map +1 -0
- package/dist/lib/runtime/runtime-events.d.ts +48 -0
- package/dist/lib/runtime/runtime-events.js +2 -0
- package/dist/lib/runtime/runtime-events.js.map +1 -0
- package/dist/lib/runtime/runtime-health.d.ts +22 -0
- package/dist/lib/runtime/runtime-health.js +105 -0
- package/dist/lib/runtime/runtime-health.js.map +1 -0
- package/dist/lib/runtime/runtime-registry.d.ts +7 -0
- package/dist/lib/runtime/runtime-registry.js +142 -0
- package/dist/lib/runtime/runtime-registry.js.map +1 -0
- package/dist/lib/runtime/runtime-supervisor.d.ts +54 -0
- package/dist/lib/runtime/runtime-supervisor.js +234 -0
- package/dist/lib/runtime/runtime-supervisor.js.map +1 -0
- package/dist/lib/runtime/runtime-types.d.ts +36 -0
- package/dist/lib/runtime/runtime-types.js +11 -0
- package/dist/lib/runtime/runtime-types.js.map +1 -0
- package/dist/lib/service-install.js +1 -1
- package/dist/lib/setup.js +1 -1
- package/dist/lib/setup.js.map +1 -1
- package/dist/lib/skills/skill-materializer.d.ts +23 -0
- package/dist/lib/skills/skill-materializer.js +82 -0
- package/dist/lib/skills/skill-materializer.js.map +1 -0
- package/dist/lib/ticket-ref-capture.js +1 -0
- package/dist/lib/ticket-ref-capture.js.map +1 -1
- package/dist/main.js +110 -19
- package/dist/main.js.map +1 -1
- package/dist/package.json +2 -2
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-rpc-peer.js","sourceRoot":"","sources":["../../../../src/lib/runtime/acp/json-rpc-peer.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,IAAI,CAAuB;IAC3B,QAAQ,CAAiB;IACzB,OAAO,CAAU;IACjB,IAAI,CAAW;IAExB,YACE,IAA0B,EAC1B,OAAe,EACf,UAKI,EAAE;QAEN,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;CACF;AAuBD,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAC1C,MAAM,sBAAsB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/C,MAAM,yBAAyB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,SAAS,MAAM,CAAC,KAAa,EAAE,GAAW;IACxC,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,KAAK;SACT,OAAO,CACN,iIAAiI,EACjI,gBAAgB,CACjB;SACA,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,OAAO,WAAW;IACb,MAAM,CAAiC;IACvC,QAAQ,CAEM;IACd,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IACzD,OAAO,GAAG,CAAC,CAAC;IACZ,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChC,aAAa,GAAG,EAAE,CAAC;IACnB,WAAW,GAA4B,IAAI,CAAC;IAC5C,OAAO,GAAG,KAAK,CAAC;IAEhB,YAAY,KAAqC,EAAE,UAA8B,EAAE;QACjF,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG;YACd,GAAG,OAAO;YACV,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,0BAA0B;YACxE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,sBAAsB;YAC5D,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,yBAAyB;SACtE,CAAC;QAEF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;YACjD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QACvE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,oBAAoB,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAClC,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO;YACzB,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAC7B,oBAAoB,EACpB,4BAA4B,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,MAAM,CAAC,GAAG,EACrE,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO,CACL,MAAc,EACd,MAAgB,EAChB,UAAiC,EAAE;QAEnC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC5B,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,aAAa,EAAE,wBAAwB,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACtE,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzB,MAAM,CAAC,IAAI,gBAAgB,CACzB,aAAa,EACb,+BAA+B,SAAS,OAAO,MAAM,EAAE,CACxD,CAAC,CAAC;YACL,CAAC,EAAE,SAAS,CAAC,CAAC;YAEd,MAAM,OAAO,GAAmB;gBAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAU,CAAC;gBACvC,MAAM;gBACN,KAAK;aACN,CAAC;YACF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAG,GAAG,EAAE;oBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACtC,IAAI,CAAC,OAAO;wBAAE,OAAO;oBACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACzB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC5B,MAAM,CAAC,IAAI,gBAAgB,CAAC,aAAa,EAAE,wBAAwB,MAAM,EAAE,CAAC,CAAC,CAAC;gBAChF,CAAC,CAAC;gBACF,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClE,OAAO,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC/B,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,MAAc,EAAE,MAAgB;QACrC,IAAI,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,CAAC,WAAW,CAAC;QAC7C,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,gBAAgB,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,cAAc,CAAC,IAAI,gBAAgB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,OAAuB;QAC5B,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;QAC/C,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC/D,MAAM,IAAI,gBAAgB,CACxB,uBAAuB,EACvB,wDAAwD,CACzD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,6BAA6B,EAAE;gBAC5E,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,cAAc,CAAC,KAAa;QAC1B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAC7C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY;eACrD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAC7B,uBAAuB,EACvB,mDAAmD,CACpD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,OAAO,KAAK,CAAC,CAAC;gBAAE,MAAM;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAC9D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAChC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAC7C,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAC7B,uBAAuB,EACvB,mDAAmD,CACpD,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,WAAW;gBAAE,OAAO;QAC/B,CAAC;IACH,CAAC;IAED,cAAc,CAAC,KAAa;QAC1B,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI;gBAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAC7B,uBAAuB,EACvB,qCAAqC,EACrC,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAC7B,uBAAuB,EACvB,kDAAkD,CACnD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,KAAgC,CAAC;QACjD,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAC7B,uBAAuB,EACvB,oCAAoC,CACrC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC1B,KAAK,IAAI,CAAC,sBAAsB,CAC9B,OAAO,CAAC,EAAe,EACvB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,MAAM,CACf,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,OAAO,CAAC,OAAO,CAClB,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAC/D,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC3B,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAC7B,uBAAuB,EACvB,+BAA+B,CAChC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,EAAe,CAAC;QACnC,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,OAAoC,CAAC;YACpD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,gBAAgB,CAC1C,kBAAkB,EAClB,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,4BAA4B,EACrD,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAC1D,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAC7B,uBAAuB,EACvB,2CAA2C,CAC5C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,EAAa,EACb,MAAc,EACd,MAAe;QAEf,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC7B,IAAI,CAAC,MAAM,CAAC;oBACV,OAAO,EAAE,KAAK;oBACd,EAAE;oBACF,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,qBAAqB,MAAM,EAAE,EAAE;iBAChE,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7D,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC;gBACV,OAAO,EAAE,KAAK;gBACd,EAAE;gBACF,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC,KAAK;oBACZ,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B;iBAClF;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,CAAC,EAAa,EAAE,SAAkB,EAAE,KAAc;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,IAAI,SAAS;YAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;;YACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,cAAc,CAAC,KAAuB;QACpC,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAuB;QAC3B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAC7C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { AcpPermissionRequest } from './acp/acp-types.js';
|
|
2
|
+
import type { RuntimeEvent } from './runtime-events.js';
|
|
3
|
+
import type { AgentRuntimeConfig } from './runtime-types.js';
|
|
4
|
+
export declare class CollaborationPolicyError extends Error {
|
|
5
|
+
readonly code = "runtime_collaboration_denied";
|
|
6
|
+
constructor(message: string);
|
|
7
|
+
}
|
|
8
|
+
export declare function isChildTool(value: {
|
|
9
|
+
title?: string;
|
|
10
|
+
kind?: string;
|
|
11
|
+
}): boolean;
|
|
12
|
+
interface ChildRequest {
|
|
13
|
+
childId: string;
|
|
14
|
+
title: string;
|
|
15
|
+
depth: number;
|
|
16
|
+
tools: string[];
|
|
17
|
+
skills: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare class CollaborationGovernor {
|
|
20
|
+
#private;
|
|
21
|
+
assertStrategy(config: AgentRuntimeConfig, hostHealthy: boolean): void;
|
|
22
|
+
reservePermission(sessionKey: string, config: AgentRuntimeConfig, request: AcpPermissionRequest, hostHealthy: boolean): ChildRequest | null;
|
|
23
|
+
observeStarted(sessionKey: string, config: AgentRuntimeConfig, event: Extract<RuntimeEvent, {
|
|
24
|
+
type: 'child_started';
|
|
25
|
+
}>, hostHealthy: boolean): ChildRequest;
|
|
26
|
+
finish(sessionKey: string, childId: string): void;
|
|
27
|
+
clear(sessionKey: string): void;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
export class CollaborationPolicyError extends Error {
|
|
2
|
+
code = 'runtime_collaboration_denied';
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = 'CollaborationPolicyError';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export function isChildTool(value) {
|
|
9
|
+
const marker = `${value.kind || ''} ${value.title || ''}`.toLowerCase();
|
|
10
|
+
return /\b(delegate|delegation|subagent|sub-agent|spawn[_ -]?agent|swarm)\b/.test(marker);
|
|
11
|
+
}
|
|
12
|
+
const CHILD_FORBIDDEN_TOOLS = new Set([
|
|
13
|
+
'move_ticket',
|
|
14
|
+
'move_ticket_to_board',
|
|
15
|
+
'record_agreement',
|
|
16
|
+
'propose_move',
|
|
17
|
+
'archive_ticket',
|
|
18
|
+
'unarchive_ticket',
|
|
19
|
+
'run_action',
|
|
20
|
+
]);
|
|
21
|
+
function objectValue(value) {
|
|
22
|
+
return value && typeof value === 'object' && !Array.isArray(value)
|
|
23
|
+
? value
|
|
24
|
+
: {};
|
|
25
|
+
}
|
|
26
|
+
function strings(value) {
|
|
27
|
+
return Array.isArray(value)
|
|
28
|
+
? value.filter((entry) => typeof entry === 'string')
|
|
29
|
+
.map((entry) => entry.trim())
|
|
30
|
+
.filter(Boolean)
|
|
31
|
+
.slice(0, 100)
|
|
32
|
+
: [];
|
|
33
|
+
}
|
|
34
|
+
function integer(value, fallback, min, max) {
|
|
35
|
+
return Number.isInteger(value)
|
|
36
|
+
? Math.min(max, Math.max(min, Number(value)))
|
|
37
|
+
: fallback;
|
|
38
|
+
}
|
|
39
|
+
function requestFrom(value) {
|
|
40
|
+
const record = value;
|
|
41
|
+
const raw = objectValue(record.input ?? record.rawInput ?? record.raw_input);
|
|
42
|
+
return {
|
|
43
|
+
childId: String(record.toolCallId ?? record.childRunId ?? ''),
|
|
44
|
+
title: String(value.title || '').slice(0, 240),
|
|
45
|
+
depth: integer(raw.depth ?? raw.child_depth, 1, 1, 100),
|
|
46
|
+
tools: strings(raw.tools ?? raw.allowed_tools),
|
|
47
|
+
skills: strings(raw.skills ?? raw.skill_ids),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function configuredSet(extra, key) {
|
|
51
|
+
return new Set(strings(extra[key]));
|
|
52
|
+
}
|
|
53
|
+
export class CollaborationGovernor {
|
|
54
|
+
#sessions = new Map();
|
|
55
|
+
assertStrategy(config, hostHealthy) {
|
|
56
|
+
if (config.strategy === 'swarm' && !hostHealthy) {
|
|
57
|
+
throw new CollaborationPolicyError('Swarm requires a healthy Hermes ACP capability probe');
|
|
58
|
+
}
|
|
59
|
+
const configuredTools = strings(config.extra?.allowed_child_tools);
|
|
60
|
+
const forbidden = configuredTools.find((tool) => CHILD_FORBIDDEN_TOOLS.has(tool));
|
|
61
|
+
if (forbidden) {
|
|
62
|
+
throw new CollaborationPolicyError(`Child tool ${forbidden} can perform a terminal or consensus action`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
reservePermission(sessionKey, config, request, hostHealthy) {
|
|
66
|
+
if (!isChildTool(request.toolCall))
|
|
67
|
+
return null;
|
|
68
|
+
return this.#reserve(sessionKey, config, requestFrom(request.toolCall), hostHealthy);
|
|
69
|
+
}
|
|
70
|
+
observeStarted(sessionKey, config, event, hostHealthy) {
|
|
71
|
+
return this.#reserve(sessionKey, config, requestFrom(event), hostHealthy);
|
|
72
|
+
}
|
|
73
|
+
finish(sessionKey, childId) {
|
|
74
|
+
this.#sessions.get(sessionKey)?.active.delete(childId);
|
|
75
|
+
}
|
|
76
|
+
clear(sessionKey) {
|
|
77
|
+
this.#sessions.delete(sessionKey);
|
|
78
|
+
}
|
|
79
|
+
#reserve(sessionKey, config, request, hostHealthy) {
|
|
80
|
+
if (config.strategy === 'single') {
|
|
81
|
+
throw new CollaborationPolicyError('The single strategy forbids runtime child creation');
|
|
82
|
+
}
|
|
83
|
+
this.assertStrategy(config, hostHealthy);
|
|
84
|
+
const state = this.#sessions.get(sessionKey) ?? {
|
|
85
|
+
total: 0,
|
|
86
|
+
active: new Map(),
|
|
87
|
+
};
|
|
88
|
+
const duplicate = state.active.get(request.childId);
|
|
89
|
+
if (duplicate)
|
|
90
|
+
return duplicate;
|
|
91
|
+
const extra = config.extra ?? {};
|
|
92
|
+
const maxChildren = config.max_children ?? 3;
|
|
93
|
+
const maxIterations = config.max_iterations ?? maxChildren;
|
|
94
|
+
const maxConcurrency = integer(extra.max_concurrency, Math.min(maxChildren, 3), 1, maxChildren);
|
|
95
|
+
const maxDepth = integer(extra.max_depth, 2, 1, 8);
|
|
96
|
+
if (request.depth > maxDepth) {
|
|
97
|
+
throw new CollaborationPolicyError(`Child depth ${request.depth} exceeds max_depth ${maxDepth}`);
|
|
98
|
+
}
|
|
99
|
+
if (state.active.size >= maxConcurrency) {
|
|
100
|
+
throw new CollaborationPolicyError(`Child concurrency exceeds max_concurrency ${maxConcurrency}`);
|
|
101
|
+
}
|
|
102
|
+
if (state.total >= maxChildren) {
|
|
103
|
+
throw new CollaborationPolicyError(`Child budget exceeds max_children ${maxChildren}`);
|
|
104
|
+
}
|
|
105
|
+
if (state.total >= maxIterations) {
|
|
106
|
+
throw new CollaborationPolicyError(`Delegation loop exceeds max_iterations ${maxIterations}`);
|
|
107
|
+
}
|
|
108
|
+
const toolSubset = configuredSet(extra, 'allowed_child_tools');
|
|
109
|
+
const skillSubset = configuredSet(extra, 'allowed_child_skills');
|
|
110
|
+
if (request.tools.some((tool) => !toolSubset.has(tool))) {
|
|
111
|
+
throw new CollaborationPolicyError('Child requested a tool outside allowed_child_tools');
|
|
112
|
+
}
|
|
113
|
+
if (request.tools.some((tool) => CHILD_FORBIDDEN_TOOLS.has(tool))) {
|
|
114
|
+
throw new CollaborationPolicyError('Children cannot perform terminal ticket transitions or consensus actions');
|
|
115
|
+
}
|
|
116
|
+
if (request.skills.some((skill) => !skillSubset.has(skill))) {
|
|
117
|
+
throw new CollaborationPolicyError('Child requested a skill outside allowed_child_skills');
|
|
118
|
+
}
|
|
119
|
+
state.total++;
|
|
120
|
+
state.active.set(request.childId, request);
|
|
121
|
+
this.#sessions.set(sessionKey, state);
|
|
122
|
+
return request;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=collaboration-governor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collaboration-governor.js","sourceRoot":"","sources":["../../../src/lib/runtime/collaboration-governor.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,IAAI,GAAG,8BAA8B,CAAC;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,KAG3B;IACC,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;IACxE,OAAO,qEAAqE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5F,CAAC;AAeD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,aAAa;IACb,sBAAsB;IACtB,kBAAkB;IAClB,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,YAAY;CACb,CAAC,CAAC;AAEH,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAC,KAAgC;QAClC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;aAClE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC;aACf,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QAChB,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,OAAO,CAAC,KAAc,EAAE,QAAgB,EAAE,GAAW,EAAE,GAAW;IACzE,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QAC5B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAClB,KAA0F;IAE1F,MAAM,MAAM,GAAG,KAA2C,CAAC;IAC3D,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7E,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;QAC7D,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QAC9C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;QACvD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,aAAa,CAAC;QAC9C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAA8B,EAAE,GAAW;IAChE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,OAAO,qBAAqB;IACvB,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;IAErD,cAAc,CAAC,MAA0B,EAAE,WAAoB;QAC7D,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,IAAI,wBAAwB,CAChC,sDAAsD,CACvD,CAAC;QACJ,CAAC;QACD,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAClF,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,wBAAwB,CAChC,cAAc,SAAS,6CAA6C,CACrE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,iBAAiB,CACf,UAAkB,EAClB,MAA0B,EAC1B,OAA6B,EAC7B,WAAoB;QAEpB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAChD,OAAO,IAAI,CAAC,QAAQ,CAClB,UAAU,EACV,MAAM,EACN,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAC7B,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,cAAc,CACZ,UAAkB,EAClB,MAA0B,EAC1B,KAAuD,EACvD,WAAoB;QAEpB,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,CACJ,UAAkB,EAClB,OAAe;QAEf,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,UAAkB;QACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,QAAQ,CACN,UAAkB,EAClB,MAA0B,EAC1B,OAAqB,EACrB,WAAoB;QAEpB,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,wBAAwB,CAChC,oDAAoD,CACrD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI;YAC9C,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,IAAI,GAAG,EAAwB;SACxC,CAAC;QACF,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAEhC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,IAAI,WAAW,CAAC;QAC3D,MAAM,cAAc,GAAG,OAAO,CAC5B,KAAK,CAAC,eAAe,EACrB,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EACxB,CAAC,EACD,WAAW,CACZ,CAAC;QACF,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,IAAI,OAAO,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,wBAAwB,CAChC,eAAe,OAAO,CAAC,KAAK,sBAAsB,QAAQ,EAAE,CAC7D,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC;YACxC,MAAM,IAAI,wBAAwB,CAChC,6CAA6C,cAAc,EAAE,CAC9D,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,wBAAwB,CAChC,qCAAqC,WAAW,EAAE,CACnD,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,IAAI,wBAAwB,CAChC,0CAA0C,aAAa,EAAE,CAC1D,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,wBAAwB,CAChC,oDAAoD,CACrD,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,wBAAwB,CAChC,0EAA0E,CAC3E,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,wBAAwB,CAChC,sDAAsD,CACvD,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type AcpClientSpawnOptions } from '../acp/acp-client.js';
|
|
2
|
+
import type { AcpLoadSessionRequest, AcpNewSessionRequest, AcpNewSessionResponse, AcpPromptRequest, AcpPromptResponse } from '../acp/acp-types.js';
|
|
3
|
+
export interface HermesProcessOptions extends Pick<AcpClientSpawnOptions, 'command' | 'args' | 'requestTimeoutMs' | 'onEvent' | 'onPermissionRequest' | 'onStderr'> {
|
|
4
|
+
agentId: string;
|
|
5
|
+
stateDir: string;
|
|
6
|
+
profile?: string;
|
|
7
|
+
env?: NodeJS.ProcessEnv;
|
|
8
|
+
}
|
|
9
|
+
export declare class HermesProcess {
|
|
10
|
+
#private;
|
|
11
|
+
readonly agentId: string;
|
|
12
|
+
readonly stateDir: string;
|
|
13
|
+
readonly profile?: string;
|
|
14
|
+
constructor(options: HermesProcessOptions);
|
|
15
|
+
get healthy(): boolean;
|
|
16
|
+
get processPid(): number | null;
|
|
17
|
+
start(): Promise<this>;
|
|
18
|
+
newSession(request: AcpNewSessionRequest): Promise<AcpNewSessionResponse>;
|
|
19
|
+
loadSession(request: AcpLoadSessionRequest): Promise<void>;
|
|
20
|
+
prompt(request: AcpPromptRequest, options?: {
|
|
21
|
+
signal?: AbortSignal;
|
|
22
|
+
}): Promise<AcpPromptResponse>;
|
|
23
|
+
cancel(sessionId: string): Promise<void>;
|
|
24
|
+
closeSession(sessionId: string): Promise<void>;
|
|
25
|
+
stop(): Promise<void>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { promises as fsp } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { terminateDetachedProcessTree } from '../../process-tree.js';
|
|
4
|
+
import { AcpClient, } from '../acp/acp-client.js';
|
|
5
|
+
const SAFE_INHERITED_ENV = new Set([
|
|
6
|
+
'PATH',
|
|
7
|
+
'PATHEXT',
|
|
8
|
+
'SYSTEMROOT',
|
|
9
|
+
'WINDIR',
|
|
10
|
+
'COMSPEC',
|
|
11
|
+
'TEMP',
|
|
12
|
+
'TMP',
|
|
13
|
+
'TMPDIR',
|
|
14
|
+
'HOME',
|
|
15
|
+
'USERPROFILE',
|
|
16
|
+
'APPDATA',
|
|
17
|
+
'LOCALAPPDATA',
|
|
18
|
+
'LANG',
|
|
19
|
+
'LC_ALL',
|
|
20
|
+
'SSL_CERT_FILE',
|
|
21
|
+
'SSL_CERT_DIR',
|
|
22
|
+
'HTTP_PROXY',
|
|
23
|
+
'HTTPS_PROXY',
|
|
24
|
+
'NO_PROXY',
|
|
25
|
+
]);
|
|
26
|
+
function buildEnvironment(options) {
|
|
27
|
+
const env = {};
|
|
28
|
+
for (const key of SAFE_INHERITED_ENV) {
|
|
29
|
+
if (process.env[key] !== undefined)
|
|
30
|
+
env[key] = process.env[key];
|
|
31
|
+
}
|
|
32
|
+
Object.assign(env, options.env ?? {});
|
|
33
|
+
env.HERMES_HOME = options.stateDir;
|
|
34
|
+
env.AWB_AGENT_ID = options.agentId;
|
|
35
|
+
if (options.profile)
|
|
36
|
+
env.HERMES_PROFILE = options.profile;
|
|
37
|
+
return env;
|
|
38
|
+
}
|
|
39
|
+
export class HermesProcess {
|
|
40
|
+
agentId;
|
|
41
|
+
stateDir;
|
|
42
|
+
profile;
|
|
43
|
+
#options;
|
|
44
|
+
#client = null;
|
|
45
|
+
#healthy = false;
|
|
46
|
+
constructor(options) {
|
|
47
|
+
this.agentId = options.agentId;
|
|
48
|
+
this.stateDir = options.stateDir;
|
|
49
|
+
this.profile = options.profile;
|
|
50
|
+
this.#options = options;
|
|
51
|
+
}
|
|
52
|
+
get healthy() {
|
|
53
|
+
return this.#healthy;
|
|
54
|
+
}
|
|
55
|
+
get processPid() {
|
|
56
|
+
return this.#client?.process.pid ?? null;
|
|
57
|
+
}
|
|
58
|
+
async start() {
|
|
59
|
+
if (this.#client && this.#healthy)
|
|
60
|
+
return this;
|
|
61
|
+
await fsp.mkdir(this.stateDir, { recursive: true, mode: 0o700 });
|
|
62
|
+
const client = await AcpClient.spawn({
|
|
63
|
+
command: this.#options.command,
|
|
64
|
+
args: this.#options.args,
|
|
65
|
+
env: buildEnvironment(this.#options),
|
|
66
|
+
requestTimeoutMs: this.#options.requestTimeoutMs,
|
|
67
|
+
onEvent: this.#options.onEvent,
|
|
68
|
+
onPermissionRequest: this.#options.onPermissionRequest,
|
|
69
|
+
onStderr: this.#options.onStderr,
|
|
70
|
+
spawnOptions: {
|
|
71
|
+
detached: process.platform !== 'win32',
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
this.#client = client;
|
|
75
|
+
try {
|
|
76
|
+
await client.initialize({
|
|
77
|
+
clientInfo: { name: 'awb-runtime-host', version: '1' },
|
|
78
|
+
clientCapabilities: {
|
|
79
|
+
fs: { readTextFile: false, writeTextFile: false },
|
|
80
|
+
terminal: false,
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
const pid = client.process.pid;
|
|
84
|
+
if (!pid)
|
|
85
|
+
throw new Error('Hermes ACP process did not expose a pid');
|
|
86
|
+
await fsp.writeFile(join(this.stateDir, 'runtime-owner.json'), JSON.stringify({ pid, ownerPid: process.pid, agentId: this.agentId }), { mode: 0o600 });
|
|
87
|
+
this.#healthy = true;
|
|
88
|
+
return this;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
client.close();
|
|
92
|
+
this.#client = null;
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async newSession(request) {
|
|
97
|
+
return this.#requireClient().newSession(request);
|
|
98
|
+
}
|
|
99
|
+
async loadSession(request) {
|
|
100
|
+
await this.#requireClient().loadSession(request);
|
|
101
|
+
}
|
|
102
|
+
prompt(request, options = {}) {
|
|
103
|
+
return this.#requireClient().prompt(request, options);
|
|
104
|
+
}
|
|
105
|
+
cancel(sessionId) {
|
|
106
|
+
return this.#requireClient().cancel(sessionId);
|
|
107
|
+
}
|
|
108
|
+
closeSession(sessionId) {
|
|
109
|
+
return this.#requireClient().closeSession(sessionId);
|
|
110
|
+
}
|
|
111
|
+
async stop() {
|
|
112
|
+
const client = this.#client;
|
|
113
|
+
this.#client = null;
|
|
114
|
+
this.#healthy = false;
|
|
115
|
+
const pid = client?.process.pid;
|
|
116
|
+
client?.close();
|
|
117
|
+
if (pid)
|
|
118
|
+
await terminateDetachedProcessTree(pid, 250);
|
|
119
|
+
await fsp.unlink(join(this.stateDir, 'runtime-owner.json')).catch(() => undefined);
|
|
120
|
+
}
|
|
121
|
+
#requireClient() {
|
|
122
|
+
if (!this.#client || !this.#healthy) {
|
|
123
|
+
throw new Error(`Hermes process for Agent ${this.agentId} is not healthy`);
|
|
124
|
+
}
|
|
125
|
+
return this.#client;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=hermes-process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-process.js","sourceRoot":"","sources":["../../../../src/lib/runtime/hermes/hermes-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,SAAS,GAEV,MAAM,sBAAsB,CAAC;AAS9B,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,MAAM;IACN,SAAS;IACT,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,MAAM;IACN,KAAK;IACL,QAAQ;IACR,MAAM;IACN,aAAa;IACb,SAAS;IACT,cAAc;IACd,MAAM;IACN,QAAQ;IACR,eAAe;IACf,cAAc;IACd,YAAY;IACZ,aAAa;IACb,UAAU;CACX,CAAC,CAAC;AAaH,SAAS,gBAAgB,CAAC,OAA6B;IACrD,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACtC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,IAAI,OAAO,CAAC,OAAO;QAAE,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAC1D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,OAAO,aAAa;IACf,OAAO,CAAS;IAChB,QAAQ,CAAS;IACjB,OAAO,CAAU;IACjB,QAAQ,CAAuB;IACxC,OAAO,GAAqB,IAAI,CAAC;IACjC,QAAQ,GAAG,KAAK,CAAC;IAEjB,YAAY,OAA6B;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC/C,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC;YACnC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;YAC9B,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YACxB,GAAG,EAAE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACpC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB;YAChD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;YAC9B,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB;YACtD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ;YAChC,YAAY,EAAE;gBACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;aACvC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,UAAU,CAAC;gBACtB,UAAU,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,EAAE;gBACtD,kBAAkB,EAAE;oBAClB,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE;oBACjD,QAAQ,EAAE,KAAK;iBAChB;aACF,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;YAC/B,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACrE,MAAM,GAAG,CAAC,SAAS,CACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EACzC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EACrE,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;YACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAA6B;QAC5C,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAA8B;QAC9C,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CACJ,OAAyB,EACzB,UAAoC,EAAE;QAEtC,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,SAAiB;QACtB,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAED,YAAY,CAAC,SAAiB;QAC5B,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,MAAM,GAAG,GAAG,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC;QAChC,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,IAAI,GAAG;YAAE,MAAM,4BAA4B,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtD,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACrF,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,OAAO,iBAAiB,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { AcpContentBlock, AcpMcpServer, AcpPermissionOutcome, AcpPermissionRequest, AcpPromptResponse } from '../acp/acp-types.js';
|
|
2
|
+
import type { RuntimeEvent } from '../runtime-events.js';
|
|
3
|
+
import { HermesProcess } from './hermes-process.js';
|
|
4
|
+
import { type HermesSessionIdentity, type HermesSessionRecord } from './hermes-session-store.js';
|
|
5
|
+
export { HermesSessionOwnershipError } from './hermes-session-store.js';
|
|
6
|
+
export interface HermesRuntimeOptions {
|
|
7
|
+
rootDir: string;
|
|
8
|
+
command?: string;
|
|
9
|
+
args?: string[];
|
|
10
|
+
requestTimeoutMs?: number;
|
|
11
|
+
env?: NodeJS.ProcessEnv;
|
|
12
|
+
onEvent?: (agentId: string, event: RuntimeEvent) => void;
|
|
13
|
+
onPermissionRequest?: (agentId: string, request: AcpPermissionRequest) => AcpPermissionOutcome | Promise<AcpPermissionOutcome>;
|
|
14
|
+
onStderr?: (agentId: string, line: string) => void;
|
|
15
|
+
}
|
|
16
|
+
export interface HermesAgentOptions {
|
|
17
|
+
agentId: string;
|
|
18
|
+
profile?: string;
|
|
19
|
+
env?: NodeJS.ProcessEnv;
|
|
20
|
+
}
|
|
21
|
+
export interface HermesRunIdentity extends HermesSessionIdentity {
|
|
22
|
+
mcpServers?: AcpMcpServer[];
|
|
23
|
+
}
|
|
24
|
+
export declare class HermesRuntime {
|
|
25
|
+
#private;
|
|
26
|
+
constructor(options: HermesRuntimeOptions);
|
|
27
|
+
ensureAgent(options: HermesAgentOptions): Promise<HermesProcess>;
|
|
28
|
+
openSession(identity: HermesRunIdentity): Promise<HermesSessionRecord>;
|
|
29
|
+
restoreSession(identity: HermesRunIdentity): Promise<HermesSessionRecord>;
|
|
30
|
+
getSession(agentId: string, runId: string): HermesSessionRecord | null;
|
|
31
|
+
promptRun(agentId: string, runId: string, prompt: AcpContentBlock[], options?: {
|
|
32
|
+
signal?: AbortSignal;
|
|
33
|
+
}): Promise<AcpPromptResponse>;
|
|
34
|
+
cancelRun(agentId: string, runId: string): Promise<void>;
|
|
35
|
+
closeRun(agentId: string, runId: string): Promise<void>;
|
|
36
|
+
stopAgent(agentId: string): Promise<boolean>;
|
|
37
|
+
stopAll(): Promise<void>;
|
|
38
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { join, resolve } from 'node:path';
|
|
2
|
+
import { AcpProtocolError } from '../acp/acp-client.js';
|
|
3
|
+
import { HermesProcess } from './hermes-process.js';
|
|
4
|
+
import { HermesSessionOwnershipError, HermesSessionStore, } from './hermes-session-store.js';
|
|
5
|
+
export { HermesSessionOwnershipError } from './hermes-session-store.js';
|
|
6
|
+
export class HermesRuntime {
|
|
7
|
+
#options;
|
|
8
|
+
#rootDir;
|
|
9
|
+
#sessions;
|
|
10
|
+
#processes = new Map();
|
|
11
|
+
#starting = new Map();
|
|
12
|
+
#loaded = false;
|
|
13
|
+
constructor(options) {
|
|
14
|
+
this.#rootDir = resolve(options.rootDir);
|
|
15
|
+
this.#options = {
|
|
16
|
+
...options,
|
|
17
|
+
command: options.command?.trim() || process.env.HERMES_ACP_COMMAND?.trim() || 'hermes-acp',
|
|
18
|
+
args: options.args ?? [],
|
|
19
|
+
};
|
|
20
|
+
this.#sessions = new HermesSessionStore(join(this.#rootDir, 'sessions.json'));
|
|
21
|
+
}
|
|
22
|
+
async ensureAgent(options) {
|
|
23
|
+
await this.#ensureLoaded();
|
|
24
|
+
const existing = this.#processes.get(options.agentId);
|
|
25
|
+
if (existing) {
|
|
26
|
+
if (options.profile !== undefined
|
|
27
|
+
&& (existing.profile ?? '') !== options.profile) {
|
|
28
|
+
throw new Error(`Hermes profile changed for running Agent ${options.agentId}`);
|
|
29
|
+
}
|
|
30
|
+
return existing;
|
|
31
|
+
}
|
|
32
|
+
const inFlight = this.#starting.get(options.agentId);
|
|
33
|
+
if (inFlight)
|
|
34
|
+
return inFlight;
|
|
35
|
+
const processOwner = new HermesProcess({
|
|
36
|
+
agentId: options.agentId,
|
|
37
|
+
stateDir: join(this.#rootDir, options.agentId, 'hermes'),
|
|
38
|
+
profile: options.profile,
|
|
39
|
+
command: this.#options.command,
|
|
40
|
+
args: this.#options.args,
|
|
41
|
+
requestTimeoutMs: this.#options.requestTimeoutMs,
|
|
42
|
+
env: { ...this.#options.env, ...options.env },
|
|
43
|
+
onEvent: (event) => this.#options.onEvent?.(options.agentId, event),
|
|
44
|
+
onPermissionRequest: (request) => this.#options.onPermissionRequest
|
|
45
|
+
? this.#options.onPermissionRequest(options.agentId, request)
|
|
46
|
+
: { outcome: 'cancelled' },
|
|
47
|
+
onStderr: (line) => this.#options.onStderr?.(options.agentId, line),
|
|
48
|
+
});
|
|
49
|
+
const starting = processOwner.start().then(() => {
|
|
50
|
+
this.#processes.set(options.agentId, processOwner);
|
|
51
|
+
this.#starting.delete(options.agentId);
|
|
52
|
+
return processOwner;
|
|
53
|
+
}).catch((error) => {
|
|
54
|
+
this.#starting.delete(options.agentId);
|
|
55
|
+
throw error;
|
|
56
|
+
});
|
|
57
|
+
this.#starting.set(options.agentId, starting);
|
|
58
|
+
return starting;
|
|
59
|
+
}
|
|
60
|
+
async openSession(identity) {
|
|
61
|
+
await this.#ensureLoaded();
|
|
62
|
+
const existing = this.#sessions.get(identity.runId);
|
|
63
|
+
if (existing)
|
|
64
|
+
return this.restoreSession(identity);
|
|
65
|
+
const processOwner = await this.ensureAgent({ agentId: identity.agentId });
|
|
66
|
+
const response = await processOwner.newSession({
|
|
67
|
+
cwd: resolve(identity.cwd),
|
|
68
|
+
mcpServers: identity.mcpServers ?? [],
|
|
69
|
+
});
|
|
70
|
+
return this.#sessions.set(identity, response.sessionId);
|
|
71
|
+
}
|
|
72
|
+
async restoreSession(identity) {
|
|
73
|
+
await this.#ensureLoaded();
|
|
74
|
+
const record = this.#sessions.require(identity);
|
|
75
|
+
const processOwner = await this.ensureAgent({ agentId: identity.agentId });
|
|
76
|
+
await processOwner.loadSession({
|
|
77
|
+
sessionId: record.sessionId,
|
|
78
|
+
cwd: resolve(identity.cwd),
|
|
79
|
+
mcpServers: identity.mcpServers ?? [],
|
|
80
|
+
});
|
|
81
|
+
return record;
|
|
82
|
+
}
|
|
83
|
+
getSession(agentId, runId) {
|
|
84
|
+
const record = this.#sessions.get(runId);
|
|
85
|
+
return record?.agentId === agentId ? record : null;
|
|
86
|
+
}
|
|
87
|
+
async promptRun(agentId, runId, prompt, options = {}) {
|
|
88
|
+
const record = this.#sessions.require({
|
|
89
|
+
...(this.#sessions.get(runId) ?? {
|
|
90
|
+
runId,
|
|
91
|
+
leaseId: '',
|
|
92
|
+
cwd: '',
|
|
93
|
+
}),
|
|
94
|
+
agentId,
|
|
95
|
+
});
|
|
96
|
+
const processOwner = await this.ensureAgent({ agentId });
|
|
97
|
+
return processOwner.prompt({ sessionId: record.sessionId, prompt }, options);
|
|
98
|
+
}
|
|
99
|
+
async cancelRun(agentId, runId) {
|
|
100
|
+
await this.#ensureLoaded();
|
|
101
|
+
const record = this.#sessions.get(runId);
|
|
102
|
+
if (!record || record.agentId !== agentId) {
|
|
103
|
+
throw new HermesSessionOwnershipError('hermes_session_owner_mismatch', `Run ${runId} is not owned by Agent ${agentId}`);
|
|
104
|
+
}
|
|
105
|
+
const processOwner = await this.ensureAgent({ agentId });
|
|
106
|
+
await processOwner.cancel(record.sessionId);
|
|
107
|
+
}
|
|
108
|
+
async closeRun(agentId, runId) {
|
|
109
|
+
await this.#ensureLoaded();
|
|
110
|
+
const record = this.#sessions.get(runId);
|
|
111
|
+
if (!record || record.agentId !== agentId)
|
|
112
|
+
return;
|
|
113
|
+
const processOwner = await this.ensureAgent({ agentId });
|
|
114
|
+
try {
|
|
115
|
+
await processOwner.closeSession(record.sessionId);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
if (!(error instanceof AcpProtocolError && error.rpcCode === -32601)) {
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
await this.#sessions.delete(runId);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async stopAgent(agentId) {
|
|
127
|
+
const processOwner = this.#processes.get(agentId);
|
|
128
|
+
if (!processOwner)
|
|
129
|
+
return false;
|
|
130
|
+
this.#processes.delete(agentId);
|
|
131
|
+
await processOwner.stop();
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
async stopAll() {
|
|
135
|
+
const processes = Array.from(this.#processes.values());
|
|
136
|
+
this.#processes.clear();
|
|
137
|
+
await Promise.allSettled(processes.map((owner) => owner.stop()));
|
|
138
|
+
}
|
|
139
|
+
async #ensureLoaded() {
|
|
140
|
+
if (this.#loaded)
|
|
141
|
+
return;
|
|
142
|
+
await this.#sessions.load();
|
|
143
|
+
this.#loaded = true;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=hermes-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-runtime.js","sourceRoot":"","sources":["../../../../src/lib/runtime/hermes/hermes-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type HermesSessionOwnershipErrorCode = 'hermes_session_not_found' | 'hermes_session_owner_mismatch' | 'hermes_session_lease_mismatch' | 'hermes_session_cwd_mismatch';
|
|
2
|
+
export declare class HermesSessionOwnershipError extends Error {
|
|
3
|
+
readonly code: HermesSessionOwnershipErrorCode;
|
|
4
|
+
constructor(code: HermesSessionOwnershipErrorCode, message: string);
|
|
5
|
+
}
|
|
6
|
+
export interface HermesSessionRecord {
|
|
7
|
+
runId: string;
|
|
8
|
+
agentId: string;
|
|
9
|
+
sessionId: string;
|
|
10
|
+
leaseId: string;
|
|
11
|
+
cwd: string;
|
|
12
|
+
createdAt: string;
|
|
13
|
+
updatedAt: string;
|
|
14
|
+
}
|
|
15
|
+
export interface HermesSessionIdentity {
|
|
16
|
+
runId: string;
|
|
17
|
+
agentId: string;
|
|
18
|
+
leaseId: string;
|
|
19
|
+
cwd: string;
|
|
20
|
+
}
|
|
21
|
+
export declare class HermesSessionStore {
|
|
22
|
+
#private;
|
|
23
|
+
constructor(path: string);
|
|
24
|
+
load(): Promise<void>;
|
|
25
|
+
get(runId: string): HermesSessionRecord | null;
|
|
26
|
+
require(identity: HermesSessionIdentity): HermesSessionRecord;
|
|
27
|
+
set(identity: HermesSessionIdentity, sessionId: string): Promise<HermesSessionRecord>;
|
|
28
|
+
delete(runId: string): Promise<boolean>;
|
|
29
|
+
}
|