@skaile/workspaces 0.11.0 → 0.11.2

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 (77) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/asset-manager/index.js +2 -2
  3. package/dist/asset-manager/scaffold.js +1 -1
  4. package/dist/base-assets/connectors/deploy.js +2 -2
  5. package/dist/base-assets/connectors/devserver.js +2 -2
  6. package/dist/base-assets/connectors/flow/adapter.js +2 -2
  7. package/dist/base-assets/connectors/flow/run-flow.js +3 -3
  8. package/dist/base-assets/connectors/flow.js +2 -2
  9. package/dist/base-assets/connectors/git.js +2 -2
  10. package/dist/base-assets/connectors/gmail.js +2 -2
  11. package/dist/base-assets/connectors/local.js +2 -2
  12. package/dist/base-assets/connectors/mattermost.js +2 -2
  13. package/dist/base-assets/connectors/memory.js +2 -2
  14. package/dist/base-assets/connectors/minio.js +2 -2
  15. package/dist/base-assets/connectors/postgres.js +2 -2
  16. package/dist/base-assets/connectors/redis.js +2 -2
  17. package/dist/base-assets/connectors/s3.js +2 -2
  18. package/dist/base-assets/connectors/sharepoint/driver.d.ts.map +1 -1
  19. package/dist/base-assets/connectors/sharepoint.js +2 -2
  20. package/dist/base-assets/connectors/sqlite.js +2 -2
  21. package/dist/base-assets/connectors/static-server.js +2 -2
  22. package/dist/base-assets/connectors/tunnel.js +2 -2
  23. package/dist/base-assets/connectors/webdav/driver.d.ts.map +1 -1
  24. package/dist/base-assets/connectors/webdav.js +2 -2
  25. package/dist/base-assets/connectors/xstate-store.js +2 -2
  26. package/dist/base-assets/connectors/xstate.js +2 -2
  27. package/dist/base-assets/connectors/yjs.js +2 -2
  28. package/dist/bridge/drivers/claude-sdk.js +31 -28
  29. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  30. package/dist/bridge/drivers/codex.js +1 -1
  31. package/dist/bridge/drivers/echo.js +1 -1
  32. package/dist/bridge/drivers/omp.js +1 -1
  33. package/dist/bridge/index.js +3 -3
  34. package/dist/bridge/src/drivers/claude-sdk.d.ts +33 -17
  35. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  36. package/dist/bridge/src/error-classifier.d.ts.map +1 -1
  37. package/dist/{chunk-YOFKTALB.js → chunk-4ACWI5YT.js} +2 -2
  38. package/dist/{chunk-YOFKTALB.js.map → chunk-4ACWI5YT.js.map} +1 -1
  39. package/dist/{chunk-EBMFCF4P.js → chunk-6MB7CRME.js} +17 -6
  40. package/dist/chunk-6MB7CRME.js.map +1 -0
  41. package/dist/{chunk-ZLLUIIZR.js → chunk-DDVKNST3.js} +3 -3
  42. package/dist/{chunk-ZLLUIIZR.js.map → chunk-DDVKNST3.js.map} +1 -1
  43. package/dist/{chunk-EWP5HZBV.js → chunk-DQWREFRQ.js} +11 -2
  44. package/dist/chunk-DQWREFRQ.js.map +1 -0
  45. package/dist/{chunk-UHSC75L7.js → chunk-EAJKY27M.js} +9 -9
  46. package/dist/chunk-EAJKY27M.js.map +1 -0
  47. package/dist/{chunk-FEBLE7QX.js → chunk-EARKGKKB.js} +2 -2
  48. package/dist/{chunk-FEBLE7QX.js.map → chunk-EARKGKKB.js.map} +1 -1
  49. package/dist/{chunk-VMU2WEN7.js → chunk-S2OVTCAL.js} +4 -4
  50. package/dist/{chunk-VMU2WEN7.js.map → chunk-S2OVTCAL.js.map} +1 -1
  51. package/dist/{chunk-L6PKR6YY.js → chunk-UTKGPNLV.js} +7 -7
  52. package/dist/{chunk-L6PKR6YY.js.map → chunk-UTKGPNLV.js.map} +1 -1
  53. package/dist/{chunk-OQIBHB4F.js → chunk-YHXBQLXX.js} +2 -2
  54. package/dist/{chunk-OQIBHB4F.js.map → chunk-YHXBQLXX.js.map} +1 -1
  55. package/dist/{chunk-BTKNSMLK.js → chunk-Z5PO7ZVP.js} +2 -2
  56. package/dist/{chunk-BTKNSMLK.js.map → chunk-Z5PO7ZVP.js.map} +1 -1
  57. package/dist/cli/index.js +11 -11
  58. package/dist/connectors/index.js +2 -2
  59. package/dist/connectors/rclone.js +1 -1
  60. package/dist/connectors/src/fs-utils.d.ts +33 -0
  61. package/dist/connectors/src/fs-utils.d.ts.map +1 -0
  62. package/dist/connectors/src/index.d.ts +1 -0
  63. package/dist/connectors/src/index.d.ts.map +1 -1
  64. package/dist/connectors/src/rclone-process-manager.d.ts.map +1 -1
  65. package/dist/runner/index.js +7 -7
  66. package/dist/sdk/asset-manager.js +2 -2
  67. package/dist/sdk/bridge.js +3 -3
  68. package/dist/sdk/index.js +7 -7
  69. package/dist/sdk/runner.js +7 -7
  70. package/dist/{setup-QAOUBECX.js → setup-WZFCLQ2J.js} +5 -5
  71. package/dist/{setup-QAOUBECX.js.map → setup-WZFCLQ2J.js.map} +1 -1
  72. package/dist/tui/index.js +7 -7
  73. package/dist/workspace-plugin/index.js +1 -1
  74. package/package.json +1 -1
  75. package/dist/chunk-EBMFCF4P.js.map +0 -1
  76. package/dist/chunk-EWP5HZBV.js.map +0 -1
  77. package/dist/chunk-UHSC75L7.js.map +0 -1
@@ -542,5 +542,5 @@ async function scaffoldWorkspace(opts) {
542
542
  }
543
543
 
544
544
  export { applyBaseLayer, applyConnectorsLayer, applyContainerLayer, applyDriverTargetLayer, applyHooksLayer, applySkillsLayer, applyTemplateLayer, listTemplates, loadTemplate, resolveTemplatePath, scaffoldWorkspace, setTemplatesDir };
