@interf/compiler 0.6.1 → 0.6.3

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 (341) hide show
  1. package/README.md +94 -74
  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 +12 -12
  11. package/dist/{commands → cli/commands}/compile-controller.d.ts +3 -3
  12. package/dist/{commands → cli/commands}/compile-controller.js +36 -34
  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 +61 -34
  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 +157 -72
  28. package/dist/{commands → cli/commands}/list.js +5 -5
  29. package/dist/{commands → cli/commands}/reset.js +4 -4
  30. package/dist/{commands → cli/commands}/source-config-wizard.d.ts +8 -3
  31. package/dist/{commands → cli/commands}/source-config-wizard.js +161 -87
  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 +30 -26
  35. package/dist/cli/commands/test.d.ts +14 -0
  36. package/dist/{commands → cli/commands}/test.js +39 -23
  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/compiled-compile.d.ts +1 -48
  67. package/dist/lib/compiled-compile.js +1 -255
  68. package/dist/lib/compiled-paths.d.ts +1 -40
  69. package/dist/lib/compiled-paths.js +3 -106
  70. package/dist/lib/compiled-raw.d.ts +1 -49
  71. package/dist/lib/compiled-raw.js +3 -102
  72. package/dist/lib/compiled-reset.d.ts +1 -2
  73. package/dist/lib/compiled-reset.js +3 -72
  74. package/dist/lib/compiled-schema.d.ts +1 -31
  75. package/dist/lib/compiled-schema.js +1 -141
  76. package/dist/lib/execution-profile.d.ts +1 -17
  77. package/dist/lib/execution-profile.js +1 -84
  78. package/dist/lib/executors.d.ts +1 -32
  79. package/dist/lib/executors.js +1 -43
  80. package/dist/lib/interf-bootstrap.d.ts +1 -3
  81. package/dist/lib/interf-bootstrap.js +3 -18
  82. package/dist/lib/interf-detect.d.ts +1 -33
  83. package/dist/lib/interf-detect.js +3 -176
  84. package/dist/lib/interf-scaffold.d.ts +1 -2
  85. package/dist/lib/interf-scaffold.js +3 -114
  86. package/dist/lib/interf-workflow-package.d.ts +1 -25
  87. package/dist/lib/interf-workflow-package.js +1 -342
  88. package/dist/lib/interf.d.ts +1 -5
  89. package/dist/lib/interf.js +3 -4
  90. package/dist/lib/local-workflows.d.ts +1 -54
  91. package/dist/lib/local-workflows.js +1 -422
  92. package/dist/lib/package-root.d.ts +1 -0
  93. package/dist/lib/package-root.js +1 -0
  94. package/dist/lib/project-paths.d.ts +1 -11
  95. package/dist/lib/project-paths.js +3 -32
  96. package/dist/lib/runtime-acceptance.d.ts +1 -9
  97. package/dist/lib/runtime-acceptance.js +1 -269
  98. package/dist/lib/runtime-contracts.d.ts +1 -2
  99. package/dist/lib/runtime-contracts.js +1 -48
  100. package/dist/lib/runtime-inventory.d.ts +1 -7
  101. package/dist/lib/runtime-inventory.js +1 -29
  102. package/dist/lib/runtime-paths.d.ts +1 -8
  103. package/dist/lib/runtime-paths.js +1 -26
  104. package/dist/lib/runtime-prompt.d.ts +1 -2
  105. package/dist/lib/runtime-prompt.js +1 -48
  106. package/dist/lib/runtime-reconcile.d.ts +1 -2
  107. package/dist/lib/runtime-reconcile.js +1 -193
  108. package/dist/lib/runtime-runs.d.ts +1 -11
  109. package/dist/lib/runtime-runs.js +1 -262
  110. package/dist/lib/runtime-types.d.ts +1 -43
  111. package/dist/lib/runtime-types.js +1 -1
  112. package/dist/lib/runtime.d.ts +1 -6
  113. package/dist/lib/runtime.js +1 -5
  114. package/dist/lib/schema.d.ts +4 -1073
  115. package/dist/lib/schema.js +6 -542
  116. package/dist/lib/source-config.d.ts +1 -39
  117. package/dist/lib/source-config.js +3 -293
  118. package/dist/lib/state-artifacts.d.ts +1 -8
  119. package/dist/lib/state-artifacts.js +1 -13
  120. package/dist/lib/state-health.d.ts +1 -4
  121. package/dist/lib/state-health.js +1 -132
  122. package/dist/lib/state-io.d.ts +1 -10
  123. package/dist/lib/state-io.js +1 -76
  124. package/dist/lib/state-paths.d.ts +1 -4
  125. package/dist/lib/state-paths.js +1 -13
  126. package/dist/lib/state-view.d.ts +1 -4
  127. package/dist/lib/state-view.js +1 -103
  128. package/dist/lib/state.d.ts +1 -7
  129. package/dist/lib/state.js +1 -12
  130. package/dist/lib/test-execution.d.ts +1 -14
  131. package/dist/lib/test-execution.js +3 -525
  132. package/dist/lib/test-matrices.d.ts +1 -90
  133. package/dist/lib/test-matrices.js +3 -96
  134. package/dist/lib/test-paths.d.ts +1 -12
  135. package/dist/lib/test-paths.js +3 -59
  136. package/dist/lib/test-profile-presets.d.ts +1 -57
  137. package/dist/lib/test-profile-presets.js +3 -50
  138. package/dist/lib/test-sandbox.d.ts +1 -11
  139. package/dist/lib/test-sandbox.js +3 -105
  140. package/dist/lib/test-specs.d.ts +1 -7
  141. package/dist/lib/test-specs.js +3 -114
  142. package/dist/lib/test-targets.d.ts +1 -5
  143. package/dist/lib/test-targets.js +3 -38
  144. package/dist/lib/test-types.d.ts +1 -17
  145. package/dist/lib/test-types.js +3 -1
  146. package/dist/lib/test.d.ts +1 -4
  147. package/dist/lib/test.js +3 -3
  148. package/dist/lib/validate-compiled.d.ts +1 -27
  149. package/dist/lib/validate-compiled.js +1 -241
  150. package/dist/lib/validate-helpers.d.ts +1 -12
  151. package/dist/lib/validate-helpers.js +1 -41
  152. package/dist/lib/validate.d.ts +1 -21
  153. package/dist/lib/validate.js +1 -249
  154. package/dist/lib/workflow-authoring.d.ts +1 -26
  155. package/dist/lib/workflow-authoring.js +1 -119
  156. package/dist/lib/workflow-definitions.d.ts +1 -78
  157. package/dist/lib/workflow-definitions.js +1 -203
  158. package/dist/lib/workflow-edit-session.d.ts +1 -16
  159. package/dist/lib/workflow-edit-session.js +1 -57
  160. package/dist/lib/workflow-edit-utils.d.ts +1 -10
  161. package/dist/lib/workflow-edit-utils.js +1 -39
  162. package/dist/lib/workflow-helpers.d.ts +1 -38
  163. package/dist/lib/workflow-helpers.js +1 -167
  164. package/dist/lib/workflow-improvement.d.ts +1 -22
  165. package/dist/lib/workflow-improvement.js +1 -209
  166. package/dist/lib/workflow-primitives.d.ts +1 -2
  167. package/dist/lib/workflow-primitives.js +1 -5
  168. package/dist/lib/workflow-review-paths.d.ts +1 -10
  169. package/dist/lib/workflow-review-paths.js +1 -27
  170. package/dist/lib/workflow-stage-policy.d.ts +1 -5
  171. package/dist/lib/workflow-stage-policy.js +1 -31
  172. package/dist/lib/workflow-stage-runner.d.ts +1 -41
  173. package/dist/lib/workflow-stage-runner.js +1 -109
  174. package/dist/lib/workflows.d.ts +1 -15
  175. package/dist/lib/workflows.js +1 -31
  176. package/dist/packages/agents/index.d.ts +17 -0
  177. package/dist/packages/agents/index.js +15 -0
  178. package/dist/packages/agents/lib/agents.d.ts +6 -0
  179. package/dist/packages/agents/lib/agents.js +5 -0
  180. package/dist/packages/agents/lib/args.d.ts +4 -0
  181. package/dist/packages/agents/lib/args.js +52 -0
  182. package/dist/packages/agents/lib/constants.d.ts +5 -0
  183. package/dist/packages/agents/lib/constants.js +28 -0
  184. package/dist/packages/agents/lib/detection.d.ts +7 -0
  185. package/dist/packages/agents/lib/detection.js +65 -0
  186. package/dist/packages/agents/lib/execution-profile.d.ts +17 -0
  187. package/dist/packages/agents/lib/execution-profile.js +84 -0
  188. package/dist/packages/agents/lib/execution.d.ts +2 -0
  189. package/dist/packages/agents/lib/execution.js +243 -0
  190. package/dist/packages/agents/lib/executors.d.ts +32 -0
  191. package/dist/packages/agents/lib/executors.js +45 -0
  192. package/dist/packages/agents/lib/logs.d.ts +2 -0
  193. package/dist/packages/agents/lib/logs.js +17 -0
  194. package/dist/packages/agents/lib/preflight.d.ts +7 -0
  195. package/dist/packages/agents/lib/preflight.js +77 -0
  196. package/dist/packages/agents/lib/render.d.ts +8 -0
  197. package/dist/packages/agents/lib/render.js +218 -0
  198. package/dist/packages/agents/lib/schema.d.ts +8 -0
  199. package/dist/packages/agents/lib/schema.js +7 -0
  200. package/dist/packages/agents/lib/shells.d.ts +69 -0
  201. package/dist/packages/agents/lib/shells.js +1021 -0
  202. package/dist/packages/agents/lib/status.d.ts +3 -0
  203. package/dist/packages/agents/lib/status.js +58 -0
  204. package/dist/packages/agents/lib/types.d.ts +30 -0
  205. package/dist/packages/agents/lib/types.js +1 -0
  206. package/dist/{lib → packages/agents/lib}/user-config.d.ts +1 -0
  207. package/dist/{lib → packages/agents/lib}/user-config.js +3 -2
  208. package/dist/packages/compiler/compiled-compile.d.ts +48 -0
  209. package/dist/packages/compiler/compiled-compile.js +256 -0
  210. package/dist/packages/compiler/compiled-schema.d.ts +31 -0
  211. package/dist/packages/compiler/compiled-schema.js +141 -0
  212. package/dist/packages/compiler/index.d.ts +24 -0
  213. package/dist/packages/compiler/index.js +23 -0
  214. package/dist/packages/compiler/lib/schema.d.ts +684 -0
  215. package/dist/packages/compiler/lib/schema.js +361 -0
  216. package/dist/packages/compiler/runtime-acceptance.d.ts +9 -0
  217. package/dist/packages/compiler/runtime-acceptance.js +269 -0
  218. package/dist/packages/compiler/runtime-contracts.d.ts +2 -0
  219. package/dist/packages/compiler/runtime-contracts.js +48 -0
  220. package/dist/packages/compiler/runtime-inventory.d.ts +7 -0
  221. package/dist/packages/compiler/runtime-inventory.js +29 -0
  222. package/dist/packages/compiler/runtime-paths.d.ts +8 -0
  223. package/dist/packages/compiler/runtime-paths.js +26 -0
  224. package/dist/packages/compiler/runtime-prompt.d.ts +2 -0
  225. package/dist/packages/compiler/runtime-prompt.js +48 -0
  226. package/dist/packages/compiler/runtime-reconcile.d.ts +2 -0
  227. package/dist/packages/compiler/runtime-reconcile.js +193 -0
  228. package/dist/packages/compiler/runtime-runs.d.ts +11 -0
  229. package/dist/packages/compiler/runtime-runs.js +262 -0
  230. package/dist/packages/compiler/runtime-types.d.ts +43 -0
  231. package/dist/packages/compiler/runtime-types.js +1 -0
  232. package/dist/packages/compiler/runtime.d.ts +6 -0
  233. package/dist/packages/compiler/runtime.js +5 -0
  234. package/dist/packages/compiler/state-artifacts.d.ts +8 -0
  235. package/dist/packages/compiler/state-artifacts.js +13 -0
  236. package/dist/packages/compiler/state-health.d.ts +4 -0
  237. package/dist/packages/compiler/state-health.js +132 -0
  238. package/dist/packages/compiler/state-io.d.ts +10 -0
  239. package/dist/packages/compiler/state-io.js +76 -0
  240. package/dist/packages/compiler/state-paths.d.ts +4 -0
  241. package/dist/packages/compiler/state-paths.js +13 -0
  242. package/dist/packages/compiler/state-view.d.ts +4 -0
  243. package/dist/packages/compiler/state-view.js +103 -0
  244. package/dist/packages/compiler/state.d.ts +7 -0
  245. package/dist/packages/compiler/state.js +12 -0
  246. package/dist/packages/compiler/validate-compiled.d.ts +27 -0
  247. package/dist/packages/compiler/validate-compiled.js +241 -0
  248. package/dist/packages/compiler/validate-helpers.d.ts +12 -0
  249. package/dist/packages/compiler/validate-helpers.js +41 -0
  250. package/dist/packages/compiler/validate.d.ts +21 -0
  251. package/dist/packages/compiler/validate.js +249 -0
  252. package/dist/packages/compiler/workflow-primitives.d.ts +2 -0
  253. package/dist/packages/compiler/workflow-primitives.js +5 -0
  254. package/dist/packages/compiler/workflows.d.ts +15 -0
  255. package/dist/packages/compiler/workflows.js +31 -0
  256. package/dist/packages/project-model/compiled-paths.d.ts +40 -0
  257. package/dist/packages/project-model/compiled-paths.js +106 -0
  258. package/dist/packages/project-model/compiled-raw.d.ts +49 -0
  259. package/dist/packages/project-model/compiled-raw.js +102 -0
  260. package/dist/packages/project-model/compiled-reset.d.ts +2 -0
  261. package/dist/packages/project-model/compiled-reset.js +72 -0
  262. package/dist/packages/project-model/index.d.ts +11 -0
  263. package/dist/packages/project-model/index.js +10 -0
  264. package/dist/packages/project-model/interf-bootstrap.d.ts +3 -0
  265. package/dist/packages/project-model/interf-bootstrap.js +18 -0
  266. package/dist/packages/project-model/interf-detect.d.ts +33 -0
  267. package/dist/packages/project-model/interf-detect.js +176 -0
  268. package/dist/packages/project-model/interf-scaffold.d.ts +2 -0
  269. package/dist/packages/project-model/interf-scaffold.js +124 -0
  270. package/dist/packages/project-model/interf.d.ts +5 -0
  271. package/dist/packages/project-model/interf.js +4 -0
  272. package/dist/packages/project-model/lib/schema.d.ts +125 -0
  273. package/dist/packages/project-model/lib/schema.js +62 -0
  274. package/dist/packages/project-model/project-paths.d.ts +11 -0
  275. package/dist/packages/project-model/project-paths.js +32 -0
  276. package/dist/packages/project-model/source-config.d.ts +38 -0
  277. package/dist/packages/project-model/source-config.js +297 -0
  278. package/dist/packages/testing/index.d.ts +13 -0
  279. package/dist/packages/testing/index.js +10 -0
  280. package/dist/packages/testing/lib/schema.d.ts +261 -0
  281. package/dist/packages/testing/lib/schema.js +119 -0
  282. package/dist/packages/testing/test-execution.d.ts +14 -0
  283. package/dist/packages/testing/test-execution.js +525 -0
  284. package/dist/packages/testing/test-matrices.d.ts +90 -0
  285. package/dist/packages/testing/test-matrices.js +96 -0
  286. package/dist/packages/testing/test-paths.d.ts +12 -0
  287. package/dist/packages/testing/test-paths.js +59 -0
  288. package/dist/packages/testing/test-profile-presets.d.ts +57 -0
  289. package/dist/packages/testing/test-profile-presets.js +50 -0
  290. package/dist/packages/testing/test-sandbox.d.ts +11 -0
  291. package/dist/packages/testing/test-sandbox.js +105 -0
  292. package/dist/packages/testing/test-specs.d.ts +7 -0
  293. package/dist/packages/testing/test-specs.js +114 -0
  294. package/dist/packages/testing/test-targets.d.ts +5 -0
  295. package/dist/packages/testing/test-targets.js +38 -0
  296. package/dist/packages/testing/test-types.d.ts +16 -0
  297. package/dist/packages/testing/test-types.js +1 -0
  298. package/dist/packages/testing/test.d.ts +4 -0
  299. package/dist/packages/testing/test.js +3 -0
  300. package/dist/packages/workflow-authoring/index.d.ts +4 -0
  301. package/dist/packages/workflow-authoring/index.js +4 -0
  302. package/dist/packages/workflow-authoring/lib/workflow-edit-utils.d.ts +10 -0
  303. package/dist/packages/workflow-authoring/lib/workflow-edit-utils.js +39 -0
  304. package/dist/packages/workflow-authoring/workflow-authoring.d.ts +26 -0
  305. package/dist/packages/workflow-authoring/workflow-authoring.js +120 -0
  306. package/dist/packages/workflow-authoring/workflow-edit-session.d.ts +16 -0
  307. package/dist/packages/workflow-authoring/workflow-edit-session.js +57 -0
  308. package/dist/packages/workflow-authoring/workflow-improvement.d.ts +23 -0
  309. package/dist/packages/workflow-authoring/workflow-improvement.js +209 -0
  310. package/dist/packages/workflow-package/builtin-compiled-workflow.d.ts +38 -0
  311. package/dist/packages/workflow-package/builtin-compiled-workflow.js +94 -0
  312. package/dist/packages/workflow-package/index.d.ts +9 -0
  313. package/dist/packages/workflow-package/index.js +9 -0
  314. package/dist/packages/workflow-package/interf-workflow-package.d.ts +25 -0
  315. package/dist/packages/workflow-package/interf-workflow-package.js +342 -0
  316. package/dist/{lib/config.d.ts → packages/workflow-package/lib/package-root.d.ts} +0 -1
  317. package/dist/packages/workflow-package/lib/package-root.js +6 -0
  318. package/dist/packages/workflow-package/local-workflows.d.ts +54 -0
  319. package/dist/packages/workflow-package/local-workflows.js +422 -0
  320. package/dist/packages/workflow-package/workflow-definitions.d.ts +78 -0
  321. package/dist/packages/workflow-package/workflow-definitions.js +203 -0
  322. package/dist/packages/workflow-package/workflow-helpers.d.ts +38 -0
  323. package/dist/packages/workflow-package/workflow-helpers.js +167 -0
  324. package/dist/packages/workflow-package/workflow-review-paths.d.ts +10 -0
  325. package/dist/packages/workflow-package/workflow-review-paths.js +27 -0
  326. package/dist/packages/workflow-package/workflow-stage-policy.d.ts +5 -0
  327. package/dist/packages/workflow-package/workflow-stage-policy.js +31 -0
  328. package/dist/packages/workflow-package/workflow-stage-runner.d.ts +41 -0
  329. package/dist/packages/workflow-package/workflow-stage-runner.js +109 -0
  330. package/package.json +43 -19
  331. package/dist/commands/test.d.ts +0 -3
  332. package/dist/lib/compiled-home.d.ts +0 -5
  333. package/dist/lib/compiled-home.js +0 -32
  334. package/dist/lib/config.js +0 -9
  335. /package/dist/{commands → cli/commands}/dataset-selection.js +0 -0
  336. /package/dist/{commands → cli/commands}/default.d.ts +0 -0
  337. /package/dist/{commands → cli/commands}/doctor.d.ts +0 -0
  338. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  339. /package/dist/{commands → cli/commands}/reset.d.ts +0 -0
  340. /package/dist/{commands → cli/commands}/status.d.ts +0 -0
  341. /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 checks yet";
