@llm4ts/shell 0.17.0 → 0.18.1

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 (269) hide show
  1. package/dist/Cli.d.ts +4 -0
  2. package/dist/Cli.d.ts.map +1 -1
  3. package/dist/Cli.js +69 -8
  4. package/dist/Cli.js.map +1 -1
  5. package/dist/FlowCatalog.d.ts +10 -4
  6. package/dist/FlowCatalog.d.ts.map +1 -1
  7. package/dist/FlowCatalog.js +25 -14
  8. package/dist/FlowCatalog.js.map +1 -1
  9. package/flows/epic-stories.js +1 -8
  10. package/flows/hello.js +15 -0
  11. package/flows/implement.js +1 -8
  12. package/flows/issue-pr.js +1 -8
  13. package/flows/judge-suite.js +1 -4
  14. package/flows/lib/epic-stories.js +3 -4
  15. package/flows/local.js +2 -5
  16. package/flows/modernize-bench.js +3 -12
  17. package/flows/modernize-extract.js +38 -20
  18. package/flows/modernize-implement.js +4 -15
  19. package/flows/modernize-pack-check.js +1 -8
  20. package/flows/modernize-review.js +4 -13
  21. package/flows/modernize-seed.js +3 -11
  22. package/flows/modernize-survey.js +0 -0
  23. package/flows/modernize-verify.js +5 -13
  24. package/flows/sdd.js +2 -12
  25. package/kits/j2ee-nextjs/README.md +29 -0
  26. package/kits/j2ee-nextjs/fixtures/demo-bank/RUNBOOK.md +232 -0
  27. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/PAGES.md +67 -0
  28. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/pom.xml +49 -0
  29. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/dto/AcctOvwDTO.java +58 -0
  30. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/dto/BenfDTO.java +49 -0
  31. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/dto/TrfDTO.java +70 -0
  32. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbAcctListService.java +53 -0
  33. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbBenfListService.java +58 -0
  34. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbBenfMaintService.java +58 -0
  35. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbException.java +21 -0
  36. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbGateway.java +44 -0
  37. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbTrfExecService.java +53 -0
  38. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbTrfValidateService.java +45 -0
  39. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/AccountOverviewServlet.java +90 -0
  40. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/BeneficiaryServlet.java +195 -0
  41. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/TransferDraft.java +62 -0
  42. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/TransferServlet.java +223 -0
  43. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/WEB-INF/web.xml +59 -0
  44. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/accountOverview.jsp +65 -0
  45. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/beneficiaryEdit.jsp +70 -0
  46. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/beneficiaryList.jsp +43 -0
  47. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/css/bank.css +132 -0
  48. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/dashboard.jsp +28 -0
  49. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/footer.jsp +8 -0
  50. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/header.jsp +22 -0
  51. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/help.jsp +32 -0
  52. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/js/jquery-1.12.4.min.js +1 -0
  53. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/js/validate.js +79 -0
  54. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/login.jsp +29 -0
  55. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/messages.jsp +34 -0
  56. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/nav.jsp +14 -0
  57. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/oldTransfer.jsp +34 -0
  58. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/profile.jsp +26 -0
  59. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/promoQ3.jsp +23 -0
  60. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/settings.jsp +34 -0
  61. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/testHarness.jsp +39 -0
  62. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/transferConfirm.jsp +35 -0
  63. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/transferStep1.jsp +73 -0
  64. package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/transferStep2.jsp +40 -0
  65. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/CONTRIBUTING.md +76 -0
  66. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/README.md +46 -0
  67. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/contracts/cards.openapi.yaml +57 -0
  68. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/contracts/profile.openapi.yaml +73 -0
  69. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/eslint.config.mjs +24 -0
  70. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/next-env.d.ts +5 -0
  71. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/next.config.mjs +10 -0
  72. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/package.json +29 -0
  73. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/pnpm-lock.yaml +2895 -0
  74. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/cards/page.tsx +62 -0
  75. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/layout.tsx +41 -0
  76. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/page.tsx +26 -0
  77. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/profile/page.tsx +134 -0
  78. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/signed-in-badge.tsx +9 -0
  79. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/auth/AuthProvider.tsx +36 -0
  80. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Button.tsx +27 -0
  81. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Card.tsx +18 -0
  82. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/DataTable.tsx +57 -0
  83. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Field.tsx +34 -0
  84. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Form.tsx +70 -0
  85. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/PageLayout.tsx +39 -0
  86. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Stepper.tsx +29 -0
  87. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/index.ts +19 -0
  88. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/cards/mock.ts +47 -0
  89. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/cards/port.ts +31 -0
  90. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/profile/mock.ts +45 -0
  91. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/profile/port.ts +24 -0
  92. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/registry.ts +20 -0
  93. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/theme/components.css +269 -0
  94. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/theme/tokens.css +38 -0
  95. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/tests/cards.page.test.tsx +81 -0
  96. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/tests/profile.page.test.tsx +87 -0
  97. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/tsconfig.json +54 -0
  98. package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/vitest.config.ts +17 -0
  99. package/kits/j2ee-nextjs/fixtures/demo-bank/preflight.mjs +53 -0
  100. package/kits/j2ee-nextjs/fixtures/demo-bank/reset-demo.mjs +40 -0
  101. package/kits/j2ee-nextjs/fixtures/demo-bank/seed-legacy-j2ee.mjs +71 -0
  102. package/kits/j2ee-nextjs/fixtures/demo-bank/seed-nextjs.mjs +111 -0
  103. package/kits/j2ee-nextjs/fixtures/demo-bank/smoke-legacy-j2ee.mjs +144 -0
  104. package/kits/j2ee-nextjs/fixtures/demo-bank/smoke-nextjs.mjs +118 -0
  105. package/{flows → kits/j2ee-nextjs/flows}/convert-all.js +1 -7
  106. package/{flows → kits/j2ee-nextjs/flows}/convert-page.js +2 -6
  107. package/{flows → kits/j2ee-nextjs/flows}/lib/convert.js +6 -16
  108. package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/pack.md +2 -1
  109. package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/spec.md +5 -1
  110. package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/pack.md +1 -1
  111. package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/pack.md +1 -1
  112. package/kits/mainframe-java/README.md +31 -0
  113. package/{flows → kits/mainframe-java}/packs/ace-integration/pack.md +1 -1
  114. package/{flows → kits/mainframe-java}/packs/ace-kafka/pack.md +1 -1
  115. package/{flows → kits/mainframe-java}/packs/cobol-kafka/pack.md +1 -1
  116. package/{flows → kits/mainframe-java}/packs/cobol-springboot/pack.md +1 -1
  117. package/package.json +6 -6
  118. package/src/Cli.ts +92 -9
  119. package/src/FlowCatalog.ts +29 -13
  120. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-001-jstl-table.md +0 -0
  121. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-002-jquery-validation.md +0 -0
  122. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-003-session-stepper.md +0 -0
  123. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-004-esb-port.md +0 -0
  124. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-005-include-shell.md +0 -0
  125. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/analysis.md +0 -0
  126. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/bdd.md +0 -0
  127. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/implement.md +0 -0
  128. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/plan.md +0 -0
  129. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/review.md +0 -0
  130. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/survey-refine.md +0 -0
  131. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/survey-triage.md +0 -0
  132. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/reviewers/acl-purity.md +0 -0
  133. /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/reviewers/house-style.md +0 -0
  134. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/lessons.md +0 -0
  135. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/analysis.md +0 -0
  136. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/bdd.md +0 -0
  137. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/implement.md +0 -0
  138. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/plan.md +0 -0
  139. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/review.md +0 -0
  140. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/spec.md +0 -0
  141. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/survey-refine.md +0 -0
  142. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/survey-triage.md +0 -0
  143. /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/reviewers/bff-boundary.md +0 -0
  144. /package/{flows/packs/ace-integration → kits/j2ee-nextjs/packs/jsp-bff-nextjs}/reviewers/traceability.md +0 -0
  145. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/lessons.md +0 -0
  146. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/analysis.md +0 -0
  147. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/bdd.md +0 -0
  148. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/implement.md +0 -0
  149. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/plan.md +0 -0
  150. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/review.md +0 -0
  151. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/spec.md +0 -0
  152. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/survey-refine.md +0 -0
  153. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/survey-triage.md +0 -0
  154. /package/{flows/packs/ace-kafka → kits/j2ee-nextjs/packs/jsp-nextjs}/reviewers/traceability.md +0 -0
  155. /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/reviewers/ux-fidelity.md +0 -0
  156. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/README.md +0 -0
  157. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/app/layout.js +0 -0
  158. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/app/page.js +0 -0
  159. /package/{flows/fixtures/scaffolds/kafka-streams-service/src/test/resources/features → kits/j2ee-nextjs/scaffolds/nextjs-spa/docs/specs}/.gitkeep +0 -0
  160. /package/{flows/fixtures/scaffolds/nextjs-spa/docs/specs → kits/j2ee-nextjs/scaffolds/nextjs-spa/features}/.gitkeep +0 -0
  161. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/next.config.js +0 -0
  162. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/package.json +0 -0
  163. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/tests/smoke.test.js +0 -0
  164. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/README.md +0 -0
  165. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/app/layout.js +0 -0
  166. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/app/page.js +0 -0
  167. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/next.config.js +0 -0
  168. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/package.json +0 -0
  169. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/tests/smoke.test.js +0 -0
  170. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/pom.xml +0 -0
  171. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/scripts/test.sh +0 -0
  172. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/src/main/java/com/meridian/bff/Application.java +0 -0
  173. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/src/main/resources/application.yaml +0 -0
  174. /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/src/test/java/com/meridian/bff/ApplicationTests.java +0 -0
  175. /package/{flows/fixtures/scaffolds/nextjs-spa → kits/j2ee-nextjs/scaffolds/spring-bff/src/test/resources}/features/.gitkeep +0 -0
  176. /package/{flows → kits/mainframe-java}/packs/ace-integration/lessons.md +0 -0
  177. /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/analysis.md +0 -0
  178. /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/bdd.md +0 -0
  179. /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/implement.md +0 -0
  180. /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/plan.md +0 -0
  181. /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/review.md +0 -0
  182. /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/spec.md +0 -0
  183. /package/{flows → kits/mainframe-java}/packs/ace-integration/reviewers/routing-fidelity.md +0 -0
  184. /package/{flows/packs/cobol-kafka → kits/mainframe-java/packs/ace-integration}/reviewers/traceability.md +0 -0
  185. /package/{flows → kits/mainframe-java}/packs/ace-kafka/lessons.md +0 -0
  186. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/analysis.md +0 -0
  187. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/bdd.md +0 -0
  188. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/implement.md +0 -0
  189. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/plan.md +0 -0
  190. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/review.md +0 -0
  191. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/spec.md +0 -0
  192. /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/vectors.md +0 -0
  193. /package/{flows → kits/mainframe-java}/packs/ace-kafka/reviewers/event-contracts.md +0 -0
  194. /package/{flows → kits/mainframe-java}/packs/ace-kafka/reviewers/routing-fidelity.md +0 -0
  195. /package/{flows/packs/cobol-springboot → kits/mainframe-java/packs/ace-kafka}/reviewers/traceability.md +0 -0
  196. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/lessons.md +0 -0
  197. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-001-record-to-event.md +0 -0
  198. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-002-job-step-topology.md +0 -0
  199. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-003-checkpoint-idempotence.md +0 -0
  200. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-004-eod-totals-window.md +0 -0
  201. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-005-reject-topic.md +0 -0
  202. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-006-keyed-state-store.md +0 -0
  203. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-007-outbox.md +0 -0
  204. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-008-partition-key.md +0 -0
  205. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-009-batch-window-cutoff.md +0 -0
  206. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-010-replay-backfill.md +0 -0
  207. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/analysis.md +0 -0
  208. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/bdd.md +0 -0
  209. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/implement.md +0 -0
  210. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/plan.md +0 -0
  211. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/review.md +0 -0
  212. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/spec.md +0 -0
  213. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/survey-refine.md +0 -0
  214. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/survey-triage.md +0 -0
  215. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/vectors.md +0 -0
  216. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/reviewers/cobol-fidelity.md +0 -0
  217. /package/{flows → kits/mainframe-java}/packs/cobol-kafka/reviewers/pattern-conformance.md +0 -0
  218. /package/{flows/packs/jsp-bff-nextjs → kits/mainframe-java/packs/cobol-kafka}/reviewers/traceability.md +0 -0
  219. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/lessons.md +0 -0
  220. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/analysis.md +0 -0
  221. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/bdd.md +0 -0
  222. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/implement.md +0 -0
  223. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/plan.md +0 -0
  224. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/review.md +0 -0
  225. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/spec.md +0 -0
  226. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/survey-refine.md +0 -0
  227. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/survey-triage.md +0 -0
  228. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/vectors.md +0 -0
  229. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/reviewers/cobol-fidelity.md +0 -0
  230. /package/{flows → kits/mainframe-java}/packs/cobol-springboot/reviewers/pattern-conformance.md +0 -0
  231. /package/{flows/packs/jsp-nextjs → kits/mainframe-java/packs/cobol-springboot}/reviewers/traceability.md +0 -0
  232. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-001-comp3-money.md +0 -0
  233. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-002-redefines.md +0 -0
  234. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-003-88-levels.md +0 -0
  235. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-004-perform-thru.md +0 -0
  236. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-005-file-status.md +0 -0
  237. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-006-sqlcode.md +0 -0
  238. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-007-validation-order.md +0 -0
  239. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-008-zoned-decimal.md +0 -0
  240. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-009-occurs-table.md +0 -0
  241. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-010-copybook-record.md +0 -0
  242. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-011-batch-counters.md +0 -0
  243. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-012-commit-frequency.md +0 -0
  244. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-013-abend.md +0 -0
  245. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-014-reject-file.md +0 -0
  246. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-015-accept-date.md +0 -0
  247. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-016-string-building.md +0 -0
  248. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-017-cursor-loop.md +0 -0
  249. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-018-yn-switches.md +0 -0
  250. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-019-shared-accumulators.md +0 -0
  251. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-020-tiered-fees.md +0 -0
  252. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-021-overdraft-floor.md +0 -0
  253. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-022-jcl-job-net.md +0 -0
  254. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-023-sort-step.md +0 -0
  255. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-024-fixed-width-records.md +0 -0
  256. /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-025-audit-rows.md +0 -0
  257. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/README.md +0 -0
  258. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/pom.xml +0 -0
  259. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/scripts/replay.sh +0 -0
  260. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/src/main/java/com/meridian/scaffold/Application.java +0 -0
  261. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/src/test/java/com/meridian/scaffold/ApplicationTests.java +0 -0
  262. /package/{flows/fixtures/scaffolds/spring-bff → kits/mainframe-java/scaffolds/kafka-streams-service}/src/test/resources/features/.gitkeep +0 -0
  263. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/README.md +0 -0
  264. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/pom.xml +0 -0
  265. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/scripts/replay.sh +0 -0
  266. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/main/java/com/meridian/scaffold/Application.java +0 -0
  267. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/main/resources/application.yaml +0 -0
  268. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/test/java/com/meridian/scaffold/ApplicationTests.java +0 -0
  269. /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/test/resources/features/.gitkeep +0 -0