545
- //# sourceMappingURL=chunk-OQIBHB4F.js.map
546
- //# sourceMappingURL=chunk-OQIBHB4F.js.map
545
+ //# sourceMappingURL=chunk-YHXBQLXX.js.map
546
+ //# sourceMappingURL=chunk-YHXBQLXX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../asset-manager/src/scaffold/layers/base.ts","../asset-manager/src/scaffold/layers/container.ts","../asset-manager/src/scaffold/layers/driver-target.ts","../asset-manager/src/scaffold/layers/hooks.ts","../asset-manager/src/scaffold/layers/connectors.ts","../asset-manager/src/scaffold/layers/skills.ts","../asset-manager/src/scaffold/layers/template.ts","../asset-manager/src/scaffold/scaffolder.ts"],"names":["basename","join","existsSync","writeFileSync","mkdirSync","dirname","readFileSync","readdirSync"],"mappings":";;;;;;;;;;AAoBO,SAAS,cAAA,CACd,IAAA,EACA,WAAA,EACA,gBAAA,EACA,WACA,IAAA,EACU;AACV,EAAA,MAAM,UAAoB,EAAC;AAG3B,EAAA,IAAI,CAAC,UAAA,CAAW,IAAI,CAAA,EAAG;AACrB,IAAA,SAAA,CAAU,IAAA,EAAM,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACnC,IAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,EAClB;AAGA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,EAAM,SAAS,CAAA;AACtC,EAAA,IAAI,CAAC,UAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,IAAA,SAAA,CAAU,SAAA,EAAW,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACxC,IAAA,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,EACzB;AAGA,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,EAAW,UAAU,CAAA;AAC9C,EAAA,IAAI,CAAC,UAAA,CAAW,WAAW,CAAA,EAAG;AAC5B,IAAA,SAAA,CAAU,WAAA,EAAa,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAC1C,IAAA,OAAA,CAAQ,KAAK,mBAAmB,CAAA;AAAA,EAClC;AAGA,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,SAAA,EAAW,eAAe,CAAA;AACpD,EAAA,IAAI,CAAC,UAAA,CAAW,YAAY,CAAA,EAAG;AAC7B,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,GAAI,oBAAoB,EAAC;AAAA,MACzB,GAAI,IAAA,CAAK,QAAA,IAAY;AAAC,KACxB;AACA,IAAA,aAAA,CAAc,cAAc,CAAA,EAAG,IAAA,CAAK,UAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC;AAAA,CAAI,CAAA;AACpE,IAAA,OAAA,CAAQ,KAAK,uBAAuB,CAAA;AAAA,EACtC;AAGA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,IAAa,WAAA,EAAa,aAAa,EAAC;AAC7D,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,WAAA,EAAa,YAAY,EAAC;AAE5D,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,IAAA,EAAM,aAAa,CAAA;AAC7C,EAAA,IAAI,CAAC,UAAA,CAAW,YAAY,CAAA,EAAG;AAC7B,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,IAAQ,QAAA,CAAS,IAAI,CAAA;AAG9C,IAAA,MAAM,iBAAA,GAAoB,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AAC9C,MAAA,MAAM,QAAiC,EAAE,IAAA,EAAM,EAAE,IAAA,EAAM,IAAA,EAAM,EAAE,IAAA,EAAK;AACpE,MAAA,IAAI,CAAA,CAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,CAAE,MAAA;AAC/B,MAAA,IAAI,MAAM,CAAA,IAAK,QAAA,CAAS,MAAA,GAAS,CAAA,QAAS,YAAA,GAAe,QAAA;AACzD,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,MAAM,QAAA,GAAoC;AAAA,MACxC,IAAA,EAAM,WAAA;AAAA,MACN,WAAA,EAAa,GAAG,WAAW,CAAA,sBAAA,CAAA;AAAA,MAC3B,cAAA,EAAgB;AAAA,QACd,OAAA,EAAS;AAAA,UACP,KAAA,EAAO,SAAA;AAAA,UACP,QAAA,EAAU,WAAA;AAAA,UACV,KAAA,EAAO,mBAAA;AAAA,UACP,MAAA,EAAQ,YAAA;AAAA,UACR,SAAA,EAAW;AAAA;AACb,OACF;AAAA,MACA,YAAA,EAAc;AAAA,KAChB;AACA,IAAA,aAAA,CAAc,YAAA,EAAc,SAAA,CAAU,QAAQ,CAAC,CAAA;AAC/C,IAAA,OAAA,CAAQ,KAAK,aAAa,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,OAAA;AACT;AC7EO,SAAS,mBAAA,CACd,IAAA,EACA,MAAA,EACA,WAAA,EACU;AACV,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAA,EAAS,OAAO,OAAA;AAE7B,EAAA,MAAM,IAAA,GAAO,WAAA,IAAeA,QAAAA,CAAS,IAAI,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,OAAO,SAAA,IAAa,gBAAA;AACtC,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,IAAA;AAGhC,EAAA,MAAM,cAAA,GAAiBC,IAAAA,CAAK,IAAA,EAAM,YAAY,CAAA;AAC9C,EAAA,IAAI,CAACC,UAAAA,CAAW,cAAc,CAAA,EAAG;AAC/B,IAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAA;AAC/D,IAAAC,aAAAA,CAAc,gBAAgB,UAAU,CAAA;AACxC,IAAA,OAAA,CAAQ,KAAK,YAAY,CAAA;AAAA,EAC3B;AAGA,EAAA,MAAM,WAAA,GAAcF,IAAAA,CAAK,IAAA,EAAM,oBAAoB,CAAA;AACnD,EAAA,IAAI,CAACC,UAAAA,CAAW,WAAW,CAAA,EAAG;AAC5B,IAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AACpD,IAAAC,aAAAA,CAAc,aAAa,OAAO,CAAA;AAClC,IAAA,OAAA,CAAQ,KAAK,oBAAoB,CAAA;AAAA,EACnC;AAGA,EAAA,MAAM,gBAAA,GAAmBF,IAAAA,CAAK,IAAA,EAAM,eAAe,CAAA;AACnD,EAAA,IAAI,CAACC,UAAAA,CAAW,gBAAgB,CAAA,EAAG;AACjC,IAAAC,aAAAA;AAAA,MACE,gBAAA;AAAA,MACA,CAAC,gBAAgB,MAAA,EAAQ,kBAAA,EAAoB,SAAS,YAAA,EAAc,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI;AAAA,KACnF;AACA,IAAA,OAAA,CAAQ,KAAK,eAAe,CAAA;AAAA,EAC9B;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,kBAAA,CACP,SAAA,EACA,MAAA,EACA,MAAA,EACQ;AACR,EAAA,MAAM,QAAkB,CAAC,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAA,EAAI,IAAI,mBAAmB,CAAA;AAGrE,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,EAAO,MAAA,EAAQ,GAAI,MAAA,CAAO,QAAA,IAAY,EAAG,CAAA;AAC3D,EAAA,IAAI,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA,EAAG;AAChC,IAAA,KAAA,CAAM,KAAK,CAAA,uBAAA,EAA0B,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EAC3D,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,yCAAA,EAA4C,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,+BAAA;AAAA,KAChE;AAAA,EACF;AACA,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAG;AAC7C,IAAA,KAAA,CAAM,KAAK,cAAc,CAAA;AACzB,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAE,CAAA;AAAA,IAC1C;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAC/B,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,KAAA,CAAM,KAAK,gCAAgC,CAAA;AAC3C,EAAA,KAAA,CAAM,KAAK,qBAAqB,CAAA;AAChC,EAAA,KAAA,CAAM,KAAK,0BAA0B,CAAA;AACrC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,MAAM,KAAA,GAAQ,CAAC,MAAA,CAAO,MAAM,GAAG,GAAI,MAAA,CAAO,KAAA,IAAS,EAAG,CAAA;AACtD,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,IAAI,CAAA,CAAE,CAAA;AAAA,EAC7B;AACA,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,IAAI,MAAA,CAAO,GAAA,IAAO,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA,EAAG;AACvC,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,IAAA,KAAA,MAAW,MAAA,IAAU,OAAO,GAAA,EAAK;AAC/B,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAA;AAAA,IAC5B;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,KAAA,CAAM,KAAK,+DAA0D,CAAA;AACrE,EAAA,KAAA,CAAM,KAAK,yBAAyB,CAAA;AACpC,EAAA,KAAA,CAAM,KAAK,+CAA+C,CAAA;AAC1D,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,eAAA,CAAgB,IAAA,EAAc,MAAA,EAA8B,MAAA,EAAwB;AAC3F,EAAA,MAAM,cAAc,IAAA,CAAK,OAAA,CAAQ,cAAA,EAAgB,GAAG,EAAE,WAAA,EAAY;AAClE,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,EAAG,MAAM,IAAI,MAAM,CAAA,CAAA,EAAI,IAAI,MAAA,CAAO,KAAA,IAAS,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,EAAE,CAAC,CAAA;AAErF,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,WAAA;AAAA,IACA,KAAK,WAAW,CAAA,CAAA,CAAA;AAAA,IAChB,cAAA;AAAA,IACA,uBAAuB,WAAW,CAAA;AAAA,GACpC;AAGA,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AACvB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IAChC;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAG;AAC7C,IAAA,KAAA,CAAM,KAAK,cAAc,CAAA;AACzB,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,MAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,QAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,KAAA,CAAM,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAAA,MACtD,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,KAAA,CAAM,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,GAAA,IAAO,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA,EAAG;AACvC,IAAA,KAAA,CAAM,KAAK,kBAAkB,CAAA;AAC7B,IAAA,KAAA,MAAW,MAAA,IAAU,OAAO,GAAA,EAAK;AAC/B,MAAA,IAAI,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AACxB,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,MAAM,CAAA,CAAE,CAAA;AAAA,MAChC,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,MAAM,CAAA,CAAE,CAAA;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,KAAK,6BAA6B,CAAA;AACxC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;ACnJO,SAAS,sBAAA,CACd,IAAA,EACA,MAAA,EACA,oBAAA,EACU;AACV,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,YAAA,GAAgB,oBAAA,IACpB,MAAA,GAAS,gBAAgB,CAAA,IACzB,aAAA;AAEF,EAAA,MAAM,SAAA,GAAY,eAAe,YAAY,CAAA;AAC7C,EAAA,IAAI,CAAC,WAAW,OAAO,OAAA;AAGvB,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AACrC,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG;AAChD,IAAA,YAAA,CAAa,IAAI,GAAG,CAAA;AAAA,EACtB;AAGA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,MAAA,YAAA,CAAa,IAAI,KAAK,CAAA;AAAA,IACxB;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,OAAO,YAAA,EAAc;AAC9B,IAAA,MAAM,QAAA,GAAWF,IAAAA,CAAK,IAAA,EAAM,GAAG,CAAA;AAC/B,IAAA,IAAI,CAACC,UAAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,MAAAE,SAAAA,CAAU,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AACvC,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IACxB;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AC7BO,SAAS,eAAA,CACd,IAAA,EACA,MAAA,EACA,GAAA,EACa;AACb,EAAA,MAAM,SAAsB,EAAE,OAAA,EAAS,EAAC,EAAG,QAAA,EAAU,EAAC,EAAE;AACxD,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AAGpB,EAAA,IAAI,OAAO,OAAA,EAAS;AAClB,IAAA,MAAM,MAAA,GAASH,IAAAA,CAAK,IAAA,EAAM,MAAM,CAAA;AAChC,IAAA,IAAI,CAACC,UAAAA,CAAW,MAAM,CAAA,EAAG;AACvB,MAAA,IAAI;AACF,QAAA,QAAA,CAAS,YAAY,EAAE,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,QAAQ,CAAA;AACjD,QAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,OAAO,CAAA;AAC3B,QAAA,GAAA,GAAM,4BAA4B,CAAA;AAAA,MACpC,SAAS,GAAA,EAAc;AACrB,QAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,QAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,iBAAA,EAAoB,GAAG,CAAA,CAAE,CAAA;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,SAAA,IAAa,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,EAAG;AACnD,IAAA,MAAM,aAAA,GAAgBD,IAAAA,CAAK,IAAA,EAAM,YAAY,CAAA;AAC7C,IAAA,IAAI,QAAA,GAAW,EAAA;AACf,IAAA,IAAIC,UAAAA,CAAW,aAAa,CAAA,EAAG;AAC7B,MAAA,QAAA,GAAW,YAAA,CAAa,eAAe,OAAO,CAAA;AAAA,IAChD;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAI,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AACvE,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,CAAC,MAAM,CAAC,aAAA,CAAc,GAAA,CAAI,CAAC,CAAC,CAAA;AAEvE,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,MAAM,MAAA,GAAS,CAAA,EAAA,CAAI,QAAA,IAAY,CAAC,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA,GAAI,IAAA,GAAO,EAAA,IAAM,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA;AAC5F,MAAAC,aAAAA,CAAc,aAAA,EAAe,QAAA,GAAW,MAAM,CAAA;AAC9C,MAAA,IAAI,CAAC,cAAc,IAAA,EAAM;AACvB,QAAA,MAAA,CAAO,OAAA,CAAQ,KAAK,YAAY,CAAA;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,YAAA,EAAc;AACvB,IAAA,KAAA,MAAW,MAAA,IAAU,OAAO,YAAA,EAAc;AACxC,MAAA,IAAI;AACF,QAAA,GAAA,GAAM,CAAA,sBAAA,EAAyB,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAC5C,QAAA,MAAM,MAAM,MAAA,CAAO,GAAA,GAAMF,KAAK,IAAA,EAAM,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA;AAClD,QAAA,IAAI,CAACC,UAAAA,CAAW,GAAG,CAAA,EAAG;AACpB,UAAAE,SAAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,QACpC;AACA,QAAA,QAAA,CAAS,OAAO,GAAA,EAAK;AAAA,UACnB,GAAA;AAAA,UACA,KAAA,EAAO,MAAA;AAAA,UACP,OAAA,EAAS,GAAA;AAAA,UACT,KAAK,EAAE,GAAG,OAAA,CAAQ,GAAA,EAAK,eAAe,IAAA;AAAK,SAC5C,CAAA;AACD,QAAA,GAAA,GAAM,CAAA,cAAA,EAAiB,MAAA,CAAO,IAAI,CAAA,WAAA,CAAa,CAAA;AAAA,MACjD,SAAS,GAAA,EAAc;AACrB,QAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,QAAA,MAAA,CAAO,SAAS,IAAA,CAAK,CAAA,cAAA,EAAiB,OAAO,IAAI,CAAA,UAAA,EAAa,GAAG,CAAA,CAAE,CAAA;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;ACxEO,SAAS,oBAAA,CACd,IAAA,EACA,UAAA,EACA,GAAA,EACU;AACV,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,UAA4B,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,GAAI,aAAa,EAAC;AAC5E,EAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,EAAQ,OAAO,OAAA;AAG5B,EAAA,MAAM,QAAA,GAAWH,IAAAA,CAAK,IAAA,EAAM,aAAa,CAAA;AACzC,EAAA,IAAIC,UAAAA,CAAW,QAAQ,CAAA,EAAG;AACxB,IAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,IAAA,CAAK,QAAQ,CAAA;AAChD,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,MAAA,CAAO,YAAA,CAAa;AAAA,QAClB,IAAI,CAAA,CAAE,EAAA;AAAA,QACN,QAAQ,CAAA,CAAE,MAAA;AAAA,QACV,MAAA,EAAQ,EAAE,MAAA,IAAU,WAAA;AAAA,QACpB,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,SAAS,CAAA,CAAE;AAAA,OACZ,CAAA;AAAA,IACH;AACA,IAAA,MAAA,CAAO,IAAA,EAAK;AACZ,IAAA,GAAA,GAAM,CAAA,MAAA,EAAS,OAAA,CAAQ,MAAM,CAAA,4BAAA,CAA8B,CAAA;AAAA,EAC7D,CAAA,MAAO;AACL,IAAA,GAAA,GAAM,qFAAqF,CAAA;AAAA,EAC7F;AAGA,EAAA,KAAA,MAAW,aAAa,OAAA,EAAS;AAC/B,IAAA,IAAI,SAAA,CAAU,cAAc,KAAA,EAAO;AACnC,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,SAAA,IAAa,CAAA,YAAA,EAAe,UAAU,EAAE,CAAA,CAAA;AACpE,IAAA,MAAM,QAAA,GAAWD,IAAAA,CAAK,IAAA,EAAM,SAAS,CAAA;AACrC,IAAA,IAAI,CAACC,UAAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,MAAAE,SAAAA,CAAU,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AACvC,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,SAAS,CAAA,CAAA,CAAG,CAAA;AAC5B,MAAA,GAAA,GAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAE,CAAA;AAAA,IACzC;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;ACnCA,eAAe,gBAAA,GAAwC;AACrD,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,OAAO,0BAAgB,CAAA;AACzC,IAAA,OAAO,IAAI,YAAA,IAAgB,IAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAaA,eAAsB,gBAAA,CACpB,IAAA,EACA,MAAA,EACA,GAAA,EAC8B;AAC9B,EAAA,MAAM,SAA8B,EAAE,SAAA,EAAW,EAAC,EAAG,QAAA,EAAU,EAAC,EAAE;AAClE,EAAA,IAAI,CAAC,MAAA,EAAQ,WAAA,EAAa,OAAO,MAAA;AAEjC,EAAA,MAAM,YAAA,GAAeH,IAAAA,CAAK,IAAA,EAAM,aAAa,CAAA;AAC7C,EAAA,IAAI,CAACC,UAAAA,CAAW,YAAY,CAAA,EAAG;AAC7B,IAAA,MAAA,CAAO,QAAA,CAAS,KAAK,+CAA+C,CAAA;AACpE,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,YAAA,GAAe,MAAM,gBAAA,EAAiB;AAC5C,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA;AAAA,MACd;AAAA,KACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,GAAA,GAAM,4BAA4B,CAAA;AAElC,IAAA,MAAM,KAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAY,MAAM,CAAA;AAChD,IAAA,MAAM,aAAA,GAAgB,MAAM,EAAA,CAAG,OAAA,EAAQ;AAEvC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,EAAG;AAChC,MAAA,MAAA,CAAO,SAAA,GAAY,aAAA;AAAA,IACrB,CAAA,MAAA,IAAW,eAAe,QAAA,EAAU;AAClC,MAAA,MAAA,CAAO,YAAY,aAAA,CAAc,QAAA;AAAA,IACnC;AAEA,IAAA,GAAA,GAAM,CAAA,UAAA,EAAa,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,SAAA,CAAW,CAAA;AAAA,EACvD,SAAS,GAAA,EAAc;AACrB,IAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,sBAAA,EAAyB,GAAG,CAAA,CAAE,CAAA;AAAA,EACrD;AAEA,EAAA,OAAO,MAAA;AACT;AC9EA,SAAS,mBAAA,CAAoB,GAAA,EAAa,IAAA,EAAc,OAAA,EAAmB,QAAA,EAAwB;AACjG,EAAA,IAAI,CAACA,UAAAA,CAAW,IAAI,CAAA,EAAGE,UAAU,IAAA,EAAM,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAC1D,EAAA,KAAA,MAAW,SAAS,WAAA,CAAY,GAAA,EAAK,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA,EAAG;AAC7D,IAAA,MAAM,OAAA,GAAUH,IAAAA,CAAK,GAAA,EAAK,KAAA,CAAM,IAAI,CAAA;AACpC,IAAA,MAAM,QAAA,GAAWA,IAAAA,CAAK,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA;AACtC,IAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,MAAA,mBAAA,CAAoB,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,QAAQ,CAAA;AAAA,IAC1D,CAAA,MAAA,IAAW,CAACC,UAAAA,CAAW,QAAQ,CAAA,EAAG;AAChC,MAAAE,UAAU,OAAA,CAAQ,QAAQ,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAChD,MAAA,YAAA,CAAa,SAAS,QAAQ,CAAA;AAC9B,MAAA,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,QAAA,EAAU,QAAQ,CAAC,CAAA;AAAA,IAC3C;AAAA,EACF;AACF;AAWO,SAAS,kBAAA,CACd,IAAA,EACA,MAAA,EACA,WAAA,EACU;AACV,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,CAAC,QAAQ,OAAO,OAAA;AAGpB,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AACxB,IAAA,IAAIF,UAAAA,CAAW,QAAQ,CAAA,EAAG;AAExB,MAAA,KAAA,MAAW,IAAA,IAAQ,CAAC,SAAA,EAAW,UAAA,EAAY,WAAW,CAAA,EAAG;AACvD,QAAA,MAAM,GAAA,GAAMD,IAAAA,CAAK,QAAA,EAAU,IAAI,CAAA;AAC/B,QAAA,MAAM,QAAA,GAAWA,IAAAA,CAAK,IAAA,EAAM,SAAA,EAAW,SAAS,IAAI,CAAA;AACpD,QAAA,IAAIC,WAAW,GAAG,CAAA,IAAK,CAACA,UAAAA,CAAW,QAAQ,CAAA,EAAG;AAC5C,UAAAE,UAAU,OAAA,CAAQ,QAAQ,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAChD,UAAA,YAAA,CAAa,KAAK,QAAQ,CAAA;AAC1B,UAAA,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,QAAQ,CAAC,CAAA;AAAA,QACvC;AAAA,MACF;AAGA,MAAA,MAAM,YAAA,GAAeH,IAAAA,CAAK,QAAA,EAAU,WAAW,CAAA;AAC/C,MAAA,IAAIC,UAAAA,CAAW,YAAY,CAAA,EAAG;AAC5B,QAAA,MAAM,aAAA,GAAgBD,IAAAA,CAAK,IAAA,EAAM,SAAA,EAAW,SAAS,WAAW,CAAA;AAChE,QAAA,mBAAA,CAAoB,YAAA,EAAc,aAAA,EAAe,OAAA,EAAS,IAAI,CAAA;AAAA,MAChE;AAGA,MAAA,MAAM,SAAA,GAAYA,IAAAA,CAAK,QAAA,EAAU,QAAQ,CAAA;AACzC,MAAA,IAAIC,UAAAA,CAAW,SAAS,CAAA,EAAG;AACzB,QAAA,MAAM,UAAA,GAAaD,IAAAA,CAAK,IAAA,EAAM,SAAA,EAAW,SAAS,QAAQ,CAAA;AAC1D,QAAA,mBAAA,CAAoB,SAAA,EAAW,UAAA,EAAY,OAAA,EAAS,IAAI,CAAA;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,MAAM,QAAA,GAAWA,IAAAA,CAAK,IAAA,EAAM,SAAA,EAAW,SAAS,SAAS,CAAA;AACzD,IAAA,IAAI,CAACC,UAAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,MAAAE,UAAU,OAAA,CAAQ,QAAQ,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAChD,MAAAD,aAAAA,CAAc,QAAA,EAAU,MAAA,CAAO,IAAI,CAAA;AACnC,MAAA,OAAA,CAAQ,KAAK,uBAAuB,CAAA;AAAA,IACtC;AAAA,EACF;AACA,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,MAAM,SAAA,GAAYF,IAAAA,CAAK,IAAA,EAAM,SAAA,EAAW,SAAS,UAAU,CAAA;AAC3D,IAAA,IAAI,CAACC,UAAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,MAAAE,UAAU,OAAA,CAAQ,SAAS,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AACjD,MAAAD,aAAAA,CAAc,SAAA,EAAW,MAAA,CAAO,KAAK,CAAA;AACrC,MAAA,OAAA,CAAQ,KAAK,wBAAwB,CAAA;AAAA,IACvC;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,SAAS,WAAA,EAAa;AAC/B,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,KAAA,EAAO;AAC/B,MAAA,MAAM,OAAA,GAAUF,IAAAA,CAAK,WAAA,EAAa,IAAA,CAAK,GAAG,CAAA;AAC1C,MAAA,MAAM,QAAA,GAAWA,IAAAA,CAAK,IAAA,EAAM,IAAA,CAAK,IAAI,CAAA;AACrC,MAAA,IAAI,CAACC,UAAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,MAAA,IAAIA,UAAAA,CAAW,QAAQ,CAAA,EAAG;AAE1B,MAAA,IAAI,QAAA,CAAS,OAAO,CAAA,CAAE,WAAA,EAAY,EAAG;AACnC,QAAA,mBAAA,CAAoB,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,IAAI,CAAA;AAAA,MACtD,CAAA,MAAO;AACL,QAAAE,UAAU,OAAA,CAAQ,QAAQ,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAChD,QAAA,YAAA,CAAa,SAAS,QAAQ,CAAA;AAC9B,QAAA,OAAA,CAAQ,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;ACxFA,IAAI,oBAAA,GAAsC,IAAA;AAO1C,SAAS,sBAAA,GAAiC;AACxC,EAAA,IAAI,sBAAsB,OAAO,oBAAA;AACjC,EAAA,OAAOH,IAAAA,CAAKI,OAAAA,CAAQ,IAAI,GAAA,CAAI,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA,CAAE,QAAQ,CAAA,EAAG,IAAA,EAAM,IAAA,EAAM,WAAW,CAAA;AACjF;AAUO,SAAS,gBAAgB,GAAA,EAAmB;AACjD,EAAA,oBAAA,GAAuB,QAAQ,GAAG,CAAA;AACpC;AAgBO,SAAS,oBAAoB,QAAA,EAAiC;AAEnE,EAAA,IAAI,SAAS,QAAA,CAAS,OAAO,KAAK,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3D,IAAA,MAAM,GAAA,GAAM,QAAQ,QAAQ,CAAA;AAC5B,IAAA,OAAOH,UAAAA,CAAW,GAAG,CAAA,GAAI,GAAA,GAAM,IAAA;AAAA,EACjC;AAGA,EAAA,MAAM,OAAA,GAAU,QAAQ,QAAQ,CAAA;AAChC,EAAA,MAAM,KAAA,GAAQD,IAAAA,CAAK,OAAA,EAAS,gBAAgB,CAAA;AAC5C,EAAA,IAAIC,UAAAA,CAAW,KAAK,CAAA,EAAG,OAAO,KAAA;AAG9B,EAAA,MAAM,OAAA,GAAUD,IAAAA,CAAK,sBAAA,EAAuB,EAAG,UAAU,gBAAgB,CAAA;AACzE,EAAA,IAAIC,UAAAA,CAAW,OAAO,CAAA,EAAG,OAAO,OAAA;AAEhC,EAAA,OAAO,IAAA;AACT;AASO,SAAS,aAAa,YAAA,EAAmE;AAC9F,EAAA,MAAM,GAAA,GAAMI,YAAAA,CAAa,YAAA,EAAc,OAAO,CAAA;AAC9C,EAAA,MAAM,QAAA,GAAW,MAAM,GAAG,CAAA;AAC1B,EAAA,MAAM,GAAA,GAAMD,QAAQ,YAAY,CAAA;AAEhC,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,MAAM,UAAA,GACJ,mBAAA,CAAoB,QAAA,CAAS,OAAO,CAAA,IAAK,oBAAoBJ,IAAAA,CAAK,GAAA,EAAK,QAAA,CAAS,OAAO,CAAC,CAAA;AAC1F,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,MAAA,GAAS,aAAa,UAAU,CAAA;AAEtC,MAAA,MAAM,EAAE,SAAS,IAAA,EAAM,IAAA,EAAM,aAAa,OAAA,EAAS,GAAG,eAAc,GAAI,QAAA;AACxE,MAAA,MAAA,CAAO,OAAO,QAAA,EAAU;AAAA,QACtB,GAAG,MAAA,CAAO,QAAA;AAAA,QACV,IAAA;AAAA,QACA,WAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA,EAAS,IAAA;AAAA,QACT,GAAG;AAAA,OACJ,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,UAAU,GAAA,EAAI;AACzB;AAQO,SAAS,aAAA,GAA4E;AAC1F,EAAA,MAAM,YAAwE,EAAC;AAC/E,EAAA,MAAM,eAAe,sBAAA,EAAuB;AAC5C,EAAA,IAAI,CAACC,UAAAA,CAAW,YAAY,CAAA,EAAG,OAAO,SAAA;AAEtC,EAAA,MAAM,EAAE,WAAA,EAAAK,YAAAA,EAAY,GAAI,UAAQ,IAAS,CAAA;AACzC,EAAA,KAAA,MAAW,SAASA,YAAAA,CAAY,YAAA,EAAc,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA,EAAG;AACtE,IAAA,IAAI,CAAC,KAAA,CAAM,WAAA,EAAY,EAAG;AAC1B,IAAA,MAAM,MAAA,GAASN,IAAAA,CAAK,YAAA,EAAc,KAAA,CAAM,MAAM,gBAAgB,CAAA;AAC9D,IAAA,IAAI,CAACC,UAAAA,CAAW,MAAM,CAAA,EAAG;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAMI,YAAAA,CAAa,MAAA,EAAQ,OAAO,CAAA;AACxC,MAAA,MAAM,QAAA,GAAW,MAAM,GAAG,CAAA;AAC1B,MAAA,SAAA,CAAU,IAAA,CAAK;AAAA,QACb,IAAA,EAAM,QAAA,CAAS,IAAA,IAAQ,KAAA,CAAM,IAAA;AAAA,QAC7B,WAAA,EAAa,SAAS,WAAA,IAAe,EAAA;AAAA,QACrC,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,OAAO,SAAA;AACT;AA8BA,eAAsB,kBAAkB,IAAA,EAAgD;AACtF,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,KAAQ,MAAM;AAAA,EAAC,CAAA,CAAA;AAChC,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAC9B,EAAA,MAAM,MAAA,GAAyB;AAAA,IAC7B,IAAA,EAAM,IAAA;AAAA,IACN,SAAS,EAAC;AAAA,IACV,WAAW,EAAC;AAAA,IACZ,UAAU;AAAC,GACb;AAGA,EAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,IAAA,CAAK,QAAQ,CAAA;AACtD,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AAC3D,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,EAAE,QAAA,EAAU,GAAA,EAAK,WAAA,EAAY,GAAI,aAAa,YAAY,CAAA;AAChE,EAAA,GAAA,CAAI,CAAA,qCAAA,EAAwC,QAAA,CAAS,IAAI,CAAA,CAAE,CAAA;AAK3D,EAAA,GAAA,CAAI,wBAAwB,CAAA;AAC5B,EAAA,MAAM,eAAgB,IAAA,CAAK,YAAA,IACzB,QAAA,CAAS,SAAA,GAAY,gBAAgB,CAAA,IACrC,aAAA;AACF,EAAA,MAAM,WAAA,GAAc,cAAA;AAAA,IAClB,IAAA;AAAA,IACA,SAAS,WAAW,CAAA;AAAA,IACpB,QAAA,CAAS,QAAA;AAAA,IACT,YAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,GAAG,WAAW,CAAA;AAGlC,EAAA,MAAM,mBAAmB,QAAA,CAAS,UAAA;AAClC,EAAA,IAAI,kBAAkB,MAAA,EAAQ;AAC5B,IAAA,GAAA,CAAI,8BAA8B,CAAA;AAClC,IAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,IAAA,EAAM,gBAAA,EAAkB,GAAG,CAAA;AACnE,IAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,GAAG,UAAU,CAAA;AAAA,EACnC;AAGA,EAAA,GAAA,CAAI,iCAAiC,CAAA;AACrC,EAAA,MAAM,YAAY,sBAAA,CAAuB,IAAA,EAAM,QAAA,CAAS,SAAA,EAAW,KAAK,YAAY,CAAA;AACpF,EAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,GAAG,SAAS,CAAA;AAGhC,EAAA,GAAA,CAAI,4BAA4B,CAAA;AAEhC,EAAA,MAAM,iBAAiB,QAAA,CAAS,QAAA;AAChC,EAAA,IAAI,gBAAgB,QAAA,IAAY,CAAC,eAAe,QAAA,CAAS,UAAA,CAAW,GAAG,CAAA,EAAG;AACxE,IAAA,cAAA,CAAe,QAAA,GAAWL,IAAAA,CAAK,WAAA,EAAa,cAAA,CAAe,QAAQ,CAAA;AAAA,EACrE;AACA,EAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,IAAA,EAAM,cAAA,EAAgB,WAAW,CAAA;AACxE,EAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,GAAG,WAAW,CAAA;AAGlC,EAAA,GAAA,CAAI,0BAA0B,CAAA;AAC9B,EAAA,MAAM,YAAA,GAAe,KAAK,YAAA,GAAe,EAAE,SAAS,IAAA,CAAK,YAAA,KAAiB,QAAA,CAAS,MAAA;AACnF,EAAA,MAAM,QAAA,GAAW,qBAAA,CAAsB,IAAI,CAAA,EAAG,MAAA;AAC9C,EAAA,MAAM,eAAe,MAAM,gBAAA;AAAA,IACzB,IAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,GAAG,YAAA,CAAa,OAAO,CAAA;AAC3C,EAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,GAAG,YAAA,CAAa,QAAQ,CAAA;AAG7C,EAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,IAAA,GAAA,CAAI,0BAA0B,CAAA;AAC9B,IAAA,MAAM,eAAe,MAAM,gBAAA,CAAiB,IAAA,EAAM,QAAA,CAAS,QAAQ,GAAG,CAAA;AACtE,IAAA,MAAA,CAAO,SAAA,CAAU,IAAA,CAAK,GAAG,YAAA,CAAa,SAAS,CAAA;AAC/C,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,GAAG,YAAA,CAAa,QAAQ,CAAA;AAAA,EAC/C;AAGA,EAAA,GAAA,CAAI,yBAAyB,CAAA;AAC7B,EAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,IAAA,EAAM,QAAA,CAAS,OAAO,GAAG,CAAA;AAC7D,EAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,GAAG,WAAA,CAAY,OAAO,CAAA;AAC1C,EAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,GAAG,WAAA,CAAY,QAAQ,CAAA;AAG5C,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,IAAU,QAAA,CAAS,WAAW,OAAA,IAAW,KAAA;AACnE,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,GAAA,CAAI,6BAA6B,CAAA;AACjC,IAAA,MAAM,gBAAA,GAAmB,mBAAA;AAAA,MACvB,IAAA;AAAA,MACA,EAAE,GAAG,QAAA,CAAS,SAAA,EAAW,SAAS,IAAA,EAAK;AAAA,MACvC,IAAA,CAAK;AAAA,KACP;AACA,IAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,GAAG,gBAAgB,CAAA;AAAA,EACzC;AAEA,EAAA,GAAA,CAAI,CAAA,sBAAA,EAAyB,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,mBAAA,CAAqB,CAAA;AACvE,EAAA,OAAO,MAAA;AACT","file":"chunk-OQIBHB4F.js","sourcesContent":["/**\n * Base layer — creates .skaile/ directory, settings.json, and skaile.yaml.\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { basename, join } from \"node:path\";\nimport { stringify } from \"yaml\";\nimport type { AiResourcesLayerConfig, ScaffoldOptions } from \"../types.js\";\n\n/**\n * Apply the base scaffold layer — creates `.skaile/`, `settings.json`, and `skaile.yaml`.\n *\n * @param dest - Absolute path to the workspace root to create.\n * @param aiResources - AI resource config from the template manifest (sources, requires).\n * @param templateSettings - Template-default settings merged under user overrides.\n * @param framework - Default agent framework written to `skaile.yaml` `agent-config`.\n * @param opts - Full scaffold options (provides name, settings, resources, requires overrides).\n * @returns Array of created file/directory paths relative to `dest`.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport function applyBaseLayer(\n dest: string,\n aiResources: AiResourcesLayerConfig | undefined,\n templateSettings: Record<string, unknown> | undefined,\n framework: string,\n opts: ScaffoldOptions,\n): string[] {\n const created: string[] = [];\n\n // Create workspace root\n if (!existsSync(dest)) {\n mkdirSync(dest, { recursive: true });\n created.push(\".\");\n }\n\n // Create .skaile/ directory\n const skaileDir = join(dest, \".skaile\");\n if (!existsSync(skaileDir)) {\n mkdirSync(skaileDir, { recursive: true });\n created.push(\".skaile/\");\n }\n\n // Create .skaile/sessions/ directory\n const sessionsDir = join(skaileDir, \"sessions\");\n if (!existsSync(sessionsDir)) {\n mkdirSync(sessionsDir, { recursive: true });\n created.push(\".skaile/sessions/\");\n }\n\n // Write settings.json (merge template defaults + user overrides)\n const settingsPath = join(skaileDir, \"settings.json\");\n if (!existsSync(settingsPath)) {\n const settings = {\n ...(templateSettings ?? {}),\n ...(opts.settings ?? {}),\n };\n writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\\n`);\n created.push(\".skaile/settings.json\");\n }\n\n // Write skaile.yaml (unified workspace config)\n const sources = opts.resources ?? aiResources?.resources ?? [];\n const requires = opts.requires ?? aiResources?.requires ?? [];\n\n const wsConfigPath = join(dest, \"skaile.yaml\");\n if (!existsSync(wsConfigPath)) {\n const projectName = opts.name ?? basename(dest);\n\n // Build ai_resources as array with dependencies on first source\n const aiResourceEntries = sources.map((r, i) => {\n const entry: Record<string, unknown> = { name: r.name, path: r.path };\n if (r.branch) entry.branch = r.branch;\n if (i === 0 && requires.length > 0) entry.dependencies = requires;\n return entry;\n });\n\n const wsConfig: Record<string, unknown> = {\n name: projectName,\n description: `${projectName} AI skill dependencies`,\n \"agent-config\": {\n default: {\n agent: framework,\n provider: \"anthropic\",\n model: \"claude-sonnet-4-6\",\n driver: \"claude-sdk\",\n max_turns: 200,\n },\n },\n ai_resources: aiResourceEntries,\n };\n writeFileSync(wsConfigPath, stringify(wsConfig));\n created.push(\"skaile.yaml\");\n }\n\n return created;\n}\n","/**\n * Container layer — generates Dockerfile and docker-compose.yml for\n * containerized agent workspaces.\n */\n\nimport { existsSync, writeFileSync } from \"node:fs\";\nimport { basename, join } from \"node:path\";\nimport type { ContainerLayerConfig } from \"../types.js\";\n\n/**\n * Apply the container scaffold layer — generates `Dockerfile`, `docker-compose.yml`, and `.dockerignore`.\n *\n * @param dest - Absolute path to the workspace root.\n * @param config - Container layer configuration from the template manifest or `ScaffoldOptions.docker`.\n * @param projectName - Project name used as the docker-compose service name.\n * @returns Array of created file paths relative to `dest`.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport function applyContainerLayer(\n dest: string,\n config: ContainerLayerConfig | undefined,\n projectName?: string,\n): string[] {\n const created: string[] = [];\n if (!config?.enabled) return created;\n\n const name = projectName ?? basename(dest);\n const baseImage = config.baseImage ?? \"node:22-alpine\";\n const wsPort = config.wsPort ?? 3100;\n\n // Generate Dockerfile\n const dockerfilePath = join(dest, \"Dockerfile\");\n if (!existsSync(dockerfilePath)) {\n const dockerfile = generateDockerfile(baseImage, config, wsPort);\n writeFileSync(dockerfilePath, dockerfile);\n created.push(\"Dockerfile\");\n }\n\n // Generate docker-compose.yml\n const composePath = join(dest, \"docker-compose.yml\");\n if (!existsSync(composePath)) {\n const compose = generateCompose(name, config, wsPort);\n writeFileSync(composePath, compose);\n created.push(\"docker-compose.yml\");\n }\n\n // Generate .dockerignore\n const dockerignorePath = join(dest, \".dockerignore\");\n if (!existsSync(dockerignorePath)) {\n writeFileSync(\n dockerignorePath,\n [\"node_modules\", \".git\", \".skaile/sessions\", \"*.log\", \".env.local\", \"\"].join(\"\\n\"),\n );\n created.push(\".dockerignore\");\n }\n\n return created;\n}\n\nfunction generateDockerfile(\n baseImage: string,\n config: ContainerLayerConfig,\n wsPort: number,\n): string {\n const lines: string[] = [`FROM ${baseImage}`, \"\", \"# System packages\"];\n\n // System packages\n const packages = [\"git\", \"curl\", ...(config.packages ?? [])];\n if (baseImage.includes(\"alpine\")) {\n lines.push(`RUN apk add --no-cache ${packages.join(\" \")}`);\n } else {\n lines.push(\n `RUN apt-get update && apt-get install -y ${packages.join(\" \")} && rm -rf /var/lib/apt/lists/*`,\n );\n }\n lines.push(\"\");\n\n // Agent CLIs\n if (config.agents && config.agents.length > 0) {\n lines.push(\"# Agent CLIs\");\n for (const agent of config.agents) {\n lines.push(`RUN npm install -g ${agent}`);\n }\n lines.push(\"\");\n }\n\n // Working directory\n lines.push(\"WORKDIR /workspace\");\n lines.push(\"\");\n\n // Copy workspace files\n lines.push(\"# Copy workspace configuration\");\n lines.push(\"COPY skaile.yaml ./\");\n lines.push(\"COPY .skaile/ ./.skaile/\");\n lines.push(\"\");\n\n // Ports\n const ports = [String(wsPort), ...(config.ports ?? [])];\n for (const port of ports) {\n lines.push(`EXPOSE ${port}`);\n }\n lines.push(\"\");\n\n // Environment\n if (config.env && config.env.length > 0) {\n lines.push(\"# Environment\");\n for (const envVar of config.env) {\n lines.push(`ENV ${envVar}`);\n }\n lines.push(\"\");\n }\n\n lines.push(\"# Default entrypoint — override in compose or at runtime\");\n lines.push('ENTRYPOINT [\"sh\", \"-c\"]');\n lines.push('CMD [\"echo Agent workspace ready && exec sh\"]');\n lines.push(\"\");\n\n return lines.join(\"\\n\");\n}\n\nfunction generateCompose(name: string, config: ContainerLayerConfig, wsPort: number): string {\n const serviceName = name.replace(/[^a-z0-9-]/gi, \"-\").toLowerCase();\n const ports = [`${wsPort}:${wsPort}`, ...(config.ports ?? []).map((p) => `${p}:${p}`)];\n\n const lines: string[] = [\n \"services:\",\n ` ${serviceName}:`,\n \" build: .\",\n ` container_name: ${serviceName}`,\n ];\n\n // Ports\n if (ports.length > 0) {\n lines.push(\" ports:\");\n for (const port of ports) {\n lines.push(` - \"${port}\"`);\n }\n }\n\n // Volumes / mounts\n if (config.mounts && config.mounts.length > 0) {\n lines.push(\" volumes:\");\n for (const mount of config.mounts) {\n if (mount.type === \"bind\") {\n lines.push(` - ${mount.source}:${mount.target}`);\n } else {\n lines.push(` - ${mount.source}:${mount.target}`);\n }\n }\n }\n\n // Environment\n if (config.env && config.env.length > 0) {\n lines.push(\" environment:\");\n for (const envVar of config.env) {\n if (envVar.includes(\"=\")) {\n lines.push(` - ${envVar}`);\n } else {\n lines.push(` - ${envVar}`);\n }\n }\n }\n\n lines.push(\" restart: unless-stopped\");\n lines.push(\"\");\n\n return lines.join(\"\\n\");\n}\n","/**\n * Driver target layer — creates agent-specific directories (.claude/, .omp/, etc.)\n * based on the DRIVER_TARGETS configuration.\n */\n\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { DRIVER_TARGETS } from \"@skaile/workspaces/core\";\nimport type { DriverTarget } from \"@skaile/workspaces/core\";\nimport type { DriverTargetLayerConfig } from \"../types.js\";\n\n/**\n * Apply the driver-target scaffold layer — creates framework-specific directories (`.claude/`, `.omp/`, etc.).\n *\n * @param dest - Absolute path to the workspace root.\n * @param config - Driver target layer configuration from the template manifest.\n * @param driverTargetOverride - Overrides `config[\"default-target\"]` when provided.\n * @returns Array of created directory paths relative to `dest`.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport function applyDriverTargetLayer(\n dest: string,\n config: DriverTargetLayerConfig | undefined,\n driverTargetOverride?: DriverTarget,\n): string[] {\n const created: string[] = [];\n const driverTarget = (driverTargetOverride ??\n config?.[\"default-target\"] ??\n \"claude-code\") as DriverTarget;\n\n const targetMap = DRIVER_TARGETS[driverTarget];\n if (!targetMap) return created;\n\n // Create all local deploy target directories\n const dirsToCreate = new Set<string>();\n for (const dir of Object.values(targetMap.local)) {\n dirsToCreate.add(dir);\n }\n\n // Add extras from template\n if (config?.extras) {\n for (const extra of config.extras) {\n dirsToCreate.add(extra);\n }\n }\n\n for (const dir of dirsToCreate) {\n const fullPath = join(dest, dir);\n if (!existsSync(fullPath)) {\n mkdirSync(fullPath, { recursive: true });\n created.push(`${dir}/`);\n }\n }\n\n return created;\n}\n","/**\n * Hooks layer — git init, .gitignore generation, and post-scaffold setup scripts.\n */\n\nimport { execSync } from \"node:child_process\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { HooksLayerConfig } from \"../types.js\";\n\n/** Result of the hooks scaffold layer. */\nexport interface HooksResult {\n /** Paths to files and directories created by this layer, relative to the workspace root. */\n created: string[];\n /** Non-fatal warnings collected during hook execution (e.g. failed setup scripts). */\n warnings: string[];\n}\n\n/**\n * Apply the hooks scaffold layer — runs `git init`, appends `.gitignore` entries, and executes setup scripts.\n *\n * @param dest - Absolute path to the workspace root.\n * @param config - Hooks layer configuration from the template manifest.\n * @param log - Optional logger callback for progress messages.\n * @returns {@link HooksResult} with created file paths and warnings.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport function applyHooksLayer(\n dest: string,\n config: HooksLayerConfig | undefined,\n log?: (msg: string) => void,\n): HooksResult {\n const result: HooksResult = { created: [], warnings: [] };\n if (!config) return result;\n\n // Git init\n if (config.gitInit) {\n const gitDir = join(dest, \".git\");\n if (!existsSync(gitDir)) {\n try {\n execSync(\"git init\", { cwd: dest, stdio: \"pipe\" });\n result.created.push(\".git/\");\n log?.(\"Initialized git repository\");\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n result.warnings.push(`git init failed: ${msg}`);\n }\n }\n }\n\n // .gitignore\n if (config.gitignore && config.gitignore.length > 0) {\n const gitignorePath = join(dest, \".gitignore\");\n let existing = \"\";\n if (existsSync(gitignorePath)) {\n existing = readFileSync(gitignorePath, \"utf-8\");\n }\n\n const existingLines = new Set(existing.split(\"\\n\").map((l) => l.trim()));\n const newEntries = config.gitignore.filter((e) => !existingLines.has(e));\n\n if (newEntries.length > 0) {\n const append = `${(existing && !existing.endsWith(\"\\n\") ? \"\\n\" : \"\") + newEntries.join(\"\\n\")}\\n`;\n writeFileSync(gitignorePath, existing + append);\n if (!existingLines.size) {\n result.created.push(\".gitignore\");\n }\n }\n }\n\n // Setup scripts\n if (config.setupScripts) {\n for (const script of config.setupScripts) {\n try {\n log?.(`Running setup script: ${script.name}`);\n const cwd = script.cwd ? join(dest, script.cwd) : dest;\n if (!existsSync(cwd)) {\n mkdirSync(cwd, { recursive: true });\n }\n execSync(script.run, {\n cwd,\n stdio: \"pipe\",\n timeout: 60_000,\n env: { ...process.env, WORKSPACE_DIR: dest },\n });\n log?.(`Setup script \"${script.name}\" completed`);\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n result.warnings.push(`Setup script \"${script.name}\" failed: ${msg}`);\n }\n }\n }\n\n return result;\n}\n","/**\n * Connectors layer — writes connector declarations to skaile.yaml\n * and creates mount directories for mountable connectors.\n *\n * Actual sync/connect happens at runtime (in the runner), not at scaffold time.\n */\n\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { WorkspaceYamlEditor } from \"@skaile/workspaces/core\";\nimport type { ConnectorEntry } from \"../types.js\";\n\n/**\n * Apply the connectors scaffold layer — writes connector declarations to `skaile.yaml` and creates mount directories.\n *\n * @param dest - Absolute path to the workspace root.\n * @param connectors - Connector entries from the template manifest.\n * @param log - Optional logger callback for progress messages.\n * @returns Array of created mount directory paths relative to `dest`.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport function applyConnectorsLayer(\n dest: string,\n connectors: ConnectorEntry[] | undefined | null,\n log?: (msg: string) => void,\n): string[] {\n const created: string[] = [];\n const entries: ConnectorEntry[] = Array.isArray(connectors) ? connectors : [];\n if (!entries.length) return created;\n\n // Write connectors to skaile.yaml\n const yamlPath = join(dest, \"skaile.yaml\");\n if (existsSync(yamlPath)) {\n const editor = WorkspaceYamlEditor.load(yamlPath);\n for (const r of entries) {\n editor.setConnector({\n id: r.id,\n driver: r.driver,\n access: r.access ?? \"read-only\",\n auth: r.auth,\n options: r.options,\n });\n }\n editor.save();\n log?.(`Wrote ${entries.length} connector(s) to skaile.yaml`);\n } else {\n log?.(\"Skipping connector write: skaile.yaml not found (base layer should create it first)\");\n }\n\n // Create mount directories for connectors that have autoMount or mountPath\n for (const connector of entries) {\n if (connector.autoMount === false) continue;\n const mountPath = connector.mountPath ?? `.connectors/${connector.id}`;\n const absMount = join(dest, mountPath);\n if (!existsSync(absMount)) {\n mkdirSync(absMount, { recursive: true });\n created.push(`${mountPath}/`);\n log?.(`Created mount dir: ${mountPath}`);\n }\n }\n\n return created;\n}\n","/**\n * Skills layer — installs AI resources into the workspace using the asset manager.\n *\n * Now that this layer lives inside @skaile/asset-manager, the AssetManager class\n * is loaded via a lazy import from the parent package index (no more dynamic\n * external dependency hack).\n *\n * When a scopeDir is specified, the asset manager operates against that directory\n * instead of the default project directory.\n */\n\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { SkillsLayerConfig } from \"../types.js\";\n\n/** Result of the skills scaffold layer. */\nexport interface SkillsInstallResult {\n /** Asset refs (`kind:name`) installed by `skaile install` during scaffolding. */\n installed: string[];\n /** Non-fatal warnings (e.g. `skaile.yaml` not found, install failure). */\n warnings: string[];\n}\n\n/**\n * Lazy-load AssetManager from the parent package index.\n * Returns null if not available (should not happen in normal operation).\n */\nasync function loadAssetManager(): Promise<any | null> {\n try {\n const mod = await import(\"../../index.js\");\n return mod.AssetManager ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Apply the skills scaffold layer — runs `skaile install` to deploy all declared asset dependencies.\n *\n * Only runs when `config.autoInstall` is `true`. Skips silently when `skaile.yaml` is absent.\n *\n * @param dest - Absolute path to the workspace root.\n * @param config - Skills layer configuration from the template manifest.\n * @param log - Optional logger callback for progress messages.\n * @returns {@link SkillsInstallResult} with installed refs and warnings.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport async function applySkillsLayer(\n dest: string,\n config: SkillsLayerConfig | undefined,\n log?: (msg: string) => void,\n): Promise<SkillsInstallResult> {\n const result: SkillsInstallResult = { installed: [], warnings: [] };\n if (!config?.autoInstall) return result;\n\n const wsConfigPath = join(dest, \"skaile.yaml\");\n if (!existsSync(wsConfigPath)) {\n result.warnings.push(\"Skipping skill install: skaile.yaml not found\");\n return result;\n }\n\n const AssetManager = await loadAssetManager();\n if (!AssetManager) {\n result.warnings.push(\n \"Skipping skill install: AssetManager could not be loaded. Run `skaile install` manually.\",\n );\n return result;\n }\n\n try {\n log?.(\"Installing AI resources...\");\n\n const am = new AssetManager({ projectDir: dest });\n const installResult = await am.install();\n\n if (Array.isArray(installResult)) {\n result.installed = installResult;\n } else if (installResult?.deployed) {\n result.installed = installResult.deployed;\n }\n\n log?.(`Installed ${result.installed.length} skill(s)`);\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n result.warnings.push(`Skill install failed: ${msg}`);\n }\n\n return result;\n}\n","/**\n * Template layer — applies agent definition files (SOUL.md, RULES.md, knowledge/)\n * and any additional template files.\n */\n\nimport { copyFileSync, existsSync, mkdirSync, readdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative } from \"node:path\";\nimport type { TemplateLayerConfig } from \"../types.js\";\n\n/** Recursively copy a directory, skipping files that already exist at dest. */\nfunction copyDirSkipExisting(src: string, dest: string, created: string[], baseDest: string): void {\n if (!existsSync(dest)) mkdirSync(dest, { recursive: true });\n for (const entry of readdirSync(src, { withFileTypes: true })) {\n const srcPath = join(src, entry.name);\n const destPath = join(dest, entry.name);\n if (entry.isDirectory()) {\n copyDirSkipExisting(srcPath, destPath, created, baseDest);\n } else if (!existsSync(destPath)) {\n mkdirSync(dirname(destPath), { recursive: true });\n copyFileSync(srcPath, destPath);\n created.push(relative(baseDest, destPath));\n }\n }\n}\n\n/**\n * Apply the template overlay layer — copies agent definition files (`SOUL.md`, `RULES.md`, `knowledge/`) and additional static template files into the workspace.\n *\n * @param dest - Absolute path to the workspace root.\n * @param config - Template layer configuration from the template manifest.\n * @param templateDir - Absolute path to the template directory (used to resolve relative `files[].src` paths).\n * @returns Array of created file paths relative to `dest`.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport function applyTemplateLayer(\n dest: string,\n config: TemplateLayerConfig | undefined,\n templateDir?: string,\n): string[] {\n const created: string[] = [];\n if (!config) return created;\n\n // Apply agent definition from agentDir\n if (config.agentDir) {\n const agentDir = config.agentDir;\n if (existsSync(agentDir)) {\n // Copy SOUL.md, RULES.md, DUTIES.md\n for (const file of [\"SOUL.md\", \"RULES.md\", \"DUTIES.md\"]) {\n const src = join(agentDir, file);\n const destFile = join(dest, \".skaile\", \"agent\", file);\n if (existsSync(src) && !existsSync(destFile)) {\n mkdirSync(dirname(destFile), { recursive: true });\n copyFileSync(src, destFile);\n created.push(relative(dest, destFile));\n }\n }\n\n // Copy knowledge/ directory\n const knowledgeSrc = join(agentDir, \"knowledge\");\n if (existsSync(knowledgeSrc)) {\n const knowledgeDest = join(dest, \".skaile\", \"agent\", \"knowledge\");\n copyDirSkipExisting(knowledgeSrc, knowledgeDest, created, dest);\n }\n\n // Copy skills/ directory from agent def\n const skillsSrc = join(agentDir, \"skills\");\n if (existsSync(skillsSrc)) {\n const skillsDest = join(dest, \".skaile\", \"agent\", \"skills\");\n copyDirSkipExisting(skillsSrc, skillsDest, created, dest);\n }\n }\n }\n\n // Write inline soul/rules content\n if (config.soul) {\n const soulPath = join(dest, \".skaile\", \"agent\", \"SOUL.md\");\n if (!existsSync(soulPath)) {\n mkdirSync(dirname(soulPath), { recursive: true });\n writeFileSync(soulPath, config.soul);\n created.push(\".skaile/agent/SOUL.md\");\n }\n }\n if (config.rules) {\n const rulesPath = join(dest, \".skaile\", \"agent\", \"RULES.md\");\n if (!existsSync(rulesPath)) {\n mkdirSync(dirname(rulesPath), { recursive: true });\n writeFileSync(rulesPath, config.rules);\n created.push(\".skaile/agent/RULES.md\");\n }\n }\n\n // Copy additional template files\n if (config.files && templateDir) {\n for (const file of config.files) {\n const srcPath = join(templateDir, file.src);\n const destPath = join(dest, file.dest);\n if (!existsSync(srcPath)) continue;\n if (existsSync(destPath)) continue;\n\n if (statSync(srcPath).isDirectory()) {\n copyDirSkipExisting(srcPath, destPath, created, dest);\n } else {\n mkdirSync(dirname(destPath), { recursive: true });\n copyFileSync(srcPath, destPath);\n created.push(file.dest);\n }\n }\n }\n\n return created;\n}\n","/**\n * Main scaffolder — loads a workspace template (workspace.yaml) and applies\n * all configured layers in order: base → framework → template → skills → hooks → container.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { parse } from \"yaml\";\nimport { applyAgentsLayer } from \"./layers/agents.js\";\nimport { applyBaseLayer } from \"./layers/base.js\";\nimport { applyContainerLayer } from \"./layers/container.js\";\nimport { applyDriverTargetLayer } from \"./layers/driver-target.js\";\nimport { applyHooksLayer } from \"./layers/hooks.js\";\nimport { applyConnectorsLayer } from \"./layers/connectors.js\";\nimport { applySkillsLayer } from \"./layers/skills.js\";\nimport { applyTemplateLayer } from \"./layers/template.js\";\nimport { loadSkWorkspaceConfig } from \"@skaile/workspaces/core\";\nimport type { DriverTarget } from \"@skaile/workspaces/core\";\nimport type { ScaffoldOptions, ScaffoldResult, TemplateManifest } from \"./types.js\";\n\n// ── Built-in template directory ────────────────────────────────────────────\n\nlet _builtinTemplatesDir: string | null = null;\n\n/**\n * Get the built-in templates directory. Uses import.meta.url by default,\n * but can be overridden via setTemplatesDir() for bundled environments\n * (e.g. Nitro) where import.meta.url resolves to the bundle output.\n */\nfunction getBuiltinTemplatesDir(): string {\n if (_builtinTemplatesDir) return _builtinTemplatesDir;\n return join(dirname(new URL(import.meta.url).pathname), \"..\", \"..\", \"templates\");\n}\n\n/**\n * Override the built-in templates directory. Call this from apps that bundle\n * skaile-agent-workspace (e.g. Nitro/Nuxt) where `import.meta.url` doesn't\n * resolve to the source package.\n *\n * @param dir - Absolute path to the custom templates directory.\n * @docLink packages/asset-manager/concepts#scaffolder\n */\nexport function setTemplatesDir(dir: string): void {\n _builtinTemplatesDir = resolve(dir);\n}\n\n// ── Template loading ───────────────────────────────────────────────────────\n\n/**\n * Resolve a template name or path to an absolute path to `workspace.yaml`.\n *\n * Lookup order:\n * 1. Absolute or relative path to a `workspace.yaml` file.\n * 2. Directory containing `workspace.yaml`.\n * 3. Built-in template name matching `templates/<name>/workspace.yaml`.\n *\n * @param template - Template name (e.g. `\"minimal\"`) or path to a `workspace.yaml` / directory.\n * @returns Absolute path to `workspace.yaml`, or `null` when the template cannot be found.\n * @docLink packages/asset-manager/concepts#scaffolder\n */\nexport function resolveTemplatePath(template: string): string | null {\n // Direct path to a file\n if (template.endsWith(\".yaml\") || template.endsWith(\".yml\")) {\n const abs = resolve(template);\n return existsSync(abs) ? abs : null;\n }\n\n // Directory containing workspace.yaml\n const dirPath = resolve(template);\n const inDir = join(dirPath, \"workspace.yaml\");\n if (existsSync(inDir)) return inDir;\n\n // Built-in template name\n const builtin = join(getBuiltinTemplatesDir(), template, \"workspace.yaml\");\n if (existsSync(builtin)) return builtin;\n\n return null;\n}\n\n/**\n * Load and merge a template manifest, following `extends` chains.\n *\n * @param templatePath - Absolute path to a `workspace.yaml` template file.\n * @returns Merged `TemplateManifest` with parent sections folded in, and the template directory.\n * @docLink packages/asset-manager/concepts#scaffolder\n */\nexport function loadTemplate(templatePath: string): { manifest: TemplateManifest; dir: string } {\n const raw = readFileSync(templatePath, \"utf-8\");\n const manifest = parse(raw) as TemplateManifest;\n const dir = dirname(templatePath);\n\n if (manifest.extends) {\n const parentPath =\n resolveTemplatePath(manifest.extends) ?? resolveTemplatePath(join(dir, manifest.extends));\n if (parentPath) {\n const parent = loadTemplate(parentPath);\n // Shallow merge: child sections override parent sections per-key\n const { extends: _ext, name, description, version, ...childSections } = manifest;\n Object.assign(manifest, {\n ...parent.manifest,\n name,\n description,\n version,\n extends: _ext,\n ...childSections,\n });\n }\n }\n\n return { manifest, dir };\n}\n\n/**\n * List all available built-in templates.\n *\n * @returns Array of objects with `name`, `description`, and `path` for each available template.\n * @docLink packages/asset-manager/concepts#scaffolder\n */\nexport function listTemplates(): Array<{ name: string; description: string; path: string }> {\n const templates: Array<{ name: string; description: string; path: string }> = [];\n const templatesDir = getBuiltinTemplatesDir();\n if (!existsSync(templatesDir)) return templates;\n\n const { readdirSync } = require(\"node:fs\");\n for (const entry of readdirSync(templatesDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const wsPath = join(templatesDir, entry.name, \"workspace.yaml\");\n if (!existsSync(wsPath)) continue;\n try {\n const raw = readFileSync(wsPath, \"utf-8\");\n const manifest = parse(raw) as TemplateManifest;\n templates.push({\n name: manifest.name ?? entry.name,\n description: manifest.description ?? \"\",\n path: wsPath,\n });\n } catch {\n // Skip unparseable templates\n }\n }\n\n return templates;\n}\n\n// ── Main scaffold function ────────────────────────────────────────────────\n\n/**\n * Scaffold a new Skaile workspace from a template, applying layers in order.\n *\n * Layer application order:\n * 1. **Base** — creates `.skaile/`, `settings.json`, and `skaile.yaml`\n * 2. **Connectors** — writes connector declarations to `skaile.yaml`\n * 3. **Driver target** — creates framework-specific directories (`.claude/`, `.omp/`, etc.)\n * 4. **Template** — copies agent definition files and static template overlays\n * 5. **Agents** — renders and installs GitAgent packages\n * 6. **Skills** — runs `skaile install` (unless `opts.skipInstall` is `true`)\n * 7. **Hooks** — runs `git init`, writes `.gitignore`, executes setup scripts\n * 8. **Container** — generates `Dockerfile` and `docker-compose.yml` (when enabled)\n *\n * @param opts - Scaffold options including destination, template, and layer overrides.\n * @returns {@link ScaffoldResult} with created paths, installed skills, and warnings.\n * @example\n * ```ts\n * const result = await scaffoldWorkspace({\n * dest: \"./my-workspace\",\n * template: \"minimal\",\n * driverTarget: \"claude-code\",\n * });\n * console.log(`Created ${result.created.length} files`);\n * ```\n * @docLink packages/asset-manager/concepts#scaffolder\n */\nexport async function scaffoldWorkspace(opts: ScaffoldOptions): Promise<ScaffoldResult> {\n const log = opts.log ?? (() => {});\n const dest = resolve(opts.dest);\n const result: ScaffoldResult = {\n path: dest,\n created: [],\n installed: [],\n warnings: [],\n };\n\n // 1. Load template\n const templatePath = resolveTemplatePath(opts.template);\n if (!templatePath) {\n result.warnings.push(`Template not found: ${opts.template}`);\n return result;\n }\n\n const { manifest, dir: templateDir } = loadTemplate(templatePath);\n log(`Scaffolding workspace from template: ${manifest.name}`);\n\n // 2. Apply layers in order\n\n // Base layer: .skaile/, settings.json, skaile.yaml\n log(\"Applying base layer...\");\n const driverTarget = (opts.driverTarget ??\n manifest.framework?.[\"default-target\"] ??\n \"claude-code\") as DriverTarget;\n const baseCreated = applyBaseLayer(\n dest,\n manifest[\"ai-assets\"],\n manifest.settings,\n driverTarget,\n opts,\n );\n result.created.push(...baseCreated);\n\n // Connectors layer: connector declarations → skaile.yaml + mount directories\n const connectorEntries = manifest.connectors;\n if (connectorEntries?.length) {\n log(\"Applying connectors layer...\");\n const resCreated = applyConnectorsLayer(dest, connectorEntries, log);\n result.created.push(...resCreated);\n }\n\n // Driver target layer: agent-specific directories\n log(\"Applying driver target layer...\");\n const fwCreated = applyDriverTargetLayer(dest, manifest.framework, opts.driverTarget);\n result.created.push(...fwCreated);\n\n // Template layer: agent definition, template files\n log(\"Applying template layer...\");\n // Resolve agentDir relative to template directory\n const templateConfig = manifest.template;\n if (templateConfig?.agentDir && !templateConfig.agentDir.startsWith(\"/\")) {\n templateConfig.agentDir = join(templateDir, templateConfig.agentDir);\n }\n const tmplCreated = applyTemplateLayer(dest, templateConfig, templateDir);\n result.created.push(...tmplCreated);\n\n // Agents layer: install GitAgent packages into framework deploy target\n log(\"Applying agents layer...\");\n const agentsConfig = opts.agentInstall ? { install: opts.agentInstall } : manifest.agents;\n const wsConfig = loadSkWorkspaceConfig(dest)?.config;\n const agentsResult = await applyAgentsLayer(\n dest,\n agentsConfig,\n driverTarget,\n templateDir,\n wsConfig,\n log,\n );\n result.created.push(...agentsResult.created);\n result.warnings.push(...agentsResult.warnings);\n\n // Skills layer: asset manager-based resource installation\n if (!opts.skipInstall) {\n log(\"Applying skills layer...\");\n const skillsResult = await applySkillsLayer(dest, manifest.skills, log);\n result.installed.push(...skillsResult.installed);\n result.warnings.push(...skillsResult.warnings);\n }\n\n // Hooks layer: git init, .gitignore, setup scripts\n log(\"Applying hooks layer...\");\n const hooksResult = applyHooksLayer(dest, manifest.hooks, log);\n result.created.push(...hooksResult.created);\n result.warnings.push(...hooksResult.warnings);\n\n // Container layer: Dockerfile, docker-compose.yml\n const enableDocker = opts.docker ?? manifest.container?.enabled ?? false;\n if (enableDocker) {\n log(\"Applying container layer...\");\n const containerCreated = applyContainerLayer(\n dest,\n { ...manifest.container, enabled: true },\n opts.name,\n );\n result.created.push(...containerCreated);\n }\n\n log(`Workspace scaffolded: ${result.created.length} files/dirs created`);\n return result;\n}\n"]}
1
+ {"version":3,"sources":["../asset-manager/src/scaffold/layers/base.ts","../asset-manager/src/scaffold/layers/container.ts","../asset-manager/src/scaffold/layers/driver-target.ts","../asset-manager/src/scaffold/layers/hooks.ts","../asset-manager/src/scaffold/layers/connectors.ts","../asset-manager/src/scaffold/layers/skills.ts","../asset-manager/src/scaffold/layers/template.ts","../asset-manager/src/scaffold/scaffolder.ts"],"names":["basename","join","existsSync","writeFileSync","mkdirSync","dirname","readFileSync","readdirSync"],"mappings":"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","file":"chunk-YHXBQLXX.js","sourcesContent":["/**\n * Base layer — creates .skaile/ directory, settings.json, and skaile.yaml.\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { basename, join } from \"node:path\";\nimport { stringify } from \"yaml\";\nimport type { AiResourcesLayerConfig, ScaffoldOptions } from \"../types.js\";\n\n/**\n * Apply the base scaffold layer — creates `.skaile/`, `settings.json`, and `skaile.yaml`.\n *\n * @param dest - Absolute path to the workspace root to create.\n * @param aiResources - AI resource config from the template manifest (sources, requires).\n * @param templateSettings - Template-default settings merged under user overrides.\n * @param framework - Default agent framework written to `skaile.yaml` `agent-config`.\n * @param opts - Full scaffold options (provides name, settings, resources, requires overrides).\n * @returns Array of created file/directory paths relative to `dest`.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport function applyBaseLayer(\n dest: string,\n aiResources: AiResourcesLayerConfig | undefined,\n templateSettings: Record<string, unknown> | undefined,\n framework: string,\n opts: ScaffoldOptions,\n): string[] {\n const created: string[] = [];\n\n // Create workspace root\n if (!existsSync(dest)) {\n mkdirSync(dest, { recursive: true });\n created.push(\".\");\n }\n\n // Create .skaile/ directory\n const skaileDir = join(dest, \".skaile\");\n if (!existsSync(skaileDir)) {\n mkdirSync(skaileDir, { recursive: true });\n created.push(\".skaile/\");\n }\n\n // Create .skaile/sessions/ directory\n const sessionsDir = join(skaileDir, \"sessions\");\n if (!existsSync(sessionsDir)) {\n mkdirSync(sessionsDir, { recursive: true });\n created.push(\".skaile/sessions/\");\n }\n\n // Write settings.json (merge template defaults + user overrides)\n const settingsPath = join(skaileDir, \"settings.json\");\n if (!existsSync(settingsPath)) {\n const settings = {\n ...(templateSettings ?? {}),\n ...(opts.settings ?? {}),\n };\n writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\\n`);\n created.push(\".skaile/settings.json\");\n }\n\n // Write skaile.yaml (unified workspace config)\n const sources = opts.resources ?? aiResources?.resources ?? [];\n const requires = opts.requires ?? aiResources?.requires ?? [];\n\n const wsConfigPath = join(dest, \"skaile.yaml\");\n if (!existsSync(wsConfigPath)) {\n const projectName = opts.name ?? basename(dest);\n\n // Build ai_resources as array with dependencies on first source\n const aiResourceEntries = sources.map((r, i) => {\n const entry: Record<string, unknown> = { name: r.name, path: r.path };\n if (r.branch) entry.branch = r.branch;\n if (i === 0 && requires.length > 0) entry.dependencies = requires;\n return entry;\n });\n\n const wsConfig: Record<string, unknown> = {\n name: projectName,\n description: `${projectName} AI skill dependencies`,\n \"agent-config\": {\n default: {\n agent: framework,\n provider: \"anthropic\",\n model: \"claude-sonnet-4-6\",\n driver: \"claude-sdk\",\n max_turns: 200,\n },\n },\n ai_resources: aiResourceEntries,\n };\n writeFileSync(wsConfigPath, stringify(wsConfig));\n created.push(\"skaile.yaml\");\n }\n\n return created;\n}\n","/**\n * Container layer — generates Dockerfile and docker-compose.yml for\n * containerized agent workspaces.\n */\n\nimport { existsSync, writeFileSync } from \"node:fs\";\nimport { basename, join } from \"node:path\";\nimport type { ContainerLayerConfig } from \"../types.js\";\n\n/**\n * Apply the container scaffold layer — generates `Dockerfile`, `docker-compose.yml`, and `.dockerignore`.\n *\n * @param dest - Absolute path to the workspace root.\n * @param config - Container layer configuration from the template manifest or `ScaffoldOptions.docker`.\n * @param projectName - Project name used as the docker-compose service name.\n * @returns Array of created file paths relative to `dest`.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport function applyContainerLayer(\n dest: string,\n config: ContainerLayerConfig | undefined,\n projectName?: string,\n): string[] {\n const created: string[] = [];\n if (!config?.enabled) return created;\n\n const name = projectName ?? basename(dest);\n const baseImage = config.baseImage ?? \"node:22-alpine\";\n const wsPort = config.wsPort ?? 3100;\n\n // Generate Dockerfile\n const dockerfilePath = join(dest, \"Dockerfile\");\n if (!existsSync(dockerfilePath)) {\n const dockerfile = generateDockerfile(baseImage, config, wsPort);\n writeFileSync(dockerfilePath, dockerfile);\n created.push(\"Dockerfile\");\n }\n\n // Generate docker-compose.yml\n const composePath = join(dest, \"docker-compose.yml\");\n if (!existsSync(composePath)) {\n const compose = generateCompose(name, config, wsPort);\n writeFileSync(composePath, compose);\n created.push(\"docker-compose.yml\");\n }\n\n // Generate .dockerignore\n const dockerignorePath = join(dest, \".dockerignore\");\n if (!existsSync(dockerignorePath)) {\n writeFileSync(\n dockerignorePath,\n [\"node_modules\", \".git\", \".skaile/sessions\", \"*.log\", \".env.local\", \"\"].join(\"\\n\"),\n );\n created.push(\".dockerignore\");\n }\n\n return created;\n}\n\nfunction generateDockerfile(\n baseImage: string,\n config: ContainerLayerConfig,\n wsPort: number,\n): string {\n const lines: string[] = [`FROM ${baseImage}`, \"\", \"# System packages\"];\n\n // System packages\n const packages = [\"git\", \"curl\", ...(config.packages ?? [])];\n if (baseImage.includes(\"alpine\")) {\n lines.push(`RUN apk add --no-cache ${packages.join(\" \")}`);\n } else {\n lines.push(\n `RUN apt-get update && apt-get install -y ${packages.join(\" \")} && rm -rf /var/lib/apt/lists/*`,\n );\n }\n lines.push(\"\");\n\n // Agent CLIs\n if (config.agents && config.agents.length > 0) {\n lines.push(\"# Agent CLIs\");\n for (const agent of config.agents) {\n lines.push(`RUN npm install -g ${agent}`);\n }\n lines.push(\"\");\n }\n\n // Working directory\n lines.push(\"WORKDIR /workspace\");\n lines.push(\"\");\n\n // Copy workspace files\n lines.push(\"# Copy workspace configuration\");\n lines.push(\"COPY skaile.yaml ./\");\n lines.push(\"COPY .skaile/ ./.skaile/\");\n lines.push(\"\");\n\n // Ports\n const ports = [String(wsPort), ...(config.ports ?? [])];\n for (const port of ports) {\n lines.push(`EXPOSE ${port}`);\n }\n lines.push(\"\");\n\n // Environment\n if (config.env && config.env.length > 0) {\n lines.push(\"# Environment\");\n for (const envVar of config.env) {\n lines.push(`ENV ${envVar}`);\n }\n lines.push(\"\");\n }\n\n lines.push(\"# Default entrypoint — override in compose or at runtime\");\n lines.push('ENTRYPOINT [\"sh\", \"-c\"]');\n lines.push('CMD [\"echo Agent workspace ready && exec sh\"]');\n lines.push(\"\");\n\n return lines.join(\"\\n\");\n}\n\nfunction generateCompose(name: string, config: ContainerLayerConfig, wsPort: number): string {\n const serviceName = name.replace(/[^a-z0-9-]/gi, \"-\").toLowerCase();\n const ports = [`${wsPort}:${wsPort}`, ...(config.ports ?? []).map((p) => `${p}:${p}`)];\n\n const lines: string[] = [\n \"services:\",\n ` ${serviceName}:`,\n \" build: .\",\n ` container_name: ${serviceName}`,\n ];\n\n // Ports\n if (ports.length > 0) {\n lines.push(\" ports:\");\n for (const port of ports) {\n lines.push(` - \"${port}\"`);\n }\n }\n\n // Volumes / mounts\n if (config.mounts && config.mounts.length > 0) {\n lines.push(\" volumes:\");\n for (const mount of config.mounts) {\n if (mount.type === \"bind\") {\n lines.push(` - ${mount.source}:${mount.target}`);\n } else {\n lines.push(` - ${mount.source}:${mount.target}`);\n }\n }\n }\n\n // Environment\n if (config.env && config.env.length > 0) {\n lines.push(\" environment:\");\n for (const envVar of config.env) {\n if (envVar.includes(\"=\")) {\n lines.push(` - ${envVar}`);\n } else {\n lines.push(` - ${envVar}`);\n }\n }\n }\n\n lines.push(\" restart: unless-stopped\");\n lines.push(\"\");\n\n return lines.join(\"\\n\");\n}\n","/**\n * Driver target layer — creates agent-specific directories (.claude/, .omp/, etc.)\n * based on the DRIVER_TARGETS configuration.\n */\n\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { DRIVER_TARGETS } from \"@skaile/workspaces/core\";\nimport type { DriverTarget } from \"@skaile/workspaces/core\";\nimport type { DriverTargetLayerConfig } from \"../types.js\";\n\n/**\n * Apply the driver-target scaffold layer — creates framework-specific directories (`.claude/`, `.omp/`, etc.).\n *\n * @param dest - Absolute path to the workspace root.\n * @param config - Driver target layer configuration from the template manifest.\n * @param driverTargetOverride - Overrides `config[\"default-target\"]` when provided.\n * @returns Array of created directory paths relative to `dest`.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport function applyDriverTargetLayer(\n dest: string,\n config: DriverTargetLayerConfig | undefined,\n driverTargetOverride?: DriverTarget,\n): string[] {\n const created: string[] = [];\n const driverTarget = (driverTargetOverride ??\n config?.[\"default-target\"] ??\n \"claude-code\") as DriverTarget;\n\n const targetMap = DRIVER_TARGETS[driverTarget];\n if (!targetMap) return created;\n\n // Create all local deploy target directories\n const dirsToCreate = new Set<string>();\n for (const dir of Object.values(targetMap.local)) {\n dirsToCreate.add(dir);\n }\n\n // Add extras from template\n if (config?.extras) {\n for (const extra of config.extras) {\n dirsToCreate.add(extra);\n }\n }\n\n for (const dir of dirsToCreate) {\n const fullPath = join(dest, dir);\n if (!existsSync(fullPath)) {\n mkdirSync(fullPath, { recursive: true });\n created.push(`${dir}/`);\n }\n }\n\n return created;\n}\n","/**\n * Hooks layer — git init, .gitignore generation, and post-scaffold setup scripts.\n */\n\nimport { execSync } from \"node:child_process\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { HooksLayerConfig } from \"../types.js\";\n\n/** Result of the hooks scaffold layer. */\nexport interface HooksResult {\n /** Paths to files and directories created by this layer, relative to the workspace root. */\n created: string[];\n /** Non-fatal warnings collected during hook execution (e.g. failed setup scripts). */\n warnings: string[];\n}\n\n/**\n * Apply the hooks scaffold layer — runs `git init`, appends `.gitignore` entries, and executes setup scripts.\n *\n * @param dest - Absolute path to the workspace root.\n * @param config - Hooks layer configuration from the template manifest.\n * @param log - Optional logger callback for progress messages.\n * @returns {@link HooksResult} with created file paths and warnings.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport function applyHooksLayer(\n dest: string,\n config: HooksLayerConfig | undefined,\n log?: (msg: string) => void,\n): HooksResult {\n const result: HooksResult = { created: [], warnings: [] };\n if (!config) return result;\n\n // Git init\n if (config.gitInit) {\n const gitDir = join(dest, \".git\");\n if (!existsSync(gitDir)) {\n try {\n execSync(\"git init\", { cwd: dest, stdio: \"pipe\" });\n result.created.push(\".git/\");\n log?.(\"Initialized git repository\");\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n result.warnings.push(`git init failed: ${msg}`);\n }\n }\n }\n\n // .gitignore\n if (config.gitignore && config.gitignore.length > 0) {\n const gitignorePath = join(dest, \".gitignore\");\n let existing = \"\";\n if (existsSync(gitignorePath)) {\n existing = readFileSync(gitignorePath, \"utf-8\");\n }\n\n const existingLines = new Set(existing.split(\"\\n\").map((l) => l.trim()));\n const newEntries = config.gitignore.filter((e) => !existingLines.has(e));\n\n if (newEntries.length > 0) {\n const append = `${(existing && !existing.endsWith(\"\\n\") ? \"\\n\" : \"\") + newEntries.join(\"\\n\")}\\n`;\n writeFileSync(gitignorePath, existing + append);\n if (!existingLines.size) {\n result.created.push(\".gitignore\");\n }\n }\n }\n\n // Setup scripts\n if (config.setupScripts) {\n for (const script of config.setupScripts) {\n try {\n log?.(`Running setup script: ${script.name}`);\n const cwd = script.cwd ? join(dest, script.cwd) : dest;\n if (!existsSync(cwd)) {\n mkdirSync(cwd, { recursive: true });\n }\n execSync(script.run, {\n cwd,\n stdio: \"pipe\",\n timeout: 60_000,\n env: { ...process.env, WORKSPACE_DIR: dest },\n });\n log?.(`Setup script \"${script.name}\" completed`);\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n result.warnings.push(`Setup script \"${script.name}\" failed: ${msg}`);\n }\n }\n }\n\n return result;\n}\n","/**\n * Connectors layer — writes connector declarations to skaile.yaml\n * and creates mount directories for mountable connectors.\n *\n * Actual sync/connect happens at runtime (in the runner), not at scaffold time.\n */\n\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { WorkspaceYamlEditor } from \"@skaile/workspaces/core\";\nimport type { ConnectorEntry } from \"../types.js\";\n\n/**\n * Apply the connectors scaffold layer — writes connector declarations to `skaile.yaml` and creates mount directories.\n *\n * @param dest - Absolute path to the workspace root.\n * @param connectors - Connector entries from the template manifest.\n * @param log - Optional logger callback for progress messages.\n * @returns Array of created mount directory paths relative to `dest`.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport function applyConnectorsLayer(\n dest: string,\n connectors: ConnectorEntry[] | undefined | null,\n log?: (msg: string) => void,\n): string[] {\n const created: string[] = [];\n const entries: ConnectorEntry[] = Array.isArray(connectors) ? connectors : [];\n if (!entries.length) return created;\n\n // Write connectors to skaile.yaml\n const yamlPath = join(dest, \"skaile.yaml\");\n if (existsSync(yamlPath)) {\n const editor = WorkspaceYamlEditor.load(yamlPath);\n for (const r of entries) {\n editor.setConnector({\n id: r.id,\n driver: r.driver,\n access: r.access ?? \"read-only\",\n auth: r.auth,\n options: r.options,\n });\n }\n editor.save();\n log?.(`Wrote ${entries.length} connector(s) to skaile.yaml`);\n } else {\n log?.(\"Skipping connector write: skaile.yaml not found (base layer should create it first)\");\n }\n\n // Create mount directories for connectors that have autoMount or mountPath\n for (const connector of entries) {\n if (connector.autoMount === false) continue;\n const mountPath = connector.mountPath ?? `.connectors/${connector.id}`;\n const absMount = join(dest, mountPath);\n if (!existsSync(absMount)) {\n mkdirSync(absMount, { recursive: true });\n created.push(`${mountPath}/`);\n log?.(`Created mount dir: ${mountPath}`);\n }\n }\n\n return created;\n}\n","/**\n * Skills layer — installs AI resources into the workspace using the asset manager.\n *\n * Now that this layer lives inside @skaile/asset-manager, the AssetManager class\n * is loaded via a lazy import from the parent package index (no more dynamic\n * external dependency hack).\n *\n * When a scopeDir is specified, the asset manager operates against that directory\n * instead of the default project directory.\n */\n\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { SkillsLayerConfig } from \"../types.js\";\n\n/** Result of the skills scaffold layer. */\nexport interface SkillsInstallResult {\n /** Asset refs (`kind:name`) installed by `skaile install` during scaffolding. */\n installed: string[];\n /** Non-fatal warnings (e.g. `skaile.yaml` not found, install failure). */\n warnings: string[];\n}\n\n/**\n * Lazy-load AssetManager from the parent package index.\n * Returns null if not available (should not happen in normal operation).\n */\nasync function loadAssetManager(): Promise<any | null> {\n try {\n const mod = await import(\"../../index.js\");\n return mod.AssetManager ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Apply the skills scaffold layer — runs `skaile install` to deploy all declared asset dependencies.\n *\n * Only runs when `config.autoInstall` is `true`. Skips silently when `skaile.yaml` is absent.\n *\n * @param dest - Absolute path to the workspace root.\n * @param config - Skills layer configuration from the template manifest.\n * @param log - Optional logger callback for progress messages.\n * @returns {@link SkillsInstallResult} with installed refs and warnings.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport async function applySkillsLayer(\n dest: string,\n config: SkillsLayerConfig | undefined,\n log?: (msg: string) => void,\n): Promise<SkillsInstallResult> {\n const result: SkillsInstallResult = { installed: [], warnings: [] };\n if (!config?.autoInstall) return result;\n\n const wsConfigPath = join(dest, \"skaile.yaml\");\n if (!existsSync(wsConfigPath)) {\n result.warnings.push(\"Skipping skill install: skaile.yaml not found\");\n return result;\n }\n\n const AssetManager = await loadAssetManager();\n if (!AssetManager) {\n result.warnings.push(\n \"Skipping skill install: AssetManager could not be loaded. Run `skaile install` manually.\",\n );\n return result;\n }\n\n try {\n log?.(\"Installing AI resources...\");\n\n const am = new AssetManager({ projectDir: dest });\n const installResult = await am.install();\n\n if (Array.isArray(installResult)) {\n result.installed = installResult;\n } else if (installResult?.deployed) {\n result.installed = installResult.deployed;\n }\n\n log?.(`Installed ${result.installed.length} skill(s)`);\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n result.warnings.push(`Skill install failed: ${msg}`);\n }\n\n return result;\n}\n","/**\n * Template layer — applies agent definition files (SOUL.md, RULES.md, knowledge/)\n * and any additional template files.\n */\n\nimport { copyFileSync, existsSync, mkdirSync, readdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative } from \"node:path\";\nimport type { TemplateLayerConfig } from \"../types.js\";\n\n/** Recursively copy a directory, skipping files that already exist at dest. */\nfunction copyDirSkipExisting(src: string, dest: string, created: string[], baseDest: string): void {\n if (!existsSync(dest)) mkdirSync(dest, { recursive: true });\n for (const entry of readdirSync(src, { withFileTypes: true })) {\n const srcPath = join(src, entry.name);\n const destPath = join(dest, entry.name);\n if (entry.isDirectory()) {\n copyDirSkipExisting(srcPath, destPath, created, baseDest);\n } else if (!existsSync(destPath)) {\n mkdirSync(dirname(destPath), { recursive: true });\n copyFileSync(srcPath, destPath);\n created.push(relative(baseDest, destPath));\n }\n }\n}\n\n/**\n * Apply the template overlay layer — copies agent definition files (`SOUL.md`, `RULES.md`, `knowledge/`) and additional static template files into the workspace.\n *\n * @param dest - Absolute path to the workspace root.\n * @param config - Template layer configuration from the template manifest.\n * @param templateDir - Absolute path to the template directory (used to resolve relative `files[].src` paths).\n * @returns Array of created file paths relative to `dest`.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport function applyTemplateLayer(\n dest: string,\n config: TemplateLayerConfig | undefined,\n templateDir?: string,\n): string[] {\n const created: string[] = [];\n if (!config) return created;\n\n // Apply agent definition from agentDir\n if (config.agentDir) {\n const agentDir = config.agentDir;\n if (existsSync(agentDir)) {\n // Copy SOUL.md, RULES.md, DUTIES.md\n for (const file of [\"SOUL.md\", \"RULES.md\", \"DUTIES.md\"]) {\n const src = join(agentDir, file);\n const destFile = join(dest, \".skaile\", \"agent\", file);\n if (existsSync(src) && !existsSync(destFile)) {\n mkdirSync(dirname(destFile), { recursive: true });\n copyFileSync(src, destFile);\n created.push(relative(dest, destFile));\n }\n }\n\n // Copy knowledge/ directory\n const knowledgeSrc = join(agentDir, \"knowledge\");\n if (existsSync(knowledgeSrc)) {\n const knowledgeDest = join(dest, \".skaile\", \"agent\", \"knowledge\");\n copyDirSkipExisting(knowledgeSrc, knowledgeDest, created, dest);\n }\n\n // Copy skills/ directory from agent def\n const skillsSrc = join(agentDir, \"skills\");\n if (existsSync(skillsSrc)) {\n const skillsDest = join(dest, \".skaile\", \"agent\", \"skills\");\n copyDirSkipExisting(skillsSrc, skillsDest, created, dest);\n }\n }\n }\n\n // Write inline soul/rules content\n if (config.soul) {\n const soulPath = join(dest, \".skaile\", \"agent\", \"SOUL.md\");\n if (!existsSync(soulPath)) {\n mkdirSync(dirname(soulPath), { recursive: true });\n writeFileSync(soulPath, config.soul);\n created.push(\".skaile/agent/SOUL.md\");\n }\n }\n if (config.rules) {\n const rulesPath = join(dest, \".skaile\", \"agent\", \"RULES.md\");\n if (!existsSync(rulesPath)) {\n mkdirSync(dirname(rulesPath), { recursive: true });\n writeFileSync(rulesPath, config.rules);\n created.push(\".skaile/agent/RULES.md\");\n }\n }\n\n // Copy additional template files\n if (config.files && templateDir) {\n for (const file of config.files) {\n const srcPath = join(templateDir, file.src);\n const destPath = join(dest, file.dest);\n if (!existsSync(srcPath)) continue;\n if (existsSync(destPath)) continue;\n\n if (statSync(srcPath).isDirectory()) {\n copyDirSkipExisting(srcPath, destPath, created, dest);\n } else {\n mkdirSync(dirname(destPath), { recursive: true });\n copyFileSync(srcPath, destPath);\n created.push(file.dest);\n }\n }\n }\n\n return created;\n}\n","/**\n * Main scaffolder — loads a workspace template (workspace.yaml) and applies\n * all configured layers in order: base → framework → template → skills → hooks → container.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { parse } from \"yaml\";\nimport { applyAgentsLayer } from \"./layers/agents.js\";\nimport { applyBaseLayer } from \"./layers/base.js\";\nimport { applyContainerLayer } from \"./layers/container.js\";\nimport { applyDriverTargetLayer } from \"./layers/driver-target.js\";\nimport { applyHooksLayer } from \"./layers/hooks.js\";\nimport { applyConnectorsLayer } from \"./layers/connectors.js\";\nimport { applySkillsLayer } from \"./layers/skills.js\";\nimport { applyTemplateLayer } from \"./layers/template.js\";\nimport { loadSkWorkspaceConfig } from \"@skaile/workspaces/core\";\nimport type { DriverTarget } from \"@skaile/workspaces/core\";\nimport type { ScaffoldOptions, ScaffoldResult, TemplateManifest } from \"./types.js\";\n\n// ── Built-in template directory ────────────────────────────────────────────\n\nlet _builtinTemplatesDir: string | null = null;\n\n/**\n * Get the built-in templates directory. Uses import.meta.url by default,\n * but can be overridden via setTemplatesDir() for bundled environments\n * (e.g. Nitro) where import.meta.url resolves to the bundle output.\n */\nfunction getBuiltinTemplatesDir(): string {\n if (_builtinTemplatesDir) return _builtinTemplatesDir;\n return join(dirname(new URL(import.meta.url).pathname), \"..\", \"..\", \"templates\");\n}\n\n/**\n * Override the built-in templates directory. Call this from apps that bundle\n * skaile-agent-workspace (e.g. Nitro/Nuxt) where `import.meta.url` doesn't\n * resolve to the source package.\n *\n * @param dir - Absolute path to the custom templates directory.\n * @docLink packages/asset-manager/concepts#scaffolder\n */\nexport function setTemplatesDir(dir: string): void {\n _builtinTemplatesDir = resolve(dir);\n}\n\n// ── Template loading ───────────────────────────────────────────────────────\n\n/**\n * Resolve a template name or path to an absolute path to `workspace.yaml`.\n *\n * Lookup order:\n * 1. Absolute or relative path to a `workspace.yaml` file.\n * 2. Directory containing `workspace.yaml`.\n * 3. Built-in template name matching `templates/<name>/workspace.yaml`.\n *\n * @param template - Template name (e.g. `\"minimal\"`) or path to a `workspace.yaml` / directory.\n * @returns Absolute path to `workspace.yaml`, or `null` when the template cannot be found.\n * @docLink packages/asset-manager/concepts#scaffolder\n */\nexport function resolveTemplatePath(template: string): string | null {\n // Direct path to a file\n if (template.endsWith(\".yaml\") || template.endsWith(\".yml\")) {\n const abs = resolve(template);\n return existsSync(abs) ? abs : null;\n }\n\n // Directory containing workspace.yaml\n const dirPath = resolve(template);\n const inDir = join(dirPath, \"workspace.yaml\");\n if (existsSync(inDir)) return inDir;\n\n // Built-in template name\n const builtin = join(getBuiltinTemplatesDir(), template, \"workspace.yaml\");\n if (existsSync(builtin)) return builtin;\n\n return null;\n}\n\n/**\n * Load and merge a template manifest, following `extends` chains.\n *\n * @param templatePath - Absolute path to a `workspace.yaml` template file.\n * @returns Merged `TemplateManifest` with parent sections folded in, and the template directory.\n * @docLink packages/asset-manager/concepts#scaffolder\n */\nexport function loadTemplate(templatePath: string): { manifest: TemplateManifest; dir: string } {\n const raw = readFileSync(templatePath, \"utf-8\");\n const manifest = parse(raw) as TemplateManifest;\n const dir = dirname(templatePath);\n\n if (manifest.extends) {\n const parentPath =\n resolveTemplatePath(manifest.extends) ?? resolveTemplatePath(join(dir, manifest.extends));\n if (parentPath) {\n const parent = loadTemplate(parentPath);\n // Shallow merge: child sections override parent sections per-key\n const { extends: _ext, name, description, version, ...childSections } = manifest;\n Object.assign(manifest, {\n ...parent.manifest,\n name,\n description,\n version,\n extends: _ext,\n ...childSections,\n });\n }\n }\n\n return { manifest, dir };\n}\n\n/**\n * List all available built-in templates.\n *\n * @returns Array of objects with `name`, `description`, and `path` for each available template.\n * @docLink packages/asset-manager/concepts#scaffolder\n */\nexport function listTemplates(): Array<{ name: string; description: string; path: string }> {\n const templates: Array<{ name: string; description: string; path: string }> = [];\n const templatesDir = getBuiltinTemplatesDir();\n if (!existsSync(templatesDir)) return templates;\n\n const { readdirSync } = require(\"node:fs\");\n for (const entry of readdirSync(templatesDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const wsPath = join(templatesDir, entry.name, \"workspace.yaml\");\n if (!existsSync(wsPath)) continue;\n try {\n const raw = readFileSync(wsPath, \"utf-8\");\n const manifest = parse(raw) as TemplateManifest;\n templates.push({\n name: manifest.name ?? entry.name,\n description: manifest.description ?? \"\",\n path: wsPath,\n });\n } catch {\n // Skip unparseable templates\n }\n }\n\n return templates;\n}\n\n// ── Main scaffold function ────────────────────────────────────────────────\n\n/**\n * Scaffold a new Skaile workspace from a template, applying layers in order.\n *\n * Layer application order:\n * 1. **Base** — creates `.skaile/`, `settings.json`, and `skaile.yaml`\n * 2. **Connectors** — writes connector declarations to `skaile.yaml`\n * 3. **Driver target** — creates framework-specific directories (`.claude/`, `.omp/`, etc.)\n * 4. **Template** — copies agent definition files and static template overlays\n * 5. **Agents** — renders and installs GitAgent packages\n * 6. **Skills** — runs `skaile install` (unless `opts.skipInstall` is `true`)\n * 7. **Hooks** — runs `git init`, writes `.gitignore`, executes setup scripts\n * 8. **Container** — generates `Dockerfile` and `docker-compose.yml` (when enabled)\n *\n * @param opts - Scaffold options including destination, template, and layer overrides.\n * @returns {@link ScaffoldResult} with created paths, installed skills, and warnings.\n * @example\n * ```ts\n * const result = await scaffoldWorkspace({\n * dest: \"./my-workspace\",\n * template: \"minimal\",\n * driverTarget: \"claude-code\",\n * });\n * console.log(`Created ${result.created.length} files`);\n * ```\n * @docLink packages/asset-manager/concepts#scaffolder\n */\nexport async function scaffoldWorkspace(opts: ScaffoldOptions): Promise<ScaffoldResult> {\n const log = opts.log ?? (() => {});\n const dest = resolve(opts.dest);\n const result: ScaffoldResult = {\n path: dest,\n created: [],\n installed: [],\n warnings: [],\n };\n\n // 1. Load template\n const templatePath = resolveTemplatePath(opts.template);\n if (!templatePath) {\n result.warnings.push(`Template not found: ${opts.template}`);\n return result;\n }\n\n const { manifest, dir: templateDir } = loadTemplate(templatePath);\n log(`Scaffolding workspace from template: ${manifest.name}`);\n\n // 2. Apply layers in order\n\n // Base layer: .skaile/, settings.json, skaile.yaml\n log(\"Applying base layer...\");\n const driverTarget = (opts.driverTarget ??\n manifest.framework?.[\"default-target\"] ??\n \"claude-code\") as DriverTarget;\n const baseCreated = applyBaseLayer(\n dest,\n manifest[\"ai-assets\"],\n manifest.settings,\n driverTarget,\n opts,\n );\n result.created.push(...baseCreated);\n\n // Connectors layer: connector declarations → skaile.yaml + mount directories\n const connectorEntries = manifest.connectors;\n if (connectorEntries?.length) {\n log(\"Applying connectors layer...\");\n const resCreated = applyConnectorsLayer(dest, connectorEntries, log);\n result.created.push(...resCreated);\n }\n\n // Driver target layer: agent-specific directories\n log(\"Applying driver target layer...\");\n const fwCreated = applyDriverTargetLayer(dest, manifest.framework, opts.driverTarget);\n result.created.push(...fwCreated);\n\n // Template layer: agent definition, template files\n log(\"Applying template layer...\");\n // Resolve agentDir relative to template directory\n const templateConfig = manifest.template;\n if (templateConfig?.agentDir && !templateConfig.agentDir.startsWith(\"/\")) {\n templateConfig.agentDir = join(templateDir, templateConfig.agentDir);\n }\n const tmplCreated = applyTemplateLayer(dest, templateConfig, templateDir);\n result.created.push(...tmplCreated);\n\n // Agents layer: install GitAgent packages into framework deploy target\n log(\"Applying agents layer...\");\n const agentsConfig = opts.agentInstall ? { install: opts.agentInstall } : manifest.agents;\n const wsConfig = loadSkWorkspaceConfig(dest)?.config;\n const agentsResult = await applyAgentsLayer(\n dest,\n agentsConfig,\n driverTarget,\n templateDir,\n wsConfig,\n log,\n );\n result.created.push(...agentsResult.created);\n result.warnings.push(...agentsResult.warnings);\n\n // Skills layer: asset manager-based resource installation\n if (!opts.skipInstall) {\n log(\"Applying skills layer...\");\n const skillsResult = await applySkillsLayer(dest, manifest.skills, log);\n result.installed.push(...skillsResult.installed);\n result.warnings.push(...skillsResult.warnings);\n }\n\n // Hooks layer: git init, .gitignore, setup scripts\n log(\"Applying hooks layer...\");\n const hooksResult = applyHooksLayer(dest, manifest.hooks, log);\n result.created.push(...hooksResult.created);\n result.warnings.push(...hooksResult.warnings);\n\n // Container layer: Dockerfile, docker-compose.yml\n const enableDocker = opts.docker ?? manifest.container?.enabled ?? false;\n if (enableDocker) {\n log(\"Applying container layer...\");\n const containerCreated = applyContainerLayer(\n dest,\n { ...manifest.container, enabled: true },\n opts.name,\n );\n result.created.push(...containerCreated);\n }\n\n log(`Workspace scaffolded: ${result.created.length} files/dirs created`);\n return result;\n}\n"]}
@@ -303,5 +303,5 @@ function resolveProjectDir(additionalEnvVars) {
303
303
  }
