@interf/compiler 0.22.0 → 0.33.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 (575) hide show
  1. package/README.md +268 -0
  2. package/dist/bin-mcp.d.ts +2 -0
  3. package/dist/bin-mcp.js +63 -0
  4. package/dist/bin-runtime.d.ts +2 -0
  5. package/dist/bin-runtime.js +111 -0
  6. package/dist/cli/commands/agents.js +4 -4
  7. package/dist/cli/commands/auth.d.ts +20 -0
  8. package/dist/cli/commands/auth.js +161 -0
  9. package/dist/cli/commands/benchmark.d.ts +10 -0
  10. package/dist/cli/commands/benchmark.js +88 -0
  11. package/dist/cli/commands/build-plan.js +95 -103
  12. package/dist/cli/commands/build.d.ts +1 -1
  13. package/dist/cli/commands/build.js +16 -15
  14. package/dist/cli/commands/doctor.js +3 -3
  15. package/dist/cli/commands/graphs.d.ts +2 -0
  16. package/dist/cli/commands/graphs.js +199 -0
  17. package/dist/cli/commands/login.js +4 -6
  18. package/dist/cli/commands/logout.js +1 -1
  19. package/dist/cli/commands/mcp.d.ts +3 -2
  20. package/dist/cli/commands/mcp.js +721 -204
  21. package/dist/cli/commands/project.d.ts +2 -0
  22. package/dist/cli/commands/project.js +202 -0
  23. package/dist/cli/commands/reset.d.ts +1 -1
  24. package/dist/cli/commands/reset.js +10 -10
  25. package/dist/cli/commands/runs.js +52 -26
  26. package/dist/cli/commands/runtime.d.ts +24 -0
  27. package/dist/cli/commands/runtime.js +373 -0
  28. package/dist/cli/commands/status.d.ts +1 -0
  29. package/dist/cli/commands/status.js +33 -22
  30. package/dist/cli/commands/traces.d.ts +2 -0
  31. package/dist/cli/commands/traces.js +125 -0
  32. package/dist/cli/commands/wizard.js +155 -150
  33. package/dist/cli/index.d.ts +7 -4
  34. package/dist/cli/index.js +13 -7
  35. package/dist/index.d.ts +2 -2
  36. package/dist/index.js +2 -2
  37. package/dist/packages/build-plans/authoring/brief.d.ts +517 -0
  38. package/dist/packages/build-plans/authoring/brief.js +89 -0
  39. package/dist/packages/build-plans/authoring/build-plan-authoring.d.ts +10 -10
  40. package/dist/packages/build-plans/authoring/build-plan-authoring.js +66 -26
  41. package/dist/packages/build-plans/authoring/build-plan-edit-session.d.ts +1 -1
  42. package/dist/packages/build-plans/authoring/build-plan-edit-session.js +8 -2
  43. package/dist/packages/build-plans/authoring/build-plan-improvement.d.ts +9 -6
  44. package/dist/packages/build-plans/authoring/build-plan-improvement.js +39 -42
  45. package/dist/packages/build-plans/authoring/lib/build-plan-edit-utils.js +7 -7
  46. package/dist/packages/build-plans/build-plan-resolution.d.ts +1 -1
  47. package/dist/packages/build-plans/build-plan-resolution.js +3 -3
  48. package/dist/packages/build-plans/index.d.ts +1 -1
  49. package/dist/packages/build-plans/index.js +1 -1
  50. package/dist/packages/build-plans/package/build-plan-definitions.d.ts +14 -12
  51. package/dist/packages/build-plans/package/build-plan-definitions.js +40 -39
  52. package/dist/packages/build-plans/package/build-plan-helpers.d.ts +3 -2
  53. package/dist/packages/build-plans/package/build-plan-helpers.js +27 -13
  54. package/dist/packages/build-plans/package/build-plan-review-paths.d.ts +5 -5
  55. package/dist/packages/build-plans/package/build-plan-review-paths.js +15 -15
  56. package/dist/packages/build-plans/package/build-plan-stage-runner.d.ts +4 -4
  57. package/dist/packages/build-plans/package/build-plan-stage-runner.js +22 -11
  58. package/dist/packages/build-plans/package/builtin-build-plan.d.ts +5 -6
  59. package/dist/packages/build-plans/package/builtin-build-plan.js +7 -8
  60. package/dist/packages/build-plans/package/context-interface.d.ts +11 -9
  61. package/dist/packages/build-plans/package/context-interface.js +14 -33
  62. package/dist/packages/build-plans/package/interf-build-plan-package.d.ts +6 -17
  63. package/dist/packages/build-plans/package/interf-build-plan-package.js +56 -52
  64. package/dist/packages/build-plans/package/local-build-plans.d.ts +12 -10
  65. package/dist/packages/build-plans/package/local-build-plans.js +56 -31
  66. package/dist/packages/build-plans/package/user-build-plans.js +1 -1
  67. package/dist/packages/contracts/index.d.ts +4 -2
  68. package/dist/packages/contracts/index.js +2 -1
  69. package/dist/packages/contracts/lib/project-paths.d.ts +137 -0
  70. package/dist/packages/contracts/lib/project-paths.js +211 -0
  71. package/dist/packages/contracts/lib/project-schema.d.ts +160 -0
  72. package/dist/packages/contracts/lib/project-schema.js +113 -0
  73. package/dist/packages/contracts/lib/schema.d.ts +739 -80
  74. package/dist/packages/contracts/lib/schema.js +410 -75
  75. package/dist/packages/contracts/utils/parse.js +67 -0
  76. package/dist/packages/projects/index.d.ts +6 -0
  77. package/dist/packages/{project → projects}/index.js +0 -3
  78. package/dist/packages/{project → projects}/interf-detect.d.ts +12 -12
  79. package/dist/packages/{project → projects}/interf-detect.js +56 -50
  80. package/dist/packages/projects/interf.d.ts +2 -0
  81. package/dist/packages/projects/interf.js +1 -0
  82. package/dist/packages/projects/lib/schema.d.ts +79 -0
  83. package/dist/packages/projects/lib/schema.js +89 -0
  84. package/dist/packages/projects/source-config.d.ts +58 -0
  85. package/dist/packages/projects/source-config.js +352 -0
  86. package/dist/packages/projects/source-folders.d.ts +11 -0
  87. package/dist/packages/{project → projects}/source-folders.js +26 -26
  88. package/dist/packages/{engine → runtime}/action-planner.d.ts +1 -1
  89. package/dist/packages/{engine → runtime}/action-planner.js +20 -22
  90. package/dist/packages/runtime/action-values.d.ts +1 -0
  91. package/dist/packages/runtime/action-values.js +1 -0
  92. package/dist/packages/runtime/actions/errors.d.ts +2 -0
  93. package/dist/packages/runtime/actions/errors.js +12 -0
  94. package/dist/packages/runtime/actions/fields.d.ts +82 -0
  95. package/dist/packages/runtime/actions/form-builders.d.ts +14 -0
  96. package/dist/packages/runtime/actions/form-builders.js +619 -0
  97. package/dist/packages/runtime/actions/form-validators.d.ts +8 -0
  98. package/dist/packages/runtime/actions/form-validators.js +128 -0
  99. package/dist/packages/runtime/actions/helpers.d.ts +11 -0
  100. package/dist/packages/runtime/actions/helpers.js +80 -0
  101. package/dist/packages/runtime/actions/index.d.ts +8 -0
  102. package/dist/packages/runtime/actions/index.js +11 -0
  103. package/dist/packages/runtime/actions/registry.d.ts +64 -0
  104. package/dist/packages/runtime/actions/registry.js +62 -0
  105. package/dist/packages/runtime/actions/requests.d.ts +45 -0
  106. package/dist/packages/runtime/actions/requests.js +158 -0
  107. package/dist/packages/runtime/actions/schemas.d.ts +154 -0
  108. package/dist/packages/runtime/actions/schemas.js +36 -0
  109. package/dist/packages/runtime/agent-handoff.d.ts +11 -0
  110. package/dist/packages/runtime/agent-handoff.js +101 -0
  111. package/dist/packages/{engine → runtime}/agents/index.d.ts +1 -2
  112. package/dist/packages/{engine → runtime}/agents/index.js +1 -2
  113. package/dist/packages/runtime/agents/lib/args.d.ts +14 -0
  114. package/dist/packages/runtime/agents/lib/args.js +24 -0
  115. package/dist/packages/{engine → runtime}/agents/lib/constants.d.ts +4 -1
  116. package/dist/packages/runtime/agents/lib/constants.js +13 -0
  117. package/dist/packages/runtime/agents/lib/context-graph-bootstrap.d.ts +3 -0
  118. package/dist/packages/{engine/agents/lib/verifiable-context-bootstrap.js → runtime/agents/lib/context-graph-bootstrap.js} +5 -6
  119. package/dist/packages/{engine → runtime}/agents/lib/detection.d.ts +5 -0
  120. package/dist/packages/{engine → runtime}/agents/lib/detection.js +16 -7
  121. package/dist/packages/{engine → runtime}/agents/lib/execution-profile.js +8 -14
  122. package/dist/packages/{engine → runtime}/agents/lib/execution.js +14 -4
  123. package/dist/packages/{engine → runtime}/agents/lib/preflight.js +15 -13
  124. package/dist/packages/{engine → runtime}/agents/lib/render.js +4 -4
  125. package/dist/packages/runtime/agents/lib/shell-fs.d.ts +18 -0
  126. package/dist/packages/runtime/agents/lib/shell-fs.js +190 -0
  127. package/dist/packages/runtime/agents/lib/shell-paths.d.ts +16 -0
  128. package/dist/packages/runtime/agents/lib/shell-paths.js +63 -0
  129. package/dist/packages/runtime/agents/lib/shell-projection.d.ts +25 -0
  130. package/dist/packages/runtime/agents/lib/shell-projection.js +314 -0
  131. package/dist/packages/runtime/agents/lib/shell-templates.d.ts +30 -0
  132. package/dist/packages/runtime/agents/lib/shell-templates.js +452 -0
  133. package/dist/packages/runtime/agents/lib/shell-workspace.d.ts +17 -0
  134. package/dist/packages/runtime/agents/lib/shell-workspace.js +70 -0
  135. package/dist/packages/runtime/agents/lib/shells.d.ts +63 -0
  136. package/dist/packages/runtime/agents/lib/shells.js +383 -0
  137. package/dist/packages/{engine → runtime}/agents/lib/user-config.d.ts +8 -2
  138. package/dist/packages/{engine → runtime}/agents/lib/user-config.js +8 -2
  139. package/dist/packages/runtime/agents/providers/claude-code.d.ts +13 -0
  140. package/dist/packages/runtime/agents/providers/claude-code.js +45 -0
  141. package/dist/packages/runtime/agents/providers/codex.d.ts +17 -0
  142. package/dist/packages/runtime/agents/providers/codex.js +64 -0
  143. package/dist/packages/runtime/agents/providers/cursor.d.ts +9 -0
  144. package/dist/packages/runtime/agents/providers/cursor.js +24 -0
  145. package/dist/packages/runtime/agents/providers/index.d.ts +9 -0
  146. package/dist/packages/runtime/agents/providers/index.js +31 -0
  147. package/dist/packages/runtime/agents/providers/types.d.ts +50 -0
  148. package/dist/packages/{engine → runtime}/agents/registry.d.ts +13 -2
  149. package/dist/packages/{engine → runtime}/agents/registry.js +48 -10
  150. package/dist/packages/{engine → runtime}/agents/role-executors.d.ts +1 -1
  151. package/dist/packages/{engine → runtime}/agents/role-executors.js +7 -6
  152. package/dist/packages/{engine → runtime}/agents/role-router.js +7 -5
  153. package/dist/packages/runtime/auth/account-context.d.ts +52 -0
  154. package/dist/packages/runtime/auth/account-context.js +68 -0
  155. package/dist/packages/runtime/auth/auth-flow.d.ts +73 -0
  156. package/dist/packages/runtime/auth/auth-flow.js +189 -0
  157. package/dist/packages/runtime/auth/jwt-validator.d.ts +58 -0
  158. package/dist/packages/runtime/auth/jwt-validator.js +86 -0
  159. package/dist/packages/runtime/auth/keychain.d.ts +35 -0
  160. package/dist/packages/runtime/auth/keychain.js +85 -0
  161. package/dist/packages/runtime/auth/session-store.d.ts +38 -0
  162. package/dist/packages/runtime/auth/session-store.js +88 -0
  163. package/dist/packages/runtime/auth/workos-client.d.ts +58 -0
  164. package/dist/packages/runtime/auth/workos-client.js +87 -0
  165. package/dist/packages/runtime/benchmark-question-draft.d.ts +20 -0
  166. package/dist/packages/runtime/benchmark-question-draft.js +124 -0
  167. package/dist/packages/runtime/build/artifact-counts.d.ts +1 -0
  168. package/dist/packages/{engine → runtime}/build/artifact-counts.js +5 -9
  169. package/dist/packages/{engine → runtime}/build/artifact-status.d.ts +5 -5
  170. package/dist/packages/{engine → runtime}/build/artifact-status.js +25 -23
  171. package/dist/packages/runtime/build/atomic-fs.d.ts +3 -0
  172. package/dist/packages/runtime/build/atomic-fs.js +95 -0
  173. package/dist/packages/runtime/build/billing-events.d.ts +78 -0
  174. package/dist/packages/{engine → runtime}/build/billing-events.js +17 -19
  175. package/dist/packages/runtime/build/build-evidence.d.ts +15 -0
  176. package/dist/packages/runtime/build/build-evidence.js +173 -0
  177. package/dist/packages/{engine → runtime}/build/build-pipeline.d.ts +12 -8
  178. package/dist/packages/runtime/build/build-pipeline.js +304 -0
  179. package/dist/packages/{engine → runtime}/build/build-plan-primitives.d.ts +1 -1
  180. package/dist/packages/{engine → runtime}/build/build-plan-primitives.js +0 -1
  181. package/dist/packages/runtime/build/build-plan-runs.d.ts +14 -0
  182. package/dist/packages/runtime/build/build-plan-runs.js +31 -0
  183. package/dist/packages/runtime/build/build-stage-plan.d.ts +16 -0
  184. package/dist/packages/{engine → runtime}/build/build-stage-plan.js +28 -29
  185. package/dist/packages/{engine → runtime}/build/build-stage-runner.d.ts +2 -1
  186. package/dist/packages/runtime/build/build-stage-runner.js +165 -0
  187. package/dist/packages/{engine → runtime}/build/build-target.d.ts +4 -4
  188. package/dist/packages/runtime/build/build-target.js +16 -0
  189. package/dist/packages/{engine → runtime}/build/check-evaluator.d.ts +14 -16
  190. package/dist/packages/runtime/build/check-evaluator.js +575 -0
  191. package/dist/packages/runtime/build/context-graph-paths.d.ts +51 -0
  192. package/dist/packages/runtime/build/context-graph-paths.js +133 -0
  193. package/dist/packages/runtime/build/context-graph-schema.d.ts +19 -0
  194. package/dist/packages/runtime/build/context-graph-schema.js +39 -0
  195. package/dist/packages/{engine → runtime}/build/discovery.d.ts +2 -2
  196. package/dist/packages/{engine → runtime}/build/discovery.js +4 -4
  197. package/dist/packages/{engine → runtime}/build/index.d.ts +5 -3
  198. package/dist/packages/{engine → runtime}/build/index.js +5 -3
  199. package/dist/packages/{engine → runtime}/build/lib/schema.d.ts +221 -88
  200. package/dist/packages/{engine → runtime}/build/lib/schema.js +61 -41
  201. package/dist/packages/runtime/build/reset.d.ts +2 -0
  202. package/dist/packages/runtime/build/reset.js +62 -0
  203. package/dist/packages/{engine → runtime}/build/runtime-contracts.js +5 -5
  204. package/dist/packages/runtime/build/runtime-inventory.d.ts +7 -0
  205. package/dist/packages/{engine → runtime}/build/runtime-inventory.js +3 -3
  206. package/dist/packages/{engine → runtime}/build/runtime-paths.js +6 -6
  207. package/dist/packages/{engine → runtime}/build/runtime-prompt.js +7 -6
  208. package/dist/packages/{engine → runtime}/build/runtime-reconcile.d.ts +1 -1
  209. package/dist/packages/{engine → runtime}/build/runtime-reconcile.js +25 -21
  210. package/dist/packages/runtime/build/runtime-runs.d.ts +10 -0
  211. package/dist/packages/runtime/build/runtime-runs.js +265 -0
  212. package/dist/packages/{engine → runtime}/build/runtime-types.d.ts +6 -6
  213. package/dist/packages/runtime/build/runtime-types.js +1 -0
  214. package/dist/packages/runtime/build/runtime.d.ts +6 -0
  215. package/dist/packages/runtime/build/runtime.js +5 -0
  216. package/dist/packages/runtime/build/source-files.d.ts +58 -0
  217. package/dist/packages/runtime/build/source-files.js +184 -0
  218. package/dist/packages/runtime/build/source-inventory.d.ts +27 -0
  219. package/dist/packages/runtime/build/source-inventory.js +273 -0
  220. package/dist/packages/runtime/build/source-manifest.d.ts +52 -0
  221. package/dist/packages/runtime/build/source-manifest.js +192 -0
  222. package/dist/packages/runtime/build/stage-evidence.d.ts +22 -0
  223. package/dist/packages/runtime/build/stage-evidence.js +317 -0
  224. package/dist/packages/runtime/build/stage-reuse.d.ts +11 -0
  225. package/dist/packages/runtime/build/stage-reuse.js +142 -0
  226. package/dist/packages/runtime/build/state-artifacts.d.ts +9 -0
  227. package/dist/packages/runtime/build/state-artifacts.js +14 -0
  228. package/dist/packages/runtime/build/state-health.d.ts +4 -0
  229. package/dist/packages/{engine → runtime}/build/state-health.js +21 -26
  230. package/dist/packages/runtime/build/state-io.d.ts +12 -0
  231. package/dist/packages/runtime/build/state-io.js +119 -0
  232. package/dist/packages/{engine → runtime}/build/state-paths.d.ts +3 -1
  233. package/dist/packages/runtime/build/state-paths.js +22 -0
  234. package/dist/packages/runtime/build/state-view.d.ts +5 -0
  235. package/dist/packages/{engine → runtime}/build/state-view.js +60 -33
  236. package/dist/packages/runtime/build/state.d.ts +7 -0
  237. package/dist/packages/runtime/build/state.js +12 -0
  238. package/dist/packages/runtime/build/traces.d.ts +30 -0
  239. package/dist/packages/runtime/build/traces.js +133 -0
  240. package/dist/packages/{engine/build/validate-verifiable-context.d.ts → runtime/build/validate-context-graph.d.ts} +6 -6
  241. package/dist/packages/{engine/build/validate-verifiable-context.js → runtime/build/validate-context-graph.js} +48 -35
  242. package/dist/packages/{engine → runtime}/build/validate.d.ts +5 -5
  243. package/dist/packages/{engine → runtime}/build/validate.js +26 -26
  244. package/dist/packages/{engine → runtime}/client.d.ts +15 -15
  245. package/dist/packages/{engine → runtime}/client.js +41 -24
  246. package/dist/packages/{engine → runtime}/connection-config.d.ts +3 -2
  247. package/dist/packages/{engine → runtime}/connection-config.js +9 -8
  248. package/dist/packages/runtime/context-checks.d.ts +10 -0
  249. package/dist/packages/runtime/context-checks.js +114 -0
  250. package/dist/packages/runtime/context-graph-scaffold.d.ts +9 -0
  251. package/dist/packages/runtime/context-graph-scaffold.js +134 -0
  252. package/dist/packages/runtime/entitlement-guard.d.ts +43 -0
  253. package/dist/packages/runtime/entitlement-guard.js +70 -0
  254. package/dist/packages/{engine → runtime}/execution/index.d.ts +2 -2
  255. package/dist/packages/{engine → runtime}/execution/index.js +1 -1
  256. package/dist/packages/{engine → runtime}/execution/lib/schema.d.ts +270 -192
  257. package/dist/packages/{engine → runtime}/execution/lib/schema.js +35 -32
  258. package/dist/packages/runtime/index.d.ts +29 -0
  259. package/dist/packages/runtime/index.js +21 -0
  260. package/dist/packages/runtime/instance-paths.d.ts +30 -0
  261. package/dist/packages/runtime/instance-paths.js +29 -0
  262. package/dist/packages/{engine → runtime}/native-run-handlers.d.ts +4 -4
  263. package/dist/packages/{engine → runtime}/native-run-handlers.js +184 -152
  264. package/dist/packages/runtime/plan-artifact-contract.d.ts +17 -0
  265. package/dist/packages/runtime/plan-artifact-contract.js +42 -0
  266. package/dist/packages/runtime/project-entries.d.ts +11 -0
  267. package/dist/packages/runtime/project-entries.js +49 -0
  268. package/dist/packages/runtime/project-source-state.d.ts +26 -0
  269. package/dist/packages/runtime/project-source-state.js +53 -0
  270. package/dist/packages/runtime/project-store.d.ts +85 -0
  271. package/dist/packages/runtime/project-store.js +168 -0
  272. package/dist/packages/runtime/requested-artifacts.d.ts +7 -0
  273. package/dist/packages/{engine → runtime}/requested-artifacts.js +23 -1
  274. package/dist/packages/{engine → runtime}/run-observability.d.ts +2 -1
  275. package/dist/packages/{engine → runtime}/run-observability.js +166 -84
  276. package/dist/packages/runtime/runtime-action-proposals.d.ts +7 -0
  277. package/dist/packages/runtime/runtime-action-proposals.js +542 -0
  278. package/dist/packages/runtime/runtime-build-plans.d.ts +5 -0
  279. package/dist/packages/runtime/runtime-build-plans.js +131 -0
  280. package/dist/packages/runtime/runtime-build-runs.d.ts +47 -0
  281. package/dist/packages/runtime/runtime-build-runs.js +562 -0
  282. package/dist/packages/runtime/runtime-caches.d.ts +91 -0
  283. package/dist/packages/{engine → runtime}/runtime-caches.js +77 -49
  284. package/dist/packages/{engine → runtime}/runtime-event-applier.d.ts +3 -1
  285. package/dist/packages/{engine → runtime}/runtime-event-applier.js +53 -17
  286. package/dist/packages/runtime/runtime-executor.d.ts +22 -0
  287. package/dist/packages/runtime/runtime-executor.js +131 -0
  288. package/dist/packages/runtime/runtime-jobs.d.ts +13 -0
  289. package/dist/packages/runtime/runtime-jobs.js +463 -0
  290. package/dist/packages/runtime/runtime-observability.d.ts +11 -0
  291. package/dist/packages/runtime/runtime-observability.js +39 -0
  292. package/dist/packages/{engine → runtime}/runtime-persistence.d.ts +9 -18
  293. package/dist/packages/{engine → runtime}/runtime-persistence.js +25 -25
  294. package/dist/packages/runtime/runtime-project-mutations.d.ts +7 -0
  295. package/dist/packages/runtime/runtime-project-mutations.js +64 -0
  296. package/dist/packages/runtime/runtime-project-reads.d.ts +15 -0
  297. package/dist/packages/runtime/runtime-project-reads.js +381 -0
  298. package/dist/packages/runtime/runtime-proposal-helpers.d.ts +22 -0
  299. package/dist/packages/runtime/runtime-proposal-helpers.js +223 -0
  300. package/dist/packages/{engine → runtime}/runtime-resource-builders.d.ts +21 -16
  301. package/dist/packages/{engine → runtime}/runtime-resource-builders.js +48 -38
  302. package/dist/packages/runtime/runtime-verify-runs.d.ts +84 -0
  303. package/dist/packages/runtime/runtime-verify-runs.js +295 -0
  304. package/dist/packages/runtime/runtime.d.ts +1165 -0
  305. package/dist/packages/runtime/runtime.js +417 -0
  306. package/dist/packages/runtime/schemas/actions.d.ts +1182 -0
  307. package/dist/packages/runtime/schemas/actions.js +117 -0
  308. package/dist/packages/runtime/schemas/agents.d.ts +76 -0
  309. package/dist/packages/runtime/schemas/agents.js +41 -0
  310. package/dist/packages/runtime/schemas/build-plans.d.ts +959 -0
  311. package/dist/packages/runtime/schemas/build-plans.js +107 -0
  312. package/dist/packages/runtime/schemas/files.d.ts +567 -0
  313. package/dist/packages/runtime/schemas/files.js +51 -0
  314. package/dist/packages/runtime/schemas/index.d.ts +8 -0
  315. package/dist/packages/runtime/schemas/index.js +12 -0
  316. package/dist/packages/runtime/schemas/instance.d.ts +141 -0
  317. package/dist/packages/runtime/schemas/instance.js +143 -0
  318. package/dist/packages/runtime/schemas/jobs.d.ts +339 -0
  319. package/dist/packages/runtime/schemas/jobs.js +103 -0
  320. package/dist/packages/runtime/schemas/projects.d.ts +339 -0
  321. package/dist/packages/runtime/schemas/projects.js +136 -0
  322. package/dist/packages/runtime/schemas/runs.d.ts +2676 -0
  323. package/dist/packages/runtime/schemas/runs.js +98 -0
  324. package/dist/packages/runtime/service/index.d.ts +3 -0
  325. package/dist/packages/runtime/service/index.js +3 -0
  326. package/dist/packages/runtime/service/openapi.d.ts +7 -0
  327. package/dist/packages/runtime/service/openapi.js +117 -0
  328. package/dist/packages/runtime/service/operations.d.ts +1490 -0
  329. package/dist/packages/runtime/service/operations.js +245 -0
  330. package/dist/packages/runtime/service/routes.d.ts +106 -0
  331. package/dist/packages/runtime/service/routes.js +120 -0
  332. package/dist/packages/runtime/service/server-api-files.d.ts +10 -0
  333. package/dist/packages/runtime/service/server-api-files.js +85 -0
  334. package/dist/packages/runtime/service/server-app-boot.d.ts +4 -0
  335. package/dist/packages/runtime/service/server-app-boot.js +46 -0
  336. package/dist/packages/runtime/service/server-guards.d.ts +63 -0
  337. package/dist/packages/runtime/service/server-guards.js +181 -0
  338. package/dist/packages/runtime/service/server-helpers.d.ts +27 -0
  339. package/dist/packages/runtime/service/server-helpers.js +89 -0
  340. package/dist/packages/runtime/service/server-instance-helpers.d.ts +30 -0
  341. package/dist/packages/runtime/service/server-instance-helpers.js +114 -0
  342. package/dist/packages/runtime/service/server-routes-action-proposals.d.ts +3 -0
  343. package/dist/packages/runtime/service/server-routes-action-proposals.js +43 -0
  344. package/dist/packages/runtime/service/server-routes-agents.d.ts +4 -0
  345. package/dist/packages/runtime/service/server-routes-agents.js +198 -0
  346. package/dist/packages/runtime/service/server-routes-auth.d.ts +33 -0
  347. package/dist/packages/runtime/service/server-routes-auth.js +138 -0
  348. package/dist/packages/runtime/service/server-routes-build-plans.d.ts +3 -0
  349. package/dist/packages/runtime/service/server-routes-build-plans.js +83 -0
  350. package/dist/packages/runtime/service/server-routes-discovery.d.ts +4 -0
  351. package/dist/packages/runtime/service/server-routes-discovery.js +196 -0
  352. package/dist/packages/runtime/service/server-routes-events.d.ts +5 -0
  353. package/dist/packages/runtime/service/server-routes-events.js +99 -0
  354. package/dist/packages/runtime/service/server-routes-project-context.d.ts +9 -0
  355. package/dist/packages/runtime/service/server-routes-project-context.js +192 -0
  356. package/dist/packages/runtime/service/server-routes-project-jobs.d.ts +9 -0
  357. package/dist/packages/runtime/service/server-routes-project-jobs.js +130 -0
  358. package/dist/packages/runtime/service/server-routes-project-runs.d.ts +14 -0
  359. package/dist/packages/runtime/service/server-routes-project-runs.js +85 -0
  360. package/dist/packages/runtime/service/server-routes-projects.d.ts +4 -0
  361. package/dist/packages/runtime/service/server-routes-projects.js +92 -0
  362. package/dist/packages/runtime/service/server-routes-runs.d.ts +3 -0
  363. package/dist/packages/runtime/service/server-routes-runs.js +112 -0
  364. package/dist/packages/runtime/service/server.d.ts +37 -0
  365. package/dist/packages/runtime/service/server.js +300 -0
  366. package/dist/packages/{engine → runtime/service}/service-registry.d.ts +5 -5
  367. package/dist/packages/{engine → runtime/service}/service-registry.js +7 -7
  368. package/dist/packages/runtime/verify/benchmark-run.d.ts +81 -0
  369. package/dist/packages/runtime/verify/benchmark-run.js +303 -0
  370. package/dist/packages/{engine → runtime}/verify/index.d.ts +2 -2
  371. package/dist/packages/{engine → runtime}/verify/index.js +1 -1
  372. package/dist/packages/{engine → runtime}/verify/lib/schema.d.ts +83 -16
  373. package/dist/packages/{engine → runtime}/verify/lib/schema.js +26 -18
  374. package/dist/packages/{engine → runtime}/verify/verify-execution.js +11 -11
  375. package/dist/packages/{engine → runtime}/verify/verify-paths.d.ts +4 -4
  376. package/dist/packages/runtime/verify/verify-paths.js +61 -0
  377. package/dist/packages/{engine → runtime}/verify/verify-sandbox.d.ts +1 -1
  378. package/dist/packages/runtime/verify/verify-sandbox.js +88 -0
  379. package/dist/packages/{engine → runtime}/verify/verify-specs.d.ts +2 -0
  380. package/dist/packages/{engine → runtime}/verify/verify-specs.js +5 -3
  381. package/dist/packages/runtime/verify/verify-targets.d.ts +5 -0
  382. package/dist/packages/{engine → runtime}/verify/verify-targets.js +12 -12
  383. package/dist/packages/runtime/verify/verify-types.js +1 -0
  384. package/dist/packages/{engine → runtime}/verify/verify.d.ts +1 -1
  385. package/dist/packages/{engine → runtime}/verify/verify.js +1 -1
  386. package/dist/packages/runtime/wire-schemas.d.ts +18 -0
  387. package/dist/packages/runtime/wire-schemas.js +27 -0
  388. package/package.json +40 -30
  389. package/public-repo/CONTRIBUTING.md +7 -16
  390. package/public-repo/README.md +175 -234
  391. package/public-repo/SECURITY.md +3 -4
  392. package/public-repo/build-plans/interf-default/README.md +19 -14
  393. package/public-repo/build-plans/interf-default/build/stages/shape/SKILL.md +18 -11
  394. package/public-repo/build-plans/interf-default/build/stages/structure/SKILL.md +12 -5
  395. package/public-repo/build-plans/interf-default/build/stages/summarize/SKILL.md +16 -4
  396. package/public-repo/build-plans/interf-default/build-plan.json +34 -28
  397. package/public-repo/build-plans/interf-default/build-plan.schema.json +54 -32
  398. package/public-repo/build-plans/interf-default/improve/SKILL.md +3 -3
  399. package/public-repo/build-plans/interf-default/use/query/SKILL.md +17 -11
  400. package/public-repo/openapi/local-service.openapi.json +6803 -0
  401. package/public-repo/skills/interf/SKILL.md +460 -179
  402. package/dist/cli/commands/prep.d.ts +0 -2
  403. package/dist/cli/commands/prep.js +0 -240
  404. package/dist/cli/commands/test.d.ts +0 -10
  405. package/dist/cli/commands/test.js +0 -85
  406. package/dist/cli/commands/web.d.ts +0 -2
  407. package/dist/cli/commands/web.js +0 -286
  408. package/dist/interf-ui/404.html +0 -1
  409. package/dist/interf-ui/__next.__PAGE__.txt +0 -10
  410. package/dist/interf-ui/__next._full.txt +0 -20
  411. package/dist/interf-ui/__next._head.txt +0 -5
  412. package/dist/interf-ui/__next._index.txt +0 -5
  413. package/dist/interf-ui/__next._tree.txt +0 -5
  414. package/dist/interf-ui/_next/static/_qJKnA0dammQ306MG_zMq/_buildManifest.js +0 -11
  415. package/dist/interf-ui/_next/static/_qJKnA0dammQ306MG_zMq/_clientMiddlewareManifest.js +0 -1
  416. package/dist/interf-ui/_next/static/_qJKnA0dammQ306MG_zMq/_ssgManifest.js +0 -1
  417. package/dist/interf-ui/_next/static/chunks/0.tjb6f4golw..css +0 -3
  418. package/dist/interf-ui/_next/static/chunks/03~yq9q893hmn.js +0 -1
  419. package/dist/interf-ui/_next/static/chunks/085-n_jv2ng_q.css +0 -1
  420. package/dist/interf-ui/_next/static/chunks/0dn41fa_zvgsl.js +0 -1
  421. package/dist/interf-ui/_next/static/chunks/0g-ea0zj5d-0k.js +0 -1
  422. package/dist/interf-ui/_next/static/chunks/0gwqglc4iz583.js +0 -1
  423. package/dist/interf-ui/_next/static/chunks/0haldgm65ve6l.js +0 -1
  424. package/dist/interf-ui/_next/static/chunks/0nv3am99vjzn4.js +0 -1
  425. package/dist/interf-ui/_next/static/chunks/0s77gt_o4jwtx.js +0 -1
  426. package/dist/interf-ui/_next/static/chunks/0y5z3t-z1c8ks.js.map +0 -5
  427. package/dist/interf-ui/_next/static/chunks/0~a36ujuzpaz..js +0 -116
  428. package/dist/interf-ui/_next/static/chunks/10jeodxe4nkgj.js +0 -31
  429. package/dist/interf-ui/_next/static/chunks/119h2rouych2t.js +0 -1
  430. package/dist/interf-ui/_next/static/chunks/13c8b~m8knjsf.js +0 -1
  431. package/dist/interf-ui/_next/static/chunks/14dznb2qpt-ho.js +0 -91
  432. package/dist/interf-ui/_next/static/chunks/15z_en80lrq-3.js +0 -5
  433. package/dist/interf-ui/_next/static/chunks/turbopack-0p.pvcjrtq-jh.js +0 -1
  434. package/dist/interf-ui/_next/static/chunks/turbopack-0usj_75.8frlw.js +0 -1
  435. package/dist/interf-ui/_next/static/chunks/turbopack-worker-0sjn--fhq~1cg.js +0 -1
  436. package/dist/interf-ui/_next/static/media/GeistMono_Variable.p.17jn9btb_52pq.woff2 +0 -0
  437. package/dist/interf-ui/_next/static/media/Geist_Variable-s.p.0-te~ja_gpvcf.woff2 +0 -0
  438. package/dist/interf-ui/_next/static/media/worker.102zas1s52_pf.js +0 -109
  439. package/dist/interf-ui/_not-found/__next._full.txt +0 -15
  440. package/dist/interf-ui/_not-found/__next._head.txt +0 -5
  441. package/dist/interf-ui/_not-found/__next._index.txt +0 -5
  442. package/dist/interf-ui/_not-found/__next._not-found.__PAGE__.txt +0 -5
  443. package/dist/interf-ui/_not-found/__next._not-found.txt +0 -5
  444. package/dist/interf-ui/_not-found/__next._tree.txt +0 -2
  445. package/dist/interf-ui/_not-found.html +0 -1
  446. package/dist/interf-ui/_not-found.txt +0 -15
  447. package/dist/interf-ui/index.html +0 -1
  448. package/dist/interf-ui/index.txt +0 -20
  449. package/dist/packages/contracts/lib/preparation-paths.d.ts +0 -117
  450. package/dist/packages/contracts/lib/preparation-paths.js +0 -177
  451. package/dist/packages/engine/action-definitions.d.ts +0 -407
  452. package/dist/packages/engine/action-definitions.js +0 -1158
  453. package/dist/packages/engine/action-values.d.ts +0 -1
  454. package/dist/packages/engine/action-values.js +0 -1
  455. package/dist/packages/engine/agents/lib/args.d.ts +0 -4
  456. package/dist/packages/engine/agents/lib/args.js +0 -52
  457. package/dist/packages/engine/agents/lib/chart-guidance.d.ts +0 -1
  458. package/dist/packages/engine/agents/lib/chart-guidance.js +0 -8
  459. package/dist/packages/engine/agents/lib/constants.js +0 -28
  460. package/dist/packages/engine/agents/lib/schema.d.ts +0 -8
  461. package/dist/packages/engine/agents/lib/schema.js +0 -7
  462. package/dist/packages/engine/agents/lib/shells.d.ts +0 -74
  463. package/dist/packages/engine/agents/lib/shells.js +0 -1052
  464. package/dist/packages/engine/agents/lib/verifiable-context-bootstrap.d.ts +0 -3
  465. package/dist/packages/engine/build/artifact-counts.d.ts +0 -1
  466. package/dist/packages/engine/build/billing-events.d.ts +0 -89
  467. package/dist/packages/engine/build/build-pipeline.js +0 -175
  468. package/dist/packages/engine/build/build-plan-runs.d.ts +0 -14
  469. package/dist/packages/engine/build/build-plan-runs.js +0 -31
  470. package/dist/packages/engine/build/build-stage-plan.d.ts +0 -16
  471. package/dist/packages/engine/build/build-stage-runner.js +0 -94
  472. package/dist/packages/engine/build/build-target.js +0 -16
  473. package/dist/packages/engine/build/check-evaluator.js +0 -298
  474. package/dist/packages/engine/build/reset.d.ts +0 -2
  475. package/dist/packages/engine/build/reset.js +0 -74
  476. package/dist/packages/engine/build/runtime-inventory.d.ts +0 -7
  477. package/dist/packages/engine/build/runtime-runs.d.ts +0 -10
  478. package/dist/packages/engine/build/runtime-runs.js +0 -224
  479. package/dist/packages/engine/build/runtime.d.ts +0 -5
  480. package/dist/packages/engine/build/runtime.js +0 -4
  481. package/dist/packages/engine/build/source-files.d.ts +0 -46
  482. package/dist/packages/engine/build/source-files.js +0 -149
  483. package/dist/packages/engine/build/state-artifacts.d.ts +0 -9
  484. package/dist/packages/engine/build/state-artifacts.js +0 -14
  485. package/dist/packages/engine/build/state-health.d.ts +0 -4
  486. package/dist/packages/engine/build/state-io.d.ts +0 -11
  487. package/dist/packages/engine/build/state-io.js +0 -82
  488. package/dist/packages/engine/build/state-paths.js +0 -16
  489. package/dist/packages/engine/build/state-view.d.ts +0 -5
  490. package/dist/packages/engine/build/state.d.ts +0 -7
  491. package/dist/packages/engine/build/state.js +0 -12
  492. package/dist/packages/engine/build/validate-helpers.d.ts +0 -12
  493. package/dist/packages/engine/build/validate-helpers.js +0 -41
  494. package/dist/packages/engine/build/verifiable-context-paths.d.ts +0 -47
  495. package/dist/packages/engine/build/verifiable-context-paths.js +0 -121
  496. package/dist/packages/engine/build/verifiable-context-schema.d.ts +0 -21
  497. package/dist/packages/engine/build/verifiable-context-schema.js +0 -126
  498. package/dist/packages/engine/cloud-seams.d.ts +0 -115
  499. package/dist/packages/engine/cloud-seams.js +0 -84
  500. package/dist/packages/engine/index.d.ts +0 -22
  501. package/dist/packages/engine/index.js +0 -15
  502. package/dist/packages/engine/instance-paths.d.ts +0 -106
  503. package/dist/packages/engine/instance-paths.js +0 -171
  504. package/dist/packages/engine/lib/schema.d.ts +0 -6304
  505. package/dist/packages/engine/lib/schema.js +0 -730
  506. package/dist/packages/engine/preparation-store.d.ts +0 -105
  507. package/dist/packages/engine/preparation-store.js +0 -213
  508. package/dist/packages/engine/readiness-check-draft.d.ts +0 -20
  509. package/dist/packages/engine/readiness-check-draft.js +0 -111
  510. package/dist/packages/engine/requested-artifacts.d.ts +0 -5
  511. package/dist/packages/engine/routes.d.ts +0 -85
  512. package/dist/packages/engine/routes.js +0 -99
  513. package/dist/packages/engine/runtime-caches.d.ts +0 -76
  514. package/dist/packages/engine/runtime-proposal-helpers.d.ts +0 -35
  515. package/dist/packages/engine/runtime-proposal-helpers.js +0 -247
  516. package/dist/packages/engine/runtime.d.ts +0 -371
  517. package/dist/packages/engine/runtime.js +0 -2463
  518. package/dist/packages/engine/server.d.ts +0 -58
  519. package/dist/packages/engine/server.js +0 -1399
  520. package/dist/packages/engine/verify/readiness-check-run.d.ts +0 -82
  521. package/dist/packages/engine/verify/readiness-check-run.js +0 -265
  522. package/dist/packages/engine/verify/verify-paths.js +0 -61
  523. package/dist/packages/engine/verify/verify-sandbox.js +0 -88
  524. package/dist/packages/engine/verify/verify-targets.d.ts +0 -5
  525. package/dist/packages/engine/wire-schemas.d.ts +0 -547
  526. package/dist/packages/engine/wire-schemas.js +0 -59
  527. package/dist/packages/project/index.d.ts +0 -9
  528. package/dist/packages/project/interf-bootstrap.d.ts +0 -1
  529. package/dist/packages/project/interf-bootstrap.js +0 -1
  530. package/dist/packages/project/interf-scaffold.d.ts +0 -3
  531. package/dist/packages/project/interf-scaffold.js +0 -136
  532. package/dist/packages/project/interf.d.ts +0 -4
  533. package/dist/packages/project/interf.js +0 -3
  534. package/dist/packages/project/lib/schema.d.ts +0 -328
  535. package/dist/packages/project/lib/schema.js +0 -136
  536. package/dist/packages/project/preparation-entries.d.ts +0 -11
  537. package/dist/packages/project/preparation-entries.js +0 -49
  538. package/dist/packages/project/source-config.d.ts +0 -46
  539. package/dist/packages/project/source-config.js +0 -394
  540. package/dist/packages/project/source-folders.d.ts +0 -11
  541. package/public-repo/plugins/README.md +0 -9
  542. package/public-repo/plugins/interf/.claude-plugin/plugin.json +0 -21
  543. package/public-repo/plugins/interf/.mcp.json +0 -12
  544. package/public-repo/plugins/interf/README.md +0 -32
  545. package/public-repo/plugins/interf/skills/interf/SKILL.md +0 -376
  546. /package/dist/packages/{engine/agents/lib/types.js → runtime/actions/fields.js} +0 -0
  547. /package/dist/packages/{engine → runtime}/agents/lib/agents.d.ts +0 -0
  548. /package/dist/packages/{engine → runtime}/agents/lib/agents.js +0 -0
  549. /package/dist/packages/{engine → runtime}/agents/lib/execution-profile.d.ts +0 -0
  550. /package/dist/packages/{engine → runtime}/agents/lib/execution.d.ts +0 -0
  551. /package/dist/packages/{engine → runtime}/agents/lib/executors.d.ts +0 -0
  552. /package/dist/packages/{engine → runtime}/agents/lib/executors.js +0 -0
  553. /package/dist/packages/{engine → runtime}/agents/lib/logs.d.ts +0 -0
  554. /package/dist/packages/{engine → runtime}/agents/lib/logs.js +0 -0
  555. /package/dist/packages/{engine → runtime}/agents/lib/preflight.d.ts +0 -0
  556. /package/dist/packages/{engine → runtime}/agents/lib/render.d.ts +0 -0
  557. /package/dist/packages/{engine → runtime}/agents/lib/status.d.ts +0 -0
  558. /package/dist/packages/{engine → runtime}/agents/lib/status.js +0 -0
  559. /package/dist/packages/{engine → runtime}/agents/lib/types.d.ts +0 -0
  560. /package/dist/packages/{engine/build/runtime-types.js → runtime/agents/lib/types.js} +0 -0
  561. /package/dist/packages/{engine/verify/verify-types.js → runtime/agents/providers/types.js} +0 -0
  562. /package/dist/packages/{engine → runtime}/agents/role-router.d.ts +0 -0
  563. /package/dist/packages/{engine → runtime}/build/build-execution.d.ts +0 -0
  564. /package/dist/packages/{engine → runtime}/build/build-execution.js +0 -0
  565. /package/dist/packages/{engine → runtime}/build/runtime-contracts.d.ts +0 -0
  566. /package/dist/packages/{engine → runtime}/build/runtime-paths.d.ts +0 -0
  567. /package/dist/packages/{engine → runtime}/build/runtime-prompt.d.ts +0 -0
  568. /package/dist/packages/{engine → runtime}/execution/adapters.d.ts +0 -0
  569. /package/dist/packages/{engine → runtime}/execution/adapters.js +0 -0
  570. /package/dist/packages/{engine → runtime}/execution/events.d.ts +0 -0
  571. /package/dist/packages/{engine → runtime}/execution/events.js +0 -0
  572. /package/dist/packages/{engine → runtime}/verify/verify-execution.d.ts +0 -0
  573. /package/dist/packages/{engine → runtime}/verify/verify-profile-presets.d.ts +0 -0
  574. /package/dist/packages/{engine → runtime}/verify/verify-profile-presets.js +0 -0
  575. /package/dist/packages/{engine → runtime}/verify/verify-types.d.ts +0 -0
