@encore-os/eos-spec 0.8.0 → 0.9.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/dist/commands/close-out.d.ts +2 -0
- package/dist/commands/close-out.js +167 -0
- package/dist/commands/close-out.js.map +1 -0
- package/dist/commands/conformance.js +20 -1
- package/dist/commands/conformance.js.map +1 -1
- package/dist/commands/metrics.js +15 -0
- package/dist/commands/metrics.js.map +1 -1
- package/dist/commands/run.d.ts +10 -0
- package/dist/commands/run.js +230 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/validate.d.ts +7 -0
- package/dist/commands/validate.js +46 -7
- package/dist/commands/validate.js.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/ai-call.d.ts +12 -0
- package/dist/lib/ai-call.js +6 -0
- package/dist/lib/ai-call.js.map +1 -1
- package/dist/lib/closeout-core.d.ts +46 -0
- package/dist/lib/closeout-core.js +34 -0
- package/dist/lib/closeout-core.js.map +1 -0
- package/dist/lib/closeout-predicate.d.ts +36 -0
- package/dist/lib/closeout-predicate.js +130 -0
- package/dist/lib/closeout-predicate.js.map +1 -0
- package/dist/lib/cost.js +7 -0
- package/dist/lib/cost.js.map +1 -1
- package/dist/lib/events.d.ts +11 -0
- package/dist/lib/events.js.map +1 -1
- package/dist/lib/frontmatter.d.ts +22 -0
- package/dist/lib/frontmatter.js +37 -0
- package/dist/lib/frontmatter.js.map +1 -1
- package/dist/lib/gate-executor.d.ts +80 -0
- package/dist/lib/gate-executor.js +311 -0
- package/dist/lib/gate-executor.js.map +1 -0
- package/dist/lib/llm-health.d.ts +28 -0
- package/dist/lib/llm-health.js +46 -0
- package/dist/lib/llm-health.js.map +1 -0
- package/dist/lib/metrics.d.ts +26 -0
- package/dist/lib/metrics.js +35 -0
- package/dist/lib/metrics.js.map +1 -1
- package/dist/lib/next-action.d.ts +10 -4
- package/dist/lib/next-action.js +10 -4
- package/dist/lib/next-action.js.map +1 -1
- package/dist/lib/ollama-embed.d.ts +5 -0
- package/dist/lib/ollama-embed.js +5 -0
- package/dist/lib/ollama-embed.js.map +1 -1
- package/dist/lib/output.d.ts +3 -0
- package/dist/lib/output.js +3 -0
- package/dist/lib/output.js.map +1 -1
- package/dist/lib/pipeline-config.js +10 -0
- package/dist/lib/pipeline-config.js.map +1 -1
- package/dist/lib/pipeline-map.js +9 -0
- package/dist/lib/pipeline-map.js.map +1 -1
- package/dist/lib/predicate-registry.js +7 -0
- package/dist/lib/predicate-registry.js.map +1 -1
- package/dist/lib/run-pipeline.d.ts +118 -0
- package/dist/lib/run-pipeline.js +106 -0
- package/dist/lib/run-pipeline.js.map +1 -0
- package/dist/lib/spec-pure.d.ts +69 -4
- package/dist/lib/spec-pure.js +125 -15
- package/dist/lib/spec-pure.js.map +1 -1
- package/dist/lib/specs.d.ts +3 -3
- package/dist/lib/specs.js +43 -20
- package/dist/lib/specs.js.map +1 -1
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/lib/frontmatter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/lib/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAoCzD,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAErD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAc;IAC5D,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,IAAI,GAAG,oBAAoB,MAAM,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;QAClD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC;QAC9C,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC;IACxB,4EAA4E;IAC5E,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,MAAc;IACpD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,IAAI,GAAG,WAAW,MAAM,EAAE,CAAC;IACjC,kFAAkF;IAClF,mFAAmF;IACnF,MAAM,YAAY,GAAG,cAAc,CAAC;IACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC;IACpG,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,EAAU;IACtD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,IAAI,GAAG,kBAAkB,EAAE,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC;IACtH,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,EAAU;IACpD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE;QACrB,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;QAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,CAAC,CAAC,EAAE,CAAC;IACL,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,aAAa;IACrD,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC7D,MAAM,KAAK,GAAG,oCAAoC,CAAC;IACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC;IACtF,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,GAAW;IACxD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,IAAI,QAAkB,CAAC;IACvB,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAClB,QAAQ,GAAG,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,YAAY,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,oEAAoE;QACpE,IAAI,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;QACrB,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,CAAC;YAAE,GAAG,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAClE,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,UAAU,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACnG,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC;YACxC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;YACnE,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YACtB,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,UAAU,GAAG,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,YAAoB,EACpB,UAAoC;IAEpC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAE,EAA8B,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,QAAQ,GAAG,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAE,SAAiC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACnH,MAAM,OAAO,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAErG,iFAAiF;IACjF,IAAI,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,iFAAiF;IACjF,IAAI,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,YAAY,CAAC;IAClD,qEAAqE;IACrE,OAAO,IAAI,CAAC;AACd,CAAC;AAeD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,IAAiB,EACjB,IAAY;IAEZ,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,WAAW,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;IACrD,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAG,QAAQ,IAAI,KAAK,IAAI,MAAM,CAAC;IAC3C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,GAAG,KAAK,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC9F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAY,CAAC;QAC3C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,MAAyB,CAAC;QAC3E,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,OAAkB;IACvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,QAAgB,CAAC;IACrB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,mBAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5G,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3F,4EAA4E;QAC5E,qDAAqD;QACrD,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,uEAAuE,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC;IACnH,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,GAAG,KAAK,KAAK,aAAa,CAAC,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;IACtF,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,OAAgE,EAChE,EAAU,EACV,MAA8B;IAE9B,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,yBAAyB,KAAK,YAAY,CAAC,CAAC;IACpE,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;YAAE,MAAM,CAAC,qCAAqC;QACvE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC,CAAC;YACZ,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;YAAE,MAAM,CAAC,2BAA2B;QAC9F,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YACrC,SAAS,GAAG,CAAC,CAAC;YACd,MAAM;QACR,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC/D,MAAM,UAAU,GAAG,GAAG,MAAM,aAAa,MAAM,EAAE,CAAC;IAElD,IAAI,QAAkB,CAAC;IACvB,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,IAAI,KAAK,CAAC,SAAS,CAAE,CAAC,IAAI,EAAE,KAAK,WAAW,MAAM,EAAE;YAAE,OAAO,IAAI,CAAC;QAClE,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QACtB,QAAQ,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,GAAW;IACnD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,IAAI,QAAkB,CAAC;IACvB,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAClB,QAAQ,GAAG,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;QACrB,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,CAAC;YAAE,GAAG,EAAE,CAAC;QACnE,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,GAAG,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QACnF,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { logAiCall } from './ai-call.js';
|
|
2
|
+
import { type HealthResult } from './llm-health.js';
|
|
3
|
+
import type { SpecFile } from './specs.js';
|
|
4
|
+
/** Default LOCAL endpoint — Ollama's OpenAI-compatible API (issue #29). */
|
|
5
|
+
export declare const DEFAULT_LLM_BASE_URL = "http://localhost:11434/v1";
|
|
6
|
+
/** Default LOCAL model — overridable via EOS_SPEC_LLM_MODEL. */
|
|
7
|
+
export declare const DEFAULT_LOCAL_MODEL = "qwen3-coder:30b";
|
|
8
|
+
/** Result of a single model call (text + normalized token counts). */
|
|
9
|
+
export type GateModelResult = {
|
|
10
|
+
text: string;
|
|
11
|
+
tokens: {
|
|
12
|
+
prompt: number;
|
|
13
|
+
completion: number;
|
|
14
|
+
total: number;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
/** Injectable model caller. The default dispatches a raw OpenAI-compatible fetch
|
|
18
|
+
* for the LOCAL endpoint and the `ai` SDK for the CLOUD gateway; tests inject a
|
|
19
|
+
* canned implementation. */
|
|
20
|
+
export type ModelCaller = (args: {
|
|
21
|
+
prompt: string;
|
|
22
|
+
model: string;
|
|
23
|
+
baseURL: string;
|
|
24
|
+
endpoint: 'local' | 'cloud';
|
|
25
|
+
}) => Promise<GateModelResult>;
|
|
26
|
+
/** The gates the Phase-1a direct-model executor knows how to drive (all produce a
|
|
27
|
+
* document / frontmatter / scaffold artifact — no coding-agent loop). */
|
|
28
|
+
export declare const SUPPORTED_GATES: ReadonlySet<string>;
|
|
29
|
+
export type DirectExecutorRequest = {
|
|
30
|
+
gate: string;
|
|
31
|
+
spec: SpecFile;
|
|
32
|
+
repoRoot: string;
|
|
33
|
+
/** Current spec file content (for prompt building). */
|
|
34
|
+
specText: string;
|
|
35
|
+
baseURL: string;
|
|
36
|
+
localModel: string;
|
|
37
|
+
cloudModel: string;
|
|
38
|
+
strictLocal: boolean;
|
|
39
|
+
/** Run autonomy mode, threaded onto the telemetry event ('drive'). */
|
|
40
|
+
autonomy: string;
|
|
41
|
+
};
|
|
42
|
+
export type DirectExecutorDeps = {
|
|
43
|
+
probe?: (baseURL: string, timeoutMs?: number) => Promise<HealthResult>;
|
|
44
|
+
callModel?: ModelCaller;
|
|
45
|
+
/** Writes the gate's artifact(s); returns the written paths (repo-relative). */
|
|
46
|
+
writeArtifacts?: (gate: string, spec: SpecFile, repoRoot: string, modelText: string) => string[];
|
|
47
|
+
/** Telemetry sink — default {@link logAiCall}. Injected in tests. */
|
|
48
|
+
log?: typeof logAiCall;
|
|
49
|
+
now?: () => number;
|
|
50
|
+
};
|
|
51
|
+
/** The executor's outcome — a superset of run-pipeline's `GateExecution`. */
|
|
52
|
+
export type GateExecResult = {
|
|
53
|
+
ok: boolean;
|
|
54
|
+
executor: 'direct-model';
|
|
55
|
+
endpoint?: 'local' | 'cloud';
|
|
56
|
+
model?: string;
|
|
57
|
+
escalatedToCloud?: boolean;
|
|
58
|
+
artifacts?: string[];
|
|
59
|
+
error?: string;
|
|
60
|
+
/** strict-local health halt — the run must stop with no fallback (AC-3). */
|
|
61
|
+
halt?: boolean;
|
|
62
|
+
tokens?: {
|
|
63
|
+
prompt: number;
|
|
64
|
+
completion: number;
|
|
65
|
+
total: number;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
/** Build the gate-specific prompt routed to the model. draft-acs reuses the
|
|
69
|
+
* canonical AC-draft prompt (strict-JSON output the parser understands); the
|
|
70
|
+
* other gates ask for the document the gate's artifact captures. */
|
|
71
|
+
export declare function buildGatePrompt(gate: string, spec: SpecFile, specText: string): string;
|
|
72
|
+
/** Dispatch a gate to its artifact writer. Throws on an unsupported gate so the
|
|
73
|
+
* executor reports it as an error (the driver then halts). */
|
|
74
|
+
export declare function writeGateArtifacts(gate: string, spec: SpecFile, repoRoot: string, modelText: string): string[];
|
|
75
|
+
/**
|
|
76
|
+
* Execute one gate against the model and write its artifact. Decides local vs.
|
|
77
|
+
* cloud from a health probe + `--strict-local`, emits exactly one gate-tagged
|
|
78
|
+
* telemetry event, and returns the structured outcome the driver records.
|
|
79
|
+
*/
|
|
80
|
+
export declare function directModelExecutor(req: DirectExecutorRequest, deps?: DirectExecutorDeps): Promise<GateExecResult>;
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The direct-model gate executor (TOOL-06 / issue #29, tasks B + C). Given a
|
|
3
|
+
* pipeline gate and the spec it applies to, it:
|
|
4
|
+
* 1. probes the LOCAL OpenAI-compatible endpoint (Ollama, EOS_SPEC_LLM_BASE_URL),
|
|
5
|
+
* 2. routes the gate to the local model when healthy; otherwise ESCALATES to the
|
|
6
|
+
* cloud gateway (the same `ai`-SDK path ac-backfill uses) — unless
|
|
7
|
+
* `--strict-local`, in which case it HALTS with no fallback (AC-3/4),
|
|
8
|
+
* 3. writes the gate's spec artifact from the model output, and
|
|
9
|
+
* 4. emits a gate-tagged telemetry event via {@link logAiCall} so `metrics` can
|
|
10
|
+
* roll the call up per-gate/-model and into the local-vs-cloud ratio.
|
|
11
|
+
*
|
|
12
|
+
* This module is fs- AND network-bound, so it lives behind the package main entry
|
|
13
|
+
* ONLY — it must NEVER be imported from `pure.ts`. The pure orchestration lives in
|
|
14
|
+
* run-pipeline.ts; this is the single injected side-effecting seam it drives.
|
|
15
|
+
*
|
|
16
|
+
* Phase 1a ships ONLY this direct-model executor. The implement/verify-tasks tail
|
|
17
|
+
* (a coding agent) is deferred to Phase 1b — the navigator's tail gates halt the
|
|
18
|
+
* driver before any code-writing gate runs.
|
|
19
|
+
*/
|
|
20
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
21
|
+
import { isAbsolute, join, relative } from 'node:path';
|
|
22
|
+
import { buildAcDraftPrompt } from './ac-draft-prompt.js';
|
|
23
|
+
import { parseAcResponse } from './ac-response-parser.js';
|
|
24
|
+
import { logAiCall } from './ai-call.js';
|
|
25
|
+
import { appendAcceptanceCriteria, insertSignoffMarker } from './frontmatter.js';
|
|
26
|
+
import { probeLocal } from './llm-health.js';
|
|
27
|
+
import { extractUserStories } from './user-stories.js';
|
|
28
|
+
/** Default LOCAL endpoint — Ollama's OpenAI-compatible API (issue #29). */
|
|
29
|
+
export const DEFAULT_LLM_BASE_URL = 'http://localhost:11434/v1';
|
|
30
|
+
/** Default LOCAL model — overridable via EOS_SPEC_LLM_MODEL. */
|
|
31
|
+
export const DEFAULT_LOCAL_MODEL = 'qwen3-coder:30b';
|
|
32
|
+
/** The gates the Phase-1a direct-model executor knows how to drive (all produce a
|
|
33
|
+
* document / frontmatter / scaffold artifact — no coding-agent loop). */
|
|
34
|
+
export const SUPPORTED_GATES = new Set([
|
|
35
|
+
'validate-spec',
|
|
36
|
+
'spec-review',
|
|
37
|
+
'draft-acs',
|
|
38
|
+
'generate-tests',
|
|
39
|
+
'create-plan',
|
|
40
|
+
'generate-tasks',
|
|
41
|
+
]);
|
|
42
|
+
/** Today's date (YYYY-MM-DD, local tz) for sign-off markers — matches signoff.ts. */
|
|
43
|
+
function isoToday() {
|
|
44
|
+
return new Date().toLocaleDateString('en-CA');
|
|
45
|
+
}
|
|
46
|
+
/** Repo-relative display path for a written artifact. */
|
|
47
|
+
function rel(repoRoot, p) {
|
|
48
|
+
return isAbsolute(p) ? relative(repoRoot, p) : p;
|
|
49
|
+
}
|
|
50
|
+
// ── default model callers ─────────────────────────────────────────────────────
|
|
51
|
+
/** Raw OpenAI-compatible chat-completions call against the LOCAL endpoint —
|
|
52
|
+
* mirrors the fetch pattern in ollama-embed.ts (no SDK; Ollama serves
|
|
53
|
+
* `${baseURL}/chat/completions`). */
|
|
54
|
+
const callLocalModel = async ({ prompt, model, baseURL }) => {
|
|
55
|
+
const url = `${baseURL.replace(/\/+$/, '')}/chat/completions`;
|
|
56
|
+
const res = await fetch(url, {
|
|
57
|
+
method: 'POST',
|
|
58
|
+
headers: { 'content-type': 'application/json' },
|
|
59
|
+
body: JSON.stringify({ model, messages: [{ role: 'user', content: prompt }], stream: false }),
|
|
60
|
+
});
|
|
61
|
+
if (!res.ok)
|
|
62
|
+
throw new Error(`local model call failed: ${res.status} ${res.statusText}`);
|
|
63
|
+
const json = (await res.json());
|
|
64
|
+
const text = json.choices?.[0]?.message?.content ?? '';
|
|
65
|
+
const u = json.usage ?? {};
|
|
66
|
+
const prompt_tokens = u.prompt_tokens ?? 0;
|
|
67
|
+
const completion_tokens = u.completion_tokens ?? 0;
|
|
68
|
+
return {
|
|
69
|
+
text,
|
|
70
|
+
tokens: {
|
|
71
|
+
prompt: prompt_tokens,
|
|
72
|
+
completion: completion_tokens,
|
|
73
|
+
total: u.total_tokens ?? prompt_tokens + completion_tokens,
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
/** Cloud gateway call — mirrors ac-backfill's `generateText` usage (the `ai` SDK
|
|
78
|
+
* is an optionalDependency, lazily imported, so the other commands never pull it). */
|
|
79
|
+
const callCloudModel = async ({ prompt, model }) => {
|
|
80
|
+
let generateText;
|
|
81
|
+
try {
|
|
82
|
+
generateText = (await import('ai')).generateText;
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
throw new Error('cloud escalation needs the optional `ai` package — install it: `npm i ai` (or run with --strict-local).');
|
|
86
|
+
}
|
|
87
|
+
const result = await generateText({ model, prompt });
|
|
88
|
+
const u = (result.usage ?? {});
|
|
89
|
+
const prompt_ = u.promptTokens ?? u.inputTokens ?? 0;
|
|
90
|
+
const completion_ = u.completionTokens ?? u.outputTokens ?? 0;
|
|
91
|
+
return {
|
|
92
|
+
text: result.text,
|
|
93
|
+
tokens: { prompt: prompt_, completion: completion_, total: u.totalTokens ?? prompt_ + completion_ },
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
/** Default dispatcher: local endpoint → raw fetch; cloud gateway → `ai` SDK. */
|
|
97
|
+
const defaultCallModel = (args) => args.endpoint === 'local' ? callLocalModel(args) : callCloudModel(args);
|
|
98
|
+
// ── prompt building ───────────────────────────────────────────────────────────
|
|
99
|
+
/** Build the gate-specific prompt routed to the model. draft-acs reuses the
|
|
100
|
+
* canonical AC-draft prompt (strict-JSON output the parser understands); the
|
|
101
|
+
* other gates ask for the document the gate's artifact captures. */
|
|
102
|
+
export function buildGatePrompt(gate, spec, specText) {
|
|
103
|
+
const head = `Spec ${spec.id} — "${spec.title ?? spec.id}" (core ${spec.core}).`;
|
|
104
|
+
const body = specText.slice(0, 6000);
|
|
105
|
+
switch (gate) {
|
|
106
|
+
case 'validate-spec':
|
|
107
|
+
return `${head}\nReview this spec for structural completeness and constitution compliance. List any gaps as a short bullet summary; if it is sound, say so concisely.\n\n---\n${body}`;
|
|
108
|
+
case 'spec-review':
|
|
109
|
+
return `${head}\nPerform an implementability + landscape review: call out overlap with existing features, risky assumptions, and missing edge cases. Keep it to a short bullet list.\n\n---\n${body}`;
|
|
110
|
+
case 'draft-acs': {
|
|
111
|
+
const stories = extractUserStories(specText);
|
|
112
|
+
return buildAcDraftPrompt({
|
|
113
|
+
specId: spec.id,
|
|
114
|
+
core: spec.core,
|
|
115
|
+
title: spec.title ?? spec.id,
|
|
116
|
+
userStories: stories,
|
|
117
|
+
existingAcCount: 0,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
case 'generate-tests':
|
|
121
|
+
return `${head}\nWrite a brief Playwright e2e test outline (as comments) covering this spec's acceptance criteria — one scenario per AC.\n\n---\n${body}`;
|
|
122
|
+
case 'create-plan':
|
|
123
|
+
return `${head}\nWrite a concise implementation plan in markdown: phases, key modules/files, and risks. No preamble.\n\n---\n${body}`;
|
|
124
|
+
case 'generate-tasks':
|
|
125
|
+
return `${head}\nBreak the implementation into a short ordered markdown task checklist (one line per task). No preamble.\n\n---\n${body}`;
|
|
126
|
+
default:
|
|
127
|
+
return `${head}\n${body}`;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// ── artifact writers (one per supported gate) ─────────────────────────────────
|
|
131
|
+
/** Insert a sign-off marker into the spec and return its repo-relative path. */
|
|
132
|
+
function writeMarker(repoRoot, spec, type) {
|
|
133
|
+
const text = readFileSync(spec.path, 'utf8');
|
|
134
|
+
const { text: next, inserted } = insertSignoffMarker(text, type, isoToday());
|
|
135
|
+
if (inserted)
|
|
136
|
+
writeFileSync(spec.path, next, 'utf8');
|
|
137
|
+
return [rel(repoRoot, spec.path)];
|
|
138
|
+
}
|
|
139
|
+
/** Append drafted ACs to the spec frontmatter. Uses the model's strict-JSON ACs
|
|
140
|
+
* when parseable; otherwise synthesizes a single AC from the first user story so
|
|
141
|
+
* the gate still clears (the cap that holds a spec below tasks_generated lifts
|
|
142
|
+
* once `acceptance_criteria` is non-empty). */
|
|
143
|
+
function writeAcs(repoRoot, spec, modelText) {
|
|
144
|
+
const text = readFileSync(spec.path, 'utf8');
|
|
145
|
+
const parsed = parseAcResponse(modelText);
|
|
146
|
+
let acs = parsed.ok ? parsed.acs : [];
|
|
147
|
+
if (acs.length === 0) {
|
|
148
|
+
const stories = extractUserStories(text);
|
|
149
|
+
const story = stories[0];
|
|
150
|
+
acs = [
|
|
151
|
+
{
|
|
152
|
+
id: 'AC-1',
|
|
153
|
+
title: story ? `Satisfy ${story.id}` : 'Primary acceptance criterion',
|
|
154
|
+
user_story: story?.id,
|
|
155
|
+
status: 'planned',
|
|
156
|
+
draft: true,
|
|
157
|
+
given: ['the feature is available to an authorized user'],
|
|
158
|
+
when: ['the user exercises the primary flow described by the spec'],
|
|
159
|
+
then: ['the documented outcome occurs and is observable'],
|
|
160
|
+
},
|
|
161
|
+
];
|
|
162
|
+
}
|
|
163
|
+
const updated = appendAcceptanceCriteria(text, acs);
|
|
164
|
+
if (updated !== text)
|
|
165
|
+
writeFileSync(spec.path, updated, 'utf8');
|
|
166
|
+
return [rel(repoRoot, spec.path)];
|
|
167
|
+
}
|
|
168
|
+
/** Each line of `s` as a `// ` comment (so model prose never breaks the test-file
|
|
169
|
+
* active-`test(` detection). */
|
|
170
|
+
function asComment(s) {
|
|
171
|
+
return s
|
|
172
|
+
.split('\n')
|
|
173
|
+
.map((line) => `// ${line}`)
|
|
174
|
+
.join('\n');
|
|
175
|
+
}
|
|
176
|
+
/** Write a generated Playwright test scaffold with one ACTIVE `test(` block so the
|
|
177
|
+
* generate-tests gate clears (hasActiveGeneratedTests). */
|
|
178
|
+
function writeGeneratedTest(repoRoot, spec, modelText) {
|
|
179
|
+
const dir = join(repoRoot, 'tests', 'e2e', 'generated', spec.core.toLowerCase());
|
|
180
|
+
mkdirSync(dir, { recursive: true });
|
|
181
|
+
const file = join(dir, `${spec.id.toLowerCase()}-run.generated.spec.ts`);
|
|
182
|
+
const notes = modelText.trim() ? `${asComment(modelText.trim())}\n` : '';
|
|
183
|
+
const body = `import { test, expect } from '@playwright/test';\n\n// Generated by \`eos-spec run\` (direct-model executor) for ${spec.id}.\n${notes}\ntest('${spec.id} — generated coverage scaffold', async () => {\n // TODO(${spec.id}): replace this scaffold with real acceptance-criteria coverage.\n expect(true).toBe(true);\n});\n`;
|
|
184
|
+
writeFileSync(file, body, 'utf8');
|
|
185
|
+
return [rel(repoRoot, file)];
|
|
186
|
+
}
|
|
187
|
+
/** Write the implementation plan artifact (clears create-plan / planned). */
|
|
188
|
+
function writePlan(repoRoot, spec, modelText) {
|
|
189
|
+
const dir = join(repoRoot, 'specs', spec.core, 'plans');
|
|
190
|
+
mkdirSync(dir, { recursive: true });
|
|
191
|
+
const file = join(dir, `${spec.id}-PLAN.md`);
|
|
192
|
+
const plan = modelText.trim() || '## Plan\n\n- Implementation plan to be detailed.';
|
|
193
|
+
const body = `# Implementation Plan: ${spec.id}\n\n_Generated by \`eos-spec run\` (direct-model executor)._\n\n${plan}\n`;
|
|
194
|
+
writeFileSync(file, body, 'utf8');
|
|
195
|
+
return [rel(repoRoot, file)];
|
|
196
|
+
}
|
|
197
|
+
/** Write the task breakdown artifact (clears generate-tasks / tasks_generated).
|
|
198
|
+
* Includes recognized `[ ]` task markers so the navigator routes the next step to
|
|
199
|
+
* the implement tail (where the driver halts). */
|
|
200
|
+
function writeTasks(repoRoot, spec, modelText) {
|
|
201
|
+
const dir = join(repoRoot, 'specs', spec.core, 'tasks');
|
|
202
|
+
mkdirSync(dir, { recursive: true });
|
|
203
|
+
const file = join(dir, `${spec.id}-TASKS.md`);
|
|
204
|
+
const notes = modelText.trim() ? `\n## Model notes\n\n${modelText.trim()}\n` : '';
|
|
205
|
+
const body = `# Tasks: ${spec.id}\n\n_Generated by \`eos-spec run\` (direct-model executor)._\n\n- [ ] T1 Implement ${spec.id}\n- [ ] T2 Verify ${spec.id} against its acceptance criteria\n${notes}`;
|
|
206
|
+
writeFileSync(file, body, 'utf8');
|
|
207
|
+
return [rel(repoRoot, file)];
|
|
208
|
+
}
|
|
209
|
+
/** Dispatch a gate to its artifact writer. Throws on an unsupported gate so the
|
|
210
|
+
* executor reports it as an error (the driver then halts). */
|
|
211
|
+
export function writeGateArtifacts(gate, spec, repoRoot, modelText) {
|
|
212
|
+
switch (gate) {
|
|
213
|
+
case 'validate-spec':
|
|
214
|
+
return writeMarker(repoRoot, spec, 'validated');
|
|
215
|
+
case 'spec-review':
|
|
216
|
+
return writeMarker(repoRoot, spec, 'spec-reviewed');
|
|
217
|
+
case 'draft-acs':
|
|
218
|
+
return writeAcs(repoRoot, spec, modelText);
|
|
219
|
+
case 'generate-tests':
|
|
220
|
+
return writeGeneratedTest(repoRoot, spec, modelText);
|
|
221
|
+
case 'create-plan':
|
|
222
|
+
return writePlan(repoRoot, spec, modelText);
|
|
223
|
+
case 'generate-tasks':
|
|
224
|
+
return writeTasks(repoRoot, spec, modelText);
|
|
225
|
+
default:
|
|
226
|
+
throw new Error(`gate "${gate}" is not supported by the direct-model executor (Phase 1a)`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// ── the executor ──────────────────────────────────────────────────────────────
|
|
230
|
+
/**
|
|
231
|
+
* Execute one gate against the model and write its artifact. Decides local vs.
|
|
232
|
+
* cloud from a health probe + `--strict-local`, emits exactly one gate-tagged
|
|
233
|
+
* telemetry event, and returns the structured outcome the driver records.
|
|
234
|
+
*/
|
|
235
|
+
export async function directModelExecutor(req, deps = {}) {
|
|
236
|
+
const probe = deps.probe ?? probeLocal;
|
|
237
|
+
const callModel = deps.callModel ?? defaultCallModel;
|
|
238
|
+
const writeArtifacts = deps.writeArtifacts ?? writeGateArtifacts;
|
|
239
|
+
const log = deps.log ?? logAiCall;
|
|
240
|
+
const now = deps.now ?? Date.now;
|
|
241
|
+
const start = now();
|
|
242
|
+
const common = {
|
|
243
|
+
command: 'run',
|
|
244
|
+
gate: req.gate,
|
|
245
|
+
executor: 'direct-model',
|
|
246
|
+
autonomy: req.autonomy,
|
|
247
|
+
specId: req.spec.id,
|
|
248
|
+
core: req.spec.core,
|
|
249
|
+
};
|
|
250
|
+
// Unsupported gate — fail fast (the driver halts with executor-error).
|
|
251
|
+
if (!SUPPORTED_GATES.has(req.gate)) {
|
|
252
|
+
const error = `gate "${req.gate}" is not supported by the direct-model executor (Phase 1a)`;
|
|
253
|
+
log({ ...common, model: req.localModel, ms: now() - start, ok: false, error, escalatedToCloud: false });
|
|
254
|
+
return { ok: false, executor: 'direct-model', model: req.localModel, escalatedToCloud: false, error };
|
|
255
|
+
}
|
|
256
|
+
// 1. Probe the local endpoint and decide where to route the gate.
|
|
257
|
+
const health = await probe(req.baseURL);
|
|
258
|
+
let endpoint;
|
|
259
|
+
let model;
|
|
260
|
+
let escalatedToCloud;
|
|
261
|
+
if (health.healthy) {
|
|
262
|
+
endpoint = 'local';
|
|
263
|
+
model = req.localModel;
|
|
264
|
+
escalatedToCloud = false;
|
|
265
|
+
}
|
|
266
|
+
else if (req.strictLocal) {
|
|
267
|
+
// AC-3: strict-local + unhealthy → HALT, no fallback. Emit a halt event.
|
|
268
|
+
const error = `local endpoint unhealthy (${health.error ?? 'no response'}) and --strict-local set — halting`;
|
|
269
|
+
log({ ...common, model: req.localModel, ms: now() - start, ok: false, error, escalatedToCloud: false });
|
|
270
|
+
return {
|
|
271
|
+
ok: false,
|
|
272
|
+
executor: 'direct-model',
|
|
273
|
+
endpoint: 'local',
|
|
274
|
+
model: req.localModel,
|
|
275
|
+
escalatedToCloud: false,
|
|
276
|
+
error,
|
|
277
|
+
halt: true,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
// AC-4: not strict → escalate this gate to the cloud gateway.
|
|
282
|
+
endpoint = 'cloud';
|
|
283
|
+
model = req.cloudModel;
|
|
284
|
+
escalatedToCloud = true;
|
|
285
|
+
}
|
|
286
|
+
// 2. Call the model.
|
|
287
|
+
let result;
|
|
288
|
+
try {
|
|
289
|
+
const prompt = buildGatePrompt(req.gate, req.spec, req.specText);
|
|
290
|
+
result = await callModel({ prompt, model, baseURL: req.baseURL, endpoint });
|
|
291
|
+
}
|
|
292
|
+
catch (e) {
|
|
293
|
+
const error = e instanceof Error ? e.message : String(e);
|
|
294
|
+
log({ ...common, model, ms: now() - start, ok: false, error, escalatedToCloud });
|
|
295
|
+
return { ok: false, executor: 'direct-model', endpoint, model, escalatedToCloud, error };
|
|
296
|
+
}
|
|
297
|
+
// 3. Write the gate's artifact from the model output.
|
|
298
|
+
let artifacts;
|
|
299
|
+
try {
|
|
300
|
+
artifacts = writeArtifacts(req.gate, req.spec, req.repoRoot, result.text);
|
|
301
|
+
}
|
|
302
|
+
catch (e) {
|
|
303
|
+
const error = e instanceof Error ? e.message : String(e);
|
|
304
|
+
log({ ...common, model, tokens: result.tokens, ms: now() - start, ok: false, error, escalatedToCloud });
|
|
305
|
+
return { ok: false, executor: 'direct-model', endpoint, model, escalatedToCloud, error, tokens: result.tokens };
|
|
306
|
+
}
|
|
307
|
+
// 4. Emit the gate-tagged success event (model/tokens/cost + executor/autonomy/escalation).
|
|
308
|
+
log({ ...common, model, tokens: result.tokens, ms: now() - start, ok: true, escalatedToCloud });
|
|
309
|
+
return { ok: true, executor: 'direct-model', endpoint, model, escalatedToCloud, artifacts, tokens: result.tokens };
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=gate-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-executor.js","sourceRoot":"","sources":["../../src/lib/gate-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local LLM endpoint health probe (TOOL-06 / issue #29, task C). The `run` driver
|
|
3
|
+
* routes each gate to a LOCAL OpenAI-compatible model by default (Ollama at
|
|
4
|
+
* http://localhost:11434/v1); before spending a gate on it we cheaply probe the
|
|
5
|
+
* endpoint. On an UNHEALTHY probe the executor either HALTS (`--strict-local`) or
|
|
6
|
+
* ESCALATES the gate to the cloud gateway. fs-free but network-bound — it lives
|
|
7
|
+
* behind the package main entry, never on the `/pure` graph.
|
|
8
|
+
*
|
|
9
|
+
* The probe hits the OpenAI-compatible `GET {baseURL}/models` listing (Ollama and
|
|
10
|
+
* every OpenAI-compatible server expose it) with a short timeout, so a wedged or
|
|
11
|
+
* absent server fails fast instead of hanging the run.
|
|
12
|
+
*/
|
|
13
|
+
export type HealthResult = {
|
|
14
|
+
healthy: boolean;
|
|
15
|
+
/** HTTP status when a response was received. */
|
|
16
|
+
status?: number;
|
|
17
|
+
/** Failure reason (HTTP status text, timeout, or transport error). */
|
|
18
|
+
error?: string;
|
|
19
|
+
/** Wall-clock probe latency in ms. */
|
|
20
|
+
ms: number;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Probe a local OpenAI-compatible endpoint for liveness. Returns `{ healthy }`
|
|
24
|
+
* rather than throwing so the caller's escalate-or-halt branch is a simple check.
|
|
25
|
+
* `fetchImpl` is injectable for tests (default: global `fetch`). A non-2xx
|
|
26
|
+
* response, a transport error, or a timeout all yield `healthy: false`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function probeLocal(baseURL: string, timeoutMs?: number, fetchImpl?: typeof fetch): Promise<HealthResult>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local LLM endpoint health probe (TOOL-06 / issue #29, task C). The `run` driver
|
|
3
|
+
* routes each gate to a LOCAL OpenAI-compatible model by default (Ollama at
|
|
4
|
+
* http://localhost:11434/v1); before spending a gate on it we cheaply probe the
|
|
5
|
+
* endpoint. On an UNHEALTHY probe the executor either HALTS (`--strict-local`) or
|
|
6
|
+
* ESCALATES the gate to the cloud gateway. fs-free but network-bound — it lives
|
|
7
|
+
* behind the package main entry, never on the `/pure` graph.
|
|
8
|
+
*
|
|
9
|
+
* The probe hits the OpenAI-compatible `GET {baseURL}/models` listing (Ollama and
|
|
10
|
+
* every OpenAI-compatible server expose it) with a short timeout, so a wedged or
|
|
11
|
+
* absent server fails fast instead of hanging the run.
|
|
12
|
+
*/
|
|
13
|
+
/** Strip a trailing slash so `${baseURL}/models` never doubles up. */
|
|
14
|
+
function normalizeBase(baseURL) {
|
|
15
|
+
return baseURL.replace(/\/+$/, '');
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Probe a local OpenAI-compatible endpoint for liveness. Returns `{ healthy }`
|
|
19
|
+
* rather than throwing so the caller's escalate-or-halt branch is a simple check.
|
|
20
|
+
* `fetchImpl` is injectable for tests (default: global `fetch`). A non-2xx
|
|
21
|
+
* response, a transport error, or a timeout all yield `healthy: false`.
|
|
22
|
+
*/
|
|
23
|
+
export async function probeLocal(baseURL, timeoutMs = 2000, fetchImpl = fetch) {
|
|
24
|
+
const url = `${normalizeBase(baseURL)}/models`;
|
|
25
|
+
const controller = new AbortController();
|
|
26
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
27
|
+
const start = Date.now();
|
|
28
|
+
try {
|
|
29
|
+
const res = await fetchImpl(url, { method: 'GET', signal: controller.signal });
|
|
30
|
+
return {
|
|
31
|
+
healthy: res.ok,
|
|
32
|
+
status: res.status,
|
|
33
|
+
error: res.ok ? undefined : `HTTP ${res.status} ${res.statusText}`.trim(),
|
|
34
|
+
ms: Date.now() - start,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
// AbortError (timeout) and transport errors both surface here as unhealthy.
|
|
39
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
40
|
+
return { healthy: false, error: msg, ms: Date.now() - start };
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
clearTimeout(timer);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=llm-health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-health.js","sourceRoot":"","sources":["../../src/lib/llm-health.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH,sEAAsE;AACtE,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,SAAS,GAAG,IAAI,EAChB,YAA0B,KAAK;IAE/B,MAAM,GAAG,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC;IAC/C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/E,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,EAAE;YACf,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;YACzE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SACvB,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,4EAA4E;QAC5E,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAChE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|
package/dist/lib/metrics.d.ts
CHANGED
|
@@ -28,6 +28,30 @@ export type AutonomyStats = {
|
|
|
28
28
|
};
|
|
29
29
|
byHaltCause: HaltCauseStats;
|
|
30
30
|
};
|
|
31
|
+
/** Per-gate offload breakdown for `eos-spec run` (TOOL-06): which model/executor
|
|
32
|
+
* drove the gate, under which autonomy, and whether it ran local or escalated. */
|
|
33
|
+
export type GateExecStats = {
|
|
34
|
+
count: number;
|
|
35
|
+
/** model id → call count. */
|
|
36
|
+
models: Record<string, number>;
|
|
37
|
+
/** executor name → call count. */
|
|
38
|
+
executors: Record<string, number>;
|
|
39
|
+
/** autonomy mode → call count. */
|
|
40
|
+
autonomy: Record<string, number>;
|
|
41
|
+
/** gates that ran on the local endpoint. */
|
|
42
|
+
local: number;
|
|
43
|
+
/** gates that escalated to the cloud gateway. */
|
|
44
|
+
cloud: number;
|
|
45
|
+
};
|
|
46
|
+
/** Gate-offload rollup across all `run` executor events in the window (AC-6). */
|
|
47
|
+
export type ExecutionStats = {
|
|
48
|
+
totalGateCalls: number;
|
|
49
|
+
local: number;
|
|
50
|
+
cloud: number;
|
|
51
|
+
/** local / (local + cloud); null when there were no gate calls. 1 ⇒ 100% local. */
|
|
52
|
+
localRatio: number | null;
|
|
53
|
+
byGate: Record<string, GateExecStats>;
|
|
54
|
+
};
|
|
31
55
|
export type MetricsReport = {
|
|
32
56
|
total: number;
|
|
33
57
|
windowStart?: string;
|
|
@@ -35,6 +59,8 @@ export type MetricsReport = {
|
|
|
35
59
|
byCommand: Record<string, CommandStats>;
|
|
36
60
|
byModel: Record<string, ModelStats>;
|
|
37
61
|
autonomy: AutonomyStats;
|
|
62
|
+
/** Per-gate model/executor/autonomy + the local-vs-cloud ratio (TOOL-06). */
|
|
63
|
+
execution: ExecutionStats;
|
|
38
64
|
};
|
|
39
65
|
export declare function computeMetrics(events: EosSpecEvent[], opts?: {
|
|
40
66
|
since?: Date;
|
package/dist/lib/metrics.js
CHANGED
|
@@ -23,6 +23,14 @@ export function computeMetrics(events, opts = {}) {
|
|
|
23
23
|
const bump = (k) => {
|
|
24
24
|
byCause[k] = (byCause[k] ?? 0) + 1;
|
|
25
25
|
};
|
|
26
|
+
// TOOL-06 gate-offload rollup. A gate-offload event is any event with an
|
|
27
|
+
// `executor` set (emitted by `eos-spec run` per gate). Accumulated here, BEFORE
|
|
28
|
+
// the gate-event `continue` below, so the rollup sees every gate call regardless
|
|
29
|
+
// of how the D1/D2 halt taxonomy classifies it.
|
|
30
|
+
const byGate = {};
|
|
31
|
+
let execTotal = 0;
|
|
32
|
+
let execLocal = 0;
|
|
33
|
+
let execCloud = 0;
|
|
26
34
|
let prevLifecycleTs;
|
|
27
35
|
for (const e of filtered) {
|
|
28
36
|
const c = (byCommand[e.command] ??= { count: 0, ms: 0, oks: 0 });
|
|
@@ -40,6 +48,26 @@ export function computeMetrics(events, opts = {}) {
|
|
|
40
48
|
else
|
|
41
49
|
m.cost += e.costUsd;
|
|
42
50
|
}
|
|
51
|
+
if (e.executor !== undefined) {
|
|
52
|
+
const gateKey = e.gate ?? 'unknown';
|
|
53
|
+
const g = (byGate[gateKey] ??= { count: 0, models: {}, executors: {}, autonomy: {}, local: 0, cloud: 0 });
|
|
54
|
+
g.count++;
|
|
55
|
+
execTotal++;
|
|
56
|
+
if (e.model)
|
|
57
|
+
g.models[e.model] = (g.models[e.model] ?? 0) + 1;
|
|
58
|
+
g.executors[e.executor] = (g.executors[e.executor] ?? 0) + 1;
|
|
59
|
+
if (e.autonomy)
|
|
60
|
+
g.autonomy[e.autonomy] = (g.autonomy[e.autonomy] ?? 0) + 1;
|
|
61
|
+
// local unless explicitly escalated to the cloud (AC-4 / AC-6).
|
|
62
|
+
if (e.escalatedToCloud) {
|
|
63
|
+
g.cloud++;
|
|
64
|
+
execCloud++;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
g.local++;
|
|
68
|
+
execLocal++;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
43
71
|
// D1 taxonomy — a gate event (verdict:block, or an explicit halt) is an
|
|
44
72
|
// EXPECTED halt; an ok:false with no gate is an unexpected crash. A gate
|
|
45
73
|
// event with ok:true (warn/respected-pass) is neither a halt nor a touch.
|
|
@@ -87,6 +115,13 @@ export function computeMetrics(events, opts = {}) {
|
|
|
87
115
|
{ calls: v.calls, tokensIn: v.tokensIn, tokensOut: v.tokensOut, totalCostUsd: v.anyNull ? null : v.cost },
|
|
88
116
|
])),
|
|
89
117
|
autonomy: { longestRun, humanTouches, lastHalt, byHaltCause: { expectedHalts, unexpectedHalts, byCause } },
|
|
118
|
+
execution: {
|
|
119
|
+
totalGateCalls: execTotal,
|
|
120
|
+
local: execLocal,
|
|
121
|
+
cloud: execCloud,
|
|
122
|
+
localRatio: execTotal ? execLocal / execTotal : null,
|
|
123
|
+
byGate,
|
|
124
|
+
},
|
|
90
125
|
};
|
|
91
126
|
}
|
|
92
127
|
//# sourceMappingURL=metrics.js.map
|