304
304
 
305
305
  export { PluginStore, WorkspacePlugin, buildClaudePluginFiles, resolveProjectDir };
306
- //# sourceMappingURL=chunk-BTKNSMLK.js.map
307
- //# sourceMappingURL=chunk-BTKNSMLK.js.map
306
+ //# sourceMappingURL=chunk-Z5PO7ZVP.js.map
307
+ //# sourceMappingURL=chunk-Z5PO7ZVP.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../workspace-plugin/src/adapters/claude-code.ts","../workspace-plugin/src/store.ts","../workspace-plugin/src/plugin.ts","../workspace-plugin/src/utils/project-dir.ts"],"names":["err"],"mappings":"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","file":"chunk-BTKNSMLK.js","sourcesContent":["// ── Claude Code plugin-directory generator (STATELESS) ──────────────────────\n// Generates the contents of a Claude Code plugin directory\n// (`.claude/plugins/skaile/`) as an in-memory file map. No plugin instance or\n// boot() is required — safe to call from install commands.\n//\n// The previous standalone `@skaile/workspace-plugin-claude` package shipped\n// these as static files plus loose `.mjs` hook scripts; they are now\n// CLI-owned templates. Hooks invoke the `skaile` binary directly\n// (`skaile plugin hook <event>`) and MCP runs via `skaile mcp-server` — no\n// generated script files, no shebang, no runtime assumption.\n\n/**\n * The Claude Code plugin manifest. `name` is `skaile`; `hooks` and\n * `mcpServers` point at sibling files in the generated directory.\n */\nconst PLUGIN_JSON = {\n name: \"skaile\",\n version: \"0.1.0\",\n description: \"Skaile workspace — connectors, mounts, skills, flows, shared state\",\n author: { name: \"skaile-ai\", url: \"https://github.com/skaile-ai\" },\n repository: \"https://github.com/skaile-ai/workspaces\",\n keywords: [\"skaile\", \"connectors\", \"workspace\", \"ai-assets\"],\n hooks: \"./hooks/hooks.json\",\n mcpServers: \"./.mcp.json\",\n userConfig: {\n skaile_yaml_path: {\n type: \"string\",\n title: \"skaile.yaml path\",\n description: \"Override path to skaile.yaml (default: auto-detect from project root)\",\n },\n },\n};\n\n/**\n * Hook wiring. Each lifecycle event invokes the `skaile` binary directly —\n * no loose `.mjs` scripts. `skaile plugin hook <event>` resolves the project\n * directory itself (`CLAUDE_PROJECT_DIR` / cwd) and always exits 0.\n */\nconst HOOKS_JSON = {\n hooks: {\n SessionStart: [{ hooks: [{ type: \"command\", command: \"skaile plugin hook session-start\" }] }],\n SessionEnd: [{ hooks: [{ type: \"command\", command: \"skaile plugin hook session-end\" }] }],\n UserPromptSubmit: [\n { hooks: [{ type: \"command\", command: \"skaile plugin hook user-prompt-submit\" }] },\n ],\n },\n};\n\n/**\n * MCP server wiring. Spawns `skaile mcp-server` — a stdio MCP subprocess that\n * runs on plain Node (no Claude Agent SDK).\n */\nconst MCP_JSON = {\n mcpServers: {\n \"skaile-workspace\": {\n command: \"skaile\",\n args: [\"mcp-server\"],\n env: {},\n },\n },\n};\n\n/**\n * Build the Claude Code plugin directory as an in-memory file map.\n *\n * Returns `{ relativePath: contents }` for every file the installer must\n * write under `<projectDir>/.claude/plugins/skaile/`. The installer is also\n * responsible for populating `skills/` from the project's `.skaile/skills/`.\n *\n * Stateless — no plugin instance, no `boot()`. The generated artifacts carry\n * no project-specific paths: hooks and the MCP server resolve the project\n * directory themselves at runtime.\n *\n * @returns A map of plugin-relative file paths to their string contents.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport function buildClaudePluginFiles(): Record<string, string> {\n return {\n \".claude-plugin/plugin.json\": `${JSON.stringify(PLUGIN_JSON, null, 2)}\\n`,\n \"hooks/hooks.json\": `${JSON.stringify(HOOKS_JSON, null, 2)}\\n`,\n \".mcp.json\": `${JSON.stringify(MCP_JSON, null, 2)}\\n`,\n \"skills/.gitkeep\": \"\",\n };\n}\n","import { readFile, writeFile, mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\ninterface Subscriber {\n regex: RegExp;\n handler: (key: string, value: unknown) => void;\n}\n\n/**\n * Disk-backed reactive key-value store for plugin state.\n *\n * Keeps an in-memory map that can be flushed to / loaded from a JSON file.\n * Supports glob-style subscriptions (`connector:*`, `*`).\n *\n * State is persisted to `<projectDir>/.skaile/plugin-state.json`.\n * The instance is available on {@link WorkspacePlugin} as the public `store`\n * field after `boot()` resolves.\n *\n * @docLink packages/workspace-plugin/concepts#plugin-store\n */\nexport class PluginStore {\n private readonly statePath: string;\n private data: Map<string, unknown> = new Map();\n private subscribers: Subscriber[] = [];\n\n constructor(statePath: string) {\n this.statePath = statePath;\n }\n\n /** Synchronous read from in-memory map. */\n get<T>(key: string): T | undefined {\n return this.data.get(key) as T | undefined;\n }\n\n /** Write to in-memory map and notify matching subscribers. */\n set<T>(key: string, value: T): void {\n this.data.set(key, value);\n this.notify(key, value);\n }\n\n /** Remove key and notify matching subscribers. */\n delete(key: string): void {\n this.data.delete(key);\n this.notify(key, undefined);\n }\n\n /**\n * Subscribe to changes matching a glob-style pattern.\n * `*` matches any sequence of characters.\n * Returns an unsubscribe function.\n */\n subscribe(pattern: string, handler: (key: string, value: unknown) => void): () => void {\n const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexStr = `^${escaped.replace(/\\*/g, \".*\")}$`;\n const sub: Subscriber = { regex: new RegExp(regexStr), handler };\n this.subscribers.push(sub);\n\n return () => {\n const idx = this.subscribers.indexOf(sub);\n if (idx !== -1) this.subscribers.splice(idx, 1);\n };\n }\n\n /** Rehydrate from disk JSON. Missing file = empty store (no throw). */\n async load(): Promise<void> {\n try {\n const raw = await readFile(this.statePath, \"utf-8\");\n const parsed = JSON.parse(raw);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n this.data = new Map(Object.entries(parsed));\n }\n } catch (e: unknown) {\n // Missing file or invalid JSON — start with empty store\n }\n }\n\n /** Write entire store to disk as JSON. Creates parent dirs if needed. */\n async flush(): Promise<void> {\n const obj = Object.fromEntries(this.data);\n const json = JSON.stringify(obj, null, 2);\n await mkdir(dirname(this.statePath), { recursive: true });\n await writeFile(this.statePath, json, \"utf-8\");\n }\n\n private notify(key: string, value: unknown): void {\n for (const sub of this.subscribers) {\n if (sub.regex.test(key)) {\n sub.handler(key, value);\n }\n }\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { ConnectorManager } from \"@skaile/workspaces/connectors\";\nimport { createLogger } from \"@skaile/workspaces/core/logging\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport { PluginStore } from \"./store.js\";\n\n/**\n * Construction options for {@link WorkspacePlugin}.\n *\n * At minimum `projectDir` must be supplied. All other fields are optional\n * and are pre-resolved by the caller when available (e.g. the runner already\n * knows `driver`/`provider`/`model` from its own settings resolution).\n *\n * @docLink packages/workspace-plugin/concepts#workspaceplugin-lifecycle\n */\nexport interface WorkspacePluginOpts {\n projectDir: string;\n /**\n * Active connector manager. The unified `ConnectorManager` owns both\n * filesystem-face (mountable) and tool-face connectors.\n */\n connectorManager?: ConnectorManager;\n bootOwned?: boolean;\n onLog?: (msg: string) => void;\n /** Pre-resolved driver type (avoids needing boot() to read settings). */\n driver?: string;\n /** Pre-resolved provider. */\n provider?: string;\n /** Pre-resolved model. */\n model?: string;\n}\n\n/**\n * Shared runtime core for the skaile workspace plugin.\n *\n * Manages the full lifecycle (`boot` → tools available → `shutdown`) and\n * surfaces workspace capabilities — mounts, connectors, flows, skills,\n * sessions, and config validation — through two adapter backends:\n *\n * - **MCP, in-process** (runner): call {@link buildWorkspaceMcpServer} for the\n * Claude Agent SDK server the runner embeds into its `query()` call.\n * - **MCP, stdio** (`skaile mcp-server`): call {@link runMcpServerStdio} for a\n * raw `@modelcontextprotocol/sdk` server — no Claude Agent SDK.\n * - **OMP**: call {@link buildOmpToolSet} for the 13-tool native subset and\n * {@link buildOmpExtensionSource} for the generated extension file.\n *\n * Two boot modes are supported via {@link WorkspacePluginOpts.bootOwned}:\n * - `bootOwned: false` (default) — managers injected externally by the runner.\n * - `bootOwned: true` — plugin owns the full manager lifecycle (standalone MCP\n * subprocess or OMP extension).\n *\n * @docLink packages/workspace-plugin/concepts#workspaceplugin-lifecycle\n */\nexport class WorkspacePlugin {\n readonly projectDir: string;\n connectorManager: ConnectorManager | null;\n readonly store: PluginStore;\n\n private readonly bootOwned: boolean;\n private readonly onLog: (msg: string) => void;\n private readonly log: Logger = createLogger({\n kind: \"mcp\",\n subkind: \"skaile-workspace\",\n });\n driver?: string;\n provider?: string;\n model?: string;\n\n constructor(opts: WorkspacePluginOpts) {\n this.projectDir = opts.projectDir;\n this.connectorManager = opts.connectorManager ?? null;\n this.store = new PluginStore(join(opts.projectDir, \".skaile\", \"plugin-state.json\"));\n this.bootOwned = opts.bootOwned ?? false;\n if (opts.driver) this.driver = opts.driver;\n if (opts.provider) this.provider = opts.provider;\n if (opts.model) this.model = opts.model;\n this.onLog = opts.onLog ?? (() => {});\n this.log.debug(\"plugin constructed\", {\n driver: opts.driver,\n hasConnectors: !!opts.connectorManager,\n provider: opts.provider,\n model: opts.model,\n bootOwned: this.bootOwned,\n });\n }\n\n async boot(): Promise<void> {\n if (!this.bootOwned) {\n // Managers were injected externally — resolve settings only (non-fatal)\n try {\n const { resolveSettings } = await import(\"@skaile/workspaces/core\");\n const settings = await resolveSettings(this.projectDir);\n this.driver = settings.driver ?? \"omp\";\n this.provider = settings.provider;\n this.model = settings.model;\n } catch {\n /* non-fatal */\n }\n await this.store.load();\n return;\n }\n\n // bootOwned: we own the managers lifecycle\n try {\n const { resolveSettings } = await import(\"@skaile/workspaces/core\");\n const settings = await resolveSettings(this.projectDir);\n this.driver = settings.driver ?? \"omp\";\n this.provider = settings.provider;\n this.model = settings.model;\n } catch {\n /* non-fatal */\n }\n\n try {\n const {\n ConnectorManager,\n loadConnectorDeclarations,\n registerBuiltinConnectors,\n createCliSecretProviderChain,\n } = await import(\"@skaile/workspaces/connectors\");\n\n registerBuiltinConnectors();\n\n const secrets = createCliSecretProviderChain();\n\n const connectorDecls = await loadConnectorDeclarations(this.projectDir);\n const cm = new ConnectorManager(this.projectDir, { secrets });\n await cm.connectAll(connectorDecls);\n this.connectorManager = cm;\n\n this.log.info(\"workspace plugin booted\", {\n connectors: connectorDecls.length,\n });\n this.onLog(`WorkspacePlugin booted: ${connectorDecls.length} connectors`);\n } catch (err) {\n this.log.warn(\"workspace plugin boot warning\", {\n error: err instanceof Error ? err.message : String(err),\n });\n this.onLog(`WorkspacePlugin boot warning: ${err}`);\n }\n\n await this.store.load();\n }\n\n async reload(): Promise<void> {\n if (!this.bootOwned) return;\n await this.shutdown();\n await this.boot();\n }\n\n async shutdown(): Promise<void> {\n this.log.info(\"workspace plugin shutdown\");\n await this.store.flush();\n if (!this.bootOwned) return;\n try {\n await (this.connectorManager as any)?.disconnectAll?.();\n } catch {\n /* best-effort */\n }\n this.connectorManager = null;\n }\n\n buildSystemPromptSection(driver?: string): string {\n const d = driver ?? this.driver ?? \"unknown\";\n // The unified ConnectorManager owns both mountable (filesystem-face) and\n // tool-face connectors. Filesystem-face connectors expose a `mountPath`.\n const all = (this.connectorManager as any)?.listConnectors?.() ?? [];\n const mounts = (all as any[]).filter((c) => typeof c.mountPath === \"string\");\n const connectors = (all as any[]).filter((c) => typeof c.mountPath !== \"string\");\n const lines = [\"## Workspace (skaile)\", \"\", `Driver: ${d}`, `Project: ${this.projectDir}`];\n if (mounts.length > 0) {\n lines.push(\"\", \"Mounts:\");\n for (const v of mounts) {\n lines.push(` · ${v.id} (${v.driver}) → ${v.mountPath ?? \"(unmounted)\"}`);\n }\n }\n if (connectors.length > 0) {\n lines.push(\"\", \"Connectors:\");\n for (const c of connectors) {\n lines.push(` · ${c.id} (${c.driver})`);\n }\n }\n lines.push(\"\", \"Use workspace_info for full details. Use workspace_validate to check health.\");\n\n for (const name of [\"SOUL.md\", \"RULES.md\"]) {\n const skaileOverride = join(this.projectDir, \".skaile\", name);\n const rootFile = join(this.projectDir, name);\n for (const candidate of [skaileOverride, rootFile]) {\n try {\n const content = readFileSync(candidate, \"utf-8\").trim();\n if (content) {\n lines.push(\"\", `## ${name.replace(\".md\", \"\")}`, \"\", content);\n break;\n }\n } catch {\n // file not found, try next\n }\n }\n }\n\n return lines.join(\"\\n\");\n }\n\n /**\n * Build the in-process Claude Agent SDK MCP server (runner embedding).\n * Returns `null` when `@anthropic-ai/claude-agent-sdk` is unavailable.\n */\n async buildWorkspaceMcpServer(): Promise<unknown | null> {\n this.log.info(\"building workspace MCP server\");\n try {\n const { buildWorkspaceMcpServer } = await import(\"./adapters/mcp.js\");\n const server = await buildWorkspaceMcpServer(this);\n if (server) this.log.info(\"workspace MCP server ready\");\n else this.log.debug(\"workspace MCP server skipped (no tools)\");\n return server;\n } catch (err) {\n this.log.error(\"workspace MCP server build failed\", err);\n throw err;\n }\n }\n\n /**\n * Build the raw `@modelcontextprotocol/sdk` stdio MCP server — no Claude\n * Agent SDK. Used by the `skaile mcp-server` subprocess. The returned\n * server is not yet connected to a transport.\n */\n async buildWorkspaceMcpStdioServer(): Promise<unknown> {\n this.log.info(\"building workspace stdio MCP server\");\n const { buildWorkspaceMcpStdioServer } = await import(\"./adapters/mcp.js\");\n return buildWorkspaceMcpStdioServer(this);\n }\n\n /**\n * Build and run the stdio MCP server: builds the raw\n * `@modelcontextprotocol/sdk` server and connects a `StdioServerTransport`.\n * Used by the `skaile mcp-server` subprocess.\n */\n async runMcpServerStdio(): Promise<void> {\n this.log.info(\"starting workspace stdio MCP server\");\n const { runMcpServerStdio } = await import(\"./adapters/mcp.js\");\n await runMcpServerStdio(this);\n }\n\n async buildOmpToolSet(): Promise<unknown[]> {\n const { buildOmpToolSet } = await import(\"./adapters/omp.js\");\n return buildOmpToolSet(this);\n }\n\n async buildOmpExtensionSource(): Promise<string> {\n const { buildOmpExtensionSource } = await import(\"./adapters/omp.js\");\n return buildOmpExtensionSource(this.projectDir);\n }\n\n async handleSlashCommand(group: string, args: string[]): Promise<string> {\n const { handleSlashCommand } = await import(\"./adapters/omp.js\");\n return handleSlashCommand(this, group, args);\n }\n}\n","// utils/project-dir.ts\n// Centralised project-directory resolution used by all plugin entry points.\n\n/**\n * Resolve the skaile project directory from environment variables.\n *\n * Resolution order:\n * 1. `SKAILE_PROJECT_DIR` (always checked first)\n * 2. Any additional env var keys supplied by the caller (in order)\n * 3. `process.cwd()` as final fallback\n *\n * @param additionalEnvVars - Optional list of extra environment variable names\n * to check before falling back to `process.cwd()`.\n * @returns Absolute path to the resolved project directory.\n *\n * @example\n * // Claude Code — also checks CLAUDE_PROJECT_DIR\n * const projectDir = resolveProjectDir([\"CLAUDE_PROJECT_DIR\"]);\n *\n * // OMP / standalone — SKAILE_PROJECT_DIR or cwd only\n * const projectDir = resolveProjectDir();\n *\n * @docLink packages/workspace-plugin/concepts#workspaceplugin-lifecycle\n */\nexport function resolveProjectDir(additionalEnvVars?: string[]): string {\n if (process.env.SKAILE_PROJECT_DIR) return process.env.SKAILE_PROJECT_DIR;\n for (const key of additionalEnvVars ?? []) {\n const val = process.env[key];\n if (val) return val;\n }\n return process.cwd();\n}\n"]}
1
+ {"version":3,"sources":["../workspace-plugin/src/adapters/claude-code.ts","../workspace-plugin/src/store.ts","../workspace-plugin/src/plugin.ts","../workspace-plugin/src/utils/project-dir.ts"],"names":["err"],"mappings":"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","file":"chunk-Z5PO7ZVP.js","sourcesContent":["// ── Claude Code plugin-directory generator (STATELESS) ──────────────────────\n// Generates the contents of a Claude Code plugin directory\n// (`.claude/plugins/skaile/`) as an in-memory file map. No plugin instance or\n// boot() is required — safe to call from install commands.\n//\n// The previous standalone `@skaile/workspace-plugin-claude` package shipped\n// these as static files plus loose `.mjs` hook scripts; they are now\n// CLI-owned templates. Hooks invoke the `skaile` binary directly\n// (`skaile plugin hook <event>`) and MCP runs via `skaile mcp-server` — no\n// generated script files, no shebang, no runtime assumption.\n\n/**\n * The Claude Code plugin manifest. `name` is `skaile`; `hooks` and\n * `mcpServers` point at sibling files in the generated directory.\n */\nconst PLUGIN_JSON = {\n name: \"skaile\",\n version: \"0.1.0\",\n description: \"Skaile workspace — connectors, mounts, skills, flows, shared state\",\n author: { name: \"skaile-ai\", url: \"https://github.com/skaile-ai\" },\n repository: \"https://github.com/skaile-ai/workspaces\",\n keywords: [\"skaile\", \"connectors\", \"workspace\", \"ai-assets\"],\n hooks: \"./hooks/hooks.json\",\n mcpServers: \"./.mcp.json\",\n userConfig: {\n skaile_yaml_path: {\n type: \"string\",\n title: \"skaile.yaml path\",\n description: \"Override path to skaile.yaml (default: auto-detect from project root)\",\n },\n },\n};\n\n/**\n * Hook wiring. Each lifecycle event invokes the `skaile` binary directly —\n * no loose `.mjs` scripts. `skaile plugin hook <event>` resolves the project\n * directory itself (`CLAUDE_PROJECT_DIR` / cwd) and always exits 0.\n */\nconst HOOKS_JSON = {\n hooks: {\n SessionStart: [{ hooks: [{ type: \"command\", command: \"skaile plugin hook session-start\" }] }],\n SessionEnd: [{ hooks: [{ type: \"command\", command: \"skaile plugin hook session-end\" }] }],\n UserPromptSubmit: [\n { hooks: [{ type: \"command\", command: \"skaile plugin hook user-prompt-submit\" }] },\n ],\n },\n};\n\n/**\n * MCP server wiring. Spawns `skaile mcp-server` — a stdio MCP subprocess that\n * runs on plain Node (no Claude Agent SDK).\n */\nconst MCP_JSON = {\n mcpServers: {\n \"skaile-workspace\": {\n command: \"skaile\",\n args: [\"mcp-server\"],\n env: {},\n },\n },\n};\n\n/**\n * Build the Claude Code plugin directory as an in-memory file map.\n *\n * Returns `{ relativePath: contents }` for every file the installer must\n * write under `<projectDir>/.claude/plugins/skaile/`. The installer is also\n * responsible for populating `skills/` from the project's `.skaile/skills/`.\n *\n * Stateless — no plugin instance, no `boot()`. The generated artifacts carry\n * no project-specific paths: hooks and the MCP server resolve the project\n * directory themselves at runtime.\n *\n * @returns A map of plugin-relative file paths to their string contents.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport function buildClaudePluginFiles(): Record<string, string> {\n return {\n \".claude-plugin/plugin.json\": `${JSON.stringify(PLUGIN_JSON, null, 2)}\\n`,\n \"hooks/hooks.json\": `${JSON.stringify(HOOKS_JSON, null, 2)}\\n`,\n \".mcp.json\": `${JSON.stringify(MCP_JSON, null, 2)}\\n`,\n \"skills/.gitkeep\": \"\",\n };\n}\n","import { readFile, writeFile, mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\ninterface Subscriber {\n regex: RegExp;\n handler: (key: string, value: unknown) => void;\n}\n\n/**\n * Disk-backed reactive key-value store for plugin state.\n *\n * Keeps an in-memory map that can be flushed to / loaded from a JSON file.\n * Supports glob-style subscriptions (`connector:*`, `*`).\n *\n * State is persisted to `<projectDir>/.skaile/plugin-state.json`.\n * The instance is available on {@link WorkspacePlugin} as the public `store`\n * field after `boot()` resolves.\n *\n * @docLink packages/workspace-plugin/concepts#plugin-store\n */\nexport class PluginStore {\n private readonly statePath: string;\n private data: Map<string, unknown> = new Map();\n private subscribers: Subscriber[] = [];\n\n constructor(statePath: string) {\n this.statePath = statePath;\n }\n\n /** Synchronous read from in-memory map. */\n get<T>(key: string): T | undefined {\n return this.data.get(key) as T | undefined;\n }\n\n /** Write to in-memory map and notify matching subscribers. */\n set<T>(key: string, value: T): void {\n this.data.set(key, value);\n this.notify(key, value);\n }\n\n /** Remove key and notify matching subscribers. */\n delete(key: string): void {\n this.data.delete(key);\n this.notify(key, undefined);\n }\n\n /**\n * Subscribe to changes matching a glob-style pattern.\n * `*` matches any sequence of characters.\n * Returns an unsubscribe function.\n */\n subscribe(pattern: string, handler: (key: string, value: unknown) => void): () => void {\n const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexStr = `^${escaped.replace(/\\*/g, \".*\")}$`;\n const sub: Subscriber = { regex: new RegExp(regexStr), handler };\n this.subscribers.push(sub);\n\n return () => {\n const idx = this.subscribers.indexOf(sub);\n if (idx !== -1) this.subscribers.splice(idx, 1);\n };\n }\n\n /** Rehydrate from disk JSON. Missing file = empty store (no throw). */\n async load(): Promise<void> {\n try {\n const raw = await readFile(this.statePath, \"utf-8\");\n const parsed = JSON.parse(raw);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n this.data = new Map(Object.entries(parsed));\n }\n } catch (e: unknown) {\n // Missing file or invalid JSON — start with empty store\n }\n }\n\n /** Write entire store to disk as JSON. Creates parent dirs if needed. */\n async flush(): Promise<void> {\n const obj = Object.fromEntries(this.data);\n const json = JSON.stringify(obj, null, 2);\n await mkdir(dirname(this.statePath), { recursive: true });\n await writeFile(this.statePath, json, \"utf-8\");\n }\n\n private notify(key: string, value: unknown): void {\n for (const sub of this.subscribers) {\n if (sub.regex.test(key)) {\n sub.handler(key, value);\n }\n }\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { ConnectorManager } from \"@skaile/workspaces/connectors\";\nimport { createLogger } from \"@skaile/workspaces/core/logging\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport { PluginStore } from \"./store.js\";\n\n/**\n * Construction options for {@link WorkspacePlugin}.\n *\n * At minimum `projectDir` must be supplied. All other fields are optional\n * and are pre-resolved by the caller when available (e.g. the runner already\n * knows `driver`/`provider`/`model` from its own settings resolution).\n *\n * @docLink packages/workspace-plugin/concepts#workspaceplugin-lifecycle\n */\nexport interface WorkspacePluginOpts {\n projectDir: string;\n /**\n * Active connector manager. The unified `ConnectorManager` owns both\n * filesystem-face (mountable) and tool-face connectors.\n */\n connectorManager?: ConnectorManager;\n bootOwned?: boolean;\n onLog?: (msg: string) => void;\n /** Pre-resolved driver type (avoids needing boot() to read settings). */\n driver?: string;\n /** Pre-resolved provider. */\n provider?: string;\n /** Pre-resolved model. */\n model?: string;\n}\n\n/**\n * Shared runtime core for the skaile workspace plugin.\n *\n * Manages the full lifecycle (`boot` → tools available → `shutdown`) and\n * surfaces workspace capabilities — mounts, connectors, flows, skills,\n * sessions, and config validation — through two adapter backends:\n *\n * - **MCP, in-process** (runner): call {@link buildWorkspaceMcpServer} for the\n * Claude Agent SDK server the runner embeds into its `query()` call.\n * - **MCP, stdio** (`skaile mcp-server`): call {@link runMcpServerStdio} for a\n * raw `@modelcontextprotocol/sdk` server — no Claude Agent SDK.\n * - **OMP**: call {@link buildOmpToolSet} for the 13-tool native subset and\n * {@link buildOmpExtensionSource} for the generated extension file.\n *\n * Two boot modes are supported via {@link WorkspacePluginOpts.bootOwned}:\n * - `bootOwned: false` (default) — managers injected externally by the runner.\n * - `bootOwned: true` — plugin owns the full manager lifecycle (standalone MCP\n * subprocess or OMP extension).\n *\n * @docLink packages/workspace-plugin/concepts#workspaceplugin-lifecycle\n */\nexport class WorkspacePlugin {\n readonly projectDir: string;\n connectorManager: ConnectorManager | null;\n readonly store: PluginStore;\n\n private readonly bootOwned: boolean;\n private readonly onLog: (msg: string) => void;\n private readonly log: Logger = createLogger({\n kind: \"mcp\",\n subkind: \"skaile-workspace\",\n });\n driver?: string;\n provider?: string;\n model?: string;\n\n constructor(opts: WorkspacePluginOpts) {\n this.projectDir = opts.projectDir;\n this.connectorManager = opts.connectorManager ?? null;\n this.store = new PluginStore(join(opts.projectDir, \".skaile\", \"plugin-state.json\"));\n this.bootOwned = opts.bootOwned ?? false;\n if (opts.driver) this.driver = opts.driver;\n if (opts.provider) this.provider = opts.provider;\n if (opts.model) this.model = opts.model;\n this.onLog = opts.onLog ?? (() => {});\n this.log.debug(\"plugin constructed\", {\n driver: opts.driver,\n hasConnectors: !!opts.connectorManager,\n provider: opts.provider,\n model: opts.model,\n bootOwned: this.bootOwned,\n });\n }\n\n async boot(): Promise<void> {\n if (!this.bootOwned) {\n // Managers were injected externally — resolve settings only (non-fatal)\n try {\n const { resolveSettings } = await import(\"@skaile/workspaces/core\");\n const settings = await resolveSettings(this.projectDir);\n this.driver = settings.driver ?? \"omp\";\n this.provider = settings.provider;\n this.model = settings.model;\n } catch {\n /* non-fatal */\n }\n await this.store.load();\n return;\n }\n\n // bootOwned: we own the managers lifecycle\n try {\n const { resolveSettings } = await import(\"@skaile/workspaces/core\");\n const settings = await resolveSettings(this.projectDir);\n this.driver = settings.driver ?? \"omp\";\n this.provider = settings.provider;\n this.model = settings.model;\n } catch {\n /* non-fatal */\n }\n\n try {\n const {\n ConnectorManager,\n loadConnectorDeclarations,\n registerBuiltinConnectors,\n createCliSecretProviderChain,\n } = await import(\"@skaile/workspaces/connectors\");\n\n registerBuiltinConnectors();\n\n const secrets = createCliSecretProviderChain();\n\n const connectorDecls = await loadConnectorDeclarations(this.projectDir);\n const cm = new ConnectorManager(this.projectDir, { secrets });\n await cm.connectAll(connectorDecls);\n this.connectorManager = cm;\n\n this.log.info(\"workspace plugin booted\", {\n connectors: connectorDecls.length,\n });\n this.onLog(`WorkspacePlugin booted: ${connectorDecls.length} connectors`);\n } catch (err) {\n this.log.warn(\"workspace plugin boot warning\", {\n error: err instanceof Error ? err.message : String(err),\n });\n this.onLog(`WorkspacePlugin boot warning: ${err}`);\n }\n\n await this.store.load();\n }\n\n async reload(): Promise<void> {\n if (!this.bootOwned) return;\n await this.shutdown();\n await this.boot();\n }\n\n async shutdown(): Promise<void> {\n this.log.info(\"workspace plugin shutdown\");\n await this.store.flush();\n if (!this.bootOwned) return;\n try {\n await (this.connectorManager as any)?.disconnectAll?.();\n } catch {\n /* best-effort */\n }\n this.connectorManager = null;\n }\n\n buildSystemPromptSection(driver?: string): string {\n const d = driver ?? this.driver ?? \"unknown\";\n // The unified ConnectorManager owns both mountable (filesystem-face) and\n // tool-face connectors. Filesystem-face connectors expose a `mountPath`.\n const all = (this.connectorManager as any)?.listConnectors?.() ?? [];\n const mounts = (all as any[]).filter((c) => typeof c.mountPath === \"string\");\n const connectors = (all as any[]).filter((c) => typeof c.mountPath !== \"string\");\n const lines = [\"## Workspace (skaile)\", \"\", `Driver: ${d}`, `Project: ${this.projectDir}`];\n if (mounts.length > 0) {\n lines.push(\"\", \"Mounts:\");\n for (const v of mounts) {\n lines.push(` · ${v.id} (${v.driver}) → ${v.mountPath ?? \"(unmounted)\"}`);\n }\n }\n if (connectors.length > 0) {\n lines.push(\"\", \"Connectors:\");\n for (const c of connectors) {\n lines.push(` · ${c.id} (${c.driver})`);\n }\n }\n lines.push(\"\", \"Use workspace_info for full details. Use workspace_validate to check health.\");\n\n for (const name of [\"SOUL.md\", \"RULES.md\"]) {\n const skaileOverride = join(this.projectDir, \".skaile\", name);\n const rootFile = join(this.projectDir, name);\n for (const candidate of [skaileOverride, rootFile]) {\n try {\n const content = readFileSync(candidate, \"utf-8\").trim();\n if (content) {\n lines.push(\"\", `## ${name.replace(\".md\", \"\")}`, \"\", content);\n break;\n }\n } catch {\n // file not found, try next\n }\n }\n }\n\n return lines.join(\"\\n\");\n }\n\n /**\n * Build the in-process Claude Agent SDK MCP server (runner embedding).\n * Returns `null` when `@anthropic-ai/claude-agent-sdk` is unavailable.\n */\n async buildWorkspaceMcpServer(): Promise<unknown | null> {\n this.log.info(\"building workspace MCP server\");\n try {\n const { buildWorkspaceMcpServer } = await import(\"./adapters/mcp.js\");\n const server = await buildWorkspaceMcpServer(this);\n if (server) this.log.info(\"workspace MCP server ready\");\n else this.log.debug(\"workspace MCP server skipped (no tools)\");\n return server;\n } catch (err) {\n this.log.error(\"workspace MCP server build failed\", err);\n throw err;\n }\n }\n\n /**\n * Build the raw `@modelcontextprotocol/sdk` stdio MCP server — no Claude\n * Agent SDK. Used by the `skaile mcp-server` subprocess. The returned\n * server is not yet connected to a transport.\n */\n async buildWorkspaceMcpStdioServer(): Promise<unknown> {\n this.log.info(\"building workspace stdio MCP server\");\n const { buildWorkspaceMcpStdioServer } = await import(\"./adapters/mcp.js\");\n return buildWorkspaceMcpStdioServer(this);\n }\n\n /**\n * Build and run the stdio MCP server: builds the raw\n * `@modelcontextprotocol/sdk` server and connects a `StdioServerTransport`.\n * Used by the `skaile mcp-server` subprocess.\n */\n async runMcpServerStdio(): Promise<void> {\n this.log.info(\"starting workspace stdio MCP server\");\n const { runMcpServerStdio } = await import(\"./adapters/mcp.js\");\n await runMcpServerStdio(this);\n }\n\n async buildOmpToolSet(): Promise<unknown[]> {\n const { buildOmpToolSet } = await import(\"./adapters/omp.js\");\n return buildOmpToolSet(this);\n }\n\n async buildOmpExtensionSource(): Promise<string> {\n const { buildOmpExtensionSource } = await import(\"./adapters/omp.js\");\n return buildOmpExtensionSource(this.projectDir);\n }\n\n async handleSlashCommand(group: string, args: string[]): Promise<string> {\n const { handleSlashCommand } = await import(\"./adapters/omp.js\");\n return handleSlashCommand(this, group, args);\n }\n}\n","// utils/project-dir.ts\n// Centralised project-directory resolution used by all plugin entry points.\n\n/**\n * Resolve the skaile project directory from environment variables.\n *\n * Resolution order:\n * 1. `SKAILE_PROJECT_DIR` (always checked first)\n * 2. Any additional env var keys supplied by the caller (in order)\n * 3. `process.cwd()` as final fallback\n *\n * @param additionalEnvVars - Optional list of extra environment variable names\n * to check before falling back to `process.cwd()`.\n * @returns Absolute path to the resolved project directory.\n *\n * @example\n * // Claude Code — also checks CLAUDE_PROJECT_DIR\n * const projectDir = resolveProjectDir([\"CLAUDE_PROJECT_DIR\"]);\n *\n * // OMP / standalone — SKAILE_PROJECT_DIR or cwd only\n * const projectDir = resolveProjectDir();\n *\n * @docLink packages/workspace-plugin/concepts#workspaceplugin-lifecycle\n */\nexport function resolveProjectDir(additionalEnvVars?: string[]): string {\n if (process.env.SKAILE_PROJECT_DIR) return process.env.SKAILE_PROJECT_DIR;\n for (const key of additionalEnvVars ?? []) {\n const val = process.env[key];\n if (val) return val;\n }\n return process.cwd();\n}\n"]}
package/dist/cli/index.js CHANGED
@@ -8,11 +8,11 @@ import { resolveLibraryDir } from '../chunk-42OQF7UU.js';
8
8
  import '../chunk-R7FOF242.js';
