@agent-native/core 0.64.1 → 0.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/agent/harness/acp-adapter.d.ts +145 -0
  2. package/dist/agent/harness/acp-adapter.d.ts.map +1 -0
  3. package/dist/agent/harness/acp-adapter.js +632 -0
  4. package/dist/agent/harness/acp-adapter.js.map +1 -0
  5. package/dist/agent/harness/acp-builtin.d.ts +25 -0
  6. package/dist/agent/harness/acp-builtin.d.ts.map +1 -0
  7. package/dist/agent/harness/acp-builtin.js +57 -0
  8. package/dist/agent/harness/acp-builtin.js.map +1 -0
  9. package/dist/agent/harness/builtin.d.ts.map +1 -1
  10. package/dist/agent/harness/builtin.js +15 -0
  11. package/dist/agent/harness/builtin.js.map +1 -1
  12. package/dist/agent/harness/index.d.ts +2 -0
  13. package/dist/agent/harness/index.d.ts.map +1 -1
  14. package/dist/agent/harness/index.js +2 -0
  15. package/dist/agent/harness/index.js.map +1 -1
  16. package/dist/embedding/agent.d.ts +32 -0
  17. package/dist/embedding/agent.d.ts.map +1 -0
  18. package/dist/embedding/agent.js +110 -0
  19. package/dist/embedding/agent.js.map +1 -0
  20. package/dist/embedding/bridge.d.ts +37 -0
  21. package/dist/embedding/bridge.d.ts.map +1 -0
  22. package/dist/embedding/bridge.js +148 -0
  23. package/dist/embedding/bridge.js.map +1 -0
  24. package/dist/embedding/index.d.ts +5 -0
  25. package/dist/embedding/index.d.ts.map +1 -0
  26. package/dist/embedding/index.js +5 -0
  27. package/dist/embedding/index.js.map +1 -0
  28. package/dist/embedding/protocol.d.ts +46 -0
  29. package/dist/embedding/protocol.d.ts.map +1 -0
  30. package/dist/embedding/protocol.js +122 -0
  31. package/dist/embedding/protocol.js.map +1 -0
  32. package/dist/embedding/react.d.ts +39 -0
  33. package/dist/embedding/react.d.ts.map +1 -0
  34. package/dist/embedding/react.js +147 -0
  35. package/dist/embedding/react.js.map +1 -0
  36. package/dist/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +47 -1
  37. package/docs/content/agent-surfaces.md +4 -2
  38. package/docs/content/harness-agents.md +59 -0
  39. package/package.json +6 -1
  40. package/src/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +47 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp-adapter.js","sourceRoot":"","sources":["../../../src/agent/harness/acp-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAuC,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAcjD,4EAA4E;AAC5E,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,2DAA2D;AAC3D,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,uCAAuC,CAAC;AAyBnE,MAAM,oBAAoB,GAA6B;IACrD,8EAA8E;IAC9E,kCAAkC;IAClC,OAAO,EAAE,KAAK;IACd,qEAAqE;IACrE,8DAA8D;IAC9D,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,4EAA4E;IAC5E,SAAS,EAAE,KAAK;IAChB,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF;;;GAGG;AACH,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAEzD,CAAC;AAElB,MAAM,UAAU,uBAAuB,CACrC,OAAiC;IAEjC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;IACnC,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,WAAW;QACnC,WAAW,EACT,OAAO,CAAC,WAAW;YACnB,uDAAuD;QACzD,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,WAAW;QACrD,YAAY,EAAE,oBAAoB;QAClC,KAAK,CAAC,aAAa,CAAC,cAAc;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,0BAA0B,IAAI,iKAAiK,CAChM,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CACtB,cAAc,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CACnD,CAAC;YACF,MAAM,GAAG,GAAsB;gBAC7B,GAAG,OAAO,CAAC,GAAG;gBACd,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;aACvB,CAAC;YACF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE;gBAC/C,GAAG;gBACH,GAAG;gBACH,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC;gBACpC,GAAG;gBACH,KAAK;gBACL,OAAO;gBACP,GAAG;gBACH,cAAc,EAAE,cAAc,CAAC,cAAc,IAAI,aAAa;aAC/D,CAAC,CAAC;YACH,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;gBACxB,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAeD,MAAM,iBAAiB;IACZ,EAAE,CAAS;IAEH,GAAG,CAAM;IACT,KAAK,CAAiC;IACtC,OAAO,CAAS;IAChB,GAAG,CAAS;IACZ,cAAc,CAA6B;IACpD,UAAU,CAAM;IAChB,YAAY,GAAG,EAAE,CAAC;IAClB,YAAY,GAAG,KAAK,CAAC;IAErB,KAAK,GAA8C,IAAI,CAAC;IAC/C,kBAAkB,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC1D,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,eAAe,GAAG,CAAC,CAAC;IACpB,UAAU,GAAG,EAAE,CAAC;IAChB,WAAW,GAAG,KAAK,CAAC;IACpB,YAAY,GAAG,KAAK,CAAC;IAE7B,YAAY,IAA2B;QACrC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,gEAAgE;QAChE,IAAI,CAAC,EAAE,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAEvD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC9C,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAC1D,CAAC,iBAAiB,CACnB,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE;iBAC/B,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;YACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,iBAAiB,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE;iBACzD,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAsC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAClC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAA+B,EAC9D,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAA+B,CAChE,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,oBAAoB,CACjD,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,EACzB,MAAM,CACP,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YACpD,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC;YAC/C,kBAAkB,EAAE;gBAClB,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;gBAC/C,QAAQ,EAAE,KAAK;aAChB;SACF,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAE1E,MAAM,MAAM,GAAG,IAAI,CAAC,WAGZ,CAAC;QACT,IAAI,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;oBAChC,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,UAAU,EAAE,EAAE;iBACf,CAAC,CAAC;gBACH,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC;gBACrC,OAAO;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,kEAAkE;YACpE,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAC/C,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,EAAE;SACf,CAAC,CAAC;QACH,IAAI,CAAC,YAAY;YACf,OAAO,OAAO,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,CAAC,UAAU,CACf,KAA4B;QAE5B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YACxD,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,eAAe,EAAqB,CAAC;QACvD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;QAChC,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC;QACF,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,OAAO;gBAAE,OAAO,EAAE,CAAC;;gBACxB,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,UAAU;aACZ,MAAM,CAAC;YACN,SAAS,EAAE,IAAI,CAAC,YAAY;YAC5B,MAAM,EAAE,oBAAoB,CAAC,KAAK,CAAC;SACpC,CAAC;aACD,IAAI,CAAC,CAAC,QAA2B,EAAE,EAAE;YACpC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,KAAK;gBAAE,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC,CAAC,CAAC;QAEL,KAAK,CAAC,CAAC,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAA8B;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,OAAO,CACb,0BAA0B,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAC/D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,KAAK,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9D,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,IAAI,CAAC;oBACH,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI;wBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC/D,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC,EAAE,gBAAgB,CAAC,CAAC;YACrB,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,sDAAsD;IAE9C,YAAY;QAClB,OAAO;YACL,aAAa,EAAE,KAAK,EAAE,MAA8B,EAAE,EAAE;gBACtD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1C,CAAC;YACD,iBAAiB,EAAE,KAAK,EAAE,MAAmC,EAAE,EAAE,CAC/D,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAC/B,YAAY,EAAE,KAAK,EAAE,MAA8B,EAAE,EAAE,CACrD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;YACjC,aAAa,EAAE,KAAK,EAAE,MAA+B,EAAE,EAAE,CACvD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;SACnC,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,MAAwB;QAClD,IAAI,MAAM,EAAE,aAAa,KAAK,WAAW,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;QACD,qEAAqE;QACrE,mEAAmE;QACnE,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,KAAK,MAAM,KAAK,IAAI,wBAAwB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAC1D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CACxB,EAAE,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,MAAmC;QAEnC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,yBAAyB,CACxC,QAAQ,CAAC,IAAI,IAAI,SAAS,EAC1B,IAAI,CAAC,cAAc,CACpB,CAAC;QACF,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,yBAAyB,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;YACvE,IAAI,QAAQ;gBAAE,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,sEAAsE;YACtE,OAAO,0BAA0B,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,EAAE,GAAG,gBAAgB,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,EAAE;YAC9D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE;gBAC9B,OAAO;gBACP,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;aAC9B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,kBAAkB;YACxB,EAAE;YACF,IAAI,EAAE,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,KAAK;YAC3C,OAAO,EAAE,QAAQ,CAAC,KAAK;gBACrB,CAAC,CAAC,YAAY,QAAQ,CAAC,KAAK,EAAE;gBAC9B,CAAC,CAAC,gCAAgC;YACpC,KAAK,EAAE,QAAQ,CAAC,QAAQ;SACzB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,MAA8B;QAE9B,MAAM,GAAG,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACpE,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,MAA+B;QAE/B,MAAM,GAAG,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;YACf,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;SACzC,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAC/C,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAClD,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAEO,gBAAgB;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,iBAAiB,IAAI,CAAC,OAAO,oCAAoC,CAAC;QAC/E,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,CAAC;CACF;AAED,8CAA8C;AAE9C,sDAAsD;AACtD,MAAM,UAAU,oBAAoB,CAAC,KAGpC;IACC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACxC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ;SACpB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SAChD,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CAAC,OAA2B;IAChD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACvD,MAAM,IAAI,GAAI,IAA2B,CAAC,IAAI,CAAC;YAC/C,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAwB,EACxB,QAAqD;IAErD,QAAQ,MAAM,CAAC,aAAa,EAAE,CAAC;QAC7B,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,CAAC;QACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,CAAC;QACD,KAAK,oBAAoB;YACvB,qDAAqD;YACrD,OAAO,EAAE,CAAC;QACZ,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,MAAM,GAAwB;gBAClC;oBACE,IAAI,EAAE,YAAY;oBAClB,EAAE,EAAE,MAAM,CAAC,UAAU;oBACrB,IAAI,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM;oBAC3C,KAAK,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;iBAC7B;aACF,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,GAAG,kCAAkC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACnE,IAAI,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,WAAW;oBACjB,EAAE,EAAE,MAAM,CAAC,UAAU;oBACrB,IAAI,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM;oBAC7D,MAAM,EAAE,MAAM,CAAC,SAAS,IAAI,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC;iBAC/D,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;YAC5C,MAAM,MAAM,GACV,kCAAkC,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,WAAW;oBACjB,EAAE,EAAE,MAAM,CAAC,UAAU;oBACrB,IAAI,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM;oBAC7D,MAAM,EAAE,MAAM,CAAC,SAAS,IAAI,kBAAkB,CAAC,OAAO,CAAC;iBACxD,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,KAAK,MAAM;YACT,OAAO;gBACL;oBACE,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;oBACnC,IAAI,EAAE,UAAU;iBACjB;aACF,CAAC;QACJ,KAAK,2BAA2B,CAAC;QACjC,KAAK,qBAAqB;YACxB,OAAO,EAAE,CAAC;QACZ;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe;IAC3C,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,CAAC;AACvD,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,qBAAqB,CACnC,KAAkC;IAElC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACnD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QACvB,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,kBAAkB,CACzB,OAAgD;IAEhD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,IAAI,KAAK,EAAE,IAAI,KAAK,SAAS;YAC3B,OAAO,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,KAAK,EAAE,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI;YAAE,OAAO,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC;QACvE,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,kCAAkC,CAChD,OAAgD;IAEhD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EACP,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;oBACnD,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,QAAQ;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,OAAmC;IACvD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,OAAO,iBAAiB,IAAI,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,IAAwB,EACxB,IAAgC;IAEhC,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,IAAI,OAAO,CAAC;IACjC,MAAM,OAAO,GACX,QAAQ,KAAK,MAAM;QACnB,QAAQ,KAAK,QAAQ;QACrB,QAAQ,KAAK,OAAO;QACpB,QAAQ,KAAK,OAAO,CAAC;IACvB,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3B,OAAO,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,OAA8B,EAC9B,QAAiB;IAEjB,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAE,CAAC,YAAY,EAAE,cAAc,CAAW;QAC3C,CAAC,CAAE,CAAC,aAAa,EAAE,eAAe,CAAW,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;QAC9D,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,0BAA0B,CACjC,OAA8B,EAC9B,QAAiB;IAEjB,MAAM,QAAQ,GAAG,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9D,IAAI,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC;IACpE,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,GAAW,EACX,aAAqB;IAErB,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QACxC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAC9C,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,GAAG,CAAC;IAC3B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CACb,qEAAqE,aAAa,EAAE,CACrF,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CACpB,OAAe,EACf,IAAoB,EACpB,KAAqB;IAErB,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9D,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,KAA8C,CAAC;QAC9D,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACzD,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,4BAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5D,CAAC;IACH,CAAC;IACD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC;AAClE,CAAC;AAuGD,gFAAgF;AAChF,MAAM,eAAe;IACF,MAAM,GAAQ,EAAE,CAAC;IACjB,SAAS,GAA+C,EAAE,CAAC;IACpE,MAAM,GAAG,KAAK,CAAC;IAEvB,IAAI,CAAC,KAAQ;QACX,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,QAAQ;YAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;;YAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,QAA2D,CAAC;QAChE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;YAC3C,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,GAA+B,EAAE;gBACrC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3B,OAAO,OAAO,CAAC,OAAO,CAAC;wBACrB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAO;wBAC/B,IAAI,EAAE,KAAK;qBACZ,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpE,CAAC;gBACD,OAAO,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,EAAE;oBAChD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF","sourcesContent":["/**\n * ACP (Agent Client Protocol) harness adapter.\n *\n * Lets Agent-Native act as an ACP *client* and drive a local coding agent —\n * Gemini CLI, Claude Code, or any other ACP-compliant agent — through the\n * existing {@link AgentHarnessAdapter} substrate. The agent runs as a local\n * subprocess that owns its own loop, tools, and workspace filesystem access,\n * which is exactly the shape ACP was designed for. See:\n * https://agentclientprotocol.com\n *\n * Scope: this adapter targets *local* coding. The agent is spawned as a child\n * process and speaks newline-delimited JSON-RPC over stdio. It reuses whatever\n * local CLI login the agent already has (e.g. `gemini`/`claude` auth in the\n * user's home dir) by inheriting the parent environment. It is not a hosted or\n * sandboxed transport, and it is not a chat/A2A transport.\n *\n * The protocol transport and framing are handled by the official\n * `@zed-industries/agent-client-protocol` package, loaded lazily as an optional\n * dependency so apps that never use ACP do not pay for it. Everything in this\n * file beyond the thin spawn/connection glue is pure mapping logic between ACP\n * `session/update` notifications and {@link AgentHarnessEvent}s.\n */\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { spawn, type ChildProcessWithoutNullStreams } from \"node:child_process\";\nimport { Readable, Writable } from \"node:stream\";\n\nimport type {\n AgentHarnessAdapter,\n AgentHarnessApproval,\n AgentHarnessCapabilities,\n AgentHarnessCreateSessionOptions,\n AgentHarnessEvent,\n AgentHarnessMessage,\n AgentHarnessPermissionMode,\n AgentHarnessSession,\n AgentHarnessTurnInput,\n} from \"./types.js\";\n\n/** Grace period between SIGTERM and SIGKILL when tearing a session down. */\nconst SIGKILL_GRACE_MS = 2_000;\n/** Keep a bounded tail of child stderr for diagnostics. */\nconst STDERR_TAIL_LIMIT = 8_000;\n\n/**\n * The optional package that carries the ACP protocol transport. Loaded lazily;\n * `resolveAgentHarness` surfaces a clear install error when it is missing.\n */\nexport const ACP_PACKAGE = \"@zed-industries/agent-client-protocol\";\n\nexport interface AcpHarnessAdapterOptions {\n /** Adapter id, e.g. \"acp:gemini\". Defaults to \"acp\". */\n name?: string;\n /** Human-readable label for pickers. */\n label?: string;\n /** Short description for pickers and diagnostics. */\n description?: string;\n /** Executable to spawn (the ACP agent binary), e.g. \"gemini\" or \"npx\". */\n command?: string;\n /** Arguments passed to the agent binary, e.g. [\"--experimental-acp\"]. */\n args?: string[];\n /**\n * Extra environment variables for the agent process. Merged over the parent\n * environment, which the agent inherits so it can reuse the user's local CLI\n * login.\n */\n env?: Record<string, string>;\n /** Default working directory when a turn does not specify one. */\n cwd?: string;\n /** Hint shown when the optional ACP package is missing. */\n installPackage?: string;\n}\n\nconst DEFAULT_CAPABILITIES: AgentHarnessCapabilities = {\n // The agent runs locally with its own workspace access; Agent-Native does not\n // provide it an isolated sandbox.\n sandbox: false,\n // Best-effort: resumable when the agent advertises the `loadSession`\n // capability. Degrades to a fresh session per turn otherwise.\n resumable: true,\n approvals: true,\n // ACP host tools would flow through MCP servers; not wired in this adapter.\n hostTools: false,\n fileEvents: true,\n};\n\n/**\n * Indirect dynamic import so bundlers/TS do not try to resolve the optional ACP\n * package at build time (mirrors the AI SDK harness adapter).\n */\nconst dynamicImport = new Function(\"specifier\", \"return import(specifier)\") as (\n specifier: string,\n) => Promise<any>;\n\nexport function createAcpHarnessAdapter(\n options: AcpHarnessAdapterOptions,\n): AgentHarnessAdapter {\n const name = options.name ?? \"acp\";\n return {\n name,\n label: options.label ?? \"ACP Agent\",\n description:\n options.description ??\n \"Drives a local ACP-compliant coding agent over stdio.\",\n installPackage: options.installPackage ?? ACP_PACKAGE,\n capabilities: DEFAULT_CAPABILITIES,\n async createSession(sessionOptions) {\n const command = options.command?.trim();\n if (!command) {\n throw new Error(\n `[acp-harness] Harness \"${name}\" requires a command. Pass { command, args } when resolving the harness (e.g. resolveAgentHarness(\"acp\", { command: \"gemini\", args: [\"--experimental-acp\"] })).`,\n );\n }\n const acp = await dynamicImport(ACP_PACKAGE);\n const cwd = path.resolve(\n sessionOptions.cwd ?? options.cwd ?? process.cwd(),\n );\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n ...(options.env ?? {}),\n };\n const child = spawn(command, options.args ?? [], {\n cwd,\n env,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n const session = new AcpHarnessSession({\n acp,\n child,\n command,\n cwd,\n permissionMode: sessionOptions.permissionMode ?? \"allow-reads\",\n });\n try {\n await session.initialize(sessionOptions);\n } catch (error) {\n await session.destroy();\n throw error;\n }\n return session;\n },\n };\n}\n\ninterface AcpHarnessSessionDeps {\n acp: any;\n child: ChildProcessWithoutNullStreams;\n command: string;\n cwd: string;\n permissionMode: AgentHarnessPermissionMode;\n}\n\ninterface PendingPermission {\n resolve: (response: AcpPermissionResponse) => void;\n options: AcpPermissionOption[];\n}\n\nclass AcpHarnessSession implements AgentHarnessSession {\n readonly id: string;\n\n private readonly acp: any;\n private readonly child: ChildProcessWithoutNullStreams;\n private readonly command: string;\n private readonly cwd: string;\n private readonly permissionMode: AgentHarnessPermissionMode;\n private connection: any;\n private acpSessionId = \"\";\n private supportsLoad = false;\n\n private queue: AsyncEventQueue<AgentHarnessEvent> | null = null;\n private readonly pendingPermissions = new Map<string, PendingPermission>();\n private readonly toolTitles = new Map<string, string>();\n private approvalCounter = 0;\n private stderrTail = \"\";\n private childExited = false;\n private shuttingDown = false;\n\n constructor(deps: AcpHarnessSessionDeps) {\n this.acp = deps.acp;\n this.child = deps.child;\n this.command = deps.command;\n this.cwd = deps.cwd;\n this.permissionMode = deps.permissionMode;\n // Placeholder until newSession/loadSession assigns the real id.\n this.id = `acp-${Math.random().toString(36).slice(2)}`;\n\n this.child.stderr?.on(\"data\", (chunk: Buffer) => {\n this.stderrTail = (this.stderrTail + chunk.toString()).slice(\n -STDERR_TAIL_LIMIT,\n );\n });\n this.child.on(\"exit\", () => {\n this.childExited = true;\n if (!this.shuttingDown && this.queue) {\n this.queue.push({\n type: \"error\",\n error: this.childExitMessage(),\n });\n this.queue.close();\n }\n this.rejectAllPending();\n });\n this.child.on(\"error\", (error: Error) => {\n this.childExited = true;\n if (this.queue) {\n this.queue.push({\n type: \"error\",\n error: `[acp-harness] ${this.command}: ${error.message}`,\n });\n this.queue.close();\n }\n this.rejectAllPending();\n });\n }\n\n async initialize(opts: AgentHarnessCreateSessionOptions): Promise<void> {\n const stream = this.acp.ndJsonStream(\n Writable.toWeb(this.child.stdin) as WritableStream<Uint8Array>,\n Readable.toWeb(this.child.stdout) as ReadableStream<Uint8Array>,\n );\n this.connection = new this.acp.ClientSideConnection(\n () => this.createClient(),\n stream,\n );\n\n const initResponse = await this.connection.initialize({\n protocolVersion: this.acp.PROTOCOL_VERSION ?? 1,\n clientCapabilities: {\n fs: { readTextFile: true, writeTextFile: true },\n terminal: false,\n },\n });\n this.supportsLoad = Boolean(initResponse?.agentCapabilities?.loadSession);\n\n const resume = opts.resumeState as\n | { sessionId?: string }\n | undefined\n | null;\n if (resume?.sessionId && this.supportsLoad) {\n try {\n await this.connection.loadSession({\n sessionId: resume.sessionId,\n cwd: this.cwd,\n mcpServers: [],\n });\n this.acpSessionId = resume.sessionId;\n return;\n } catch {\n // Fall through to a fresh session if the agent could not load it.\n }\n }\n\n const created = await this.connection.newSession({\n cwd: this.cwd,\n mcpServers: [],\n });\n this.acpSessionId =\n typeof created?.sessionId === \"string\" ? created.sessionId : this.id;\n }\n\n async *streamTurn(\n input: AgentHarnessTurnInput,\n ): AsyncIterable<AgentHarnessEvent> {\n if (this.childExited) {\n yield { type: \"error\", error: this.childExitMessage() };\n return;\n }\n const queue = new AsyncEventQueue<AgentHarnessEvent>();\n this.queue = queue;\n\n const abort = input.abortSignal;\n const onAbort = () => {\n this.connection?.cancel({ sessionId: this.acpSessionId }).catch(() => {});\n };\n if (abort) {\n if (abort.aborted) onAbort();\n else abort.addEventListener(\"abort\", onAbort, { once: true });\n }\n\n this.connection\n .prompt({\n sessionId: this.acpSessionId,\n prompt: buildAcpPromptBlocks(input),\n })\n .then((response: AcpPromptResponse) => {\n queue.push({ type: \"done\", reason: response?.stopReason });\n })\n .catch((error: unknown) => {\n queue.push({ type: \"error\", error: acpErrorMessage(error) });\n })\n .finally(() => {\n if (abort) abort.removeEventListener(\"abort\", onAbort);\n this.rejectAllPending();\n queue.close();\n this.queue = null;\n });\n\n yield* queue;\n }\n\n async approve(approval: AgentHarnessApproval): Promise<void> {\n const pending = this.pendingPermissions.get(approval.id);\n if (!pending) return;\n this.pendingPermissions.delete(approval.id);\n pending.resolve(\n buildAcpPermissionResponse(pending.options, approval.approved),\n );\n }\n\n async detach(): Promise<unknown> {\n const state = { sessionId: this.acpSessionId, cwd: this.cwd };\n await this.destroy();\n return state;\n }\n\n async stop(): Promise<unknown> {\n return this.detach();\n }\n\n async destroy(): Promise<void> {\n if (this.shuttingDown) return;\n this.shuttingDown = true;\n this.rejectAllPending();\n try {\n this.child.stdin?.end();\n } catch {}\n if (!this.childExited && this.child.exitCode === null) {\n try {\n this.child.kill(\"SIGTERM\");\n } catch {}\n const killTimer = setTimeout(() => {\n try {\n if (this.child.exitCode === null) this.child.kill(\"SIGKILL\");\n } catch {}\n }, SIGKILL_GRACE_MS);\n killTimer.unref?.();\n }\n }\n\n // --- ACP Client implementation (agent -> client) ---\n\n private createClient() {\n return {\n sessionUpdate: async (params: AcpSessionNotification) => {\n this.handleSessionUpdate(params.update);\n },\n requestPermission: async (params: AcpRequestPermissionRequest) =>\n this.handlePermission(params),\n readTextFile: async (params: AcpReadTextFileRequest) =>\n this.handleReadTextFile(params),\n writeTextFile: async (params: AcpWriteTextFileRequest) =>\n this.handleWriteTextFile(params),\n };\n }\n\n private handleSessionUpdate(update: AcpSessionUpdate): void {\n if (update?.sessionUpdate === \"tool_call\" && update.title) {\n this.toolTitles.set(update.toolCallId, update.title);\n }\n // Updates that arrive without an active turn are history replay from\n // loadSession; the transcript already contains them, so drop them.\n if (!this.queue) return;\n for (const event of acpUpdateToHarnessEvents(update, (id) =>\n this.toolTitles.get(id),\n )) {\n this.queue.push(event);\n }\n }\n\n private async handlePermission(\n params: AcpRequestPermissionRequest,\n ): Promise<AcpPermissionResponse> {\n const toolCall = params.toolCall ?? {};\n const decision = acpAutoPermissionDecision(\n toolCall.kind ?? undefined,\n this.permissionMode,\n );\n if (decision === \"allow\") {\n const optionId = selectAcpPermissionOption(params.options ?? [], true);\n if (optionId) return { outcome: { outcome: \"selected\", optionId } };\n }\n if (!this.queue) {\n // No surface to prompt on: decline rather than hang the agent's turn.\n return buildAcpPermissionResponse(params.options ?? [], false);\n }\n const id = `acp-approval-${++this.approvalCounter}`;\n const response = new Promise<AcpPermissionResponse>((resolve) => {\n this.pendingPermissions.set(id, {\n resolve,\n options: params.options ?? [],\n });\n });\n this.queue.push({\n type: \"approval-request\",\n id,\n tool: toolCall.toolCallId ?? toolCall.title,\n message: toolCall.title\n ? `Approve: ${toolCall.title}`\n : \"Agent is requesting permission\",\n input: toolCall.rawInput,\n });\n return response;\n }\n\n private async handleReadTextFile(\n params: AcpReadTextFileRequest,\n ): Promise<{ content: string }> {\n const abs = resolveAcpWorkspacePath(this.cwd, params.path);\n const raw = await fs.readFile(abs, \"utf8\");\n return { content: sliceTextFile(raw, params.line, params.limit) };\n }\n\n private async handleWriteTextFile(\n params: AcpWriteTextFileRequest,\n ): Promise<Record<string, never>> {\n const abs = resolveAcpWorkspacePath(this.cwd, params.path);\n const existed = await fileExists(abs);\n await fs.mkdir(path.dirname(abs), { recursive: true });\n await fs.writeFile(abs, params.content, \"utf8\");\n this.queue?.push({\n type: \"file-change\",\n path: params.path,\n operation: existed ? \"update\" : \"create\",\n });\n return {};\n }\n\n private rejectAllPending(): void {\n if (this.pendingPermissions.size === 0) return;\n for (const [, pending] of this.pendingPermissions) {\n pending.resolve({ outcome: { outcome: \"cancelled\" } });\n }\n this.pendingPermissions.clear();\n }\n\n private childExitMessage(): string {\n const tail = this.stderrTail.trim();\n const base = `[acp-harness] ${this.command} exited before the turn completed.`;\n return tail ? `${base}\\n${tail.slice(-1_000)}` : base;\n }\n}\n\n// --- Pure helpers (exported for testing) ---\n\n/** Build the ACP prompt content blocks for a turn. */\nexport function buildAcpPromptBlocks(input: {\n prompt?: string;\n messages?: AgentHarnessMessage[];\n}): Array<{ type: \"text\"; text: string }> {\n if (input.prompt && input.prompt.trim()) {\n return [{ type: \"text\", text: input.prompt }];\n }\n const messages = input.messages ?? [];\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].role === \"user\") {\n const text = messageToText(messages[i].content);\n if (text.trim()) return [{ type: \"text\", text }];\n }\n }\n const joined = messages\n .map((message) => messageToText(message.content))\n .filter(Boolean)\n .join(\"\\n\\n\");\n return [{ type: \"text\", text: joined }];\n}\n\nfunction messageToText(content: string | unknown[]): string {\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n return content\n .map((part) => {\n if (typeof part === \"string\") return part;\n if (part && typeof part === \"object\" && \"text\" in part) {\n const text = (part as { text?: unknown }).text;\n return typeof text === \"string\" ? text : \"\";\n }\n return \"\";\n })\n .filter(Boolean)\n .join(\"\");\n}\n\n/**\n * Translate a single ACP `session/update` payload into harness events. Pure and\n * stateless; the caller supplies a resolver for tool titles seen on earlier\n * `tool_call` updates so completion events can be labelled.\n */\nexport function acpUpdateToHarnessEvents(\n update: AcpSessionUpdate,\n titleFor?: (toolCallId: string) => string | undefined,\n): AgentHarnessEvent[] {\n switch (update.sessionUpdate) {\n case \"agent_message_chunk\": {\n const text = acpContentBlockToText(update.content);\n return text ? [{ type: \"text-delta\", text }] : [];\n }\n case \"agent_thought_chunk\": {\n const text = acpContentBlockToText(update.content);\n return text ? [{ type: \"thinking-delta\", text }] : [];\n }\n case \"user_message_chunk\":\n // The user's own message; already in the transcript.\n return [];\n case \"tool_call\": {\n const events: AgentHarnessEvent[] = [\n {\n type: \"tool-start\",\n id: update.toolCallId,\n name: update.title || update.kind || \"tool\",\n input: update.rawInput ?? {},\n },\n ];\n events.push(...acpFileChangeEventsFromToolContent(update.content));\n if (isTerminalToolStatus(update.status)) {\n events.push({\n type: \"tool-done\",\n id: update.toolCallId,\n name: update.title || titleFor?.(update.toolCallId) || \"tool\",\n result: update.rawOutput ?? acpToolContentText(update.content),\n });\n }\n return events;\n }\n case \"tool_call_update\": {\n const content = update.content ?? undefined;\n const events: AgentHarnessEvent[] =\n acpFileChangeEventsFromToolContent(content);\n if (isTerminalToolStatus(update.status)) {\n events.push({\n type: \"tool-done\",\n id: update.toolCallId,\n name: update.title || titleFor?.(update.toolCallId) || \"tool\",\n result: update.rawOutput ?? acpToolContentText(content),\n });\n }\n return events;\n }\n case \"plan\":\n return [\n {\n type: \"activity\",\n label: acpPlanLabel(update.entries),\n tool: \"acp:plan\",\n },\n ];\n case \"available_commands_update\":\n case \"current_mode_update\":\n return [];\n default:\n return [];\n }\n}\n\nfunction isTerminalToolStatus(status: unknown): boolean {\n return status === \"completed\" || status === \"failed\";\n}\n\n/** Extract displayable text from an ACP content block. */\nexport function acpContentBlockToText(\n block: AcpContentBlock | undefined,\n): string {\n if (!block || typeof block !== \"object\") return \"\";\n if (block.type === \"text\")\n return typeof block.text === \"string\" ? block.text : \"\";\n if (block.type === \"resource_link\") {\n const label = block.name || block.uri || \"\";\n return block.uri ? `[${label}](${block.uri})` : label;\n }\n return \"\";\n}\n\nfunction acpToolContentText(\n content: AcpToolCallContent[] | undefined | null,\n): string {\n if (!Array.isArray(content)) return \"\";\n return content\n .map((entry) => {\n if (entry?.type === \"content\")\n return acpContentBlockToText(entry.content);\n if (entry?.type === \"diff\" && entry.path) return `diff: ${entry.path}`;\n return \"\";\n })\n .filter(Boolean)\n .join(\"\\n\");\n}\n\n/** Derive file-change events from a tool call's `diff` content blocks. */\nexport function acpFileChangeEventsFromToolContent(\n content: AcpToolCallContent[] | undefined | null,\n): AgentHarnessEvent[] {\n if (!Array.isArray(content)) return [];\n const events: AgentHarnessEvent[] = [];\n for (const entry of content) {\n if (entry?.type === \"diff\" && typeof entry.path === \"string\") {\n events.push({\n type: \"file-change\",\n path: entry.path,\n operation:\n entry.oldText === null || entry.oldText === undefined\n ? \"create\"\n : \"update\",\n });\n }\n }\n return events;\n}\n\nfunction acpPlanLabel(entries: AcpPlanEntry[] | undefined): string {\n const list = Array.isArray(entries) ? entries : [];\n const total = list.length;\n const done = list.filter((entry) => entry?.status === \"completed\").length;\n const active = list.find((entry) => entry?.status === \"in_progress\");\n const suffix = active?.content ? ` — ${active.content}` : \"\";\n return `Updated plan (${done}/${total})${suffix}`;\n}\n\n/**\n * Map an Agent-Native permission mode onto a decision for an ACP permission\n * request, using the tool-call kind the agent reports. Reads always run; edits\n * run under `allow-edits`; everything risky prompts unless `allow-all`.\n */\nexport function acpAutoPermissionDecision(\n kind: string | undefined,\n mode: AgentHarnessPermissionMode,\n): \"allow\" | \"prompt\" {\n if (mode === \"allow-all\") return \"allow\";\n const resolved = kind ?? \"other\";\n const readish =\n resolved === \"read\" ||\n resolved === \"search\" ||\n resolved === \"fetch\" ||\n resolved === \"think\";\n if (readish) return \"allow\";\n if (mode === \"allow-edits\") {\n return resolved === \"edit\" || resolved === \"move\" ? \"allow\" : \"prompt\";\n }\n return \"prompt\";\n}\n\n/**\n * Pick the option id to return for an ACP permission request. Prefers the\n * \"once\" variant so approvals do not silently become \"always\".\n */\nexport function selectAcpPermissionOption(\n options: AcpPermissionOption[],\n approved: boolean,\n): string | undefined {\n const order = approved\n ? ([\"allow_once\", \"allow_always\"] as const)\n : ([\"reject_once\", \"reject_always\"] as const);\n for (const kind of order) {\n const match = options.find((option) => option?.kind === kind);\n if (match) return match.optionId;\n }\n return undefined;\n}\n\nfunction buildAcpPermissionResponse(\n options: AcpPermissionOption[],\n approved: boolean,\n): AcpPermissionResponse {\n const optionId = selectAcpPermissionOption(options, approved);\n if (optionId) return { outcome: { outcome: \"selected\", optionId } };\n return { outcome: { outcome: \"cancelled\" } };\n}\n\n/**\n * Resolve a path requested by the agent against the session workspace, refusing\n * anything that escapes it. The agent already has its own filesystem tools;\n * this `fs/*` surface is a scoped convenience, not an arbitrary read/write hole.\n */\nexport function resolveAcpWorkspacePath(\n cwd: string,\n requestedPath: string,\n): string {\n if (typeof requestedPath !== \"string\" || requestedPath.length === 0) {\n throw new Error(\"[acp-harness] File path must be a non-empty string.\");\n }\n const normalizedCwd = path.resolve(cwd);\n const abs = path.isAbsolute(requestedPath)\n ? path.resolve(requestedPath)\n : path.resolve(normalizedCwd, requestedPath);\n const rel = path.relative(normalizedCwd, abs);\n if (rel === \"\") return abs;\n if (rel === \"..\" || rel.startsWith(`..${path.sep}`) || path.isAbsolute(rel)) {\n throw new Error(\n `[acp-harness] Refusing file access outside the session workspace: ${requestedPath}`,\n );\n }\n return abs;\n}\n\nfunction sliceTextFile(\n content: string,\n line?: number | null,\n limit?: number | null,\n): string {\n if (line == null && limit == null) return content;\n const lines = content.split(\"\\n\");\n const start = line && line > 0 ? line - 1 : 0;\n const end = limit && limit > 0 ? start + limit : lines.length;\n return lines.slice(start, end).join(\"\\n\");\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction acpErrorMessage(error: unknown): string {\n if (error && typeof error === \"object\") {\n const record = error as { message?: unknown; code?: unknown };\n if (typeof record.message === \"string\" && record.message) {\n return record.message;\n }\n if (record.code !== undefined) {\n return `ACP request failed (code ${String(record.code)})`;\n }\n }\n return typeof error === \"string\" ? error : \"ACP request failed\";\n}\n\n// --- Minimal structural mirrors of the ACP schema (avoids a build-time dep) ---\n\ninterface AcpContentBlock {\n type: string;\n text?: string;\n uri?: string;\n name?: string;\n [key: string]: unknown;\n}\n\ninterface AcpToolCallContent {\n type: string;\n content?: AcpContentBlock;\n path?: string;\n oldText?: string | null;\n newText?: string;\n terminalId?: string;\n}\n\ninterface AcpPlanEntry {\n content?: string;\n status?: string;\n priority?: string;\n}\n\nexport type AcpSessionUpdate =\n | {\n sessionUpdate:\n | \"agent_message_chunk\"\n | \"user_message_chunk\"\n | \"agent_thought_chunk\";\n content: AcpContentBlock;\n }\n | {\n sessionUpdate: \"tool_call\";\n toolCallId: string;\n title: string;\n kind?: string;\n status?: string;\n content?: AcpToolCallContent[];\n rawInput?: Record<string, unknown>;\n rawOutput?: Record<string, unknown>;\n locations?: unknown[];\n }\n | {\n sessionUpdate: \"tool_call_update\";\n toolCallId: string;\n title?: string | null;\n kind?: string | null;\n status?: string | null;\n content?: AcpToolCallContent[] | null;\n rawInput?: Record<string, unknown>;\n rawOutput?: Record<string, unknown>;\n }\n | { sessionUpdate: \"plan\"; entries: AcpPlanEntry[] }\n | { sessionUpdate: \"available_commands_update\"; availableCommands: unknown[] }\n | { sessionUpdate: \"current_mode_update\"; currentModeId: string };\n\ninterface AcpSessionNotification {\n sessionId: string;\n update: AcpSessionUpdate;\n}\n\ninterface AcpPermissionOption {\n optionId: string;\n name: string;\n kind: \"allow_once\" | \"allow_always\" | \"reject_once\" | \"reject_always\";\n}\n\ninterface AcpRequestPermissionRequest {\n sessionId: string;\n options: AcpPermissionOption[];\n toolCall: {\n toolCallId?: string;\n title?: string;\n kind?: string | null;\n rawInput?: Record<string, unknown>;\n };\n}\n\ntype AcpPermissionResponse = {\n outcome: { outcome: \"selected\"; optionId: string } | { outcome: \"cancelled\" };\n};\n\ninterface AcpReadTextFileRequest {\n sessionId: string;\n path: string;\n line?: number | null;\n limit?: number | null;\n}\n\ninterface AcpWriteTextFileRequest {\n sessionId: string;\n path: string;\n content: string;\n}\n\ninterface AcpPromptResponse {\n stopReason?: string;\n}\n\n/** Minimal async queue bridging ACP's callback updates to an async iterable. */\nclass AsyncEventQueue<T> implements AsyncIterable<T> {\n private readonly values: T[] = [];\n private readonly resolvers: Array<(result: IteratorResult<T>) => void> = [];\n private closed = false;\n\n push(value: T): void {\n if (this.closed) return;\n const resolver = this.resolvers.shift();\n if (resolver) resolver({ value, done: false });\n else this.values.push(value);\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n let resolver: ((result: IteratorResult<T>) => void) | undefined;\n while ((resolver = this.resolvers.shift())) {\n resolver({ value: undefined as never, done: true });\n }\n }\n\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return {\n next: (): Promise<IteratorResult<T>> => {\n if (this.values.length > 0) {\n return Promise.resolve({\n value: this.values.shift() as T,\n done: false,\n });\n }\n if (this.closed) {\n return Promise.resolve({ value: undefined as never, done: true });\n }\n return new Promise<IteratorResult<T>>((resolve) => {\n this.resolvers.push(resolve);\n });\n },\n };\n }\n}\n"]}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Built-in ACP harness presets.