29
+ return `${count} check${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,57 +44,62 @@ 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 ? "Compiled context is available." : "Compiled 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: files-as-is ${options.latestComparison.raw.passed_cases}/${options.latestComparison.raw.total_cases}, compiled 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 files-as-is 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 compiled-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 checks.");
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 files-as-is and compiled context (Recommended)"
58
74
  : hasSavedRawBaseline
59
75
  ? "Rerun the files-as-is baseline"
60
76
  : "Measure the files-as-is baseline (Recommended)",
61
77
  hint: built
62
- ? "See whether preparation helps on the saved checks"
78
+ ? "See whether the compiled context helps on the checks"
63
79
  : hasSavedRawBaseline
64
80
  ? "Refresh the saved raw baseline on the current checks"
65
- : "See whether the raw dataset is already good enough before compiling",
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 the compiled context" : "Build the compiled 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 the compiled context for a side-by-side comparison with the latest saved raw run"
92
+ : hasSavedRawBaseline
93
+ ? "Some checks still fail on the source files. Build a context folder and compare it on the same checks"
94
+ : "Build a context folder and compare it on the same checks"
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",
102
+ label: "Edit checks and settings",
85
103
  hint: "Update checks, focus, workflow, or compile mode",
86
104
  }, {
87
105
  value: "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 checks 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 files-as-is run: ${latestComparison.raw.passed_cases}/${latestComparison.raw.total_cases}. Rerun the baseline if you want current numbers for a different agent set, or build the context folder if you want a side-by-side comparison.`