@@ -0,0 +1,31 @@
1
+ # Kit: mainframe-java
2
+
3
+ COBOL/JCL and IBM ACE estates to Spring Boot and Kafka Streams services.
4
+
5
+ A kit bundles everything the engine's `modernize-*` flows need to know about
6
+ one legacy source and one target stack (ADR 0014). This one ships four packs,
7
+ the two scaffolds they seed an empty target from, and a deck of 25 COBOL
8
+ translation pattern cards that extraction tags onto each program's
9
+ traceability and implementation injects into the coder's prompt.
10
+
11
+ | Pack | Legacy → target | Scaffold | Replay |
12
+ | ---------------------------------------------------- | --------------------------------- | ----------------------- | ------ |
13
+ | [`cobol-springboot`](packs/cobol-springboot/pack.md) | COBOL/JCL → Spring Boot service | `spring-boot-service` | yes |
14
+ | [`cobol-kafka`](packs/cobol-kafka/pack.md) | COBOL/JCL → Kafka Streams service | `kafka-streams-service` | yes |
15
+ | [`ace-integration`](packs/ace-integration/pack.md) | ACE msgflow/ESQL → Spring Boot | `spring-boot-service` | no |
16
+ | [`ace-kafka`](packs/ace-kafka/pack.md) | ACE msgflow/ESQL → Kafka Streams | `kafka-streams-service` | yes |
17
+
18
+ Packs without a `replay:` command run phases 0–3 and 5; phase 4 needs a
19
+ replay harness in the target repository to drive equivalence vectors.
20
+ `cobol-kafka` adds its own cards under `packs/cobol-kafka/patterns/` for
21
+ event-streaming idioms on top of the kit's deck.
22
+
23
+ ```sh
24
+ llm4ts run modernize-pack-check --pack cobol-springboot --repo /path/to/legacy-estate
25
+ llm4ts run modernize-survey --pack cobol-springboot --repo /path/to/legacy-estate
26
+ ```
27
+
28
+ `cobol-springboot` is the default pack when `--pack` and `LLM4TS_PACK` are
29
+ both unset. Copy a pack directory next to your work and pass its path to
30
+ iterate on it before it joins a kit; `kits/test/packs.test.ts` shows what
31
+ the flows require of a manifest.
@@ -1,7 +1,7 @@
1
1
  # Pack: ace-integration