3
+ *
4
+ * These register convenient defaults for known ACP-compliant local coding
5
+ * agents. Each preset's command/args are overridable through the resolve
6
+ * config, e.g.
7
+ *
8
+ * resolveAgentHarness("acp:gemini", { command: "gemini" });
9
+ *
10
+ * The default commands launch the agents through `npx` so they work without a
11
+ * prior global install. They are documented and overridable because agent CLIs
12
+ * still evolve their ACP entry flags.
13
+ */
14
+ interface AcpPreset {
15
+ name: string;
16
+ label: string;
17
+ description: string;
18
+ command: string;
19
+ args: string[];
20
+ }
21
+ export declare const BUILTIN_ACP_PRESETS: AcpPreset[];
22
+ /** Register the built-in ACP presets. */
23
+ export declare function registerBuiltinAcpHarnesses(): void;
24
+ export {};
25
+ //# sourceMappingURL=acp-builtin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp-builtin.d.ts","sourceRoot":"","sources":["../../../src/agent/harness/acp-builtin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,eAAO,MAAM,mBAAmB,EAAE,SAAS,EAe1C,CAAC;AAEF,yCAAyC;AACzC,wBAAgB,2BAA2B,IAAI,IAAI,CAuBlD"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Built-in ACP harness presets.
3
+ *
4
+ * These register convenient defaults for known ACP-compliant local coding
5
+ * agents. Each preset's command/args are overridable through the resolve
6
+ * config, e.g.
7
+ *
8
+ * resolveAgentHarness("acp:gemini", { command: "gemini" });
9
+ *
10
+ * The default commands launch the agents through `npx` so they work without a
11
+ * prior global install. They are documented and overridable because agent CLIs
12
+ * still evolve their ACP entry flags.
13
+ */
14
+ import { createAcpHarnessAdapter, } from "./acp-adapter.js";
15
+ import { registerAgentHarness } from "./registry.js";
16
+ export const BUILTIN_ACP_PRESETS = [
17
+ {
18
+ name: "acp:gemini",
19
+ label: "Gemini CLI (ACP)",
20
+ description: "Drives the Gemini CLI as a local ACP coding agent.",
21
+ command: "npx",
22
+ args: ["-y", "@google/gemini-cli", "--experimental-acp"],
23
+ },
24
+ {
25
+ name: "acp:claude-code",
26
+ label: "Claude Code (ACP)",
27
+ description: "Drives Claude Code as a local ACP coding agent.",
28
+ command: "npx",
29
+ args: ["-y", "@zed-industries/claude-code-acp"],
30
+ },
31
+ ];
32
+ /** Register the built-in ACP presets. */
33
+ export function registerBuiltinAcpHarnesses() {
34
+ for (const preset of BUILTIN_ACP_PRESETS) {
35
+ registerAgentHarness({
36
+ name: preset.name,
37
+ label: preset.label,
38
+ description: preset.description,
39
+ installPackage: createAcpHarnessAdapter({ command: preset.command })
40
+ .installPackage,
41
+ capabilities: createAcpHarnessAdapter({ command: preset.command })
42
+ .capabilities,
43
+ create: (config) => {
44
+ const overrides = (config ?? {});
45
+ return createAcpHarnessAdapter({
46
+ name: preset.name,
47
+ label: preset.label,
48
+ description: preset.description,
49
+ command: preset.command,
50
+ args: preset.args,
51
+ ...overrides,
52
+ });
53
+ },
54
+ });
55
+ }
56
+ }
57
+ //# sourceMappingURL=acp-builtin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp-builtin.js","sourceRoot":"","sources":["../../../src/agent/harness/acp-builtin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,uBAAuB,GAExB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAUrD,MAAM,CAAC,MAAM,mBAAmB,GAAgB;IAC9C;QACE,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,oDAAoD;QACjE,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,oBAAoB,EAAE,oBAAoB,CAAC;KACzD;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,iDAAiD;QAC9D,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,iCAAiC,CAAC;KAChD;CACF,CAAC;AAEF,yCAAyC;AACzC,MAAM,UAAU,2BAA2B;IACzC,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACzC,oBAAoB,CAAC;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,cAAc,EAAE,uBAAuB,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;iBACjE,cAAc;YACjB,YAAY,EAAE,uBAAuB,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;iBAC/D,YAAY;YACf,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACjB,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,EAAE,CAAsC,CAAC;gBACtE,OAAO,uBAAuB,CAAC;oBAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,GAAG,SAAS;iBACb,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC","sourcesContent":["/**\n * Built-in ACP harness presets.\n *\n * These register convenient defaults for known ACP-compliant local coding\n * agents. Each preset's command/args are overridable through the resolve\n * config, e.g.\n *\n * resolveAgentHarness(\"acp:gemini\", { command: \"gemini\" });\n *\n * The default commands launch the agents through `npx` so they work without a\n * prior global install. They are documented and overridable because agent CLIs\n * still evolve their ACP entry flags.\n */\n\nimport {\n createAcpHarnessAdapter,\n type AcpHarnessAdapterOptions,\n} from \"./acp-adapter.js\";\nimport { registerAgentHarness } from \"./registry.js\";\n\ninterface AcpPreset {\n name: string;\n label: string;\n description: string;\n command: string;\n args: string[];\n}\n\nexport const BUILTIN_ACP_PRESETS: AcpPreset[] = [\n {\n name: \"acp:gemini\",\n label: \"Gemini CLI (ACP)\",\n description: \"Drives the Gemini CLI as a local ACP coding agent.\",\n command: \"npx\",\n args: [\"-y\", \"@google/gemini-cli\", \"--experimental-acp\"],\n },\n {\n name: \"acp:claude-code\",\n label: \"Claude Code (ACP)\",\n description: \"Drives Claude Code as a local ACP coding agent.\",\n command: \"npx\",\n args: [\"-y\", \"@zed-industries/claude-code-acp\"],\n },\n];\n\n/** Register the built-in ACP presets. */\nexport function registerBuiltinAcpHarnesses(): void {\n for (const preset of BUILTIN_ACP_PRESETS) {\n registerAgentHarness({\n name: preset.name,\n label: preset.label,\n description: preset.description,\n installPackage: createAcpHarnessAdapter({ command: preset.command })\n .installPackage,\n capabilities: createAcpHarnessAdapter({ command: preset.command })\n .capabilities,\n create: (config) => {\n const overrides = (config ?? {}) as Partial<AcpHarnessAdapterOptions>;\n return createAcpHarnessAdapter({\n name: preset.name,\n label: preset.label,\n description: preset.description,\n command: preset.command,\n args: preset.args,\n ...overrides,\n });\n },\n });\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"builtin.d.ts","sourceRoot":"","sources":["../../../src/agent/harness/builtin.ts"],"names":[],"mappings":"AAYA,wBAAgB,6BAA6B,IAAI,IAAI,CAgBpD"}
1
+ {"version":3,"file":"builtin.d.ts","sourceRoot":"","sources":["../../../src/agent/harness/builtin.ts"],"names":[],"mappings":"AAiBA,wBAAgB,6BAA6B,IAAI,IAAI,CAgCpD"}
@@ -1,3 +1,5 @@
1
+ import { createAcpHarnessAdapter, } from "./acp-adapter.js";
2
+ import { registerBuiltinAcpHarnesses } from "./acp-builtin.js";
1
3
  import { createAiSdkHarnessAdapter, } from "./ai-sdk-adapter.js";
