@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,14 +1,14 @@
1
1
  import { existsSync, readdirSync, statSync } from "node:fs";
2
- import { join } from "node:path";
2
+ import { join, relative, sep } from "node:path";
3
3
  import * as p from "@clack/prompts";
4
- import { compiledMaxAttempts, compiledMaxLoops, resolveSourceDatasetPath, } from "../lib/source-config.js";
5
- import { slugify } from "../lib/util.js";
4
+ import { sourceConfig as projectSourceConfig, } from "../../packages/project-model/index.js";
5
+ import { slugify } from "../../packages/shared/naming.js";
6
6
  import { resolveOrConfigureLocalExecutor } from "./executor-flow.js";
7
7
  import { draftTruthChecks } from "./check-draft.js";
8
8
  export const DEFAULT_COMPILED_NAME = "dataset1";
9
- export const DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER = "A question you can already verify from this dataset";
9
+ export const DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER = "A question you can already verify from this source folder";
10
10
  export const DEFAULT_COMPILED_CHECK_ANSWER_PLACEHOLDER = "The expected answer in plain English";
11
- export const DEFAULT_COMPILED_ABOUT_PLACEHOLDER = "Example: board-prep questions from these files, chart reads from this report, or tax review from these exports.";
11
+ export const DEFAULT_COMPILED_ABOUT_PLACEHOLDER = "Example: board prep from these files, chart reads from this report, or tax review from these exports.";
12
12
  export const DEFAULT_DATASET_PATH_PLACEHOLDER = "./dataset1";
13
13
  export const DEFAULT_COMPILE_RETRY_ATTEMPTS = 3;
14
14
  export const DEFAULT_SELF_IMPROVING_LOOPS = 3;
@@ -19,7 +19,7 @@ function normalizeOptionalPromptText(value) {
19
19
  const normalized = value.trim();
20
20
  return normalized.length > 0 ? normalized : undefined;
21
21
  }