9
9
  import '../chunk-GKIA2PU5.js';
10
10
  import '../chunk-OKRUTSG7.js';
11
- import { runFlow, resumeFlow } from '../chunk-ZLLUIIZR.js';
11
+ import { runFlow, resumeFlow } from '../chunk-DDVKNST3.js';
12
12
  import '../chunk-GCJXPUHG.js';
13
13
  import { validateFlowVersions, parseSkillFrontmatter } from '../chunk-IPUYL6TD.js';
14
- import { runAgentChat, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, compileComposition, MarkdownStreamer, resolveMixin } from '../chunk-L6PKR6YY.js';
15
- import { buildClaudePluginFiles } from '../chunk-BTKNSMLK.js';
14
+ import { runAgentChat, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, compileComposition, MarkdownStreamer, resolveMixin } from '../chunk-UTKGPNLV.js';
15
+ import { buildClaudePluginFiles } from '../chunk-Z5PO7ZVP.js';
16
16
  import '../chunk-X5YPJV4N.js';
17
17
  import '../chunk-O7SG5PC2.js';
18
18
  import '../chunk-W2O5LWYU.js';
@@ -20,24 +20,24 @@ import '../chunk-7PTP3SQJ.js';
20
20
  import '../chunk-PBWMV5GM.js';
