@interf/compiler 0.5.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 (353) hide show
  1. package/README.md +160 -201
  2. package/builtin-workflows/interf/README.md +22 -10
  3. package/builtin-workflows/interf/compile/stages/shape/SKILL.md +8 -5
  4. package/builtin-workflows/interf/compile/stages/structure/SKILL.md +3 -0
  5. package/builtin-workflows/interf/compile/stages/summarize/SKILL.md +18 -2
  6. package/builtin-workflows/interf/improve/SKILL.md +4 -4
  7. package/builtin-workflows/interf/use/query/SKILL.md +1 -1
  8. package/builtin-workflows/interf/workflow.json +19 -5
  9. package/builtin-workflows/interf/{compiled.schema.json → workflow.schema.json} +10 -3
  10. package/dist/bin.js +2 -28
  11. package/dist/{commands → cli/commands}/check-draft.d.ts +2 -2
  12. package/dist/{commands → cli/commands}/check-draft.js +13 -13
  13. package/dist/{commands → cli/commands}/compile-controller.d.ts +3 -3
  14. package/dist/{commands → cli/commands}/compile-controller.js +39 -44
  15. package/dist/cli/commands/compile.d.ts +33 -0
  16. package/dist/{commands → cli/commands}/compile.js +107 -33
  17. package/dist/{commands → cli/commands}/compiled-flow.d.ts +3 -4
  18. package/dist/{commands → cli/commands}/compiled-flow.js +9 -14
  19. package/dist/{commands → cli/commands}/create-workflow-wizard.d.ts +20 -2
  20. package/dist/cli/commands/create-workflow-wizard.js +288 -0
  21. package/dist/{commands → cli/commands}/create.d.ts +2 -2
  22. package/dist/cli/commands/create.js +166 -0
  23. package/dist/cli/commands/dataset-selection.d.ts +6 -0
  24. package/dist/cli/commands/dataset-selection.js +11 -0
  25. package/dist/{commands → cli/commands}/default.js +5 -5
  26. package/dist/{commands → cli/commands}/doctor.js +12 -13
  27. package/dist/{commands → cli/commands}/executor-flow.d.ts +2 -2
  28. package/dist/{commands → cli/commands}/executor-flow.js +17 -17
  29. package/dist/cli/commands/init.d.ts +11 -0
  30. package/dist/{commands → cli/commands}/init.js +202 -109
  31. package/dist/{commands → cli/commands}/list.js +9 -6
  32. package/dist/{commands → cli/commands}/reset.js +5 -5
  33. package/dist/{commands → cli/commands}/source-config-wizard.d.ts +10 -5
  34. package/dist/{commands → cli/commands}/source-config-wizard.js +202 -95
  35. package/dist/{commands → cli/commands}/status.js +20 -11
  36. package/dist/{commands → cli/commands}/test-flow.d.ts +13 -4
  37. package/dist/{commands → cli/commands}/test-flow.js +30 -26
  38. package/dist/cli/commands/test.d.ts +14 -0
  39. package/dist/{commands → cli/commands}/test.js +48 -40
  40. package/dist/{commands → cli/commands}/verify.js +4 -4
  41. package/dist/cli/index.d.ts +21 -0
  42. package/dist/cli/index.js +33 -0
  43. package/dist/index.d.ts +22 -11
  44. package/dist/index.js +15 -6
  45. package/dist/lib/agent-args.d.ts +1 -3
  46. package/dist/lib/agent-args.js +1 -42
  47. package/dist/lib/agent-constants.d.ts +1 -5
  48. package/dist/lib/agent-constants.js +1 -28
  49. package/dist/lib/agent-detection.d.ts +1 -7
  50. package/dist/lib/agent-detection.js +1 -65
  51. package/dist/lib/agent-execution.d.ts +1 -2
  52. package/dist/lib/agent-execution.js +1 -242
  53. package/dist/lib/agent-logs.d.ts +1 -2
  54. package/dist/lib/agent-logs.js +1 -17
  55. package/dist/lib/agent-preflight.d.ts +1 -7
  56. package/dist/lib/agent-preflight.js +1 -76
  57. package/dist/lib/agent-render.d.ts +1 -8
  58. package/dist/lib/agent-render.js +1 -218
  59. package/dist/lib/agent-shells.d.ts +1 -44
  60. package/dist/lib/agent-shells.js +1 -847
  61. package/dist/lib/agent-status.d.ts +1 -3
  62. package/dist/lib/agent-status.js +1 -58
  63. package/dist/lib/agent-types.d.ts +1 -30
  64. package/dist/lib/agent-types.js +1 -1
  65. package/dist/lib/agents.d.ts +1 -6
  66. package/dist/lib/agents.js +1 -5
  67. package/dist/lib/builtin-compiled-workflow.d.ts +1 -129
  68. package/dist/lib/builtin-compiled-workflow.js +1 -153
  69. package/dist/lib/compiled-compile.d.ts +1 -52
  70. package/dist/lib/compiled-compile.js +1 -274
  71. package/dist/lib/compiled-paths.d.ts +1 -39
  72. package/dist/lib/compiled-paths.js +3 -103
  73. package/dist/lib/compiled-raw.d.ts +1 -49
  74. package/dist/lib/compiled-raw.js +3 -102
  75. package/dist/lib/compiled-reset.d.ts +1 -1
  76. package/dist/lib/compiled-reset.js +3 -44
  77. package/dist/lib/compiled-schema.d.ts +1 -27
  78. package/dist/lib/compiled-schema.js +1 -110
  79. package/dist/lib/discovery.d.ts +1 -1
  80. package/dist/lib/discovery.js +2 -2
  81. package/dist/lib/execution-profile.d.ts +1 -17
  82. package/dist/lib/execution-profile.js +1 -84
  83. package/dist/lib/executors.d.ts +1 -32
  84. package/dist/lib/executors.js +1 -43
  85. package/dist/lib/interf-bootstrap.d.ts +1 -3
  86. package/dist/lib/interf-bootstrap.js +3 -18
  87. package/dist/lib/interf-detect.d.ts +1 -33
  88. package/dist/lib/interf-detect.js +3 -176
  89. package/dist/lib/interf-scaffold.d.ts +1 -2
  90. package/dist/lib/interf-scaffold.js +3 -121
  91. package/dist/lib/interf-workflow-package.d.ts +1 -20
  92. package/dist/lib/interf-workflow-package.js +1 -276
  93. package/dist/lib/interf.d.ts +1 -5
  94. package/dist/lib/interf.js +3 -4
  95. package/dist/lib/local-workflows.d.ts +1 -53
  96. package/dist/lib/local-workflows.js +1 -399
  97. package/dist/lib/package-root.d.ts +1 -0
  98. package/dist/lib/package-root.js +1 -0
  99. package/dist/lib/project-paths.d.ts +1 -11
  100. package/dist/lib/project-paths.js +3 -32
  101. package/dist/lib/runtime-acceptance.d.ts +1 -9
  102. package/dist/lib/runtime-acceptance.js +1 -257
  103. package/dist/lib/runtime-contracts.d.ts +1 -2
  104. package/dist/lib/runtime-contracts.js +1 -47
  105. package/dist/lib/runtime-inventory.d.ts +1 -7
  106. package/dist/lib/runtime-inventory.js +1 -29
  107. package/dist/lib/runtime-paths.d.ts +1 -7
  108. package/dist/lib/runtime-paths.js +1 -23
  109. package/dist/lib/runtime-prompt.d.ts +1 -2
  110. package/dist/lib/runtime-prompt.js +1 -46
  111. package/dist/lib/runtime-reconcile.d.ts +1 -2
  112. package/dist/lib/runtime-reconcile.js +1 -156
  113. package/dist/lib/runtime-runs.d.ts +1 -11
  114. package/dist/lib/runtime-runs.js +1 -250
  115. package/dist/lib/runtime-types.d.ts +1 -43
  116. package/dist/lib/runtime-types.js +1 -1
  117. package/dist/lib/runtime.d.ts +1 -6
  118. package/dist/lib/runtime.js +1 -5
  119. package/dist/lib/schema.d.ts +4 -1016
  120. package/dist/lib/schema.js +6 -539
  121. package/dist/lib/source-config.d.ts +1 -39
  122. package/dist/lib/source-config.js +3 -293
  123. package/dist/lib/state-artifacts.d.ts +1 -8
  124. package/dist/lib/state-artifacts.js +1 -13
  125. package/dist/lib/state-health.d.ts +1 -4
  126. package/dist/lib/state-health.js +1 -132
  127. package/dist/lib/state-io.d.ts +1 -10
  128. package/dist/lib/state-io.js +1 -76
  129. package/dist/lib/state-paths.d.ts +1 -4
  130. package/dist/lib/state-paths.js +1 -13
  131. package/dist/lib/state-view.d.ts +1 -4
  132. package/dist/lib/state-view.js +1 -103
  133. package/dist/lib/state.d.ts +1 -6
  134. package/dist/lib/state.js +1 -5
  135. package/dist/lib/test-execution.d.ts +1 -14
  136. package/dist/lib/test-execution.js +3 -525
  137. package/dist/lib/test-matrices.d.ts +1 -90
  138. package/dist/lib/test-matrices.js +3 -96
  139. package/dist/lib/test-paths.d.ts +1 -12
  140. package/dist/lib/test-paths.js +3 -59
  141. package/dist/lib/test-profile-presets.d.ts +1 -57
  142. package/dist/lib/test-profile-presets.js +3 -50
  143. package/dist/lib/test-sandbox.d.ts +1 -11
  144. package/dist/lib/test-sandbox.js +3 -105
  145. package/dist/lib/test-specs.d.ts +1 -7
  146. package/dist/lib/test-specs.js +3 -114
  147. package/dist/lib/test-targets.d.ts +1 -5
  148. package/dist/lib/test-targets.js +3 -38
  149. package/dist/lib/test-types.d.ts +1 -17
  150. package/dist/lib/test-types.js +3 -1
  151. package/dist/lib/test.d.ts +1 -4
  152. package/dist/lib/test.js +3 -3
  153. package/dist/lib/validate-compiled.d.ts +1 -27
  154. package/dist/lib/validate-compiled.js +1 -238
  155. package/dist/lib/validate-helpers.d.ts +1 -12
  156. package/dist/lib/validate-helpers.js +1 -41
  157. package/dist/lib/validate.d.ts +1 -19
  158. package/dist/lib/validate.js +1 -256
  159. package/dist/lib/workflow-authoring.d.ts +1 -0
  160. package/dist/lib/workflow-authoring.js +1 -0
  161. package/dist/lib/workflow-definitions.d.ts +1 -68
  162. package/dist/lib/workflow-definitions.js +1 -206
  163. package/dist/lib/workflow-edit-session.d.ts +1 -0
  164. package/dist/lib/workflow-edit-session.js +1 -0
  165. package/dist/lib/workflow-edit-utils.d.ts +1 -0
  166. package/dist/lib/workflow-edit-utils.js +1 -0
  167. package/dist/lib/workflow-helpers.d.ts +1 -38
  168. package/dist/lib/workflow-helpers.js +1 -167
  169. package/dist/lib/workflow-improvement.d.ts +1 -22
  170. package/dist/lib/workflow-improvement.js +1 -396
  171. package/dist/lib/workflow-primitives.d.ts +1 -2
  172. package/dist/lib/workflow-primitives.js +1 -5
  173. package/dist/lib/workflow-review-paths.d.ts +1 -10
  174. package/dist/lib/workflow-review-paths.js +1 -27
  175. package/dist/lib/workflow-stage-policy.d.ts +1 -0
  176. package/dist/lib/workflow-stage-policy.js +1 -0
  177. package/dist/lib/workflow-stage-runner.d.ts +1 -41
  178. package/dist/lib/workflow-stage-runner.js +1 -109
  179. package/dist/lib/workflows.d.ts +1 -15
  180. package/dist/lib/workflows.js +1 -31
  181. package/dist/packages/agents/index.d.ts +17 -0
  182. package/dist/packages/agents/index.js +15 -0
  183. package/dist/packages/agents/lib/agents.d.ts +6 -0
  184. package/dist/packages/agents/lib/agents.js +5 -0
  185. package/dist/packages/agents/lib/args.d.ts +4 -0
  186. package/dist/packages/agents/lib/args.js +52 -0
  187. package/dist/packages/agents/lib/constants.d.ts +5 -0
  188. package/dist/packages/agents/lib/constants.js +28 -0
  189. package/dist/packages/agents/lib/detection.d.ts +7 -0
  190. package/dist/packages/agents/lib/detection.js +65 -0
  191. package/dist/packages/agents/lib/execution-profile.d.ts +17 -0
  192. package/dist/packages/agents/lib/execution-profile.js +84 -0
  193. package/dist/packages/agents/lib/execution.d.ts +2 -0
  194. package/dist/packages/agents/lib/execution.js +243 -0
  195. package/dist/packages/agents/lib/executors.d.ts +32 -0
  196. package/dist/packages/agents/lib/executors.js +45 -0
  197. package/dist/packages/agents/lib/logs.d.ts +2 -0
  198. package/dist/packages/agents/lib/logs.js +17 -0
  199. package/dist/packages/agents/lib/preflight.d.ts +7 -0
  200. package/dist/packages/agents/lib/preflight.js +77 -0
  201. package/dist/packages/agents/lib/render.d.ts +8 -0
  202. package/dist/packages/agents/lib/render.js +218 -0
  203. package/dist/packages/agents/lib/schema.d.ts +8 -0
  204. package/dist/packages/agents/lib/schema.js +7 -0
  205. package/dist/packages/agents/lib/shells.d.ts +69 -0
  206. package/dist/packages/agents/lib/shells.js +1021 -0
  207. package/dist/packages/agents/lib/status.d.ts +3 -0
  208. package/dist/packages/agents/lib/status.js +58 -0
  209. package/dist/packages/agents/lib/types.d.ts +30 -0
  210. package/dist/packages/agents/lib/types.js +1 -0
  211. package/dist/{lib → packages/agents/lib}/user-config.d.ts +1 -0
  212. package/dist/{lib → packages/agents/lib}/user-config.js +3 -2
  213. package/dist/packages/compiler/compiled-compile.d.ts +48 -0
  214. package/dist/packages/compiler/compiled-compile.js +256 -0
  215. package/dist/packages/compiler/compiled-schema.d.ts +31 -0
  216. package/dist/packages/compiler/compiled-schema.js +141 -0
  217. package/dist/packages/compiler/index.d.ts +24 -0
  218. package/dist/packages/compiler/index.js +23 -0
  219. package/dist/packages/compiler/lib/schema.d.ts +684 -0
  220. package/dist/packages/compiler/lib/schema.js +361 -0
  221. package/dist/packages/compiler/runtime-acceptance.d.ts +9 -0
  222. package/dist/packages/compiler/runtime-acceptance.js +269 -0
  223. package/dist/packages/compiler/runtime-contracts.d.ts +2 -0
  224. package/dist/packages/compiler/runtime-contracts.js +48 -0
  225. package/dist/packages/compiler/runtime-inventory.d.ts +7 -0
  226. package/dist/packages/compiler/runtime-inventory.js +29 -0
  227. package/dist/packages/compiler/runtime-paths.d.ts +8 -0
  228. package/dist/packages/compiler/runtime-paths.js +26 -0
  229. package/dist/packages/compiler/runtime-prompt.d.ts +2 -0
  230. package/dist/packages/compiler/runtime-prompt.js +48 -0
  231. package/dist/packages/compiler/runtime-reconcile.d.ts +2 -0
  232. package/dist/packages/compiler/runtime-reconcile.js +193 -0
  233. package/dist/packages/compiler/runtime-runs.d.ts +11 -0
  234. package/dist/packages/compiler/runtime-runs.js +262 -0
  235. package/dist/packages/compiler/runtime-types.d.ts +43 -0
  236. package/dist/packages/compiler/runtime-types.js +1 -0
  237. package/dist/packages/compiler/runtime.d.ts +6 -0
  238. package/dist/packages/compiler/runtime.js +5 -0
  239. package/dist/packages/compiler/state-artifacts.d.ts +8 -0
  240. package/dist/packages/compiler/state-artifacts.js +13 -0
  241. package/dist/packages/compiler/state-health.d.ts +4 -0
  242. package/dist/packages/compiler/state-health.js +132 -0
  243. package/dist/packages/compiler/state-io.d.ts +10 -0
  244. package/dist/packages/compiler/state-io.js +76 -0
  245. package/dist/packages/compiler/state-paths.d.ts +4 -0
  246. package/dist/packages/compiler/state-paths.js +13 -0
  247. package/dist/packages/compiler/state-view.d.ts +4 -0
  248. package/dist/packages/compiler/state-view.js +103 -0
  249. package/dist/packages/compiler/state.d.ts +7 -0
  250. package/dist/packages/compiler/state.js +12 -0
  251. package/dist/packages/compiler/validate-compiled.d.ts +27 -0
  252. package/dist/packages/compiler/validate-compiled.js +241 -0
  253. package/dist/packages/compiler/validate-helpers.d.ts +12 -0
  254. package/dist/packages/compiler/validate-helpers.js +41 -0
  255. package/dist/packages/compiler/validate.d.ts +21 -0
  256. package/dist/packages/compiler/validate.js +249 -0
  257. package/dist/packages/compiler/workflow-primitives.d.ts +2 -0
  258. package/dist/packages/compiler/workflow-primitives.js +5 -0
  259. package/dist/packages/compiler/workflows.d.ts +15 -0
  260. package/dist/packages/compiler/workflows.js +31 -0
  261. package/dist/packages/project-model/compiled-paths.d.ts +40 -0
  262. package/dist/packages/project-model/compiled-paths.js +106 -0
  263. package/dist/packages/project-model/compiled-raw.d.ts +49 -0
  264. package/dist/packages/project-model/compiled-raw.js +102 -0
  265. package/dist/packages/project-model/compiled-reset.d.ts +2 -0
  266. package/dist/packages/project-model/compiled-reset.js +72 -0
  267. package/dist/packages/project-model/index.d.ts +11 -0
  268. package/dist/packages/project-model/index.js +10 -0
  269. package/dist/packages/project-model/interf-bootstrap.d.ts +3 -0
  270. package/dist/packages/project-model/interf-bootstrap.js +18 -0
  271. package/dist/packages/project-model/interf-detect.d.ts +33 -0
  272. package/dist/packages/project-model/interf-detect.js +176 -0
  273. package/dist/packages/project-model/interf-scaffold.d.ts +2 -0
  274. package/dist/packages/project-model/interf-scaffold.js +124 -0
  275. package/dist/packages/project-model/interf.d.ts +5 -0
  276. package/dist/packages/project-model/interf.js +4 -0
  277. package/dist/packages/project-model/lib/schema.d.ts +125 -0
  278. package/dist/packages/project-model/lib/schema.js +62 -0
  279. package/dist/packages/project-model/project-paths.d.ts +11 -0
  280. package/dist/packages/project-model/project-paths.js +32 -0
  281. package/dist/packages/project-model/source-config.d.ts +38 -0
  282. package/dist/packages/project-model/source-config.js +297 -0
  283. package/dist/packages/testing/index.d.ts +13 -0
  284. package/dist/packages/testing/index.js +10 -0
  285. package/dist/packages/testing/lib/schema.d.ts +261 -0
  286. package/dist/packages/testing/lib/schema.js +119 -0
  287. package/dist/packages/testing/test-execution.d.ts +14 -0
  288. package/dist/packages/testing/test-execution.js +525 -0
  289. package/dist/packages/testing/test-matrices.d.ts +90 -0
  290. package/dist/packages/testing/test-matrices.js +96 -0
  291. package/dist/packages/testing/test-paths.d.ts +12 -0
  292. package/dist/packages/testing/test-paths.js +59 -0
  293. package/dist/packages/testing/test-profile-presets.d.ts +57 -0
  294. package/dist/packages/testing/test-profile-presets.js +50 -0
  295. package/dist/packages/testing/test-sandbox.d.ts +11 -0
  296. package/dist/packages/testing/test-sandbox.js +105 -0
  297. package/dist/packages/testing/test-specs.d.ts +7 -0
  298. package/dist/packages/testing/test-specs.js +114 -0
  299. package/dist/packages/testing/test-targets.d.ts +5 -0
  300. package/dist/packages/testing/test-targets.js +38 -0
  301. package/dist/packages/testing/test-types.d.ts +16 -0
  302. package/dist/packages/testing/test-types.js +1 -0
  303. package/dist/packages/testing/test.d.ts +4 -0
  304. package/dist/packages/testing/test.js +3 -0
  305. package/dist/packages/workflow-authoring/index.d.ts +4 -0
  306. package/dist/packages/workflow-authoring/index.js +4 -0
  307. package/dist/packages/workflow-authoring/lib/workflow-edit-utils.d.ts +10 -0
  308. package/dist/packages/workflow-authoring/lib/workflow-edit-utils.js +39 -0
  309. package/dist/packages/workflow-authoring/workflow-authoring.d.ts +26 -0
  310. package/dist/packages/workflow-authoring/workflow-authoring.js +120 -0
  311. package/dist/packages/workflow-authoring/workflow-edit-session.d.ts +16 -0
  312. package/dist/packages/workflow-authoring/workflow-edit-session.js +57 -0
  313. package/dist/packages/workflow-authoring/workflow-improvement.d.ts +23 -0
  314. package/dist/packages/workflow-authoring/workflow-improvement.js +209 -0
  315. package/dist/packages/workflow-package/builtin-compiled-workflow.d.ts +38 -0
  316. package/dist/packages/workflow-package/builtin-compiled-workflow.js +94 -0
  317. package/dist/packages/workflow-package/index.d.ts +9 -0
  318. package/dist/packages/workflow-package/index.js +9 -0
  319. package/dist/packages/workflow-package/interf-workflow-package.d.ts +25 -0
  320. package/dist/packages/workflow-package/interf-workflow-package.js +342 -0
  321. package/dist/{lib/config.d.ts → packages/workflow-package/lib/package-root.d.ts} +0 -1
  322. package/dist/packages/workflow-package/lib/package-root.js +6 -0
  323. package/dist/packages/workflow-package/local-workflows.d.ts +54 -0
  324. package/dist/packages/workflow-package/local-workflows.js +422 -0
  325. package/dist/packages/workflow-package/workflow-definitions.d.ts +78 -0
  326. package/dist/packages/workflow-package/workflow-definitions.js +203 -0
  327. package/dist/packages/workflow-package/workflow-helpers.d.ts +38 -0
  328. package/dist/packages/workflow-package/workflow-helpers.js +167 -0
  329. package/dist/packages/workflow-package/workflow-review-paths.d.ts +10 -0
  330. package/dist/packages/workflow-package/workflow-review-paths.js +27 -0
  331. package/dist/packages/workflow-package/workflow-stage-policy.d.ts +5 -0
  332. package/dist/packages/workflow-package/workflow-stage-policy.js +31 -0
  333. package/dist/packages/workflow-package/workflow-stage-runner.d.ts +41 -0
  334. package/dist/packages/workflow-package/workflow-stage-runner.js +109 -0
  335. package/package.json +44 -21
  336. package/dist/commands/compile.d.ts +0 -15
  337. package/dist/commands/create-workflow-wizard.js +0 -125
  338. package/dist/commands/create.js +0 -162
  339. package/dist/commands/init.d.ts +0 -3
  340. package/dist/commands/test.d.ts +0 -9
  341. package/dist/lib/compiled-home.d.ts +0 -5
  342. package/dist/lib/compiled-home.js +0 -32
  343. package/dist/lib/config.js +0 -9
  344. package/dist/lib/obsidian.d.ts +0 -1
  345. package/dist/lib/obsidian.js +0 -15
  346. package/dist/lib/summarize-plan.d.ts +0 -17
  347. package/dist/lib/summarize-plan.js +0 -120
  348. /package/dist/{commands → cli/commands}/default.d.ts +0 -0
  349. /package/dist/{commands → cli/commands}/doctor.d.ts +0 -0
  350. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  351. /package/dist/{commands → cli/commands}/reset.d.ts +0 -0
  352. /package/dist/{commands → cli/commands}/status.d.ts +0 -0
  353. /package/dist/{commands → cli/commands}/verify.d.ts +0 -0
