@interf/compiler 0.18.0 → 0.22.0

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 (369) hide show
  1. package/dist/cli/commands/build-plan.d.ts +2 -0
  2. package/dist/cli/commands/build-plan.js +376 -0
  3. package/dist/cli/commands/{compile.d.ts → build.d.ts} +2 -2
  4. package/dist/cli/commands/{compile.js → build.js} +18 -18
  5. package/dist/cli/commands/doctor.js +2 -2
  6. package/dist/cli/commands/mcp.d.ts +0 -34
  7. package/dist/cli/commands/mcp.js +261 -60
  8. package/dist/cli/commands/prep.js +67 -35
  9. package/dist/cli/commands/reset.d.ts +1 -1
  10. package/dist/cli/commands/reset.js +6 -6
  11. package/dist/cli/commands/runs.js +105 -33
  12. package/dist/cli/commands/status.js +4 -2
  13. package/dist/cli/commands/test.d.ts +10 -0
  14. package/dist/cli/commands/{verify.js → test.js} +19 -21
  15. package/dist/cli/commands/web.js +82 -8
  16. package/dist/cli/commands/wizard.js +63 -64
  17. package/dist/cli/index.d.ts +4 -4
  18. package/dist/cli/index.js +7 -7
  19. package/dist/interf-ui/404.html +1 -0
  20. package/dist/interf-ui/__next.__PAGE__.txt +10 -0
  21. package/dist/{compiler-ui → interf-ui}/__next._full.txt +12 -12
  22. package/dist/interf-ui/__next._head.txt +5 -0
  23. package/dist/{compiler-ui → interf-ui}/__next._index.txt +4 -4
  24. package/dist/{compiler-ui → interf-ui}/__next._tree.txt +3 -3
  25. package/dist/interf-ui/_next/static/chunks/0.tjb6f4golw..css +3 -0
  26. package/dist/interf-ui/_next/static/chunks/085-n_jv2ng_q.css +1 -0
  27. package/dist/{compiler-ui/_next/static/chunks/0_i-3_5l9t2qe.js → interf-ui/_next/static/chunks/0dn41fa_zvgsl.js} +1 -1
  28. package/dist/interf-ui/_next/static/chunks/0g-ea0zj5d-0k.js +1 -0
  29. package/dist/interf-ui/_next/static/chunks/0gwqglc4iz583.js +1 -0
  30. package/dist/interf-ui/_next/static/chunks/0haldgm65ve6l.js +1 -0
  31. package/dist/{compiler-ui/_next/static/chunks/08g7lvje.te.u.js → interf-ui/_next/static/chunks/0nv3am99vjzn4.js} +1 -1
  32. package/dist/{compiler-ui/_next/static/chunks/0n51hrfoufc7g.js → interf-ui/_next/static/chunks/0s77gt_o4jwtx.js} +1 -1
  33. package/dist/interf-ui/_next/static/chunks/0~a36ujuzpaz..js +116 -0
  34. package/dist/interf-ui/_next/static/chunks/10jeodxe4nkgj.js +31 -0
  35. package/dist/interf-ui/_next/static/chunks/119h2rouych2t.js +1 -0
  36. package/dist/interf-ui/_next/static/chunks/13c8b~m8knjsf.js +1 -0
  37. package/dist/{compiler-ui/_next/static/chunks/08m7vf5asqlsm.js → interf-ui/_next/static/chunks/14dznb2qpt-ho.js} +5 -5
  38. package/dist/interf-ui/_next/static/chunks/15z_en80lrq-3.js +5 -0
  39. package/dist/{compiler-ui/_next/static/chunks/turbopack-10e~t1yzi4svj.js → interf-ui/_next/static/chunks/turbopack-0p.pvcjrtq-jh.js} +1 -1
  40. package/dist/interf-ui/_next/static/chunks/turbopack-0usj_75.8frlw.js +1 -0
  41. package/dist/{compiler-ui → interf-ui}/_not-found/__next._full.txt +9 -9
  42. package/dist/interf-ui/_not-found/__next._head.txt +5 -0
  43. package/dist/{compiler-ui → interf-ui}/_not-found/__next._index.txt +4 -4
  44. package/dist/{compiler-ui → interf-ui}/_not-found/__next._not-found.__PAGE__.txt +2 -2
  45. package/dist/interf-ui/_not-found/__next._not-found.txt +5 -0
  46. package/dist/{compiler-ui → interf-ui}/_not-found/__next._tree.txt +2 -2
  47. package/dist/interf-ui/_not-found.html +1 -0
  48. package/dist/{compiler-ui → interf-ui}/_not-found.txt +9 -9
  49. package/dist/interf-ui/index.html +1 -0
  50. package/dist/{compiler-ui → interf-ui}/index.txt +12 -12
  51. package/dist/packages/build-plans/authoring/build-plan-authoring.d.ts +36 -0
  52. package/dist/packages/{methods/authoring/method-authoring.js → build-plans/authoring/build-plan-authoring.js} +57 -88
  53. package/dist/packages/build-plans/authoring/build-plan-edit-session.d.ts +18 -0
  54. package/dist/packages/{methods/authoring/method-edit-session.js → build-plans/authoring/build-plan-edit-session.js} +34 -34
  55. package/dist/packages/build-plans/authoring/build-plan-improvement.d.ts +23 -0
  56. package/dist/packages/build-plans/authoring/build-plan-improvement.js +216 -0
  57. package/dist/packages/build-plans/authoring/index.d.ts +4 -0
  58. package/dist/packages/build-plans/authoring/index.js +4 -0
  59. package/dist/packages/{methods/authoring/lib/method-edit-utils.d.ts → build-plans/authoring/lib/build-plan-edit-utils.d.ts} +3 -3
  60. package/dist/packages/build-plans/build-plan-resolution.d.ts +6 -0
  61. package/dist/packages/build-plans/build-plan-resolution.js +7 -0
  62. package/dist/packages/build-plans/index.d.ts +2 -0
  63. package/dist/packages/build-plans/index.js +2 -0
  64. package/dist/packages/build-plans/package/build-plan-definitions.d.ts +61 -0
  65. package/dist/packages/build-plans/package/build-plan-definitions.js +214 -0
  66. package/dist/packages/{methods/package/method-helpers.d.ts → build-plans/package/build-plan-helpers.d.ts} +7 -7
  67. package/dist/packages/{methods/package/method-helpers.js → build-plans/package/build-plan-helpers.js} +20 -20
  68. package/dist/packages/build-plans/package/build-plan-review-paths.d.ts +10 -0
  69. package/dist/packages/build-plans/package/build-plan-review-paths.js +31 -0
  70. package/dist/packages/{methods/package/method-stage-runner.d.ts → build-plans/package/build-plan-stage-runner.d.ts} +12 -12
  71. package/dist/packages/{methods/package/method-stage-runner.js → build-plans/package/build-plan-stage-runner.js} +10 -10
  72. package/dist/packages/build-plans/package/builtin-build-plan.d.ts +37 -0
  73. package/dist/packages/build-plans/package/builtin-build-plan.js +91 -0
  74. package/dist/packages/{methods → build-plans}/package/context-interface.d.ts +11 -11
  75. package/dist/packages/{methods → build-plans}/package/context-interface.js +23 -23
  76. package/dist/packages/build-plans/package/interf-build-plan-package.d.ts +31 -0
  77. package/dist/packages/build-plans/package/interf-build-plan-package.js +466 -0
  78. package/dist/packages/{methods → build-plans}/package/lib/package-root.js +1 -1
  79. package/dist/packages/build-plans/package/local-build-plans.d.ts +74 -0
  80. package/dist/packages/build-plans/package/local-build-plans.js +472 -0
  81. package/dist/packages/build-plans/package/user-build-plans.d.ts +17 -0
  82. package/dist/packages/build-plans/package/user-build-plans.js +77 -0
  83. package/dist/packages/contracts/index.d.ts +1 -1
  84. package/dist/packages/contracts/lib/preparation-paths.d.ts +37 -37
  85. package/dist/packages/contracts/lib/preparation-paths.js +43 -43
  86. package/dist/packages/contracts/lib/schema.d.ts +38 -41
  87. package/dist/packages/contracts/lib/schema.js +44 -35
  88. package/dist/packages/engine/action-definitions.d.ts +228 -67
  89. package/dist/packages/engine/action-definitions.js +277 -273
  90. package/dist/packages/engine/action-planner.d.ts +2 -2
  91. package/dist/packages/engine/action-planner.js +8 -15
  92. package/dist/packages/engine/action-values.d.ts +1 -1
  93. package/dist/packages/engine/action-values.js +1 -1
  94. package/dist/packages/engine/agents/index.d.ts +2 -2
  95. package/dist/packages/engine/agents/index.js +1 -1
  96. package/dist/packages/engine/agents/lib/args.d.ts +2 -2
  97. package/dist/packages/engine/agents/lib/args.js +1 -1
  98. package/dist/packages/engine/agents/lib/constants.js +1 -1
  99. package/dist/packages/engine/agents/lib/execution-profile.d.ts +5 -5
  100. package/dist/packages/engine/agents/lib/execution-profile.js +3 -3
  101. package/dist/packages/engine/agents/lib/executors.d.ts +11 -11
  102. package/dist/packages/engine/agents/lib/render.js +4 -4
  103. package/dist/packages/engine/agents/lib/shells.d.ts +33 -31
  104. package/dist/packages/engine/agents/lib/shells.js +254 -250
  105. package/dist/packages/engine/agents/lib/types.d.ts +2 -2
  106. package/dist/packages/engine/agents/lib/verifiable-context-bootstrap.d.ts +3 -0
  107. package/dist/packages/engine/agents/lib/verifiable-context-bootstrap.js +19 -0
  108. package/dist/packages/engine/agents/role-executors.d.ts +7 -7
  109. package/dist/packages/engine/agents/role-executors.js +2 -2
  110. package/dist/packages/engine/agents/role-router.d.ts +2 -2
  111. package/dist/packages/engine/agents/role-router.js +1 -1
  112. package/dist/packages/engine/build/artifact-counts.d.ts +1 -0
  113. package/dist/packages/engine/{compile → build}/artifact-counts.js +7 -7
  114. package/dist/packages/engine/{compile → build}/artifact-status.d.ts +8 -8
  115. package/dist/packages/engine/{compile → build}/artifact-status.js +19 -19
  116. package/dist/packages/engine/{compile → build}/billing-events.d.ts +4 -4
  117. package/dist/packages/engine/{compile → build}/billing-events.js +4 -4
  118. package/dist/packages/engine/build/build-execution.d.ts +4 -0
  119. package/dist/packages/engine/build/build-execution.js +4 -0
  120. package/dist/packages/engine/build/build-pipeline.d.ts +56 -0
  121. package/dist/packages/engine/{compile/compiled-pipeline.js → build/build-pipeline.js} +55 -55
  122. package/dist/packages/engine/build/build-plan-primitives.d.ts +2 -0
  123. package/dist/packages/engine/{compile/method-primitives.js → build/build-plan-primitives.js} +1 -1
  124. package/dist/packages/engine/build/build-plan-runs.d.ts +14 -0
  125. package/dist/packages/engine/build/build-plan-runs.js +31 -0
  126. package/dist/packages/engine/build/build-stage-plan.d.ts +16 -0
  127. package/dist/packages/engine/build/build-stage-plan.js +100 -0
  128. package/dist/packages/engine/build/build-stage-runner.d.ts +15 -0
  129. package/dist/packages/engine/{compile/compiled-stage-runner.js → build/build-stage-runner.js} +21 -21
  130. package/dist/packages/engine/build/build-target.d.ts +11 -0
  131. package/dist/packages/engine/build/build-target.js +16 -0
  132. package/dist/packages/engine/{compile → build}/check-evaluator.d.ts +4 -4
  133. package/dist/packages/engine/{compile → build}/check-evaluator.js +1 -1
  134. package/dist/packages/engine/{compile → build}/discovery.d.ts +2 -2
  135. package/dist/packages/engine/{compile → build}/discovery.js +4 -4
  136. package/dist/packages/engine/{compile → build}/index.d.ts +6 -6
  137. package/dist/packages/engine/{compile → build}/index.js +5 -5
  138. package/dist/packages/engine/{compile → build}/lib/schema.d.ts +79 -79
  139. package/dist/packages/engine/{compile → build}/lib/schema.js +71 -71
  140. package/dist/packages/engine/build/reset.d.ts +2 -0
  141. package/dist/packages/engine/build/reset.js +74 -0
  142. package/dist/packages/engine/{compile → build}/runtime-contracts.js +8 -8
  143. package/dist/packages/engine/build/runtime-inventory.d.ts +7 -0
  144. package/dist/packages/engine/{compile → build}/runtime-inventory.js +8 -8
  145. package/dist/packages/engine/{compile → build}/runtime-paths.js +6 -6
  146. package/dist/packages/engine/{compile → build}/runtime-prompt.js +11 -11
  147. package/dist/packages/engine/build/runtime-reconcile.d.ts +2 -0
  148. package/dist/packages/engine/{compile → build}/runtime-reconcile.js +18 -18
  149. package/dist/packages/engine/{compile → build}/runtime-runs.js +27 -27
  150. package/dist/packages/engine/{compile → build}/runtime-types.d.ts +10 -10
  151. package/dist/packages/engine/build/source-files.d.ts +46 -0
  152. package/dist/packages/engine/{compile → build}/source-files.js +32 -32
  153. package/dist/packages/engine/build/state-artifacts.d.ts +9 -0
  154. package/dist/packages/engine/build/state-artifacts.js +14 -0
  155. package/dist/packages/engine/build/state-health.d.ts +4 -0
  156. package/dist/packages/engine/{compile → build}/state-health.js +40 -40
  157. package/dist/packages/engine/build/state-io.d.ts +11 -0
  158. package/dist/packages/engine/{compile → build}/state-io.js +22 -22
  159. package/dist/packages/engine/build/state-paths.js +16 -0
  160. package/dist/packages/engine/build/state-view.d.ts +5 -0
  161. package/dist/packages/engine/{compile → build}/state-view.js +29 -29
  162. package/dist/packages/engine/build/state.d.ts +7 -0
  163. package/dist/packages/engine/build/state.js +12 -0
  164. package/dist/packages/engine/build/validate-verifiable-context.d.ts +27 -0
  165. package/dist/packages/engine/{compile/validate-compiled.js → build/validate-verifiable-context.js} +73 -73
  166. package/dist/packages/engine/{compile → build}/validate.d.ts +4 -4
  167. package/dist/packages/engine/{compile → build}/validate.js +27 -27
  168. package/dist/packages/engine/build/verifiable-context-paths.d.ts +47 -0
  169. package/dist/packages/engine/build/verifiable-context-paths.js +121 -0
  170. package/dist/packages/engine/build/verifiable-context-schema.d.ts +21 -0
  171. package/dist/packages/engine/build/verifiable-context-schema.js +126 -0
  172. package/dist/packages/engine/client.d.ts +16 -16
  173. package/dist/packages/engine/client.js +21 -21
  174. package/dist/packages/engine/cloud-seams.d.ts +3 -3
  175. package/dist/packages/engine/connection-config.js +1 -1
  176. package/dist/packages/engine/execution/index.d.ts +2 -2
  177. package/dist/packages/engine/execution/index.js +1 -1
  178. package/dist/packages/engine/execution/lib/schema.d.ts +100 -95
  179. package/dist/packages/engine/execution/lib/schema.js +31 -31
  180. package/dist/packages/engine/index.d.ts +7 -7
  181. package/dist/packages/engine/index.js +3 -3
  182. package/dist/packages/engine/instance-paths.d.ts +45 -39
  183. package/dist/packages/engine/instance-paths.js +54 -48
  184. package/dist/packages/engine/lib/schema.d.ts +1568 -484
  185. package/dist/packages/engine/lib/schema.js +172 -161
  186. package/dist/packages/engine/native-run-handlers.d.ts +12 -12
  187. package/dist/packages/engine/native-run-handlers.js +138 -136
  188. package/dist/packages/engine/preparation-store.d.ts +31 -36
  189. package/dist/packages/engine/preparation-store.js +42 -31
  190. package/dist/packages/engine/readiness-check-draft.d.ts +2 -2
  191. package/dist/packages/engine/readiness-check-draft.js +1 -1
  192. package/dist/packages/engine/requested-artifacts.d.ts +5 -0
  193. package/dist/packages/engine/requested-artifacts.js +36 -0
  194. package/dist/packages/engine/routes.d.ts +18 -17
  195. package/dist/packages/engine/routes.js +20 -19
  196. package/dist/packages/engine/run-observability.d.ts +5 -3
  197. package/dist/packages/engine/run-observability.js +103 -90
  198. package/dist/packages/engine/runtime-caches.d.ts +16 -16
  199. package/dist/packages/engine/runtime-caches.js +26 -26
  200. package/dist/packages/engine/runtime-event-applier.d.ts +2 -2
  201. package/dist/packages/engine/runtime-event-applier.js +1 -1
  202. package/dist/packages/engine/runtime-persistence.d.ts +9 -9
  203. package/dist/packages/engine/runtime-persistence.js +16 -16
  204. package/dist/packages/engine/runtime-proposal-helpers.d.ts +15 -15
  205. package/dist/packages/engine/runtime-proposal-helpers.js +81 -85
  206. package/dist/packages/engine/runtime-resource-builders.d.ts +16 -11
  207. package/dist/packages/engine/runtime-resource-builders.js +32 -21
  208. package/dist/packages/engine/runtime.d.ts +53 -60
  209. package/dist/packages/engine/runtime.js +555 -453
  210. package/dist/packages/engine/server.d.ts +2 -2
  211. package/dist/packages/engine/server.js +226 -143
  212. package/dist/packages/engine/service-registry.d.ts +5 -17
  213. package/dist/packages/engine/service-registry.js +5 -20
  214. package/dist/packages/engine/verify/lib/schema.d.ts +19 -19
  215. package/dist/packages/engine/verify/lib/schema.js +36 -8
  216. package/dist/packages/engine/verify/readiness-check-run.d.ts +15 -16
  217. package/dist/packages/engine/verify/readiness-check-run.js +46 -46
  218. package/dist/packages/engine/verify/verify-execution.d.ts +3 -3
  219. package/dist/packages/engine/verify/verify-execution.js +10 -10
  220. package/dist/packages/engine/verify/verify-paths.d.ts +4 -4
  221. package/dist/packages/engine/verify/verify-paths.js +17 -17
  222. package/dist/packages/engine/verify/verify-sandbox.d.ts +1 -1
  223. package/dist/packages/engine/verify/verify-sandbox.js +26 -26
  224. package/dist/packages/engine/verify/verify-targets.d.ts +2 -2
  225. package/dist/packages/engine/verify/verify-targets.js +17 -17
  226. package/dist/packages/engine/verify/verify-types.d.ts +2 -2
  227. package/dist/packages/engine/verify/verify.d.ts +1 -1
  228. package/dist/packages/engine/verify/verify.js +1 -1
  229. package/dist/packages/engine/wire-schemas.d.ts +42 -40
  230. package/dist/packages/engine/wire-schemas.js +13 -13
  231. package/dist/packages/project/index.d.ts +1 -1
  232. package/dist/packages/project/interf-bootstrap.d.ts +1 -1
  233. package/dist/packages/project/interf-bootstrap.js +1 -1
  234. package/dist/packages/project/interf-detect.d.ts +11 -11
  235. package/dist/packages/project/interf-detect.js +36 -36
  236. package/dist/packages/project/interf-scaffold.d.ts +3 -3
  237. package/dist/packages/project/interf-scaffold.js +72 -72
  238. package/dist/packages/project/interf.d.ts +4 -4
  239. package/dist/packages/project/interf.js +3 -3
  240. package/dist/packages/project/lib/schema.d.ts +205 -12
  241. package/dist/packages/project/lib/schema.js +59 -14
  242. package/dist/packages/project/preparation-entries.d.ts +3 -3
  243. package/dist/packages/project/preparation-entries.js +19 -19
  244. package/dist/packages/project/source-config.d.ts +10 -10
  245. package/dist/packages/project/source-config.js +62 -58
  246. package/dist/packages/project/source-folders.js +1 -1
  247. package/package.json +14 -17
  248. package/public-repo/CONTRIBUTING.md +47 -0
  249. package/public-repo/README.md +327 -0
  250. package/public-repo/SECURITY.md +67 -0
  251. package/public-repo/build-plans/interf-default/README.md +33 -0
  252. package/public-repo/build-plans/interf-default/build/stages/shape/SKILL.md +27 -0
  253. package/{builtin-methods/interf-default/compile → public-repo/build-plans/interf-default/build}/stages/structure/SKILL.md +2 -2
  254. package/{builtin-methods/interf-default/compile → public-repo/build-plans/interf-default/build}/stages/summarize/SKILL.md +1 -1
  255. package/{builtin-methods/interf-default/method.json → public-repo/build-plans/interf-default/build-plan.json} +16 -16
  256. package/{builtin-methods/interf-default/method.schema.json → public-repo/build-plans/interf-default/build-plan.schema.json} +4 -4
  257. package/public-repo/build-plans/interf-default/improve/SKILL.md +18 -0
  258. package/public-repo/build-plans/interf-default/use/query/SKILL.md +23 -0
  259. package/public-repo/plugins/README.md +9 -0
  260. package/public-repo/plugins/interf/.claude-plugin/plugin.json +21 -0
  261. package/public-repo/plugins/interf/.mcp.json +12 -0
  262. package/public-repo/plugins/interf/README.md +32 -0
  263. package/public-repo/plugins/interf/skills/interf/SKILL.md +376 -0
  264. package/public-repo/skills/interf/SKILL.md +376 -0
  265. package/README.md +0 -311
  266. package/agent-skills/interf-actions/SKILL.md +0 -185
  267. package/agent-skills/interf-actions/references/cli.md +0 -243
  268. package/builtin-methods/interf-default/README.md +0 -29
  269. package/builtin-methods/interf-default/compile/stages/shape/SKILL.md +0 -31
  270. package/builtin-methods/interf-default/improve/SKILL.md +0 -18
  271. package/builtin-methods/interf-default/use/query/SKILL.md +0 -28
  272. package/dist/cli/commands/method.d.ts +0 -2
  273. package/dist/cli/commands/method.js +0 -113
  274. package/dist/cli/commands/verify.d.ts +0 -10
  275. package/dist/compiler-ui/404.html +0 -1
  276. package/dist/compiler-ui/__next.__PAGE__.txt +0 -10
  277. package/dist/compiler-ui/__next._head.txt +0 -5
  278. package/dist/compiler-ui/_next/static/chunks/06yhdspx~ca5-.js +0 -5
  279. package/dist/compiler-ui/_next/static/chunks/06z~l3kwb891e.js +0 -1
  280. package/dist/compiler-ui/_next/static/chunks/0_c_tvh-cukjz.css +0 -3
  281. package/dist/compiler-ui/_next/static/chunks/0b-ywny_j0g~0.js +0 -1
  282. package/dist/compiler-ui/_next/static/chunks/0b52v41o1gixx.js +0 -1
  283. package/dist/compiler-ui/_next/static/chunks/0f_geuwdesg_c.js +0 -114
  284. package/dist/compiler-ui/_next/static/chunks/0gpzgsv0w.q~m.js +0 -31
  285. package/dist/compiler-ui/_next/static/chunks/0ilwfezfvu6~-.js +0 -1
  286. package/dist/compiler-ui/_next/static/chunks/0xxmf45eskdt~.css +0 -1
  287. package/dist/compiler-ui/_next/static/chunks/14wtz~vq25~qq.js +0 -1
  288. package/dist/compiler-ui/_next/static/chunks/turbopack-0.uq1k8c0j4s..js +0 -1
  289. package/dist/compiler-ui/_not-found/__next._head.txt +0 -5
  290. package/dist/compiler-ui/_not-found/__next._not-found.txt +0 -5
  291. package/dist/compiler-ui/_not-found.html +0 -1
  292. package/dist/compiler-ui/index.html +0 -1
  293. package/dist/packages/engine/agents/lib/compiled-bootstrap.d.ts +0 -3
  294. package/dist/packages/engine/agents/lib/compiled-bootstrap.js +0 -19
  295. package/dist/packages/engine/compile/artifact-counts.d.ts +0 -1
  296. package/dist/packages/engine/compile/compiled-compile.d.ts +0 -4
  297. package/dist/packages/engine/compile/compiled-compile.js +0 -4
  298. package/dist/packages/engine/compile/compiled-paths.d.ts +0 -47
  299. package/dist/packages/engine/compile/compiled-paths.js +0 -121
  300. package/dist/packages/engine/compile/compiled-pipeline.d.ts +0 -56
  301. package/dist/packages/engine/compile/compiled-schema.d.ts +0 -21
  302. package/dist/packages/engine/compile/compiled-schema.js +0 -126
  303. package/dist/packages/engine/compile/compiled-stage-plan.d.ts +0 -16
  304. package/dist/packages/engine/compile/compiled-stage-plan.js +0 -100
  305. package/dist/packages/engine/compile/compiled-stage-runner.d.ts +0 -15
  306. package/dist/packages/engine/compile/compiled-target.d.ts +0 -11
  307. package/dist/packages/engine/compile/compiled-target.js +0 -16
  308. package/dist/packages/engine/compile/method-primitives.d.ts +0 -2
  309. package/dist/packages/engine/compile/method-runs.d.ts +0 -14
  310. package/dist/packages/engine/compile/method-runs.js +0 -31
  311. package/dist/packages/engine/compile/reset.d.ts +0 -2
  312. package/dist/packages/engine/compile/reset.js +0 -74
  313. package/dist/packages/engine/compile/runtime-inventory.d.ts +0 -7
  314. package/dist/packages/engine/compile/runtime-reconcile.d.ts +0 -2
  315. package/dist/packages/engine/compile/source-files.d.ts +0 -46
  316. package/dist/packages/engine/compile/state-artifacts.d.ts +0 -9
  317. package/dist/packages/engine/compile/state-artifacts.js +0 -14
  318. package/dist/packages/engine/compile/state-health.d.ts +0 -4
  319. package/dist/packages/engine/compile/state-io.d.ts +0 -11
  320. package/dist/packages/engine/compile/state-paths.js +0 -16
  321. package/dist/packages/engine/compile/state-view.d.ts +0 -5
  322. package/dist/packages/engine/compile/state.d.ts +0 -7
  323. package/dist/packages/engine/compile/state.js +0 -12
  324. package/dist/packages/engine/compile/validate-compiled.d.ts +0 -27
  325. package/dist/packages/methods/authoring/index.d.ts +0 -4
  326. package/dist/packages/methods/authoring/index.js +0 -4
  327. package/dist/packages/methods/authoring/method-authoring.d.ts +0 -34
  328. package/dist/packages/methods/authoring/method-edit-session.d.ts +0 -18
  329. package/dist/packages/methods/authoring/method-improvement.d.ts +0 -23
  330. package/dist/packages/methods/authoring/method-improvement.js +0 -217
  331. package/dist/packages/methods/index.d.ts +0 -2
  332. package/dist/packages/methods/index.js +0 -2
  333. package/dist/packages/methods/method-resolution.d.ts +0 -6
  334. package/dist/packages/methods/method-resolution.js +0 -7
  335. package/dist/packages/methods/package/builtin-compiled-method.d.ts +0 -37
  336. package/dist/packages/methods/package/builtin-compiled-method.js +0 -91
  337. package/dist/packages/methods/package/interf-method-package.d.ts +0 -31
  338. package/dist/packages/methods/package/interf-method-package.js +0 -466
  339. package/dist/packages/methods/package/local-methods.d.ts +0 -73
  340. package/dist/packages/methods/package/local-methods.js +0 -457
  341. package/dist/packages/methods/package/method-definitions.d.ts +0 -61
  342. package/dist/packages/methods/package/method-definitions.js +0 -214
  343. package/dist/packages/methods/package/method-review-paths.d.ts +0 -10
  344. package/dist/packages/methods/package/method-review-paths.js +0 -31
  345. package/dist/packages/methods/package/user-methods.d.ts +0 -17
  346. package/dist/packages/methods/package/user-methods.js +0 -77
  347. /package/dist/{compiler-ui/_next/static/6qyE1u9m_oBUkvAhhoCmO → interf-ui/_next/static/_qJKnA0dammQ306MG_zMq}/_buildManifest.js +0 -0
  348. /package/dist/{compiler-ui/_next/static/6qyE1u9m_oBUkvAhhoCmO → interf-ui/_next/static/_qJKnA0dammQ306MG_zMq}/_clientMiddlewareManifest.js +0 -0
  349. /package/dist/{compiler-ui/_next/static/6qyE1u9m_oBUkvAhhoCmO → interf-ui/_next/static/_qJKnA0dammQ306MG_zMq}/_ssgManifest.js +0 -0
  350. /package/dist/{compiler-ui → interf-ui}/_next/static/chunks/03~yq9q893hmn.js +0 -0
  351. /package/dist/{compiler-ui → interf-ui}/_next/static/chunks/0y5z3t-z1c8ks.js.map +0 -0
  352. /package/dist/{compiler-ui → interf-ui}/_next/static/chunks/turbopack-worker-0sjn--fhq~1cg.js +0 -0
  353. /package/dist/{compiler-ui → interf-ui}/_next/static/media/GeistMono_Variable.p.17jn9btb_52pq.woff2 +0 -0
  354. /package/dist/{compiler-ui → interf-ui}/_next/static/media/Geist_Variable-s.p.0-te~ja_gpvcf.woff2 +0 -0
  355. /package/dist/{compiler-ui → interf-ui}/_next/static/media/worker.102zas1s52_pf.js +0 -0
  356. /package/dist/packages/{methods/authoring/lib/method-edit-utils.js → build-plans/authoring/lib/build-plan-edit-utils.js} +0 -0
  357. /package/dist/packages/{methods → build-plans}/package/lib/package-root.d.ts +0 -0
  358. /package/dist/packages/engine/{compile → build}/runtime-contracts.d.ts +0 -0
  359. /package/dist/packages/engine/{compile → build}/runtime-paths.d.ts +0 -0
  360. /package/dist/packages/engine/{compile → build}/runtime-prompt.d.ts +0 -0
  361. /package/dist/packages/engine/{compile → build}/runtime-runs.d.ts +0 -0
  362. /package/dist/packages/engine/{compile → build}/runtime-types.js +0 -0
  363. /package/dist/packages/engine/{compile → build}/runtime.d.ts +0 -0
  364. /package/dist/packages/engine/{compile → build}/runtime.js +0 -0
  365. /package/dist/packages/engine/{compile → build}/state-paths.d.ts +0 -0
  366. /package/dist/packages/engine/{compile → build}/validate-helpers.d.ts +0 -0
  367. /package/dist/packages/engine/{compile → build}/validate-helpers.js +0 -0
  368. /package/{LICENSE.md → public-repo/LICENSE.md} +0 -0
  369. /package/{TRADEMARKS.md → public-repo/TRADEMARKS.md} +0 -0