22
- function findSingleDatasetFolderCandidate(cwd) {
22
+ function listVisibleDatasetFolders(cwd) {
23
23
  const ignoredEntries = new Set([
24
24
  ".DS_Store",
25
25
  ".git",
@@ -33,10 +33,9 @@ function findSingleDatasetFolderCandidate(cwd) {
33
33
  rootEntries = readdirSync(cwd);
34
34
  }
35
35
  catch {
36
- return null;
36
+ return [];
37
37
  }
38
- const visibleEntries = rootEntries.filter((entry) => !ignoredEntries.has(entry));
39
- const visibleFiles = [];
38
+ const visibleEntries = rootEntries.filter((entry) => !ignoredEntries.has(entry) && !entry.startsWith("."));
40
39
  const visibleDirectories = [];
41
40
  for (const entry of visibleEntries) {
42
41
  try {
@@ -44,19 +43,56 @@ function findSingleDatasetFolderCandidate(cwd) {
44
43
  if (statSync(entryPath).isDirectory()) {
45
44
  visibleDirectories.push(entry);
46
45
  }
47
- else {
48
- visibleFiles.push(entry);
49
- }
50
46
  }
51
47
  catch {
52
48
  // ignore unreadable entries
53
49
  }
54
50
  }
55
- if (visibleFiles.length > 0 || visibleDirectories.length !== 1) {
51
+ return visibleDirectories.sort((left, right) => left.localeCompare(right));
52
+ }
53
+ function isReservedDatasetPath(relativePath) {
54
+ const normalized = relativePath.replace(/\\/g, "/").replace(/^\.\/+/, "");
55
+ return normalized === "interf" || normalized.startsWith("interf/") || normalized === ".interf" || normalized.startsWith(".interf/");
56
+ }
57
+ export function normalizeDatasetPathForConfig(projectPath, value) {
58
+ const resolvedPath = projectSourceConfig.resolveSourceDatasetPath(projectPath, { path: value.trim() });
59
+ const relativePath = relative(projectPath, resolvedPath).split(sep).join("/") || ".";
60
+ if (relativePath === ".") {
61
+ throw new Error("Pick a source folder inside this project, not the project root.");
62
+ }
63
+ if (isReservedDatasetPath(relativePath)) {
64
+ throw new Error("Pick an existing source folder under the project root, not `interf/` or `.interf/`.");
65
+ }
66
+ if (!existsSync(resolvedPath)) {
67
+ throw new Error("Pick an existing source folder under the project root.");
68
+ }
69
+ if (!statSync(resolvedPath).isDirectory()) {
70
+ throw new Error("Source folder must be a directory.");
71
+ }
72
+ return relativePath.startsWith("./") ? relativePath : `./${relativePath}`;
73
+ }
74
+ function defaultDatasetNameForPath(datasetPath) {
75
+ const segments = datasetPath
76
+ .replace(/\\/g, "/")
77
+ .replace(/\/+$/g, "")
78
+ .split("/")
79
+ .filter((segment) => segment.length > 0 && segment !== ".");
80
+ return slugify(segments[segments.length - 1] ?? "") || DEFAULT_COMPILED_NAME;
81
+ }
82
+ function findSingleDatasetFolderCandidate(cwd) {
83
+ const visibleDirectories = listVisibleDatasetFolders(cwd);
84
+ if (visibleDirectories.length !== 1) {
56
85
  return null;
57
86
  }
58
87
  return `./${visibleDirectories[0]}`;
59
88
  }
89
+ export function listDatasetFolderChoices(cwd = process.cwd()) {
90
+ return listVisibleDatasetFolders(cwd).map((entry) => ({
91
+ value: `./${entry}`,
92
+ label: entry,
93
+ hint: `Use ./${entry} as the source folder`,
94
+ }));
95
+ }
60
96
  export function defaultDatasetPathForPrompt(name, introStyle, cwd = process.cwd()) {
61
97
  const namedFolderPath = join(cwd, name);
62
98
  if (existsSync(namedFolderPath)) {
@@ -70,15 +106,65 @@ export function defaultDatasetPathForPrompt(name, introStyle, cwd = process.cwd(
70
106
  }
71
107
  }
72
108
  if (introStyle === "first") {
73
- return findSingleDatasetFolderCandidate(cwd) ?? ".";
109
+ return findSingleDatasetFolderCandidate(cwd) ?? `./${name}`;
74
110
  }
75
111
  return `./${name}`;
76
112
  }
113
+ async function promptDatasetFolderPath(options) {
114
+ const folderChoices = listDatasetFolderChoices(options.projectPath);
115
+ if (folderChoices.length > 0) {
116
+ const selected = await p.select({
117
+ message: "Which source folder should Interf use?",
118
+ options: [
119
+ ...folderChoices,
120
+ {
121
+ value: "__manual__",
122
+ label: "Enter a different path",
123
+ hint: "Use a relative path if the source folder is not listed here",
124
+ },
125
+ ],
126
+ initialValue: folderChoices.some((choice) => choice.value === options.initialPath)
127
+ ? options.initialPath
128
+ : undefined,
129
+ });
130
+ if (p.isCancel(selected))
131
+ return null;
132
+ if (selected !== "__manual__") {
133
+ try {
134
+ return normalizeDatasetPathForConfig(options.projectPath, String(selected));
135
+ }
136
+ catch (error) {
137
+ p.log.error(error instanceof Error ? error.message : String(error));
138
+ return null;
139
+ }
140
+ }
141
+ }
142
+ const datasetPath = await p.text({
143
+ message: "Which source folder should Interf use?",
144
+ placeholder: DEFAULT_DATASET_PATH_PLACEHOLDER,
145
+ initialValue: options.initialPath,
146
+ validate: (value) => {
147
+ const normalized = value.trim();
148
+ if (normalized.length === 0)
149
+ return "Source folder is required";
150
+ try {
151
+ normalizeDatasetPathForConfig(options.projectPath, normalized);
152
+ return undefined;
153
+ }
154
+ catch (error) {
155
+ return error instanceof Error ? error.message : String(error);
156
+ }
157
+ },
158
+ });
159
+ if (p.isCancel(datasetPath))
160
+ return null;
161
+ return normalizeDatasetPathForConfig(options.projectPath, String(datasetPath));
162
+ }
77
163
  export function datasetAboutPromptMessage(introStyle) {
78
164
  if (introStyle === "edit") {
79
- return "What task should this dataset stay focused on?";
165
+ return "What work should this source folder stay focused on?";
80
166
  }
81
- return "What task should this dataset help with?";
167
+ return "What work should this source folder help with?";
82
168
  }
83
169
  function formatAttemptLabel(count, noun) {
84
170
  return `${count} ${noun}${count === 1 ? "" : "s"}`;
@@ -97,11 +183,11 @@ export function describeCompileLoopSelection(options) {
97
183
  }
98
184
  if (mode === "retry") {
99
185
  const attempts = options.maxAttempts ?? DEFAULT_COMPILE_RETRY_ATTEMPTS;
100
- return `Compile retries are enabled for this dataset (${formatAttemptLabel(attempts, "total attempt")}).`;
186
+ return `Compile retries are enabled here (${formatAttemptLabel(attempts, "total attempt")}).`;
101
187
  }
102
188
  const loops = options.maxLoops ?? DEFAULT_SELF_IMPROVING_LOOPS;
103
189
  const attempts = options.maxAttempts ?? DEFAULT_SELF_IMPROVING_ATTEMPTS;
104
- return `Self-improving loops are enabled for this dataset (${formatAttemptLabel(attempts, "attempt")} per variation, ${formatAttemptLabel(loops, "workflow revision")}).`;
190
+ return `Self-improving loops are enabled here (${formatAttemptLabel(attempts, "attempt")} per variation, ${formatAttemptLabel(loops, "workflow revision")}).`;
105
191
  }
106
192
  async function promptCompileRetryAttempts(options) {
107
193
  const maxAttempts = await p.text({
@@ -118,7 +204,8 @@ async function promptCompileRetryAttempts(options) {
118
204
  });
119
205
  if (p.isCancel(maxAttempts))
120
206
  return null;
121
- return compiledMaxAttempts(Number.parseInt(String(maxAttempts).trim(), 10)) ?? DEFAULT_COMPILE_RETRY_ATTEMPTS;
207
+ return projectSourceConfig.compiledMaxAttempts(Number.parseInt(String(maxAttempts).trim(), 10))
208
+ ?? DEFAULT_COMPILE_RETRY_ATTEMPTS;
122
209
  }
123
210
  export async function promptCheckCases(options) {
124
211
  p.log.info(options.heading);
@@ -159,7 +246,7 @@ export async function promptCheckCases(options) {
159
246
  }
160
247
  function printDraftTruthChecks(checks) {
161
248
  console.log();
162
- p.log.info(`Draft truth checks: ${checks.length}`);
249
+ p.log.info(`Draft tests: ${checks.length}`);
163
250
  for (const [index, check] of checks.entries()) {
164
251
  console.log(` ${index + 1}. ${check.question}`);
165
252
  console.log(` Expected: ${check.answer ?? ""}`);
@@ -171,7 +258,7 @@ async function promptDraftTruthChecks(options) {
171
258
  const datasetConfig = {
172
259
  path: options.datasetPath,
173
260
  };
174
- resolvedDatasetPath = resolveSourceDatasetPath(options.projectPath, datasetConfig);
261
+ resolvedDatasetPath = projectSourceConfig.resolveSourceDatasetPath(options.projectPath, datasetConfig);
175
262
  }
176
263
  catch (error) {
177
264
  p.log.error(error instanceof Error ? error.message : String(error));
@@ -184,19 +271,19 @@ async function promptDraftTruthChecks(options) {
184
271
  if (!resolved.executor) {
185
272
  if (resolved.cancelled)
186
273
  return null;
187
- p.log.error(resolved.error ?? "No local agent detected for truth-check drafting.");
274
+ p.log.error(resolved.error ?? "No local agent detected for question drafting.");
188
275
  const fallback = await p.select({
189
276
  message: "How do you want to continue?",
190
277
  options: [
191
278
  {
192
279
  value: "manual",
193
- label: "Add truth checks manually",
280
+ label: "Add questions manually",
194
281
  hint: "Write the questions and expected answers yourself",
195
282
  },
196
283
  {
197
284
  value: "skip",
198
285
  label: "Skip for now",
199
- hint: "Save this dataset without truth checks",
286
+ hint: "Save this dataset without questions",
200
287
  },
201
288
  ],
202
289
  });
@@ -205,7 +292,7 @@ async function promptDraftTruthChecks(options) {
205
292
  return fallback === "manual" ? "manual" : [];
206
293
  }
207
294
  while (true) {
208
- p.log.info("Drafting truth checks from the dataset files.");
295
+ p.log.info("Drafting questions from the source files.");
209
296
  const drafted = await draftTruthChecks({
210
297
  datasetName: options.datasetName,
211
298
  datasetPath: resolvedDatasetPath,
@@ -214,24 +301,24 @@ async function promptDraftTruthChecks(options) {
214
301
  targetCount: 4,
215
302
  });
216
303
  if (!drafted.checks) {
217
- p.log.error(drafted.error ?? "Could not draft truth checks from this dataset.");
304
+ p.log.error(drafted.error ?? "Could not draft questions from this source folder.");
218
305
  const retryMode = await p.select({
219
306
  message: "How do you want to continue?",
220
307
  options: [
221
308
  {
222
309
  value: "retry",
223
310
  label: "Try auto-create again",
224
- hint: "Run the same local agent again on the dataset folder",
311
+ hint: "Run the same local agent again on the source folder",
225
312
  },
226
313
  {
227
314
  value: "manual",
228
- label: "Add truth checks manually",
229
- hint: "Write the checks yourself instead",
315
+ label: "Add questions manually",
316
+ hint: "Write the questions yourself instead",
230
317
  },
231
318
  {
232
319
  value: "skip",
233
320
  label: "Skip for now",
234
- hint: "Save this dataset without truth checks",
321
+ hint: "Save this dataset without questions",
235
322
  },
236
323
  ],
237
324
  });
@@ -243,27 +330,27 @@ async function promptDraftTruthChecks(options) {
243
330
  }
244
331
  printDraftTruthChecks(drafted.checks);
245
332
  const nextStep = await p.select({
246
- message: "Use these truth checks?",
333
+ message: "Use these questions?",
247
334
  options: [
248
335
  {
249
336
  value: "use",
250
337
  label: "Use this draft (Recommended)",
251
- hint: "Save these checks and edit them later if needed",
338
+ hint: "Save these questions and edit them later if needed",
252
339
  },
253
340
  {
254
341
  value: "retry",
255
342
  label: "Draft again",
256
- hint: "Run the same local agent again on the dataset folder",
343
+ hint: "Run the same local agent again on the source folder",
257
344
  },
258
345
  {
259
346
  value: "manual",
260
- label: "Add them manually instead",
261
- hint: "Discard this draft and write the checks yourself",
347
+ label: "Add questions manually instead",
348
+ hint: "Discard this draft and write the questions yourself",
262
349
  },
263
350
  {
264
351
  value: "skip",
265
352
  label: "Skip for now",
266
- hint: "Save this dataset without truth checks",
353
+ hint: "Save this dataset without questions",
267
354
  },
268
355
  ],
269
356
  });
@@ -283,24 +370,24 @@ async function promptCompiledChecks(options) {
283
370
  if (options.initialAbout) {
284
371
  p.log.info(`About: ${options.initialAbout}`);
285
372
  }
286
- p.log.info("Truth checks are the questions an agent should be able to answer from the data behind this task.");
373
+ p.log.info("Questions are simple question-and-answer pairs Interf uses to check accuracy later, so you can decide whether to trust the portable context.");
287
374
  const mode = await p.select({
288
- message: "How do you want to create them?",
375
+ message: "How should Interf create them?",
289
376
  options: [
290
377
  {
291
378
  value: "draft",
292
- label: "Auto-create a draft (Recommended)",
293
- hint: "Let a local agent draft a few clear, verifiable checks from this dataset",
379
+ label: "Auto-create a question draft (Recommended)",
380
+ hint: "Let your chosen local agent recommend a few clear, verifiable questions from this source folder",
294
381
  },
295
382
  {
296
383
  value: "manual",
297
- label: "Add them manually",
384
+ label: "Add questions manually",
298
385
  hint: "Write the questions and expected answers yourself",
299
386
  },
300
387
  {
301
388
  value: "skip",
302
389
  label: "Skip for now",
303
- hint: "You can save the dataset first and add checks later",
390
+ hint: "You can save the dataset first and add questions later",
304
391
  },
305
392
  ],
306
393
  });
@@ -319,7 +406,7 @@ async function promptCompiledChecks(options) {
319
406
  return null;
320
407
  if (drafted === "manual") {
321
408
  return promptCheckCases({
322
- heading: "Truth checks",
409
+ heading: "Questions",
323
410
  questionMessage: "Question 1?",
324
411
  questionPlaceholder: DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER,
325
412
  answerMessage: "Expected answer 1?",
@@ -330,7 +417,7 @@ async function promptCompiledChecks(options) {
330
417
  return drafted;
331
418
  }
332
419
  return promptCheckCases({
333
- heading: "Truth checks",
420
+ heading: "Questions",
334
421
  questionMessage: "Question 1?",
335
422
  questionPlaceholder: DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER,
336
423
  answerMessage: "Expected answer 1?",
@@ -341,34 +428,34 @@ async function promptCompiledChecks(options) {
341
428
  if (options.initialAbout) {
342
429
  p.log.info(`About: ${options.initialAbout}`);
343
430
  }
344
- p.log.info(`Current truth checks: ${options.initialChecks.length}`);
431
+ p.log.info(`Current questions: ${options.initialChecks.length}`);
345
432
  const mode = await p.select({
346
433
  message: "What do you want to do with them?",
347
434
  options: [
348
435
  {
349
436
  value: "keep",
350
437
  label: "Keep them",
351
- hint: "Leave the current truth checks as-is",
438
+ hint: "Leave the current questions as-is",
352
439
  },
353
440
  {
354
441
  value: "add",
355
442
  label: "Add more",
356
- hint: "Append more truth checks",
443
+ hint: "Append more questions",
357
444
  },
358
445
  {
359
446
  value: "replace",
360
447
  label: "Replace all",
361
- hint: "Rewrite the truth checks from scratch",
448
+ hint: "Rewrite the questions from scratch",
362
449
  },
363
450
  {
364
451
  value: "redraft",
365
452
  label: "Replace with auto-created draft",
366
- hint: "Let a local agent rewrite the checks from the dataset files",
453
+ hint: "Let a local agent rewrite the questions from the dataset files",
367
454
  },
368
455
  {
369
456
  value: "clear",
370
457
  label: "Clear them for now",
371
- hint: "Keep this dataset without saved truth checks",
458
+ hint: "Keep this setup without questions",
372
459
  },
373
460
  ],
374
461
  });
@@ -391,7 +478,7 @@ async function promptCompiledChecks(options) {
391
478
  return null;
392
479
  if (drafted === "manual") {
393
480
  return promptCheckCases({
394
- heading: "Replace truth checks",
481
+ heading: "Replace questions",
395
482
  questionMessage: "Question 1?",
396
483
  questionPlaceholder: DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER,
397
484
  answerMessage: "Expected answer 1?",
@@ -402,7 +489,7 @@ async function promptCompiledChecks(options) {
402
489
  return drafted;
403
490
  }
404
491
  const nextChecks = await promptCheckCases({
405
- heading: mode === "add" ? "Add more truth checks" : "Replace truth checks",
492
+ heading: mode === "add" ? "Add more questions" : "Replace questions",
406
493
  questionMessage: mode === "add"
407
494
  ? `Question ${options.initialChecks.length + 1}?`
408
495
  : "Question 1?",
@@ -433,7 +520,8 @@ async function promptSelfImprovingLoops(options) {
433
520
  });
434
521
  if (p.isCancel(maxLoops))
435
522
  return null;
436
- return compiledMaxLoops(Number.parseInt(String(maxLoops).trim(), 10)) ?? DEFAULT_SELF_IMPROVING_LOOPS;
523
+ return projectSourceConfig.compiledMaxLoops(Number.parseInt(String(maxLoops).trim(), 10))
524
+ ?? DEFAULT_SELF_IMPROVING_LOOPS;
437
525
  }
438
526
  export async function promptCompileLoopSelection(options) {
439
527
  if (!options.hasChecks) {
@@ -456,7 +544,7 @@ export async function promptCompileLoopSelection(options) {
456
544
  once: {
457
545
  value: "once",
458
546
  label: "Compile once",
459
- hint: "Build the compiled dataset once with the selected workflow",
547
+ hint: "Build portable context once with the selected workflow",
460
548
  },
461
549
  "self-improving": {
462
550
  value: "self-improving",
@@ -468,7 +556,7 @@ export async function promptCompileLoopSelection(options) {
468
556
  retry: {
469
557
  value: "retry",
470
558
  label: "Retry same workflow",
471
- hint: `Retry compile and compiled-side truth checks up to ${options.initialMaxAttempts ?? DEFAULT_COMPILE_RETRY_ATTEMPTS} total time${(options.initialMaxAttempts ?? DEFAULT_COMPILE_RETRY_ATTEMPTS) === 1 ? "" : "s"} without editing the workflow`,
559
+ hint: `Retry compile and portable-context checks up to ${options.initialMaxAttempts ?? DEFAULT_COMPILE_RETRY_ATTEMPTS} total time${(options.initialMaxAttempts ?? DEFAULT_COMPILE_RETRY_ATTEMPTS) === 1 ? "" : "s"} without editing the workflow`,
472
560
  },
473
561
  };
474
562
  const orderedModes = (hasSavedPolicy
@@ -485,7 +573,7 @@ export async function promptCompileLoopSelection(options) {
485
573
  ]).filter((mode, index, list) => list.indexOf(mode) === index)
486
574
  .filter((mode) => includeCompileOnce || mode !== "once");
487
575
  const selectedMode = await p.select({
488
- message: options.message ?? "How should this dataset compile?",
576
+ message: options.message ?? "How should this compile run work?",
489
577
  options: orderedModes.map((mode) => optionsByMode[mode]),
490
578
  });
491
579
  if (p.isCancel(selectedMode))
@@ -519,64 +607,50 @@ export async function promptSingleCompiledConfig(options = {}) {
519
607
  const initial = options.initial;
520
608
  const introStyle = options.introStyle ?? "first";
521
609
  if (introStyle === "first") {
522
- p.log.info("Pick the dataset folder you want to measure.");
523
- p.log.info("Then say what task this dataset should help with and save a few truth checks you can verify.");
610
+ p.log.info("Pick the source folder for this work.");
611
+ p.log.info("Then say what work this source folder should help with and review the recommended questions.");
524
612
  }
525
613
  else if (introStyle === "additional") {
526
- p.log.info("Add another dataset only if this project needs a separate folder or set of truth checks.");
614
+ p.log.info("Add another setup only if this project needs a separate folder or set of questions.");
527
615
  }
528
616
  const fixedName = options.fixedName ? slugify(String(options.fixedName)) : undefined;
529
617
  if (options.fixedName && !fixedName) {
530
- p.log.error("Current dataset id needs letters, numbers, or dashes.");
618
+ p.log.error("Current dataset name needs letters, numbers, or dashes.");
531
619
  return null;
532
620
  }
533
- let name = fixedName ?? (options.skipNamePrompt ? slugify(String(initial?.name ?? DEFAULT_COMPILED_NAME)) : undefined);
534
- if (name) {
535
- if (options.fixedName) {
536
- p.log.info(`Editing truth checks for dataset "${name}".`);
537
- }
621
+ let name = fixedName;
622
+ if (name && options.fixedName) {
623
+ p.log.info(`Editing questions for dataset "${name}".`);
538
624
  }
539
- else {
540
- const suggestedName = initial?.name ?? slugify(String(initial?.about ?? "")) ?? DEFAULT_COMPILED_NAME;
625
+ let about = normalizeOptionalPromptText(initial?.about);
626
+ const projectPath = options.projectPath ?? process.cwd();
627
+ const defaultNameSeed = slugify(String(initial?.name ?? DEFAULT_COMPILED_NAME)) || DEFAULT_COMPILED_NAME;
628
+ const defaultDatasetPath = initial?.path ?? defaultDatasetPathForPrompt(defaultNameSeed, introStyle, projectPath);
629
+ const normalizedDatasetPath = await promptDatasetFolderPath({
630
+ projectPath,
631
+ initialPath: defaultDatasetPath,
632
+ });
633
+ if (!normalizedDatasetPath)
634
+ return null;
635
+ if (!name) {
636
+ const suggestedName = defaultDatasetNameForPath(normalizedDatasetPath);
541
637
  const rawName = await p.text({
542
- message: "Dataset id?",
638
+ message: "Dataset name?",
543
639
  placeholder: suggestedName,
544
640
  initialValue: suggestedName,
545
- validate: (value) => (value.trim().length === 0 ? "Name is required" : undefined),
641
+ validate: (value) => (value.trim().length === 0 ? "Dataset name is required" : undefined),
546
642
  });
547
643
  if (p.isCancel(rawName))
548
644
  return null;
549
645
  name = slugify(String(rawName));
550
646
  if (!name) {
551
- p.log.error("Dataset id needs letters, numbers, or dashes.");
647
+ p.log.error("Dataset name needs letters, numbers, or dashes.");
552
648
  return null;
553
649
  }
554
650
  if (name !== rawName) {
555
- p.log.info(`Dataset id: ${name}`);
651
+ p.log.info(`Dataset name: ${name}`);
556
652
  }
557
653
  }
558
- let about = normalizeOptionalPromptText(initial?.about);
559
- const defaultDatasetPath = initial?.path ?? defaultDatasetPathForPrompt(name, introStyle, options.projectPath ?? process.cwd());
560
- const datasetPath = await p.text({
561
- message: "Dataset folder?",
562
- placeholder: DEFAULT_DATASET_PATH_PLACEHOLDER,
563
- initialValue: defaultDatasetPath,
564
- validate: (value) => {
565
- const normalized = value.trim();
566
- if (normalized.length === 0)
567
- return "Dataset folder is required";
568
- try {
569
- resolveSourceDatasetPath(options.projectPath ?? process.cwd(), { path: normalized });
570
- return undefined;
571
- }
572
- catch (error) {
573
- return error instanceof Error ? error.message : String(error);
574
- }
575
- },
576
- });
577
- if (p.isCancel(datasetPath))
578
- return null;
579
- const normalizedDatasetPath = String(datasetPath).trim();
580
654
  if (options.selectedWorkflowLabel) {
581
655
  p.log.info(`Workflow: ${options.selectedWorkflowLabel}`);
582
656
  }
@@ -610,7 +684,7 @@ export async function promptSingleCompiledConfig(options = {}) {
610
684
  hasChecks: checks.length > 0,
611
685
  intro: [
612
686
  "Compile mode",
613
- "Choose whether this dataset should compile once, retry the same workflow, or try self-improving workflow variations on the same truth checks.",
687
+ "Choose whether Interf should compile once, retry the same workflow, or try self-improving workflow variations on the same questions.",
614
688
  ],
615
689
  });
616
690
  if (compileLoopSelection === null)
@@ -1,8 +1,9 @@
1
1
  import chalk from "chalk";
2
2
  import * as p from "@clack/prompts";
3
- import { detectInterf, listCompiledDatasetsForSourceFolder, readInterfConfig, resolveSourceControlPath, } from "../lib/interf.js";
4
- import { computeCompiledHealth } from "../lib/state.js";
5
- import { readSavedTestComparison, printSavedTestComparisonState } from "./test-flow.js";
3
+ import { detectInterf, listCompiledDatasetsForSourceFolder, readInterfConfig, resolveSourceControlPath, } from "../../packages/project-model/interf.js";
4
+ import { computeCompiledHealth } from "../../packages/compiler/state.js";
5
+ import { sourceDatasetConfigFromInterfConfig, loadCompiledDatasetConfig, } from "../../packages/project-model/source-config.js";
6
+ import { printSavedTestComparisonState, readCurrentSavedTestComparison } from "./test-flow.js";
6
7
  function statusColor(status) {
7
8
  switch (status) {
8
9
  case "compiled":
@@ -17,7 +18,7 @@ function statusColor(status) {
17
18
  }
18
19
  export const statusCommand = {
19
20
  command: "status",
20
- describe: "Show deterministic health for a compiled dataset",
21
+ describe: "Show deterministic health for portable context",
21
22
  handler: async () => {
22
23
  let compiledPath = null;
23
24
  const detected = detectInterf(process.cwd());
@@ -32,8 +33,8 @@ export const statusCommand = {
32
33
  }));
33
34
  if (local.length === 0) {
34
35
  process.exitCode = 1;
35
- console.log(chalk.red(" No compiled datasets found."));
36
- console.log(chalk.dim(" Run `interf`, save truth checks, and compile a dataset first."));
36
+ console.log(chalk.red(" No portable contexts found."));
37
+ console.log(chalk.dim(" Run `interf`, save questions, and compile portable context first."));
37
38
  return;
38
39
  }
39
40
  if (local.length === 1) {
@@ -41,7 +42,7 @@ export const statusCommand = {
41
42
  }
42
43
  else {
43
44
  const selected = await p.select({
44
- message: "Which dataset?",
45
+ message: "Which setup?",
45
46
  options: local.map((entry) => ({ value: entry.path, label: entry.name })),
46
47
  });
47
48
  if (p.isCancel(selected))
@@ -58,15 +59,23 @@ export const statusCommand = {
58
59
  console.log(chalk.dim(` ${health.summary}`));
59
60
  const compiledConfig = readInterfConfig(compiledPath);
60
61
  const sourcePath = resolveSourceControlPath(compiledPath);
61
- const latestComparison = compiledConfig
62
- ? readSavedTestComparison(sourcePath, compiledConfig.name)
63
- : null;
62
+ const latestComparisonState = compiledConfig
63
+ ? readCurrentSavedTestComparison({
64
+ projectPath: sourcePath,
65
+ datasetName: compiledConfig.name,
66
+ checks: (loadCompiledDatasetConfig(compiledPath)
67
+ ?? sourceDatasetConfigFromInterfConfig(compiledConfig)).checks,
68
+ })
69
+ : { comparison: null, stale: false };
70
+ const latestComparison = latestComparisonState.comparison;
64
71
  if (latestComparison) {
65
72
  printSavedTestComparisonState(latestComparison);
66
73
  }
67
74
  else {
68
75
  console.log();
69
- console.log(chalk.dim(" No saved test result yet. Run `interf test` to measure files as-is and the compiled dataset."));
76
+ console.log(chalk.dim(latestComparisonState.stale
77
+ ? " Saved test results are stale for the current questions. Run `interf test` again."
78
+ : " No saved comparison yet. Run `interf test` to measure source files and the portable context."));
70
79
  }
71
80
  console.log();
72
81
  const metricOrder = [
@@ -1,7 +1,8 @@
1
- import { type TestTargetCandidate, type TestTargetResult } from "../lib/test.js";
2
- import type { WorkflowExecutionProfile, WorkflowExecutor } from "../lib/executors.js";
3
- import type { TestSandboxRetentionMode } from "../lib/test-sandbox.js";
4
- import type { SourceDatasetConfig, TestRunComparison, TestRunMode } from "../lib/schema.js";
1
+ import { type TestTargetCandidate, type TestTargetResult } from "../../packages/testing/test.js";
2
+ import type { WorkflowExecutionProfile, WorkflowExecutor } from "../../packages/agents/lib/executors.js";
3
+ import type { TestSandboxRetentionMode } from "../../packages/testing/test-sandbox.js";
4
+ import type { SourceDatasetConfig } from "../../packages/project-model/lib/schema.js";
5
+ import type { TestRunComparison, TestRunMode } from "../../packages/testing/lib/schema.js";
5
6
  export interface SavedTestOutcome {
6
7
  runPath: string;
7
8
  displayRunPath?: string;
@@ -15,6 +16,14 @@ export interface AgentTestMatrixRow {
15
16
  }
16
17
  export declare function questionPassRate(outcome: SavedTestOutcome): number;
17
18
  export declare function readSavedTestComparison(projectPath: string, datasetName: string): TestRunComparison | null;
19
+ export declare function readCurrentSavedTestComparison(options: {
20
+ projectPath: string;
21
+ datasetName: string;
22
+ checks: SourceDatasetConfig["checks"];
23
+ }): {
24
+ comparison: TestRunComparison | null;
25
+ stale: boolean;
26
+ };
18
27
  export declare function printSavedTestComparisonState(payload: TestRunComparison, comparisonRunPath?: string | null): void;
19
28
  export declare function printAgentTestMatrix(rows: AgentTestMatrixRow[]): void;
20
29
  export declare function printAgentTestFailures(rows: AgentTestMatrixRow[]): void;