@@ -0,0 +1,106 @@
1
+ import { basename, dirname, join, relative, resolve, sep } from "node:path";
2
+ export const COMPILED_INTERF_DIR = ".interf";
3
+ export const COMPILED_CONFIG_FILE = "interf.json";
4
+ export const COMPILED_WORKFLOW_DIR = "workflow";
5
+ export const COMPILED_TEST_DIR = "tests";
6
+ export const COMPILED_TEST_TARGETS_DIR = "targets";
7
+ export const COMPILED_RUNTIME_DIR = "runtime";
8
+ export const COMPILED_RUNTIME_STATE_FILE = "state.json";
9
+ export const COMPILED_RUNTIME_HEALTH_FILE = "health.json";
10
+ export const COMPILED_RUNTIME_VIEW_SPEC_FILE = "view-spec.json";
11
+ export const COMPILED_RUNTIME_RAW_SNAPSHOT_FILE = "raw-snapshot.json";
12
+ export const COMPILED_RUNTIME_INVENTORY_FILE = "inventory.json";
13
+ export const COMPILED_RUNTIME_RUN_FILE = "run.json";
14
+ export const COMPILED_RUNTIME_RUN_HISTORY_FILE = "run-history.jsonl";
15
+ export const COMPILED_RUNTIME_STAGE_CONTRACT_FILE = "stage-contract.json";
16
+ export function compiledRuntimeRoot(compiledPath) {
17
+ return join(compiledPath, COMPILED_INTERF_DIR, COMPILED_RUNTIME_DIR);
18
+ }
19
+ export function compiledRuntimeFilePath(compiledPath, fileName) {
20
+ return join(compiledRuntimeRoot(compiledPath), fileName);
21
+ }
22
+ export function compiledInterfRoot(compiledPath) {
23
+ return join(compiledPath, COMPILED_INTERF_DIR);
24
+ }
25
+ export function compiledInterfConfigPath(compiledPath) {
26
+ return join(compiledInterfRoot(compiledPath), COMPILED_CONFIG_FILE);
27
+ }
28
+ export function workflowPackagePathForCompiled(compiledPath) {
29
+ return join(compiledInterfRoot(compiledPath), COMPILED_WORKFLOW_DIR);
30
+ }
31
+ export function testRootForCompiled(compiledPath) {
32
+ return join(compiledInterfRoot(compiledPath), COMPILED_TEST_DIR);
33
+ }
34
+ export function testTargetsRootForCompiled(compiledPath) {
35
+ return join(testRootForCompiled(compiledPath), COMPILED_TEST_TARGETS_DIR);
36
+ }
37
+ export function stageExecutionShellsRoot(compiledPath) {
38
+ return join(compiledRuntimeRoot(compiledPath), "execution-shells");
39
+ }
40
+ export function workflowImprovementLoopsRoot(compiledPath) {
41
+ return join(compiledRuntimeRoot(compiledPath), "improvement-loops");
42
+ }
43
+ export function workflowImprovementRunRoot(compiledPath, runId) {
44
+ return join(workflowImprovementLoopsRoot(compiledPath), runId);
45
+ }
46
+ export function workflowImprovementLoopRoot(compiledPath, runId, loopIndex) {
47
+ return join(workflowImprovementRunRoot(compiledPath, runId), `loop-${String(loopIndex).padStart(2, "0")}`);
48
+ }
49
+ export function targetTestRunsRootForCompiled(compiledPath) {
50
+ return join(testTargetsRootForCompiled(compiledPath), "runs");
51
+ }
52
+ export function targetTestSandboxesRootForCompiled(compiledPath) {
53
+ return join(testTargetsRootForCompiled(compiledPath), "sandboxes");
54
+ }
55
+ export function compiledRuntimeLogsRoot(compiledPath) {
56
+ return join(compiledRuntimeRoot(compiledPath), "logs");
57
+ }
58
+ export function compiledRuntimeArchivedStageContractPath(compiledPath, runId) {
59
+ return join(compiledRuntimeLogsRoot(compiledPath), `${runId}.stage-contract.json`);
60
+ }
61
+ export function compiledQueryAcceptanceRoot(compiledPath) {
62
+ return join(compiledRuntimeRoot(compiledPath), "query-acceptance");
63
+ }
64
+ export function compiledRuntimeStatePath(compiledPath) {
65
+ return compiledRuntimeFilePath(compiledPath, COMPILED_RUNTIME_STATE_FILE);
66
+ }
67
+ export function compiledRuntimeHealthPath(compiledPath) {
68
+ return compiledRuntimeFilePath(compiledPath, COMPILED_RUNTIME_HEALTH_FILE);
69
+ }
70
+ export function compiledRuntimeViewSpecPath(compiledPath) {
71
+ return compiledRuntimeFilePath(compiledPath, COMPILED_RUNTIME_VIEW_SPEC_FILE);
72
+ }
73
+ export function compiledRawSnapshotMetadataPath(compiledPath) {
74
+ return compiledRuntimeFilePath(compiledPath, COMPILED_RUNTIME_RAW_SNAPSHOT_FILE);
75
+ }
76
+ export function compiledRuntimeInventoryPath(compiledPath) {
77
+ return compiledRuntimeFilePath(compiledPath, COMPILED_RUNTIME_INVENTORY_FILE);
78
+ }
79
+ export function compiledRuntimeRunPath(compiledPath) {
80
+ return compiledRuntimeFilePath(compiledPath, COMPILED_RUNTIME_RUN_FILE);
81
+ }
82
+ export function compiledRuntimeRunHistoryPath(compiledPath) {
83
+ return compiledRuntimeFilePath(compiledPath, COMPILED_RUNTIME_RUN_HISTORY_FILE);
84
+ }
85
+ export function compiledRuntimeStageContractPath(compiledPath) {
86
+ return compiledRuntimeFilePath(compiledPath, COMPILED_RUNTIME_STAGE_CONTRACT_FILE);
87
+ }
88
+ export function resolveSourceControlPathForCompiled(compiledPath) {
89
+ let cursor = resolve(compiledPath);
90
+ while (true) {
91
+ const parent = dirname(cursor);
92
+ if (basename(parent) === "interf" &&
93
+ basename(cursor) !== "tests" &&
94
+ basename(cursor) !== "workflows") {
95
+ return dirname(parent);
96
+ }
97
+ if (parent === cursor)
98
+ break;
99
+ cursor = parent;
100
+ }
101
+ throw new Error(`Context folder is not under the canonical project layout: ${compiledPath}`);
102
+ }
103
+ export function defaultControlPathForCompiled(compiledPath) {
104
+ const relativePath = relative(compiledPath, resolveSourceControlPathForCompiled(compiledPath));
105
+ return relativePath.length > 0 ? relativePath.split(sep).join("/") : ".";
106
+ }
@@ -0,0 +1,49 @@
1
+ import type { InterfConfig } from "./lib/schema.js";
2
+ export interface CompiledRawSyncResult {
3
+ sourceTotal: number;
4
+ copied: number;
5
+ removed: number;
6
+ }
7
+ type RawSnapshotMaterializeMode = "copy" | "link-or-copy";
8
+ export declare function resolveCompiledRawPath(compiledPath: string, config?: {
9
+ [x: string]: unknown;
10
+ type: "compiled";
11
+ name: string;
12
+ workflow: string;
13
+ checks: {
14
+ question: string;
15
+ id?: string | undefined;
16
+ answer?: string | undefined;
17
+ expect?: {
18
+ must_include?: string[] | undefined;
19
+ must_include_one_of?: string[][] | undefined;
20
+ must_not_include?: string[] | undefined;
21
+ min_words?: number | undefined;
22
+ max_words?: number | undefined;
23
+ } | undefined;
24
+ strictness?: string | undefined;
25
+ }[];
26
+ source: {
27
+ path: string;
28
+ dataset_path: string;
29
+ control_path?: string | undefined;
30
+ };
31
+ about?: string | undefined;
32
+ max_attempts?: number | undefined;
33
+ max_loops?: number | undefined;
34
+ workflow_origin?: {
35
+ selected: string;
36
+ local_draft?: boolean | undefined;
37
+ } | undefined;
38
+ } | null): string;
39
+ export declare function syncCompiledRawSnapshot(compiledPath: string, sourcePath?: string): CompiledRawSyncResult;
40
+ export declare function ensureCompiledRawBinding(compiledPath: string): InterfConfig | null;
41
+ export declare function projectRawSnapshot(options: {
42
+ sourcePath: string;
43
+ destinationPath: string;
44
+ compiledPath: string;
45
+ mode?: RawSnapshotMaterializeMode;
46
+ prune?: boolean;
47
+ preserveTimestamps?: boolean;
48
+ }): CompiledRawSyncResult;
49
+ export {};
@@ -0,0 +1,102 @@
1
+ import { cpSync, existsSync, linkSync, mkdirSync, rmSync, statSync, } from "node:fs";
2
+ import { dirname, join, relative, resolve } from "node:path";
3
+ import { listFilesRecursive } from "../../lib/filesystem.js";
4
+ import { discoverSourceFiles } from "../../lib/discovery.js";
5
+ import { readInterfConfig, resolveSourceInputPath, } from "./interf-detect.js";
6
+ import { saveCompiledInterfConfig } from "./source-config.js";
7
+ import { defaultControlPathForCompiled, } from "./compiled-paths.js";
8
+ import { assertPathWithinRoot } from "../../lib/util.js";
9
+ export function resolveCompiledRawPath(compiledPath, config = readInterfConfig(compiledPath)) {
10
+ const configuredPath = typeof config?.source?.path === "string" && config.source.path.length > 0
11
+ ? config.source.path
12
+ : "raw";
13
+ return assertPathWithinRoot(compiledPath, resolve(compiledPath, configuredPath), "Compiled raw path");
14
+ }
15
+ export function syncCompiledRawSnapshot(compiledPath, sourcePath = resolveSourceInputPath(compiledPath)) {
16
+ ensureCompiledRawBinding(compiledPath);
17
+ const rawPath = resolveCompiledRawPath(compiledPath);
18
+ return projectRawSnapshot({
19
+ sourcePath,
20
+ destinationPath: rawPath,
21
+ compiledPath,
22
+ mode: "copy",
23
+ prune: true,
24
+ preserveTimestamps: true,
25
+ });
26
+ }
27
+ export function ensureCompiledRawBinding(compiledPath) {
28
+ const config = readInterfConfig(compiledPath);
29
+ if (!config)
30
+ return null;
31
+ if (config.source?.path === "./raw")
32
+ return config;
33
+ const nextConfig = {
34
+ ...config,
35
+ source: {
36
+ ...(config.source ?? {}),
37
+ path: "./raw",
38
+ control_path: config.source?.control_path ?? defaultControlPathForCompiled(compiledPath),
39
+ ...(config.source?.dataset_path ? { dataset_path: config.source.dataset_path } : {}),
40
+ },
41
+ };
42
+ return saveCompiledInterfConfig(compiledPath, nextConfig);
43
+ }
44
+ function filesMatch(sourcePath, targetPath) {
45
+ if (!existsSync(targetPath))
46
+ return false;
47
+ try {
48
+ const sourceStat = statSync(sourcePath);
49
+ const targetStat = statSync(targetPath);
50
+ return sourceStat.size === targetStat.size && sourceStat.mtimeMs === targetStat.mtimeMs;
51
+ }
52
+ catch {
53
+ return false;
54
+ }
55
+ }
56
+ function materializeRawSnapshotFile(sourcePath, targetPath, options) {
57
+ mkdirSync(dirname(targetPath), { recursive: true });
58
+ rmSync(targetPath, { force: true });
59
+ if (options.mode === "link-or-copy") {
60
+ try {
61
+ linkSync(sourcePath, targetPath);
62
+ return;
63
+ }
64
+ catch {
65
+ // fall through to copy
66
+ }
67
+ }
68
+ cpSync(sourcePath, targetPath, { preserveTimestamps: options.preserveTimestamps });
69
+ }
70
+ export function projectRawSnapshot(options) {
71
+ const discovery = discoverSourceFiles(options.sourcePath, options.compiledPath);
72
+ const expectedFiles = new Set(discovery.sourceFiles);
73
+ mkdirSync(options.destinationPath, { recursive: true });
74
+ let removed = 0;
75
+ if (options.prune !== false) {
76
+ for (const existingPath of listFilesRecursive(options.destinationPath)) {
77
+ const relativePath = relative(options.destinationPath, existingPath);
78
+ if (expectedFiles.has(relativePath))
79
+ continue;
80
+ rmSync(existingPath, { force: true });
81
+ removed += 1;
82
+ }
83
+ }
84
+ let copied = 0;
85
+ for (const relativePath of discovery.sourceFiles) {
86
+ const sourceFilePath = join(options.sourcePath, relativePath);
87
+ const targetFilePath = join(options.destinationPath, relativePath);
88
+ if (filesMatch(sourceFilePath, targetFilePath)) {
89
+ continue;
90
+ }
91
+ materializeRawSnapshotFile(sourceFilePath, targetFilePath, {
92
+ mode: options.mode ?? "copy",
93
+ preserveTimestamps: options.preserveTimestamps ?? true,
94
+ });
95
+ copied += 1;
96
+ }
97
+ return {
98
+ sourceTotal: discovery.totalCount,
99
+ copied,
100
+ removed,
101
+ };
102
+ }
@@ -0,0 +1,2 @@
1
+ export declare function clearCompiledRuntimeDerivedArtifacts(compiledPath: string): void;
2
+ export declare function resetCompiledGeneratedState(compiledPath: string, scope?: "compile" | "all"): void;
@@ -0,0 +1,72 @@
1
+ import { existsSync, readdirSync, rmSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { readCompiledSchemaFile, } from "../compiler/compiled-schema.js";
4
+ import { initializeCompiledRuntimeState, } from "../compiler/state.js";
5
+ import { stageExecutionShellsRoot, testRootForCompiled, testTargetsRootForCompiled, workflowImprovementLoopsRoot, compiledQueryAcceptanceRoot, compiledRuntimeRoot, compiledRuntimeLogsRoot, workflowPackagePathForCompiled, } from "./compiled-paths.js";
6
+ function removeIfExists(path) {
7
+ if (existsSync(path)) {
8
+ rmSync(path, { recursive: true, force: true });
9
+ }
10
+ }
11
+ const COMPILE_RUNTIME_RESET_ENTRIES = [
12
+ "state.json",
13
+ "health.json",
14
+ "view-spec.json",
15
+ "inventory.json",
16
+ "run.json",
17
+ "raw-snapshot.json",
18
+ "stage-contract.json",
19
+ ];
20
+ const PRESERVED_COMPILED_ROOTS = new Set([
21
+ ".agents",
22
+ ".claude",
23
+ ".codex",
24
+ ".cursor",
25
+ ".gitignore",
26
+ ".interf",
27
+ ".interfignore",
28
+ "AGENTS.md",
29
+ "CLAUDE.md",
30
+ ]);
31
+ export function clearCompiledRuntimeDerivedArtifacts(compiledPath) {
32
+ const runtimeRoot = compiledRuntimeRoot(compiledPath);
33
+ for (const entry of COMPILE_RUNTIME_RESET_ENTRIES) {
34
+ removeIfExists(join(runtimeRoot, entry));
35
+ }
36
+ removeIfExists(compiledQueryAcceptanceRoot(compiledPath));
37
+ }
38
+ function activeCompiledInputRoots(compiledPath) {
39
+ const schema = readCompiledSchemaFile(workflowPackagePathForCompiled(compiledPath));
40
+ const roots = new Set();
41
+ for (const zone of schema?.zones ?? []) {
42
+ if (zone.role !== "input")
43
+ continue;
44
+ const root = zone.path.split("/")[0]?.trim();
45
+ if (root)
46
+ roots.add(root);
47
+ }
48
+ return roots;
49
+ }
50
+ function resetCompiledGeneratedOutputs(compiledPath) {
51
+ const preservedInputRoots = activeCompiledInputRoots(compiledPath);
52
+ for (const entry of readdirSync(compiledPath)) {
53
+ if (PRESERVED_COMPILED_ROOTS.has(entry))
54
+ continue;
55
+ if (preservedInputRoots.has(entry))
56
+ continue;
57
+ removeIfExists(join(compiledPath, entry));
58
+ }
59
+ }
60
+ export function resetCompiledGeneratedState(compiledPath, scope = "compile") {
61
+ resetCompiledGeneratedOutputs(compiledPath);
62
+ clearCompiledRuntimeDerivedArtifacts(compiledPath);
63
+ initializeCompiledRuntimeState(compiledPath);
64
+ if (scope === "all") {
65
+ removeIfExists(stageExecutionShellsRoot(compiledPath));
66
+ removeIfExists(workflowImprovementLoopsRoot(compiledPath));
67
+ removeIfExists(compiledRuntimeLogsRoot(compiledPath));
68
+ removeIfExists(join(compiledRuntimeRoot(compiledPath), "run-history.jsonl"));
69
+ removeIfExists(testRootForCompiled(compiledPath));
70
+ removeIfExists(testTargetsRootForCompiled(compiledPath));
71
+ }
72
+ }
@@ -0,0 +1,11 @@
1
+ export * as schema from "./lib/schema.js";
2
+ export * as sourceConfig from "./source-config.js";
3
+ export * as interf from "./interf.js";
4
+ export * as detect from "./interf-detect.js";
5
+ export * as bootstrap from "./interf-bootstrap.js";
6
+ export * as scaffold from "./interf-scaffold.js";
7
+ export * as compiledPaths from "./compiled-paths.js";
8
+ export * as projectPaths from "./project-paths.js";
9
+ export * as compiledRaw from "./compiled-raw.js";
10
+ export * as compiledReset from "./compiled-reset.js";
11
+ export type { InterfConfig, SourceDatasetConfig, SourceFolderConfig, SourceTruthCheck, } from "./lib/schema.js";
@@ -0,0 +1,10 @@
1
+ export * as schema from "./lib/schema.js";
2
+ export * as sourceConfig from "./source-config.js";
3
+ export * as interf from "./interf.js";
4
+ export * as detect from "./interf-detect.js";
5
+ export * as bootstrap from "./interf-bootstrap.js";
6
+ export * as scaffold from "./interf-scaffold.js";
7
+ export * as compiledPaths from "./compiled-paths.js";
8
+ export * as projectPaths from "./project-paths.js";
9
+ export * as compiledRaw from "./compiled-raw.js";
10
+ export * as compiledReset from "./compiled-reset.js";
@@ -0,0 +1,3 @@
1
+ import { renderClaudeBootstrap } from "../agents/lib/shells.js";
2
+ export { renderClaudeBootstrap };
3
+ export declare function refreshCompiledBootstrapGuidance(dirPath: string): boolean;
@@ -0,0 +1,18 @@
1
+ import { basename } from "node:path";
2
+ import { readInterfConfig } from "./interf-detect.js";
3
+ import { projectCompiledQueryShell, renderClaudeBootstrap } from "../agents/lib/shells.js";
4
+ export { renderClaudeBootstrap };
5
+ export function refreshCompiledBootstrapGuidance(dirPath) {
6
+ const config = readInterfConfig(dirPath);
7
+ if (!config)
8
+ return false;
9
+ const compiledName = config.name ?? basename(dirPath);
10
+ const workflowId = config.workflow ?? "interf";
11
+ const workflowOriginSelected = config.workflow_origin?.selected ?? workflowId;
12
+ const workflowLocalDraft = config.workflow_origin?.local_draft === true;
13
+ const about = typeof config.about === "string" && config.about.length > 0 ? config.about : undefined;
14
+ return projectCompiledQueryShell(dirPath, compiledName, workflowId, about, {
15
+ workflowOriginSelected,
16
+ workflowLocalDraft,
17
+ });
18
+ }
@@ -0,0 +1,33 @@
1
+ import { type InterfConfig } from "./lib/schema.js";
2
+ export type { InterfConfig } from "./lib/schema.js";
3
+ export interface ResolvedCompiled {
4
+ sourcePath: string;
5
+ compiledPath: string;
6
+ config: InterfConfig;
7
+ }
8
+ export declare const INTERF_CONTAINER_NAME = "interf";
9
+ export declare const WORKFLOW_CONTAINER_NAME = "workflows";
10
+ export declare const TEST_CONTAINER_NAME = "tests";
11
+ export declare const INTERF_CONFIG_FILE = "interf.json";
12
+ export declare const WORKFLOW_PACKAGE_DIR = "workflow";
13
+ export declare function readInterfConfig(dirPath: string): InterfConfig | null;
14
+ export declare function hasSourceFolderInput(config: InterfConfig | null | undefined): config is InterfConfig & {
15
+ source: {
16
+ path: string;
17
+ };
18
+ };
19
+ export declare function detectInterf(cwd: string): {
20
+ path: string;
21
+ config: InterfConfig;
22
+ } | null;
23
+ export declare function resolveCompiled(cwd: string): ResolvedCompiled | null;
24
+ export declare function resolveSourceFolderPath(compiledPath: string, config?: InterfConfig | null): string;
25
+ export declare function resolveSourceControlPath(compiledPath: string): string;
26
+ export declare function resolveSourceInputPath(compiledPath: string): string;
27
+ export declare function listCompiledDatasetsForSourceFolder(sourcePath: string): Array<{
28
+ path: string;
29
+ config: InterfConfig;
30
+ }>;
31
+ export declare function assertCompiledContainer(sourcePath: string): string;
32
+ export declare function assertWritableTargetDir(dirPath: string, label: string): void;
33
+ export declare function assertCompiledName(name: string, label: string): void;
@@ -0,0 +1,176 @@
1
+ import { existsSync, readdirSync, statSync, } from "node:fs";
2
+ import { join, resolve } from "node:path";
3
+ import { warnInterf } from "../../lib/logger.js";
4
+ import { readJsonFileUnchecked } from "../../lib/parse.js";
5
+ import { compiledCompiledPathForDataset, projectInterfRoot, } from "./project-paths.js";
6
+ import { resolveSourceControlPathForCompiled, compiledInterfConfigPath, } from "./compiled-paths.js";
7
+ import { InterfConfigSchema, } from "./lib/schema.js";
8
+ import { assertPathWithinRoot } from "../../lib/util.js";
9
+ export const INTERF_CONTAINER_NAME = "interf";
10
+ export const WORKFLOW_CONTAINER_NAME = "workflows";
11
+ export const TEST_CONTAINER_NAME = "tests";
12
+ export const INTERF_CONFIG_FILE = "interf.json";
13
+ export const WORKFLOW_PACKAGE_DIR = "workflow";
14
+ export function readInterfConfig(dirPath) {
15
+ const configPath = compiledInterfConfigPath(dirPath);
16
+ if (!existsSync(configPath))
17
+ return null;
18
+ const raw = readJsonFileUnchecked(configPath, "Interf config");
19
+ if (raw === null)
20
+ return null;
21
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
22
+ return null;
23
+ if (raw.type !== "compiled") {
24
+ return null;
25
+ }
26
+ const parsed = InterfConfigSchema.safeParse(raw);
27
+ if (!parsed.success) {
28
+ warnInterf(`Warning: failed to validate Interf config at ${configPath}: ${parsed.error.issues.map((issue) => issue.message).join("; ")}`);
29
+ return null;
30
+ }
31
+ return parsed.data;
32
+ }
33
+ export function hasSourceFolderInput(config) {
34
+ return typeof config?.source?.path === "string" && config.source.path.length > 0;
35
+ }
36
+ export function detectInterf(cwd) {
37
+ const config = readInterfConfig(cwd);
38
+ if (config)
39
+ return { path: cwd, config };
40
+ return null;
41
+ }
42
+ export function resolveCompiled(cwd) {
43
+ const detected = detectInterf(cwd);
44
+ if (!detected)
45
+ return null;
46
+ return {
47
+ sourcePath: resolveSourceControlPath(detected.path),
48
+ compiledPath: detected.path,
49
+ config: detected.config,
50
+ };
51
+ }
52
+ export function resolveSourceFolderPath(compiledPath, config = null) {
53
+ const resolvedConfig = config ?? readInterfConfig(compiledPath);
54
+ if (hasSourceFolderInput(resolvedConfig)) {
55
+ return assertPathWithinRoot(compiledPath, resolve(compiledPath, resolvedConfig.source.path), "Compiled raw source path");
56
+ }
57
+ return resolve(compiledPath, "raw");
58
+ }
59
+ export function resolveSourceControlPath(compiledPath) {
60
+ return resolveSourceControlPathForCompiled(compiledPath);
61
+ }
62
+ export function resolveSourceInputPath(compiledPath) {
63
+ const config = readInterfConfig(compiledPath);
64
+ if (typeof config?.source?.dataset_path === "string" && config.source.dataset_path.length > 0) {
65
+ const projectPath = resolveSourceControlPathForCompiled(compiledPath);
66
+ return assertPathWithinRoot(projectPath, resolve(compiledPath, config.source.dataset_path), "Dataset source path");
67
+ }
68
+ throw new Error(`Context folder is missing source.dataset_path in ${compiledInterfConfigPath(compiledPath)}.`);
69
+ }
70
+ export function listCompiledDatasetsForSourceFolder(sourcePath) {
71
+ const interfRoot = projectInterfRoot(sourcePath);
72
+ if (!existsSync(interfRoot))
73
+ return [];
74
+ try {
75
+ if (!statSync(interfRoot).isDirectory())
76
+ return [];
77
+ }
78
+ catch (error) {
79
+ warnInterf(`Warning: failed to inspect Interf container at ${interfRoot}: ${error instanceof Error ? error.message : String(error)}`);
80
+ return [];
81
+ }
82
+ return readdirSync(interfRoot)
83
+ .filter((entry) => !entry.startsWith(".") &&
84
+ entry !== WORKFLOW_CONTAINER_NAME &&
85
+ entry !== TEST_CONTAINER_NAME)
86
+ .map((entry) => compiledCompiledPathForDataset(sourcePath, entry))
87
+ .filter((compiledPath) => existsSync(compiledPath))
88
+ .map((compiledPath) => {
89
+ const config = readInterfConfig(compiledPath);
90
+ return config ? { path: compiledPath, config } : null;
91
+ })
92
+ .filter((value) => value !== null);
93
+ }
94
+ export function assertCompiledContainer(sourcePath) {
95
+ const interfRoot = projectInterfRoot(sourcePath);
96
+ if (existsSync(interfRoot)) {
97
+ const stat = statSync(interfRoot);
98
+ if (!stat.isDirectory()) {
99
+ throw new Error(`Interf container exists and is not a directory: ${interfRoot}`);
100
+ }
101
+ const unexpectedRootEntries = readdirSync(interfRoot).filter((entry) => {
102
+ if (entry.startsWith("."))
103
+ return false;
104
+ const entryPath = join(interfRoot, entry);
105
+ if (entry === WORKFLOW_CONTAINER_NAME || entry === TEST_CONTAINER_NAME) {
106
+ try {
107
+ return !statSync(entryPath).isDirectory();
108
+ }
109
+ catch (error) {
110
+ warnInterf(`Warning: failed to inspect Interf control-plane path at ${entryPath}: ${error instanceof Error ? error.message : String(error)}`);
111
+ return true;
112
+ }
113
+ }
114
+ try {
115
+ if (!statSync(entryPath).isDirectory())
116
+ return true;
117
+ }
118
+ catch (error) {
119
+ warnInterf(`Warning: failed to inspect Interf entry at ${entryPath}: ${error instanceof Error ? error.message : String(error)}`);
120
+ return true;
121
+ }
122
+ return false;
123
+ });
124
+ if (unexpectedRootEntries.length > 0) {
125
+ throw new Error(`Interf container contains unexpected entries: ${interfRoot}`);
126
+ }
127
+ }
128
+ const containerPath = interfRoot;
129
+ if (!existsSync(containerPath)) {
130
+ return containerPath;
131
+ }
132
+ const stat = statSync(containerPath);
133
+ if (!stat.isDirectory()) {
134
+ throw new Error(`Interf container exists and is not a directory: ${containerPath}`);
135
+ }
136
+ const unexpectedEntries = readdirSync(containerPath).filter((entry) => {
137
+ if (entry.startsWith("."))
138
+ return false;
139
+ if (entry === WORKFLOW_CONTAINER_NAME || entry === TEST_CONTAINER_NAME)
140
+ return false;
141
+ const entryPath = join(containerPath, entry);
142
+ try {
143
+ if (!statSync(entryPath).isDirectory())
144
+ return true;
145
+ }
146
+ catch (error) {
147
+ warnInterf(`Warning: failed to inspect Interf entry at ${entryPath}: ${error instanceof Error ? error.message : String(error)}`);
148
+ return true;
149
+ }
150
+ const compiledPath = compiledCompiledPathForDataset(sourcePath, entry);
151
+ if (!existsSync(compiledPath)) {
152
+ return false;
153
+ }
154
+ return !readInterfConfig(compiledPath);
155
+ });
156
+ if (unexpectedEntries.length > 0) {
157
+ throw new Error(`Interf container contains invalid dataset entries: ${containerPath}`);
158
+ }
159
+ return containerPath;
160
+ }
161
+ export function assertWritableTargetDir(dirPath, label) {
162
+ if (!existsSync(dirPath))
163
+ return;
164
+ const stat = statSync(dirPath);
165
+ if (!stat.isDirectory()) {
166
+ throw new Error(`${label} target exists and is not a directory: ${dirPath}`);
167
+ }
168
+ if (readdirSync(dirPath).length > 0) {
169
+ throw new Error(`${label} target already exists and is not empty: ${dirPath}`);
170
+ }
171
+ }
172
+ export function assertCompiledName(name, label) {
173
+ if (!/^[a-z0-9][a-z0-9-]*$/.test(name)) {
174
+ throw new Error(`${label} name must be a safe slug with lowercase letters, numbers, and dashes only: ${name}`);
175
+ }
176
+ }
@@ -0,0 +1,2 @@
1
+ export declare function createCompiled(name: string, sourcePath: string, workflowId?: string, about?: string, datasetPath?: string): string;
2
+ export declare function defaultCompiledNameForSource(sourcePath: string): string;