@@ -0,0 +1,373 @@
1
+ /**
2
+ * `interf runtime` — start the local service in the foreground until Ctrl-C.
3
+ *
4
+ * interf runtime # start on default port; hard error if port busy
5
+ * interf runtime start # start the service in the background
6
+ * interf runtime stop # send SIGTERM to the running service
7
+ * interf runtime status # print service info via the connected URL
8
+ *
9
+ * Pure server. No reuse / register-with-existing logic. Writes
10
+ * `~/.interf/connection.json` on startup so subsequent CLI commands can
11
+ * connect without a pointer file.
12
+ */
13
+ import chalk from "chalk";
14
+ import { closeSync, mkdirSync, openSync, readFileSync } from "node:fs";
15
+ import { spawn } from "node:child_process";
16
+ import { dirname } from "node:path";
17
+ import { LOCAL_SERVICE_DEFAULT_HOST, LOCAL_SERVICE_DEFAULT_PORT, buildLocalServiceUrl, } from "../../packages/runtime/service/routes.js";
18
+ import { startLocalService } from "../../packages/runtime/service/server.js";
19
+ import { createNativeLocalServiceRunHandlers } from "../../packages/runtime/native-run-handlers.js";
20
+ import { CONNECT_OR_ERROR_HINT, clearConnection, readActiveConnection, writeConnection, } from "../../packages/runtime/connection-config.js";
21
+ import { serviceRegistryPath } from "../../packages/contracts/lib/project-paths.js";
22
+ function packageVersionFromManifest() {
23
+ try {
24
+ const url = new URL("../../../package.json", import.meta.url);
25
+ const raw = readFileSync(url, "utf8");
26
+ const parsed = JSON.parse(raw);
27
+ return parsed.version;
28
+ }
29
+ catch {
30
+ return undefined;
31
+ }
32
+ }
33
+ function isPortInUseError(error) {
34
+ if (!error || typeof error !== "object")
35
+ return false;
36
+ const code = error.code;
37
+ return code === "EADDRINUSE";
38
+ }
39
+ export async function runRuntimeForeground(args) {
40
+ const host = args.host ?? LOCAL_SERVICE_DEFAULT_HOST;
41
+ const port = args.port ?? LOCAL_SERVICE_DEFAULT_PORT;
42
+ let service;
43
+ try {
44
+ service = await startLocalService({
45
+ host,
46
+ port,
47
+ packageVersion: packageVersionFromManifest(),
48
+ handlers: createNativeLocalServiceRunHandlers(),
49
+ ownerKind: args.appOwned ? "desktop-app" : "headless",
50
+ ...(args.parentPid ? { ownerPid: args.parentPid } : {}),
51
+ });
52
+ }
53
+ catch (error) {
54
+ if (isPortInUseError(error)) {
55
+ console.error(chalk.red(`Error: another Interf local service is already running at ${buildLocalServiceUrl({ host, port })}.`));
56
+ console.error("Stop it first with `interf runtime stop`.");
57
+ process.exit(1);
58
+ }
59
+ throw error;
60
+ }
61
+ const shutdown = async () => {
62
+ try {
63
+ await service.close();
64
+ }
65
+ catch {
66
+ // best effort
67
+ }
68
+ process.exit(0);
69
+ };
70
+ console.log();
71
+ console.log(` Interf service: ${chalk.bold(service.url)}${args.appOwned ? chalk.dim(" (app-owned)") : ""}`);
72
+ console.log(` Health: ${service.url}/health`);
73
+ console.log(chalk.dim(" Press Ctrl-C to stop."));
74
+ console.log();
75
+ process.on("SIGINT", shutdown);
76
+ process.on("SIGTERM", shutdown);
77
+ if (args.appOwned && args.parentPid) {
78
+ const parentPid = args.parentPid;
79
+ const monitor = setInterval(() => {
80
+ try {
81
+ process.kill(parentPid, 0);
82
+ }
83
+ catch {
84
+ clearInterval(monitor);
85
+ void shutdown();
86
+ }
87
+ }, 1000);
88
+ monitor.unref();
89
+ }
90
+ await new Promise(() => {
91
+ /* block forever; signals trigger shutdown */
92
+ });
93
+ }
94
+ async function isServiceReachable(url) {
95
+ try {
96
+ const response = await fetch(`${url}/health`);
97
+ return response.status === 200;
98
+ }
99
+ catch {
100
+ return false;
101
+ }
102
+ }
103
+ async function serviceRequiresAuth(url) {
104
+ try {
105
+ const response = await fetch(`${url}/v1/instance`);
106
+ if (response.status !== 200)
107
+ return true;
108
+ const body = await response.json();
109
+ return body.auth_required === true;
110
+ }
111
+ catch {
112
+ return true;
113
+ }
114
+ }
115
+ function activeConnectionForUrl(url) {
116
+ const conn = readActiveConnection();
117
+ if (!conn)
118
+ return null;
119
+ return conn.url.replace(/\/+$/, "") === url.replace(/\/+$/, "")
120
+ ? { url: conn.url.replace(/\/+$/, ""), auth_token: conn.auth_token }
121
+ : null;
122
+ }
123
+ async function waitForService(url, timeoutMs) {
124
+ const started = Date.now();
125
+ while (Date.now() - started < timeoutMs) {
126
+ if (await isServiceReachable(url))
127
+ return true;
128
+ await new Promise((resolveWait) => setTimeout(resolveWait, 150));
129
+ }
130
+ return false;
131
+ }
132
+ function managedRuntimeLogPath(port) {
133
+ return `${dirname(serviceRegistryPath())}/interf-runtime-${port}.log`;
134
+ }
135
+ export async function runRuntimeStart(args) {
136
+ const host = args.host ?? LOCAL_SERVICE_DEFAULT_HOST;
137
+ const port = args.port ?? LOCAL_SERVICE_DEFAULT_PORT;
138
+ const url = buildLocalServiceUrl({ host, port });
139
+ if (await isServiceReachable(url)) {
140
+ const existing = activeConnectionForUrl(url);
141
+ if (existing) {
142
+ writeConnection(existing);
143
+ }
144
+ else if (await serviceRequiresAuth(url)) {
145
+ console.error(chalk.red(`Interf local service is already running at ${chalk.bold(url)}, but no bearer token is available.`));
146
+ console.error("Use the existing connection.json, pass --token, or restart the service from this CLI.");
147
+ process.exit(1);
148
+ }
149
+ else {
150
+ writeConnection({ url, auth_token: null });
151
+ }
152
+ console.log(chalk.green(`Interf local service is already running at ${chalk.bold(url)}.`));
153
+ return;
154
+ }
155
+ const binPath = process.argv[1];
156
+ if (!binPath) {
157
+ console.error(chalk.red("Cannot locate the Interf CLI entrypoint for managed start."));
158
+ console.error("Try running `interf runtime` in a separate terminal instead.");
159
+ process.exit(1);
160
+ }
161
+ const logPath = args.log ?? managedRuntimeLogPath(port);
162
+ mkdirSync(dirname(logPath), { recursive: true });
163
+ const stdoutFd = openSync(logPath, "a");
164
+ const stderrFd = openSync(logPath, "a");
165
+ let child;
166
+ try {
167
+ child = spawn(process.execPath, [binPath, "runtime", "--host", host, "--port", String(port)], {
168
+ detached: true,
169
+ stdio: ["ignore", stdoutFd, stderrFd],
170
+ env: process.env,
171
+ });
172
+ child.unref();
173
+ }
174
+ finally {
175
+ closeSync(stdoutFd);
176
+ closeSync(stderrFd);
177
+ }
178
+ const ready = await waitForService(url, args.timeoutMs ?? 5000);
179
+ if (!ready) {
180
+ console.error(chalk.red(`Timed out waiting for Interf local service at ${url}.`));
181
+ console.error(`Log: ${logPath}`);
182
+ process.exit(1);
183
+ }
184
+ const conn = activeConnectionForUrl(url);
185
+ if (conn) {
186
+ writeConnection(conn);
187
+ }
188
+ else if (await serviceRequiresAuth(url)) {
189
+ console.error(chalk.red(`Interf local service started at ${url}, but no bearer token was written to connection.json.`));
190
+ console.error(`Log: ${logPath}`);
191
+ process.exit(1);
192
+ }
193
+ else {
194
+ writeConnection({ url, auth_token: null });
195
+ }
196
+ console.log(chalk.green(`Started Interf local service at ${chalk.bold(url)}.`));
197
+ console.log(`Log: ${logPath}`);
198
+ console.log(chalk.dim("Stop it with `interf runtime stop`."));
199
+ }
200
+ function findServicePidByUrl(url) {
201
+ try {
202
+ const raw = readFileSync(serviceRegistryPath(), "utf8");
203
+ const parsed = JSON.parse(raw);
204
+ const entry = parsed.services?.find((s) => s.url === url);
205
+ return entry?.pid ?? null;
206
+ }
207
+ catch {
208
+ return null;
209
+ }
210
+ }
211
+ function isPidAlive(pid) {
212
+ try {
213
+ // Signal 0 is a no-op probe — succeeds if the PID exists and we can
214
+ // signal it; throws ESRCH otherwise.
215
+ process.kill(pid, 0);
216
+ return true;
217
+ }
218
+ catch {
219
+ return false;
220
+ }
221
+ }
222
+ /**
223
+ * Scan ~/.interf/services.json for engines whose PID is still alive.
224
+ * Used by `interf runtime stop` when ~/.interf/connection.json is missing
225
+ * — the registry tells us which local service processes are actually running
226
+ * regardless of which one the wizard last connected to.
227
+ */
228
+ function listLiveServicesFromRegistry() {
229
+ try {
230
+ const raw = readFileSync(serviceRegistryPath(), "utf8");
231
+ const parsed = JSON.parse(raw);
232
+ return (parsed.services ?? []).filter((entry) => typeof entry.pid === "number" && isPidAlive(entry.pid));
233
+ }
234
+ catch {
235
+ return [];
236
+ }
237
+ }
238
+ export async function runRuntimeStop(args) {
239
+ // Resolution order: explicit --url override → active connection.json
240
+ // → fall back to scanning services.json for any live service. The
241
+ // last fallback recovers from the case where connection.json was
242
+ // cleared while a service was still running (e.g. another `interf
243
+ // runtime` attempt failed mid-startup, or `interf logout` was run while
244
+ // the service kept going).
245
+ const conn = readActiveConnection({
246
+ urlOverride: args.url,
247
+ authTokenOverride: args.token,
248
+ });
249
+ let urlToStop = conn ? conn.url.replace(/\/+$/, "") : null;
250
+ let pidToStop = urlToStop ? findServicePidByUrl(urlToStop) : null;
251
+ if (!pidToStop) {
252
+ const liveServices = listLiveServicesFromRegistry();
253
+ if (liveServices.length === 0) {
254
+ console.error("No live Interf local service to stop.");
255
+ console.error("Checked ~/.interf/connection.json and ~/.interf/services.json — neither pointed at a running process.");
256
+ process.exit(1);
257
+ }
258
+ if (liveServices.length > 1 && !urlToStop) {
259
+ console.error(`Multiple live Interf local services registered. Pick one with --url:`);
260
+ for (const entry of liveServices) {
261
+ console.error(` ${entry.url} (pid ${entry.pid})`);
262
+ }
263
+ process.exit(1);
264
+ }
265
+ const target = urlToStop
266
+ ? liveServices.find((entry) => entry.url === urlToStop)
267
+ : liveServices[0];
268
+ if (!target) {
269
+ console.error(`No live local service matches ${urlToStop ?? "the active connection"} in services.json.`);
270
+ process.exit(1);
271
+ }
272
+ urlToStop = target.url;
273
+ pidToStop = target.pid;
274
+ if (!conn) {
275
+ console.log(chalk.dim(` No active connection.json — recovering service pid ${pidToStop} from services.json.`));
276
+ }
277
+ }
278
+ try {
279
+ process.kill(pidToStop, "SIGTERM");
280
+ console.log(chalk.green(`Sent SIGTERM to service pid ${pidToStop} (${urlToStop}).`));
281
+ if (conn)
282
+ clearConnection();
283
+ }
284
+ catch (error) {
285
+ console.error(`Failed to stop service pid ${pidToStop}: ${error instanceof Error ? error.message : String(error)}`);
286
+ process.exit(1);
287
+ }
288
+ }
289
+ export async function runRuntimeStatus(args) {
290
+ const existingForUrl = args.url ? activeConnectionForUrl(args.url) : null;
291
+ const conn = readActiveConnection({
292
+ urlOverride: args.url,
293
+ authTokenOverride: args.token ?? existingForUrl?.auth_token ?? null,
294
+ });
295
+ if (!conn) {
296
+ console.error(CONNECT_OR_ERROR_HINT);
297
+ process.exit(1);
298
+ }
299
+ const url = conn.url.replace(/\/+$/, "");
300
+ try {
301
+ const headers = new Headers();
302
+ if (conn.auth_token)
303
+ headers.set("authorization", `Bearer ${conn.auth_token}`);
304
+ const response = await fetch(`${url}/v1/instance`, { headers });
305
+ const raw = await response.text();
306
+ if (response.status !== 200) {
307
+ console.error(chalk.red(`Local service status request failed (HTTP ${response.status}).`));
308
+ if (raw)
309
+ console.error(raw);
310
+ process.exit(1);
311
+ }
312
+ if (args.requireOwnerKind || args.requireOwnerPid) {
313
+ const parsed = JSON.parse(raw);
314
+ if (args.requireOwnerKind && parsed.owner_kind !== args.requireOwnerKind) {
315
+ console.error(chalk.red(`Local service owner mismatch: expected ${args.requireOwnerKind}, got ${String(parsed.owner_kind ?? "unknown")}.`));
316
+ process.exit(1);
317
+ }
318
+ if (args.requireOwnerPid && parsed.owner_pid !== args.requireOwnerPid) {
319
+ console.error(chalk.red(`Local service owner pid mismatch: expected ${args.requireOwnerPid}, got ${String(parsed.owner_pid ?? "unknown")}.`));
320
+ process.exit(1);
321
+ }
322
+ }
323
+ console.log(raw);
324
+ }
325
+ catch (error) {
326
+ console.error(chalk.red(`Local service ${url} unreachable: ${error instanceof Error ? error.message : String(error)}`));
327
+ process.exit(1);
328
+ }
329
+ }
330
+ export const runtimeCommand = {
331
+ command: "runtime [subcommand]",
332
+ describe: "Start / stop / inspect the Interf local service",
333
+ builder: (yargs) => yargs
334
+ .command("start", "Start the local service in the background", (y) => y
335
+ .option("host", { type: "string", default: LOCAL_SERVICE_DEFAULT_HOST, describe: "Host to bind" })
336
+ .option("port", { type: "number", default: LOCAL_SERVICE_DEFAULT_PORT, describe: "Port to bind" })
337
+ .option("timeout-ms", { type: "number", default: 5000, describe: "How long to wait for startup" })
338
+ .option("log", { type: "string", describe: "Path to write background service logs" }), runRuntimeStart)
339
+ .command("stop", "Stop the connected local service", (y) => y
340
+ .option("url", { type: "string", describe: "Override the active connection URL" })
341
+ .option("token", { type: "string", describe: "Override the active bearer token" }), runRuntimeStop)
342
+ .command("status", "Show local service status via the connected URL", (y) => y
343
+ .option("url", { type: "string", describe: "Override the active connection URL" })
344
+ .option("token", { type: "string", describe: "Override the active bearer token" })
345
+ .option("require-owner-kind", {
346
+ choices: ["desktop-app", "headless"],
347
+ describe: "Exit non-zero unless the connected service has this owner kind",
348
+ hidden: true,
349
+ })
350
+ .option("require-owner-pid", {
351
+ type: "number",
352
+ describe: "Exit non-zero unless the connected service was started for this owner PID",
353
+ hidden: true,
354
+ }), runRuntimeStatus)
355
+ .command("$0", "Start the local service in the foreground (default)", (y) => y
356
+ .option("host", { type: "string", default: LOCAL_SERVICE_DEFAULT_HOST, describe: "Host to bind" })
357
+ .option("port", { type: "number", default: LOCAL_SERVICE_DEFAULT_PORT, describe: "Port to bind" })
358
+ .option("app-owned", {
359
+ type: "boolean",
360
+ default: false,
361
+ describe: "Run as a foreground service child process",
362
+ hidden: true,
363
+ })
364
+ .option("parent-pid", {
365
+ type: "number",
366
+ describe: "Parent process pid for app-owned service shutdown",
367
+ hidden: true,
368
+ }), runRuntimeForeground)
369
+ .strict(),
370
+ handler: () => {
371
+ /* yargs subcommand handlers do the work */
372
+ },
373
+ };
@@ -2,6 +2,7 @@ import type { CommandModule } from "yargs";
2
2
  interface StatusArgs {
3
3
  url?: string;
4
4
  token?: string;
5
+ debug?: boolean;
5
6
  }