2
4
  import { registerAgentHarness } from "./registry.js";
3
5
  const AI_SDK_HARNESS_RUNTIMES = [
@@ -20,5 +22,18 @@ export function registerBuiltinAgentHarnesses() {
20
22
  }),
21
23
  });
22
24
  }
25
+ // Generic ACP entry: resolve with { command, args } for any ACP agent.
26
+ const acpAdapter = createAcpHarnessAdapter({ command: "acp" });
27
+ registerAgentHarness({
28
+ name: "acp",
29
+ label: "ACP Agent",
30
+ description: "Drives a local ACP-compliant coding agent over stdio.",
31
+ installPackage: acpAdapter.installPackage,
32
+ capabilities: acpAdapter.capabilities,
33
+ create: (config) => createAcpHarnessAdapter({
34
+ ...(config ?? {}),
35
+ }),
36
+ });
37
+ registerBuiltinAcpHarnesses();
23
38
  }
24
39
  //# sourceMappingURL=builtin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"builtin.js","sourceRoot":"","sources":["../../../src/agent/harness/builtin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,GAE1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,uBAAuB,GAA0B;IACrD,aAAa;IACb,OAAO;IACP,IAAI;CACL,CAAC;AAEF,MAAM,UAAU,6BAA6B;IAC3C,KAAK,MAAM,OAAO,IAAI,uBAAuB,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,yBAAyB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,oBAAoB,CAAC;YACnB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACjB,yBAAyB,CAAC;gBACxB,OAAO;gBACP,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;aACiC,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;AACH,CAAC","sourcesContent":["import {\n createAiSdkHarnessAdapter,\n type AiSdkHarnessRuntime,\n} from \"./ai-sdk-adapter.js\";\nimport { registerAgentHarness } from \"./registry.js\";\n\nconst AI_SDK_HARNESS_RUNTIMES: AiSdkHarnessRuntime[] = [\n \"claude-code\",\n \"codex\",\n \"pi\",\n];\n\nexport function registerBuiltinAgentHarnesses(): void {\n for (const runtime of AI_SDK_HARNESS_RUNTIMES) {\n const adapter = createAiSdkHarnessAdapter({ runtime });\n registerAgentHarness({\n name: adapter.name,\n label: adapter.label,\n description: adapter.description,\n installPackage: adapter.installPackage,\n capabilities: adapter.capabilities,\n create: (config) =>\n createAiSdkHarnessAdapter({\n runtime,\n ...(config ?? {}),\n } as Parameters<typeof createAiSdkHarnessAdapter>[0]),\n });\n }\n}\n"]}
