@kimchi-dev/kimchictl 0.0.7 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/templates.d.ts +46 -0
- package/dist/api/templates.d.ts.map +1 -0
- package/dist/api/templates.js +110 -0
- package/dist/api/templates.js.map +1 -0
- package/dist/api/workspaces.d.ts +2 -0
- package/dist/api/workspaces.d.ts.map +1 -1
- package/dist/api/workspaces.js +1 -0
- package/dist/api/workspaces.js.map +1 -1
- package/dist/commands/guard.d.ts.map +1 -1
- package/dist/commands/guard.js +3 -0
- package/dist/commands/guard.js.map +1 -1
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +2 -0
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/templates.d.ts +15 -0
- package/dist/commands/templates.d.ts.map +1 -0
- package/dist/commands/templates.js +174 -0
- package/dist/commands/templates.js.map +1 -0
- package/dist/commands/workspace.d.ts.map +1 -1
- package/dist/commands/workspace.js +4 -1
- package/dist/commands/workspace.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -2
- package/src/api/templates.ts +187 -0
- package/src/api/workspaces.ts +3 -0
- package/src/commands/guard.ts +3 -0
- package/src/commands/registry.ts +2 -0
- package/src/commands/templates.test.ts +126 -0
- package/src/commands/templates.ts +204 -0
- package/src/commands/workspace.test.ts +4 -4
- package/src/commands/workspace.ts +4 -1
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"../src/","sources":["commands/workspace.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"../src/","sources":["commands/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAEN,eAAe,EACf,eAAe,EACf,cAAc,GAEd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAiBxC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;0BAyBM,CAAA;AAE1B,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc,EAAE,OAAsB,EAAE;IAC1E,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IAC5B,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,QAAQ;YACZ,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC7B,KAAK,MAAM,CAAC;QACZ,KAAK,IAAI;YACR,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC3B,KAAK,KAAK;YACT,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC1B,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACR,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC7B,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,SAAS;YACb,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YACxB,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAClC;YACC,OAAO,CAAC,KAAK,CAAC,sCAAsC,IAAI,GAAG,CAAC,CAAA;YAC5D,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;YAC1B,OAAO,CAAC,CAAA;IACV,CAAC;AACF,CAAC;AAED,0EAA0E;AAE1E,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,IAAmB;IAC3D,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,kBAAkB,EAAE,IAAI,EAAE;QACpE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACxB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;QACxC,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACjC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACvB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvC,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QAClD,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QACjD,sBAAsB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3C,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACjC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC9B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;KAC1C,CAAC,CAAA;IACF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CACnB,iGAAiG,CACjG,CAAA;IACF,CAAC;IAED,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;IAC9E,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAEhG,MAAM,YAAY,GAAG,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;IACpH,MAAM,UAAU,GACf,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAElH,mDAAmD;IACnD,MAAM,SAAS,GAAwD,EAAE,CAAA;IACzE,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;IACvF,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IACnG,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IAEvG,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CACxE,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CACzD,CAAA;IACD,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CACjG,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CACzD,CAAA;IACD,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAC9F,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CACzD,CAAA;IACD,MAAM,kBAAkB,GAAG,MAAM,CAAC,sBAAsB,CAAC,KAAK,IAAI,CAAA;IAClE,MAAM,aAAa,GAAG,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAEnG,+DAA+D;IAC/D,IAAI,UAA8B,CAAA;IAClC,IAAI,aAAa,EAAE,CAAC;QACnB,IAAI,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACvC,IAAI,CAAC;gBACJ,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAA;YACtD,CAAC;YAAC,MAAM,CAAC;gBACR,MAAM,IAAI,UAAU,CAAC,0DAA0D,QAAQ,EAAE,CAAC,CAAA;YAC3F,CAAC;QACF,CAAC;aAAM,CAAC;YACP,UAAU,GAAG,aAAa,CAAA;QAC3B,CAAC;IACF,CAAC;IAED,MAAM,OAAO,GACZ,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;QACjC,YAAY,CAAC,MAAM,GAAG,CAAC;QACvB,aAAa,CAAC,MAAM,GAAG,CAAC;QACxB,YAAY,CAAC,MAAM,GAAG,CAAC;QACvB,kBAAkB;QAClB,UAAU,KAAK,SAAS,CAAA;IAEzB,uEAAuE;IACvE,yDAAyD;IACzD,IAAI,CAAC,YAAY,IAAI,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;QAC7C,MAAM,IAAI,UAAU,CACnB,gLAAgL,CAChL,CAAA;IACF,CAAC;IACD,IAAI,YAAY,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,UAAU,CAAC,iFAAiF,CAAC,CAAA;IACxG,CAAC;IAED,MAAM,IAAI,GAAoC,OAAO;QACpD,CAAC,CAAC;YACA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB;gBAC5E,CAAC,CAAC;oBACA,YAAY,EAAE;wBACb,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACvD,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC/D,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC5D;iBACD;gBACF,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnD;QACF,CAAC,CAAC,SAAS,CAAA;IAEZ,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IAE/F,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE;QAC1C,WAAW,EAAE,IAAI;QACjB,YAAY;QACZ,UAAU;QACV,IAAI;QACJ,KAAK,EAAE,IAAI,CAAC,KAAK;KACjB,CAAC,CAAA;IACF,yEAAyE;IACzE,qEAAqE;IACrE,0BAA0B;IAC1B,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;IAE7D,IAAI,OAAO,GAAG,OAAO,CAAA;IACrB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB,+DAA+D;QAC/D,OAAO,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE;YACvD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,cAAc,GAAG,IAAI;YAChC,KAAK;YACL,MAAM,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,cAAc,GAAG,CAAC;SACnF,CAAC,CAAA;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,0EAA0E,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;QACzG,CAAC;IACF,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACrE,OAAO,CAAC,GAAG,EAAE,CAAA;IACd,CAAC;IACD,mFAAmF;IACnF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC1B,OAAO,CAAC,CAAA;AACT,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY,EAAE,OAAe;IACzD,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA;IAClE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,UAAU,CAAC,aAAa,OAAO,kDAAkD,CAAC,CAAA;IAC7F,CAAC;IACD,OAAO,OAAO,CAAA;AACf,CAAC;AAED,wEAAwE;AAExE,KAAK,UAAU,OAAO,CAAC,IAAc,EAAE,IAAmB;IACzD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE;QAClE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE;KACxD,CAAC,CAAA;IACF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAAC,0DAA0D,CAAC,CAAA;IACjF,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC3D,6EAA6E;QAC7E,MAAM,IAAI,UAAU,CACnB,mDAAmD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAyB,CACjG,CAAA;IACF,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACvC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAEnE,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACxE,OAAO,CAAC,CAAA;IACT,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAA;IACtC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,YAAY,IAAI,GAAG;QACrB,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC;QAC3B,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC;QACjC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;QACvB,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;QAC3B,CAAC,CAAC,GAAG,IAAI,EAAE;KACX,CAAC,CAAA;IACF,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAC5G,OAAO,CAAC,CAAA;AACT,CAAC;AAED,uEAAuE;AAEvE,KAAK,UAAU,MAAM,CAAC,IAAc,EAAE,IAAmB;IACxD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,IAAI,EAAE;QACjE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;KACvD,CAAC,CAAA;IACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,UAAU,CAAC,8DAA8D,CAAC,CAAA;IACrF,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1D,MAAM,IAAI,UAAU,CACnB,kDAAkD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAC/F,CAAA;IACF,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACvC,qEAAqE;IACrE,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAE1F,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACnE,OAAO,CAAC,CAAA;IACT,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAA;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAA;IACzD,KAAK,MAAM,IAAI,IAAI,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC1F,OAAO,CAAC,CAAA;AACT,CAAC;AAED,0EAA0E;AAE1E,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,IAAmB;IAC3D,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,kBAAkB,EAAE,IAAI,EAAE;QACpE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;KACtC,CAAC,CAAA;IACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,UAAU,CAAC,iEAAiE,CAAC,CAAA;IACxF,CAAC;IACD,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAEhC,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACvC,yEAAyE;IACzE,iEAAiE;IACjE,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAEzE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,aAAa,EAAE,CAAA;QACvD,MAAM,QAAQ,GAAG,qBAAqB,SAAS,CAAC,KAAK,WAAW,CAAA;QAChE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAClG,IAAI,CAAC,EAAE,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,+EAA+E,SAAS,CAAC,KAAK,EAAE,CAAC,CAAA;gBAC/G,OAAO,CAAC,CAAA;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YACvB,OAAO,CAAC,CAAA;QACT,CAAC;IACF,CAAC;IAED,MAAM,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAC/D,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,CAAC,KAAK,EAAE,CAAC,CAAA;IAC3C,OAAO,CAAC,CAAA;AACT,CAAC;AAED,0EAA0E;AAE1E,sFAAsF;AACtF,SAAS,SAAS,CAAC,MAA2B,EAAE,KAAc;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,MAAM,EAAE,CAAA;IAChC,MAAM,IAAI,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IAChG,OAAO,GAAG,IAAI,KAAK,MAAM,SAAS,CAAA;AACnC,CAAC;AAED,SAAS,GAAG,CAAC,IAAY,EAAE,KAAc;IACxC,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;AAC9C,CAAC;AAED,6EAA6E;AAC7E,SAAS,YAAY,CAAC,SAAoB,EAAE,GAAuB;IAClE,IAAI,CAAC,SAAS,CAAC,GAAG;QAAE,OAAO,EAAE,CAAA;IAC7B,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAA;IAC9D,OAAO,CAAC,YAAY,EAAE,aAAa,SAAS,CAAC,KAAK,IAAI,MAAM,EAAE,EAAE,iBAAiB,SAAS,CAAC,GAAG,cAAc,CAAC,CAAA;AAC9G,CAAC;AAED,8FAA8F;AAC9F,SAAS,mBAAmB,CAC3B,SAAoB,EACpB,GAAkC,EAClC,KAAc,EACd,GAAS;IAET,MAAM,KAAK,GAAa,CAAC,GAAG,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;IACrF,IAAI,SAAS,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAAA;IAE/E,MAAM,IAAI,GAAG;QACZ,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;QACvD,SAAS,CAAC,UAAU;QACpB,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE;QAC9D,WAAW,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM;KACpD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACjB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAA;IAEpE,IACC,SAAS,CAAC,aAAa,KAAK,SAAS;QACrC,SAAS,CAAC,QAAQ,KAAK,SAAS;QAChC,SAAS,CAAC,YAAY,KAAK,SAAS,EACnC,CAAC;QACF,KAAK,CAAC,IAAI,CACT,GAAG,CACF,KAAK,gBAAgB,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,EACjJ,KAAK,CACL,CACD,CAAA;IACF,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;IAC5C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAA;IACvB,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAY;IACvC,OAAO;QACN,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;QAC5E,SAAS,EAAE;YACV,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,YAAY,EAAE,CAAC,CAAC,YAAY;SAC5B;KACD,CAAA;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,GAAG,GAA8D,YAAY,CAAC,YAAY,CAAC,CAAA"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"//name": "Scoped under the kimchi-dev npm org (the GitHub org is getkimchi)",
|
|
3
3
|
"name": "@kimchi-dev/kimchictl",
|
|
4
4
|
"//version": "Placeholder, never bumped: the git tag is the version, stamped by release.yml at publish time",
|
|
5
|
-
"version": "0.0.
|
|
5
|
+
"version": "0.0.9",
|
|
6
6
|
"description": "Create and connect to kimchi remote workspaces from the terminal.",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"kimchi",
|
|
@@ -42,7 +42,8 @@
|
|
|
42
42
|
"commands": {
|
|
43
43
|
"workspace": "./dist/commands/workspace.js",
|
|
44
44
|
"ws": "./dist/commands/workspace.js",
|
|
45
|
-
"ssh": "./dist/commands/ssh.js"
|
|
45
|
+
"ssh": "./dist/commands/ssh.js",
|
|
46
|
+
"templates": "./dist/commands/templates.js"
|
|
46
47
|
}
|
|
47
48
|
},
|
|
48
49
|
"exports": {
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { checkResponse, fetchWithTimeout, resolveEndpoint } from "./http.js"
|
|
2
|
+
import { verifyApiKey } from "./keys.js"
|
|
3
|
+
import type { ApiOptions } from "./types.js"
|
|
4
|
+
import { RemoteNetworkError } from "./types.js"
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Workspace-template client — read-only surface against the
|
|
8
|
+
* WorkspaceTemplatesAPI (proto: workspacetemplates_api.proto).
|
|
9
|
+
*
|
|
10
|
+
* Templates are named, organization-scoped presets of workspace creation
|
|
11
|
+
* parameters (resources, dependencies, egress policy, init script). They are
|
|
12
|
+
* curated by admins; `workspace create --template <name>` resolves them.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export interface WorkspaceTemplateSpec {
|
|
16
|
+
resources?: {
|
|
17
|
+
cpu?: string
|
|
18
|
+
memory?: string
|
|
19
|
+
pvcSize?: string
|
|
20
|
+
}
|
|
21
|
+
dependencies?: string[]
|
|
22
|
+
egressPolicy?: {
|
|
23
|
+
denyByDefault?: boolean
|
|
24
|
+
allowed?: string[]
|
|
25
|
+
denied?: string[]
|
|
26
|
+
}
|
|
27
|
+
initScript?: string
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface WorkspaceTemplate {
|
|
31
|
+
id: string
|
|
32
|
+
organizationId: string
|
|
33
|
+
name: string
|
|
34
|
+
description: string
|
|
35
|
+
spec?: WorkspaceTemplateSpec
|
|
36
|
+
createdBy: string
|
|
37
|
+
updatedBy: string
|
|
38
|
+
createTime: Date
|
|
39
|
+
updateTime: Date
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface WorkspaceTemplateOptions extends ApiOptions {
|
|
43
|
+
orgId?: string
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async function resolveOrgId(apiKey: string, options?: WorkspaceTemplateOptions): Promise<string> {
|
|
47
|
+
return options?.orgId ?? (await verifyApiKey(apiKey, options))
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export class TemplateNotFoundError extends Error {
|
|
51
|
+
constructor(ref: string) {
|
|
52
|
+
super(`No workspace template matches "${ref}" — list with: kimchictl workspace templates list`)
|
|
53
|
+
this.name = "TemplateNotFoundError"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export class AmbiguousTemplateError extends Error {
|
|
58
|
+
constructor(ref: string, candidates: string[]) {
|
|
59
|
+
super(`Multiple workspace templates match "${ref}": ${candidates.join(", ")} — use the full name`)
|
|
60
|
+
this.name = "AmbiguousTemplateError"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export async function listWorkspaceTemplates(
|
|
65
|
+
apiKey: string,
|
|
66
|
+
options?: WorkspaceTemplateOptions,
|
|
67
|
+
): Promise<WorkspaceTemplate[]> {
|
|
68
|
+
const fetchImpl = options?.fetch ?? globalThis.fetch
|
|
69
|
+
const endpoint = resolveEndpoint(options)
|
|
70
|
+
const orgId = await resolveOrgId(apiKey, options)
|
|
71
|
+
|
|
72
|
+
const params = new URLSearchParams()
|
|
73
|
+
params.set("page.limit", "200")
|
|
74
|
+
|
|
75
|
+
const url = `${endpoint}/ai-optimizer/v1beta/organizations/${encodeURIComponent(orgId)}/workspace-templates?${params}`
|
|
76
|
+
const resp = await fetchWithTimeout(
|
|
77
|
+
url,
|
|
78
|
+
{ method: "GET", headers: { Authorization: `Bearer ${apiKey}`, Accept: "application/json" } },
|
|
79
|
+
fetchImpl,
|
|
80
|
+
30_000,
|
|
81
|
+
options?.signal,
|
|
82
|
+
)
|
|
83
|
+
await checkResponse(resp, url)
|
|
84
|
+
|
|
85
|
+
const data: unknown = await resp.json().catch(() => undefined)
|
|
86
|
+
if (typeof data !== "object" || data === null) {
|
|
87
|
+
throw new RemoteNetworkError(`Unexpected response from ${endpoint}`)
|
|
88
|
+
}
|
|
89
|
+
const items = (data as { items?: unknown }).items
|
|
90
|
+
if (!Array.isArray(items)) {
|
|
91
|
+
throw new RemoteNetworkError(`Missing items array in workspace-templates response from ${endpoint}`)
|
|
92
|
+
}
|
|
93
|
+
return items.map((item) => mapWorkspaceTemplate(item, endpoint))
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export async function getWorkspaceTemplate(
|
|
97
|
+
apiKey: string,
|
|
98
|
+
id: string,
|
|
99
|
+
options?: WorkspaceTemplateOptions,
|
|
100
|
+
): Promise<WorkspaceTemplate> {
|
|
101
|
+
const fetchImpl = options?.fetch ?? globalThis.fetch
|
|
102
|
+
const endpoint = resolveEndpoint(options)
|
|
103
|
+
const orgId = await resolveOrgId(apiKey, options)
|
|
104
|
+
|
|
105
|
+
const url = `${endpoint}/ai-optimizer/v1beta/organizations/${encodeURIComponent(orgId)}/workspace-templates/${encodeURIComponent(id)}`
|
|
106
|
+
const resp = await fetchWithTimeout(
|
|
107
|
+
url,
|
|
108
|
+
{ method: "GET", headers: { Authorization: `Bearer ${apiKey}` } },
|
|
109
|
+
fetchImpl,
|
|
110
|
+
30_000,
|
|
111
|
+
options?.signal,
|
|
112
|
+
)
|
|
113
|
+
await checkResponse(resp, url)
|
|
114
|
+
|
|
115
|
+
const data: unknown = await resp.json().catch(() => undefined)
|
|
116
|
+
return mapWorkspaceTemplate(data, endpoint)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function mapWorkspaceTemplate(raw: unknown, endpoint: string): WorkspaceTemplate {
|
|
120
|
+
if (typeof raw !== "object" || raw === null) {
|
|
121
|
+
throw new RemoteNetworkError(`Invalid workspace-template entry in response from ${endpoint}`)
|
|
122
|
+
}
|
|
123
|
+
const r = raw as Record<string, unknown>
|
|
124
|
+
|
|
125
|
+
const id = typeof r.id === "string" && r.id.length > 0 ? r.id : undefined
|
|
126
|
+
if (!id) {
|
|
127
|
+
throw new RemoteNetworkError(`Missing workspace-template id in response from ${endpoint}`)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
let createTime: Date = new Date(0)
|
|
131
|
+
if (typeof r.createTime === "string") {
|
|
132
|
+
const parsed = new Date(r.createTime)
|
|
133
|
+
if (!Number.isNaN(parsed.getTime())) createTime = parsed
|
|
134
|
+
}
|
|
135
|
+
let updateTime: Date = new Date(0)
|
|
136
|
+
if (typeof r.updateTime === "string") {
|
|
137
|
+
const parsed = new Date(r.updateTime)
|
|
138
|
+
if (!Number.isNaN(parsed.getTime())) updateTime = parsed
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return {
|
|
142
|
+
id,
|
|
143
|
+
organizationId: typeof r.organizationId === "string" ? r.organizationId : "",
|
|
144
|
+
name: typeof r.name === "string" ? r.name : "",
|
|
145
|
+
description: typeof r.description === "string" ? r.description : "",
|
|
146
|
+
spec: mapTemplateSpec(r.spec),
|
|
147
|
+
createdBy: typeof r.createdBy === "string" ? r.createdBy : "",
|
|
148
|
+
updatedBy: typeof r.updatedBy === "string" ? r.updatedBy : "",
|
|
149
|
+
createTime,
|
|
150
|
+
updateTime,
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function mapTemplateSpec(raw: unknown): WorkspaceTemplateSpec | undefined {
|
|
155
|
+
if (typeof raw !== "object" || raw === null) return undefined
|
|
156
|
+
const s = raw as Record<string, unknown>
|
|
157
|
+
|
|
158
|
+
const spec: WorkspaceTemplateSpec = {}
|
|
159
|
+
|
|
160
|
+
if (typeof s.resources === "object" && s.resources !== null) {
|
|
161
|
+
const res = s.resources as Record<string, unknown>
|
|
162
|
+
spec.resources = {
|
|
163
|
+
cpu: typeof res.cpu === "string" ? res.cpu : undefined,
|
|
164
|
+
memory: typeof res.memory === "string" ? res.memory : undefined,
|
|
165
|
+
pvcSize: typeof res.pvcSize === "string" ? res.pvcSize : undefined,
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (Array.isArray(s.dependencies)) {
|
|
170
|
+
spec.dependencies = s.dependencies.filter((d): d is string => typeof d === "string")
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (typeof s.egressPolicy === "object" && s.egressPolicy !== null) {
|
|
174
|
+
const eg = s.egressPolicy as Record<string, unknown>
|
|
175
|
+
spec.egressPolicy = {
|
|
176
|
+
denyByDefault: typeof eg.denyByDefault === "boolean" ? eg.denyByDefault : undefined,
|
|
177
|
+
allowed: Array.isArray(eg.allowed) ? eg.allowed.filter((d): d is string => typeof d === "string") : undefined,
|
|
178
|
+
denied: Array.isArray(eg.denied) ? eg.denied.filter((d): d is string => typeof d === "string") : undefined,
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (typeof s.initScript === "string") {
|
|
183
|
+
spec.initScript = s.initScript
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return Object.keys(spec).length > 0 ? spec : undefined
|
|
187
|
+
}
|
package/src/api/workspaces.ts
CHANGED
|
@@ -32,6 +32,8 @@ export interface Workspace {
|
|
|
32
32
|
cluster: string
|
|
33
33
|
/** Client that owns the workspace (e.g. harness). */
|
|
34
34
|
clientType: string
|
|
35
|
+
/** Template the workspace was created from, when set. */
|
|
36
|
+
templateName: string
|
|
35
37
|
cpuMillicores?: number
|
|
36
38
|
ramBytes?: number
|
|
37
39
|
pvcSizeBytes?: number
|
|
@@ -278,6 +280,7 @@ export function mapWorkspace(raw: unknown, endpoint: string): Workspace {
|
|
|
278
280
|
createdAt: createdAt ?? new Date(0),
|
|
279
281
|
cluster: typeof r.cluster === "string" ? r.cluster : "",
|
|
280
282
|
clientType: typeof r.clientType === "string" ? r.clientType : "",
|
|
283
|
+
templateName: typeof r.templateName === "string" ? r.templateName : "",
|
|
281
284
|
cpuMillicores: cpuQuantityToMillicores(res?.cpu),
|
|
282
285
|
ramBytes: byteQuantityToBytes(res?.memory),
|
|
283
286
|
pvcSizeBytes: byteQuantityToBytes(res?.pvcSize),
|
package/src/commands/guard.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AmbiguousWorkspaceError, WorkspaceNotFoundError } from "../api/resolver.js"
|
|
2
|
+
import { AmbiguousTemplateError, TemplateNotFoundError } from "../api/templates.js"
|
|
2
3
|
import { RemoteAuthError, RemoteNetworkError } from "../api/types.js"
|
|
3
4
|
import { ModelsFetchError } from "../auth/models-providers.js"
|
|
4
5
|
import { NotLoggedInError } from "../auth/resolve.js"
|
|
@@ -29,6 +30,8 @@ export function guardCommand<TDeps>(
|
|
|
29
30
|
err instanceof ModelsFetchError ||
|
|
30
31
|
err instanceof WorkspaceNotFoundError ||
|
|
31
32
|
err instanceof AmbiguousWorkspaceError ||
|
|
33
|
+
err instanceof TemplateNotFoundError ||
|
|
34
|
+
err instanceof AmbiguousTemplateError ||
|
|
32
35
|
err instanceof BridgeError ||
|
|
33
36
|
err instanceof RemoteAuthError ||
|
|
34
37
|
err instanceof RemoteNetworkError
|
package/src/commands/registry.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { guardCommand } from "./guard.js"
|
|
|
3
3
|
import { runLogin } from "./login.js"
|
|
4
4
|
import { runLogout } from "./logout.js"
|
|
5
5
|
import { runSsh } from "./ssh.js"
|
|
6
|
+
import { runTemplates } from "./templates.js"
|
|
6
7
|
import { runUpdate } from "./update.js"
|
|
7
8
|
import { runVersion } from "./version.js"
|
|
8
9
|
import { runWhoami } from "./whoami.js"
|
|
@@ -32,6 +33,7 @@ export const COMMANDS: CommandDefinition[] = [
|
|
|
32
33
|
},
|
|
33
34
|
{ name: "ws", summary: "Alias for workspace", hidden: true, run: guardCommand(runWorkspace) },
|
|
34
35
|
{ name: "ssh", summary: "Connect to a workspace over SSH", run: guardCommand(runSsh) },
|
|
36
|
+
{ name: "templates", summary: "Browse workspace templates (list | get)", run: guardCommand(runTemplates) },
|
|
35
37
|
{ name: "update", summary: "Check for and install a newer kimchictl release", run: guardCommand(runUpdate) },
|
|
36
38
|
{
|
|
37
39
|
name: "completion",
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { writeFileSync } from "node:fs"
|
|
2
|
+
import { join } from "node:path"
|
|
3
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"
|
|
4
|
+
import {
|
|
5
|
+
captureConsole,
|
|
6
|
+
cleanupTempDirs,
|
|
7
|
+
jsonResponse,
|
|
8
|
+
makeTempDir,
|
|
9
|
+
stubAgentDirEnv,
|
|
10
|
+
stubFetch,
|
|
11
|
+
} from "../test-support.js"
|
|
12
|
+
import { guardCommand } from "./guard.js"
|
|
13
|
+
import { runTemplates, type TemplatesDeps } from "./templates.js"
|
|
14
|
+
|
|
15
|
+
const guardedTemplates = guardCommand(runTemplates)
|
|
16
|
+
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
const dir = makeTempDir()
|
|
19
|
+
stubAgentDirEnv(dir)
|
|
20
|
+
writeFileSync(join(dir, "auth.json"), JSON.stringify({ "kimchi-dev": { type: "api_key", key: "key-1" } }))
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
afterEach(() => {
|
|
24
|
+
cleanupTempDirs()
|
|
25
|
+
vi.unstubAllEnvs()
|
|
26
|
+
vi.restoreAllMocks()
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
const TEMPLATE_JSON = {
|
|
30
|
+
id: "aaaa1111-2222-3333-4444-555555555555",
|
|
31
|
+
organizationId: "org-1",
|
|
32
|
+
name: "rust",
|
|
33
|
+
description: "Rust workspace",
|
|
34
|
+
spec: {
|
|
35
|
+
resources: { cpu: "2", memory: "4Gi", pvcSize: "20Gi" },
|
|
36
|
+
dependencies: ["jq", "node@22"],
|
|
37
|
+
egressPolicy: { denyByDefault: true, allowed: ["*.github.com"] },
|
|
38
|
+
initScript: "echo hi",
|
|
39
|
+
},
|
|
40
|
+
createdBy: "user-1",
|
|
41
|
+
updatedBy: "user-1",
|
|
42
|
+
createTime: "2026-01-01T00:00:00Z",
|
|
43
|
+
updateTime: "2026-01-01T00:00:00Z",
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function templateFetch(items: unknown[]): typeof globalThis.fetch {
|
|
47
|
+
return stubFetch(async (url, init) => {
|
|
48
|
+
if (url.endsWith("workspace-tokens:verifyKey")) return jsonResponse({ organizationId: "org-1" })
|
|
49
|
+
if (url.includes("workspace-templates?")) return jsonResponse({ items })
|
|
50
|
+
if (url.endsWith("/workspace-templates/aaaa1111-2222-3333-4444-555555555555")) {
|
|
51
|
+
return jsonResponse(items[0])
|
|
52
|
+
}
|
|
53
|
+
throw new Error(`unexpected: ${init?.method ?? "GET"} ${url}`)
|
|
54
|
+
}) as typeof globalThis.fetch
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async function run(
|
|
58
|
+
args: string[],
|
|
59
|
+
fetch: typeof globalThis.fetch,
|
|
60
|
+
deps: TemplatesDeps = {},
|
|
61
|
+
): Promise<{ code: number; lines: string[]; errors: string[] }> {
|
|
62
|
+
const { lines, errors } = captureConsole()
|
|
63
|
+
const code = await guardedTemplates(args, { color: false, fetch, ...deps })
|
|
64
|
+
return { code, lines, errors }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
describe("kimchictl templates (top-level)", () => {
|
|
68
|
+
it("prints group usage on help / missing verb", async () => {
|
|
69
|
+
const { code, lines } = await run(["help"], templateFetch([]))
|
|
70
|
+
expect(code).toBe(0)
|
|
71
|
+
expect(lines[0]).toContain("kimchictl templates <verb>")
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
it("renders the template table", async () => {
|
|
75
|
+
const { code, lines } = await run(["list"], templateFetch([TEMPLATE_JSON]), {
|
|
76
|
+
now: () => new Date("2026-01-01T03:00:00Z"),
|
|
77
|
+
})
|
|
78
|
+
expect(code).toBe(0)
|
|
79
|
+
const table = lines[0]?.split("\n") ?? []
|
|
80
|
+
expect(table[0]).toMatch(/^NAME\s+DESCRIPTION\s+CPU\s+MEMORY\s+STORAGE\s+AGE$/)
|
|
81
|
+
expect(table[1]).toMatch(/^rust\s+Rust workspace\s+2\s+4Gi\s+20Gi\s+3h$/)
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
it("renders json output", async () => {
|
|
85
|
+
const { code, lines } = await run(["list", "--output", "json"], templateFetch([TEMPLATE_JSON]))
|
|
86
|
+
expect(code).toBe(0)
|
|
87
|
+
const parsed = JSON.parse(lines.join(""))
|
|
88
|
+
expect(parsed[0]).toMatchObject({ name: "rust", description: "Rust workspace" })
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
it("renders the template detail card by name", async () => {
|
|
92
|
+
const { code, lines } = await run(["get", "rust"], templateFetch([TEMPLATE_JSON]), {
|
|
93
|
+
now: () => new Date("2026-01-01T03:00:00Z"),
|
|
94
|
+
})
|
|
95
|
+
expect(code).toBe(0)
|
|
96
|
+
const text = lines.join("\n")
|
|
97
|
+
expect(text).toContain("rust template")
|
|
98
|
+
expect(text).toContain("Rust workspace")
|
|
99
|
+
expect(text).toContain("deps jq, node@22")
|
|
100
|
+
expect(text).toContain("egress allow: *.github.com")
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
it("resolves by UUID without listing", async () => {
|
|
104
|
+
const fetch = templateFetch([TEMPLATE_JSON])
|
|
105
|
+
const calls: string[] = []
|
|
106
|
+
const trackedFetch = stubFetch(async (url, init) => {
|
|
107
|
+
calls.push(url)
|
|
108
|
+
return fetch(url, init)
|
|
109
|
+
}) as typeof globalThis.fetch
|
|
110
|
+
|
|
111
|
+
const { code } = await run(["get", "aaaa1111-2222-3333-4444-555555555555"], trackedFetch)
|
|
112
|
+
expect(code).toBe(0)
|
|
113
|
+
expect(calls.some((u) => u.includes("workspace-templates?"))).toBe(false)
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
it("errors on unknown template", async () => {
|
|
117
|
+
const { code, errors } = await run(["get", "nope"], templateFetch([]))
|
|
118
|
+
expect(code).toBe(1)
|
|
119
|
+
expect(errors[0]).toContain('No workspace template matches "nope"')
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
it("rejects unknown verbs and bad output", async () => {
|
|
123
|
+
expect((await run(["frobnicate"], templateFetch([]))).code).toBe(2)
|
|
124
|
+
expect((await run(["list", "--output", "yaml"], templateFetch([]))).code).toBe(2)
|
|
125
|
+
})
|
|
126
|
+
})
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { formatAge, formatBytes, formatMillicores } from "../api/resources.js"
|
|
2
|
+
import {
|
|
3
|
+
AmbiguousTemplateError,
|
|
4
|
+
getWorkspaceTemplate,
|
|
5
|
+
listWorkspaceTemplates,
|
|
6
|
+
TemplateNotFoundError,
|
|
7
|
+
type WorkspaceTemplate,
|
|
8
|
+
} from "../api/templates.js"
|
|
9
|
+
import { requireApiKey } from "../auth/resolve.js"
|
|
10
|
+
import { parseFlags, UsageError } from "./flags.js"
|
|
11
|
+
import { guardCommand } from "./guard.js"
|
|
12
|
+
import { formatTable } from "./table.js"
|
|
13
|
+
|
|
14
|
+
export interface TemplatesDeps {
|
|
15
|
+
fetch?: typeof globalThis.fetch
|
|
16
|
+
env?: NodeJS.ProcessEnv
|
|
17
|
+
/** Override TTY interactivity detection (tests). */
|
|
18
|
+
interactive?: boolean
|
|
19
|
+
/** Clock override for deterministic AGE columns (tests). */
|
|
20
|
+
now?: () => Date
|
|
21
|
+
/** ANSI colors on stdout (tests); defaults to stdout being a TTY. */
|
|
22
|
+
color?: boolean
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const TEMPLATES_USAGE = `Usage:
|
|
26
|
+
kimchictl templates <verb> [options]
|
|
27
|
+
|
|
28
|
+
Verbs:
|
|
29
|
+
list List workspace templates (alias: ls)
|
|
30
|
+
get Show template details
|
|
31
|
+
|
|
32
|
+
Options:
|
|
33
|
+
--help Show this help`
|
|
34
|
+
|
|
35
|
+
/** `kimchictl templates <verb> …` — read-only browse of workspace templates. */
|
|
36
|
+
export async function runTemplates(args: string[], deps: TemplatesDeps = {}): Promise<number> {
|
|
37
|
+
const [verb, ...rest] = args
|
|
38
|
+
switch (verb) {
|
|
39
|
+
case "list":
|
|
40
|
+
case "ls":
|
|
41
|
+
return runTemplatesList(rest, deps)
|
|
42
|
+
case "get":
|
|
43
|
+
return runTemplatesGet(rest, deps)
|
|
44
|
+
case "help":
|
|
45
|
+
case "--help":
|
|
46
|
+
case "-h":
|
|
47
|
+
console.log(TEMPLATES_USAGE)
|
|
48
|
+
return 0
|
|
49
|
+
case undefined:
|
|
50
|
+
console.error(TEMPLATES_USAGE)
|
|
51
|
+
return 2
|
|
52
|
+
default:
|
|
53
|
+
console.error(`kimchictl templates: unknown verb "${verb}"`)
|
|
54
|
+
console.error(TEMPLATES_USAGE)
|
|
55
|
+
return 2
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async function runTemplatesList(args: string[], deps: TemplatesDeps): Promise<number> {
|
|
60
|
+
const { values, positionals } = parseFlags("templates list", args, {
|
|
61
|
+
output: { type: "string", short: "o", default: "table" },
|
|
62
|
+
})
|
|
63
|
+
if (positionals.length > 0) {
|
|
64
|
+
throw new UsageError("kimchictl templates list: unexpected positional argument")
|
|
65
|
+
}
|
|
66
|
+
if (values.output !== "json" && values.output !== "table") {
|
|
67
|
+
throw new UsageError(
|
|
68
|
+
`kimchictl templates list: unsupported --output "${String(values.output)}" (expected table|json)`,
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const { key } = requireApiKey(deps.env)
|
|
73
|
+
const templates = await listWorkspaceTemplates(key, { fetch: deps.fetch })
|
|
74
|
+
|
|
75
|
+
if (values.output === "json") {
|
|
76
|
+
console.log(JSON.stringify(templates.map(serializeTemplate), null, 2))
|
|
77
|
+
return 0
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const now = deps.now?.() ?? new Date()
|
|
81
|
+
const rows = templates.map((t) => [
|
|
82
|
+
t.name || t.id.slice(0, 12),
|
|
83
|
+
t.description.length > 40 ? `${t.description.slice(0, 37)}…` : t.description || "-",
|
|
84
|
+
formatMillicores(t.spec?.resources?.cpu ? parseQuantity(t.spec.resources.cpu) : undefined),
|
|
85
|
+
formatBytes(t.spec?.resources?.memory ? parseByteQuantity(t.spec.resources.memory) : undefined),
|
|
86
|
+
formatBytes(t.spec?.resources?.pvcSize ? parseByteQuantity(t.spec.resources.pvcSize) : undefined),
|
|
87
|
+
formatAge(t.createTime, now),
|
|
88
|
+
])
|
|
89
|
+
console.log(formatTable(["NAME", "DESCRIPTION", "CPU", "MEMORY", "STORAGE", "AGE"], rows))
|
|
90
|
+
return 0
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async function runTemplatesGet(args: string[], deps: TemplatesDeps): Promise<number> {
|
|
94
|
+
const { values, positionals } = parseFlags("templates get", args, {
|
|
95
|
+
output: { type: "string", short: "o", default: "text" },
|
|
96
|
+
})
|
|
97
|
+
if (positionals.length !== 1) {
|
|
98
|
+
throw new UsageError("kimchictl templates get: expected exactly one template name or ID")
|
|
99
|
+
}
|
|
100
|
+
if (values.output !== "json" && values.output !== "text") {
|
|
101
|
+
throw new UsageError(
|
|
102
|
+
`kimchictl templates get: unsupported --output "${String(values.output)}" (expected text|json)`,
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const { key } = requireApiKey(deps.env)
|
|
107
|
+
const ref = positionals[0] ?? ""
|
|
108
|
+
|
|
109
|
+
// Templates are addressed by ID in the API; when the ref is a name,
|
|
110
|
+
// list-and-match (the API has no by-name lookup).
|
|
111
|
+
let template: WorkspaceTemplate | undefined
|
|
112
|
+
if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(ref)) {
|
|
113
|
+
template = await getWorkspaceTemplate(key, ref, { fetch: deps.fetch })
|
|
114
|
+
} else {
|
|
115
|
+
const all = await listWorkspaceTemplates(key, { fetch: deps.fetch })
|
|
116
|
+
const matches = all.filter((t) => t.name === ref || t.name.startsWith(ref))
|
|
117
|
+
if (matches.length === 0) throw new TemplateNotFoundError(ref)
|
|
118
|
+
if (matches.length > 1)
|
|
119
|
+
throw new AmbiguousTemplateError(
|
|
120
|
+
ref,
|
|
121
|
+
matches.map((t) => t.name),
|
|
122
|
+
)
|
|
123
|
+
template = matches[0]
|
|
124
|
+
}
|
|
125
|
+
if (!template) throw new TemplateNotFoundError(ref)
|
|
126
|
+
|
|
127
|
+
if (values.output === "json") {
|
|
128
|
+
console.log(JSON.stringify(serializeTemplate(template), null, 2))
|
|
129
|
+
return 0
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
for (const line of renderTemplateCard(template, deps.color ?? false, deps.now?.() ?? new Date())) {
|
|
133
|
+
console.log(line)
|
|
134
|
+
}
|
|
135
|
+
return 0
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function renderTemplateCard(template: WorkspaceTemplate, color: boolean, now: Date): string[] {
|
|
139
|
+
const dimText = (text: string) => (color ? `\x1b[2m${text}\x1b[0m` : text)
|
|
140
|
+
const lines: string[] = [`${template.name || template.id.slice(0, 12)} ${dimText("template")}`]
|
|
141
|
+
if (template.description) lines.push(dimText(` ${template.description}`))
|
|
142
|
+
|
|
143
|
+
const parts: string[] = []
|
|
144
|
+
const res = template.spec?.resources
|
|
145
|
+
if (res) {
|
|
146
|
+
if (res.cpu) parts.push(formatMillicores(parseQuantity(res.cpu)))
|
|
147
|
+
if (res.memory) parts.push(formatBytes(parseByteQuantity(res.memory)))
|
|
148
|
+
}
|
|
149
|
+
if (parts.length > 0) {
|
|
150
|
+
lines.push(dimText(` ${parts.join(" · ")}`))
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const dependencies = template.spec?.dependencies
|
|
154
|
+
if (dependencies && dependencies.length > 0) {
|
|
155
|
+
lines.push(` deps ${dependencies.join(", ")}`)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const eg = template.spec?.egressPolicy
|
|
159
|
+
if (eg) {
|
|
160
|
+
const egParts: string[] = []
|
|
161
|
+
if (eg.denyByDefault === false) egParts.push("default-allow")
|
|
162
|
+
if (eg.allowed && eg.allowed.length > 0) egParts.push(`allow: ${eg.allowed.join(", ")}`)
|
|
163
|
+
if (eg.denied && eg.denied.length > 0) egParts.push(`deny: ${eg.denied.join(", ")}`)
|
|
164
|
+
if (egParts.length > 0) lines.push(dimText(` egress ${egParts.join(" · ")}`))
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
lines.push(dimText(` updated ${formatAge(template.updateTime, now)} ago`))
|
|
168
|
+
return lines
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function serializeTemplate(t: WorkspaceTemplate): Record<string, unknown> {
|
|
172
|
+
return {
|
|
173
|
+
id: t.id,
|
|
174
|
+
name: t.name,
|
|
175
|
+
...(t.description ? { description: t.description } : {}),
|
|
176
|
+
spec: t.spec,
|
|
177
|
+
...(t.createdBy ? { createdBy: t.createdBy } : {}),
|
|
178
|
+
...(t.updateTime.getTime() > 0 ? { updateTime: t.updateTime.toISOString() } : {}),
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/** Parse a k8s CPU quantity string ("500m", "2") to millicores. */
|
|
183
|
+
function parseQuantity(q: string): number | undefined {
|
|
184
|
+
const value = Number.parseFloat(q.replace(/m$/, ""))
|
|
185
|
+
if (Number.isNaN(value)) return undefined
|
|
186
|
+
return q.endsWith("m") ? value : value * 1000
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** Parse a k8s memory/storage quantity string ("1Gi", "512Mi") to bytes. */
|
|
190
|
+
function parseByteQuantity(q: string): number | undefined {
|
|
191
|
+
const units: Record<string, number> = { Ki: 1024, Mi: 1024 ** 2, Gi: 1024 ** 3, Ti: 1024 ** 4 }
|
|
192
|
+
for (const [suffix, mult] of Object.entries(units)) {
|
|
193
|
+
if (q.endsWith(suffix)) {
|
|
194
|
+
const value = Number.parseFloat(q.slice(0, -suffix.length))
|
|
195
|
+
if (!Number.isNaN(value)) return value * mult
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const value = Number.parseFloat(q)
|
|
199
|
+
if (!Number.isNaN(value)) return value
|
|
200
|
+
return undefined
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/** Canonical harness-package entry: guard exit codes for the kimchi.commands manifest. */
|
|
204
|
+
export const run: (args: string[], deps?: TemplatesDeps) => Promise<number> = guardCommand(runTemplates)
|