@@ -1,8 +1,8 @@
1
1
  /**
2
- * `interf reset <prep-id>` — reset a preparation's compile output (or all state).
2
+ * `interf reset <prep-id>` — reset a preparation's built output (or all state).
3
3
  *
4
- * interf reset bristol # default mode = compile
5
- * interf reset bristol --mode all # also clear method draft / runs
4
+ * interf reset bristol # default mode = build
5
+ * interf reset bristol --mode all # also clear Build Plan draft / runs
6
6
  */
7
7
  import chalk from "chalk";
8
8
  import { CONNECT_OR_ERROR_HINT, readActiveConnection } from "../../packages/engine/connection-config.js";
@@ -29,13 +29,13 @@ async function callJson(url, token, init = {}) {
29
29
  }
30
30
  export const resetCommand = {
31
31
  command: "reset <prep-id>",
32
- describe: "Reset a preparation's compile output",
32
+ describe: "Reset a preparation's built output",
33
33
  builder: (yargs) => yargs
34
34
  .positional("prep-id", { type: "string", demandOption: true, describe: "Preparation id" })
35
35
  .option("mode", {
36
36
  type: "string",
37
- choices: ["compile", "all"],
38
- default: "compile",
37
+ choices: ["build", "all"],
38
+ default: "build",
39
39
  describe: "Scope of the reset",
40
40
  })
41
41
  .option("url", { type: "string", describe: "Override the active connection URL" })
@@ -4,11 +4,8 @@
4
4
  * interf runs ls [--prep <id>]
5
5
  * interf runs status <run-id>
6
6
  * interf runs cancel <run-id>
7
- * interf runs fetch <run-id> --to <path>
8
7
  */
9
8
  import chalk from "chalk";
10
- import { mkdirSync, writeFileSync } from "node:fs";
11
- import { dirname, isAbsolute, resolve } from "node:path";
12
9
  import { CONNECT_OR_ERROR_HINT, readActiveConnection } from "../../packages/engine/connection-config.js";
13
10
  function resolveConnection(args) {
14
11
  const conn = readActiveConnection({
@@ -40,6 +37,90 @@ async function callJson(url, token, init = {}) {
40
37
  }
41
38
  return { status: response.status, body, raw };
42
39
  }
40
+ function runStatusColor(status) {
41
+ if (status === "succeeded" || status === "completed")
42
+ return chalk.green;
43
+ if (status === "failed" || status === "cancelled")
44
+ return chalk.red;
45
+ if (status === "running")
46
+ return chalk.yellow;
47
+ return chalk.dim;
48
+ }
49
+ function renderRunStatus(run) {
50
+ const status = run.status ?? (run.trace?.run?.error ? "failed" : "unknown");
51
+ const color = runStatusColor(status);
52
+ console.log();
53
+ console.log(` ${chalk.bold(run.title ?? run.run_id)} ${color(`(${status})`)}`);
54
+ console.log(chalk.dim(` run: ${run.run_id}`));
55
+ if (run.run_type)
56
+ console.log(chalk.dim(` type: ${run.run_type}`));
57
+ if (run.preparation)
58
+ console.log(chalk.dim(` preparation: ${run.preparation}`));
59
+ if (run.build_plan)
60
+ console.log(chalk.dim(` Build Plan: ${run.build_plan}`));
61
+ if (run.agent_label)
62
+ console.log(chalk.dim(` agent: ${run.agent_label}`));
63
+ if (run.started_at)
64
+ console.log(chalk.dim(` started: ${run.started_at}`));
65
+ if (run.finished_at)
66
+ console.log(chalk.dim(` finished: ${run.finished_at}`));
67
+ if (run.output_path ?? run.verifiable_context_path) {
68
+ console.log(chalk.dim(` output: ${run.output_path ?? run.verifiable_context_path}`));
69
+ }
70
+ if (run.trace?.run?.error?.message) {
71
+ console.log();
72
+ console.log(chalk.red(" Error"));
73
+ console.log(chalk.dim(` ${run.trace.run.error.message}`));
74
+ }
75
+ const readiness = run.readiness;
76
+ if (readiness?.status) {
77
+ console.log();
78
+ const readinessColor = readiness.ready ? chalk.green : chalk.yellow;
79
+ console.log(` readiness: ${readinessColor(readiness.status)}${readiness.summary ? chalk.dim(` (${readiness.summary})`) : ""}`);
80
+ }
81
+ const metrics = run.metrics ?? [];
82
+ if (metrics.length > 0) {
83
+ console.log();
84
+ console.log(chalk.bold(" Metrics"));
85
+ for (const metric of metrics.slice(0, 8)) {
86
+ const value = metric.value !== undefined ? `${metric.value}${metric.unit ? ` ${metric.unit}` : ""}` : "";
87
+ console.log(chalk.dim(` ${metric.label ?? "metric"}: ${value}`));
88
+ }
89
+ }
90
+ const artifacts = run.artifacts ?? [];
91
+ if (artifacts.length > 0) {
92
+ console.log();
93
+ console.log(chalk.bold(" Artifacts"));
94
+ for (const artifact of artifacts.slice(0, 12)) {
95
+ const stage = artifact.stage_id ? chalk.dim(` ← ${artifact.stage_id}`) : "";
96
+ console.log(` ${artifact.label ?? artifact.role}: ${chalk.dim(artifact.path)}${stage}`);
97
+ }
98
+ if (artifacts.length > 12)
99
+ console.log(chalk.dim(` ... ${artifacts.length - 12} more`));
100
+ }
101
+ const proof = run.proof ?? [];
102
+ if (proof.length > 0) {
103
+ console.log();
104
+ console.log(chalk.bold(" Proof"));
105
+ for (const check of proof.slice(0, 12)) {
106
+ const marker = check.ok ? chalk.green("pass") : chalk.red("fail");
107
+ console.log(` ${marker} ${check.label}${check.detail ? chalk.dim(` — ${check.detail}`) : ""}`);
108
+ }
109
+ if (proof.length > 12)
110
+ console.log(chalk.dim(` ... ${proof.length - 12} more`));
111
+ }
112
+ const events = run.trace?.events ?? [];
113
+ if (events.length > 0) {
114
+ console.log();
115
+ console.log(chalk.bold(" Recent trace"));
116
+ for (const event of events.slice(-6)) {
117
+ console.log(chalk.dim(` ${event.createdAt ?? ""} ${event.eventType ?? "event"}`.trim()));
118
+ }
119
+ }
120
+ console.log();
121
+ console.log(chalk.dim(" Run with --json for the raw run resource."));
122
+ console.log();
123
+ }
43
124
  export const runsCommand = {
44
125
  command: "runs <subcommand>",
45
126
  describe: "Inspect runs on the connected instance",
@@ -48,24 +129,23 @@ export const runsCommand = {
48
129
  .option("token", { type: "string", describe: "Override the active bearer token" })
49
130
  .command("ls", "List runs (optionally filtered by preparation)", (y) => y.option("prep", { type: "string", describe: "Filter by preparation id" }), async (args) => {
50
131
  const { url, token } = resolveConnection(args);
51
- const path = args.prep
52
- ? `/v1/preparations/${encodeURIComponent(args.prep)}/runs`
53
- : "/v1/runs";
54
- const { status, body, raw } = await callJson(`${url}${path}`, token);
132
+ const { status, body, raw } = await callJson(`${url}/v1/runs`, token);
55
133
  if (status !== 200) {
56
134
  console.error(chalk.red(`Failed to list runs (HTTP ${status}).`));
57
135
  if (raw)
58
136
  console.error(raw);
59
137
  process.exit(1);
60
138
  }
61
- const runs = body?.runs
62
- ?? (body?.compile_runs ?? []).map((r) => r.run).filter(Boolean);
63
- if (runs.length === 0) {
139
+ const runs = body?.runs ?? [];
140
+ const visibleRuns = args.prep
141
+ ? runs.filter((run) => run.preparation === args.prep)
142
+ : runs;
143
+ if (visibleRuns.length === 0) {
64
144
  console.log(chalk.dim(" No runs."));
65
145
  return;
66
146
  }
67
147
  console.log();
68
- for (const run of runs) {
148
+ for (const run of visibleRuns) {
69
149
  console.log(` ${chalk.bold(run.run_id)} ${chalk.dim(`(${run.status ?? "?"})`)}`);
70
150
  if (run.preparation)
71
151
  console.log(chalk.dim(` prep: ${run.preparation}`));
@@ -74,18 +154,28 @@ export const runsCommand = {
74
154
  }
75
155
  console.log();
76
156
  })
77
- .command("status <run-id>", "Show full record for a run", (y) => y.positional("run-id", { type: "string", demandOption: true, describe: "Run id" }), async (args) => {
157
+ .command("status <run-id>", "Show full record for a run", (y) => y
158
+ .positional("run-id", { type: "string", demandOption: true, describe: "Run id" })
159
+ .option("json", {
160
+ type: "boolean",
161
+ default: false,
162
+ describe: "Print the raw JSON record instead of the formatted summary",
163
+ }), async (args) => {
78
164
  const { url, token } = resolveConnection(args);
79
- const { status, raw } = await callJson(`${url}/v1/runs/${encodeURIComponent(args.runId)}`, token);
165
+ const { status, body, raw } = await callJson(`${url}/v1/runs/${encodeURIComponent(args.runId)}`, token);
80
166
  if (status !== 200) {
81
167
  console.error(chalk.red(`Failed to read run ${args.runId} (HTTP ${status}).`));
82
168
  process.exit(1);
83
169
  }
84
- console.log(raw);
170
+ if (args.json || !body) {
171
+ console.log(raw);
172
+ return;
173
+ }
174
+ renderRunStatus(body);
85
175
  })
86
176
  .command("cancel <run-id>", "Cancel a running run", (y) => y.positional("run-id", { type: "string", demandOption: true, describe: "Run id" }), async (args) => {
87
177
  const { url, token } = resolveConnection(args);
88
- const { status, raw } = await callJson(`${url}/v1/runs/${encodeURIComponent(args.runId)}/cancel`, token, { method: "POST", body: JSON.stringify({}) });
178
+ const { status, raw } = await callJson(`${url}/v1/build-runs/${encodeURIComponent(args.runId)}/cancel`, token, { method: "POST", body: JSON.stringify({}) });
89
179
  if (status !== 200 && status !== 202 && status !== 204) {
90
180
  console.error(chalk.red(`Failed to cancel ${args.runId} (HTTP ${status}).`));
91
181
  if (raw)
@@ -93,24 +183,6 @@ export const runsCommand = {
93
183
  process.exit(1);
94
184
  }
95
185
  console.log(chalk.green(`Cancelled ${chalk.bold(args.runId)}.`));
96
- })
97
- .command("fetch <run-id>", "Download a run's portable context", (y) => y
98
- .positional("run-id", { type: "string", demandOption: true, describe: "Run id" })
99
- .option("to", { type: "string", demandOption: true, describe: "Target path" }), async (args) => {
100
- const { url, token } = resolveConnection(args);
101
- const headers = new Headers();
102
- if (token)
103
- headers.set("authorization", `Bearer ${token}`);
104
- const response = await fetch(`${url}/v1/runs/${encodeURIComponent(args.runId)}/artifacts/portable-context`, { headers });
105
- if (response.status !== 200) {
106
- console.error(chalk.red(`Failed to fetch artifact (HTTP ${response.status}).`));
107
- process.exit(1);
108
- }
109
- const target = isAbsolute(args.to) ? args.to : resolve(process.cwd(), args.to);
110
- mkdirSync(dirname(target), { recursive: true });
111
- const buffer = Buffer.from(await response.arrayBuffer());
112
- writeFileSync(target, buffer);
113
- console.log(chalk.green(`Wrote ${target} (${buffer.length} bytes).`));
114
186
  })
115
187
  .demandCommand(1)
116
188
  .strict(),
@@ -64,12 +64,14 @@ export const statusCommand = {
64
64
  console.log();
65
65
  console.log(chalk.bold(` Preparations (${list.length})`));
66
66
  if (list.length === 0) {
67
- console.log(chalk.dim(" No preparations yet. `interf prep create <id> --source <path> --method <id>`."));
67
+ console.log(chalk.dim(" No preparations yet. `interf prep create <id> --source <path>`."));
68
68
  }
69
69
  else {
70
70
  for (const prep of list) {
71
71
  const readiness = prep.readiness?.status ?? "—";
72
- console.log(` ${chalk.bold(prep.id)} ${chalk.dim(`(${prep.method_id} · ${readiness})`)}`);
72
+ const buildPlan = prep.build_plan_id ?? "no Build Plan";
73
+ const requested = prep.requested_artifacts?.length ?? 0;
74
+ console.log(` ${chalk.bold(prep.id)} ${chalk.dim(`(${buildPlan} · ${requested} requested · ${readiness})`)}`);
73
75
  console.log(chalk.dim(` source: ${prep.source.locator}`));
74
76
  }
75
77
  }
@@ -0,0 +1,10 @@
1
+ import type { CommandModule } from "yargs";
2
+ type TestTarget = "verifiable-context" | "source-files";
3
+ interface TestArgs {
4
+ prepId: string;
5
+ target?: TestTarget;
6
+ url?: string;
7
+ token?: string;
8
+ }
9
+ export declare const testCommand: CommandModule<unknown, TestArgs>;
10
+ export {};
@@ -1,14 +1,13 @@
1
1
  /**
2
- * `interf verify <prep-id>` — verify a preparation's claim-checks via a
3
- * judge against the latest compiled portable context (default) or
4
- * against the source folder baseline (`--target source-files`). The
5
- * source-files target reveals how much value the Method actually adds.
6
- * Together with the method's structural checks (auto-run on every
7
- * `interf compile`), this feeds the preparation's overall readiness
8
- * state.
2
+ * `interf test <prep-id>` — run readiness checks for a Preparation via a
3
+ * judge against the latest verifiable context (default) or against the source
4
+ * baseline (`--target source-files`). The source-files target reveals how
5
+ * much value the Build Plan adds. Together with Build Plan Artifact checks
6
+ * (auto-run on every `interf build`), this feeds the Preparation's
7
+ * overall readiness state.
9
8
  *
10
- * interf verify bristol
11
- * interf verify bristol --target source-files
9
+ * interf test bristol
10
+ * interf test bristol --target source-files
12
11
  */
13
12
  import chalk from "chalk";
14
13
  import { CONNECT_OR_ERROR_HINT, readActiveConnection } from "../../packages/engine/connection-config.js";
@@ -42,35 +41,34 @@ async function callJson(url, token, init = {}) {
42
41
  }
43
42
  return { status: response.status, body, raw };
44
43
  }
45
- export const verifyCommand = {
46
- command: "verify <prep-id>",
47
- describe: "Verify a preparation's claim-checks against its portable context (or source-files baseline)",
44
+ export const testCommand = {
45
+ command: "test <prep-id>",
46
+ describe: "Run readiness checks against a Preparation's verifiable context (or source-files baseline)",
48
47
  builder: (yargs) => yargs
49
48
  .positional("prep-id", { type: "string", demandOption: true, describe: "Preparation id" })
50
49
  .option("target", {
51
50
  type: "string",
52
- choices: ["compiled", "source-files"],
53
- default: "compiled",
54
- describe: "Judge target: 'compiled' (default) checks the portable context, 'source-files' checks the raw source folder baseline",
51
+ choices: ["verifiable-context", "source-files"],
52
+ default: "verifiable-context",
53
+ describe: "Judge target: 'verifiable-context' (default) checks built output, 'source-files' checks the raw Source baseline",
55
54
  })
56
55
  .option("url", { type: "string", describe: "Override the active connection URL" })
57
56
  .option("token", { type: "string", describe: "Override the active bearer token" }),
58
57
  handler: async (args) => {
59
58
  const { url, token } = resolveConnection(args);
60
- // 0.15 hard-error: refuse to start a verify run if the engine has
61
- // zero connected agents — verifier-role stages can't run without
62
- // one.
59
+ // 0.15 hard-error: refuse to start a readiness-check run if the engine
60
+ // has zero connected agents — verifier-role stages can't run without one.
63
61
  const instance = await callJson(`${url}/v1/instance`, token);
64
62
  if (instance.body && instance.body.agent_count === 0) {
65
- console.error(chalk.red(" Cannot verify — no agents available."));
63
+ console.error(chalk.red(" Cannot run readiness checks — no agents available."));
66
64
  console.error(" Install Claude Code, Codex, Gemini, or another agent CLI, or");
67
65
  console.error(" register a custom CLI: `interf agents register <name> --command <cmd>`.");
68
66
  process.exit(1);
69
67
  }
70
- const target = args.target ?? "compiled";
68
+ const target = args.target ?? "verifiable-context";
71
69
  const { status, body, raw } = await callJson(`${url}/v1/preparations/${encodeURIComponent(args.prepId)}/verify-runs`, token, { method: "POST", body: JSON.stringify({ target }) });
72
70
  if (status !== 201 && status !== 200) {
73
- console.error(chalk.red(`Failed to start verify run for ${args.prepId} (HTTP ${status}).`));
71
+ console.error(chalk.red(`Failed to start readiness-check run for ${args.prepId} (HTTP ${status}).`));
74
72
  if (raw)
75
73
  console.error(raw);
76
74
  process.exit(1);
@@ -2,6 +2,7 @@
2
2
  * `interf web` — start the engine in the foreground until Ctrl-C.
3
3
  *
4
4
  * interf web # start on default port; hard error if port busy
5
+ * interf web start # start the engine in the background
5
6
  * interf web stop # send SIGTERM to the running engine
6
7
  * interf web status # print engine info via the connected URL
7
8
  *
@@ -10,11 +11,13 @@
10
11
  * connect without a pointer file.
11
12
  */
12
13
  import chalk from "chalk";
13
- import { readFileSync } from "node:fs";
14
+ import { closeSync, mkdirSync, openSync, readFileSync } from "node:fs";
15
+ import { spawn } from "node:child_process";
16
+ import { dirname } from "node:path";
14
17
  import { LOCAL_SERVICE_DEFAULT_HOST, LOCAL_SERVICE_DEFAULT_PORT, buildLocalServiceUrl, } from "../../packages/engine/routes.js";
15
18
  import { startLocalService } from "../../packages/engine/server.js";
16
19
  import { createNativeLocalServiceRunHandlers } from "../../packages/engine/native-run-handlers.js";
17
- import { CONNECT_OR_ERROR_HINT, clearConnection, readActiveConnection, } from "../../packages/engine/connection-config.js";
20
+ import { CONNECT_OR_ERROR_HINT, clearConnection, readActiveConnection, writeConnection, } from "../../packages/engine/connection-config.js";
18
21
  import { serviceRegistryPath } from "../../packages/engine/instance-paths.js";
19
22
  function packageVersionFromManifest() {
20
23
  try {
@@ -53,12 +56,6 @@ async function runWebForeground(args) {
53
56
  }
54
57
  throw error;
55
58
  }
56
- console.log();
57
- console.log(` Interf engine: ${chalk.bold(service.url)}`);
58
- console.log(` Compiler UI: ${service.url}/`);
59
- console.log(` Health: ${service.url}/health`);
60
- console.log(chalk.dim(" Press Ctrl-C to stop."));
61
- console.log();
62
59
  const shutdown = async () => {
63
60
  try {
64
61
  await service.close();
@@ -68,12 +65,84 @@ async function runWebForeground(args) {
68
65
  }
69
66
  process.exit(0);
70
67
  };
68
+ console.log();
69
+ console.log(` Interf engine: ${chalk.bold(service.url)}`);
70
+ console.log(` Interf UI: ${service.url}/`);
71
+ console.log(` Health: ${service.url}/health`);
72
+ console.log(chalk.dim(" Press Ctrl-C to stop."));
73
+ console.log();
71
74
  process.on("SIGINT", shutdown);
72
75
  process.on("SIGTERM", shutdown);
73
76
  await new Promise(() => {
74
77
  /* block forever; signals trigger shutdown */
75
78
  });
76
79
  }
80
+ async function isEngineReachable(url) {
81
+ try {
82
+ const response = await fetch(`${url}/health`);
83
+ return response.status === 200;
84
+ }
85
+ catch {
86
+ return false;
87
+ }
88
+ }
89
+ async function waitForEngine(url, timeoutMs) {
90
+ const started = Date.now();
91
+ while (Date.now() - started < timeoutMs) {
92
+ if (await isEngineReachable(url))
93
+ return true;
94
+ await new Promise((resolveWait) => setTimeout(resolveWait, 150));
95
+ }
96
+ return false;
97
+ }
98
+ function managedWebLogPath(port) {
99
+ return `${dirname(serviceRegistryPath())}/interf-web-${port}.log`;
100
+ }
101
+ async function runWebStart(args) {
102
+ const host = args.host ?? LOCAL_SERVICE_DEFAULT_HOST;
103
+ const port = args.port ?? LOCAL_SERVICE_DEFAULT_PORT;
104
+ const url = buildLocalServiceUrl({ host, port });
105
+ if (await isEngineReachable(url)) {
106
+ writeConnection({ url, auth_token: null });
107
+ console.log(chalk.green(`Interf engine already running at ${chalk.bold(url)}.`));
108
+ console.log(`Interf UI: ${url}/`);
109
+ return;
110
+ }
111
+ const binPath = process.argv[1];
112
+ if (!binPath) {
113
+ console.error(chalk.red("Cannot locate the Interf CLI entrypoint for managed start."));
114
+ console.error(`Try running \`interf web\` in a separate terminal instead.`);
115
+ process.exit(1);
116
+ }
117
+ const logPath = args.log ?? managedWebLogPath(port);
118
+ mkdirSync(dirname(logPath), { recursive: true });
119
+ const stdoutFd = openSync(logPath, "a");
120
+ const stderrFd = openSync(logPath, "a");
121
+ let child;
122
+ try {
123
+ child = spawn(process.execPath, [binPath, "web", "--host", host, "--port", String(port)], {
124
+ detached: true,
125
+ stdio: ["ignore", stdoutFd, stderrFd],
126
+ env: process.env,
127
+ });
128
+ child.unref();
129
+ }
130
+ finally {
131
+ closeSync(stdoutFd);
132
+ closeSync(stderrFd);
133
+ }
134
+ const ready = await waitForEngine(url, args.timeoutMs ?? 5000);
135
+ if (!ready) {
136
+ console.error(chalk.red(`Timed out waiting for Interf engine at ${url}.`));
137
+ console.error(`Log: ${logPath}`);
138
+ process.exit(1);
139
+ }
140
+ writeConnection({ url, auth_token: null });
141
+ console.log(chalk.green(`Started Interf engine at ${chalk.bold(url)}.`));
142
+ console.log(`Interf UI: ${url}/`);
143
+ console.log(`Log: ${logPath}`);
144
+ console.log(chalk.dim(`Stop it with \`interf web stop\`.`));
145
+ }
77
146
  function findEnginePidByUrl(url) {
78
147
  try {
79
148
  const raw = readFileSync(serviceRegistryPath(), "utf8");
@@ -196,6 +265,11 @@ export const webCommand = {
196
265
  command: "web [subcommand]",
197
266
  describe: "Start / stop / inspect the Interf engine",
198
267
  builder: (yargs) => yargs
268
+ .command("start", "Start the engine in the background", (y) => y
269
+ .option("host", { type: "string", default: LOCAL_SERVICE_DEFAULT_HOST, describe: "Host to bind" })
270
+ .option("port", { type: "number", default: LOCAL_SERVICE_DEFAULT_PORT, describe: "Port to bind" })
271
+ .option("timeout-ms", { type: "number", default: 5000, describe: "How long to wait for startup" })
272
+ .option("log", { type: "string", describe: "Path to write background engine logs" }), runWebStart)
199
273
  .command("stop", "Stop the connected engine", (y) => y
200
274
  .option("url", { type: "string", describe: "Override the active connection URL" })
201
275
  .option("token", { type: "string", describe: "Override the active bearer token" }), runWebStop)