@adhamalkhaja/seyola-runtime 0.11.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/LICENSE +56 -0
  2. package/README.md +87 -0
  3. package/dist/adapters/claude-code-local/index.d.ts +60 -0
  4. package/dist/adapters/claude-code-local/index.d.ts.map +1 -0
  5. package/dist/adapters/claude-code-local/index.js +270 -0
  6. package/dist/adapters/claude-code-local/index.js.map +1 -0
  7. package/dist/bundle/index.d.ts +60 -0
  8. package/dist/bundle/index.d.ts.map +1 -0
  9. package/dist/bundle/index.js +989 -0
  10. package/dist/bundle/index.js.map +1 -0
  11. package/dist/cli/index.d.ts +12 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +207 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/compile-plan/budgets.d.ts +23 -0
  16. package/dist/compile-plan/budgets.d.ts.map +1 -0
  17. package/dist/compile-plan/budgets.js +55 -0
  18. package/dist/compile-plan/budgets.js.map +1 -0
  19. package/dist/compile-plan/graph.d.ts +40 -0
  20. package/dist/compile-plan/graph.d.ts.map +1 -0
  21. package/dist/compile-plan/graph.js +114 -0
  22. package/dist/compile-plan/graph.js.map +1 -0
  23. package/dist/compile-plan/index.d.ts +28 -0
  24. package/dist/compile-plan/index.d.ts.map +1 -0
  25. package/dist/compile-plan/index.js +423 -0
  26. package/dist/compile-plan/index.js.map +1 -0
  27. package/dist/compile-plan/registries.d.ts +35 -0
  28. package/dist/compile-plan/registries.d.ts.map +1 -0
  29. package/dist/compile-plan/registries.js +81 -0
  30. package/dist/compile-plan/registries.js.map +1 -0
  31. package/dist/compile-plan/resolver.d.ts +24 -0
  32. package/dist/compile-plan/resolver.d.ts.map +1 -0
  33. package/dist/compile-plan/resolver.js +57 -0
  34. package/dist/compile-plan/resolver.js.map +1 -0
  35. package/dist/compile-plan/types.d.ts +192 -0
  36. package/dist/compile-plan/types.d.ts.map +1 -0
  37. package/dist/compile-plan/types.js +7 -0
  38. package/dist/compile-plan/types.js.map +1 -0
  39. package/dist/doctor/index.d.ts +43 -0
  40. package/dist/doctor/index.d.ts.map +1 -0
  41. package/dist/doctor/index.js +224 -0
  42. package/dist/doctor/index.js.map +1 -0
  43. package/dist/init/index.d.ts +53 -0
  44. package/dist/init/index.d.ts.map +1 -0
  45. package/dist/init/index.js +414 -0
  46. package/dist/init/index.js.map +1 -0
  47. package/dist/lib/ajvSetup.d.ts +30 -0
  48. package/dist/lib/ajvSetup.d.ts.map +1 -0
  49. package/dist/lib/ajvSetup.js +44 -0
  50. package/dist/lib/ajvSetup.js.map +1 -0
  51. package/dist/lib/loadJson.d.ts +21 -0
  52. package/dist/lib/loadJson.d.ts.map +1 -0
  53. package/dist/lib/loadJson.js +43 -0
  54. package/dist/lib/loadJson.js.map +1 -0
  55. package/dist/lib/loadYaml.d.ts +18 -0
  56. package/dist/lib/loadYaml.d.ts.map +1 -0
  57. package/dist/lib/loadYaml.js +41 -0
  58. package/dist/lib/loadYaml.js.map +1 -0
  59. package/dist/lib/paths.d.ts +22 -0
  60. package/dist/lib/paths.d.ts.map +1 -0
  61. package/dist/lib/paths.js +61 -0
  62. package/dist/lib/paths.js.map +1 -0
  63. package/dist/run-plan/index.d.ts +17 -0
  64. package/dist/run-plan/index.d.ts.map +1 -0
  65. package/dist/run-plan/index.js +235 -0
  66. package/dist/run-plan/index.js.map +1 -0
  67. package/dist/run-plan/types.d.ts +53 -0
  68. package/dist/run-plan/types.d.ts.map +1 -0
  69. package/dist/run-plan/types.js +6 -0
  70. package/dist/run-plan/types.js.map +1 -0
  71. package/dist/run-step/contextPacket.d.ts +39 -0
  72. package/dist/run-step/contextPacket.d.ts.map +1 -0
  73. package/dist/run-step/contextPacket.js +213 -0
  74. package/dist/run-step/contextPacket.js.map +1 -0
  75. package/dist/run-step/derivation.d.ts +41 -0
  76. package/dist/run-step/derivation.d.ts.map +1 -0
  77. package/dist/run-step/derivation.js +61 -0
  78. package/dist/run-step/derivation.js.map +1 -0
  79. package/dist/run-step/effectExecutor.d.ts +42 -0
  80. package/dist/run-step/effectExecutor.d.ts.map +1 -0
  81. package/dist/run-step/effectExecutor.js +297 -0
  82. package/dist/run-step/effectExecutor.js.map +1 -0
  83. package/dist/run-step/formatExecutor.d.ts +34 -0
  84. package/dist/run-step/formatExecutor.d.ts.map +1 -0
  85. package/dist/run-step/formatExecutor.js +329 -0
  86. package/dist/run-step/formatExecutor.js.map +1 -0
  87. package/dist/run-step/index.d.ts +23 -0
  88. package/dist/run-step/index.d.ts.map +1 -0
  89. package/dist/run-step/index.js +627 -0
  90. package/dist/run-step/index.js.map +1 -0
  91. package/dist/run-step/inputResolver.d.ts +48 -0
  92. package/dist/run-step/inputResolver.d.ts.map +1 -0
  93. package/dist/run-step/inputResolver.js +268 -0
  94. package/dist/run-step/inputResolver.js.map +1 -0
  95. package/dist/run-step/types.d.ts +123 -0
  96. package/dist/run-step/types.d.ts.map +1 -0
  97. package/dist/run-step/types.js +6 -0
  98. package/dist/run-step/types.js.map +1 -0
  99. package/dist/validate-pack/checks/capabilitiesRegistry.d.ts +3 -0
  100. package/dist/validate-pack/checks/capabilitiesRegistry.d.ts.map +1 -0
  101. package/dist/validate-pack/checks/capabilitiesRegistry.js +83 -0
  102. package/dist/validate-pack/checks/capabilitiesRegistry.js.map +1 -0
  103. package/dist/validate-pack/checks/contextPolicies.d.ts +3 -0
  104. package/dist/validate-pack/checks/contextPolicies.d.ts.map +1 -0
  105. package/dist/validate-pack/checks/contextPolicies.js +40 -0
  106. package/dist/validate-pack/checks/contextPolicies.js.map +1 -0
  107. package/dist/validate-pack/checks/mvkExamples.d.ts +10 -0
  108. package/dist/validate-pack/checks/mvkExamples.d.ts.map +1 -0
  109. package/dist/validate-pack/checks/mvkExamples.js +77 -0
  110. package/dist/validate-pack/checks/mvkExamples.js.map +1 -0
  111. package/dist/validate-pack/checks/requiredFiles.d.ts +3 -0
  112. package/dist/validate-pack/checks/requiredFiles.d.ts.map +1 -0
  113. package/dist/validate-pack/checks/requiredFiles.js +35 -0
  114. package/dist/validate-pack/checks/requiredFiles.js.map +1 -0
  115. package/dist/validate-pack/checks/resolutionPolicy.d.ts +3 -0
  116. package/dist/validate-pack/checks/resolutionPolicy.d.ts.map +1 -0
  117. package/dist/validate-pack/checks/resolutionPolicy.js +88 -0
  118. package/dist/validate-pack/checks/resolutionPolicy.js.map +1 -0
  119. package/dist/validate-pack/checks/schemas.d.ts +16 -0
  120. package/dist/validate-pack/checks/schemas.d.ts.map +1 -0
  121. package/dist/validate-pack/checks/schemas.js +70 -0
  122. package/dist/validate-pack/checks/schemas.js.map +1 -0
  123. package/dist/validate-pack/index.d.ts +25 -0
  124. package/dist/validate-pack/index.d.ts.map +1 -0
  125. package/dist/validate-pack/index.js +95 -0
  126. package/dist/validate-pack/index.js.map +1 -0
  127. package/dist/validate-pack/reporting.d.ts +6 -0
  128. package/dist/validate-pack/reporting.d.ts.map +1 -0
  129. package/dist/validate-pack/reporting.js +40 -0
  130. package/dist/validate-pack/reporting.js.map +1 -0
  131. package/dist/validate-pack/types.d.ts +34 -0
  132. package/dist/validate-pack/types.d.ts.map +1 -0
  133. package/dist/validate-pack/types.js +8 -0
  134. package/dist/validate-pack/types.js.map +1 -0
  135. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatExecutor.js","sourceRoot":"","sources":["../../src/run-step/formatExecutor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AA6D7E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAuB;IAC7D,MAAM,MAAM,GAAkC,EAAE,CAAC;IACjD,MAAM,OAAO,GAAmC,EAAE,CAAC;IAEnD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAA4B,CAAC;IAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,6CAA6C,EAAE,CAAC;SACjG,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,QAAQ,CAAiB,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,uCAAuC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACrG,UAAU,EAAE,SAAS;SACtB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,CAAC;oBACP,IAAI,EAAE,yBAAyB;oBAC/B,OAAO,EAAE,YAAY,SAAS,6DAA6D,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG;iBAC/J,CAAC;YACF,UAAU,EAAE,SAAS;SACtB,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa;QACtC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC;QACvD,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,SAAS,EAAE,CAAC,CAAC;IAC3D,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;IAChE,IAAI,YAAY,GAAwB,IAAI,CAAC;IAC7C,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,QAAQ,CAAe,gBAAgB,CAAC,CAAC;QACpD,IAAI,EAAE,CAAC,EAAE;YAAE,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC;IACpC,CAAC;IAED,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC;IAC/G,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACtC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,CAAC;oBACP,IAAI,EAAE,wBAAwB;oBAC9B,OAAO,EAAE,yEAAyE;iBACnF,CAAC;YACF,UAAU,EAAE,SAAS;SACtB,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,MAAM,SAAS,GAAG,OAAO,CAAC,oBAAoB,IAAI,YAAY,EAAE,oBAAoB,CAAC;IACrF,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3D,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;gBAClB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,IAAc,CAAC,CAAC;gBAC/D,IAAI,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC3D,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,wBAAwB;wBAC9B,OAAO,EAAE,2CAA2C,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC3G,CAAC,CAAC;oBACH,8CAA8C;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,MAAM,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAEnD,4DAA4D;IAC5D,MAAM,UAAU,GAAG,YAAY,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAC5D,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACf,sFAAsF;YACtF,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,cAAc,IAAI,GAAG,CAAC,MAAM,eAAe,CAAC,CAAC;YACzG,aAAa,CACX,eAAe,EACf,WAAW,GAAG,CAAC,MAAM,kBAAkB,SAAS,kBAAkB;gBAChE,WAAW,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,KAAK;gBACtF,kIAAkI,CACrI,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1E,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,iCAAiC;gBACvC,OAAO,EAAE,WAAW,GAAG,CAAC,MAAM,iDAAiD;aAChF,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,0BAA0B;gBAChC,OAAO,EAAE,iBAAiB,YAAY,0BAA0B,GAAG,CAAC,MAAM,IAAI;aAC/E,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAqC,EAAE,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QACvH,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,cAAc,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7G,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QACvB,OAAO;QACP,MAAM;QACN,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC;AAED,uBAAuB;AAEvB;;;;;;;;;;GAUG;AACH,SAAS,oBAAoB,CAAC,QAAgB,EAAE,IAA6B,EAAE,QAAiB;IAC9F,uDAAuD;IACvD,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,mDAAmD,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QACxG,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,qDAAqD;IACrD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QAC5D,OAAO,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,IAAa,EAAE,QAAiB;IACpE,oEAAoE;IACpE,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACtD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAA+B,EAAE,IAAI,CAAC,CAAC;YAC9D,OAAO,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,IAA6B,EAAE,QAAiB;IACzF,8DAA8D;IAC9D,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,OAAO,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,QAAQ,CAAC,IAAa,EAAE,IAAY;IAC3C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAY,IAAI,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAChE,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAClD,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,QAAiB;IACpD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3E,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,OAAO,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,EAAU;IAChC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,SAAS,GAAa,EAAE,CAAC;IAE7B,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YACrD,SAAS,GAAG,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,CAAC;YACZ,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,OAAO,EAAE,CAAC;YACZ,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC;YAC7D,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE,CAAC;YACb,cAAc,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClB,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC;YAChD,SAAS;QACX,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,cAAc,EAAE,CAAC;IACjB,SAAS,EAAE,CAAC;IACZ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,8DAA8D;IAC9D,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACxB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,0BAA0B,EAAE,qBAAqB,CAAC,CAAC;IACrE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;IAC7D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IACjD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACnD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sBAAsB;AAEtB,SAAS,gBAAgB,CAAC,SAAiB,EAAE,QAAgB;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,KAAK,OAAO,CAAC;AAEb,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAC9B,QAA6B,EAC7B,IAAyB,EACzB,OAAe,EACf,UAAkB;IAElB,MAAM,MAAM,GAA+B,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1E,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,MAAM;QACxB,MAAM;QACN,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,QAAQ,CAAC,kBAAkB;YACjC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAC,CAAC;QACH,WAAW,EAAE,IAAI,CAAC,EAAE;YAClB,CAAC,CAAC;gBACE;oBACE,MAAM,EAAE,iBAAiB;oBACzB,SAAS,EAAE,CAAC;oBACZ,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7D,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;oBACtD,KAAK,EAAE,WAAW,IAAI,CAAC,UAAU,IAAI,WAAW,aAAa,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,wBAAwB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,2BAA2B;iBACtM;aACF;YACH,CAAC,CAAC,EAAE;QACN,IAAI,EAAE,EAAE,kBAAkB,EAAE,UAAU,GAAG,IAAI,EAAE;QAC/C,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE;YACL,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO;SACR;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Milestone 3 entry point — run-step.