2
2
 
3
3
  source: ace
4
- scaffold: ../../fixtures/scaffolds/spring-boot-service
4
+ scaffold: ../../scaffolds/spring-boot-service
5
5
  sources: .*\.(msgflow|esql)
6
6
  specs-dir: docs/specs
7
7
  features-dir: src/test/resources/features
@@ -1,7 +1,7 @@
1
1
  # Pack: ace-kafka
2
2
 
3
3
  source: ace
4
- scaffold: ../../fixtures/scaffolds/kafka-streams-service
4
+ scaffold: ../../scaffolds/kafka-streams-service
5
5
  sources: .*\.(msgflow|esql)
6
6
  programs: .*\.(msgflow|esql)
7
7
  specs-dir: docs/specs
@@ -1,7 +1,7 @@
1
1
  # Pack: cobol-kafka
2
2
 
3
3
  source: cobol
4
- scaffold: ../../fixtures/scaffolds/kafka-streams-service
4
+ scaffold: ../../scaffolds/kafka-streams-service
5
5
  sources: .*\.(cbl|CBL|cpy|CPY|jcl|JCL)
6
6
  programs: .*\.(cbl|CBL|jcl|JCL)
7
7
  specs-dir: docs/specs
@@ -1,7 +1,7 @@
1
1
  # Pack: cobol-springboot