6
7
  export declare const statusCommand: CommandModule<unknown, StatusArgs>;
7
8
  export {};
@@ -1,8 +1,9 @@
1
1
  /**
2
- * `interf status` — print connection state + preparation summary.
2
+ * `interf status` — print connection state + Project summary.
3
3
  */
4
4
  import chalk from "chalk";
5
- import { CONNECT_OR_ERROR_HINT, readActiveConnection } from "../../packages/engine/connection-config.js";
5
+ import { CONNECT_OR_ERROR_HINT, readActiveConnection } from "../../packages/runtime/connection-config.js";
6
+ import { InstanceResourceSchema, ProjectListResponseSchema, } from "../../packages/runtime/schemas/index.js";
6
7
  async function callJson(url, token) {
7
8
  const headers = new Headers();
8
9
  if (token)
@@ -27,10 +28,11 @@ async function callJson(url, token) {
27
28
  }
28
29
  export const statusCommand = {
29
30
  command: "status",
30
- describe: "Show connection + preparation summary",
31
+ describe: "Show connection + Project summary",
31
32
  builder: (yargs) => yargs
32
33
  .option("url", { type: "string", describe: "Override the active connection URL" })
33
- .option("token", { type: "string", describe: "Override the active bearer token" }),
34
+ .option("token", { type: "string", describe: "Override the active bearer token" })
35
+ .option("debug", { type: "boolean", default: false, describe: "Show debug metadata such as package version" }),
34
36
  handler: async (args) => {
35
37
  const conn = readActiveConnection({
36
38
  urlOverride: args.url,
@@ -48,31 +50,40 @@ export const statusCommand = {
48
50
  console.error(CONNECT_OR_ERROR_HINT);
49
51
  process.exit(1);
50
52
  }
53
+ const instanceResource = InstanceResourceSchema.safeParse(instance.body);
54
+ if (!instanceResource.success) {
55
+ console.error(chalk.red("Connected service returned an invalid instance resource."));
56
+ process.exit(1);
57
+ }
51
58
  console.log();
52
- console.log(chalk.bold(" Interf engine"));
59
+ console.log(chalk.bold(" Interf local service"));
53
60
  console.log(` URL: ${url}`);
54
- if (instance.body?.pid)
55
- console.log(` PID: ${instance.body.pid}`);
56
- if (instance.body?.package_version)
57
- console.log(` Version: ${instance.body.package_version}`);
58
- if (instance.body?.uptime_seconds !== undefined) {
59
- console.log(` Uptime: ${instance.body.uptime_seconds}s`);
61
+ if (instanceResource.data.pid)
62
+ console.log(` PID: ${instanceResource.data.pid}`);
63
+ if (args.debug && instanceResource.data.package_version) {
64
+ console.log(` Version: ${instanceResource.data.package_version}`);
65
+ }
66
+ if (instanceResource.data.uptime_seconds !== undefined) {
67
+ console.log(` Uptime: ${instanceResource.data.uptime_seconds}s`);
68
+ }
69
+ console.log(` Auth: ${instanceResource.data.auth_required ? "required (token in connection.json)" : "open (explicit dev/test mode)"}`);
70
+ const projects = await callJson(`${url}/v1/projects`, token);
71
+ const parsedProjects = ProjectListResponseSchema.safeParse(projects.body);
72
+ if (!parsedProjects.success) {
73
+ console.error(chalk.red("Connected service returned an invalid Project list."));
74
+ process.exit(1);
60
75
  }
61
- console.log(` Auth: ${instance.body?.auth_required ? "required (token in connection.json)" : "open (loopback)"}`);
62
- const preps = await callJson(`${url}/v1/preparations`, token);
63
- const list = preps.body?.preparations ?? [];
76
+ const list = parsedProjects.data.projects;
64
77
  console.log();
65
- console.log(chalk.bold(` Preparations (${list.length})`));
78
+ console.log(chalk.bold(` Projects (${list.length})`));
66
79
  if (list.length === 0) {
67
- console.log(chalk.dim(" No preparations yet. `interf prep create <id> --source <path>`."));
80
+ console.log(chalk.dim(" No Projects yet. `interf project create <id> --source <path>`."));
68
81
  }
69
82
  else {
70
- for (const prep of list) {
71
- const readiness = prep.readiness?.status ?? "";
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})`)}`);
75
- console.log(chalk.dim(` source: ${prep.source.locator}`));
83
+ for (const project of list) {
84
+ const buildPlan = project.build_plan_id ?? "no Plan";
85
+ console.log(` ${chalk.bold(project.id)} ${chalk.dim(`(${buildPlan})`)}`);
86
+ console.log(chalk.dim(` source: ${project.source.locator}`));
76
87
  }
77
88
  }
78
89
  console.log();
@@ -0,0 +1,2 @@
1
+ import type { CommandModule } from "yargs";
2
+ export declare const tracesCommand: CommandModule;
@@ -0,0 +1,125 @@
1
+ /**
2
+ * `interf traces` — inspect Context Graph traces on the connected instance.
3
+ *
4
+ * interf traces ls --project <id>
5
+ * interf traces show <trace-kind> --project <id>
6
+ */
7
+ import chalk from "chalk";
8
+ import { CONNECT_OR_ERROR_HINT, readActiveConnection } from "../../packages/runtime/connection-config.js";
9
+ import { TracesSchema, } from "../../packages/contracts/lib/project-schema.js";
10
+ import { projectSubresourcePath } from "../../packages/runtime/service/routes.js";
11
+ function resolveConnection(args) {
12
+ const conn = readActiveConnection({
13
+ urlOverride: args.url,
14
+ authTokenOverride: args.token,
15
+ });
16
+ if (!conn) {
17
+ console.error(CONNECT_OR_ERROR_HINT);
18
+ process.exit(1);
19
+ }
20
+ return { url: conn.url.replace(/\/+$/, ""), token: conn.auth_token };
21
+ }
22
+ async function callJson(url, token) {
23
+ const headers = new Headers();
24
+ if (token)
25
+ headers.set("authorization", `Bearer ${token}`);
26
+ const response = await fetch(url, { headers });
27
+ const raw = await response.text();
28
+ let body = null;
29
+ if (raw) {
30
+ try {
31
+ body = JSON.parse(raw);
32
+ }
33
+ catch {
34
+ body = null;
35
+ }
36
+ }
37
+ return { status: response.status, body, raw };
38
+ }
39
+ function tracesUrl(baseUrl, projectId) {
40
+ return `${baseUrl}${projectSubresourcePath(projectId, "traces")}`;
41
+ }
42
+ async function readTraces(baseUrl, token, projectId) {
43
+ const { status, body, raw } = await callJson(tracesUrl(baseUrl, projectId), token);
44
+ if (status !== 200 || !body) {
45
+ console.error(chalk.red(`Failed to read Context Graph traces (HTTP ${status}).`));
46
+ if (raw)
47
+ console.error(raw);
48
+ process.exit(1);
49
+ }
50
+ const parsed = TracesSchema.safeParse(body);
51
+ if (!parsed.success) {
52
+ console.error(chalk.red("Failed to parse Context Graph traces."));
53
+ process.exit(1);
54
+ }
55
+ return parsed.data;
56
+ }
57
+ function renderTrace(trace) {
58
+ const marker = trace.passed === false ? chalk.red("fail") : chalk.green("pass");
59
+ const value = trace.count === undefined
60
+ ? ""
61
+ : trace.total === undefined
62
+ ? chalk.dim(` ${trace.count}`)
63
+ : chalk.dim(` ${trace.count}/${trace.total}`);
64
+ console.log(` ${marker} ${chalk.bold(trace.kind)}${value}`);
65
+ console.log(chalk.dim(` ${trace.label}`));
66
+ if (trace.detail)
67
+ console.log(chalk.dim(` ${trace.detail}`));
68
+ }
69
+ export const tracesCommand = {
70
+ command: "traces <subcommand>",
71
+ describe: "Inspect Context Graph traces for a Project",
72
+ builder: (yargs) => yargs
73
+ .option("url", { type: "string", describe: "Override the active connection URL" })
74
+ .option("token", { type: "string", describe: "Override the active bearer token" })
75
+ .option("project", { type: "string", demandOption: true, describe: "Project id" })
76
+ .command("ls", "List Context Graph traces for a Project", (y) => y, async (args) => {
77
+ const { url, token } = resolveConnection(args);
78
+ const traces = await readTraces(url, token, args.project);
79
+ const items = traces.items ?? [];
80
+ console.log();
81
+ console.log(chalk.bold(` ${traces.project_id} / ${traces.graph_id}`));
82
+ console.log(chalk.dim(` files: ${traces.files_processed}/${traces.files_total}`));
83
+ console.log(chalk.dim(` checks: ${traces.checks_passed}/${traces.checks_total}`));
84
+ console.log(chalk.dim(` ready: ${traces.ready ? "yes" : "no"}`));
85
+ if (items.length === 0) {
86
+ console.log(chalk.dim(" No trace items."));
87
+ }
88
+ else {
89
+ console.log();
90
+ for (const trace of items)
91
+ renderTrace(trace);
92
+ }
93
+ console.log();
94
+ })
95
+ .command("show <traceKind>", "Show one Context Graph trace item", (y) => y
96
+ .positional("traceKind", {
97
+ type: "string",
98
+ demandOption: true,
99
+ describe: "Trace kind, for example files-processed or checks",
100
+ })
101
+ .option("json", {
102
+ type: "boolean",
103
+ default: false,
104
+ describe: "Print the raw trace item JSON",
105
+ }), async (args) => {
106
+ const { url, token } = resolveConnection(args);
107
+ const traces = await readTraces(url, token, args.project);
108
+ const trace = (traces.items ?? []).find((item) => item.kind === args.traceKind);
109
+ if (!trace) {
110
+ console.error(chalk.red(`Trace ${args.traceKind} was not found for Project ${args.project}.`));
111
+ process.exit(1);
112
+ }
113
+ if (args.json) {
114
+ console.log(JSON.stringify(trace, null, 2));
115
+ return;
116
+ }
117
+ console.log();
118
+ renderTrace(trace);
119
+ console.log();
120
+ })
121
+ .demandCommand(1, "Choose a traces subcommand."),
122
+ handler: () => {
123
+ // Subcommands own all behavior.
124
+ },
125
+ };