@stigmer/cli 3.10.0 → 3.11.1-dev.20260812192248

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 (36) hide show
  1. package/commands/connect.d.ts.map +1 -1
  2. package/commands/connect.js +9 -1
  3. package/commands/connect.js.map +1 -1
  4. package/commands/usage.js +7 -4
  5. package/commands/usage.js.map +1 -1
  6. package/package.json +5 -5
  7. package/resources/connect/connect.d.ts +9 -0
  8. package/resources/connect/connect.d.ts.map +1 -1
  9. package/resources/connect/connect.js +30 -2
  10. package/resources/connect/connect.js.map +1 -1
  11. package/resources/list.d.ts +7 -1
  12. package/resources/list.d.ts.map +1 -1
  13. package/resources/list.js +35 -15
  14. package/resources/list.js.map +1 -1
  15. package/resources/run/attachments.d.ts.map +1 -1
  16. package/resources/run/attachments.js +33 -5
  17. package/resources/run/attachments.js.map +1 -1
  18. package/resources/usage.d.ts +1 -1
  19. package/resources/usage.d.ts.map +1 -1
  20. package/resources/usage.js +2 -2
  21. package/resources/usage.js.map +1 -1
  22. package/resources/validate.d.ts +1 -0
  23. package/resources/validate.d.ts.map +1 -1
  24. package/resources/validate.js +5 -1
  25. package/resources/validate.js.map +1 -1
  26. package/src/commands/connect.ts +13 -1
  27. package/src/commands/usage.ts +7 -4
  28. package/src/registry/registry.test.ts +7 -0
  29. package/src/resources/connect/connect.integration.test.ts +45 -1
  30. package/src/resources/connect/connect.ts +48 -2
  31. package/src/resources/list.ts +55 -17
  32. package/src/resources/read-verbs.integration.test.ts +35 -2
  33. package/src/resources/run/attachments.test.ts +22 -0
  34. package/src/resources/run/attachments.ts +44 -5
  35. package/src/resources/usage.ts +2 -1
  36. package/src/resources/validate.ts +5 -1
