@interf/compiler 0.6.1 → 0.6.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 (391) hide show
  1. package/README.md +106 -80
  2. package/builtin-workflows/interf/README.md +5 -5
  3. package/builtin-workflows/interf/compile/stages/shape/SKILL.md +4 -4
  4. package/builtin-workflows/interf/improve/SKILL.md +2 -2
  5. package/builtin-workflows/interf/use/query/SKILL.md +1 -1
  6. package/builtin-workflows/interf/workflow.json +6 -6
  7. package/builtin-workflows/interf/workflow.schema.json +1 -1
  8. package/dist/bin.js +2 -28
  9. package/dist/{commands → cli/commands}/check-draft.d.ts +2 -2
  10. package/dist/{commands → cli/commands}/check-draft.js +16 -16
  11. package/dist/{commands → cli/commands}/compile-controller.d.ts +3 -3
  12. package/dist/{commands → cli/commands}/compile-controller.js +37 -35
  13. package/dist/{commands → cli/commands}/compile.d.ts +2 -2
  14. package/dist/{commands → cli/commands}/compile.js +15 -11
  15. package/dist/{commands → cli/commands}/compiled-flow.d.ts +3 -4
  16. package/dist/{commands → cli/commands}/compiled-flow.js +9 -14
  17. package/dist/{commands → cli/commands}/create-workflow-wizard.d.ts +3 -3
  18. package/dist/{commands → cli/commands}/create-workflow-wizard.js +64 -37
  19. package/dist/{commands → cli/commands}/create.d.ts +1 -1
  20. package/dist/{commands → cli/commands}/create.js +15 -18
  21. package/dist/{commands → cli/commands}/dataset-selection.d.ts +1 -1
  22. package/dist/{commands → cli/commands}/default.js +3 -3
  23. package/dist/{commands → cli/commands}/doctor.js +5 -6
  24. package/dist/{commands → cli/commands}/executor-flow.d.ts +1 -1
  25. package/dist/{commands → cli/commands}/executor-flow.js +13 -16
  26. package/dist/{commands → cli/commands}/init.d.ts +4 -1
  27. package/dist/{commands → cli/commands}/init.js +162 -77
  28. package/dist/{commands → cli/commands}/list.js +6 -6
  29. package/dist/{commands → cli/commands}/reset.js +4 -4
  30. package/dist/{commands → cli/commands}/source-config-wizard.d.ts +9 -4
  31. package/dist/{commands → cli/commands}/source-config-wizard.js +168 -94
  32. package/dist/{commands → cli/commands}/status.js +20 -11
  33. package/dist/{commands → cli/commands}/test-flow.d.ts +13 -4
  34. package/dist/{commands → cli/commands}/test-flow.js +52 -48
  35. package/dist/cli/commands/test.d.ts +14 -0
  36. package/dist/{commands → cli/commands}/test.js +40 -24
  37. package/dist/{commands → cli/commands}/verify.js +4 -4
  38. package/dist/cli/index.d.ts +21 -0
  39. package/dist/cli/index.js +33 -0
  40. package/dist/index.d.ts +22 -11
  41. package/dist/index.js +15 -6
  42. package/dist/lib/agent-args.d.ts +1 -4
  43. package/dist/lib/agent-args.js +1 -52
  44. package/dist/lib/agent-constants.d.ts +1 -5
  45. package/dist/lib/agent-constants.js +1 -28
  46. package/dist/lib/agent-detection.d.ts +1 -7
  47. package/dist/lib/agent-detection.js +1 -65
  48. package/dist/lib/agent-execution.d.ts +1 -2
  49. package/dist/lib/agent-execution.js +1 -243
  50. package/dist/lib/agent-logs.d.ts +1 -2
  51. package/dist/lib/agent-logs.js +1 -17
  52. package/dist/lib/agent-preflight.d.ts +1 -7
  53. package/dist/lib/agent-preflight.js +1 -77
  54. package/dist/lib/agent-render.d.ts +1 -8
  55. package/dist/lib/agent-render.js +1 -218
  56. package/dist/lib/agent-shells.d.ts +1 -69
  57. package/dist/lib/agent-shells.js +1 -1021
  58. package/dist/lib/agent-status.d.ts +1 -3
  59. package/dist/lib/agent-status.js +1 -58
  60. package/dist/lib/agent-types.d.ts +1 -30
  61. package/dist/lib/agent-types.js +1 -1
  62. package/dist/lib/agents.d.ts +1 -6
  63. package/dist/lib/agents.js +1 -5
  64. package/dist/lib/builtin-compiled-workflow.d.ts +1 -38
  65. package/dist/lib/builtin-compiled-workflow.js +1 -94
  66. package/dist/lib/chart-guidance.d.ts +1 -1
  67. package/dist/lib/chart-guidance.js +1 -8
  68. package/dist/lib/compiled-compile.d.ts +1 -48
  69. package/dist/lib/compiled-compile.js +1 -255
  70. package/dist/lib/compiled-paths.d.ts +1 -40
  71. package/dist/lib/compiled-paths.js +3 -106
  72. package/dist/lib/compiled-raw.d.ts +1 -49
  73. package/dist/lib/compiled-raw.js +3 -102
  74. package/dist/lib/compiled-reset.d.ts +1 -2
  75. package/dist/lib/compiled-reset.js +3 -72
  76. package/dist/lib/compiled-schema.d.ts +1 -31
  77. package/dist/lib/compiled-schema.js +1 -141
  78. package/dist/lib/discovery.d.ts +1 -7
  79. package/dist/lib/discovery.js +1 -84
  80. package/dist/lib/execution-profile.d.ts +1 -17
  81. package/dist/lib/execution-profile.js +1 -84
  82. package/dist/lib/executors.d.ts +1 -32
  83. package/dist/lib/executors.js +1 -43
  84. package/dist/lib/filesystem.d.ts +1 -2
  85. package/dist/lib/filesystem.js +1 -55
  86. package/dist/lib/interf-bootstrap.d.ts +1 -3
  87. package/dist/lib/interf-bootstrap.js +3 -18
  88. package/dist/lib/interf-detect.d.ts +1 -33
  89. package/dist/lib/interf-detect.js +3 -176
  90. package/dist/lib/interf-scaffold.d.ts +1 -2
  91. package/dist/lib/interf-scaffold.js +3 -114
  92. package/dist/lib/interf-workflow-package.d.ts +1 -25
  93. package/dist/lib/interf-workflow-package.js +1 -342
  94. package/dist/lib/interf.d.ts +1 -5
  95. package/dist/lib/interf.js +3 -4
  96. package/dist/lib/local-workflows.d.ts +1 -54
  97. package/dist/lib/local-workflows.js +1 -422
  98. package/dist/lib/logger.d.ts +1 -3
  99. package/dist/lib/logger.js +1 -10
  100. package/dist/lib/package-root.d.ts +1 -0
  101. package/dist/lib/package-root.js +1 -0
  102. package/dist/lib/parse.d.ts +1 -8
  103. package/dist/lib/parse.js +1 -145
  104. package/dist/lib/project-paths.d.ts +1 -11
  105. package/dist/lib/project-paths.js +3 -32
  106. package/dist/lib/runtime-acceptance.d.ts +1 -9
  107. package/dist/lib/runtime-acceptance.js +1 -269
  108. package/dist/lib/runtime-contracts.d.ts +1 -2
  109. package/dist/lib/runtime-contracts.js +1 -48
  110. package/dist/lib/runtime-inventory.d.ts +1 -7
  111. package/dist/lib/runtime-inventory.js +1 -29
  112. package/dist/lib/runtime-paths.d.ts +1 -8
  113. package/dist/lib/runtime-paths.js +1 -26
  114. package/dist/lib/runtime-prompt.d.ts +1 -2
  115. package/dist/lib/runtime-prompt.js +1 -48
  116. package/dist/lib/runtime-reconcile.d.ts +1 -2
  117. package/dist/lib/runtime-reconcile.js +1 -193
  118. package/dist/lib/runtime-runs.d.ts +1 -11
  119. package/dist/lib/runtime-runs.js +1 -262
  120. package/dist/lib/runtime-types.d.ts +1 -43
  121. package/dist/lib/runtime-types.js +1 -1
  122. package/dist/lib/runtime.d.ts +1 -6
  123. package/dist/lib/runtime.js +1 -5
  124. package/dist/lib/schema.d.ts +4 -1073
  125. package/dist/lib/schema.js +6 -542
  126. package/dist/lib/source-config.d.ts +1 -39
  127. package/dist/lib/source-config.js +3 -293
  128. package/dist/lib/state-artifacts.d.ts +1 -8
  129. package/dist/lib/state-artifacts.js +1 -13
  130. package/dist/lib/state-health.d.ts +1 -4
  131. package/dist/lib/state-health.js +1 -132
  132. package/dist/lib/state-io.d.ts +1 -10
  133. package/dist/lib/state-io.js +1 -76
  134. package/dist/lib/state-paths.d.ts +1 -4
  135. package/dist/lib/state-paths.js +1 -13
  136. package/dist/lib/state-view.d.ts +1 -4
  137. package/dist/lib/state-view.js +1 -103
  138. package/dist/lib/state.d.ts +1 -7
  139. package/dist/lib/state.js +1 -12
  140. package/dist/lib/test-execution.d.ts +1 -14
  141. package/dist/lib/test-execution.js +3 -525
  142. package/dist/lib/test-matrices.d.ts +1 -90
  143. package/dist/lib/test-matrices.js +3 -96
  144. package/dist/lib/test-paths.d.ts +1 -12
  145. package/dist/lib/test-paths.js +3 -59
  146. package/dist/lib/test-profile-presets.d.ts +1 -57
  147. package/dist/lib/test-profile-presets.js +3 -50
  148. package/dist/lib/test-sandbox.d.ts +1 -11
  149. package/dist/lib/test-sandbox.js +3 -105
  150. package/dist/lib/test-specs.d.ts +1 -7
  151. package/dist/lib/test-specs.js +3 -114
  152. package/dist/lib/test-targets.d.ts +1 -5
  153. package/dist/lib/test-targets.js +3 -38
  154. package/dist/lib/test-types.d.ts +1 -17
  155. package/dist/lib/test-types.js +3 -1
  156. package/dist/lib/test.d.ts +1 -4
  157. package/dist/lib/test.js +3 -3
  158. package/dist/lib/util.d.ts +1 -4
  159. package/dist/lib/util.js +1 -25
  160. package/dist/lib/validate-compiled.d.ts +1 -27
  161. package/dist/lib/validate-compiled.js +1 -241
  162. package/dist/lib/validate-helpers.d.ts +1 -12
  163. package/dist/lib/validate-helpers.js +1 -41
  164. package/dist/lib/validate.d.ts +1 -21
  165. package/dist/lib/validate.js +1 -249
  166. package/dist/lib/workflow-authoring.d.ts +1 -26
  167. package/dist/lib/workflow-authoring.js +1 -119
  168. package/dist/lib/workflow-definitions.d.ts +1 -78
  169. package/dist/lib/workflow-definitions.js +1 -203
  170. package/dist/lib/workflow-edit-session.d.ts +1 -16
  171. package/dist/lib/workflow-edit-session.js +1 -57
  172. package/dist/lib/workflow-edit-utils.d.ts +1 -10
  173. package/dist/lib/workflow-edit-utils.js +1 -39
  174. package/dist/lib/workflow-helpers.d.ts +1 -38
  175. package/dist/lib/workflow-helpers.js +1 -167
  176. package/dist/lib/workflow-improvement.d.ts +1 -22
  177. package/dist/lib/workflow-improvement.js +1 -209
  178. package/dist/lib/workflow-primitives.d.ts +1 -2
  179. package/dist/lib/workflow-primitives.js +1 -5
  180. package/dist/lib/workflow-review-paths.d.ts +1 -10
  181. package/dist/lib/workflow-review-paths.js +1 -27
  182. package/dist/lib/workflow-stage-policy.d.ts +1 -5
  183. package/dist/lib/workflow-stage-policy.js +1 -31
  184. package/dist/lib/workflow-stage-runner.d.ts +1 -41
  185. package/dist/lib/workflow-stage-runner.js +1 -109
  186. package/dist/lib/workflows.d.ts +1 -15
  187. package/dist/lib/workflows.js +1 -31
  188. package/dist/packages/agents/index.d.ts +18 -0
  189. package/dist/packages/agents/index.js +16 -0
  190. package/dist/packages/agents/lib/agents.d.ts +6 -0
  191. package/dist/packages/agents/lib/agents.js +5 -0
  192. package/dist/packages/agents/lib/args.d.ts +4 -0
  193. package/dist/packages/agents/lib/args.js +52 -0
  194. package/dist/packages/agents/lib/chart-guidance.d.ts +1 -0
  195. package/dist/packages/agents/lib/chart-guidance.js +8 -0
  196. package/dist/packages/agents/lib/compiled-bootstrap.d.ts +3 -0
  197. package/dist/packages/agents/lib/compiled-bootstrap.js +18 -0
  198. package/dist/packages/agents/lib/constants.d.ts +5 -0
  199. package/dist/packages/agents/lib/constants.js +28 -0
  200. package/dist/packages/agents/lib/detection.d.ts +7 -0
  201. package/dist/packages/agents/lib/detection.js +65 -0
  202. package/dist/packages/agents/lib/execution-profile.d.ts +17 -0
  203. package/dist/packages/agents/lib/execution-profile.js +84 -0
  204. package/dist/packages/agents/lib/execution.d.ts +2 -0
  205. package/dist/packages/agents/lib/execution.js +243 -0
  206. package/dist/packages/agents/lib/executors.d.ts +32 -0
  207. package/dist/packages/agents/lib/executors.js +45 -0
  208. package/dist/packages/agents/lib/logs.d.ts +2 -0
  209. package/dist/packages/agents/lib/logs.js +17 -0
  210. package/dist/packages/agents/lib/preflight.d.ts +7 -0
  211. package/dist/packages/agents/lib/preflight.js +77 -0
  212. package/dist/packages/agents/lib/render.d.ts +8 -0
  213. package/dist/packages/agents/lib/render.js +218 -0
  214. package/dist/packages/agents/lib/schema.d.ts +8 -0
  215. package/dist/packages/agents/lib/schema.js +7 -0
  216. package/dist/packages/agents/lib/shells.d.ts +71 -0
  217. package/dist/packages/agents/lib/shells.js +1023 -0
  218. package/dist/packages/agents/lib/status.d.ts +3 -0
  219. package/dist/packages/agents/lib/status.js +58 -0
  220. package/dist/packages/agents/lib/types.d.ts +30 -0
  221. package/dist/packages/agents/lib/types.js +1 -0
  222. package/dist/{lib → packages/agents/lib}/user-config.d.ts +1 -0
  223. package/dist/{lib → packages/agents/lib}/user-config.js +3 -2
  224. package/dist/packages/compiler/compiled-compile.d.ts +4 -0
  225. package/dist/packages/compiler/compiled-compile.js +4 -0
  226. package/dist/packages/compiler/compiled-paths.d.ts +40 -0
  227. package/dist/packages/compiler/compiled-paths.js +106 -0
  228. package/dist/packages/compiler/compiled-pipeline.d.ts +39 -0
  229. package/dist/packages/compiler/compiled-pipeline.js +134 -0
  230. package/dist/packages/compiler/compiled-schema.d.ts +31 -0
  231. package/dist/packages/compiler/compiled-schema.js +141 -0
  232. package/dist/packages/compiler/compiled-stage-plan.d.ts +15 -0
  233. package/dist/packages/compiler/compiled-stage-plan.js +79 -0
  234. package/dist/packages/compiler/compiled-stage-runner.d.ts +10 -0
  235. package/dist/packages/compiler/compiled-stage-runner.js +46 -0
  236. package/dist/packages/compiler/compiled-target.d.ts +11 -0
  237. package/dist/packages/compiler/compiled-target.js +16 -0
  238. package/dist/packages/compiler/discovery.d.ts +7 -0
  239. package/dist/packages/compiler/discovery.js +80 -0
  240. package/dist/packages/compiler/index.d.ts +24 -0
  241. package/dist/packages/compiler/index.js +23 -0
  242. package/dist/packages/compiler/lib/schema.d.ts +684 -0
  243. package/dist/packages/compiler/lib/schema.js +363 -0
  244. package/dist/packages/compiler/raw-snapshot.d.ts +49 -0
  245. package/dist/packages/compiler/raw-snapshot.js +102 -0
  246. package/dist/packages/compiler/reset.d.ts +2 -0
  247. package/dist/packages/compiler/reset.js +72 -0
  248. package/dist/packages/compiler/runtime-acceptance.d.ts +9 -0
  249. package/dist/packages/compiler/runtime-acceptance.js +269 -0
  250. package/dist/packages/compiler/runtime-contracts.d.ts +2 -0
  251. package/dist/packages/compiler/runtime-contracts.js +48 -0
  252. package/dist/packages/compiler/runtime-inventory.d.ts +7 -0
  253. package/dist/packages/compiler/runtime-inventory.js +29 -0
  254. package/dist/packages/compiler/runtime-paths.d.ts +8 -0
  255. package/dist/packages/compiler/runtime-paths.js +26 -0
  256. package/dist/packages/compiler/runtime-prompt.d.ts +2 -0
  257. package/dist/packages/compiler/runtime-prompt.js +48 -0
  258. package/dist/packages/compiler/runtime-reconcile.d.ts +2 -0
  259. package/dist/packages/compiler/runtime-reconcile.js +193 -0
  260. package/dist/packages/compiler/runtime-runs.d.ts +11 -0
  261. package/dist/packages/compiler/runtime-runs.js +262 -0
  262. package/dist/packages/compiler/runtime-types.d.ts +43 -0
  263. package/dist/packages/compiler/runtime-types.js +1 -0
  264. package/dist/packages/compiler/runtime.d.ts +6 -0
  265. package/dist/packages/compiler/runtime.js +5 -0
  266. package/dist/packages/compiler/state-artifacts.d.ts +8 -0
  267. package/dist/packages/compiler/state-artifacts.js +13 -0
  268. package/dist/packages/compiler/state-health.d.ts +4 -0
  269. package/dist/packages/compiler/state-health.js +132 -0
  270. package/dist/packages/compiler/state-io.d.ts +10 -0
  271. package/dist/packages/compiler/state-io.js +76 -0
  272. package/dist/packages/compiler/state-paths.d.ts +4 -0
  273. package/dist/packages/compiler/state-paths.js +13 -0
  274. package/dist/packages/compiler/state-view.d.ts +4 -0
  275. package/dist/packages/compiler/state-view.js +103 -0
  276. package/dist/packages/compiler/state.d.ts +7 -0
  277. package/dist/packages/compiler/state.js +12 -0
  278. package/dist/packages/compiler/validate-compiled.d.ts +27 -0
  279. package/dist/packages/compiler/validate-compiled.js +241 -0
  280. package/dist/packages/compiler/validate-helpers.d.ts +12 -0
  281. package/dist/packages/compiler/validate-helpers.js +41 -0
  282. package/dist/packages/compiler/validate.d.ts +21 -0
  283. package/dist/packages/compiler/validate.js +249 -0
  284. package/dist/packages/compiler/workflow-primitives.d.ts +2 -0
  285. package/dist/packages/compiler/workflow-primitives.js +5 -0
  286. package/dist/packages/compiler/workflows.d.ts +15 -0
  287. package/dist/packages/compiler/workflows.js +31 -0
  288. package/dist/packages/project-model/compiled-paths.d.ts +1 -0
  289. package/dist/packages/project-model/compiled-paths.js +1 -0
  290. package/dist/packages/project-model/compiled-raw.d.ts +1 -0
  291. package/dist/packages/project-model/compiled-raw.js +1 -0
  292. package/dist/packages/project-model/compiled-reset.d.ts +1 -0
  293. package/dist/packages/project-model/compiled-reset.js +1 -0
  294. package/dist/packages/project-model/index.d.ts +11 -0
  295. package/dist/packages/project-model/index.js +10 -0
  296. package/dist/packages/project-model/interf-bootstrap.d.ts +1 -0
  297. package/dist/packages/project-model/interf-bootstrap.js +1 -0
  298. package/dist/packages/project-model/interf-detect.d.ts +33 -0
  299. package/dist/packages/project-model/interf-detect.js +176 -0
  300. package/dist/packages/project-model/interf-scaffold.d.ts +2 -0
  301. package/dist/packages/project-model/interf-scaffold.js +124 -0
  302. package/dist/packages/project-model/interf.d.ts +5 -0
  303. package/dist/packages/project-model/interf.js +4 -0
  304. package/dist/packages/project-model/lib/schema.d.ts +125 -0
  305. package/dist/packages/project-model/lib/schema.js +62 -0
  306. package/dist/packages/project-model/project-paths.d.ts +11 -0
  307. package/dist/packages/project-model/project-paths.js +32 -0
  308. package/dist/packages/project-model/source-config.d.ts +38 -0
  309. package/dist/packages/project-model/source-config.js +298 -0
  310. package/dist/packages/shared/file-types.d.ts +1 -0
  311. package/dist/packages/shared/file-types.js +4 -0
  312. package/dist/packages/shared/filesystem.d.ts +2 -0
  313. package/dist/packages/shared/filesystem.js +55 -0
  314. package/dist/packages/shared/index.d.ts +7 -0
  315. package/dist/packages/shared/index.js +7 -0
  316. package/dist/packages/shared/logger.d.ts +3 -0
  317. package/dist/packages/shared/logger.js +10 -0
  318. package/dist/packages/shared/naming.d.ts +1 -0
  319. package/dist/packages/shared/naming.js +8 -0
  320. package/dist/packages/shared/parse.d.ts +8 -0
  321. package/dist/packages/shared/parse.js +145 -0
  322. package/dist/packages/shared/path-guards.d.ts +2 -0
  323. package/dist/packages/shared/path-guards.js +14 -0
  324. package/dist/packages/shared/util.d.ts +3 -0
  325. package/dist/packages/shared/util.js +3 -0
  326. package/dist/packages/testing/index.d.ts +13 -0
  327. package/dist/packages/testing/index.js +10 -0
  328. package/dist/packages/testing/lib/schema.d.ts +261 -0
  329. package/dist/packages/testing/lib/schema.js +119 -0
  330. package/dist/packages/testing/test-execution.d.ts +14 -0
  331. package/dist/packages/testing/test-execution.js +525 -0
  332. package/dist/packages/testing/test-matrices.d.ts +90 -0
  333. package/dist/packages/testing/test-matrices.js +96 -0
  334. package/dist/packages/testing/test-paths.d.ts +12 -0
  335. package/dist/packages/testing/test-paths.js +59 -0
  336. package/dist/packages/testing/test-profile-presets.d.ts +57 -0
  337. package/dist/packages/testing/test-profile-presets.js +50 -0
  338. package/dist/packages/testing/test-sandbox.d.ts +11 -0
  339. package/dist/packages/testing/test-sandbox.js +105 -0
  340. package/dist/packages/testing/test-specs.d.ts +7 -0
  341. package/dist/packages/testing/test-specs.js +114 -0
  342. package/dist/packages/testing/test-targets.d.ts +5 -0
  343. package/dist/packages/testing/test-targets.js +38 -0
  344. package/dist/packages/testing/test-types.d.ts +16 -0
  345. package/dist/packages/testing/test-types.js +1 -0
  346. package/dist/packages/testing/test.d.ts +4 -0
  347. package/dist/packages/testing/test.js +3 -0
  348. package/dist/packages/workflow-authoring/index.d.ts +4 -0
  349. package/dist/packages/workflow-authoring/index.js +4 -0
  350. package/dist/packages/workflow-authoring/lib/workflow-edit-utils.d.ts +10 -0
  351. package/dist/packages/workflow-authoring/lib/workflow-edit-utils.js +39 -0
  352. package/dist/packages/workflow-authoring/workflow-authoring.d.ts +26 -0
  353. package/dist/packages/workflow-authoring/workflow-authoring.js +121 -0
  354. package/dist/packages/workflow-authoring/workflow-edit-session.d.ts +16 -0
  355. package/dist/packages/workflow-authoring/workflow-edit-session.js +57 -0
  356. package/dist/packages/workflow-authoring/workflow-improvement.d.ts +23 -0
  357. package/dist/packages/workflow-authoring/workflow-improvement.js +210 -0
  358. package/dist/packages/workflow-package/builtin-compiled-workflow.d.ts +38 -0
  359. package/dist/packages/workflow-package/builtin-compiled-workflow.js +94 -0
  360. package/dist/packages/workflow-package/context-interface.d.ts +96 -0
  361. package/dist/packages/workflow-package/context-interface.js +146 -0
  362. package/dist/packages/workflow-package/index.d.ts +11 -0
  363. package/dist/packages/workflow-package/index.js +11 -0
  364. package/dist/packages/workflow-package/interf-workflow-package.d.ts +25 -0
  365. package/dist/packages/workflow-package/interf-workflow-package.js +389 -0
  366. package/dist/{lib/config.d.ts → packages/workflow-package/lib/package-root.d.ts} +0 -1
  367. package/dist/packages/workflow-package/lib/package-root.js +6 -0
  368. package/dist/packages/workflow-package/local-workflows.d.ts +57 -0
  369. package/dist/packages/workflow-package/local-workflows.js +424 -0
  370. package/dist/packages/workflow-package/workflow-definitions.d.ts +82 -0
  371. package/dist/packages/workflow-package/workflow-definitions.js +210 -0
  372. package/dist/packages/workflow-package/workflow-helpers.d.ts +38 -0
  373. package/dist/packages/workflow-package/workflow-helpers.js +167 -0
  374. package/dist/packages/workflow-package/workflow-review-paths.d.ts +10 -0
  375. package/dist/packages/workflow-package/workflow-review-paths.js +27 -0
  376. package/dist/packages/workflow-package/workflow-stage-policy.d.ts +5 -0
  377. package/dist/packages/workflow-package/workflow-stage-policy.js +31 -0
  378. package/dist/packages/workflow-package/workflow-stage-runner.d.ts +41 -0
  379. package/dist/packages/workflow-package/workflow-stage-runner.js +109 -0
  380. package/package.json +43 -19
  381. package/dist/commands/test.d.ts +0 -3
  382. package/dist/lib/compiled-home.d.ts +0 -5
  383. package/dist/lib/compiled-home.js +0 -32
  384. package/dist/lib/config.js +0 -9
  385. /package/dist/{commands → cli/commands}/dataset-selection.js +0 -0
  386. /package/dist/{commands → cli/commands}/default.d.ts +0 -0
  387. /package/dist/{commands → cli/commands}/doctor.d.ts +0 -0
  388. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  389. /package/dist/{commands → cli/commands}/reset.d.ts +0 -0
  390. /package/dist/{commands → cli/commands}/status.d.ts +0 -0
  391. /package/dist/{commands → cli/commands}/verify.d.ts +0 -0