21
21
  import '../chunk-W3UDISS2.js';
22
22
  import '../chunk-TDSRLMDB.js';
23
- import '../chunk-VMU2WEN7.js';
24
- import '../chunk-EWP5HZBV.js';
23
+ import '../chunk-S2OVTCAL.js';
24
+ import '../chunk-DQWREFRQ.js';
25
25
  import '../chunk-KOVLSBXK.js';
26
26
  import '../chunk-RRVQAE5D.js';
27
- import '../chunk-YOFKTALB.js';
27
+ import '../chunk-4ACWI5YT.js';
28
28
  import '../chunk-LV2HPH3C.js';
29
- import '../chunk-UHSC75L7.js';
29
+ import '../chunk-EAJKY27M.js';
30
30
  import '../chunk-W75ASXH4.js';
31
- import '../chunk-EBMFCF4P.js';
31
+ import '../chunk-6MB7CRME.js';
32
32
  import '../chunk-GCRKAFH7.js';
33
33
  import { loadAllFlows } from '../chunk-ICS76R4T.js';
34
34
  import '../chunk-GZWJGNNN.js';
35
35
  import '../chunk-FVTV7M76.js';
36
- import { AssetManager } from '../chunk-FEBLE7QX.js';
36
+ import { AssetManager } from '../chunk-EARKGKKB.js';
37
37
  import '../chunk-M2NLRGIX.js';