@@ -1 +1 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/resources/usage.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,mDAAmD;AACnD,EAAE;AACF,iFAAiF;AACjF,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAC9F,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,EAC/B,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,iCAAiC,GAIlC,MAAM,4DAA4D,CAAC;AAIpE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOnF,gBAAgB;AAEhB,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAAe,EAAE,SAAiB;IAC5E,OAAO,MAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,MAAM,CAAC,gCAAgC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAC9G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAe,EACf,OAAe,EACf,KAAgB;IAEhB,OAAO,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAC9C,MAAM,CAAC,8BAA8B,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAC5F,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAe,EACf,KAAa,EACb,KAAgB;IAEhB,OAAO,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAC5C,MAAM,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CACxF,CAAC;AACJ,CAAC;AAED,0BAA0B;AAE1B,MAAM,UAAU,kBAAkB,CAAC,MAAmC,EAAE,MAAoB;IAC1F,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,eAAe,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;IACzF,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,eAAe,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;IAEzF,MAAM,KAAK,GAAa,CAAC,EAAE,EAAE,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IAChF,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,KAAK,MAAM,CAAC,cAAc,cAAc,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3C,UAAU,IAAI,CAAC,CAAC,WAAW,CAAC;YAC5B,WAAW,IAAI,CAAC,CAAC,YAAY,CAAC;YAC9B,WAAW,IAAI,CAAC,CAAC,oBAAoB,CAAC;YACtC,SAAS,IAAI,CAAC,CAAC,kBAAkB,CAAC;YAClC,OAAO;gBACL,CAAC,CAAC,KAAK;gBACP,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC;gBAC/B,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC;gBAChC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,CAAC;gBACxC,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC;aACjC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC;gBACR,OAAO;gBACP,gBAAgB,CAAC,UAAU,CAAC;gBAC5B,gBAAgB,CAAC,WAAW,CAAC;gBAC7B,gBAAgB,CAAC,WAAW,CAAC;gBAC7B,UAAU,CAAC,SAAS,CAAC;aACtB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,SAAS,KAAK,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;IAEjE,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1B,gBAAgB,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;YACtD,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC;YACnC,IAAI,CAAC,YAAY;YACjB,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;SAC7B,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,wBAAwB;AAExB,MAAM,UAAU,gBAAgB,CAC9B,MAAiC,EACjC,KAAgB,EAChB,MAAoB;IAEpB,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,eAAe,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;IACvF,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,eAAe,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;IAEvF,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;IACzE,MAAM,KAAK,GAAa,CAAC,EAAE,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,WAAW,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,MAAM,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAC5E,IAAI,MAAM,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC5E,KAAK,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,MAAM,SAAS,GAAG,MAAM,CAAC,uBAAuB,CAAC;IACjD,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC5C,CAAC,CAAC,KAAK;YACP,gBAAgB,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,wBAAwB,GAAG,CAAC,CAAC,oBAAoB,CAAC;YACtG,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC;YAChC,WAAW,CAAC,CAAC,CAAC,kBAAkB,EAAE,SAAS,CAAC;SAC7C,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YAC3B,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC;SACpC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,sBAAsB;AAEtB,MAAM,UAAU,cAAc,CAC5B,MAA+B,EAC/B,KAAgB,EAChB,MAAoB;IAEpB,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,eAAe,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;IACrF,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,eAAe,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;IAErF,MAAM,KAAK,GAAa,CAAC,EAAE,EAAE,2BAA2B,EAAE,WAAW,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACvH,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,MAAM,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAC5E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,MAAM,SAAS,GAAG,MAAM,CAAC,uBAAuB,CAAC;IACjD,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC5C,CAAC,CAAC,KAAK;YACP,gBAAgB,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,wBAAwB,GAAG,CAAC,CAAC,oBAAoB,CAAC;YACtG,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC;YAChC,WAAW,CAAC,CAAC,CAAC,kBAAkB,EAAE,SAAS,CAAC;SAC7C,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7C,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5C,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;YACxB,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC;YAChC,WAAW,CAAC,CAAC,CAAC,kBAAkB,EAAE,SAAS,CAAC;SAC7C,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YAC1C,GAAG,CAAC,IAAI;YACR,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;YAC1B,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC;SACnC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,2DAA2D;AAE3D,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACvC,IAAI,GAAG,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9B,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,GAAG,IAAI;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACtD,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1C,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa;IAC9C,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC;IAChC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACjE,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAuC;IACjE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,KAAK,EAAE,IAAI,KAAK,CAAC,oBAAoB,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IACpG,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,GAAG,CAAC;IACpF,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;AACvC,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAE7G,yEAAyE;AACzE,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACnF,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACjF,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,EAAU;IAC/C,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,EAAE,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC,EAAE,CAAC;IACjC,OAAO,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxB,CAAC;AAED,wEAAwE;AACxE,SAAS,oBAAoB,CAAC,IAAY,EAAE,EAAU;IACpD,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,MAAM,EAAE,EAAE,CAAC;IACnC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,QAAQ,IAAI,EAAE,CAAC;IACrC,OAAO,GAAG,IAAI,OAAO,EAAE,EAAE,CAAC;AAC5B,CAAC;AAED,+EAA+E;AAC/E,SAAS,gBAAgB,CAAC,KAAqB;IAC7C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,cAAc,CAAC,iBAAiB;YACnC,OAAO,SAAS,CAAC;QACnB,KAAK,cAAc,CAAC,qBAAqB;YACvC,OAAO,aAAa,CAAC;QACvB,KAAK,cAAc,CAAC,mBAAmB;YACrC,OAAO,WAAW,CAAC;QACrB,KAAK,cAAc,CAAC,gBAAgB;YAClC,OAAO,QAAQ,CAAC;QAClB,KAAK,cAAc,CAAC,mBAAmB;YACrC,OAAO,WAAW,CAAC;QACrB,KAAK,cAAc,CAAC,8BAA8B;YAChD,OAAO,sBAAsB,CAAC;QAChC,KAAK,cAAc,CAAC,oBAAoB;YACtC,OAAO,YAAY,CAAC;QACtB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/resources/usage.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type DescMessage, type JsonValue } from "@bufbuild/protobuf";
2
2
  import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
3
+ export declare const VALIDATE_SCHEMAS: ReadonlyMap<ApiResourceKind, DescMessage>;
3
4
  export declare function schemaForValidate(kind: ApiResourceKind): DescMessage | undefined;
4
5
  /** Structurally validate a parsed YAML document against its proto schema. */