1
+ {"version":3,"file":"builtin.js","sourceRoot":"","sources":["../../../src/agent/harness/builtin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,GAExB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EACL,yBAAyB,GAE1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,uBAAuB,GAA0B;IACrD,aAAa;IACb,OAAO;IACP,IAAI;CACL,CAAC;AAEF,MAAM,UAAU,6BAA6B;IAC3C,KAAK,MAAM,OAAO,IAAI,uBAAuB,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,yBAAyB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,oBAAoB,CAAC;YACnB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACjB,yBAAyB,CAAC;gBACxB,OAAO;gBACP,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;aACiC,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,MAAM,UAAU,GAAG,uBAAuB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,oBAAoB,CAAC;QACnB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,uDAAuD;QACpE,cAAc,EAAE,UAAU,CAAC,cAAc;QACzC,YAAY,EAAE,UAAU,CAAC,YAAY;QACrC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACjB,uBAAuB,CAAC;YACtB,GAAI,CAAC,MAAM,IAAI,EAAE,CAAuC;SACzD,CAAC;KACL,CAAC,CAAC;IAEH,2BAA2B,EAAE,CAAC;AAChC,CAAC","sourcesContent":["import {\n createAcpHarnessAdapter,\n type AcpHarnessAdapterOptions,\n} from \"./acp-adapter.js\";\nimport { registerBuiltinAcpHarnesses } from \"./acp-builtin.js\";\nimport {\n createAiSdkHarnessAdapter,\n type AiSdkHarnessRuntime,\n} from \"./ai-sdk-adapter.js\";\nimport { registerAgentHarness } from \"./registry.js\";\n\nconst AI_SDK_HARNESS_RUNTIMES: AiSdkHarnessRuntime[] = [\n \"claude-code\",\n \"codex\",\n \"pi\",\n];\n\nexport function registerBuiltinAgentHarnesses(): void {\n for (const runtime of AI_SDK_HARNESS_RUNTIMES) {\n const adapter = createAiSdkHarnessAdapter({ runtime });\n registerAgentHarness({\n name: adapter.name,\n label: adapter.label,\n description: adapter.description,\n installPackage: adapter.installPackage,\n capabilities: adapter.capabilities,\n create: (config) =>\n createAiSdkHarnessAdapter({\n runtime,\n ...(config ?? {}),\n } as Parameters<typeof createAiSdkHarnessAdapter>[0]),\n });\n }\n\n // Generic ACP entry: resolve with { command, args } for any ACP agent.\n const acpAdapter = createAcpHarnessAdapter({ command: \"acp\" });\n registerAgentHarness({\n name: \"acp\",\n label: \"ACP Agent\",\n description: \"Drives a local ACP-compliant coding agent over stdio.\",\n installPackage: acpAdapter.installPackage,\n capabilities: acpAdapter.capabilities,\n create: (config) =>\n createAcpHarnessAdapter({\n ...((config ?? {}) as Partial<AcpHarnessAdapterOptions>),\n }),\n });\n\n registerBuiltinAcpHarnesses();\n}\n"]}
@@ -4,6 +4,8 @@ export { getAgentHarnessEntry, isAgentHarnessPackageInstalled, listAgentHarnesse
4
4
  export { ensureAgentHarnessSessionTables, getAgentHarnessSession, getAgentHarnessSessionByRunId, getLatestAgentHarnessSessionForThread, listAgentHarnessSessions, markAgentHarnessSessionStopped, saveAgentHarnessSession, updateAgentHarnessSession, type AgentHarnessSessionStatus, type SaveAgentHarnessSessionInput, type StoredAgentHarnessSession, } from "./store.js";
5
5
  export { sendAgentHarnessEvent, startAgentHarnessRun, type StartAgentHarnessRunOptions, } from "./runner.js";
6
6
  export { aiSdkHarnessPartToEvents, createAiSdkHarnessAdapter, type AiSdkHarnessAdapterOptions, type AiSdkHarnessRuntime, type CodexCliAuthConfig, } from "./ai-sdk-adapter.js";
7
+ export { ACP_PACKAGE, acpAutoPermissionDecision, acpContentBlockToText, acpFileChangeEventsFromToolContent, acpUpdateToHarnessEvents, buildAcpPromptBlocks, createAcpHarnessAdapter, resolveAcpWorkspacePath, selectAcpPermissionOption, type AcpHarnessAdapterOptions, type AcpSessionUpdate, } from "./acp-adapter.js";
8
+ export { BUILTIN_ACP_PRESETS, registerBuiltinAcpHarnesses, } from "./acp-builtin.js";
7
9
  export { registerBuiltinAgentHarnesses } from "./builtin.js";
8
10
  export { agentHarnessBackgroundAgentController, createAgentHarnessBackgroundAgentController, getAgentHarnessBackgroundRun, listAgentHarnessBackgroundRuns, listAgentHarnessBackgroundTranscriptEvents, stopAgentHarnessBackgroundRun, } from "./background.js";
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/harness/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAChC,iBAAiB,EACjB,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kCAAkC,EAClC,eAAe,IAAI,2BAA2B,GAC/C,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,+BAA+B,EAC/B,sBAAsB,EACtB,6BAA6B,EAC7B,qCAAqC,EACrC,wBAAwB,EACxB,8BAA8B,EAC9B,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,GAC/B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,2BAA2B,GACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EACL,qCAAqC,EACrC,2CAA2C,EAC3C,4BAA4B,EAC5B,8BAA8B,EAC9B,0CAA0C,EAC1C,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/harness/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAChC,iBAAiB,EACjB,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kCAAkC,EAClC,eAAe,IAAI,2BAA2B,GAC/C,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,+BAA+B,EAC/B,sBAAsB,EACtB,6BAA6B,EAC7B,qCAAqC,EACrC,wBAAwB,EACxB,8BAA8B,EAC9B,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,GAC/B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,2BAA2B,GACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,qBAAqB,EACrB,kCAAkC,EAClC,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EACL,qCAAqC,EACrC,2CAA2C,EAC3C,4BAA4B,EAC5B,8BAA8B,EAC9B,0CAA0C,EAC1C,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC"}
@@ -3,6 +3,8 @@ export { getAgentHarnessEntry, isAgentHarnessPackageInstalled, listAgentHarnesse
3
3
  export { ensureAgentHarnessSessionTables, getAgentHarnessSession, getAgentHarnessSessionByRunId, getLatestAgentHarnessSessionForThread, listAgentHarnessSessions, markAgentHarnessSessionStopped, saveAgentHarnessSession, updateAgentHarnessSession, } from "./store.js";
4
4
  export { sendAgentHarnessEvent, startAgentHarnessRun, } from "./runner.js";
5
5
  export { aiSdkHarnessPartToEvents, createAiSdkHarnessAdapter, } from "./ai-sdk-adapter.js";
6
+ export { ACP_PACKAGE, acpAutoPermissionDecision, acpContentBlockToText, acpFileChangeEventsFromToolContent, acpUpdateToHarnessEvents, buildAcpPromptBlocks, createAcpHarnessAdapter, resolveAcpWorkspacePath, selectAcpPermissionOption, } from "./acp-adapter.js";
7
+ export { BUILTIN_ACP_PRESETS, registerBuiltinAcpHarnesses, } from "./acp-builtin.js";
6
8
  export { registerBuiltinAgentHarnesses } from "./builtin.js";
7
9
  export { agentHarnessBackgroundAgentController, createAgentHarnessBackgroundAgentController, getAgentHarnessBackgroundRun, listAgentHarnessBackgroundRuns, listAgentHarnessBackgroundTranscriptEvents, stopAgentHarnessBackgroundRun, } from "./background.js";
8
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/harness/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,kCAAkC,EAClC,eAAe,IAAI,2BAA2B,GAC/C,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,+BAA+B,EAC/B,sBAAsB,EACtB,6BAA6B,EAC7B,qCAAqC,EACrC,wBAAwB,EACxB,8BAA8B,EAC9B,uBAAuB,EACvB,yBAAyB,GAI1B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAErB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAI1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EACL,qCAAqC,EACrC,2CAA2C,EAC3C,4BAA4B,EAC5B,8BAA8B,EAC9B,0CAA0C,EAC1C,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC","sourcesContent":["export type {\n AgentHarnessAdapter,\n AgentHarnessApproval,\n AgentHarnessCapabilities,\n AgentHarnessContinueInput,\n AgentHarnessCreateSessionOptions,\n AgentHarnessEvent,\n AgentHarnessMessage,\n AgentHarnessPermissionMode,\n AgentHarnessSession,\n AgentHarnessTurnInput,\n} from \"./types.js\";\nexport {\n agentHarnessEventToAgentChatEvents,\n stringifyResult as stringifyAgentHarnessResult,\n} from \"./translate.js\";\nexport {\n getAgentHarnessEntry,\n isAgentHarnessPackageInstalled,\n listAgentHarnesses,\n registerAgentHarness,\n resolveAgentHarness,\n type AgentHarnessEntry,\n} from \"./registry.js\";\nexport {\n ensureAgentHarnessSessionTables,\n getAgentHarnessSession,\n getAgentHarnessSessionByRunId,\n getLatestAgentHarnessSessionForThread,\n listAgentHarnessSessions,\n markAgentHarnessSessionStopped,\n saveAgentHarnessSession,\n updateAgentHarnessSession,\n type AgentHarnessSessionStatus,\n type SaveAgentHarnessSessionInput,\n type StoredAgentHarnessSession,\n} from \"./store.js\";\nexport {\n sendAgentHarnessEvent,\n startAgentHarnessRun,\n type StartAgentHarnessRunOptions,\n} from \"./runner.js\";\nexport {\n aiSdkHarnessPartToEvents,\n createAiSdkHarnessAdapter,\n type AiSdkHarnessAdapterOptions,\n type AiSdkHarnessRuntime,\n type CodexCliAuthConfig,\n} from \"./ai-sdk-adapter.js\";\nexport { registerBuiltinAgentHarnesses } from \"./builtin.js\";\nexport {\n agentHarnessBackgroundAgentController,\n createAgentHarnessBackgroundAgentController,\n getAgentHarnessBackgroundRun,\n listAgentHarnessBackgroundRuns,\n listAgentHarnessBackgroundTranscriptEvents,\n stopAgentHarnessBackgroundRun,\n} from \"./background.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/harness/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,kCAAkC,EAClC,eAAe,IAAI,2BAA2B,GAC/C,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,+BAA+B,EAC/B,sBAAsB,EACtB,6BAA6B,EAC7B,qCAAqC,EACrC,wBAAwB,EACxB,8BAA8B,EAC9B,uBAAuB,EACvB,yBAAyB,GAI1B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAErB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAI1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,qBAAqB,EACrB,kCAAkC,EAClC,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,GAG1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EACL,qCAAqC,EACrC,2CAA2C,EAC3C,4BAA4B,EAC5B,8BAA8B,EAC9B,0CAA0C,EAC1C,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC","sourcesContent":["export type {\n AgentHarnessAdapter,\n AgentHarnessApproval,\n AgentHarnessCapabilities,\n AgentHarnessContinueInput,\n AgentHarnessCreateSessionOptions,\n AgentHarnessEvent,\n AgentHarnessMessage,\n AgentHarnessPermissionMode,\n AgentHarnessSession,\n AgentHarnessTurnInput,\n} from \"./types.js\";\nexport {\n agentHarnessEventToAgentChatEvents,\n stringifyResult as stringifyAgentHarnessResult,\n} from \"./translate.js\";\nexport {\n getAgentHarnessEntry,\n isAgentHarnessPackageInstalled,\n listAgentHarnesses,\n registerAgentHarness,\n resolveAgentHarness,\n type AgentHarnessEntry,\n} from \"./registry.js\";\nexport {\n ensureAgentHarnessSessionTables,\n getAgentHarnessSession,\n getAgentHarnessSessionByRunId,\n getLatestAgentHarnessSessionForThread,\n listAgentHarnessSessions,\n markAgentHarnessSessionStopped,\n saveAgentHarnessSession,\n updateAgentHarnessSession,\n type AgentHarnessSessionStatus,\n type SaveAgentHarnessSessionInput,\n type StoredAgentHarnessSession,\n} from \"./store.js\";\nexport {\n sendAgentHarnessEvent,\n startAgentHarnessRun,\n type StartAgentHarnessRunOptions,\n} from \"./runner.js\";\nexport {\n aiSdkHarnessPartToEvents,\n createAiSdkHarnessAdapter,\n type AiSdkHarnessAdapterOptions,\n type AiSdkHarnessRuntime,\n type CodexCliAuthConfig,\n} from \"./ai-sdk-adapter.js\";\nexport {\n ACP_PACKAGE,\n acpAutoPermissionDecision,\n acpContentBlockToText,\n acpFileChangeEventsFromToolContent,\n acpUpdateToHarnessEvents,\n buildAcpPromptBlocks,\n createAcpHarnessAdapter,\n resolveAcpWorkspacePath,\n selectAcpPermissionOption,\n type AcpHarnessAdapterOptions,\n type AcpSessionUpdate,\n} from \"./acp-adapter.js\";\nexport {\n BUILTIN_ACP_PRESETS,\n registerBuiltinAcpHarnesses,\n} from \"./acp-builtin.js\";\nexport { registerBuiltinAgentHarnesses } from \"./builtin.js\";\nexport {\n agentHarnessBackgroundAgentController,\n createAgentHarnessBackgroundAgentController,\n getAgentHarnessBackgroundRun,\n listAgentHarnessBackgroundRuns,\n listAgentHarnessBackgroundTranscriptEvents,\n stopAgentHarnessBackgroundRun,\n} from \"./background.js\";\n"]}
@@ -0,0 +1,32 @@
1
+ import { A2AClient, type Message, type Task } from "../a2a/index.js";
2
+ export interface AgentEndpointOptions {
3
+ /**
4
+ * Optional URL base used when resolving relative app URLs.
5
+ */
6
+ base?: string;
7
+ }
8
+ export interface SendMessageOptions {
9
+ apiKey?: string;
10
+ contextId?: string;
11
+ metadata?: Record<string, unknown>;
12
+ requestTimeoutMs?: number;
13
+ /**
14
+ * If the target does not support streaming, fall back to async send + poll.
15
+ * Defaults to true.
16
+ */
17
+ fallbackToPolling?: boolean;
18
+ timeoutMs?: number;
19
+ userEmail?: string;
20
+ orgDomain?: string;
21
+ orgSecret?: string;
22
+ }
23
+ export declare function getMcpUrl(url: string, options?: AgentEndpointOptions): string;
24
+ export declare function getA2AUrl(url: string, options?: AgentEndpointOptions): string;
25
+ export declare function getAgentCardUrl(url: string, options?: AgentEndpointOptions): string;
26
+ /**
27
+ * Send a text prompt to an Agent-Native A2A endpoint and yield text deltas.
28
+ */
29
+ export declare function sendMessage(url: string, text: string, options?: SendMessageOptions): AsyncGenerator<string>;
30
+ export { A2AClient };
31
+ export type { Message, Task };
32
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/embedding/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEhF,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiBD,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAWR;AAED,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAiBR;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAMR;AAoBD;;GAEG;AACH,wBAAuB,WAAW,CAChC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,kBAAuB,GAC/B,cAAc,CAAC,MAAM,CAAC,CAsCxB;AAED,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,110 @@
1
+ import { A2AClient, callAgent } from "../a2a/index.js";
2
+ function appUrl(url, options = {}) {
3
+ const base = options.base ??
4
+ (typeof window !== "undefined"
5
+ ? window.location.href
6
+ : "http://agent-native.local");
7
+ return new URL(url, base);
8
+ }
9
+ function trimEndpointPath(pathname, suffix) {
10
+ const normalized = pathname.replace(/\/$/, "");
11
+ if (!normalized.endsWith(suffix))
12
+ return null;
13
+ return normalized.slice(0, -suffix.length) || "/";
14
+ }
15
+ export function getMcpUrl(url, options = {}) {
16
+ const parsed = appUrl(url, options);
17
+ const trimmed = trimEndpointPath(parsed.pathname, "/_agent-native/mcp");
18
+ if (trimmed !== null) {
19
+ parsed.pathname = `${trimmed.replace(/\/$/, "")}/_agent-native/mcp`;
20
+ }
21
+ else {
22
+ parsed.pathname = `${parsed.pathname.replace(/\/$/, "")}/_agent-native/mcp`;
23
+ }
24
+ parsed.search = "";
25
+ parsed.hash = "";
26
+ return parsed.toString();
27
+ }
28
+ export function getA2AUrl(url, options = {}) {
29
+ const parsed = appUrl(url, options);
30
+ const agentNativeTrimmed = trimEndpointPath(parsed.pathname, "/_agent-native/a2a");
31
+ const legacyTrimmed = trimEndpointPath(parsed.pathname, "/a2a");
32
+ if (agentNativeTrimmed !== null) {
33
+ parsed.pathname = `${agentNativeTrimmed.replace(/\/$/, "")}/_agent-native/a2a`;
34
+ }
35
+ else if (legacyTrimmed !== null) {
36
+ parsed.pathname = `${legacyTrimmed.replace(/\/$/, "")}/_agent-native/a2a`;
37
+ }
38
+ else {
39
+ parsed.pathname = `${parsed.pathname.replace(/\/$/, "")}/_agent-native/a2a`;
40
+ }
41
+ parsed.search = "";
42
+ parsed.hash = "";
43
+ return parsed.toString();
44
+ }
45
+ export function getAgentCardUrl(url, options = {}) {
46
+ const parsed = appUrl(url, options);
47
+ parsed.pathname = "/.well-known/agent-card.json";
48
+ parsed.search = "";
49
+ parsed.hash = "";
50
+ return parsed.toString();
51
+ }
52
+ function textMessage(text) {
53
+ return {
54
+ role: "user",
55
+ parts: [{ type: "text", text }],
56
+ };
57
+ }
58
+ function extractTaskText(task) {
59
+ return (task.status.message?.parts
60
+ .filter((part) => {
61
+ return part.type === "text" && typeof part.text === "string";
62
+ })
63
+ .map((part) => part.text)
64
+ .join("\n") ?? "");
65
+ }
66
+ /**
67
+ * Send a text prompt to an Agent-Native A2A endpoint and yield text deltas.
68
+ */
69
+ export async function* sendMessage(url, text, options = {}) {
70
+ const client = new A2AClient(url, options.apiKey, {
71
+ requestTimeoutMs: options.requestTimeoutMs,
72
+ });
73
+ const message = textMessage(text);
74
+ let previous = "";
75
+ let yielded = false;
76
+ try {
77
+ for await (const task of client.stream(message, {
78
+ contextId: options.contextId,
79
+ metadata: options.metadata,
80
+ })) {
81
+ const next = extractTaskText(task);
82
+ const chunk = next.startsWith(previous)
83
+ ? next.slice(previous.length)
84
+ : next;
85
+ previous = next;
86
+ if (chunk) {
87
+ yielded = true;
88
+ yield chunk;
89
+ }
90
+ }
91
+ return;
92
+ }
93
+ catch (error) {
94
+ if (yielded || options.fallbackToPolling === false)
95
+ throw error;
96
+ }
97
+ const answer = await callAgent(url, text, {
98
+ apiKey: options.apiKey,
99
+ contextId: options.contextId,
100
+ timeoutMs: options.timeoutMs,
101
+ userEmail: options.userEmail,
102
+ orgDomain: options.orgDomain,
103
+ orgSecret: options.orgSecret,
104
+ async: true,
105
+ });
106
+ if (answer)
107
+ yield answer;
108
+ }
109
+ export { A2AClient };
110
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/embedding/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAA2B,MAAM,iBAAiB,CAAC;AAyBhF,SAAS,MAAM,CAAC,GAAW,EAAE,UAAgC,EAAE;IAC7D,MAAM,IAAI,GACR,OAAO,CAAC,IAAI;QACZ,CAAC,OAAO,MAAM,KAAK,WAAW;YAC5B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI;YACtB,CAAC,CAAC,2BAA2B,CAAC,CAAC;IACnC,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB,EAAE,MAAc;IACxD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,GAAW,EACX,UAAgC,EAAE;IAElC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IACxE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,QAAQ,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,QAAQ,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC;IAC9E,CAAC;IACD,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,GAAW,EACX,UAAgC,EAAE;IAElC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,kBAAkB,GAAG,gBAAgB,CACzC,MAAM,CAAC,QAAQ,EACf,oBAAoB,CACrB,CAAC;IACF,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChE,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,QAAQ,GAAG,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC;IACjF,CAAC;SAAM,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,CAAC,QAAQ,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,QAAQ,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC;IAC9E,CAAC;IACD,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,GAAW,EACX,UAAgC,EAAE;IAElC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,CAAC,QAAQ,GAAG,8BAA8B,CAAC;IACjD,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,IAAU;IACjC,OAAO,CACL,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK;SACvB,MAAM,CAAC,CAAC,IAAI,EAA0C,EAAE;QACvD,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;IAC/D,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACxB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CACpB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,WAAW,CAChC,GAAW,EACX,IAAY,EACZ,UAA8B,EAAE;IAEhC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE;QAChD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;YAC9C,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,EAAE,CAAC;YACH,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBACrC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC7B,CAAC,CAAC,IAAI,CAAC;YACT,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,IAAI,OAAO,CAAC,iBAAiB,KAAK,KAAK;YAAE,MAAM,KAAK,CAAC;IAClE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;QACxC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IACH,IAAI,MAAM;QAAE,MAAM,MAAM,CAAC;AAC3B,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import { A2AClient, callAgent, type Message, type Task } from \"../a2a/index.js\";\n\nexport interface AgentEndpointOptions {\n /**\n * Optional URL base used when resolving relative app URLs.\n */\n base?: string;\n}\n\nexport interface SendMessageOptions {\n apiKey?: string;\n contextId?: string;\n metadata?: Record<string, unknown>;\n requestTimeoutMs?: number;\n /**\n * If the target does not support streaming, fall back to async send + poll.\n * Defaults to true.\n */\n fallbackToPolling?: boolean;\n timeoutMs?: number;\n userEmail?: string;\n orgDomain?: string;\n orgSecret?: string;\n}\n\nfunction appUrl(url: string, options: AgentEndpointOptions = {}): URL {\n const base =\n options.base ??\n (typeof window !== \"undefined\"\n ? window.location.href\n : \"http://agent-native.local\");\n return new URL(url, base);\n}\n\nfunction trimEndpointPath(pathname: string, suffix: string): string | null {\n const normalized = pathname.replace(/\\/$/, \"\");\n if (!normalized.endsWith(suffix)) return null;\n return normalized.slice(0, -suffix.length) || \"/\";\n}\n\nexport function getMcpUrl(\n url: string,\n options: AgentEndpointOptions = {},\n): string {\n const parsed = appUrl(url, options);\n const trimmed = trimEndpointPath(parsed.pathname, \"/_agent-native/mcp\");\n if (trimmed !== null) {\n parsed.pathname = `${trimmed.replace(/\\/$/, \"\")}/_agent-native/mcp`;\n } else {\n parsed.pathname = `${parsed.pathname.replace(/\\/$/, \"\")}/_agent-native/mcp`;\n }\n parsed.search = \"\";\n parsed.hash = \"\";\n return parsed.toString();\n}\n\nexport function getA2AUrl(\n url: string,\n options: AgentEndpointOptions = {},\n): string {\n const parsed = appUrl(url, options);\n const agentNativeTrimmed = trimEndpointPath(\n parsed.pathname,\n \"/_agent-native/a2a\",\n );\n const legacyTrimmed = trimEndpointPath(parsed.pathname, \"/a2a\");\n if (agentNativeTrimmed !== null) {\n parsed.pathname = `${agentNativeTrimmed.replace(/\\/$/, \"\")}/_agent-native/a2a`;\n } else if (legacyTrimmed !== null) {\n parsed.pathname = `${legacyTrimmed.replace(/\\/$/, \"\")}/_agent-native/a2a`;\n } else {\n parsed.pathname = `${parsed.pathname.replace(/\\/$/, \"\")}/_agent-native/a2a`;\n }\n parsed.search = \"\";\n parsed.hash = \"\";\n return parsed.toString();\n}\n\nexport function getAgentCardUrl(\n url: string,\n options: AgentEndpointOptions = {},\n): string {\n const parsed = appUrl(url, options);\n parsed.pathname = \"/.well-known/agent-card.json\";\n parsed.search = \"\";\n parsed.hash = \"\";\n return parsed.toString();\n}\n\nfunction textMessage(text: string): Message {\n return {\n role: \"user\",\n parts: [{ type: \"text\", text }],\n };\n}\n\nfunction extractTaskText(task: Task): string {\n return (\n task.status.message?.parts\n .filter((part): part is { type: \"text\"; text: string } => {\n return part.type === \"text\" && typeof part.text === \"string\";\n })\n .map((part) => part.text)\n .join(\"\\n\") ?? \"\"\n );\n}\n\n/**\n * Send a text prompt to an Agent-Native A2A endpoint and yield text deltas.\n */\nexport async function* sendMessage(\n url: string,\n text: string,\n options: SendMessageOptions = {},\n): AsyncGenerator<string> {\n const client = new A2AClient(url, options.apiKey, {\n requestTimeoutMs: options.requestTimeoutMs,\n });\n const message = textMessage(text);\n let previous = \"\";\n let yielded = false;\n\n try {\n for await (const task of client.stream(message, {\n contextId: options.contextId,\n metadata: options.metadata,\n })) {\n const next = extractTaskText(task);\n const chunk = next.startsWith(previous)\n ? next.slice(previous.length)\n : next;\n previous = next;\n if (chunk) {\n yielded = true;\n yield chunk;\n }\n }\n return;\n } catch (error) {\n if (yielded || options.fallbackToPolling === false) throw error;\n }\n\n const answer = await callAgent(url, text, {\n apiKey: options.apiKey,\n contextId: options.contextId,\n timeoutMs: options.timeoutMs,\n userEmail: options.userEmail,\n orgDomain: options.orgDomain,\n orgSecret: options.orgSecret,\n async: true,\n });\n if (answer) yield answer;\n}\n\nexport { A2AClient };\nexport type { Message, Task };\n"]}
@@ -0,0 +1,37 @@
1
+ export interface EmbeddedAppMessageEvent<TPayload = unknown> {
2
+ name: string;
3
+ payload: TPayload;
4
+ event: MessageEvent;
5
+ }
6
+ export type EmbeddedAppMessageHandler = (message: EmbeddedAppMessageEvent) => void;
7
+ export type EmbeddedAppRequestHandler = (message: EmbeddedAppMessageEvent) => unknown | Promise<unknown>;
8
+ export interface EmbeddedAppBridgeOptions {
9
+ /**
10
+ * Exact parent origin to post back to. Defaults to document.referrer's
11
+ * origin when available. If no origin can be resolved, sends fail closed.
12
+ */
13
+ parentOrigin?: string;
14
+ /**
15
+ * Origins allowed to send messages to the embedded app. Defaults to the
16
+ * resolved parent origin.
17
+ */
18
+ allowedOrigins?: string[];
19
+ onMessage?: EmbeddedAppMessageHandler;
20
+ onRequest?: EmbeddedAppRequestHandler;
21
+ targetWindow?: Window | null;
22
+ currentWindow?: Window;
23
+ }
24
+ export interface EmbeddedAppBridge {
25
+ parentOrigin: string | null;
26
+ postMessage<TPayload = unknown>(name: string, payload?: TPayload): boolean;
27
+ request<TResult = unknown, TPayload = unknown>(name: string, payload?: TPayload, options?: {
28
+ timeoutMs?: number;
29
+ }): Promise<TResult>;
30
+ ready<TPayload = unknown>(payload?: TPayload): boolean;
31
+ close<TPayload = unknown>(payload?: TPayload): boolean;
32
+ destroy(): void;
33
+ }
34
+ export declare function createEmbeddedAppBridge(options?: EmbeddedAppBridgeOptions): EmbeddedAppBridge;
35
+ export declare function sendEmbeddedAppMessage<TPayload = unknown>(name: string, payload?: TPayload, options?: Pick<EmbeddedAppBridgeOptions, "currentWindow" | "parentOrigin" | "targetWindow">): boolean;
36
+ export declare function announceEmbeddedAppReady<TPayload = unknown>(payload?: TPayload, options?: Pick<EmbeddedAppBridgeOptions, "currentWindow" | "parentOrigin" | "targetWindow">): boolean;
37
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/embedding/bridge.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,uBAAuB,CAAC,QAAQ,GAAG,OAAO;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,QAAQ,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,MAAM,yBAAyB,GAAG,CACtC,OAAO,EAAE,uBAAuB,KAC7B,IAAI,CAAC;AAEV,MAAM,MAAM,yBAAyB,GAAG,CACtC,OAAO,EAAE,uBAAuB,KAC7B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,QAAQ,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3E,OAAO,CAAC,OAAO,GAAG,OAAO,EAAE,QAAQ,GAAG,OAAO,EAC3C,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC/B,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,KAAK,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IACvD,KAAK,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IACvD,OAAO,IAAI,IAAI,CAAC;CACjB;AA2BD,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,wBAA6B,GACrC,iBAAiB,CA6InB;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,GAAG,OAAO,EACvD,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,QAAQ,EAClB,OAAO,GAAE,IAAI,CACX,wBAAwB,EACxB,eAAe,GAAG,cAAc,GAAG,cAAc,CAC7C,GACL,OAAO,CAYT;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,GAAG,OAAO,EACzD,OAAO,CAAC,EAAE,QAAQ,EAClB,OAAO,GAAE,IAAI,CACX,wBAAwB,EACxB,eAAe,GAAG,cAAc,GAAG,cAAc,CAC7C,GACL,OAAO,CAWT"}