38
38
  import '../chunk-KTBKW2FI.js';
39
39
  import '../chunk-UQ6LFBPZ.js';
40
- import '../chunk-OQIBHB4F.js';
40
+ import '../chunk-YHXBQLXX.js';
41
41
  import '../chunk-DIKFRNCS.js';
42
42
  import { readLock, resolveSettings, globalSettingsPath, projectSettingsPath, loadSettings, saveSettings, portableSpawn, portableSpawnSync } from '../chunk-4RUVG5GX.js';
43
43
  import '../chunk-JKNWJ64A.js';
@@ -5646,7 +5646,7 @@ program.command("init [project-dir]").description("Initialize a project director
5646
5646
  }
5647
5647
  );
5648
5648
  program.command("setup").description("Interactive provider setup wizard").action(async () => {
5649
- const { cmdSetup } = await import('../setup-QAOUBECX.js');
5649
+ const { cmdSetup } = await import('../setup-WZFCLQ2J.js');
5650
5650
  await cmdSetup([], { projectDir: process.cwd() });
5651
5651
  });
5652
5652
  program.addCommand(makeInstallCommand());
@@ -1,6 +1,6 @@
1
- export { AbstractConnector, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, FlowAdapter, LogBuffer, ManagedGitconfigCollisionError, atomicReplaceCredential, buildConnectorPromptSection, buildSdkConnectorTools, createFsWatcher, createWorktree, defaultSpawn, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isPackageResolvable, listConnectors, listWorktrees, registerBuiltinConnectors, registerConnector, removeMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock } from '../chunk-UHSC75L7.js';
1
+ export { AbstractConnector, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, FlowAdapter, LogBuffer, ManagedGitconfigCollisionError, atomicReplaceCredential, buildConnectorPromptSection, buildSdkConnectorTools, createFsWatcher, createWorktree, defaultSpawn, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isPackageResolvable, listConnectors, listWorktrees, registerBuiltinConnectors, registerConnector, removeMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock } from '../chunk-EAJKY27M.js';
2
2
  export { EnvSecretProvider, ForgeSecretProvider, InMemorySecretProvider, LegacyAuthGrammarError, LockedSecretProvider, OAuthRequiredError, PreMintedSecretProvider, SecretProviderChain, createCliSecretProviderChain, createForgeSecretProviderChain, loadConnectorDeclarations, resolveAuth, resolveAuthRef, resolveBackendAuthFor } from '../chunk-W75ASXH4.js';