130
+ : `Latest files-as-is run: ${latestComparison.raw.passed_cases}/${latestComparison.raw.total_cases}. Some checks still fail on the source files. Build the context folder if you want Interf to prepare the task context and compare it on the same checks.`);
115
131
  return;
116
132
  }
117
133
  p.log.info("Recommended first step: measure the files-as-is 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 files-as-is baseline and the compiled 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(`Files-as-is passed on all ${subject} in this run.`);
143
+ }
144
+ else if (status === "mixed") {
145
+ p.log.info(`Files-as-is was mixed across the ${subject} in this run.`);
146
+ }
147
+ else if (status === "fail") {
148
+ p.log.info(`Files-as-is 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 the compiled context (Recommended)"
158
+ : "Build the compiled context",
159
+ hint: compileRecommended
160
+ ? status === "mixed"
161
+ ? "Some selected agents still failed on the raw files. Build the compiled context and compare it on the same checks"
162
+ : "Build a compiled context and compare it on the same checks"
163
+ : "Build a compiled context and compare it on the same checks",
164
+ },
165
+ {
166
+ value: "edit",
167
+ label: "Change checks and settings",
168
+ hint: "Revise the checks or setup settings before the next run",
169
+ },
170
+ {
171
+ value: "rerun",
172
+ label: "Rerun the files-as-is baseline",
173
+ hint: "Run the same checks 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 checks yet.`));
352
+ console.log(chalk.dim(" Run `interf`, edit this setup, and add a few checks 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 tested the compiled context on the checks.");
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 tested the compiled 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 files-as-is versus compiled-context comparison now?"
434
+ : builtCompiledPath
435
+ ? "Run files-as-is and the compiled context on the checks now?"
436
+ : "Compare files-as-is and the compiled context on the checks 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 task context for your agents from the source folder you choose. Start with the task and a few checks, test the source files first, and compile a context folder when the current context is not good enough.");
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,26 +1,26 @@
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 checks."));
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
25
  console.log(chalk.dim(` checks: ${dataset.config.checks.length}`));
26
26
  }
@@ -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/project-model/compiled-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,6 +1,6 @@
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
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.";
6
6
  export declare const DEFAULT_DATASET_PATH_PLACEHOLDER = "./dataset1";
@@ -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>;