@unimatrix27/ralph-harness 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +89 -0
- package/README.md +401 -0
- package/dist/bin/ralph-bootstrap-aws.d.ts +3 -0
- package/dist/bin/ralph-bootstrap-aws.d.ts.map +1 -0
- package/dist/bin/ralph-bootstrap-aws.js +43 -0
- package/dist/bin/ralph-bootstrap-aws.js.map +1 -0
- package/dist/bin/ralph-fire.d.ts +3 -0
- package/dist/bin/ralph-fire.d.ts.map +1 -0
- package/dist/bin/ralph-fire.js +59 -0
- package/dist/bin/ralph-fire.js.map +1 -0
- package/dist/bin/ralph-gsm.d.ts +3 -0
- package/dist/bin/ralph-gsm.d.ts.map +1 -0
- package/dist/bin/ralph-gsm.js +93 -0
- package/dist/bin/ralph-gsm.js.map +1 -0
- package/dist/bin/ralph-orchestrate.d.ts +3 -0
- package/dist/bin/ralph-orchestrate.d.ts.map +1 -0
- package/dist/bin/ralph-orchestrate.js +20 -0
- package/dist/bin/ralph-orchestrate.js.map +1 -0
- package/dist/bin/ralph-sync-credential.d.ts +3 -0
- package/dist/bin/ralph-sync-credential.d.ts.map +1 -0
- package/dist/bin/ralph-sync-credential.js +44 -0
- package/dist/bin/ralph-sync-credential.js.map +1 -0
- package/dist/bin/ralph-sync-github-pat.d.ts +3 -0
- package/dist/bin/ralph-sync-github-pat.d.ts.map +1 -0
- package/dist/bin/ralph-sync-github-pat.js +93 -0
- package/dist/bin/ralph-sync-github-pat.js.map +1 -0
- package/dist/bin/ralph-tail-logs.d.ts +3 -0
- package/dist/bin/ralph-tail-logs.d.ts.map +1 -0
- package/dist/bin/ralph-tail-logs.js +72 -0
- package/dist/bin/ralph-tail-logs.js.map +1 -0
- package/dist/bin/ralph-validate-config.d.ts +3 -0
- package/dist/bin/ralph-validate-config.d.ts.map +1 -0
- package/dist/bin/ralph-validate-config.js +41 -0
- package/dist/bin/ralph-validate-config.js.map +1 -0
- package/dist/lib/aws-bootstrap.d.ts +53 -0
- package/dist/lib/aws-bootstrap.d.ts.map +1 -0
- package/dist/lib/aws-bootstrap.js +438 -0
- package/dist/lib/aws-bootstrap.js.map +1 -0
- package/dist/lib/aws-clients.d.ts +17 -0
- package/dist/lib/aws-clients.d.ts.map +1 -0
- package/dist/lib/aws-clients.js +25 -0
- package/dist/lib/aws-clients.js.map +1 -0
- package/dist/lib/claude-runner.d.ts +21 -0
- package/dist/lib/claude-runner.d.ts.map +1 -0
- package/dist/lib/claude-runner.js +101 -0
- package/dist/lib/claude-runner.js.map +1 -0
- package/dist/lib/credential-syncer.d.ts +27 -0
- package/dist/lib/credential-syncer.d.ts.map +1 -0
- package/dist/lib/credential-syncer.js +116 -0
- package/dist/lib/credential-syncer.js.map +1 -0
- package/dist/lib/ec2-orchestrator.d.ts +38 -0
- package/dist/lib/ec2-orchestrator.d.ts.map +1 -0
- package/dist/lib/ec2-orchestrator.js +469 -0
- package/dist/lib/ec2-orchestrator.js.map +1 -0
- package/dist/lib/env-loader.d.ts +18 -0
- package/dist/lib/env-loader.d.ts.map +1 -0
- package/dist/lib/env-loader.js +120 -0
- package/dist/lib/env-loader.js.map +1 -0
- package/dist/lib/fire-launcher.d.ts +59 -0
- package/dist/lib/fire-launcher.d.ts.map +1 -0
- package/dist/lib/fire-launcher.js +320 -0
- package/dist/lib/fire-launcher.js.map +1 -0
- package/dist/lib/gh-runner.d.ts +13 -0
- package/dist/lib/gh-runner.d.ts.map +1 -0
- package/dist/lib/gh-runner.js +50 -0
- package/dist/lib/gh-runner.js.map +1 -0
- package/dist/lib/github-state-mutator.d.ts +11 -0
- package/dist/lib/github-state-mutator.d.ts.map +1 -0
- package/dist/lib/github-state-mutator.js +179 -0
- package/dist/lib/github-state-mutator.js.map +1 -0
- package/dist/lib/phase-result-schemas.d.ts +88 -0
- package/dist/lib/phase-result-schemas.d.ts.map +1 -0
- package/dist/lib/phase-result-schemas.js +180 -0
- package/dist/lib/phase-result-schemas.js.map +1 -0
- package/dist/lib/post-hoc-agent-stuck-checker.d.ts +26 -0
- package/dist/lib/post-hoc-agent-stuck-checker.d.ts.map +1 -0
- package/dist/lib/post-hoc-agent-stuck-checker.js +142 -0
- package/dist/lib/post-hoc-agent-stuck-checker.js.map +1 -0
- package/dist/lib/prompt-renderer.d.ts +4 -0
- package/dist/lib/prompt-renderer.d.ts.map +1 -0
- package/dist/lib/prompt-renderer.js +30 -0
- package/dist/lib/prompt-renderer.js.map +1 -0
- package/dist/lib/security-runner.d.ts +7 -0
- package/dist/lib/security-runner.d.ts.map +1 -0
- package/dist/lib/security-runner.js +53 -0
- package/dist/lib/security-runner.js.map +1 -0
- package/dist/lib/structured-log-emitter.d.ts +53 -0
- package/dist/lib/structured-log-emitter.d.ts.map +1 -0
- package/dist/lib/structured-log-emitter.js +122 -0
- package/dist/lib/structured-log-emitter.js.map +1 -0
- package/dist/lib/target-config-schema.d.ts +28 -0
- package/dist/lib/target-config-schema.d.ts.map +1 -0
- package/dist/lib/target-config-schema.js +157 -0
- package/dist/lib/target-config-schema.js.map +1 -0
- package/dist/lib/user-data-renderer.d.ts +20 -0
- package/dist/lib/user-data-renderer.d.ts.map +1 -0
- package/dist/lib/user-data-renderer.js +75 -0
- package/dist/lib/user-data-renderer.js.map +1 -0
- package/lib/cloud-init/system-setup.sh +338 -0
- package/package.json +55 -0
- package/prompts/discovery.md +182 -0
- package/prompts/implementation.md +161 -0
- package/prompts/review.md +135 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ec2-orchestrator.js","sourceRoot":"","sources":["../../src/lib/ec2-orchestrator.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,EAAE;AACF,wEAAwE;AACxE,+DAA+D;AAC/D,0EAA0E;AAC1E,mDAAmD;AACnD,EAAE;AACF,kBAAkB;AAClB,wEAAwE;AACxE,sDAAsD;AACtD,uEAAuE;AACvE,EAAE;AACF,oDAAoD;AACpD,mDAAmD;AACnD,2CAA2C;AAC3C,8DAA8D;AAC9D,wEAAwE;AACxE,sEAAsE;AACtE,yEAAyE;AACzE,EAAE;AACF,6BAA6B;AAC7B,6CAA6C;AAC7C,iEAAiE;AACjE,sEAAsE;AACtE,8DAA8D;AAC9D,sCAAsC;AACtC,EAAE;AACF,cAAc;AACd,uEAAuE;AACvE,iCAAiC;AACjC,2CAA2C;AAC3C,oEAAoE;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAyB,MAAM,oBAAoB,CAAC;AACtE,OAAO,EACL,aAAa,EACb,eAAe,EACf,iBAAiB,GAIlB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,EAAsB,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACL,OAAO,EACP,OAAO,IAAI,aAAa,EACxB,WAAW,IAAI,iBAAiB,EAChC,SAAS,EACT,UAAU,GAGX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,QAAQ,IAAI,oBAAoB,GAEjC,MAAM,2BAA2B,CAAC;AAEnC,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAEhD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACd;IAA5B,YAA4B,QAAgB,EAAE,OAAe;QAC3D,KAAK,CAAC,OAAO,CAAC,CAAC;QADW,aAAQ,GAAR,QAAQ,CAAQ;QAE1C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,eAAe,GAAG,YAAY,CAAC;AAgBrC,MAAM,UAAU,yBAAyB,CACvC,GAAsB,EACtB,WAAmB;IAEnB,MAAM,UAAU,GAAG,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;IAC/C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,iBAAiB,CACzB,CAAC,EACD,GAAG,aAAa,wCAAwC,CACzD,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACxD,OAAO;QACL,UAAU;QACV,SAAS,EAAE,GAAG,CAAC,gBAAgB,IAAI,EAAE;QACrC,OAAO,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE;QACjC,aAAa,EAAE,GAAG,CAAC,oBAAoB,IAAI,EAAE;QAC7C,UAAU,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QAClC,SAAS,EAAE,GAAG,CAAC,gBAAgB,IAAI,EAAE;QACrC,MAAM,EAAE,GAAG,CAAC,aAAa,IAAI,eAAe;QAC5C,mBAAmB,EACjB,GAAG,CAAC,sBAAsB,IAAI,WAAW,CAAC,WAAW,EAAE,cAAc,CAAC;QACxE,wBAAwB,EACtB,GAAG,CAAC,2BAA2B;YAC/B,WAAW,CAAC,WAAW,EAAE,mBAAmB,CAAC;QAC/C,gBAAgB,EACd,GAAG,CAAC,mBAAmB,IAAI,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC;QAClE,aAAa,EAAE,eAAe,CAAC,GAAG,CAAC,qBAAqB,CAAC;KAC1D,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAuB;IAC9C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,uBAAuB,CAAC;IAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,uBAAuB,CAAC;IACjE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,uEAAuE;AACvE,sEAAsE;AACtE,qEAAqE;AACrE,sCAAsC;AACtC,KAAK,UAAU,gBAAgB,CAC7B,UAAkB;IAElB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,+DAA+D;QAC/D,oEAAoE;QACpE,6DAA6D;QAC7D,kDAAkD;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAQD,MAAM,SAAS,GAAU,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAgBvE,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAErD,2EAA2E;AAC3E,yEAAyE;AACzE,wEAAwE;AACxE,qEAAqE;AACrE,yEAAyE;AACzE,sEAAsE;AACtE,4CAA4C;AAC5C,KAAK,UAAU,qBAAqB,CAAC,OAAe;IAClD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG;QACjB,2DAA2D;QAC3D,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,CAAC;QACrE,WAAW;QACX,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,CAAC;KAC5E,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAChC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBAClC,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBACjD,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAC;YACH,MAAM,EAAE,GAAW,MAAM,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC3C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YACH,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;gBACb,MAAM,IAAI,iBAAiB,CACzB,EAAE,EACF,GAAG,aAAa,4BAA4B,EAAE,EAAE,CACjD,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,iBAAiB;gBAAE,MAAM,GAAG,CAAC;YAChD,iCAAiC;QACnC,CAAC;IACH,CAAC;IACD,8CAA8C;AAChD,CAAC;AAOD,SAAS,qBAAqB,CAAC,CAAsB;IACnD,OAAO;QACL,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU;QACtC,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa;QAC5C,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;QAChC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE;QAC1C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE;QACxC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,IAAI,EAAE;QAClD,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,IAAI,EAAE;KAC/D,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAsB;IAC9C,OAAO;QACL,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU;QACtC,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa;QAC5C,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;QAChC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE;QAC1C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE;QACxC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,IAAI,EAAE;QAClD,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,iBAAiB,IAAI,aAAa;QACrE,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS;QACpC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,iBAAiB,EAAE,cAAc,IAAI,EAAE;KACpE,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,CAAsB,EACtB,KAAa,EACb,EAAU,EACV,QAAgB;IAEhB,OAAO;QACL,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU;QACtC,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa;QAC5C,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;QAChC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE;QAC1C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE;QACxC,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC;QACjC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;QAC3B,eAAe,EAAE,QAAQ;QACzB,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE;QAC9D,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,EAAE;QAC1D,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,IAAI,EAAE;KAC5D,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,8DAA8D;AAC9D,sEAAsE;AACtE,wEAAwE;AACxE,sDAAsD;AACtD,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,GAAsB;IAEtB,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,EAAE,IAAI,CAAC;YAAE,SAAS;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QACpD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/B,IACE,KAAK,CAAC,MAAM,IAAI,CAAC;YACjB,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC7C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EACjD,CAAC;YACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACjB,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,aAAa,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc;IAC5C,KAAK,MAAM,CAAC,IAAI;QACd,eAAe;QACf,YAAY;QACZ,mBAAmB;QACnB,oBAAoB;KACrB,EAAE,CAAC;QACF,IAAI,CAAC;YACH,gBAAgB,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,MAAM,IAAI,iBAAiB,CACzB,CAAC,EACD,GAAG,aAAa,6BAA6B,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,CACtE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,sEAAsE;AACxE,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,CAAC;QACH,OAAO,eAAe,CACpB,gBAAgB,CAAC,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAC1D,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CACzB,CAAC,EACD,GAAG,aAAa,KAAK,GAAG,CAAC,OAAO,EAAE,CACnC,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,IAAI,CAAC;QACH,OAAO,iBAAiB,CACtB,gBAAgB,CAAC,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAC5D,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CACzB,CAAC,EACD,GAAG,aAAa,KAAK,GAAG,CAAC,OAAO,EAAE,CACnC,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAOD,KAAK,UAAU,cAAc,CAC3B,QAAgB,EAChB,MAAoB,EACpB,WAAmB;IAEnB,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;IACjE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AAC3D,CAAC;AAED,wEAAwE;AACxE,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAmB,EAAE;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAEtE,IAAI,MAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,yBAAyB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;YACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACzC,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,aAAa,KAAK,IAAI,EAAE,CAAC,CAAC;IACjE,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACnC,IAAI,CACF,UAAU,MAAM,CAAC,UAAU,aAAa,MAAM,CAAC,OAAO,mBAAmB,MAAM,CAAC,aAAa,WAAW,MAAM,CAAC,UAAU,QAAQ,MAAM,CAAC,MAAM,eAAe,MAAM,CAAC,SAAS,EAAE,CAChL,CAAC;IAEF,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,qBAAqB,CAAC;IACpE,MAAM,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAErC,iEAAiE;IACjE,iEAAiE;IACjE,sEAAsE;IACtE,+DAA+D;IAC/D,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,GAAG,yBAAyB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,MAAM,GAAwB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEzC,sBAAsB;IACtB,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CACtC,MAAM,CAAC,mBAAmB,EAC1B,MAAM,CACP,CAAC;IACF,MAAM,iBAAiB,GAAG,MAAM,CAC9B,iBAAiB,EACjB,qBAAqB,CAAC,MAAM,CAAC,CAC9B,CAAC;IAEF,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,eAAe,GAAG,MAAM,cAAc,CAC1C,iBAAiB,EACjB,MAAM,EACN,cAAc,CACf,CAAC;IACF,OAAO,CAAC,GAAG,CAAC;QACV,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,eAAe,CAAC,WAAW;KACzC,CAAC,CAAC;IAEH,IAAI,eAAe,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,aAAa,oCAAoC,eAAe,CAAC,QAAQ,IAAI,CACjF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC;QACH,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;YACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACzC,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,aAAa,YAAY,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CACjF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC/B,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QACtC,IAAI,CACF,2EAA2E,CAC5E,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,gBAAgB;IAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7B,IAAI,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/B,2BAA2B;IAC3B,MAAM,YAAY,GAAG,MAAM,QAAQ,CACjC,MAAM,CAAC,wBAAwB,EAC/B,MAAM,CACP,CAAC;IACF,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACpE,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,aAAa,yCAAyC,MAAM,IAAI,CACpE,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,YAAY,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,mDAAmD,OAAO,EAAE,CAAC;IAEnI,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACzE,IAAI,IAA4B,CAAC;IACjC,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;YACrC,kEAAkE;YAClE,kBAAkB;YAClB,OAAO,CAAC,GAAG,CAAC;gBACV,KAAK,EAAE,gBAAgB;gBACvB,WAAW,EAAE,UAAU,CAAC,WAAW;gBACnC,KAAK;gBACL,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACzC,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC;QACV,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,KAAK;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;IAEH,IAAI,UAAU,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,aAAa,yCAAyC,UAAU,CAAC,QAAQ,IAAI,CACjF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,kDAAkD,KAAK,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,mBAAmB;IACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7B,IAAI,CAAC,6BAA6B,QAAQ,eAAe,KAAK,EAAE,CAAC,CAAC;IAElE,mBAAmB;IACnB,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,oBAAoB,MAAM,CAAC,aAAa,yBAAyB,CAAC,CAAC;QACxE,MAAM,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACvE,MAAM,cAAc,GAAG,MAAM,CAC3B,cAAc,EACd,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CACtD,CAAC;IAEF,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,MAAM,cAAc,CACvC,cAAc,EACd,MAAM,EACN,WAAW,CACZ,CAAC;IACF,IAAI,MAAgC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC;gBACV,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,YAAY,CAAC,WAAW;gBACrC,KAAK;gBACL,EAAE,EAAE,QAAQ;gBACZ,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACzC,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC;QACV,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,YAAY,CAAC,WAAW;QACrC,KAAK;QACL,EAAE,EAAE,QAAQ;QACZ,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,aAAa,iCAAiC,YAAY,CAAC,QAAQ,IAAI,CAC3E,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,IAAI,CACF,wEAAwE,CACzE,CAAC;QACF,IAAI,CACF,aAAa,CAAC;YACZ,IAAI,EAAE,WAAW;YACjB,KAAK;YACL,EAAE,EAAE,QAAQ;YACZ,MAAM,EAAE,MAAM;SACf,CAAC,CACH,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,qEAAqE;IACrE,0EAA0E;IAC1E,IAAI,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;IACpD,IAAI,CACF,aAAa,CAAC;QACZ,IAAI,EAAE,WAAW;QACjB,KAAK;QACL,EAAE,EAAE,QAAQ;QACZ,MAAM,EAAE,SAAS;KAClB,CAAC,CACH,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const MODULE_PREFIX = "env-loader";
|
|
2
|
+
export interface DiscoverOptions {
|
|
3
|
+
cwd?: string;
|
|
4
|
+
homeDir?: string;
|
|
5
|
+
xdgConfigHome?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function discoverDotenvPaths(opts?: DiscoverOptions): string[];
|
|
8
|
+
export declare function parseDotenv(content: string): Record<string, string>;
|
|
9
|
+
export interface LoadOptions extends DiscoverOptions {
|
|
10
|
+
env?: NodeJS.ProcessEnv;
|
|
11
|
+
}
|
|
12
|
+
export interface LoadSummary {
|
|
13
|
+
loaded: string[];
|
|
14
|
+
applied: number;
|
|
15
|
+
skippedNoOverride: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function loadDotenv(opts?: LoadOptions): LoadSummary;
|
|
18
|
+
//# sourceMappingURL=env-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-loader.d.ts","sourceRoot":"","sources":["../../src/lib/env-loader.ts"],"names":[],"mappings":"AA8BA,eAAO,MAAM,aAAa,eAAe,CAAC;AAE1C,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,eAAoB,GAAG,MAAM,EAAE,CAMxE;AAID,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmCnE;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,IAAI,GAAE,WAAgB,GAAG,WAAW,CAqC9D"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// env-loader — `.env` discovery + parsing for `ralph-fire`. Replaces what
|
|
2
|
+
// would otherwise be a `set -a; source .env; set +a` block in the bash port.
|
|
3
|
+
//
|
|
4
|
+
// Discovery order (first match wins per key, no-override on already-set vars):
|
|
5
|
+
// 1. `<cwd>/.env`
|
|
6
|
+
// 2. `~/.config/ralph/.env` (XDG default; honours XDG_CONFIG_HOME
|
|
7
|
+
// when set)
|
|
8
|
+
//
|
|
9
|
+
// Semantics:
|
|
10
|
+
// - already-set process.env keys are NEVER overridden (operator wins)
|
|
11
|
+
// - both files are read when both exist; the CWD file takes precedence
|
|
12
|
+
// for keys that appear in both (mirrors PATH-style "first wins")
|
|
13
|
+
// - quoted values: KEY="value" or KEY='value' — surrounding quotes stripped,
|
|
14
|
+
// no escape processing inside (we never needed it; the bash port didn't
|
|
15
|
+
// interpret backslashes either)
|
|
16
|
+
// - unquoted values: trailing whitespace is trimmed
|
|
17
|
+
// - blank lines, full-line comments (`# ...`), and malformed lines (no
|
|
18
|
+
// `=`) are silently skipped — matches dotenv's "silent malformed" rule
|
|
19
|
+
//
|
|
20
|
+
// Public surface:
|
|
21
|
+
// discoverDotenvPaths(opts?) — returns the ordered list of paths to try
|
|
22
|
+
// parseDotenv(content) — returns Record<string,string> from a file body
|
|
23
|
+
// loadDotenv(opts?) — reads + parses both files, mutates the
|
|
24
|
+
// supplied env object (default: process.env),
|
|
25
|
+
// honours no-override; returns a summary
|
|
26
|
+
import { readFileSync, statSync } from "node:fs";
|
|
27
|
+
import { homedir } from "node:os";
|
|
28
|
+
import { join } from "node:path";
|
|
29
|
+
export const MODULE_PREFIX = "env-loader";
|
|
30
|
+
export function discoverDotenvPaths(opts = {}) {
|
|
31
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
32
|
+
const home = opts.homeDir ?? homedir();
|
|
33
|
+
const xdg = opts.xdgConfigHome ?? process.env.XDG_CONFIG_HOME;
|
|
34
|
+
const xdgRoot = xdg && xdg.length > 0 ? xdg : join(home, ".config");
|
|
35
|
+
return [join(cwd, ".env"), join(xdgRoot, "ralph", ".env")];
|
|
36
|
+
}
|
|
37
|
+
const KEY_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
38
|
+
export function parseDotenv(content) {
|
|
39
|
+
const out = {};
|
|
40
|
+
for (const rawLine of content.split(/\r?\n/)) {
|
|
41
|
+
const line = rawLine.replace(/^/, ""); // strip BOM on first line
|
|
42
|
+
const trimmed = line.trim();
|
|
43
|
+
if (trimmed.length === 0)
|
|
44
|
+
continue;
|
|
45
|
+
if (trimmed.startsWith("#"))
|
|
46
|
+
continue;
|
|
47
|
+
const eq = line.indexOf("=");
|
|
48
|
+
if (eq <= 0)
|
|
49
|
+
continue; // no key, or `=value`
|
|
50
|
+
const key = line.slice(0, eq).trim();
|
|
51
|
+
if (!KEY_RE.test(key))
|
|
52
|
+
continue;
|
|
53
|
+
let value = line.slice(eq + 1);
|
|
54
|
+
// Trim leading whitespace (allows `KEY = value` or `KEY= value`)
|
|
55
|
+
value = value.replace(/^[ \t]+/, "");
|
|
56
|
+
if (value.length >= 2) {
|
|
57
|
+
const first = value[0];
|
|
58
|
+
const last = value[value.length - 1];
|
|
59
|
+
if ((first === '"' && last === '"') || (first === "'" && last === "'")) {
|
|
60
|
+
value = value.slice(1, -1);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// Strip trailing whitespace and any inline comment marker on
|
|
64
|
+
// unquoted values. The dotenv convention is that ` #` introduces
|
|
65
|
+
// a trailing comment ONLY when preceded by whitespace.
|
|
66
|
+
const inlineCommentMatch = value.match(/[ \t]+#.*$/);
|
|
67
|
+
if (inlineCommentMatch) {
|
|
68
|
+
value = value.slice(0, inlineCommentMatch.index);
|
|
69
|
+
}
|
|
70
|
+
value = value.replace(/[ \t]+$/, "");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
value = value.replace(/[ \t]+$/, "");
|
|
75
|
+
}
|
|
76
|
+
out[key] = value;
|
|
77
|
+
}
|
|
78
|
+
return out;
|
|
79
|
+
}
|
|
80
|
+
export function loadDotenv(opts = {}) {
|
|
81
|
+
const env = opts.env ?? process.env;
|
|
82
|
+
const paths = discoverDotenvPaths(opts);
|
|
83
|
+
const loaded = [];
|
|
84
|
+
let applied = 0;
|
|
85
|
+
let skippedNoOverride = 0;
|
|
86
|
+
// First-wins across files, then no-override against env. That means we
|
|
87
|
+
// accumulate parsed keys in declaration order, then apply only those that
|
|
88
|
+
// are not already in env.
|
|
89
|
+
const merged = {};
|
|
90
|
+
for (const p of paths) {
|
|
91
|
+
let raw;
|
|
92
|
+
try {
|
|
93
|
+
const s = statSync(p);
|
|
94
|
+
if (!s.isFile())
|
|
95
|
+
continue;
|
|
96
|
+
raw = readFileSync(p, "utf8");
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// missing or unreadable: silently skip (dotenv-style)
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
loaded.push(p);
|
|
103
|
+
const parsed = parseDotenv(raw);
|
|
104
|
+
for (const [k, v] of Object.entries(parsed)) {
|
|
105
|
+
if (!Object.prototype.hasOwnProperty.call(merged, k)) {
|
|
106
|
+
merged[k] = v;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
for (const [k, v] of Object.entries(merged)) {
|
|
111
|
+
if (env[k] !== undefined) {
|
|
112
|
+
skippedNoOverride += 1;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
env[k] = v;
|
|
116
|
+
applied += 1;
|
|
117
|
+
}
|
|
118
|
+
return { loaded, applied, skippedNoOverride };
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=env-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-loader.js","sourceRoot":"","sources":["../../src/lib/env-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { type AwsClients } from "./aws-clients.js";
|
|
2
|
+
export declare const MODULE_PREFIX = "fire-launcher";
|
|
3
|
+
export interface LauncherConfig {
|
|
4
|
+
region: string;
|
|
5
|
+
logGroup: string;
|
|
6
|
+
githubTokenSsmKey: string;
|
|
7
|
+
claudeOauthSsmKey: string;
|
|
8
|
+
instanceType: string;
|
|
9
|
+
rootVolumeGb: number;
|
|
10
|
+
sgName: string;
|
|
11
|
+
iamProfile: string;
|
|
12
|
+
amiSsmParam: string;
|
|
13
|
+
maxLifetimeMin: number;
|
|
14
|
+
pollIntervalSec: number;
|
|
15
|
+
agentStuckLabel: string;
|
|
16
|
+
harnessVersion: string;
|
|
17
|
+
targetRepo: string;
|
|
18
|
+
}
|
|
19
|
+
export declare const DEFAULTS: {
|
|
20
|
+
readonly region: "eu-central-1";
|
|
21
|
+
readonly logGroup: "/ralph/main";
|
|
22
|
+
readonly githubTokenSsmKey: "/ralph/github-pat";
|
|
23
|
+
readonly claudeOauthSsmKey: "/ralph/claude-oauth-credential";
|
|
24
|
+
readonly instanceType: "m7a.xlarge";
|
|
25
|
+
readonly rootVolumeGb: 30;
|
|
26
|
+
readonly sgName: "ralph-sg";
|
|
27
|
+
readonly iamProfile: "ralph-ec2-profile";
|
|
28
|
+
readonly amiSsmParam: "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64";
|
|
29
|
+
readonly maxLifetimeMin: 75;
|
|
30
|
+
readonly pollIntervalSec: 20;
|
|
31
|
+
readonly agentStuckLabel: "agent-stuck";
|
|
32
|
+
};
|
|
33
|
+
export declare class LauncherError extends Error {
|
|
34
|
+
readonly exitCode: number;
|
|
35
|
+
constructor(exitCode: number, message: string);
|
|
36
|
+
}
|
|
37
|
+
export declare function resolveLauncherConfig(env: NodeJS.ProcessEnv, defaultHarnessVersion: string): LauncherConfig;
|
|
38
|
+
export type Sleeper = (ms: number) => Promise<void>;
|
|
39
|
+
export type Clock = () => number;
|
|
40
|
+
interface WaitOptions {
|
|
41
|
+
config: LauncherConfig;
|
|
42
|
+
instanceId: string;
|
|
43
|
+
info: (line: string) => void;
|
|
44
|
+
now?: Clock;
|
|
45
|
+
sleep?: Sleeper;
|
|
46
|
+
}
|
|
47
|
+
export declare function waitForTerminated(clients: AwsClients, opts: WaitOptions): Promise<number>;
|
|
48
|
+
export interface RunOptions {
|
|
49
|
+
env?: NodeJS.ProcessEnv;
|
|
50
|
+
defaultHarnessVersion: string;
|
|
51
|
+
clients?: AwsClients;
|
|
52
|
+
info?: (line: string) => void;
|
|
53
|
+
userDataOverride?: string;
|
|
54
|
+
now?: Clock;
|
|
55
|
+
sleep?: Sleeper;
|
|
56
|
+
}
|
|
57
|
+
export declare function run(opts: RunOptions): Promise<number>;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=fire-launcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fire-launcher.d.ts","sourceRoot":"","sources":["../../src/lib/fire-launcher.ts"],"names":[],"mappings":"AA4CA,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAI1B,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAE7C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;CAcX,CAAC;AAEX,qBAAa,aAAc,SAAQ,KAAK;aACV,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI9D;AAqBD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,qBAAqB,EAAE,MAAM,GAC5B,cAAc,CAoChB;AAqKD,MAAM,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAGpD,MAAM,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;AAGjC,UAAU,WAAW;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAKD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,MAAM,CAAC,CA0CjB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAGxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAG9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAMD,wBAAsB,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAwF3D"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
// fire-launcher — TS port of iteration-1's lib/fire-launcher.sh, slimmed
|
|
2
|
+
// down to match the new user-data shape (small stub installs the npm
|
|
3
|
+
// package and execs ralph-orchestrate, rather than bundling bash inline).
|
|
4
|
+
//
|
|
5
|
+
// Public surface:
|
|
6
|
+
// run(opts) — fires one throwaway EC2 instance, polls for termination
|
|
7
|
+
// with a wall-clock ceiling, runs the post-hoc agent-stuck
|
|
8
|
+
// check, returns the wait-for-terminated exit code.
|
|
9
|
+
// resolveLauncherConfig(env) — pure resolver, exposed for tests.
|
|
10
|
+
//
|
|
11
|
+
// Reads from env:
|
|
12
|
+
// Required:
|
|
13
|
+
// RALPH_TARGET_REPO
|
|
14
|
+
//
|
|
15
|
+
// With overridable defaults (matching iteration-1 names):
|
|
16
|
+
// RALPH_AWS_REGION eu-central-1
|
|
17
|
+
// RALPH_LOG_GROUP /ralph/main
|
|
18
|
+
// RALPH_GITHUB_TOKEN_SSM_KEY /ralph/github-pat
|
|
19
|
+
// RALPH_CLAUDE_OAUTH_SSM_KEY /ralph/claude-oauth-credential
|
|
20
|
+
// RALPH_INSTANCE_TYPE m7a.xlarge
|
|
21
|
+
// RALPH_ROOT_VOLUME_GB 30
|
|
22
|
+
// RALPH_SG_NAME ralph-sg
|
|
23
|
+
// RALPH_IAM_PROFILE ralph-ec2-profile
|
|
24
|
+
// RALPH_AMI_SSM_PARAM /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64
|
|
25
|
+
// RALPH_MAX_LIFETIME_MIN 75
|
|
26
|
+
// RALPH_POLL_INTERVAL_SEC 20
|
|
27
|
+
// RALPH_AGENT_STUCK_LABEL agent-stuck
|
|
28
|
+
// RALPH_HARNESS_VERSION <launcher's own running version>
|
|
29
|
+
//
|
|
30
|
+
// Exit codes:
|
|
31
|
+
// 0 instance terminated cleanly within the ceiling
|
|
32
|
+
// 2 missing AWS-side resource OR missing required env
|
|
33
|
+
// 3 wall-clock ceiling breached; force terminate-instances was issued
|
|
34
|
+
import { DescribeInstancesCommand, DescribeSecurityGroupsCommand, DescribeSubnetsCommand, DescribeVpcsCommand, RunInstancesCommand, TerminateInstancesCommand, } from "@aws-sdk/client-ec2";
|
|
35
|
+
import { GetParameterCommand } from "@aws-sdk/client-ssm";
|
|
36
|
+
import { defaultAwsClients, } from "./aws-clients.js";
|
|
37
|
+
import { postHocCheck } from "./post-hoc-agent-stuck-checker.js";
|
|
38
|
+
import { renderUserData } from "./user-data-renderer.js";
|
|
39
|
+
export const MODULE_PREFIX = "fire-launcher";
|
|
40
|
+
export const DEFAULTS = {
|
|
41
|
+
region: "eu-central-1",
|
|
42
|
+
logGroup: "/ralph/main",
|
|
43
|
+
githubTokenSsmKey: "/ralph/github-pat",
|
|
44
|
+
claudeOauthSsmKey: "/ralph/claude-oauth-credential",
|
|
45
|
+
instanceType: "m7a.xlarge",
|
|
46
|
+
rootVolumeGb: 30,
|
|
47
|
+
sgName: "ralph-sg",
|
|
48
|
+
iamProfile: "ralph-ec2-profile",
|
|
49
|
+
amiSsmParam: "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64",
|
|
50
|
+
maxLifetimeMin: 75,
|
|
51
|
+
pollIntervalSec: 20,
|
|
52
|
+
agentStuckLabel: "agent-stuck",
|
|
53
|
+
};
|
|
54
|
+
export class LauncherError extends Error {
|
|
55
|
+
exitCode;
|
|
56
|
+
constructor(exitCode, message) {
|
|
57
|
+
super(message);
|
|
58
|
+
this.exitCode = exitCode;
|
|
59
|
+
this.name = "LauncherError";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function moduleErr(message) {
|
|
63
|
+
return `${MODULE_PREFIX}: error: ${message}`;
|
|
64
|
+
}
|
|
65
|
+
function moduleInfo(message) {
|
|
66
|
+
return `${MODULE_PREFIX}: ${message}`;
|
|
67
|
+
}
|
|
68
|
+
function intFromEnv(value, fallback) {
|
|
69
|
+
if (!value || value.length === 0)
|
|
70
|
+
return fallback;
|
|
71
|
+
const n = Number.parseInt(value, 10);
|
|
72
|
+
if (!Number.isFinite(n) || n <= 0)
|
|
73
|
+
return fallback;
|
|
74
|
+
return n;
|
|
75
|
+
}
|
|
76
|
+
// resolveLauncherConfig — pure resolver. Pulls from env with iteration-1
|
|
77
|
+
// names + defaults. Throws LauncherError(2) if RALPH_TARGET_REPO is missing.
|
|
78
|
+
// `defaultHarnessVersion` is the launcher's own running package version,
|
|
79
|
+
// used when RALPH_HARNESS_VERSION is unset.
|
|
80
|
+
export function resolveLauncherConfig(env, defaultHarnessVersion) {
|
|
81
|
+
const targetRepo = env.RALPH_TARGET_REPO ?? "";
|
|
82
|
+
if (targetRepo.length === 0) {
|
|
83
|
+
throw new LauncherError(2, moduleErr("RALPH_TARGET_REPO is required (e.g. owner/repo)"));
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
region: env.RALPH_AWS_REGION || DEFAULTS.region,
|
|
87
|
+
logGroup: env.RALPH_LOG_GROUP || DEFAULTS.logGroup,
|
|
88
|
+
githubTokenSsmKey: env.RALPH_GITHUB_TOKEN_SSM_KEY || DEFAULTS.githubTokenSsmKey,
|
|
89
|
+
claudeOauthSsmKey: env.RALPH_CLAUDE_OAUTH_SSM_KEY || DEFAULTS.claudeOauthSsmKey,
|
|
90
|
+
instanceType: env.RALPH_INSTANCE_TYPE || DEFAULTS.instanceType,
|
|
91
|
+
rootVolumeGb: intFromEnv(env.RALPH_ROOT_VOLUME_GB, DEFAULTS.rootVolumeGb),
|
|
92
|
+
sgName: env.RALPH_SG_NAME || DEFAULTS.sgName,
|
|
93
|
+
iamProfile: env.RALPH_IAM_PROFILE || DEFAULTS.iamProfile,
|
|
94
|
+
amiSsmParam: env.RALPH_AMI_SSM_PARAM || DEFAULTS.amiSsmParam,
|
|
95
|
+
maxLifetimeMin: intFromEnv(env.RALPH_MAX_LIFETIME_MIN, DEFAULTS.maxLifetimeMin),
|
|
96
|
+
pollIntervalSec: intFromEnv(env.RALPH_POLL_INTERVAL_SEC, DEFAULTS.pollIntervalSec),
|
|
97
|
+
agentStuckLabel: env.RALPH_AGENT_STUCK_LABEL || DEFAULTS.agentStuckLabel,
|
|
98
|
+
harnessVersion: env.RALPH_HARNESS_VERSION && env.RALPH_HARNESS_VERSION.length > 0
|
|
99
|
+
? env.RALPH_HARNESS_VERSION
|
|
100
|
+
: defaultHarnessVersion,
|
|
101
|
+
targetRepo,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// resolveDefaultVpc — locate the region's default VPC.
|
|
105
|
+
async function resolveDefaultVpc(clients) {
|
|
106
|
+
const r = await clients.ec2.send(new DescribeVpcsCommand({
|
|
107
|
+
Filters: [{ Name: "is-default", Values: ["true"] }],
|
|
108
|
+
}));
|
|
109
|
+
const id = r.Vpcs?.[0]?.VpcId;
|
|
110
|
+
if (!id)
|
|
111
|
+
throw new LauncherError(2, moduleErr("no default VPC in region"));
|
|
112
|
+
return id;
|
|
113
|
+
}
|
|
114
|
+
async function resolvePublicSubnet(clients, vpcId) {
|
|
115
|
+
const r = await clients.ec2.send(new DescribeSubnetsCommand({
|
|
116
|
+
Filters: [
|
|
117
|
+
{ Name: "vpc-id", Values: [vpcId] },
|
|
118
|
+
{ Name: "default-for-az", Values: ["true"] },
|
|
119
|
+
],
|
|
120
|
+
}));
|
|
121
|
+
const id = r.Subnets?.[0]?.SubnetId;
|
|
122
|
+
if (!id) {
|
|
123
|
+
throw new LauncherError(2, moduleErr(`no default subnet in vpc ${vpcId}`));
|
|
124
|
+
}
|
|
125
|
+
return id;
|
|
126
|
+
}
|
|
127
|
+
async function resolveSecurityGroup(clients, vpcId, name) {
|
|
128
|
+
const r = await clients.ec2.send(new DescribeSecurityGroupsCommand({
|
|
129
|
+
Filters: [
|
|
130
|
+
{ Name: "vpc-id", Values: [vpcId] },
|
|
131
|
+
{ Name: "group-name", Values: [name] },
|
|
132
|
+
],
|
|
133
|
+
}));
|
|
134
|
+
const id = r.SecurityGroups?.[0]?.GroupId;
|
|
135
|
+
if (!id) {
|
|
136
|
+
throw new LauncherError(2, moduleErr(`security group ${name} not found in vpc ${vpcId}; run ralph-bootstrap-aws first`));
|
|
137
|
+
}
|
|
138
|
+
return id;
|
|
139
|
+
}
|
|
140
|
+
async function resolveImageId(clients, amiSsmParam) {
|
|
141
|
+
const r = await clients.ssm.send(new GetParameterCommand({ Name: amiSsmParam }));
|
|
142
|
+
const id = r.Parameter?.Value;
|
|
143
|
+
if (!id) {
|
|
144
|
+
throw new LauncherError(2, moduleErr(`could not resolve AL2023 image id from ${amiSsmParam}`));
|
|
145
|
+
}
|
|
146
|
+
return id;
|
|
147
|
+
}
|
|
148
|
+
async function runInstance(clients, p) {
|
|
149
|
+
const userDataB64 = Buffer.from(p.userData, "utf8").toString("base64");
|
|
150
|
+
const r = await clients.ec2.send(new RunInstancesCommand({
|
|
151
|
+
ImageId: p.imageId,
|
|
152
|
+
InstanceType: p.config.instanceType,
|
|
153
|
+
SubnetId: p.subnetId,
|
|
154
|
+
SecurityGroupIds: [p.sgId],
|
|
155
|
+
// RunInstances does not accept --associate-public-ip-address; the
|
|
156
|
+
// default subnet auto-assigns when MapPublicIpOnLaunch is true. We
|
|
157
|
+
// force-enable here via the network interface form.
|
|
158
|
+
NetworkInterfaces: [
|
|
159
|
+
{
|
|
160
|
+
DeviceIndex: 0,
|
|
161
|
+
SubnetId: p.subnetId,
|
|
162
|
+
Groups: [p.sgId],
|
|
163
|
+
AssociatePublicIpAddress: true,
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
IamInstanceProfile: { Name: p.config.iamProfile },
|
|
167
|
+
InstanceInitiatedShutdownBehavior: "terminate",
|
|
168
|
+
UserData: userDataB64,
|
|
169
|
+
BlockDeviceMappings: [
|
|
170
|
+
{
|
|
171
|
+
DeviceName: "/dev/xvda",
|
|
172
|
+
Ebs: {
|
|
173
|
+
VolumeSize: p.config.rootVolumeGb,
|
|
174
|
+
VolumeType: "gp3",
|
|
175
|
+
DeleteOnTermination: true,
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
TagSpecifications: [
|
|
180
|
+
{
|
|
181
|
+
ResourceType: "instance",
|
|
182
|
+
Tags: [
|
|
183
|
+
{ Key: "Project", Value: "ralph" },
|
|
184
|
+
{ Key: "Name", Value: "ralph-harness" },
|
|
185
|
+
{ Key: "LaunchedAt", Value: new Date().toISOString() },
|
|
186
|
+
{
|
|
187
|
+
Key: "MaxLifetimeMin",
|
|
188
|
+
Value: String(p.config.maxLifetimeMin),
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
ResourceType: "volume",
|
|
194
|
+
Tags: [
|
|
195
|
+
{ Key: "Project", Value: "ralph" },
|
|
196
|
+
{ Key: "LaunchedAt", Value: new Date().toISOString() },
|
|
197
|
+
{
|
|
198
|
+
Key: "MaxLifetimeMin",
|
|
199
|
+
Value: String(p.config.maxLifetimeMin),
|
|
200
|
+
},
|
|
201
|
+
],
|
|
202
|
+
},
|
|
203
|
+
],
|
|
204
|
+
MetadataOptions: {
|
|
205
|
+
HttpTokens: "required",
|
|
206
|
+
HttpEndpoint: "enabled",
|
|
207
|
+
HttpPutResponseHopLimit: 2,
|
|
208
|
+
},
|
|
209
|
+
MinCount: 1,
|
|
210
|
+
MaxCount: 1,
|
|
211
|
+
}));
|
|
212
|
+
const inst = r.Instances?.[0]?.InstanceId;
|
|
213
|
+
if (!inst) {
|
|
214
|
+
throw new LauncherError(1, moduleErr("run-instances did not return an instance id"));
|
|
215
|
+
}
|
|
216
|
+
// Network interfaces.SubnetId conflicts with top-level SubnetId in some
|
|
217
|
+
// SDK versions. The above call works on @aws-sdk/client-ec2 >= 3.700.
|
|
218
|
+
return inst;
|
|
219
|
+
}
|
|
220
|
+
const realSleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
221
|
+
const realNow = () => Date.now();
|
|
222
|
+
// waitForTerminated — polls describe-instances until State.Name=terminated.
|
|
223
|
+
// Returns 0 on clean termination, 3 on wall-clock ceiling breach (after
|
|
224
|
+
// firing terminate-instances on best-effort).
|
|
225
|
+
export async function waitForTerminated(clients, opts) {
|
|
226
|
+
const now = opts.now ?? realNow;
|
|
227
|
+
const sleep = opts.sleep ?? realSleep;
|
|
228
|
+
const deadline = now() + opts.config.maxLifetimeMin * 60_000;
|
|
229
|
+
for (;;) {
|
|
230
|
+
let state = "";
|
|
231
|
+
try {
|
|
232
|
+
const r = await clients.ec2.send(new DescribeInstancesCommand({ InstanceIds: [opts.instanceId] }));
|
|
233
|
+
state = r.Reservations?.[0]?.Instances?.[0]?.State?.Name ?? "";
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
state = "";
|
|
237
|
+
}
|
|
238
|
+
if (state === "terminated") {
|
|
239
|
+
opts.info(moduleInfo(`instance ${opts.instanceId} terminated`));
|
|
240
|
+
return 0;
|
|
241
|
+
}
|
|
242
|
+
if (state.length === 0) {
|
|
243
|
+
opts.info(moduleInfo(`could not read state for ${opts.instanceId}; retrying`));
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
opts.info(moduleInfo(`instance ${opts.instanceId} state=${state}`));
|
|
247
|
+
}
|
|
248
|
+
if (now() >= deadline) {
|
|
249
|
+
opts.info(`${MODULE_PREFIX}: error: wall-clock ceiling (${opts.config.maxLifetimeMin}m) breached; forcing terminate`);
|
|
250
|
+
try {
|
|
251
|
+
await clients.ec2.send(new TerminateInstancesCommand({ InstanceIds: [opts.instanceId] }));
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
// best-effort — propagate the ceiling breach as the rc anyway
|
|
255
|
+
}
|
|
256
|
+
return 3;
|
|
257
|
+
}
|
|
258
|
+
await sleep(opts.config.pollIntervalSec * 1_000);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
const stdoutInfo = (line) => process.stdout.write(`${line}\n`);
|
|
262
|
+
// run — full launch path. Returns the wait_for_terminated exit code (0 or 3).
|
|
263
|
+
// On any pre-launch failure, throws LauncherError with the matching exit code.
|
|
264
|
+
export async function run(opts) {
|
|
265
|
+
const env = opts.env ?? process.env;
|
|
266
|
+
const info = opts.info ?? stdoutInfo;
|
|
267
|
+
const config = resolveLauncherConfig(env, opts.defaultHarnessVersion);
|
|
268
|
+
const clients = opts.clients ?? defaultAwsClients(config.region);
|
|
269
|
+
const vpcId = await resolveDefaultVpc(clients);
|
|
270
|
+
const subnetId = await resolvePublicSubnet(clients, vpcId);
|
|
271
|
+
const sgId = await resolveSecurityGroup(clients, vpcId, config.sgName);
|
|
272
|
+
const imageId = await resolveImageId(clients, config.amiSsmParam);
|
|
273
|
+
info(moduleInfo(`region=${config.region} vpc=${vpcId} subnet=${subnetId} sg=${sgId} ami=${imageId}`));
|
|
274
|
+
info(moduleInfo(`instance_type=${config.instanceType} root_gb=${config.rootVolumeGb} max_lifetime_min=${config.maxLifetimeMin}`));
|
|
275
|
+
info(moduleInfo(`target=${config.targetRepo} log_group=${config.logGroup} version=${config.harnessVersion}`));
|
|
276
|
+
const userData = opts.userDataOverride ??
|
|
277
|
+
renderUserData({
|
|
278
|
+
targetRepo: config.targetRepo,
|
|
279
|
+
harnessVersion: config.harnessVersion,
|
|
280
|
+
awsRegion: config.region,
|
|
281
|
+
logGroup: config.logGroup,
|
|
282
|
+
githubTokenSsmKey: config.githubTokenSsmKey,
|
|
283
|
+
claudeOauthSsmKey: config.claudeOauthSsmKey,
|
|
284
|
+
agentStuckLabel: config.agentStuckLabel,
|
|
285
|
+
extraEnv: env.RALPH_DEBUG_TRANSCRIPT === "1"
|
|
286
|
+
? { RALPH_DEBUG_TRANSCRIPT: "1" }
|
|
287
|
+
: undefined,
|
|
288
|
+
});
|
|
289
|
+
info(moduleInfo(`user-data size: ${Buffer.byteLength(userData, "utf8")} bytes (cap=16384)`));
|
|
290
|
+
const instanceId = await runInstance(clients, {
|
|
291
|
+
config,
|
|
292
|
+
imageId,
|
|
293
|
+
subnetId,
|
|
294
|
+
sgId,
|
|
295
|
+
userData,
|
|
296
|
+
});
|
|
297
|
+
info(moduleInfo(`launched ${instanceId}`));
|
|
298
|
+
info(moduleInfo(`log_group=${config.logGroup} log_stream=${instanceId}`));
|
|
299
|
+
info(moduleInfo(`tail with: aws --region ${config.region} logs tail ${config.logGroup} --log-stream-names ${instanceId} --follow`));
|
|
300
|
+
const waitRc = await waitForTerminated(clients, {
|
|
301
|
+
config,
|
|
302
|
+
instanceId,
|
|
303
|
+
info,
|
|
304
|
+
now: opts.now,
|
|
305
|
+
sleep: opts.sleep,
|
|
306
|
+
});
|
|
307
|
+
// Post-hoc agent-stuck check. Runs unconditionally so a wall-clock
|
|
308
|
+
// breach (rc=3) still gets the post-hoc correlation.
|
|
309
|
+
await postHocCheck({
|
|
310
|
+
clients,
|
|
311
|
+
targetRepo: config.targetRepo,
|
|
312
|
+
launchTag: instanceId,
|
|
313
|
+
instanceId,
|
|
314
|
+
logGroup: config.logGroup,
|
|
315
|
+
agentStuckLabel: config.agentStuckLabel,
|
|
316
|
+
info,
|
|
317
|
+
});
|
|
318
|
+
return waitRc;
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=fire-launcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fire-launcher.js","sourceRoot":"","sources":["../../src/lib/fire-launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface GhResult {
|
|
2
|
+
stdout: string;
|
|
3
|
+
stderr: string;
|
|
4
|
+
exitCode: number;
|
|
5
|
+
}
|
|
6
|
+
export declare class GhRunnerError extends Error {
|
|
7
|
+
readonly exitCode: number;
|
|
8
|
+
readonly stderr: string;
|
|
9
|
+
constructor(exitCode: number, stderr: string, message: string);
|
|
10
|
+
}
|
|
11
|
+
export declare function runGh(args: readonly string[]): GhResult;
|
|
12
|
+
export declare function runGhJson<T = unknown>(args: readonly string[]): T;
|
|
13
|
+
//# sourceMappingURL=gh-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gh-runner.d.ts","sourceRoot":"","sources":["../../src/lib/gh-runner.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,aAAc,SAAQ,KAAK;aAEpB,QAAQ,EAAE,MAAM;aAChB,MAAM,EAAE,MAAM;gBADd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM;CAKlB;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,CA0BvD;AAED,wBAAgB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,CAYjE"}
|