3
- export { PortPool, RcloneProcessManager } from '../chunk-EBMFCF4P.js';
3
+ export { PortPool, RcloneProcessManager, ensureDirMode } from '../chunk-6MB7CRME.js';
4
4
  export { renderOneDriveConfig, renderWebDAVConfig } from '../chunk-GCRKAFH7.js';
5
5
  import '../chunk-ICS76R4T.js';
6
6
  import '../chunk-GZWJGNNN.js';
@@ -1,4 +1,4 @@
1
- export { RcloneProcessManager, _routeRcloneLogLine } from '../chunk-EBMFCF4P.js';
1
+ export { RcloneProcessManager, _routeRcloneLogLine } from '../chunk-6MB7CRME.js';
2
2
  import '../chunk-NSBPE2FW.js';
3
3
  //# sourceMappingURL=rclone.js.map
4
4
  //# sourceMappingURL=rclone.js.map
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Shared filesystem helpers for connector infrastructure.
3
+ *
4
+ * @docLink packages/connectors/api-reference#fs-utils
5
+ */
6
+ import type { Logger } from "@skaile/workspaces/types";
7
+ /**
8
+ * mkdir(recursive) + chmod 0o770 in one call. The post-mkdir `chmod` is the
9
+ * load-bearing piece: `mkdir(mode:)` is ANDed with the process umask
10
+ * (typically 022 → effective mode 0o750), which strips the group-write bit
11
+ * that `fusermount3` requires on the rclone mountpoint and rclone needs on
12
+ * its vfs cache directory. Explicit `chmod` is umask-immune.
13
+ *
14
+ * EPERM on `chmod` is swallowed: when a foreign uid pre-created the
15
+ * directory (a stray uid-1000 process inside the container or a host-side
16
+ * platform process writing through the project bind-mount), the runner
17
+ * cannot chmod it. The platform's agent container entrypoint runs as root
18
+ * and heals the subtree on the next restart — see
19
+ * `platform/docker/agent/entrypoint.sh` `_skaile_heal_ownership`. A debug
20
+ * line is emitted when a logger is supplied so the rare-but-real heal
21
+ * trigger is observable in session logs without adding noise on the happy
22
+ * path.
23
+ *
24
+ * The chmod is *idempotent* (the syscall always fires, but a no-op when
25
+ * the mode is already 0o770), not a no-op — kernel behaviour for chmod is
26
+ * "set", not "set-if-different".
27
+ *
28
+ * @param dir Absolute or relative path to ensure exists at mode 0o770.
29
+ * @param log Optional logger. When provided, EPERM-on-chmod emits a
30
+ * `debug`-level entry under whatever taxonomy the caller's logger uses.
31
+ */
32
+ export declare function ensureDirMode(dir: string, log?: Logger): Promise<void>;
33
+ //# sourceMappingURL=fs-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../../../connectors/src/fs-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU5E"}
@@ -25,6 +25,7 @@ export { buildConnectorPromptSection, buildSdkConnectorTools, } from "./connecto
25
25
  export { getConnector, listConnectors, registerBuiltinConnectors, registerConnector, tryGetConnector, } from "./connector-registry.js";
