@paperclipai/plugin-kubernetes 0.1.0 → 2026.620.0-canary.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/adapter-defaults.d.ts +29 -0
- package/dist/adapter-defaults.d.ts.map +1 -0
- package/dist/adapter-defaults.js +104 -0
- package/dist/adapter-defaults.js.map +1 -0
- package/dist/adapter-registry.d.ts +64 -0
- package/dist/adapter-registry.d.ts.map +1 -0
- package/dist/adapter-registry.js +25 -0
- package/dist/adapter-registry.js.map +1 -0
- package/dist/cilium-network-policy.d.ts +8 -0
- package/dist/cilium-network-policy.d.ts.map +1 -0
- package/dist/cilium-network-policy.js +57 -0
- package/dist/cilium-network-policy.js.map +1 -0
- package/dist/image-allowlist.d.ts +18 -0
- package/dist/image-allowlist.d.ts.map +1 -0
- package/dist/image-allowlist.js +39 -0
- package/dist/image-allowlist.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/job-orchestrator.d.ts +24 -0
- package/dist/job-orchestrator.d.ts.map +1 -0
- package/dist/job-orchestrator.js +90 -0
- package/dist/job-orchestrator.js.map +1 -0
- package/dist/kube-client.d.ts +15 -0
- package/dist/kube-client.d.ts.map +1 -0
- package/dist/kube-client.js +23 -0
- package/dist/kube-client.js.map +1 -0
- package/dist/lease-lifecycle.d.ts +62 -0
- package/dist/lease-lifecycle.d.ts.map +1 -0
- package/dist/lease-lifecycle.js +155 -0
- package/dist/lease-lifecycle.js.map +1 -0
- package/dist/manifest.d.ts +4 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +108 -0
- package/dist/manifest.js.map +1 -0
- package/dist/network-policy.d.ts +18 -0
- package/dist/network-policy.d.ts.map +1 -0
- package/dist/network-policy.js +113 -0
- package/dist/network-policy.js.map +1 -0
- package/dist/plugin.d.ts +3 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +687 -0
- package/dist/plugin.js.map +1 -0
- package/dist/pod-exec.d.ts +28 -0
- package/dist/pod-exec.d.ts.map +1 -0
- package/dist/pod-exec.js +164 -0
- package/dist/pod-exec.js.map +1 -0
- package/dist/pod-spec-builder.d.ts +25 -0
- package/dist/pod-spec-builder.d.ts.map +1 -0
- package/dist/pod-spec-builder.js +82 -0
- package/dist/pod-spec-builder.js.map +1 -0
- package/dist/sandbox-cr-builder.d.ts +40 -0
- package/dist/sandbox-cr-builder.d.ts.map +1 -0
- package/dist/sandbox-cr-builder.js +123 -0
- package/dist/sandbox-cr-builder.js.map +1 -0
- package/dist/sandbox-cr-orchestrator.d.ts +62 -0
- package/dist/sandbox-cr-orchestrator.d.ts.map +1 -0
- package/dist/sandbox-cr-orchestrator.js +248 -0
- package/dist/sandbox-cr-orchestrator.js.map +1 -0
- package/dist/sandbox-orchestrator.d.ts +39 -0
- package/dist/sandbox-orchestrator.d.ts.map +1 -0
- package/dist/sandbox-orchestrator.js +2 -0
- package/dist/sandbox-orchestrator.js.map +1 -0
- package/dist/secret-manager.d.ts +14 -0
- package/dist/secret-manager.d.ts.map +1 -0
- package/dist/secret-manager.js +39 -0
- package/dist/secret-manager.js.map +1 -0
- package/dist/tenant-orchestrator.d.ts +35 -0
- package/dist/tenant-orchestrator.d.ts.map +1 -0
- package/dist/tenant-orchestrator.js +263 -0
- package/dist/tenant-orchestrator.js.map +1 -0
- package/dist/types.d.ts +264 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +65 -0
- package/dist/types.js.map +1 -0
- package/dist/upload-interceptor.d.ts +44 -0
- package/dist/upload-interceptor.d.ts.map +1 -0
- package/dist/upload-interceptor.js +114 -0
- package/dist/upload-interceptor.js.map +1 -0
- package/dist/utils.d.ts +11 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +51 -0
- package/dist/utils.js.map +1 -0
- package/dist/worker.d.ts +3 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +5 -0
- package/dist/worker.js.map +1 -0
- package/package.json +4 -12
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAgBvD,OAAO,EACL,8BAA8B,GAG/B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,oEAAoE;AACpE,yEAAyE;AACzE,uBAAuB;AACvB,MAAM,0BAA0B,GAAG,WAAW,CAAC;AAE/C,mFAAmF;AACnF,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAErD,yEAAyE;AACzE,iCAAiC;AACjC,MAAM,sBAAsB,GAAG;IAC7B,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,MAAM;IACtB,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,MAAM;CACrB,CAAC;AAEF,SAAS,qBAAqB,CAAC,MAAgC,EAAE,SAAiB;IAChF,4EAA4E;IAC5E,+EAA+E;IAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAChE,OAAO,mBAAmB,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,sBAAsB;IAC7B,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,4EAA4E;IAC5E,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,yEAAyE;AACzE,4EAA4E;AAC5E,4EAA4E;AAC5E,0EAA0E;AAC1E,gFAAgF;AAChF,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAiC,CAAC;AAE3E,SAAS,4BAA4B,CAAC,OAAe;IACnD,IAAI,WAAW,GAAG,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC1C,yBAAyB,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,0EAA0E;AAC1E,qEAAqE;AACrE,uEAAuE;AACvE,8DAA8D;AAC9D,wEAAwE;AACxE,iEAAiE;AACjE,uEAAuE;AACvE,iDAAiD;AACjD,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;AAEhD,yEAAyE;AACzE,6EAA6E;AAC7E,sEAAsE;AACtE,4EAA4E;AAC5E,yCAAyC;AACzC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AACvC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAEnC,MAAM,MAAM,GAAG,YAAY,CAAC;IAC1B,KAAK,CAAC,KAAK,CAAC,GAAG;QACb,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,2BAA2B,CAC/B,MAA6C;QAE7C,MAAM,MAAM,GAAG,8BAA8B,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aAClD,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,CAAC,GAAG,eAAe,CAAC,UAAU,EAAE,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC5E,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,IAAI,GAAG,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,IAAI,CACX,+IAA+I,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,+UAA+U,CACpf,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CACX,kJAAkJ,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,qFAAqF,CAC7P,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAA8B,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAC9H,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,MAAoC;QAEpC,MAAM,MAAM,GAAG,8BAA8B,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,4CAA4C;gBACrD,QAAQ,EAAE;oBACR,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;iBAClD;aACF,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;QAC3B,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAElE,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,gBAAgB,CAAC;gBAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;YACpC,0EAA0E;YAC1E,uEAAuE;YACvE,6DAA6D;YAC7D,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,GAAI,GAA8C,CAAC,IAAI;uBAC3D,GAA8C,CAAC,UAAU,CAAC;gBAChE,IAAI,IAAI,KAAK,GAAG;oBAAE,MAAM,GAAG,CAAC;gBAC5B,gEAAgE;YAClE,CAAC;YACD,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,mDAAmD,SAAS,GAAG;gBACxE,QAAQ,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE;aAChD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,kCAAkC;gBAC3C,QAAQ,EAAE;oBACR,SAAS;oBACT,QAAQ,EAAE,YAAY;oBACtB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,yBAAyB;IAC7B,yEAAyE;IACzE,0EAA0E;IAC1E,0EAA0E;IAC1E,iEAAiE;IACjE,MAAsE;QAEtE,MAAM,MAAM,GAAG,8BAA8B,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAElE,4EAA4E;QAC5E,8EAA8E;QAC9E,gFAAgF;QAChF,gFAAgF;QAChF,uBAAuB;QACvB,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAE3F,yEAAyE;QACzE,2EAA2E;QAC3E,uEAAuE;QACvE,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,oBAAoB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzF,MAAM,iBAAiB,GAAG,CAAC,GAAG,sBAAsB,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC7F,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrE,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CACV,6LAA6L,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,iFAAiF,CAC3S,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,kKAAkK,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,+DAA+D,CAC9P,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,EAAE,GAAG,gBAAgB,CAAC;YAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QAEpC,0EAA0E;QAC1E,yCAAyC;QACzC,MAAM,eAAe,GAAG,kBAAkB,CAAC,oBAAoB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAElF,MAAM,YAAY,CAAC,OAAO,EAAE;YAC1B,SAAS;YACT,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,wBAAwB,EAAE,0BAA0B;YACpD,yBAAyB,EAAE,MAAM,CAAC,yBAAyB;YAC3D,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,gBAAgB,EAAE,CAAC,GAAG,eAAe,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC;YAC7E,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,aAAa,EAAE,sBAAsB;SACtC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,GAAG,OAAO,MAAM,CAAC;QAEpC,mEAAmE;QACnE,gEAAgE;QAChE,MAAM,MAAM,GAAG,eAAe,CAAC;YAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,KAAK;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,WAAW,EAAE,oBAAoB;SAClC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,YAAY,CACxB,EAAE,aAAa,EAAE,IAAI,EAAE,EACvB,eAAe,EACf,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAC/E,CAAC;QAEF,6EAA6E;QAC7E,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,KAAK,YAAY,CAAC;QAC3D,MAAM,YAAY,GAAG,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,eAAe,CAAC;QAElF,MAAM,QAAQ,GAAG,kBAAkB;YACjC,CAAC,CAAC,sBAAsB,CAAC;gBACrB,SAAS;gBACT,WAAW,EAAE,OAAO;gBACpB,WAAW,EAAE,oBAAoB;gBACjC,KAAK;gBACL,aAAa,EAAE,UAAU;gBACzB,kBAAkB,EAAE,sBAAsB;gBAC1C,MAAM;gBACN,SAAS,EAAE,MAAM,CAAC,gBAAgB,IAAI,EAAE;gBACxC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;aAC1C,CAAC;YACJ,CAAC,CAAC,gBAAgB,CAAC;gBACf,SAAS;gBACT,OAAO;gBACP,WAAW,EAAE,oBAAoB;gBACjC,KAAK;gBACL,aAAa,EAAE,UAAU;gBACzB,kBAAkB,EAAE,sBAAsB;gBAC1C,MAAM;gBACN,SAAS,EAAE,MAAM,CAAC,gBAAgB,IAAI,EAAE;gBACxC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,iBAAiB,EAAE,MAAM,CAAC,sBAAsB;gBAChD,uBAAuB,EAAE,MAAM,CAAC,0BAA0B;gBAC1D,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;aAC1C,CAAC,CAAC;QAEP,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEjF,8EAA8E;QAC9E,wDAAwD;QACxD,MAAM,UAAU,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;QACpD,MAAM,cAAc,GAAG,sBAAsB,EAAE,CAAC;QAEhD,8EAA8E;QAC9E,0DAA0D;QAC1D,4EAA4E;QAC5E,uEAAuE;QACvE,yCAAyC;QACzC,MAAM,kBAAkB,CAAC,OAAO,EAAE;YAChC,SAAS;YACT,UAAU;YACV,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;YACjD,eAAe,EAAE,kBAAkB,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,UAAU;YAC7E,SAAS,EAAE,OAAO;YAClB,QAAQ;YACR,cAAc;YACd,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAExE,MAAM,aAAa,GAA4B;YAC7C,SAAS;YACT,OAAO;YACP,OAAO;YACP,UAAU;YACV,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;QAEF,OAAO;YACL,eAAe,EAAE,OAAO;YACxB,QAAQ,EAAE,aAAmD;SAC9D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,MAA0C;QAE1C,MAAM,MAAM,GAAG,8BAA8B,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,aAAa,EAAE,SAAS,KAAK,QAAQ;YACjD,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS;YAChC,CAAC,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,YAAY,GAChB,OAAO,MAAM,CAAC,aAAa,EAAE,OAAO,KAAK,QAAQ;YAC/C,CAAC,CAAE,MAAM,CAAC,aAAa,CAAC,OAAgC;YACxD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,0EAA0E;QAC1E,0EAA0E;QAC1E,MAAM,UAAU,GACd,OAAO,MAAM,CAAC,aAAa,EAAE,UAAU,KAAK,QAAQ;YAClD,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU;YACjC,CAAC,CAAC,GAAG,MAAM,CAAC,eAAe,MAAM,CAAC;QAEtC,MAAM,EAAE,GAAG,gBAAgB,CAAC;YAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QAEpC,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE;YAC/C,SAAS;YACT,IAAI,EAAE,MAAM,CAAC,eAAe;YAC5B,OAAO,EAAE,YAAY;YACrB,cAAc,EAAE,uBAAuB;YACvC,MAAM,EAAE,oBAAoB;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACrB,uEAAuE;YACvE,yEAAyE;YACzE,yEAAyE;YACzE,yEAAyE;YACzE,8DAA8D;YAC9D,OAAO;gBACL,eAAe,EAAE,IAAI;gBACrB,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;aAClD,CAAC;QACJ,CAAC;QAED,2EAA2E;QAC3E,yEAAyE;QACzE,yBAAyB,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACzD,IAAI,YAAY,KAAK,YAAY,EAAE,CAAC;YAClC,mEAAmE;YACnE,6CAA6C;YAC7C,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,aAAa,GAA4B;YAC7C,SAAS;YACT,OAAO,EAAE,MAAM,CAAC,eAAe;YAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,UAAU;YACV,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,YAAY;SACtB,CAAC;QAEF,OAAO;YACL,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,QAAQ,EAAE;gBACR,GAAG,aAAa;gBAChB,YAAY,EAAE,IAAI;aACmB;SACxC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,6BAA6B,CACjC,MAA+C;QAE/C,qEAAqE;QACrE,sEAAsE;QACtE,wEAAwE;QACxE,MAAM,GAAG,GACP,MAAM,CAAC,SAAS,CAAC,UAAU,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC1E,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE;YACpC,CAAC,CAAC,YAAY,CAAC;QACnB,OAAO;YACL,GAAG;YACH,QAAQ,EAAE;gBACR,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,GAAG;aACf;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,MAA2C;QAE3C,IAAI,CAAC,MAAM,CAAC,eAAe;YAAE,OAAO;QACpC,MAAM,MAAM,GAAG,8BAA8B,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,aAAa,EAAE,SAAS,KAAK,QAAQ;YACjD,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS;YAChC,CAAC,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAEtD,MAAM,EAAE,GAAG,gBAAgB,CAAC;YAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QAEpC,MAAM,YAAY,GAChB,OAAO,MAAM,CAAC,aAAa,EAAE,OAAO,KAAK,QAAQ;YAC/C,CAAC,CAAE,MAAM,CAAC,aAAa,CAAC,OAAgC;YACxD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,MAAM,mBAAmB,GACvB,YAAY,KAAK,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,eAAe,CAAC;QAE1E,oEAAoE;QACpE,6EAA6E;QAC7E,sEAAsE;QACtE,yBAAyB,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACzD,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAErD,IAAI,CAAC;YACH,MAAM,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,sDAAsD;YACtD,MAAM,IAAI,GAAI,GAA8C,CAAC,IAAI;mBAC3D,GAA8C,CAAC,UAAU,CAAC;YAChE,IAAI,IAAI,KAAK,GAAG;gBAAE,MAAM,GAAG,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,MAA2C;QAE3C,IAAI,CAAC,MAAM,CAAC,eAAe;YAAE,OAAO;QACpC,MAAM,MAAM,GAAG,8BAA8B,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,aAAa,EAAE,SAAS,KAAK,QAAQ;YACjD,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS;YAChC,CAAC,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,YAAY,GAChB,OAAO,MAAM,CAAC,aAAa,EAAE,OAAO,KAAK,QAAQ;YAC/C,CAAC,CAAE,MAAM,CAAC,aAAa,CAAC,OAAgC;YACxD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,MAAM,UAAU,GACd,OAAO,MAAM,CAAC,aAAa,EAAE,UAAU,KAAK,QAAQ;YAClD,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU;YACjC,CAAC,CAAC,GAAG,MAAM,CAAC,eAAe,MAAM,CAAC;QACtC,MAAM,OAAO,GACX,OAAO,MAAM,CAAC,aAAa,EAAE,OAAO,KAAK,QAAQ;YACjD,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACrC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO;YAC9B,CAAC,CAAC,IAAI,CAAC;QAEX,mEAAmE;QACnE,+CAA+C;QAC/C,yBAAyB,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACzD,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAErD,MAAM,EAAE,GAAG,gBAAgB,CAAC;YAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QAEpC,0EAA0E;QAC1E,kEAAkE;QAClE,MAAM,qBAAqB,CAAC,OAAO,EAAE;YACnC,SAAS;YACT,IAAI,EAAE,MAAM,CAAC,eAAe;YAC5B,OAAO,EAAE,YAAY;YACrB,OAAO;YACP,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,MAAsC;QAEtC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAEpC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAC3B,OAAO;gBACL,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,+CAA+C;aACxD,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,8BAA8B,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,SAAS,GACb,OAAO,KAAK,CAAC,QAAQ,EAAE,SAAS,KAAK,QAAQ;YAC3C,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS;YAC1B,CAAC,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAEtD,uDAAuD;QACvD,MAAM,YAAY,GAChB,OAAO,KAAK,CAAC,QAAQ,EAAE,OAAO,KAAK,QAAQ;YACzC,CAAC,CAAE,KAAK,CAAC,QAAQ,CAAC,OAAgC;YAClD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAErB,MAAM,EAAE,GAAG,gBAAgB,CAAC;YAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QAEpC,MAAM,kBAAkB,GACtB,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,GAAG,CAAC;YAC5C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC;QAE3C,IAAI,YAAY,KAAK,YAAY,EAAE,CAAC;YAClC,2EAA2E;YAC3E,+EAA+E;YAC/E,4CAA4C;YAC5C,2DAA2D;YAE3D,IAAI,OAAO,GACT,OAAO,KAAK,CAAC,QAAQ,EAAE,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO;gBACnE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO;gBACxB,CAAC,CAAC,IAAI,CAAC;YAEX,oEAAoE;YACpE,0EAA0E;YAC1E,6BAA6B;YAC7B,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAE9E,yEAAyE;YACzE,sEAAsE;YACtE,+CAA+C;YAC/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEpC,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,MAAM,qBAAqB,CAAC,iBAAiB,CAC3C,OAAO,EACP,SAAS,EACT,KAAK,CAAC,eAAe,EACrB,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,EAAE,CAChD,CAAC;oBACF,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBACnD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;wBACzC,OAAO;4BACL,QAAQ,EAAE,IAAI;4BACd,QAAQ,EAAE,IAAI;4BACd,MAAM,EAAE,EAAE;4BACV,MAAM,EAAE,2CAA2C,kBAAkB,IAAI;4BACzE,QAAQ,EAAE;gCACR,QAAQ,EAAE,YAAY;gCACtB,OAAO,EAAE,YAAY;gCACrB,SAAS;gCACT,WAAW,EAAE,KAAK,CAAC,eAAe;6BACnC;yBACF,CAAC;oBACJ,CAAC;oBACD,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,6DAA6D;YAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAC3C,OAAO,EACP,SAAS,EACT,KAAK,CAAC,eAAe,CACtB,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO;oBACL,QAAQ,EAAE,CAAC;oBACX,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,yDAAyD;oBACjE,QAAQ,EAAE;wBACR,QAAQ,EAAE,YAAY;wBACtB,OAAO,EAAE,YAAY;wBACrB,SAAS;wBACT,WAAW,EAAE,KAAK,CAAC,eAAe;qBACnC;iBACF,CAAC;YACJ,CAAC;YAED,qEAAqE;YACrE,qEAAqE;YACrE,0EAA0E;YAC1E,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAE3D,yEAAyE;YACzE,yEAAyE;YACzE,sEAAsE;YACtE,6BAA6B;YAC7B,MAAM,WAAW,GACf,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;gBACjE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACT,CAAC,CAAC,IAAI,CAAC;YACX,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,QAAQ,GAAG,4BAA4B,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACzF,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBAC9B,OAAO;wBACL,QAAQ,EAAE,CAAC;wBACX,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,EAAE;wBACV,MAAM,EAAE,EAAE;wBACV,QAAQ,EAAE;4BACR,QAAQ,EAAE,YAAY;4BACtB,OAAO,EAAE,YAAY;4BACrB,SAAS;4BACT,WAAW,EAAE,KAAK,CAAC,eAAe;4BAClC,OAAO;4BACP,UAAU,EAAE,KAAK;yBAClB;qBACF,CAAC;gBACJ,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBAChC,mEAAmE;oBACnE,iEAAiE;oBACjE,oEAAoE;oBACpE,sEAAsE;oBACtE,6DAA6D;oBAC7D,wDAAwD;oBACxD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAC7D,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAC7C,CAAC,EACD,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAC3C,CAAC;oBACF,MAAM,MAAM,GACV,aAAa,GAAG,OAAO;wBACvB,WAAW,UAAU,CAAC,MAAM,mBAAmB,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC;oBAC9E,qEAAqE;oBACrE,iEAAiE;oBACjE,+DAA+D;oBAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,KAAK,EACL,kBAAkB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,CACrD,CAAC;oBACF,IAAI,WAAiE,CAAC;oBACtE,IAAI,CAAC;wBACH,WAAW,GAAG,MAAM,SAAS,CAC3B,EAAE,EACF,SAAS,EACT,OAAO,EACP,OAAO,EACP,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,EACzB,UAAU,EACV,cAAc,CACf,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO;4BACL,QAAQ,EAAE,IAAI;4BACd,QAAQ,EAAE,IAAI;4BACd,MAAM,EAAE,EAAE;4BACV,MAAM,EAAE,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;4BACvF,QAAQ,EAAE;gCACR,QAAQ,EAAE,YAAY;gCACtB,OAAO,EAAE,YAAY;gCACrB,SAAS;gCACT,WAAW,EAAE,KAAK,CAAC,eAAe;gCAClC,OAAO;gCACP,UAAU,EAAE,OAAO;6BACpB;yBACF,CAAC;oBACJ,CAAC;oBACD,OAAO;wBACL,QAAQ,EAAE,WAAW,CAAC,QAAQ;wBAC9B,QAAQ,EAAE,KAAK;wBACf,MAAM,EAAE,WAAW,CAAC,MAAM;wBAC1B,MAAM,EAAE,WAAW,CAAC,MAAM;wBAC1B,QAAQ,EAAE;4BACR,QAAQ,EAAE,YAAY;4BACtB,OAAO,EAAE,YAAY;4BACrB,SAAS;4BACT,WAAW,EAAE,KAAK,CAAC,eAAe;4BAClC,OAAO;4BACP,UAAU,EAAE,OAAO;4BACnB,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;yBAC7C;qBACF,CAAC;gBACJ,CAAC;gBACD,kEAAkE;YACpE,CAAC;YAED,MAAM,eAAe,GACnB,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBACnC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;gBACpB,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;oBAClB,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC;oBAC7B,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAE1B,gFAAgF;YAChF,+EAA+E;YAC/E,iFAAiF;YACjF,gFAAgF;YAChF,qBAAqB;YACrB,MAAM,WAAW,GAAG,kBAAkB,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAEpE,yEAAyE;YACzE,yEAAyE;YACzE,4CAA4C;YAC5C,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CACjC,KAAK,EACL,kBAAkB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,CACrD,CAAC;YAEF,IAAI,UAAgE,CAAC;YACrE,IAAI,CAAC;gBACH,UAAU,GAAG,MAAM,SAAS,CAC1B,EAAE,EACF,SAAS,EACT,OAAO,EACP,OAAO,EACP,WAAW,EACX,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAC3D,kBAAkB,CACnB,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,mEAAmE;gBACnE,mDAAmD;gBACnD,OAAO;oBACL,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;oBACxD,QAAQ,EAAE;wBACR,QAAQ,EAAE,YAAY;wBACtB,OAAO,EAAE,YAAY;wBACrB,SAAS;wBACT,WAAW,EAAE,KAAK,CAAC,eAAe;wBAClC,OAAO;qBACR;iBACF,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,QAAQ,EAAE;oBACR,QAAQ,EAAE,YAAY;oBACtB,OAAO,EAAE,YAAY;oBACrB,SAAS;oBACT,WAAW,EAAE,KAAK,CAAC,eAAe;oBAClC,OAAO;iBACR;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,2EAA2E;YAC3E,qFAAqF;YACrF,yEAAyE;YACzE,wBAAwB;YACxB,EAAE;YACF,yEAAyE;YAEzE,IAAI,MAAM,CAAC;YACX,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,eAAe,CAAC,iBAAiB,CAC9C,OAAO,EACP,SAAS,EACT,KAAK,CAAC,eAAe,EACrB,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,EAAE,CAChD,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;oBACnC,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM,GAAG,IAAI,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,6BAA6B;YAC7B,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,QAAQ,EAAE,OAAO,KAAK,QAAQ;gBACzC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO;gBACxB,CAAC,CAAC,MAAM,eAAe,CAAC,OAAO,CAC3B,OAAO,EACP,SAAS,EACT,KAAK,CAAC,eAAe,CACtB,CAAC;YAER,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,MAAM,YAAY,GAAa,EAAE,CAAC;YAElC,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,eAAe,CAAC,UAAU,CAC9B,OAAO,EACP,SAAS,EACT,OAAO,EACP,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;oBACrB,IAAI,MAAM,KAAK,QAAQ;wBAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;wBAC5C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,CAAC,CACF,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,QAAQ;gBACR,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,QAAQ,EAAE;oBACR,QAAQ,EAAE,YAAY;oBACtB,OAAO,EAAE,KAAK;oBACd,SAAS;oBACT,OAAO,EAAE,KAAK,CAAC,eAAe;oBAC9B,OAAO,EAAE,OAAO,IAAI,IAAI;oBACxB,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,IAAI;iBAC7B;aACF,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exec a command inside a running pod container using the Kubernetes exec API.
|
|
3
|
+
*
|
|
4
|
+
* Uses @kubernetes/client-node's Exec class, which opens a WebSocket to the
|
|
5
|
+
* kube-apiserver and streams stdout/stderr. The statusCallback receives a V1Status
|
|
6
|
+
* with status="Success" or status="Failure" + details.causes[{reason:"ExitCode"}].
|
|
7
|
+
*
|
|
8
|
+
* NOTE: tty=false so stdout and stderr arrive on separate channels. If tty=true
|
|
9
|
+
* were used, they would be merged onto stdout and the exit code would not be
|
|
10
|
+
* reliable from the status callback on older cluster versions.
|
|
11
|
+
*
|
|
12
|
+
* Stdin handling: @kubernetes/client-node v1.x attaches `stdin.on("end", ()
|
|
13
|
+
* => ws.close())`, which closes the entire WebSocket as soon as our PassThrough
|
|
14
|
+
* ends — BEFORE the pod's command has a chance to flush and BEFORE the
|
|
15
|
+
* statusCallback fires. We work around this by removing that listener after
|
|
16
|
+
* exec setup completes so EOF on stdin only signals the pod (via a stdin-
|
|
17
|
+
* channel close frame implicit in our flow) without tearing down the
|
|
18
|
+
* connection. We then close the WebSocket explicitly inside the statusCallback.
|
|
19
|
+
*/
|
|
20
|
+
import type { KubeConfig } from "@kubernetes/client-node";
|
|
21
|
+
export declare function shQuote(segment: string): string;
|
|
22
|
+
export declare function wrapCommandWithEnv(command: string[], env: Record<string, string> | undefined | null): string[];
|
|
23
|
+
export declare function execInPod(kc: KubeConfig, namespace: string, podName: string, containerName: string, command: string[], stdin?: string | Buffer, timeoutMs?: number): Promise<{
|
|
24
|
+
exitCode: number;
|
|
25
|
+
stdout: string;
|
|
26
|
+
stderr: string;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=pod-exec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pod-exec.d.ts","sourceRoot":"","sources":["../src/pod-exec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAS1D,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/C;AASD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,IAAI,GAC7C,MAAM,EAAE,CAQV;AAED,wBAAsB,SAAS,CAC7B,EAAE,EAAE,UAAU,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAsI/D"}
|
package/dist/pod-exec.js
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exec a command inside a running pod container using the Kubernetes exec API.
|
|
3
|
+
*
|
|
4
|
+
* Uses @kubernetes/client-node's Exec class, which opens a WebSocket to the
|
|
5
|
+
* kube-apiserver and streams stdout/stderr. The statusCallback receives a V1Status
|
|
6
|
+
* with status="Success" or status="Failure" + details.causes[{reason:"ExitCode"}].
|
|
7
|
+
*
|
|
8
|
+
* NOTE: tty=false so stdout and stderr arrive on separate channels. If tty=true
|
|
9
|
+
* were used, they would be merged onto stdout and the exit code would not be
|
|
10
|
+
* reliable from the status callback on older cluster versions.
|
|
11
|
+
*
|
|
12
|
+
* Stdin handling: @kubernetes/client-node v1.x attaches `stdin.on("end", ()
|
|
13
|
+
* => ws.close())`, which closes the entire WebSocket as soon as our PassThrough
|
|
14
|
+
* ends — BEFORE the pod's command has a chance to flush and BEFORE the
|
|
15
|
+
* statusCallback fires. We work around this by removing that listener after
|
|
16
|
+
* exec setup completes so EOF on stdin only signals the pod (via a stdin-
|
|
17
|
+
* channel close frame implicit in our flow) without tearing down the
|
|
18
|
+
* connection. We then close the WebSocket explicitly inside the statusCallback.
|
|
19
|
+
*/
|
|
20
|
+
import { Exec } from "@kubernetes/client-node";
|
|
21
|
+
import { PassThrough } from "node:stream";
|
|
22
|
+
// Single-quote a string for safe interpolation into a sh -c script. Wraps in
|
|
23
|
+
// '...' and escapes any embedded single quotes via '\'' (close, escape, reopen).
|
|
24
|
+
export function shQuote(segment) {
|
|
25
|
+
return `'${segment.replace(/'/g, "'\\''")}'`;
|
|
26
|
+
}
|
|
27
|
+
// Wrap a command so the given env vars are exported before it runs. The Kubernetes
|
|
28
|
+
// exec API has no env field, so the only way to give an exec'd process additional
|
|
29
|
+
// env is to run it under a shell that exports the vars and then `exec`s the real
|
|
30
|
+
// command. PATH is deliberately skipped (the caller's PATH is the orchestrator's,
|
|
31
|
+
// not the sandbox image's, and overriding it would break command resolution), and
|
|
32
|
+
// only valid shell identifiers are exported. Returns the original command unchanged
|
|
33
|
+
// when there is nothing to apply.
|
|
34
|
+
export function wrapCommandWithEnv(command, env) {
|
|
35
|
+
const entries = Object.entries(env && typeof env === "object" ? env : {}).filter(([key, value]) => typeof value === "string" && key !== "PATH" && /^[A-Za-z_][A-Za-z0-9_]*$/.test(key));
|
|
36
|
+
if (entries.length === 0)
|
|
37
|
+
return command;
|
|
38
|
+
const exports = entries.map(([k, v]) => `export ${k}=${shQuote(v)};`).join(" ");
|
|
39
|
+
return ["/bin/sh", "-c", `${exports} exec ${command.map(shQuote).join(" ")}`];
|
|
40
|
+
}
|
|
41
|
+
export async function execInPod(kc, namespace, podName, containerName, command, stdin, timeoutMs) {
|
|
42
|
+
const exec = new Exec(kc);
|
|
43
|
+
const stdoutStream = new PassThrough();
|
|
44
|
+
const stderrStream = new PassThrough();
|
|
45
|
+
const stdinPayload = Buffer.isBuffer(stdin) ? stdin
|
|
46
|
+
: typeof stdin === "string" && stdin.length > 0 ? Buffer.from(stdin, "utf-8")
|
|
47
|
+
: null;
|
|
48
|
+
const stdinStream = stdinPayload ? new PassThrough() : null;
|
|
49
|
+
// When stdin is provided, wrap the command so its stdin is bounded by
|
|
50
|
+
// `head -c <N>`. Any program reading stdin (`cat`, `claude --print -`,
|
|
51
|
+
// `base64 -d`, etc.) waits for EOF to terminate the read. With the k8s
|
|
52
|
+
// client v0.21.0 stdin-end -> ws.close() limitation (see comment above)
|
|
53
|
+
// we can't reliably deliver EOF without tearing down the exec — so we
|
|
54
|
+
// pipe `head -c <N>` (which exits after exactly N bytes) into the
|
|
55
|
+
// original command. The pipe propagates the exit code of the RHS so the
|
|
56
|
+
// statusCallback still reflects the real command's exit status.
|
|
57
|
+
//
|
|
58
|
+
// NOTE: `stdinPayload.length` is the Buffer's BYTE length (correct for
|
|
59
|
+
// `head -c` which counts bytes). Do NOT substitute `string.length` here
|
|
60
|
+
// if the input is ever non-ASCII — UTF-8 multi-byte sequences would
|
|
61
|
+
// give a byte count that differs from JS character count.
|
|
62
|
+
const effectiveCommand = stdinPayload
|
|
63
|
+
? ["/bin/sh", "-c", `head -c ${stdinPayload.length} | ${command.map(shQuote).join(" ")}`]
|
|
64
|
+
: command;
|
|
65
|
+
let stdoutData = "";
|
|
66
|
+
let stderrData = "";
|
|
67
|
+
stdoutStream.on("data", (chunk) => {
|
|
68
|
+
stdoutData += chunk.toString("utf-8");
|
|
69
|
+
});
|
|
70
|
+
stderrStream.on("data", (chunk) => {
|
|
71
|
+
stderrData += chunk.toString("utf-8");
|
|
72
|
+
});
|
|
73
|
+
return await new Promise((resolve, reject) => {
|
|
74
|
+
let ws = null;
|
|
75
|
+
let resolved = false;
|
|
76
|
+
let pendingExitCode = null;
|
|
77
|
+
let stdoutEnded = false;
|
|
78
|
+
let stderrEnded = false;
|
|
79
|
+
// The k8s client writes stdout/stderr to our PassThroughs synchronously
|
|
80
|
+
// and calls statusCallback in the same WS message handler. But `data`
|
|
81
|
+
// events on the PassThroughs fire on process.nextTick, so resolving
|
|
82
|
+
// inside statusCallback captures stdoutData/stderrData BEFORE the final
|
|
83
|
+
// bytes have been appended. Wait for both streams' `end` events (which
|
|
84
|
+
// the k8s client triggers via `stream.end()` when it processes the
|
|
85
|
+
// status frame) so all buffered data has been drained into our string
|
|
86
|
+
// accumulators before resolving.
|
|
87
|
+
//
|
|
88
|
+
// Watchdog: if the WebSocket drops silently after setup (network blip,
|
|
89
|
+
// pod OOM-killed mid-exec, apiserver restart) the statusCallback never
|
|
90
|
+
// fires and the stream `end` events never arrive. Without a timer the
|
|
91
|
+
// calling worker hangs forever. Reject with a clear error so the caller
|
|
92
|
+
// can retry or surface the failure.
|
|
93
|
+
let watchdog = null;
|
|
94
|
+
if (typeof timeoutMs === "number" && timeoutMs > 0) {
|
|
95
|
+
watchdog = setTimeout(() => {
|
|
96
|
+
if (resolved)
|
|
97
|
+
return;
|
|
98
|
+
resolved = true;
|
|
99
|
+
try {
|
|
100
|
+
ws?.close();
|
|
101
|
+
}
|
|
102
|
+
catch { /* ignore */ }
|
|
103
|
+
reject(new Error(`execInPod timed out after ${timeoutMs}ms (pod=${podName}, container=${containerName}, cmd0=${effectiveCommand[0] ?? ""}). The WebSocket likely dropped before the command produced a status frame.`));
|
|
104
|
+
}, timeoutMs);
|
|
105
|
+
}
|
|
106
|
+
const tryFinish = () => {
|
|
107
|
+
if (resolved)
|
|
108
|
+
return;
|
|
109
|
+
if (pendingExitCode === null)
|
|
110
|
+
return;
|
|
111
|
+
if (!stdoutEnded || !stderrEnded)
|
|
112
|
+
return;
|
|
113
|
+
resolved = true;
|
|
114
|
+
if (watchdog)
|
|
115
|
+
clearTimeout(watchdog);
|
|
116
|
+
try {
|
|
117
|
+
ws?.close();
|
|
118
|
+
}
|
|
119
|
+
catch { /* ignore */ }
|
|
120
|
+
resolve({ exitCode: pendingExitCode, stdout: stdoutData, stderr: stderrData });
|
|
121
|
+
};
|
|
122
|
+
stdoutStream.on("end", () => { stdoutEnded = true; tryFinish(); });
|
|
123
|
+
stderrStream.on("end", () => { stderrEnded = true; tryFinish(); });
|
|
124
|
+
const execPromise = exec.exec(namespace, podName, containerName, effectiveCommand, stdoutStream, stderrStream, stdinStream, false, // tty=false: keep stdout/stderr on separate channels
|
|
125
|
+
(status) => {
|
|
126
|
+
if (status.status === "Success") {
|
|
127
|
+
pendingExitCode = 0;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
const causes = status.details?.causes ?? [];
|
|
131
|
+
const exitCodeCause = causes.find((c) => c.reason === "ExitCode");
|
|
132
|
+
pendingExitCode = exitCodeCause?.message
|
|
133
|
+
? Number(exitCodeCause.message)
|
|
134
|
+
: 1;
|
|
135
|
+
}
|
|
136
|
+
tryFinish();
|
|
137
|
+
});
|
|
138
|
+
execPromise
|
|
139
|
+
.then((webSocket) => {
|
|
140
|
+
ws = webSocket;
|
|
141
|
+
if (stdinStream && stdinPayload) {
|
|
142
|
+
// Remove the default `end -> ws.close()` listener that k8s client
|
|
143
|
+
// attaches in handleStandardInput; it tears down the connection
|
|
144
|
+
// before the pod's command can finish flushing. We manage ws
|
|
145
|
+
// closure inside `tryFinish()` instead.
|
|
146
|
+
stdinStream.removeAllListeners("end");
|
|
147
|
+
stdinStream.end(stdinPayload);
|
|
148
|
+
}
|
|
149
|
+
else if (stdinStream) {
|
|
150
|
+
stdinStream.removeAllListeners("end");
|
|
151
|
+
stdinStream.end();
|
|
152
|
+
}
|
|
153
|
+
})
|
|
154
|
+
.catch((err) => {
|
|
155
|
+
if (resolved)
|
|
156
|
+
return;
|
|
157
|
+
resolved = true;
|
|
158
|
+
if (watchdog)
|
|
159
|
+
clearTimeout(watchdog);
|
|
160
|
+
reject(err);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=pod-exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pod-exec.js","sourceRoot":"","sources":["../src/pod-exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface BuildJobManifestInput {
|
|
2
|
+
namespace: string;
|
|
3
|
+
jobName: string;
|
|
4
|
+
adapterType: string;
|
|
5
|
+
image: string;
|
|
6
|
+
envSecretName: string;
|
|
7
|
+
serviceAccountName: string;
|
|
8
|
+
labels: Record<string, string>;
|
|
9
|
+
resources: {
|
|
10
|
+
requests?: {
|
|
11
|
+
cpu?: string;
|
|
12
|
+
memory?: string;
|
|
13
|
+
};
|
|
14
|
+
limits?: {
|
|
15
|
+
cpu?: string;
|
|
16
|
+
memory?: string;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
runtimeClassName?: string;
|
|
20
|
+
activeDeadlineSec: number;
|
|
21
|
+
ttlSecondsAfterFinished: number;
|
|
22
|
+
imagePullSecrets?: string[];
|
|
23
|
+
}
|
|
24
|
+
export declare function buildJobManifest(input: BuildJobManifestInput): Record<string, unknown>;
|
|
25
|
+
//# sourceMappingURL=pod-spec-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pod-spec-builder.d.ts","sourceRoot":"","sources":["../src/pod-spec-builder.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE;QACT,QAAQ,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7C,MAAM,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5C,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgFtF"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export function buildJobManifest(input) {
|
|
2
|
+
const podLabels = {
|
|
3
|
+
...input.labels,
|
|
4
|
+
"paperclip.io/role": "agent",
|
|
5
|
+
};
|
|
6
|
+
return {
|
|
7
|
+
apiVersion: "batch/v1",
|
|
8
|
+
kind: "Job",
|
|
9
|
+
metadata: {
|
|
10
|
+
name: input.jobName,
|
|
11
|
+
namespace: input.namespace,
|
|
12
|
+
labels: { ...input.labels },
|
|
13
|
+
},
|
|
14
|
+
spec: {
|
|
15
|
+
backoffLimit: 0,
|
|
16
|
+
ttlSecondsAfterFinished: input.ttlSecondsAfterFinished,
|
|
17
|
+
activeDeadlineSeconds: input.activeDeadlineSec,
|
|
18
|
+
template: {
|
|
19
|
+
metadata: { labels: podLabels },
|
|
20
|
+
spec: {
|
|
21
|
+
serviceAccountName: input.serviceAccountName,
|
|
22
|
+
// Agent containers call back to paperclip-server via HTTPS egress;
|
|
23
|
+
// they never call the Kubernetes API, so mounting an SA token is
|
|
24
|
+
// unnecessary attack surface.
|
|
25
|
+
automountServiceAccountToken: false,
|
|
26
|
+
restartPolicy: "Never",
|
|
27
|
+
...(input.runtimeClassName ? { runtimeClassName: input.runtimeClassName } : {}),
|
|
28
|
+
...(input.imagePullSecrets && input.imagePullSecrets.length > 0
|
|
29
|
+
? { imagePullSecrets: input.imagePullSecrets.map((name) => ({ name })) }
|
|
30
|
+
: {}),
|
|
31
|
+
securityContext: {
|
|
32
|
+
runAsNonRoot: true,
|
|
33
|
+
runAsUser: 1000,
|
|
34
|
+
runAsGroup: 1000,
|
|
35
|
+
fsGroup: 1000,
|
|
36
|
+
fsGroupChangePolicy: "OnRootMismatch",
|
|
37
|
+
seccompProfile: { type: "RuntimeDefault" },
|
|
38
|
+
},
|
|
39
|
+
containers: [
|
|
40
|
+
{
|
|
41
|
+
name: "agent",
|
|
42
|
+
image: input.image,
|
|
43
|
+
imagePullPolicy: "IfNotPresent",
|
|
44
|
+
command: ["/usr/bin/tini", "--", "/usr/local/bin/paperclip-agent-shim"],
|
|
45
|
+
// HOME must point at a writable mount; the image's default
|
|
46
|
+
// HOME is inside the readOnly root filesystem. Agent runtimes
|
|
47
|
+
// can silently exit with code 0 and no output when HOME is
|
|
48
|
+
// unwritable, so set this explicitly.
|
|
49
|
+
env: [{ name: "HOME", value: "/home/paperclip" }],
|
|
50
|
+
envFrom: [{ secretRef: { name: input.envSecretName } }],
|
|
51
|
+
securityContext: {
|
|
52
|
+
runAsNonRoot: true,
|
|
53
|
+
runAsUser: 1000,
|
|
54
|
+
runAsGroup: 1000,
|
|
55
|
+
readOnlyRootFilesystem: true,
|
|
56
|
+
allowPrivilegeEscalation: false,
|
|
57
|
+
capabilities: { drop: ["ALL"] },
|
|
58
|
+
},
|
|
59
|
+
resources: {
|
|
60
|
+
requests: input.resources.requests ?? { cpu: "250m", memory: "512Mi" },
|
|
61
|
+
limits: input.resources.limits ?? { cpu: "2", memory: "4Gi" },
|
|
62
|
+
},
|
|
63
|
+
volumeMounts: [
|
|
64
|
+
{ name: "workspace", mountPath: "/workspace" },
|
|
65
|
+
{ name: "home", mountPath: "/home/paperclip" },
|
|
66
|
+
{ name: "cache", mountPath: "/home/paperclip/.cache" },
|
|
67
|
+
{ name: "tmp", mountPath: "/tmp" },
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
volumes: [
|
|
72
|
+
{ name: "workspace", emptyDir: { sizeLimit: "8Gi" } },
|
|
73
|
+
{ name: "home", emptyDir: { sizeLimit: "1Gi" } },
|
|
74
|
+
{ name: "cache", emptyDir: { sizeLimit: "1Gi" } },
|
|
75
|
+
{ name: "tmp", emptyDir: { sizeLimit: "2Gi" } },
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=pod-spec-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pod-spec-builder.js","sourceRoot":"","sources":["../src/pod-spec-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds a kubernetes-sigs/agent-sandbox Sandbox CR manifest.
|
|
3
|
+
*
|
|
4
|
+
* The Sandbox CR creates a long-lived pod (sleep infinity entrypoint) into
|
|
5
|
+
* which paperclip-server can exec arbitrary commands. This solves the
|
|
6
|
+
* architectural mismatch with the batch/v1 Job backend, which only supports
|
|
7
|
+
* a single one-shot entrypoint — not the multi-command adapter-install pattern
|
|
8
|
+
* used by paperclip-server.
|
|
9
|
+
*
|
|
10
|
+
* Security baseline is identical to buildJobManifest (pod-spec-builder.ts):
|
|
11
|
+
* non-root, drop ALL caps, read-only rootFS, Tini PID 1, seccomp
|
|
12
|
+
* RuntimeDefault, fsGroupChangePolicy OnRootMismatch, automountSAToken=false.
|
|
13
|
+
*
|
|
14
|
+
* NOTE: paperclip-server runs OUTSIDE the cluster, so we cannot set ownerReferences
|
|
15
|
+
* on the Sandbox CR (the owner would need to be an in-cluster resource). The
|
|
16
|
+
* release path is explicit delete via sandboxCrOrchestrator.release().
|
|
17
|
+
*/
|
|
18
|
+
export interface BuildSandboxCrManifestInput {
|
|
19
|
+
namespace: string;
|
|
20
|
+
sandboxName: string;
|
|
21
|
+
adapterType: string;
|
|
22
|
+
image: string;
|
|
23
|
+
envSecretName: string;
|
|
24
|
+
serviceAccountName: string;
|
|
25
|
+
labels: Record<string, string>;
|
|
26
|
+
resources: {
|
|
27
|
+
requests?: {
|
|
28
|
+
cpu?: string;
|
|
29
|
+
memory?: string;
|
|
30
|
+
};
|
|
31
|
+
limits?: {
|
|
32
|
+
cpu?: string;
|
|
33
|
+
memory?: string;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
runtimeClassName?: string;
|
|
37
|
+
imagePullSecrets?: string[];
|
|
38
|
+
}
|
|
39
|
+
export declare function buildSandboxCrManifest(input: BuildSandboxCrManifestInput): Record<string, unknown>;
|
|
40
|
+
//# sourceMappingURL=sandbox-cr-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-cr-builder.d.ts","sourceRoot":"","sources":["../src/sandbox-cr-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE;QACT,QAAQ,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7C,MAAM,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5C,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,2BAA2B,GACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAwGzB"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds a kubernetes-sigs/agent-sandbox Sandbox CR manifest.
|
|
3
|
+
*
|
|
4
|
+
* The Sandbox CR creates a long-lived pod (sleep infinity entrypoint) into
|
|
5
|
+
* which paperclip-server can exec arbitrary commands. This solves the
|
|
6
|
+
* architectural mismatch with the batch/v1 Job backend, which only supports
|
|
7
|
+
* a single one-shot entrypoint — not the multi-command adapter-install pattern
|
|
8
|
+
* used by paperclip-server.
|
|
9
|
+
*
|
|
10
|
+
* Security baseline is identical to buildJobManifest (pod-spec-builder.ts):
|
|
11
|
+
* non-root, drop ALL caps, read-only rootFS, Tini PID 1, seccomp
|
|
12
|
+
* RuntimeDefault, fsGroupChangePolicy OnRootMismatch, automountSAToken=false.
|
|
13
|
+
*
|
|
14
|
+
* NOTE: paperclip-server runs OUTSIDE the cluster, so we cannot set ownerReferences
|
|
15
|
+
* on the Sandbox CR (the owner would need to be an in-cluster resource). The
|
|
16
|
+
* release path is explicit delete via sandboxCrOrchestrator.release().
|
|
17
|
+
*/
|
|
18
|
+
export function buildSandboxCrManifest(input) {
|
|
19
|
+
const podLabels = {
|
|
20
|
+
...input.labels,
|
|
21
|
+
"paperclip.io/role": "agent",
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
apiVersion: "agents.x-k8s.io/v1alpha1",
|
|
25
|
+
kind: "Sandbox",
|
|
26
|
+
metadata: {
|
|
27
|
+
name: input.sandboxName,
|
|
28
|
+
namespace: input.namespace,
|
|
29
|
+
labels: { ...input.labels },
|
|
30
|
+
// No ownerReferences: paperclip-server is out-of-cluster. Release is
|
|
31
|
+
// explicit delete.
|
|
32
|
+
},
|
|
33
|
+
spec: {
|
|
34
|
+
podTemplate: {
|
|
35
|
+
metadata: {
|
|
36
|
+
labels: podLabels,
|
|
37
|
+
},
|
|
38
|
+
spec: {
|
|
39
|
+
serviceAccountName: input.serviceAccountName,
|
|
40
|
+
// Agent containers call back to paperclip-server via HTTPS egress;
|
|
41
|
+
// they never call the Kubernetes API, so mounting an SA token is
|
|
42
|
+
// unnecessary attack surface.
|
|
43
|
+
automountServiceAccountToken: false,
|
|
44
|
+
// Sandbox controller requires restartPolicy: Always so the pod
|
|
45
|
+
// stays running between exec calls.
|
|
46
|
+
restartPolicy: "Always",
|
|
47
|
+
...(input.runtimeClassName
|
|
48
|
+
? { runtimeClassName: input.runtimeClassName }
|
|
49
|
+
: {}),
|
|
50
|
+
...(input.imagePullSecrets && input.imagePullSecrets.length > 0
|
|
51
|
+
? {
|
|
52
|
+
imagePullSecrets: input.imagePullSecrets.map((name) => ({
|
|
53
|
+
name,
|
|
54
|
+
})),
|
|
55
|
+
}
|
|
56
|
+
: {}),
|
|
57
|
+
securityContext: {
|
|
58
|
+
runAsNonRoot: true,
|
|
59
|
+
runAsUser: 1000,
|
|
60
|
+
runAsGroup: 1000,
|
|
61
|
+
fsGroup: 1000,
|
|
62
|
+
fsGroupChangePolicy: "OnRootMismatch",
|
|
63
|
+
seccompProfile: { type: "RuntimeDefault" },
|
|
64
|
+
},
|
|
65
|
+
containers: [
|
|
66
|
+
{
|
|
67
|
+
name: "agent",
|
|
68
|
+
image: input.image,
|
|
69
|
+
imagePullPolicy: "IfNotPresent",
|
|
70
|
+
// sleep infinity keeps the pod running; paperclip-server execs
|
|
71
|
+
// commands into it via Kubernetes exec API. Tini as PID 1 for
|
|
72
|
+
// proper signal forwarding and zombie reaping.
|
|
73
|
+
command: [
|
|
74
|
+
"/usr/bin/tini",
|
|
75
|
+
"--",
|
|
76
|
+
"/bin/sh",
|
|
77
|
+
"-c",
|
|
78
|
+
"sleep infinity",
|
|
79
|
+
],
|
|
80
|
+
// HOME must point at a writable mount; the image's default
|
|
81
|
+
// HOME=/home/node is inside the readOnly root filesystem.
|
|
82
|
+
// Claude (and most agent runtimes) silently exit with code 0
|
|
83
|
+
// and no output when HOME is unwritable, so set this explicitly.
|
|
84
|
+
env: [{ name: "HOME", value: "/home/paperclip" }],
|
|
85
|
+
envFrom: [{ secretRef: { name: input.envSecretName } }],
|
|
86
|
+
securityContext: {
|
|
87
|
+
runAsNonRoot: true,
|
|
88
|
+
runAsUser: 1000,
|
|
89
|
+
runAsGroup: 1000,
|
|
90
|
+
readOnlyRootFilesystem: true,
|
|
91
|
+
allowPrivilegeEscalation: false,
|
|
92
|
+
capabilities: { drop: ["ALL"] },
|
|
93
|
+
},
|
|
94
|
+
resources: {
|
|
95
|
+
requests: input.resources.requests ?? {
|
|
96
|
+
cpu: "250m",
|
|
97
|
+
memory: "512Mi",
|
|
98
|
+
},
|
|
99
|
+
limits: input.resources.limits ?? {
|
|
100
|
+
cpu: "2",
|
|
101
|
+
memory: "4Gi",
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
volumeMounts: [
|
|
105
|
+
{ name: "workspace", mountPath: "/workspace" },
|
|
106
|
+
{ name: "home", mountPath: "/home/paperclip" },
|
|
107
|
+
{ name: "cache", mountPath: "/home/paperclip/.cache" },
|
|
108
|
+
{ name: "tmp", mountPath: "/tmp" },
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
volumes: [
|
|
113
|
+
{ name: "workspace", emptyDir: { sizeLimit: "8Gi" } },
|
|
114
|
+
{ name: "home", emptyDir: { sizeLimit: "1Gi" } },
|
|
115
|
+
{ name: "cache", emptyDir: { sizeLimit: "1Gi" } },
|
|
116
|
+
{ name: "tmp", emptyDir: { sizeLimit: "2Gi" } },
|
|
117
|
+
],
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=sandbox-cr-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-cr-builder.js","sourceRoot":"","sources":["../src/sandbox-cr-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SandboxOrchestrator implementation backed by the kubernetes-sigs/agent-sandbox
|
|
3
|
+
* Sandbox CRD (agents.x-k8s.io/v1alpha1).
|
|
4
|
+
*
|
|
5
|
+
* The Sandbox CR creates a long-lived pod that paperclip-server can exec into
|
|
6
|
+
* for multi-command adapter-install workflows — the key architectural win over
|
|
7
|
+
* the batch/v1 Job backend.
|
|
8
|
+
*
|
|
9
|
+
* Key semantic differences from jobOrchestrator:
|
|
10
|
+
* - claim() creates a Sandbox CR via CustomObjectsApi instead of a batch Job
|
|
11
|
+
* - getStatus() maps Sandbox phase (Pending|Ready|Terminating|Failed) to SandboxStatus
|
|
12
|
+
* - findPod() reads status.podName from the Sandbox CR (falls back to label query)
|
|
13
|
+
* - waitForCompletion() means "wait until pod is Ready to exec" NOT "wait until
|
|
14
|
+
* workload finishes". The Sandbox pod runs sleep infinity; execution completion
|
|
15
|
+
* is tracked by the individual execInPod() calls.
|
|
16
|
+
* - release() deletes the Sandbox CR with Foreground propagation (controller
|
|
17
|
+
* tears down the underlying pod).
|
|
18
|
+
*
|
|
19
|
+
* NOTE: streamLogs() is provided for interface conformance but is limited —
|
|
20
|
+
* the sleep-infinity pod has no meaningful stdout. Callers in execute mode
|
|
21
|
+
* should use execInPod() and capture its stdout/stderr directly.
|
|
22
|
+
*/
|
|
23
|
+
import type { KubeClients } from "./kube-client.js";
|
|
24
|
+
import type { SandboxOrchestrator, SandboxStatus } from "./sandbox-orchestrator.js";
|
|
25
|
+
export declare class SandboxCrTimeoutError extends Error {
|
|
26
|
+
constructor(namespace: string, name: string, timeoutMs: number);
|
|
27
|
+
}
|
|
28
|
+
export declare function createSandboxCr(clients: KubeClients, namespace: string, manifest: Record<string, unknown>): Promise<{
|
|
29
|
+
uid: string;
|
|
30
|
+
}>;
|
|
31
|
+
export declare function getSandboxCrStatus(clients: KubeClients, namespace: string, name: string): Promise<SandboxStatus>;
|
|
32
|
+
/**
|
|
33
|
+
* Returns the pod name backing a Sandbox CR.
|
|
34
|
+
* Primary: read status.podName from the CR (set by the controller once ready).
|
|
35
|
+
* Fallback: list pods in the namespace filtered by the paperclip.io/managed-by
|
|
36
|
+
* label and the sandbox name label set on the pod template.
|
|
37
|
+
*/
|
|
38
|
+
export declare function findPodForSandbox(clients: KubeClients, namespace: string, name: string): Promise<string | null>;
|
|
39
|
+
export declare function streamSandboxLogs(clients: KubeClients, namespace: string, podName: string, onChunk: (stream: "stdout" | "stderr", text: string) => Promise<void>): Promise<void>;
|
|
40
|
+
export declare function deleteSandboxCr(clients: KubeClients, namespace: string, name: string): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Wait until the Sandbox CR's pod reaches Ready phase (i.e., the pod is up and
|
|
43
|
+
* exec-able). This is NOT waiting for a workload to finish — the Sandbox pod
|
|
44
|
+
* runs sleep infinity indefinitely. Execution completion is tracked by the
|
|
45
|
+
* individual execInPod() calls.
|
|
46
|
+
*
|
|
47
|
+
* Throws SandboxCrTimeoutError if Ready is not reached within timeoutMs.
|
|
48
|
+
* Throws if the Sandbox transitions to Failed.
|
|
49
|
+
*/
|
|
50
|
+
export declare function waitForSandboxReady(clients: KubeClients, namespace: string, name: string, opts?: {
|
|
51
|
+
timeoutMs: number;
|
|
52
|
+
pollMs?: number;
|
|
53
|
+
}): Promise<SandboxStatus>;
|
|
54
|
+
/**
|
|
55
|
+
* Sandbox CR-backed conformance to SandboxOrchestrator.
|
|
56
|
+
*
|
|
57
|
+
* waitForCompletion semantics change: for this backend, "completion" means
|
|
58
|
+
* "pod is up and Ready to exec into" — NOT "workload finished". The actual
|
|
59
|
+
* command execution and its completion is handled by execInPod().
|
|
60
|
+
*/
|
|
61
|
+
export declare const sandboxCrOrchestrator: SandboxOrchestrator;
|
|
62
|
+
//# sourceMappingURL=sandbox-cr-orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-cr-orchestrator.d.ts","sourceRoot":"","sources":["../src/sandbox-cr-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAMpF,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAM/D;AA2DD,wBAAsB,eAAe,CACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAW1B;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC,CASxB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiExB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACpE,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAGzC,GACA,OAAO,CAAC,aAAa,CAAC,CA6CxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,mBAOnC,CAAC"}
|