3
+ *
4
+ * Executes one WorkPlan step against a runtime backend. Two paths:
5
+ * - --dry-run: emits a DryRunReport. No backend call.
6
+ * - real: spawns claude-code-local, validates output, writes
7
+ * substrate artifact + derivation record.
8
+ *
9
+ * Only claude-code-local backend is supported in v0.4.x.
10
+ */
11
+ import type { RunStepInputs, StructuredResult, DryRunReport } from "./types.js";
12
+ export interface RunStepResult {
13
+ exitCode: 0 | 1 | 2;
14
+ derivationHash?: string;
15
+ errors: Array<{
16
+ code: string;
17
+ message: string;
18
+ }>;
19
+ dryRun?: DryRunReport;
20
+ result?: StructuredResult;
21
+ }
22
+ export declare function runStep(args: RunStepInputs): Promise<RunStepResult>;
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/run-step/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,OAAO,KAAK,EACV,aAAa,EAEb,gBAAgB,EAChB,YAAY,EAEb,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAID,wBAAsB,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CA0TzE"}
@@ -0,0 +1,627 @@
1
+ /**
2
+ * Milestone 3 entry point — run-step.
3
+ *
4
+ * Executes one WorkPlan step against a runtime backend. Two paths:
5
+ * - --dry-run: emits a DryRunReport. No backend call.
6
+ * - real: spawns claude-code-local, validates output, writes
7
+ * substrate artifact + derivation record.
8
+ *
9
+ * Only claude-code-local backend is supported in v0.4.x.
10
+ */
11
+ import { writeFileSync, mkdirSync, existsSync, readdirSync } from "node:fs";
12
+ import { join, resolve } from "node:path";
13
+ import { compilePlan } from "../compile-plan/index.js";
14
+ import { resolvePackPath } from "../lib/paths.js";
15
+ import { loadJson } from "../lib/loadJson.js";
16
+ import { loadYaml } from "../lib/loadYaml.js";
17
+ import { makeAjv, compileSchema, formatAjvErrors } from "../lib/ajvSetup.js";
18
+ import { assembleContextPacket } from "./contextPacket.js";
19
+ import { resolveStepInputs } from "./inputResolver.js";
20
+ import { executeFormatStep, formatStepResult } from "./formatExecutor.js";
21
+ import { executeEffectStep, effectStepResult } from "./effectExecutor.js";
22
+ import { writeDerivation } from "./derivation.js";
23
+ import { executeStep as claudeCodeLocalExecute } from "../adapters/claude-code-local/index.js";
24
+ const SUPPORTED_BACKENDS = new Set(["claude-code-local"]);
25
+ export async function runStep(args) {
26
+ if (!SUPPORTED_BACKENDS.has(args.backend)) {
27
+ emit(args, {
28
+ code: "unsupported_backend",
29
+ message: `Backend '${args.backend}' is not supported in v0.4.x. Supported: ${[...SUPPORTED_BACKENDS].join(", ")}.`,
30
+ });
31
+ return { exitCode: 2, errors: [{ code: "unsupported_backend", message: args.backend }] };
32
+ }
33
+ // 1. Obtain a WorkPlan. Either compile from --task or load from --plan.
34
+ let plan;
35
+ let task;
36
+ if (args.taskPath) {
37
+ const compileResult = await compilePlan({
38
+ packPath: args.packPath,
39
+ taskPath: args.taskPath,
40
+ lockfilePath: args.lockfilePath,
41
+ json: false,
42
+ });
43
+ if (compileResult.exitCode !== 0 || !compileResult.plan) {
44
+ return {
45
+ exitCode: 1,
46
+ errors: compileResult.errors.map((e) => ({ code: e.code, message: e.message })),
47
+ };
48
+ }
49
+ plan = compileResult.plan;
50
+ // Load task for derivation provenance.
51
+ const taskLoaded = args.taskPath.endsWith(".yaml") || args.taskPath.endsWith(".yml")
52
+ ? loadYaml(resolve(args.taskPath))
53
+ : loadJson(resolve(args.taskPath));
54
+ if (taskLoaded.ok)
55
+ task = taskLoaded.data;
56
+ }
57
+ else if (args.planPath) {
58
+ const planLoaded = args.planPath.endsWith(".yaml") || args.planPath.endsWith(".yml")
59
+ ? loadYaml(resolve(args.planPath))
60
+ : loadJson(resolve(args.planPath));
61
+ if (!planLoaded.ok) {
62
+ return { exitCode: 1, errors: [{ code: planLoaded.code, message: planLoaded.message }] };
63
+ }
64
+ plan = planLoaded.data;
65
+ }
66
+ else {
67
+ return {
68
+ exitCode: 2,
69
+ errors: [{ code: "missing_input", message: "run-step requires either --task or --plan." }],
70
+ };
71
+ }
72
+ // 2. Select the step.
73
+ const step = plan.steps?.find((s) => s.id === args.stepId);
74
+ if (!step) {
75
+ return {
76
+ exitCode: 1,
77
+ errors: [{ code: "unknown_step_id", message: `No step with id '${args.stepId}' in the WorkPlan.` }],
78
+ };
79
+ }
80
+ // 3. Resolve capability and skill.
81
+ const stepTyped = step;
82
+ if (stepTyped.kind !== "skill" && stepTyped.kind !== "format" && stepTyped.kind !== "effect") {
83
+ return {
84
+ exitCode: 1,
85
+ errors: [{
86
+ code: "step_kind_unsupported",
87
+ message: `run-step v0.8.x supports skill, format, and effect steps. Step '${args.stepId}' is kind=${stepTyped.kind}.`,
88
+ }],
89
+ };
90
+ }
91
+ if (stepTyped.kind === "skill" && (!stepTyped.capability || !stepTyped.skill_ref)) {
92
+ return {
93
+ exitCode: 1,
94
+ errors: [{ code: "missing_step_metadata", message: `Skill step '${args.stepId}' missing capability or skill_ref.` }],
95
+ };
96
+ }
97
+ if (stepTyped.kind === "format" && !stepTyped.adapter) {
98
+ return {
99
+ exitCode: 1,
100
+ errors: [{ code: "missing_step_metadata", message: `Format step '${args.stepId}' missing adapter id.` }],
101
+ };
102
+ }
103
+ // Read capability registry. Skill steps require an ok-status capability.
104
+ // Format steps may also reference a capability (e.g., document-to-pdf) but
105
+ // their gating is the format adapter's existence in .formats/registry.json,
106
+ // which the format executor validates separately.
107
+ const capRegPath = resolvePackPath(args.packPath, ".capabilities/registry.json");
108
+ const capReg = loadJson(capRegPath);
109
+ if (!capReg.ok) {
110
+ return { exitCode: 1, errors: [{ code: capReg.code, message: capReg.message }] };
111
+ }
112
+ // Format steps may not have a capability field; that's fine.
113
+ const capabilityEntry = stepTyped.capability ? capReg.data.capabilities[stepTyped.capability] : undefined;
114
+ if (stepTyped.capability && !capabilityEntry) {
115
+ return {
116
+ exitCode: 1,
117
+ errors: [{ code: "unknown_capability", message: `Capability '${stepTyped.capability}' not in registry.` }],
118
+ };
119
+ }
120
+ if (capabilityEntry?.provider_status?.startsWith("gap:")) {
121
+ return {
122
+ exitCode: 1,
123
+ errors: [{
124
+ code: "capability_gap",
125
+ message: `Capability '${stepTyped.capability}' is provider_status='${capabilityEntry.provider_status}'. Cannot execute until the gap closes.`,
126
+ }],
127
+ };
128
+ }
129
+ const outputArtifactType = stepTyped.produces ?? capabilityEntry?.output_artifact_type ?? "";
130
+ // Effect steps don't need to declare an output artifact type — they emit
131
+ // an effect record + exported files, not a typed artifact. Skill and
132
+ // format steps still require it.
133
+ if (!outputArtifactType && stepTyped.kind !== "effect") {
134
+ return {
135
+ exitCode: 1,
136
+ errors: [{ code: "missing_output_artifact_type", message: "Cannot determine output artifact type for the step." }],
137
+ };
138
+ }
139
+ const outputSchemaPath = outputArtifactType
140
+ ? resolvePackPath(args.packPath, `.shapes/${outputArtifactType}.json`)
141
+ : "";
142
+ const selected = {
143
+ task,
144
+ plan,
145
+ step,
146
+ stepId: stepTyped.id,
147
+ capability: stepTyped.capability ?? "",
148
+ capabilityEntry: capabilityEntry ?? {},
149
+ skillRef: stepTyped.skill_ref ?? "",
150
+ skillBodyPath: stepTyped.skill_ref ? resolvePackPath(args.packPath, stepTyped.skill_ref) : "",
151
+ outputArtifactType,
152
+ outputSchemaPath,
153
+ };
154
+ // 4. Compile ContextPacket. Build the capability + step-id maps the
155
+ // input resolver needs to walk upstream-step references.
156
+ const capabilityById = new Map();
157
+ for (const [id, cap] of Object.entries(capReg.data.capabilities)) {
158
+ capabilityById.set(id, cap);
159
+ }
160
+ const stepIdToCapabilityId = new Map();
161
+ const planSteps = plan.steps ?? [];
162
+ for (const s of planSteps) {
163
+ if (s.capability)
164
+ stepIdToCapabilityId.set(s.id, s.capability);
165
+ }
166
+ // Load configs registry for typed-config resolution.
167
+ const configsRegPath = resolvePackPath(args.packPath, ".configs/registry.json");
168
+ const configsReg = loadJson(configsRegPath);
169
+ if (!configsReg.ok) {
170
+ return { exitCode: 1, errors: [{ code: configsReg.code, message: configsReg.message }] };
171
+ }
172
+ // Branch by step kind. Format and effect steps don't need the skill-body
173
+ // loader or the model-dispatch flow. They resolve their inputs and run
174
+ // the appropriate executor directly.
175
+ if (stepTyped.kind === "format") {
176
+ return await executeFormatPath({
177
+ args,
178
+ selected,
179
+ configs: configsReg.data,
180
+ capabilityById,
181
+ stepIdToCapabilityId,
182
+ });
183
+ }
184
+ if (stepTyped.kind === "effect") {
185
+ return await executeEffectPath({
186
+ args,
187
+ selected,
188
+ configs: configsReg.data,
189
+ capabilityById,
190
+ stepIdToCapabilityId,
191
+ });
192
+ }
193
+ const taskSpecDir = args.taskPath ? resolve(args.taskPath, "..") : undefined;
194
+ const packetResult = assembleContextPacket({
195
+ packPath: args.packPath,
196
+ memberRoot: args.memberRoot,
197
+ taskSpecDir,
198
+ outputDir: args.outputDir ? resolve(args.outputDir) : undefined,
199
+ selected,
200
+ inputTranscriptPath: args.inputTranscriptPath,
201
+ inputArtifacts: args.inputArtifacts ?? {},
202
+ configs: configsReg.data,
203
+ capabilityById,
204
+ stepIdToCapabilityId,
205
+ dryRun: args.dryRun,
206
+ });
207
+ if (!packetResult.ok) {
208
+ return { exitCode: 1, errors: [{ code: packetResult.code, message: packetResult.message }] };
209
+ }
210
+ const packet = packetResult.packet;
211
+ // 5. Dry-run path.
212
+ if (args.dryRun) {
213
+ const inputErrors = packet.resolved_inputs.filter((i) => i.error);
214
+ const report = {
215
+ step_id: selected.stepId,
216
+ capability: selected.capability,
217
+ skill_ref: selected.skillRef,
218
+ output_artifact_type: selected.outputArtifactType,
219
+ output_schema_path: selected.outputSchemaPath,
220
+ context_packet: {
221
+ loaded_skills: packet.loaded_skills,
222
+ loaded_configs: packet.loaded_configs,
223
+ loaded_resources: packet.loaded_resources,
224
+ excluded: packet.excluded,
225
+ token_budget: packet.token_budget,
226
+ },
227
+ prompt_preview_first_400_chars: packet.prompt.slice(0, 400),
228
+ prompt_total_chars: packet.prompt.length,
229
+ resolved_inputs: packet.resolved_inputs,
230
+ backend: args.backend,
231
+ notes: [
232
+ "Dry-run mode: no backend call was made.",
233
+ `Resolved ${packet.resolved_inputs.length} inputs.`,
234
+ ...(inputErrors.length > 0
235
+ ? [`${inputErrors.length} input(s) have soft errors (substrate paths missing); skill may degrade gracefully.`]
236
+ : ["All inputs resolved cleanly."]),
237
+ ],
238
+ };
239
+ if (args.json) {
240
+ process.stdout.write(JSON.stringify({ dryRun: report }, null, 2) + "\n");
241
+ }
242
+ else {
243
+ process.stderr.write(formatDryRunHuman(report));
244
+ }
245
+ return { exitCode: 0, errors: [], dryRun: report };
246
+ }
247
+ // 6. Real execution path. Spawn claude-code-local.
248
+ const exec = await claudeCodeLocalExecute({
249
+ prompt: packet.prompt,
250
+ outputSchema: packet.output_schema,
251
+ });
252
+ if (!exec.ok) {
253
+ const result = {
254
+ step_id: selected.stepId,
255
+ status: "failed",
256
+ produced_at: new Date().toISOString(),
257
+ errors: exec.errors,
258
+ audit: { skill_ref: selected.skillRef, capability: selected.capability, backend: args.backend },
259
+ };
260
+ persistAndEmit(args, selected, packet, result);
261
+ return { exitCode: 1, errors: exec.errors, result };
262
+ }
263
+ // 7. Validate parsed output against the output schema.
264
+ const ajv = makeAjv();
265
+ const compiled = compileSchema(ajv, packet.output_schema);
266
+ if (!compiled.ok) {
267
+ const errors = [{ code: "schema_compile_failed", message: compiled.message }];
268
+ const result = {
269
+ step_id: selected.stepId,
270
+ status: "failed",
271
+ produced_at: new Date().toISOString(),
272
+ errors,
273
+ audit: { skill_ref: selected.skillRef, capability: selected.capability, backend: args.backend },
274
+ };
275
+ persistAndEmit(args, selected, packet, result);
276
+ return { exitCode: 1, errors, result };
277
+ }
278
+ if (!compiled.validate(exec.parsed)) {
279
+ const ajvErrors = formatAjvErrors(compiled.validate.errors);
280
+ const errors = [{ code: "output_schema_validation_failed", message: ajvErrors.join("; ") }];
281
+ const result = {
282
+ step_id: selected.stepId,
283
+ status: "failed",
284
+ produced_at: new Date().toISOString(),
285
+ errors,
286
+ audit: { skill_ref: selected.skillRef, capability: selected.capability, backend: args.backend },
287
+ };
288
+ persistAndEmit(args, selected, packet, result);
289
+ return { exitCode: 1, errors, result };
290
+ }
291
+ // 8. Write substrate artifact.
292
+ const outputDir = resolve(args.outputDir ?? "./output");
293
+ const artifactDir = join(outputDir, "mvk");
294
+ if (!existsSync(artifactDir))
295
+ mkdirSync(artifactDir, { recursive: true });
296
+ const artifactPath = join(artifactDir, `${selected.outputArtifactType}.json`);
297
+ writeFileSync(artifactPath, JSON.stringify(exec.parsed, null, 2));
298
+ // 9. Build StructuredResult.
299
+ const result = {
300
+ step_id: selected.stepId,
301
+ status: "success",
302
+ produced_at: new Date().toISOString(),
303
+ outputs: [{ type: selected.outputArtifactType, path: artifactPath, format: "json" }],
304
+ evaluations: [
305
+ {
306
+ rubric: "schema-validation",
307
+ threshold: 1,
308
+ score: 1,
309
+ passed: true,
310
+ notes: "Output validated against the output schema. Full rubric scoring deferred to M3.5+.",
311
+ },
312
+ ],
313
+ cost: exec.costEstimate
314
+ ? { wall_clock_seconds: exec.costEstimate.wallClockSeconds, model_id: exec.costEstimate.modelId }
315
+ : undefined,
316
+ errors: [],
317
+ audit: { skill_ref: selected.skillRef, capability: selected.capability, backend: args.backend },
318
+ };
319
+ persistAndEmit(args, selected, packet, result);
320
+ return { exitCode: 0, errors: [], result };
321
+ }
322
+ async function executeFormatPath(p) {
323
+ const { args, selected } = p;
324
+ const stepInputs = selected.step.inputs ?? {};
325
+ const resolvedInputs = resolveStepInputs({
326
+ inputs: stepInputs,
327
+ inputArtifacts: args.inputArtifacts ?? {},
328
+ packPath: args.packPath,
329
+ memberRoot: args.memberRoot,
330
+ configs: p.configs,
331
+ capabilityById: p.capabilityById,
332
+ stepIdToCapabilityId: p.stepIdToCapabilityId,
333
+ });
334
+ // Hard-fail on unresolved upstream artifacts (real-run only). In dry-run,
335
+ // skip execution and emit a dry-run report instead.
336
+ if (args.dryRun) {
337
+ const report = {
338
+ step_id: selected.stepId,
339
+ capability: selected.capability,
340
+ skill_ref: "",
341
+ output_artifact_type: selected.outputArtifactType,
342
+ output_schema_path: selected.outputSchemaPath,
343
+ context_packet: {
344
+ loaded_skills: [],
345
+ loaded_configs: [],
346
+ loaded_resources: resolvedInputs
347
+ .filter((i) => i.resolvedPath)
348
+ .map((i) => i.resolvedPath),
349
+ excluded: ["all_skill_bodies", "all_models"],
350
+ token_budget: { max_total: 0, skill_instructions: 0, retrieved_evidence: 0, working_state: 0, headroom: 0 },
351
+ },
352
+ prompt_preview_first_400_chars: `(format step — no model prompt; adapter ${selected.step.adapter ?? "(unknown)"} would render the input artifact deterministically)`,
353
+ prompt_total_chars: 0,
354
+ resolved_inputs: resolvedInputs.map((i) => ({
355
+ param: i.paramName,
356
+ kind: i.kind,
357
+ source: i.resolvedPath ?? i.resolvedAddress ?? i.rawValue,
358
+ validated: i.validated,
359
+ error: i.error?.message,
360
+ })),
361
+ backend: args.backend,
362
+ notes: [
363
+ "Dry-run: format step would invoke deterministic adapter, no model call.",
364
+ `Adapter: ${selected.step.adapter ?? "(unknown)"}`,
365
+ ],
366
+ };
367
+ if (args.json)
368
+ process.stdout.write(JSON.stringify({ dryRun: report }, null, 2) + "\n");
369
+ else
370
+ process.stderr.write(formatDryRunHuman(report));
371
+ return { exitCode: 0, errors: [], dryRun: report };
372
+ }
373
+ const hardErrors = resolvedInputs.filter((i) => i.error && i.kind === "artifact-upstream");
374
+ if (hardErrors.length > 0) {
375
+ const first = hardErrors[0];
376
+ return { exitCode: 1, errors: [{ code: first.error.code, message: first.error.message }] };
377
+ }
378
+ const start = Date.now();
379
+ const exec = await executeFormatStep({
380
+ packPath: args.packPath,
381
+ selected,
382
+ resolvedInputs,
383
+ outputDir: args.outputDir ?? "./output",
384
+ });
385
+ const duration = Date.now() - start;
386
+ const result = formatStepResult(selected, exec, args.backend, duration);
387
+ // Persist + emit. Format steps don't have a ContextPacket, so we build a
388
+ // minimal packet stub for the derivation record.
389
+ const stubPacket = {
390
+ step_id: selected.stepId,
391
+ task_summary: "",
392
+ current_step: { kind: "format", capability: selected.capability },
393
+ loaded_skills: [],
394
+ loaded_configs: [],
395
+ loaded_resources: resolvedInputs.filter((i) => i.resolvedPath).map((i) => i.resolvedPath),
396
+ excluded: ["all_skill_bodies", "all_models"],
397
+ token_budget: { max_total: 0, skill_instructions: 0, retrieved_evidence: 0, working_state: 0, headroom: 0 },
398
+ prompt: `(format step ${selected.step.adapter})`,
399
+ output_schema: {},
400
+ resolved_inputs: resolvedInputs.map((i) => ({
401
+ param: i.paramName,
402
+ kind: i.kind,
403
+ source: i.resolvedPath ?? i.resolvedAddress ?? i.rawValue,
404
+ validated: i.validated,
405
+ error: i.error?.message,
406
+ })),
407
+ };
408
+ persistAndEmit(args, selected, stubPacket, result);
409
+ return { exitCode: exec.ok ? 0 : 1, errors: exec.errors, result };
410
+ }
411
+ async function executeEffectPath(p) {
412
+ const { args, selected } = p;
413
+ // Effects payloads are typically ${sN.output} references. We resolve them
414
+ // through the same input resolver to get the upstream artifact paths.
415
+ // Effect steps may not have an `inputs` field; we synthesize one from
416
+ // effect_request.payload if needed so the resolver can do its job.
417
+ const stepRaw = selected.step;
418
+ const synthesizedInputs = { ...(stepRaw.inputs ?? {}) };
419
+ if (typeof stepRaw.effect_request?.payload === "string" && !synthesizedInputs.payload) {
420
+ synthesizedInputs.payload = stepRaw.effect_request.payload;
421
+ }
422
+ const resolvedInputs = resolveStepInputs({
423
+ inputs: synthesizedInputs,
424
+ inputArtifacts: args.inputArtifacts ?? {},
425
+ packPath: args.packPath,
426
+ memberRoot: args.memberRoot,
427
+ configs: p.configs,
428
+ capabilityById: p.capabilityById,
429
+ stepIdToCapabilityId: p.stepIdToCapabilityId,
430
+ });
431
+ if (args.dryRun) {
432
+ const report = {
433
+ step_id: selected.stepId,
434
+ capability: selected.capability,
435
+ skill_ref: "",
436
+ output_artifact_type: selected.outputArtifactType,
437
+ output_schema_path: selected.outputSchemaPath,
438
+ context_packet: {
439
+ loaded_skills: [],
440
+ loaded_configs: [],
441
+ loaded_resources: resolvedInputs.filter((i) => i.resolvedPath).map((i) => i.resolvedPath),
442
+ excluded: ["all_skill_bodies", "all_models"],
443
+ token_budget: { max_total: 0, skill_instructions: 0, retrieved_evidence: 0, working_state: 0, headroom: 0 },
444
+ },
445
+ prompt_preview_first_400_chars: `(effect step — no model prompt; effect ${stepRaw.effect_request?.type ?? "(unknown)"} would copy upstream outputs to a target directory)`,
446
+ prompt_total_chars: 0,
447
+ resolved_inputs: resolvedInputs.map((i) => ({
448
+ param: i.paramName,
449
+ kind: i.kind,
450
+ source: i.resolvedPath ?? i.resolvedAddress ?? i.rawValue,
451
+ validated: i.validated,
452
+ error: i.error?.message,
453
+ })),
454
+ backend: args.backend,
455
+ notes: [
456
+ "Dry-run: effect step would copy upstream outputs deterministically; no model call.",
457
+ `Effect type: ${stepRaw.effect_request?.type ?? "(unknown)"}`,
458
+ ],
459
+ };
460
+ if (args.json)
461
+ process.stdout.write(JSON.stringify({ dryRun: report }, null, 2) + "\n");
462
+ else
463
+ process.stderr.write(formatDryRunHuman(report));
464
+ return { exitCode: 0, errors: [], dryRun: report };
465
+ }
466
+ // Determine upstream output paths. The effectExecutor accepts these
467
+ // directly when run-plan provides them; here we derive from the resolved
468
+ // input artifact (which is the s3 output JSON file in MVK case).
469
+ // For run-plan callers, the inputArtifacts map contains the upstream step
470
+ // id keyed to its output path. file.export should copy ALL of that step's
471
+ // outputs, not just the JSON. We discover them by reading the directory
472
+ // adjacent to the resolved artifact path or by looking at what run-plan
473
+ // explicitly passed.
474
+ const upstreamOutputPaths = collectUpstreamOutputs({
475
+ args,
476
+ stepRaw,
477
+ resolvedInputs,
478
+ });
479
+ const start = Date.now();
480
+ const exec = await executeEffectStep({
481
+ packPath: args.packPath,
482
+ selected,
483
+ resolvedInputs,
484
+ outputDir: args.outputDir ?? "./output",
485
+ upstreamOutputPaths,
486
+ });
487
+ const duration = Date.now() - start;
488
+ const result = effectStepResult(selected, exec, args.backend, duration);
489
+ const stubPacket = {
490
+ step_id: selected.stepId,
491
+ task_summary: "",
492
+ current_step: { kind: "effect", capability: selected.capability },
493
+ loaded_skills: [],
494
+ loaded_configs: [],
495
+ loaded_resources: upstreamOutputPaths,
496
+ excluded: ["all_skill_bodies", "all_models"],
497
+ token_budget: { max_total: 0, skill_instructions: 0, retrieved_evidence: 0, working_state: 0, headroom: 0 },
498
+ prompt: `(effect step ${stepRaw.effect_request?.type ?? "(unknown)"})`,
499
+ output_schema: {},
500
+ resolved_inputs: resolvedInputs.map((i) => ({
501
+ param: i.paramName,
502
+ kind: i.kind,
503
+ source: i.resolvedPath ?? i.resolvedAddress ?? i.rawValue,
504
+ validated: i.validated,
505
+ error: i.error?.message,
506
+ })),
507
+ };
508
+ persistAndEmit(args, selected, stubPacket, result);
509
+ return { exitCode: exec.ok ? 0 : 1, errors: exec.errors, result };
510
+ }
511
+ function collectUpstreamOutputs(c) {
512
+ // 1. If the upstream resolved input is an artifact-upstream that points at
513
+ // a JSON file, look for sibling files with the same base name and
514
+ // different extensions in the same directory. This is the typical
515
+ // pattern for the s3 format step which produces multiple files.
516
+ const upstreamInput = c.resolvedInputs.find((i) => i.kind === "artifact-upstream" && i.resolvedPath);
517
+ if (upstreamInput?.resolvedPath) {
518
+ return discoverSiblingFiles(upstreamInput.resolvedPath);
519
+ }
520
+ // 2. Otherwise, look for any artifact-upstream alias in inputArtifacts and
521
+ // walk its sibling files.
522
+ const inputArtifacts = c.args.inputArtifacts ?? {};
523
+ const paths = [];
524
+ for (const path of Object.values(inputArtifacts)) {
525
+ paths.push(...discoverSiblingFiles(path));
526
+ }
527
+ return paths;
528
+ }
529
+ function discoverSiblingFiles(filePath) {
530
+ // Returns the file plus any sibling files that share the same stem.
531
+ // This is how we capture s3's md, html, and pdf.deferred.txt outputs
532
+ // when the upstream input artifact is the JSON file at the same stem.
533
+ if (!filePath)
534
+ return [];
535
+ const dir = dirnameOf(filePath);
536
+ const base = baseNameStem(filePath);
537
+ if (!dir || !base)
538
+ return [filePath];
539
+ try {
540
+ const entries = readdirSync(dir);
541
+ const matches = entries.filter((e) => e.startsWith(base + ".") || e === base);
542
+ const result = matches.map((e) => `${dir}/${e}`);
543
+ return result.length > 0 ? result : [filePath];
544
+ }
545
+ catch {
546
+ return [filePath];
547
+ }
548
+ }
549
+ function dirnameOf(filePath) {
550
+ const idx = Math.max(filePath.lastIndexOf("/"), filePath.lastIndexOf("\\"));
551
+ return idx >= 0 ? filePath.slice(0, idx) : "";
552
+ }
553
+ function baseNameStem(filePath) {
554
+ const idx = Math.max(filePath.lastIndexOf("/"), filePath.lastIndexOf("\\"));
555
+ const fileName = idx >= 0 ? filePath.slice(idx + 1) : filePath;
556
+ const dotIdx = fileName.indexOf(".");
557
+ return dotIdx > 0 ? fileName.slice(0, dotIdx) : fileName;
558
+ }
559
+ // ---------- Helpers ----------
560
+ function persistAndEmit(args, selected, packet, result) {
561
+ const outputDir = resolve(args.outputDir ?? "./output");
562
+ if (!existsSync(outputDir))
563
+ mkdirSync(outputDir, { recursive: true });
564
+ const derivation = writeDerivation({
565
+ outputDir,
566
+ selected,
567
+ packet,
568
+ result,
569
+ backend: args.backend,
570
+ });
571
+ if (args.json) {
572
+ process.stdout.write(JSON.stringify({ result, derivation: derivation.path }, null, 2) + "\n");
573
+ }
574
+ else {
575
+ process.stderr.write(`run-step: status=${result.status}\n`);
576
+ if (result.outputs) {
577
+ for (const out of result.outputs) {
578
+ process.stderr.write(` output: ${out.type} -> ${out.path}\n`);
579
+ }
580
+ }
581
+ process.stderr.write(` derivation: ${derivation.path}\n`);
582
+ if (result.errors && result.errors.length > 0) {
583
+ for (const e of result.errors)
584
+ process.stderr.write(` error [${e.code}]: ${e.message}\n`);
585
+ }
586
+ }
587
+ }
588
+ function emit(args, error) {
589
+ if (args.json) {
590
+ process.stdout.write(JSON.stringify({ errors: [error] }, null, 2) + "\n");
591
+ }
592
+ else {
593
+ process.stderr.write(`run-step ERROR [${error.code}]: ${error.message}\n`);
594
+ }
595
+ }
596
+ function formatDryRunHuman(report) {
597
+ const lines = [];
598
+ lines.push("");
599
+ lines.push(`run-step --dry-run`);
600
+ lines.push(` step_id: ${report.step_id}`);
601
+ lines.push(` capability: ${report.capability}`);
602
+ lines.push(` skill_ref: ${report.skill_ref}`);
603
+ lines.push(` output_artifact_type: ${report.output_artifact_type}`);
604
+ lines.push(` output_schema_path: ${report.output_schema_path}`);
605
+ lines.push(` backend: ${report.backend}`);
606
+ lines.push(` loaded_skills: ${report.context_packet.loaded_skills.join(", ")}`);
607
+ lines.push(` loaded_configs: ${report.context_packet.loaded_configs.join(", ") || "(none)"}`);
608
+ lines.push(` loaded_resources: ${report.context_packet.loaded_resources.length} files`);
609
+ lines.push(` excluded: ${report.context_packet.excluded.join(", ")}`);
610
+ lines.push(` prompt_total_chars: ${report.prompt_total_chars}`);
611
+ lines.push("");
612
+ lines.push(" resolved inputs:");
613
+ for (const input of report.resolved_inputs) {
614
+ const validated = input.validated === true ? " (validated)" : input.validated === false ? " (unvalidated)" : "";
615
+ const errorTag = input.error ? ` !! ${input.error}` : "";
616
+ lines.push(` ${input.param}: ${input.kind}${validated} <- ${input.source}${errorTag}`);
617
+ }
618
+ lines.push("");
619
+ lines.push(" prompt preview (first 400 chars):");
620
+ lines.push(" " + report.prompt_preview_first_400_chars.replace(/\n/g, "\n "));
621
+ lines.push("");
622
+ for (const note of report.notes)
623
+ lines.push(` note: ${note}`);
624
+ lines.push("");
625
+ return lines.join("\n");
626
+ }
627
+ //# sourceMappingURL=index.js.map