5
6
  export declare function validateDocument(schema: DescMessage, document: JsonValue): void;
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/resources/validate.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,EAAY,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAKhF,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AAWtH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,SAAS,CAEhF;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI,CAI/E"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/resources/validate.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,EAAY,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAKhF,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AAOtH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAMrE,CAAC;AAEH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,SAAS,CAEhF;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI,CAI/E"}
@@ -11,7 +11,11 @@ import { McpServerSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1
11
11
  import { WorkflowSchema } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
12
12
  import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
13
13
  import { ProjectSchema } from "@stigmer/protos/ai/stigmer/tenancy/project/v1/api_pb";
14
- const VALIDATE_SCHEMAS = new Map([
14
+ // Exported for the verb/dispatch conformance suite (registry/registry.test.ts),
15
+ // which holds this map and the matrix's Verb.Validate promises to strict
16
+ // bidirectional equality — the stigmer/stigmer#353 drift class. Command code
17
+ // resolves schemas through `schemaForValidate`, never this map directly.
18
+ export const VALIDATE_SCHEMAS = new Map([
15
19
  [ApiResourceKind.agent, AgentSchema],
16
20
  [ApiResourceKind.workflow, WorkflowSchema],
17
21
  [ApiResourceKind.mcp_server, McpServerSchema],
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/resources/validate.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,6EAA6E;AAC7E,qDAAqD;AAErD,OAAO,EAAoB,QAAQ,EAAkB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,oDAAoD,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,uDAAuD,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AACtH,OAAO,EAAE,aAAa,EAAE,MAAM,sDAAsD,CAAC;AAErF,MAAM,gBAAgB,GAA8C,IAAI,GAAG,CAA+B;IACxG,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC;IACpC,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,CAAC;IAC1C,CAAC,eAAe,CAAC,UAAU,EAAE,eAAe,CAAC;IAC7C,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC;IACxC,CAAC,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB,CAAC,IAAqB;IACrD,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAAC,MAAmB,EAAE,QAAmB;IACvE,6EAA6E;IAC7E,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/resources/validate.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,6EAA6E;AAC7E,qDAAqD;AAErD,OAAO,EAAoB,QAAQ,EAAkB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,oDAAoD,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,uDAAuD,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,qFAAqF,CAAC;AACtH,OAAO,EAAE,aAAa,EAAE,MAAM,sDAAsD,CAAC;AAErF,gFAAgF;AAChF,yEAAyE;AACzE,6EAA6E;AAC7E,yEAAyE;AACzE,MAAM,CAAC,MAAM,gBAAgB,GAA8C,IAAI,GAAG,CAA+B;IAC/G,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC;IACpC,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,CAAC;IAC1C,CAAC,eAAe,CAAC,UAAU,EAAE,eAAe,CAAC;IAC7C,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC;IACxC,CAAC,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB,CAAC,IAAqB;IACrD,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAAC,MAAmB,EAAE,QAAmB;IACvE,6EAA6E;IAC7E,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC"}
@@ -26,7 +26,12 @@ export function registerConnect(program: Command): void {
26
26
  connect
27
27
  .command("mcp-server <slug-or-id>")
28
28
  .description("connect to an MCP server and discover its tools")
29
- .option("--timeout <seconds>", "timeout for connection and discovery", String(DEFAULT_TIMEOUT_SECONDS))
29
+ .option(
30
+ "--timeout <seconds>",
31
+ "bound the wait for connection and discovery (always bounds --dry-run; " +
32
+ "bounds the server-side connect only when set explicitly)",
33
+ String(DEFAULT_TIMEOUT_SECONDS),
34
+ )
30
35
  .option("--dry-run", "discover and display results without pushing to the backend")
31
36
  .option(
32
37
  "--env <KEY=VALUE>",
@@ -39,6 +44,12 @@ export function registerConnect(program: Command): void {
39
44
 
40
45
  async function runConnect(reference: string, options: ConnectFlags, command: Command): Promise<void> {
41
46
  const timeoutMs = parseTimeout(options.timeout);
47
+ // The 30s default exists for --dry-run's local discovery. A real connect
48
+ // legitimately takes minutes (server-side sandbox boot + discovery + tool
49
+ // classification), so bounding it by the DEFAULT would fail healthy
50
+ // connects — the wait is bounded only when the user set --timeout
51
+ // explicitly (issue #239: the flag used to be silently ignored here).
52
+ const timeoutIsExplicit = command.getOptionValueSource("timeout") === "cli";
42
53
  const [{ connectBackend }, { connectMcpServer }, { renderConnectResult }] = await Promise.all([
43
54
  import("../backend.js"),
44
55
  import("../resources/connect/connect.js"),
@@ -67,6 +78,7 @@ async function runConnect(reference: string, options: ConnectFlags, command: Com
67
78
  reference,
68
79
  org,
69
80
  timeoutMs,
81
+ pushTimeoutMs: timeoutIsExplicit ? timeoutMs : undefined,
70
82
  dryRun: options.dryRun === true,
71
83
  envOverrides: options.env,
72
84
  backendType: client.config.backend.type,
@@ -24,11 +24,11 @@ export function registerUsage(program: Command): void {
24
24
 
25
25
  usage
26
26
  .command("agent <agent-id>")
27
- .description("view the aggregated usage report for an agent")
27
+ .description("view the aggregated usage report for an agent within your organization")
28
28
  .option("--from <date>", "start date (ISO 8601, e.g. 2026-03-01)")
29
29
  .option("--to <date>", "end date (ISO 8601, e.g. 2026-03-13)")
30
30
  .option("-o, --output <format>", "output format: table, json, or yaml")
31
- .action((agentId: string, options: UsageFlags) => runAgentUsage(agentId, options));
31
+ .action((agentId: string, options: UsageFlags, command: Command) => runAgentUsage(agentId, options, command));
32
32
 
33
33
  usage
34
34
  .command("org")
@@ -48,13 +48,16 @@ async function runSessionUsage(sessionId: string, options: UsageFlags): Promise<
48
48
  process.stdout.write(usage.renderSessionUsage(report, readFormat(options)));
49
49
  }
50
50
 
51
- async function runAgentUsage(agentId: string, options: UsageFlags): Promise<void> {
51
+ async function runAgentUsage(agentId: string, options: UsageFlags, command: Command): Promise<void> {
52
52
  const [{ connectBackend }, usage] = await Promise.all([import("../backend.js"), import("../resources/usage.js")]);
53
53
  const client = connectBackend();
54
54
  ensureAuthenticated(client.config);
55
+ // The report is org-scoped (usage of the agent within one org), so the org
56
+ // resolves exactly as `usage org` does: global --org flag or config default.
57
+ const org = resolveOrganization(client.config, globalOrg(command));
55
58
 
56
59
  const range = { from: options.from ?? "", to: options.to ?? "" };
57
- const report = await usage.getAgentUsageReport(client.stigmer, agentId, range);
60
+ const report = await usage.getAgentUsageReport(client.stigmer, agentId, org, range);
58
61
  process.stdout.write(usage.renderAgentUsage(report, range, readFormat(options)));
59
62
  }
60
63
 
@@ -4,6 +4,7 @@ import { APPLY_HANDLERS } from "../resources/apply/handlers.js";
4
4
  import { DELETE_HANDLERS } from "../resources/delete.js";
5
5
  import { GET_BINDINGS } from "../resources/get-bindings.js";
6
6
  import { LIST_HANDLERS, SEARCH_KINDS } from "../resources/list.js";
7
+ import { VALIDATE_SCHEMAS } from "../resources/validate.js";
7
8
  import { defaultRegistry } from "./registry.js";
8
9
  import { Verb } from "./verbs.js";
9
10
 
@@ -167,6 +168,12 @@ describe("registry — verb/dispatch conformance", () => {
167
168
  wired: new Set([...LIST_HANDLERS.keys(), ...SEARCH_KINDS]),
168
169
  specialCases: new Map(),
169
170
  },
171
+ {
172
+ label: "validate",
173
+ verb: Verb.Validate,
174
+ wired: new Set(VALIDATE_SCHEMAS.keys()),
175
+ specialCases: new Map(),
176
+ },
170
177
  {
171
178
  label: "delete",
172
179
  verb: Verb.Delete,
@@ -34,12 +34,17 @@ const openSessions = new Set<ServerHttp2Session>();
34
34
 
35
35
  let connectCalls: ConnectInput[] = [];
36
36
  let grantConnected = false;
37
+ // Delay before the mock Connect RPC answers; lets the --timeout tests
38
+ // simulate a long-running server-side connect. The timer is unref'd so a
39
+ // still-pending delayed response can never hold the test process open.
40
+ let connectDelayMs = 0;
37
41
  // The server returned by getByReference; mutated per test for auth scenarios.
38
42
  let servedSpec: ReturnType<typeof create<typeof McpServerSchema>>;
39
43
 
40
44
  beforeEach(() => {
41
45
  connectCalls = [];
42
46
  grantConnected = false;
47
+ connectDelayMs = 0;
43
48
  servedSpec = create(McpServerSchema, {
44
49
  metadata: { id: "mcp_1", name: "github", slug: "github", org: "acme" },
45
50
  spec: {
@@ -72,8 +77,11 @@ beforeAll(async () => {
72
77
  // Mirror the backend's protovalidate rule (org min_len=1): reject an empty
73
78
  // org so a regression that drops org fails loudly here instead of silently
74
79
  // passing (the mock adapter does not run protovalidate on its own).
75
- connect: (req) => {
80
+ connect: async (req) => {
76
81
  if (req.org === "") throw new ConnectError("org – value length must be at least 1 characters", Code.InvalidArgument);
82
+ if (connectDelayMs > 0) {
83
+ await new Promise((resolve) => setTimeout(resolve, connectDelayMs).unref());
84
+ }
77
85
  connectCalls.push(req);
78
86
  return updatedServer;
79
87
  },
@@ -120,6 +128,42 @@ describe("connect push path", () => {
120
128
  });
121
129
  });
122
130
 
131
+ describe("--timeout bounds the server-side connect (issue #239)", () => {
132
+ it("stops waiting with actionable guidance when pushTimeoutMs elapses", async () => {
133
+ connectDelayMs = 5_000;
134
+ await expect(
135
+ connectMcpServer(client, {
136
+ reference: "github",
137
+ org: "acme",
138
+ timeoutMs: 30_000,
139
+ pushTimeoutMs: 150,
140
+ dryRun: false,
141
+ envOverrides: ["GITHUB_TOKEN=ghp-x"],
142
+ backendType: "cloud",
143
+ interactive: false,
144
+ }),
145
+ ).rejects.toThrow(/Stopped waiting for the connect of MCP server 'github' after 0\.15s/);
146
+ });
147
+
148
+ it("does not bound the wait when pushTimeoutMs is unset (default --timeout)", async () => {
149
+ // The flag's 30s default is sized for --dry-run local discovery; a real
150
+ // connect legitimately outlives it, so only an explicit --timeout bounds
151
+ // the push. 200ms of server delay stands in for "longer than the bound
152
+ // would have been".
153
+ connectDelayMs = 200;
154
+ const result = await connectMcpServer(client, {
155
+ reference: "github",
156
+ org: "acme",
157
+ timeoutMs: 100,
158
+ dryRun: false,
159
+ envOverrides: ["GITHUB_TOKEN=ghp-x"],
160
+ backendType: "cloud",
161
+ interactive: false,
162
+ });
163
+ expect(result.updated?.metadata?.id).toBe("mcp_1");
164
+ });
165
+ });
166
+
123
167
  describe("OAuth guidance gate", () => {
124
168
  beforeEach(() => {
125
169
  servedSpec.spec!.auth = create(McpServerAuthSchema, { targetEnvVar: "GITHUB_TOKEN" });
@@ -16,7 +16,7 @@ import type { DiscoveredCapabilities } from "@stigmer/protos/ai/stigmer/agentic/
16
16
  import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
17
17
  import type { Stigmer } from "@stigmer/sdk";
18
18
  import type { BackendType } from "../../config/config.js";
19
- import { UsageError } from "../../errors/index.js";
19
+ import { CliExitError, ExitCode, UsageError } from "../../errors/index.js";
20
20
  import { defaultRegistry } from "../../registry/index.js";
21
21
  import { PlaceholderResolutionError } from "../mcp/placeholder-resolver.js";
22
22
  import { buildRuntimeEnv } from "../mcp/runtime-env.js";
@@ -27,6 +27,15 @@ export interface ConnectOptions {
27
27
  readonly reference: string;
28
28
  readonly org: string;
29
29
  readonly timeoutMs: number;
30
+ /**
31
+ * Bound the wait on the server-side connect RPC. Unset by default: a real
32
+ * connect legitimately takes minutes (sandbox boot + discovery + tool
33
+ * classification), so only an EXPLICIT --timeout bounds it — the flag's
34
+ * 30s default is sized for --dry-run's local discovery and would fail
35
+ * healthy connects. The bound is soft (the CLI stops waiting; the backend
36
+ * finishes the connect on its own).
37
+ */
38
+ readonly pushTimeoutMs?: number;
30
39
  readonly dryRun: boolean;
31
40
  readonly envOverrides: readonly string[];
32
41
  /** Backend type, for resolving the OAuth web-console URL. */
@@ -66,16 +75,53 @@ export async function connectMcpServer(client: Stigmer, opts: ConnectOptions): P
66
75
 
67
76
  await ensureOAuthSatisfied(client, server, opts);
68
77
 
69
- const updated = await client.mcpServer.connect(
78
+ const push = client.mcpServer.connect(
70
79
  create(ConnectInputSchema, {
71
80
  mcpServerId: server.metadata?.id ?? "",
72
81
  org: opts.org,
73
82
  runtimeEnv: buildRuntimeEnv(server, opts.envOverrides),
74
83
  }),
75
84
  );
85
+ const updated = opts.pushTimeoutMs === undefined
86
+ ? await push
87
+ : await boundedPush(push, opts.pushTimeoutMs, server);
76
88
  return { server, capabilities: updated.status?.discoveredCapabilities, updated };
77
89
  }
78
90
 
91
+ // Soft timeout on the server-side connect (the client/client.ts idiom): races
92
+ // the RPC against a timer without cancelling it — the backend's connect
93
+ // workflow keeps running and persists its result on its own, so the message
94
+ // says exactly that instead of implying the connect failed.
95
+ async function boundedPush<T>(push: Promise<T>, timeoutMs: number, server: McpServer): Promise<T> {
96
+ const slug = server.metadata?.slug ?? server.metadata?.id ?? "the server";
97
+ let timer: NodeJS.Timeout | undefined;
98
+ const timeout = new Promise<never>((_, reject) => {
99
+ timer = setTimeout(
100
+ () =>
101
+ reject(
102
+ new CliExitError(
103
+ `Stopped waiting for the connect of MCP server '${slug}' after ${timeoutMs / 1000}s (--timeout)`,
104
+ ExitCode.Connection,
105
+ [
106
+ "The server-side connect is still running and will persist its result if it succeeds.",
107
+ `Check the outcome with: stigmer get mcp-server ${slug}`,
108
+ "Re-run without --timeout to wait for completion.",
109
+ ],
110
+ ),
111
+ ),
112
+ timeoutMs,
113
+ );
114
+ });
115
+ // The losing push may settle after the CLI has started exiting; swallow its
116
+ // late rejection so it cannot surface as an unhandled-rejection crash.
117
+ void push.catch(() => {});
118
+ try {
119
+ return await Promise.race([push, timeout]);
120
+ } finally {
121
+ if (timer !== undefined) clearTimeout(timer);
122
+ }
123
+ }
124
+
79
125
  // Resolve a reference (id, org/slug, or bare slug) to an McpServer. Mirrors Go's
80
126
  // GetFromBackend.
81
127
  async function resolveMcpServer(client: Stigmer, reference: string, org: string): Promise<McpServer> {
@@ -7,8 +7,14 @@
7
7
  // registered in LIST_HANDLERS — the same map-dispatch shape as the get,
8
8
  // delete, and apply registries, so the conformance test in
9
9
  // registry/registry.test.ts can hold all four to the verb matrix.
10
+ //
11
+ // Handlers FETCH, the dispatcher RENDERS: every handler returns entries plus
12
+ // its schema/table pair, and listResources alone applies --limit and renders.
13
+ // That split is deliberate (stigmer/stigmer#312): when handlers owned
14
+ // rendering, honoring --limit was per-handler discipline, and the two
15
+ // unpaginated branches (organization, api_key) shipped silently ignoring it.
10
16
 
11
- import { create } from "@bufbuild/protobuf";
17
+ import { create, type DescMessage, type Message } from "@bufbuild/protobuf";
12
18
  import { AgentChannelSchema } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/api_pb";
13
19
  import { ListAgentChannelsRequestSchema } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/io_pb";
14
20
  import { AgentInstanceSchema } from "@stigmer/protos/ai/stigmer/agentic/agentinstance/v1/api_pb";
@@ -43,7 +49,19 @@ export const SEARCH_KINDS: ReadonlySet<ApiResourceKind> = new Set<ApiResourceKin
43
49
  ApiResourceKind.environment,
44
50
  ]);
45
51
 
46
- type ListFn = (client: Stigmer, org: string, limit: number, format: OutputFormat) => Promise<string>;
52
+ // One fetched page of a listing: what to render (entries + schema) and how
53
+ // (table). Rendering and --limit truncation happen centrally in
54
+ // listResources — a handler cannot opt out of either.
55
+ interface ListPage {
56
+ readonly schema: DescMessage;
57
+ readonly entries: readonly Message[];
58
+ readonly table: TableShape;
59
+ }
60
+
61
+ // Where the RPC paginates, the handler still forwards `limit` as the page
62
+ // size so the server does the bounding; the dispatcher's slice is then a
63
+ // no-op. Where it doesn't, the slice IS the bound.
64
+ type ListFn = (client: Stigmer, org: string, limit: number) => Promise<ListPage>;
47
65
 
48
66
  // Dedicated-RPC list handlers for the non-search-indexed kinds. Every kind
49
67
  // declaring List in the verb matrix must appear here or in SEARCH_KINDS —
@@ -51,49 +69,53 @@ type ListFn = (client: Stigmer, org: string, limit: number, format: OutputFormat
51
69
  export const LIST_HANDLERS: ReadonlyMap<ApiResourceKind, ListFn> = new Map<ApiResourceKind, ListFn>([
52
70
  [
53
71
  ApiResourceKind.organization,
54
- async (client, _org, _limit, format) => {
72
+ async (client) => {
73
+ // findMyOrganizations is caller-scoped and unpaginated (Empty request;
74
+ // a caller's org set is small by nature). The paginated `find` RPC is
75
+ // platform-admin-only — the wrong surface for `list organization`.
55
76
  const result = await client.organization.findMyOrganizations();
56
- return renderCollection(OrganizationSchema, result.entries, format, ORG_TABLE);
77
+ return { schema: OrganizationSchema, entries: result.entries, table: ORG_TABLE };
57
78
  },
58
79
  ],
59
80
  [
60
81
  ApiResourceKind.api_key,
61
- async (client, _org, _limit, format) => {
82
+ async (client) => {
83
+ // findAll is caller-scoped and unpaginated (Empty request).
62
84
  const result = await client.apiKey.findAll();
63
- return renderCollection(ApiKeySchema, result.entries, format, APIKEY_TABLE);
85
+ return { schema: ApiKeySchema, entries: result.entries, table: APIKEY_TABLE };
64
86
  },
65
87
  ],
66
88
  [
67
89
  ApiResourceKind.agent_instance,
68
- async (client, org, limit, format) => {
90
+ async (client, org, limit) => {
69
91
  const result = await client.agentInstance.list(
70
92
  create(ListAgentInstancesRequestSchema, { org, pageInfo: create(PageInfoSchema, { num: 1, size: limit }) }),
71
93
  );
72
- return renderCollection(AgentInstanceSchema, result.items, format, INSTANCE_TABLE);
94
+ return { schema: AgentInstanceSchema, entries: result.items, table: INSTANCE_TABLE };
73
95
  },
74
96
  ],
75
97
  [
76
98
  ApiResourceKind.agent_channel,
77
- async (client, org, limit, format) => {
99
+ async (client, org, limit) => {
78
100
  const result = await client.agentChannel.list(
79
101
  create(ListAgentChannelsRequestSchema, { org, pageInfo: create(PageInfoSchema, { num: 1, size: limit }) }),
80
102
  );
81
- return renderCollection(AgentChannelSchema, result.items, format, AGENT_CHANNEL_TABLE);
103
+ return { schema: AgentChannelSchema, entries: result.items, table: AGENT_CHANNEL_TABLE };
82
104
  },
83
105
  ],
84
106
  [
85
107
  ApiResourceKind.channel_app,
86
- async (client, org, limit, format) => {
108
+ async (client, org) => {
87
109
  // listByOrg has no pagination on its contract (the per-org set is small
88
- // by design); the limit is applied client-side so --limit stays honest.
110
+ // by design); the dispatcher's slice bounds the output.
89
111
  // `channelapp` (not `channelApp`) is a recorded SDK codegen naming quirk.
90
112
  const result = await client.channelapp.listByOrg(create(ListChannelAppsByOrgInputSchema, { org }));
91
- return renderCollection(ChannelAppSchema, result.entries.slice(0, limit), format, CHANNEL_APP_TABLE);
113
+ return { schema: ChannelAppSchema, entries: result.entries, table: CHANNEL_APP_TABLE };
92
114
  },
93
115
  ],
94
116
  [
95
117
  ApiResourceKind.schedule,
96
- async (client, org, limit, format) => {
118
+ async (client, org, limit) => {
97
119
  // ListSchedulesRequest requires an org (min_len 1), but an unset cloud
98
120
  // context resolves to "" — refuse with actionable copy instead of
99
121
  // relaying the server's raw validation error.
@@ -105,7 +127,7 @@ export const LIST_HANDLERS: ReadonlyMap<ApiResourceKind, ListFn> = new Map<ApiRe
105
127
  const result = await client.schedule.list(
106
128
  create(ListSchedulesRequestSchema, { org, pageInfo: create(PageInfoSchema, { num: 1, size: limit }) }),
107
129
  );
108
- return renderCollection(ScheduleSchema, result.items, format, SCHEDULE_TABLE);
130
+ return { schema: ScheduleSchema, entries: result.items, table: SCHEDULE_TABLE };
109
131
  },
110
132
  ],
111
133
  ]);
@@ -117,15 +139,31 @@ export async function listResources(
117
139
  limit: number,
118
140
  format: OutputFormat,
119
141
  ): Promise<string> {
142
+ const page = await fetchListPage(client, kind, org, limit);
143
+ // The single point where --limit binds the output. For paginated RPCs the
144
+ // handler already asked the server for at most `limit` entries and this is
145
+ // a no-op; for unpaginated RPCs it is the truncation itself. Slicing here
146
+ // rather than per-handler is what keeps the flag honest for every kind —
147
+ // organization and api_key shipped ignoring it when handlers owned this
148
+ // (stigmer/stigmer#312).
149
+ return renderCollection(page.schema, page.entries.slice(0, limit), format, page.table);
150
+ }
151
+
152
+ async function fetchListPage(
153
+ client: Stigmer,
154
+ kind: ApiResourceKind,
155
+ org: string,
156
+ limit: number,
157
+ ): Promise<ListPage> {
120
158
  const dedicated = LIST_HANDLERS.get(kind);
121
159
  if (dedicated !== undefined) {
122
- return dedicated(client, org, limit, format);
160
+ return dedicated(client, org, limit);
123
161
  }
124
162
  if (!SEARCH_KINDS.has(kind)) {
125
163
  throw new UsageError("list is not implemented for this resource type");
126
164
  }
127
165
  const result = await client.search.query({ kinds: [kind], org, page: { num: 1, size: limit } });
128
- return renderCollection(SearchResultSchema, result.entries, format, SEARCH_TABLE);
166
+ return { schema: SearchResultSchema, entries: result.entries, table: SEARCH_TABLE };
129
167
  }
130
168
 
131
169
  // Shared with `search` — both render SearchService results identically.
@@ -67,6 +67,23 @@ const knownApiKey = create(ApiKeySchema, {
67
67
  spec: { fingerprint: "abcd", neverExpires: true },
68
68
  });
69
69
 
70
+ // Second org/API-key entries so the list tests can pin the
71
+ // dispatcher-applied --limit slice — both RPCs are unpaginated (Empty
72
+ // request), the exact shape that shipped ignoring the flag when handlers
73
+ // owned rendering (stigmer/stigmer#312).
74
+ const secondOrg = create(OrganizationSchema, {
75
+ apiVersion: "tenancy.stigmer.ai/v1",
76
+ kind: "Organization",
77
+ metadata: { name: "Beta Clinic", slug: "beta-clinic", org: "beta-clinic", id: "beta-clinic" },
78
+ });
79
+
80
+ const secondApiKey = create(ApiKeySchema, {
81
+ apiVersion: "iam.stigmer.ai/v1",
82
+ kind: "ApiKey",
83
+ metadata: { name: "local-dev", org: "acme", id: "key_2" },
84
+ spec: { fingerprint: "ef01", neverExpires: true },
85
+ });
86
+
70
87
  const knownSearchResult = create(SearchResultSchema, {
71
88
  kind: ApiResourceKind.agent,
72
89
  id: "agt_1",
@@ -223,10 +240,10 @@ beforeAll(async () => {
223
240
  },
224
241
  });
225
242
  router.service(OrganizationQueryController, {
226
- findMyOrganizations: () => ({ entries: [knownOrg] }),
243
+ findMyOrganizations: () => ({ entries: [knownOrg, secondOrg] }),
227
244
  });
228
245
  router.service(ApiKeyQueryController, {
229
- findAll: () => ({ entries: [knownApiKey] }),
246
+ findAll: () => ({ entries: [knownApiKey, secondApiKey] }),
230
247
  });
231
248
  router.service(EnvironmentQueryController, {
232
249
  get: (req) => {
@@ -441,11 +458,27 @@ describe("list integration", () => {
441
458
 
442
459
  it("lists organizations via findMyOrganizations as JSON", async () => {
443
460
  const out = await listResources(client, ApiResourceKind.organization, "acme", 50, "json");
461
+ expect(JSON.parse(out)).toEqual([
462
+ toJson(OrganizationSchema, knownOrg, { useProtoFieldName: true }),
463
+ toJson(OrganizationSchema, secondOrg, { useProtoFieldName: true }),
464
+ ]);
465
+ });
466
+
467
+ it("applies --limit to organizations (findMyOrganizations has no pagination)", async () => {
468
+ const out = await listResources(client, ApiResourceKind.organization, "acme", 1, "json");
444
469
  expect(JSON.parse(out)).toEqual([toJson(OrganizationSchema, knownOrg, { useProtoFieldName: true })]);
445
470
  });
446
471
 
447
472
  it("lists API keys via findAll as JSON", async () => {
448
473
  const out = await listResources(client, ApiResourceKind.api_key, "acme", 50, "json");
474
+ expect(JSON.parse(out)).toEqual([
475
+ toJson(ApiKeySchema, knownApiKey, { useProtoFieldName: true }),
476
+ toJson(ApiKeySchema, secondApiKey, { useProtoFieldName: true }),
477
+ ]);
478
+ });
479
+
480
+ it("applies --limit to API keys (findAll has no pagination)", async () => {
481
+ const out = await listResources(client, ApiResourceKind.api_key, "acme", 1, "json");
449
482
  expect(JSON.parse(out)).toEqual([toJson(ApiKeySchema, knownApiKey, { useProtoFieldName: true })]);
450
483
  });
451
484
 
@@ -110,4 +110,26 @@ describe("directory zipping", () => {
110
110
  writeFileSync(join(empty, ".hidden"), "x"); // only hidden -> nothing attachable
111
111
  await expect(processAttachments(uploader, [empty], [])).rejects.toThrow(/no attachable files/);
112
112
  });
113
+
114
+ it("uniquifies duplicate directory basenames so mount paths never contradict (issue #364)", async () => {
115
+ // Two dirs named `data` from different parents would otherwise derive the
116
+ // SAME explicit mount path, which the runner rejects as a contradiction.
117
+ const dirA = join(dir, "a", "data");
118
+ const dirB = join(dir, "b", "data");
119
+ mkdirSync(dirA, { recursive: true });
120
+ mkdirSync(dirB, { recursive: true });
121
+ writeFileSync(join(dirA, "one.txt"), "1");
122
+ writeFileSync(join(dirB, "two.txt"), "2");
123
+
124
+ const progress: string[] = [];
125
+ const result = await processAttachments(uploader, [dirA, dirB], [], (l) => progress.push(l));
126
+
127
+ expect(result.attachments).toHaveLength(2);
128
+ expect(result.attachments[0].filename).toBe("data.zip");
129
+ expect(result.attachments[0].mountPath).toBe("inputs/data/");
130
+ expect(result.attachments[1].filename).toBe("data-2.zip");
131
+ expect(result.attachments[1].mountPath).toBe("inputs/data-2/");
132
+ // The rename is disclosed to the user on the progress sink.
133
+ expect(progress.some((l) => l.includes("'data/'") && l.includes("'data-2/'"))).toBe(true);
134
+ });
113
135
  });