@@ -1,6 +1,5 @@
1
1
  import chalk from "chalk";
2
- import { resolveAgent, runAgentPreflight } from "../lib/agents.js";
3
- import { loadUserConfig } from "../lib/user-config.js";
2
+ import { agents, userConfig } from "../../packages/agents/index.js";
4
3
  function iconFor(status) {
5
4
  if (status === "pass")
6
5
  return chalk.green("✓");
@@ -26,8 +25,8 @@ export const doctorCommand = {
26
25
  }),
27
26
  handler: async (argv) => {
28
27
  const checks = [];
29
- const config = loadUserConfig();
30
- const { agent, error } = resolveAgent();
28
+ const config = userConfig.loadUserConfig();
29
+ const { agent, error } = agents.resolveAgent();
31
30
  if (config) {
32
31
  checks.push({
33
32
  id: "config",
@@ -73,7 +72,7 @@ export const doctorCommand = {
73
72
  message: `${agent.displayName} is configured and available as \`${agent.command}\``,
74
73
  });
75
74
  if (argv.live) {
76
- const preflight = runAgentPreflight(agent);
75
+ const preflight = agents.runAgentPreflight(agent);
77
76
  checks.push({
78
77
  id: "live",
79
78
  label: "Live executor preflight",
@@ -98,7 +97,7 @@ export const doctorCommand = {
98
97
  id: "live",
99
98
  label: "Live executor preflight",
100
99
  status: "skipped",
101
- message: "Skipped. Run `interf doctor --live` to exercise the real local agent before a truth-check draft, workflow authoring run, test, or compile.",
100
+ message: "Skipped. Run `interf doctor --live` to exercise the real local agent before a check draft, workflow authoring run, test, or compile.",
102
101
  });
103
102
  }
104
103
  const ok = checks.every((check) => check.status !== "fail");
@@ -1,4 +1,4 @@
1
- import { type WorkflowExecutionProfile, type WorkflowExecutor } from "../lib/executors.js";
1
+ import { type WorkflowExecutionProfile, type WorkflowExecutor } from "../../packages/agents/index.js";
2
2
  export interface RunAgentOption {
3
3
  name: string;
4
4
  displayName: string;
@@ -1,27 +1,24 @@
1
1
  import * as p from "@clack/prompts";
2
- import { AGENTS } from "../lib/agent-constants.js";
3
- import { detectAgents, ensureAgentAutomatedRunReady, supportsAutomatedRuns } from "../lib/agents.js";
4
- import { createLocalAgentExecutor, resolveLocalExecutor, } from "../lib/executors.js";
5
- import { loadUserConfig, saveUserConfig } from "../lib/user-config.js";
2
+ import { constants, agents, executors, userConfig } from "../../packages/agents/index.js";
6
3
  const promptedPurposes = new Set();
7
4
  function supportedDetectedAgents() {
8
- return detectAgents().filter((agent) => AGENTS.some((candidate) => candidate.name === agent.name) && supportsAutomatedRuns(agent));
5
+ return agents.detectAgents().filter((agent) => constants.AGENTS.some((candidate) => candidate.name === agent.name) && agents.supportsAutomatedRuns(agent));
9
6
  }
10
7
  export function resolvedConfiguredAgentName() {
11
- const current = loadUserConfig();
8
+ const current = userConfig.loadUserConfig();
12
9
  if (!current)
13
10
  return null;
14
- const configured = AGENTS.find((agent) => agent.command === current.agentCommand) ??
15
- AGENTS.find((agent) => agent.name === current.agent) ??
16
- AGENTS.find((agent) => agent.displayName === current.agent);
11
+ const configured = constants.AGENTS.find((agent) => agent.command === current.agentCommand) ??
12
+ constants.AGENTS.find((agent) => agent.name === current.agent) ??
13
+ constants.AGENTS.find((agent) => agent.displayName === current.agent);
17
14
  return configured?.name ?? null;
18
15
  }
19
16
  function persistSelectedAgent(selectedName) {
20
17
  const selected = supportedDetectedAgents().find((agent) => agent.name === selectedName);
21
18
  if (!selected)
22
19
  return;
23
- const current = loadUserConfig();
24
- saveUserConfig({
20
+ const current = userConfig.loadUserConfig();
21
+ userConfig.saveUserConfig({
25
22
  agent: selected.name,
26
23
  agentCommand: selected.command,
27
24
  skillsInstalled: current?.skillsInstalled ?? false,
@@ -43,13 +40,13 @@ export function resolveNamedLocalExecutor(agentName, options = {}) {
43
40
  return { executor: null, error: `Local agent \"${agentName}\" is not detected.` };
44
41
  }
45
42
  if (options.preflight !== false) {
46
- const readiness = ensureAgentAutomatedRunReady(agent);
43
+ const readiness = agents.ensureAgentAutomatedRunReady(agent);
47
44
  if (!readiness.ok) {
48
45
  return { executor: null, error: readiness.error };
49
46
  }
50
47
  }
51
48
  return {
52
- executor: createLocalAgentExecutor(agent, options.executionProfile),
49
+ executor: executors.createLocalAgentExecutor(agent, options.executionProfile),
53
50
  };
54
51
  }
55
52
  export async function promptForTestAgents() {
@@ -89,7 +86,7 @@ export async function promptForTestAgents() {
89
86
  }
90
87
  async function promptForRunAgent(purpose) {
91
88
  const purposeLabel = purpose === "draft"
92
- ? "truth-check draft"
89
+ ? "check draft"
93
90
  : purpose === "workflow"
94
91
  ? "workflow authoring"
95
92
  : purpose;
@@ -147,7 +144,7 @@ export async function resolveOrConfigureLocalExecutor(options = {}) {
147
144
  return { executor: null, error: "No local agent detected." };
148
145
  }
149
146
  }
150
- const resolved = resolveLocalExecutor(options);
147
+ const resolved = executors.resolveLocalExecutor(options);
151
148
  if (resolved.executor)
152
149
  return resolved;
153
150
  const needsChoice = typeof resolved.error === "string" &&
@@ -162,5 +159,5 @@ export async function resolveOrConfigureLocalExecutor(options = {}) {
162
159
  if (!configured.selected) {
163
160
  return resolved;
164
161
  }
165
- return resolveLocalExecutor(options);
162
+ return executors.resolveLocalExecutor(options);
166
163
  }
@@ -1,6 +1,9 @@
1
1
  import type { CommandModule } from "yargs";
2
- import type { SourceDatasetConfig } from "../lib/schema.js";
2
+ import type { SourceDatasetConfig } from "../../packages/project-model/lib/schema.js";
3
+ import { type AgentTestMatrixRow } from "./test-flow.js";
3
4
  import { runCompileCommand } from "./compile.js";
5
+ export type CurrentRunTargetStatus = "pass" | "mixed" | "fail" | "missing";
6
+ export declare function currentRunTargetStatus(rows: AgentTestMatrixRow[], target: "raw" | "compiled"): CurrentRunTargetStatus;
4
7
  export declare function compileSelectedCompiled(sourcePath: string, compiledConfig: SourceDatasetConfig, deps?: {
5
8
  runCompileCommand?: typeof runCompileCommand;
6
9
  }): Promise<import("./compile.js").CompileCommandResult | null>;
@@ -1,19 +1,32 @@
1
1
  import chalk from "chalk";
2
2
  import * as p from "@clack/prompts";
3
3
  import { resolve } from "node:path";
4
- import { detectInterf, readInterfConfig, resolveSourceControlPath, } from "../lib/interf.js";
5
- import { SOURCE_FOLDER_CONFIG_FILE, syncCompiledInterfConfigFromSourceDatasetConfig, upsertSourceDatasetConfig, } from "../lib/source-config.js";
4
+ import { detectInterf, readInterfConfig, resolveSourceControlPath, } from "../../packages/project-model/interf.js";
5
+ import { SOURCE_FOLDER_CONFIG_FILE, syncCompiledInterfConfigFromSourceDatasetConfig, upsertSourceDatasetConfig, } from "../../packages/project-model/source-config.js";
6
6
  import { DEFAULT_COMPILED_NAME, describeCompileLoopSelection, promptSingleCompiledConfig, } from "./source-config-wizard.js";
7
7
  import { buildCompiledWorkflowOptions, chooseCompiledWorkflow, createWorkflowWizard, } from "./create-workflow-wizard.js";
8
8
  import { findBuiltCompiledPath, findSavedCompiledConfig, listSavedCompiledEntries, } from "./compiled-flow.js";
9
- import { readSavedTestComparison } from "./test-flow.js";
9
+ import { readCurrentSavedTestComparison, } from "./test-flow.js";
10
10
  import { runCompileCommand } from "./compile.js";
11
11
  import { runTestCommand } from "./test.js";
12
+ export function currentRunTargetStatus(rows, target) {
13
+ const outcomes = rows
14
+ .map((row) => (target === "raw" ? row.rawOutcome : row.compiledOutcome))
15
+ .filter((outcome) => Boolean(outcome));
16
+ if (outcomes.length === 0)
17
+ return "missing";
18
+ const passFlags = outcomes.map((outcome) => outcome.result.totalCases > 0 && outcome.result.passedCases === outcome.result.totalCases);
19
+ if (passFlags.every(Boolean))
20
+ return "pass";
21
+ if (passFlags.some(Boolean))
22
+ return "mixed";
23
+ return "fail";
24
+ }
12
25
  function describeSavedQuestions(dataset) {
13
26
  const count = dataset.checks.length;
14
27
  if (count === 0)
15
- return "No saved truth checks yet";
16
- return `${count} saved truth check${count === 1 ? "" : "s"}`;
28
+ return "No questions yet";
29
+ return `${count} question${count === 1 ? "" : "s"}`;
17
30
  }
18
31
  function printDatasetSummary(options) {
19
32
  const compiledConfig = options.builtCompiledPath
@@ -21,7 +34,7 @@ function printDatasetSummary(options) {
21
34
  : null;
22
35
  const workflowLabel = `${options.dataset.workflow ?? "interf"}${compiledConfig?.workflow_origin?.local_draft === true ? " (local draft)" : ""}`;
23
36
  p.log.info(`Dataset: ${options.dataset.name}`);
24
- p.log.info(`Path: ${options.dataset.path === "." ? "source folder" : options.dataset.path}`);
37
+ p.log.info(`Source folder: ${options.dataset.path}`);
25
38
  if (options.dataset.about) {
26
39
  p.log.info(`About: ${options.dataset.about}`);
27
40
  }
@@ -31,58 +44,63 @@ function printDatasetSummary(options) {
31
44
  maxLoops: options.dataset.max_loops,
32
45
  }));
33
46
  p.log.info(describeSavedQuestions(options.dataset));
34
- p.log.info(options.built ? "Compiled dataset is available." : "Compiled dataset has not been built yet.");
47
+ p.log.info(options.built ? "Portable context is available." : "Portable context has not been built yet.");
35
48
  if (options.latestComparison?.raw && options.latestComparison?.compiled) {
36
- p.log.info(`Latest saved comparison: files-as-is ${options.latestComparison.raw.passed_cases}/${options.latestComparison.raw.total_cases}, compiled ${options.latestComparison.compiled.passed_cases}/${options.latestComparison.compiled.total_cases}.`);
49
+ p.log.info(`Latest saved comparison: source files ${options.latestComparison.raw.passed_cases}/${options.latestComparison.raw.total_cases}, portable context ${options.latestComparison.compiled.passed_cases}/${options.latestComparison.compiled.total_cases}.`);
37
50
  }
38
51
  else if (options.latestComparison?.raw) {
39
- p.log.info(`Latest files-as-is baseline: ${options.latestComparison.raw.passed_cases}/${options.latestComparison.raw.total_cases}.`);
52
+ p.log.info(`Latest saved source-files run: ${options.latestComparison.raw.passed_cases}/${options.latestComparison.raw.total_cases}.`);
40
53
  }
41
54
  else if (options.latestComparison?.compiled) {
42
- p.log.info(`Latest compiled run: ${options.latestComparison.compiled.passed_cases}/${options.latestComparison.compiled.total_cases}.`);
55
+ p.log.info(`Latest portable-context run: ${options.latestComparison.compiled.passed_cases}/${options.latestComparison.compiled.total_cases}.`);
56
+ }
57
+ else if (options.latestComparisonStale) {
58
+ p.log.info("Saved test results are stale for the current questions.");
43
59
  }
44
60
  if (options.sourcePath !== process.cwd()) {
45
- p.log.info(`Source folder: ${options.sourcePath}`);
61
+ p.log.info(`Project folder: ${options.sourcePath}`);
46
62
  }
47
63
  }
48
64
  async function promptDatasetAction(dataset, built, latestComparison) {
49
65
  const options = [];
50
66
  const hasSavedRawBaseline = Boolean(latestComparison?.raw);
51
- const rawAlreadyPasses = latestComparison?.raw &&
67
+ const latestRawPasses = latestComparison?.raw &&
52
68
  latestComparison.raw.passed_cases === latestComparison.raw.total_cases;
53
69
  if (dataset.checks.length > 0) {
54
70
  options.push({
55
71
  value: "test",
56
72
  label: built
57
- ? "Compare files-as-is and compiled dataset (Recommended)"
73
+ ? "Compare source files and portable context (Recommended)"
58
74
  : hasSavedRawBaseline
59
- ? "Rerun the files-as-is baseline"
60
- : "Measure the files-as-is baseline (Recommended)",
75
+ ? "Rerun the source-files baseline"
76
+ : "Measure the source-files baseline (Recommended)",
61
77
  hint: built
62
- ? "See whether preparation helps on the saved checks"
78
+ ? "See whether the portable context helps on the saved questions"
63
79
  : hasSavedRawBaseline
64
- ? "Refresh the saved raw baseline on the current checks"
65
- : "See whether the raw dataset is already good enough before compiling",
80
+ ? "Refresh the saved source-files baseline on the current questions"
81
+ : "See whether the source files are already good enough before compiling",
66
82
  });
67
83
  }
68
84
  options.push({
69
85
  value: "compile",
70
- label: built ? "Rebuild the compiled dataset" : "Build the compiled dataset",
86
+ label: built ? "Rebuild portable context" : "Build portable context",
71
87
  hint: built
72
- ? "Refresh it from the current dataset files"
88
+ ? "Refresh it from the current source files"
73
89
  : dataset.checks.length > 0
74
- ? rawAlreadyPasses
75
- ? "Optional: compare a compiled dataset against the already-passing baseline"
76
- : "Compile only if the baseline is not good enough"
90
+ ? latestRawPasses
91
+ ? "Optional: build portable context for a side-by-side comparison with the latest saved source-files run"
92
+ : hasSavedRawBaseline
93
+ ? "Some questions still fail on the source files. Build portable context and compare it on the same questions"
94
+ : "Build portable context and compare it on the same questions"
77
95
  : "Build it first, then measure it later",
78
96
  }, {
79
97
  value: "dataset",
80
- label: "Add another dataset",
98
+ label: "Add another setup",
81
99
  hint: "Add a separate folder, focus, or question set",
82
100
  }, {
83
101
  value: "edit",
84
- label: "Edit truth checks and settings",
85
- hint: "Update checks, focus, workflow, or compile mode",
102
+ label: "Edit questions and settings",
103
+ hint: "Update questions, focus, workflow, or compile mode",
86
104
  }, {
87
105
  value: "workflow",
88
106
  label: "Create workflow",
@@ -102,22 +120,68 @@ async function promptDatasetAction(dataset, built, latestComparison) {
102
120
  }
103
121
  function printDatasetRecommendation(dataset, built, latestComparison) {
104
122
  if (dataset.checks.length === 0) {
105
- p.log.info("Recommended first step: save a few truth checks for this dataset.");
123
+ p.log.info("Recommended first step: save a few questions for this dataset.");
106
124
  return;
107
125
  }
108
126
  if (!built) {
109
127
  if (latestComparison?.raw) {
110
- if (latestComparison.raw.passed_cases === latestComparison.raw.total_cases) {
111
- p.log.info("Files-as-is already passes the saved checks. Compile only if you want a side-by-side comparison or a stronger compiled surface.");
112
- return;
113
- }
114
- p.log.info(`Latest files-as-is baseline: ${latestComparison.raw.passed_cases}/${latestComparison.raw.total_cases}. Compile if you want to improve it.`);
128
+ p.log.info(latestComparison.raw.passed_cases === latestComparison.raw.total_cases
129
+ ? `Latest source-files run: ${latestComparison.raw.passed_cases}/${latestComparison.raw.total_cases}. Rerun the baseline if you want current numbers for a different agent set, or build portable context if you want a side-by-side comparison.`
130
+ : `Latest source-files run: ${latestComparison.raw.passed_cases}/${latestComparison.raw.total_cases}. Some questions still fail on the source files. Build portable context if you want Interf to prepare context for this work and compare it on the same questions.`);
115
131
  return;
116
132
  }
117
- p.log.info("Recommended first step: measure the files-as-is baseline before compiling.");
133
+ p.log.info("Recommended first step: measure the source-files baseline before compiling.");
118
134
  return;
119
135
  }
120
- p.log.info("Recommended first step: compare the files-as-is baseline and the compiled dataset.");
136
+ p.log.info("Recommended first step: compare the source-files baseline and the portable context.");
137
+ }
138
+ async function promptPostBaselineAction(rows) {
139
+ const status = currentRunTargetStatus(rows, "raw");
140
+ const subject = rows.length === 1 ? "selected agent" : "selected agents";
141
+ if (status === "pass") {
142
+ p.log.info(`Source files passed on all ${subject} in this run.`);
143
+ }
144
+ else if (status === "mixed") {
145
+ p.log.info(`Source files were mixed across the ${subject} in this run.`);
146
+ }
147
+ else if (status === "fail") {
148
+ p.log.info(`Source files did not pass on the ${subject} in this run.`);
149
+ }
150
+ const compileRecommended = status !== "pass";
151
+ const selected = await p.select({
152
+ message: "What do you want to do next?",
153
+ options: [
154
+ {
155
+ value: "compile",
156
+ label: compileRecommended
157
+ ? "Build portable context (Recommended)"
158
+ : "Build portable context",
159
+ hint: compileRecommended
160
+ ? status === "mixed"
161
+ ? "Some selected agents still failed on the source files. Build portable context and compare it on the same questions"
162
+ : "Build portable context and compare it on the same questions"
163
+ : "Build portable context and compare it on the same questions",
164
+ },
165
+ {
166
+ value: "edit",
167
+ label: "Change questions and settings",
168
+ hint: "Revise the questions or setup settings before the next run",
169
+ },
170
+ {
171
+ value: "rerun",
172
+ label: "Rerun the source-files baseline",
173
+ hint: "Run the same questions again, including different local agents if you want",
174
+ },
175
+ {
176
+ value: "done",
177
+ label: "Stop here",
178
+ hint: "Leave the dataset as-is for now",
179
+ },
180
+ ],
181
+ });
182
+ if (p.isCancel(selected))
183
+ return null;
184
+ return selected;
121
185
  }
122
186
  async function chooseCompiledForWizard(options) {
123
187
  if (options.fixedCompiledName) {
@@ -129,7 +193,7 @@ async function chooseCompiledForWizard(options) {
129
193
  if (savedEntries.length === 1)
130
194
  return savedEntries[0]?.config ?? null;
131
195
  const selected = await p.select({
132
- message: "Which dataset do you want to work with?",
196
+ message: "Which source folder setup do you want to work with?",
133
197
  options: [
134
198
  ...savedEntries.map((entry) => ({
135
199
  value: entry.config.name,
@@ -143,7 +207,7 @@ async function chooseCompiledForWizard(options) {
143
207
  })),
144
208
  {
145
209
  value: "__new__",
146
- label: "Add another dataset",
210
+ label: "Add another setup",
147
211
  hint: "Add a separate folder, focus, or question set",
148
212
  },
149
213
  ],
@@ -173,7 +237,6 @@ async function promptCompiledSetup(options) {
173
237
  projectPath: options.sourcePath,
174
238
  initial: options.initial,
175
239
  ...(options.fixedName ? { fixedName: options.fixedName } : {}),
176
- skipNamePrompt: !options.fixedName && options.introStyle === "first",
177
240
  introStyle: options.introStyle,
178
241
  selectedWorkflowLabel: workflowLabel,
179
242
  });
@@ -191,10 +254,10 @@ async function promptCompiledSetup(options) {
191
254
  syncCompiledInterfConfigFromSourceDatasetConfig(builtCompiledPath, compiledConfigWithWorkflow);
192
255
  }
193
256
  console.log();
194
- console.log(chalk.green(` ✓ Saved dataset setup in ${SOURCE_FOLDER_CONFIG_FILE}`));
195
- console.log(chalk.dim(` Source folder: ${options.sourcePath}`));
196
- console.log(chalk.dim(` Dataset: ${compiledConfigWithWorkflow.name}`));
197
- console.log(chalk.dim(` Path: ${compiledConfigWithWorkflow.path}`));
257
+ console.log(chalk.green(` ✓ Saved setup in ${SOURCE_FOLDER_CONFIG_FILE}`));
258
+ console.log(chalk.dim(` Project folder: ${options.sourcePath}`));
259
+ console.log(chalk.dim(` Setup: ${compiledConfigWithWorkflow.name}`));
260
+ console.log(chalk.dim(` Source folder: ${compiledConfigWithWorkflow.path}`));
198
261
  console.log(chalk.dim(` Workflow: ${workflowLabel}`));
199
262
  console.log(chalk.dim(` Compile mode: ${describeCompileLoopSelection({
200
263
  maxAttempts: compiledConfigWithWorkflow.max_attempts,
@@ -213,13 +276,18 @@ export async function compileSelectedCompiled(sourcePath, compiledConfig, deps =
213
276
  }
214
277
  async function runCompiledActionMenu(sourcePath, compiledConfig, options = {}) {
215
278
  const builtCompiledPath = findBuiltCompiledPath(sourcePath, compiledConfig.name);
216
- const latestComparison = readSavedTestComparison(sourcePath, compiledConfig.name);
279
+ const { comparison: latestComparison, stale: latestComparisonStale, } = readCurrentSavedTestComparison({
280
+ projectPath: sourcePath,
281
+ datasetName: compiledConfig.name,
282
+ checks: compiledConfig.checks,
283
+ });
217
284
  printDatasetSummary({
218
285
  sourcePath,
219
286
  dataset: compiledConfig,
220
287
  built: Boolean(builtCompiledPath),
221
288
  builtCompiledPath,
222
289
  latestComparison,
290
+ latestComparisonStale,
223
291
  });
224
292
  printDatasetRecommendation(compiledConfig, Boolean(builtCompiledPath), latestComparison);
225
293
  const action = await promptDatasetAction(compiledConfig, Boolean(builtCompiledPath), latestComparison);
@@ -234,9 +302,7 @@ async function runCompiledActionMenu(sourcePath, compiledConfig, options = {}) {
234
302
  sourcePath,
235
303
  datasetContext: {
236
304
  config: compiledConfig,
237
- datasetPath: compiledConfig.path === "."
238
- ? sourcePath
239
- : resolve(sourcePath, compiledConfig.path),
305
+ datasetPath: resolve(sourcePath, compiledConfig.path),
240
306
  },
241
307
  });
242
308
  if (typeof workflowId === "string") {
@@ -282,48 +348,66 @@ async function runCompiledActionMenu(sourcePath, compiledConfig, options = {}) {
282
348
  if (action === "test") {
283
349
  if (compiledConfig.checks.length === 0) {
284
350
  process.exitCode = 1;
285
- console.log(chalk.red(` Dataset "${compiledConfig.name}" does not have any saved truth checks yet.`));
286
- console.log(chalk.dim(" Run `interf`, edit this dataset, and add a few truth checks first."));
351
+ console.log(chalk.red(` Setup "${compiledConfig.name}" does not have any questions yet.`));
352
+ console.log(chalk.dim(" Run `interf`, edit this setup, and add a few questions first."));
287
353
  console.log(chalk.dim(" Then rerun `interf test`."));
288
354
  return;
289
355
  }
290
- const baselineRan = await runTestCommand({
291
- sourcePath,
292
- dataset: compiledConfig.name,
293
- datasetConfig: compiledConfig,
294
- ...(builtCompiledPath ? {} : { target: "raw" }),
295
- });
296
- if (!baselineRan) {
297
- return;
298
- }
299
356
  if (builtCompiledPath) {
300
- return;
301
- }
302
- const latestComparison = readSavedTestComparison(sourcePath, compiledConfig.name);
303
- if (latestComparison?.raw?.passed_cases === latestComparison?.raw?.total_cases) {
304
- const compileAnyway = await p.confirm({
305
- message: "The files-as-is baseline already passed. Compile this dataset anyway?",
306
- initialValue: false,
357
+ const baselineRan = await runTestCommand({
358
+ sourcePath,
359
+ dataset: compiledConfig.name,
360
+ datasetConfig: compiledConfig,
361
+ target: "both",
307
362
  });
308
- if (p.isCancel(compileAnyway) || !compileAnyway) {
363
+ if (!baselineRan) {
309
364
  return;
310
365
  }
366
+ return;
311
367
  }
312
- else {
313
- const compileAndCompare = await p.confirm({
314
- message: "Compile this dataset now and compare it on the same checks? (Recommended)",
315
- initialValue: true,
368
+ while (true) {
369
+ const baselineCapture = { result: null };
370
+ const baselineRan = await runTestCommand({
371
+ sourcePath,
372
+ dataset: compiledConfig.name,
373
+ datasetConfig: compiledConfig,
374
+ target: "raw",
375
+ onComplete(result) {
376
+ baselineCapture.result = result;
377
+ },
316
378
  });
317
- if (p.isCancel(compileAndCompare) || !compileAndCompare) {
379
+ const baselineResult = baselineCapture.result;
380
+ if (!baselineRan || !baselineResult) {
381
+ return;
382
+ }
383
+ const nextAction = await promptPostBaselineAction(baselineResult.rows);
384
+ if (!nextAction || nextAction === "done") {
318
385
  return;
319
386
  }
387
+ if (nextAction === "rerun") {
388
+ continue;
389
+ }
390
+ if (nextAction === "edit") {
391
+ const nextCompiled = await promptCompiledSetup({
392
+ sourcePath,
393
+ initial: compiledConfig,
394
+ fixedName: compiledConfig.name,
395
+ introStyle: "edit",
396
+ });
397
+ if (!nextCompiled) {
398
+ return;
399
+ }
400
+ await runCompiledActionMenu(sourcePath, nextCompiled, { justConfigured: true });
401
+ return;
402
+ }
403
+ break;
320
404
  }
321
405
  const compileResult = await compileSelectedCompiled(sourcePath, compiledConfig);
322
406
  if (!compileResult) {
323
407
  return;
324
408
  }
325
409
  if (compileResult.testedDuringCompile) {
326
- p.log.info("This compile run already tested the compiled dataset on the saved checks.");
410
+ p.log.info("This compile run already checked the portable context on the saved questions.");
327
411
  p.log.info("Run `interf test` later if you want a fresh side-by-side comparison summary.");
328
412
  return;
329
413
  }
@@ -342,13 +426,14 @@ async function runCompiledActionMenu(sourcePath, compiledConfig, options = {}) {
342
426
  if (compiledConfig.checks.length === 0)
343
427
  return;
344
428
  if (compileResult.testedDuringCompile) {
345
- p.log.info("This compile run already ran the compiled-dataset test.");
346
- return;
429
+ p.log.info("This compile run already checked the portable context on the compile agent.");
347
430
  }
348
431
  const runCompiledTest = await p.confirm({
349
- message: builtCompiledPath
350
- ? "Run files-as-is and compiled on the saved checks now?"
351
- : "Compare files-as-is and compiled on the saved checks now?",
432
+ message: compileResult.testedDuringCompile
433
+ ? "Run a fresh source-files versus portable-context comparison now?"
434
+ : builtCompiledPath
435
+ ? "Run source files and portable context on the saved questions now?"
436
+ : "Compare source files and portable context on the saved questions now?",
352
437
  initialValue: true,
353
438
  });
354
439
  if (p.isCancel(runCompiledTest) || !runCompiledTest)
@@ -371,12 +456,12 @@ export const initCommand = {
371
456
  };
372
457
  export async function runInitCommand() {
373
458
  p.intro(chalk.bold("Interf"));
374
- p.log.info("Measure whether your local agents can answer the questions your task depends on from the data in this folder, then prepare the dataset only if the raw files are not good enough.");
459
+ p.log.info("Interf prepares context for your agents from the source folder you choose. Start with the work, review the suggested questions, check the source files first, and build a local folder when the files need more structure.");
375
460
  const cwd = process.cwd();
376
461
  const detected = detectInterf(cwd);
377
462
  const sourcePath = detected ? resolveSourceControlPath(detected.path) : cwd;
378
463
  if (detected) {
379
- p.log.info(`Working from the source folder: ${sourcePath}`);
464
+ p.log.info(`Working from the project folder: ${sourcePath}`);
380
465
  }
381
466
  const savedEntries = listSavedCompiledEntries(sourcePath);
382
467
  if (savedEntries.length === 0) {
@@ -1,28 +1,28 @@
1
1
  import chalk from "chalk";
2
- import { detectInterf, resolveSourceControlPath, } from "../lib/interf.js";
2
+ import { detectInterf, resolveSourceControlPath, } from "../../packages/project-model/interf.js";
3
3
  import { listSavedCompiledEntries } from "./compiled-flow.js";
4
4
  export const listCommand = {
5
5
  command: "list",
6
- describe: "List datasets in this project",
6
+ describe: "List saved setups in this project",
7
7
  handler: async () => {
8
8
  const detected = detectInterf(process.cwd());
9
9
  const sourcePath = detected ? resolveSourceControlPath(detected.path) : process.cwd();
10
10
  const datasets = listSavedCompiledEntries(sourcePath);
11
11
  if (datasets.length === 0) {
12
- console.log(chalk.dim(" Nothing found. Start with `interf` or `interf init` to define a dataset and save truth checks."));
12
+ console.log(chalk.dim(" Nothing found. Start with `interf` or `interf init` to define a setup and save questions."));
13
13
  return;
14
14
  }
15
15
  console.log();
16
- console.log(chalk.bold(" Datasets"));
16
+ console.log(chalk.bold(" Saved setups"));
17
17
  console.log();
18
18
  for (const dataset of datasets) {
19
19
  console.log(` ${dataset.config.name}`);
20
20
  if (dataset.config.about) {
21
21
  console.log(chalk.dim(` task: ${dataset.config.about}`));
22
22
  }
23
- console.log(chalk.dim(` ${dataset.path ? "built" : "not built yet"} · path: ${dataset.config.path}`));
23
+ console.log(chalk.dim(` ${dataset.path ? "built" : "not built yet"} · source folder: ${dataset.config.path}`));
24
24
  console.log(chalk.dim(` workflow: ${dataset.config.workflow ?? "interf"}${dataset.localDraft ? " (local draft)" : ""}`));
25
- console.log(chalk.dim(` checks: ${dataset.config.checks.length}`));
25
+ console.log(chalk.dim(` questions: ${dataset.config.checks.length}`));
26
26
  }
27
27
  },
28
28
  };
@@ -1,6 +1,6 @@
1
1
  import chalk from "chalk";
2
- import { detectInterf } from "../lib/interf.js";
3
- import { resetCompiledGeneratedState } from "../lib/compiled-reset.js";
2
+ import { detectInterf } from "../../packages/project-model/interf.js";
3
+ import { resetCompiledGeneratedState } from "../../packages/compiler/reset.js";
4
4
  export const resetCommand = {
5
5
  command: "reset <scope>",
6
6
  describe: "Reset generated compiled state while keeping `raw/` and the local workflow package",
@@ -12,11 +12,11 @@ export const resetCommand = {
12
12
  const detected = detectInterf(process.cwd());
13
13
  if (!detected) {
14
14
  process.exitCode = 1;
15
- console.log(chalk.red("Run this from inside a compiled dataset."));
15
+ console.log(chalk.red("Run this from inside a compiled context."));
16
16
  return;
17
17
  }
18
18
  const compiledPath = detected.path;
19
19
  resetCompiledGeneratedState(compiledPath, argv.scope);
20
- console.log(chalk.green(" Compiled reset complete."));
20
+ console.log(chalk.green(" Compiled-context reset complete."));
21
21
  },
22
22
  };
@@ -1,8 +1,8 @@
1
- import type { SourceTruthCheck, SourceDatasetConfig } from "../lib/schema.js";
1
+ import { type SourceDatasetConfig, type SourceTruthCheck } from "../../packages/project-model/index.js";
2
2
  export declare const DEFAULT_COMPILED_NAME = "dataset1";
3
- export declare const DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER = "A question you can already verify from this dataset";
3
+ export declare const DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER = "A question you can already verify from this source folder";
4
4
  export declare const DEFAULT_COMPILED_CHECK_ANSWER_PLACEHOLDER = "The expected answer in plain English";
5
- export declare const DEFAULT_COMPILED_ABOUT_PLACEHOLDER = "Example: board-prep questions from these files, chart reads from this report, or tax review from these exports.";
5
+ export declare const DEFAULT_COMPILED_ABOUT_PLACEHOLDER = "Example: board prep from these files, chart reads from this report, or tax review from these exports.";
6
6
  export declare const DEFAULT_DATASET_PATH_PLACEHOLDER = "./dataset1";
7
7
  export declare const DEFAULT_COMPILE_RETRY_ATTEMPTS = 3;
8
8
  export declare const DEFAULT_SELF_IMPROVING_LOOPS = 3;
@@ -11,6 +11,12 @@ export interface CompileLoopSelection {
11
11
  max_attempts?: number;
12
12
  max_loops?: number;
13
13
  }
14
+ export declare function normalizeDatasetPathForConfig(projectPath: string, value: string): string;
15
+ export declare function listDatasetFolderChoices(cwd?: string): Array<{
16
+ value: string;
17
+ label: string;
18
+ hint: string;
19
+ }>;
14
20
  export declare function defaultDatasetPathForPrompt(name: string, introStyle: "first" | "additional" | "edit", cwd?: string): string;
15
21
  export declare function datasetAboutPromptMessage(introStyle: "first" | "additional" | "edit"): string;
16
22
  export declare function resolveCompileLoopMode(maxAttempts?: number | null, maxLoops?: number | null): CompileLoopMode;
@@ -41,7 +47,6 @@ export declare function promptSingleCompiledConfig(options?: {
41
47
  initial?: Partial<Pick<SourceDatasetConfig, "name" | "path" | "about" | "checks" | "max_attempts" | "max_loops">>;
42
48
  fixedName?: string;
43
49
  skipAboutPrompt?: boolean;
44
- skipNamePrompt?: boolean;
45
50
  introStyle?: "first" | "additional" | "edit";
46
51
  selectedWorkflowLabel?: string;
47
52
  }): Promise<SourceDatasetConfig | null>;