2
2
 
3
3
  source: cobol
4
- scaffold: ../../fixtures/scaffolds/spring-boot-service
4
+ scaffold: ../../scaffolds/spring-boot-service
5
5
  sources: .*\.(cbl|CBL|cpy|CPY|jcl|JCL)
6
6
  programs: .*\.(cbl|CBL|jcl|JCL)
7
7
  specs-dir: docs/specs
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llm4ts/shell",
3
- "version": "0.17.0",
3
+ "version": "0.18.1",
4
4
  "description": "Interactive shell and CLI for llm4ts: flow discovery, run-a-flow, and view",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -14,7 +14,8 @@
14
14
  "files": [
15
15
  "dist",
16
16
  "src",
17
- "flows"
17
+ "flows",
18
+ "kits"
18
19
  ],
19
20
  "exports": {
20
21
  "./Cli": "./dist/Cli.js",
@@ -50,10 +51,9 @@
50
51
  "dependencies": {
51
52
  "@effect/platform-node": "4.0.0-beta.102",
52
53
  "@effect/platform-node-shared": "4.0.0-beta.102",
53
- "@llm4ts/core": "0.17.0",
54
- "@llm4ts/flow": "0.17.0",
55
- "@llm4ts/runner": "0.17.0",
56
- "@llm4ts/modernize": "0.17.0"
54
+ "@llm4ts/core": "0.18.1",
55
+ "@llm4ts/flow": "0.18.1",
56
+ "@llm4ts/runner": "0.18.1"
57
57
  },
58
58
  "peerDependencies": {
59
59
  "effect": "4.0.0-beta.102"
package/src/Cli.ts CHANGED
@@ -9,6 +9,7 @@ import * as Command from "effect/unstable/cli/Command"
9
9
  import * as Flag from "effect/unstable/cli/Flag"
10
10
  import { makeCliProgram } from "@llm4ts/runner/Cli"
11
11
  import { makeDoctorProgram } from "@llm4ts/runner/Doctor"
12
+ import { builtinKitsDir, discoverKits, kitTierPaths, type DiscoveredKit } from "@llm4ts/runner/Kits"
12
13
  import {
13
14
  defaultTierPaths,
14
15
  discoverFlows,
@@ -32,17 +33,61 @@ export const builtinFlowsDir = (): string => fileURLToPath(new URL("../flows", i
32
33
  export const shellTierPaths = (options?: {
33
34
  readonly cwd?: string
34
35
  readonly environment?: Readonly<Record<string, string | undefined>>
35
- }): FlowTierPaths =>
36
- defaultTierPaths({
37
- cwd: options?.cwd ?? process.cwd(),
38
- homeDir: homedir(),
39
- environment: options?.environment ?? process.env,
40
- builtinDir: builtinFlowsDir()
41
- })
36
+ }): FlowTierPaths => {
37
+ const cwd = options?.cwd ?? process.cwd()
38
+ const environment = options?.environment ?? process.env
39
+ const builtinKits = builtinKitsDir(builtinFlowsDir())
40
+ return {
41
+ ...defaultTierPaths({ cwd, homeDir: homedir(), environment, builtinDir: builtinFlowsDir() }),
42
+ kits: kitTierPaths({
43
+ cwd,
44
+ homeDir: homedir(),
45
+ environment,
46
+ ...(builtinKits === undefined ? {} : { builtinDir: builtinKits })
47
+ })
48
+ }
49
+ }
42
50
 
43
51
  const tierLabel = (flow: DiscoveredFlow): string => {
52
+ const kit = flow.kit === undefined ? "" : ` kit:${flow.kit}`
44
53
  const shadows = flow.shadows.length === 0 ? "" : ` shadows ${flow.shadows.join(", ")}`
45
- return `[${flow.tier}${shadows}]`
54
+ return `[${flow.tier}${kit}${shadows}]`
55
+ }
56
+
57
+ export const renderKitList = (
58
+ kits: ReadonlyArray<DiscoveredKit>,
59
+ options?: { readonly json?: boolean }
60
+ ): string => {
61
+ if (options?.json === true) {
62
+ return JSON.stringify(
63
+ kits.map((kit) => ({
64
+ name: kit.name,
65
+ tier: kit.tier,
66
+ path: kit.root,
67
+ ...(kit.description === undefined ? {} : { description: kit.description }),
68
+ packs: kit.packs,
69
+ flows: kit.flows,
70
+ shadows: kit.shadows
71
+ })),
72
+ undefined,
73
+ 2
74
+ )
75
+ }
76
+ const nameWidth = kits.reduce((width, kit) => Math.max(width, kit.name.length), 0)
77
+ return kits
78
+ .flatMap((kit) => {
79
+ const shadows = kit.shadows.length === 0 ? "" : ` shadows ${kit.shadows.join(", ")}`
80
+ return [
81
+ [
82
+ kit.name.padEnd(nameWidth),
83
+ `[${kit.tier}${shadows}]`,
84
+ ...(kit.description === undefined ? [] : [kit.description])
85
+ ].join(" "),
86
+ ...(kit.packs.length === 0 ? [] : [` packs: ${kit.packs.join(", ")}`]),
87
+ ...(kit.flows.length === 0 ? [] : [` flows: ${kit.flows.join(", ")}`])
88
+ ]
89
+ })
90
+ .join("\n")
46
91
  }
47
92
 
48
93
  export const renderFlowList = (
@@ -55,6 +100,7 @@ export const renderFlowList = (
55
100
  name: flow.name,
56
101
  tier: flow.tier,
57
102
  path: flow.path,
103
+ ...(flow.kit === undefined ? {} : { kit: flow.kit }),
58
104
  ...(flow.description === undefined ? {} : { description: flow.description }),
59
105
  shadows: flow.shadows
60
106
  })),
@@ -121,6 +167,12 @@ const runCommand = Command.make(
121
167
  "Repository to run against, forwarded to the flow as --repo (defaults to the current directory)"
122
168
  )
123
169
  ),
170
+ pack: Flag.string("pack").pipe(
171
+ Flag.optional,
172
+ Flag.withDescription(
173
+ "Pack for the modernization flows, forwarded as LLM4TS_PACK: a kit pack name from `llm4ts kits`, kit/pack, or a directory holding pack.md"
174
+ )
175
+ ),
124
176
  verbose: Flag.boolean("verbose").pipe(Flag.withDescription("Stream verbose flow output"))
125
177
  },