26
26
  export type { ConnectContext, Connector, ConnectorChangeEvent, ConnectorDeclaration, ConnectorFactory, ConnectorFieldSpec, ConnectorHandle, ConnectorInfo, ConnectorReport, ConnectorStartupReport, FieldType, FilesystemFace, OperationDescriptor, RuntimeSkillDescriptor, TokenMediator, TokenMediatorResult, ToolFace, } from "./connector-types.js";
27
27
  export { ConnectorFieldMissingError, ConnectorStartupError } from "./connector-types.js";
28
+ export { ensureDirMode } from "./fs-utils.js";
28
29
  export { LogBuffer } from "./log-buffer.js";
29
30
  export type { RenderHelperOpts } from "./credential-helper-script.js";
30
31
  export { renderCredentialHelperScript } from "./credential-helper-script.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../connectors/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../connectors/src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rclone-process-manager.d.ts","sourceRoot":"","sources":["../../../connectors/src/rclone-process-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAMvD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,2FAA2F;IAC3F,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,YAAY,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5C,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;CAChB;AAmBD;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B;;;;OAIG;IACG,KAAK,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IA6I7D;;;;OAIG;IACG,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkD5E;;;OAGG;IACG,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BhD,iCAAiC;IAC3B,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CASpF;AAaD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CA4CnE"}
1
+ {"version":3,"file":"rclone-process-manager.d.ts","sourceRoot":"","sources":["../../../connectors/src/rclone-process-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAOvD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,2FAA2F;IAC3F,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,YAAY,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5C,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;CAChB;AAmBD;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B;;;;OAIG;IACG,KAAK,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAgJ7D;;;;OAIG;IACG,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkD5E;;;OAGG;IACG,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BhD,iCAAiC;IAC3B,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CASpF;AAaD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CA4CnE"}