126
178
  (config) =>
@@ -131,6 +183,9 @@ const runCommand = Command.make(
131
183
  if (config.verbose) {
132
184
  environment.LLM4TS_VERBOSITY = "verbose"
133
185
  }
186
+ if (config.pack._tag === "Some") {
187
+ environment.LLM4TS_PACK = config.pack.value
188
+ }
134
189
  const exitCode = yield* launchFlow({
135
190
  flowPath,
136
191
  taskArgs: [
@@ -161,6 +216,27 @@ const listCommand = Command.make(
161
216
  })
162
217
  ).pipe(Command.withDescription("List flows across the project, global, and built-in tiers"))
163
218
 
219
+ const kitsCommand = Command.make(
220
+ "kits",
221
+ {
222
+ json: Flag.boolean("json").pipe(Flag.withDescription("Emit the listing as JSON"))
223
+ },
224
+ (config) =>
225
+ Effect.gen(function* () {
226
+ const tiers = shellTierPaths()
227
+ const kits = tiers.kits === undefined ? [] : discoverKits(tiers.kits)
228
+ if (kits.length === 0 && !config.json) {
229
+ yield* Console.error("no kits discovered — add kit directories under .llm4ts/kits/")
230
+ return
231
+ }
232
+ yield* Console.log(renderKitList(kits, { json: config.json }))
233
+ })
234
+ ).pipe(
235
+ Command.withDescription(
236
+ "List kits — packs, scaffolds, pattern cards, and flows — across the project, global, and built-in tiers"
237
+ )
238
+ )
239
+
164
240
  const viewCommand = Command.make(
165
241
  "view",
166
242
  {
@@ -230,7 +306,14 @@ export const shellCommand = Command.make("llm4ts", {}, () =>
230
306
  Command.withDescription(
231
307
  "Interactive shell and CLI for llm4ts flows: discover, inspect, and run them."
232
308
  ),
233
- Command.withSubcommands([runCommand, listCommand, viewCommand, askCommand, doctorCommand])
309
+ Command.withSubcommands([
310
+ runCommand,
311
+ listCommand,
312
+ kitsCommand,
313
+ viewCommand,
314
+ askCommand,
315
+ doctorCommand
316
+ ])
234
317
  )
235
318
 
236
319
  export const runShellCommand = (
@@ -1,6 +1,7 @@
1
1
  import { join } from "node:path"
2
2
  import * as Effect from "effect/Effect"
3
3
  import { FileSystem } from "effect/FileSystem"
4
+ import { discoverKits, type KitTierPaths } from "@llm4ts/runner/Kits"
4
5
 
5
6
  export type FlowTier = "project" | "global" | "builtin"
6
7
 
@@ -8,12 +9,16 @@ export interface FlowTierPaths {
8
9
  readonly project?: string
9
10
  readonly global?: string
10
11
  readonly builtin?: string
12
+ /** Kit tiers whose `flows/` join the listing under the kit's tier (ADR 0014). */
13
+ readonly kits?: KitTierPaths
11
14
  }
12
15
 
13
16
  export interface DiscoveredFlow {
14
17
  readonly name: string
15
18
  readonly path: string
16
19
  readonly tier: FlowTier
20
+ /** The kit the flow ships in, when it is a kit flow rather than a tier's own. */
21
+ readonly kit?: string
17
22
  readonly description?: string
18
23
  readonly shadows: ReadonlyArray<FlowTier>
19
24
  }
@@ -69,7 +74,8 @@ const flowExtension = (entry: string): string | undefined =>
69
74
 
70
75
  const listTier = Effect.fn("@llm4ts/shell/FlowCatalog.listTier")(function* (
71
76
  tier: FlowTier,
72
- directory: string
77
+ directory: string,
78
+ kit?: string
73
79
  ) {
74
80
  const fs = yield* FileSystem
75
81
  const entries = yield* fs.readDirectory(directory).pipe(Effect.orElseSucceed(() => []))
@@ -86,6 +92,7 @@ const listTier = Effect.fn("@llm4ts/shell/FlowCatalog.listTier")(function* (
86
92
  name: entry.slice(0, -extension.length),
87
93
  path,
88
94
  tier,
95
+ ...(kit === undefined ? {} : { kit }),
89
96
  ...(description === undefined ? {} : { description })
90
97
  })
91
98
  }
@@ -93,10 +100,11 @@ const listTier = Effect.fn("@llm4ts/shell/FlowCatalog.listTier")(function* (
93
100
  })
94
101
 
95
102
  /**
96
- * Discovers flows across the project, global, and built-in tiers. Precedence
97
- * is project > global > builtin, keyed by flow name; a shadowed tier is
98
- * recorded on the winning flow's `shadows` list. Missing or unreadable
99
- * directories contribute nothing.
103
+ * Discovers flows across the project, global, and built-in tiers, each tier's
104
+ * own `flows/` first and then the `flows/` of the kits discovered in that
105
+ * tier. Precedence is project > global > builtin, keyed by flow name; a
106
+ * shadowed tier is recorded on the winning flow's `shadows` list. Missing or
107
+ * unreadable directories contribute nothing.
100
108
  */
101
109
  export const discoverFlows = Effect.fn("@llm4ts/shell/FlowCatalog.discoverFlows")(function* (
102
110
  tiers: FlowTierPaths
@@ -105,17 +113,25 @@ export const discoverFlows = Effect.fn("@llm4ts/shell/FlowCatalog.discoverFlows"
105
113
  string,
106
114
  { flow: Omit<DiscoveredFlow, "shadows">; shadows: Array<FlowTier> }
107
115
  >()
116
+ const kits = tiers.kits === undefined ? [] : discoverKits(tiers.kits)
117
+ const record = (flow: Omit<DiscoveredFlow, "shadows">): void => {
118
+ const existing = byName.get(flow.name)
119
+ if (existing === undefined) {
120
+ byName.set(flow.name, { flow, shadows: [] })
121
+ } else {
122
+ existing.shadows.push(flow.tier)
123
+ }
124
+ }
108
125
  for (const tier of tierOrder) {
109
126
  const directory = tiers[tier]
110
- if (directory === undefined) {
111
- continue
127
+ if (directory !== undefined) {
128
+ for (const flow of yield* listTier(tier, directory)) {
129
+ record(flow)
130
+ }
112
131
  }
113
- for (const flow of yield* listTier(tier, directory)) {
114
- const existing = byName.get(flow.name)
115
- if (existing === undefined) {
116
- byName.set(flow.name, { flow, shadows: [] })
117
- } else {
118
- existing.shadows.push(tier)
132
+ for (const kit of kits.filter((candidate) => candidate.tier === tier)) {
133
+ for (const flow of yield* listTier(tier, join(kit.root, "flows"), kit.name)) {
134
+ record(flow)
119
135
  }
120
136
  }
121
137
  }