@interf/compiler 0.22.2 → 0.50.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 (616) hide show
  1. package/README.md +119 -282
  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 -35
  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 +9 -0
  10. package/dist/cli/commands/benchmark.js +58 -0
  11. package/dist/cli/commands/build-plan.js +107 -139
  12. package/dist/cli/commands/build.d.ts +3 -4
  13. package/dist/cli/commands/build.js +16 -45
  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 +344 -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 +4 -2
  20. package/dist/cli/commands/mcp.js +846 -232
  21. package/dist/cli/commands/project.d.ts +2 -0
  22. package/dist/cli/commands/project.js +176 -0
  23. package/dist/cli/commands/reset.d.ts +3 -4
  24. package/dist/cli/commands/reset.js +10 -31
  25. package/dist/cli/commands/runs.js +136 -57
  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 +35 -45
  30. package/dist/cli/commands/traces.d.ts +2 -0
  31. package/dist/cli/commands/traces.js +97 -0
  32. package/dist/cli/commands/wizard.js +171 -178
  33. package/dist/cli/index.d.ts +7 -4
  34. package/dist/cli/index.js +13 -7
  35. package/dist/cli/lib/http-client.d.ts +39 -0
  36. package/dist/cli/lib/http-client.js +73 -0
  37. package/dist/index.d.ts +2 -2
  38. package/dist/index.js +2 -2
  39. package/dist/packages/build-plans/authoring/brief.d.ts +538 -0
  40. package/dist/packages/build-plans/authoring/brief.js +89 -0
  41. package/dist/packages/build-plans/authoring/build-plan-authoring.d.ts +52 -11
  42. package/dist/packages/build-plans/authoring/build-plan-authoring.js +493 -46
  43. package/dist/packages/build-plans/authoring/build-plan-edit-session.d.ts +10 -1
  44. package/dist/packages/build-plans/authoring/build-plan-edit-session.js +27 -4
  45. package/dist/packages/build-plans/authoring/build-plan-improvement.d.ts +9 -6
  46. package/dist/packages/build-plans/authoring/build-plan-improvement.js +97 -46
  47. package/dist/packages/build-plans/authoring/lib/build-plan-edit-utils.d.ts +1 -0
  48. package/dist/packages/build-plans/authoring/lib/build-plan-edit-utils.js +7 -7
  49. package/dist/packages/build-plans/build-plan-resolution.d.ts +1 -1
  50. package/dist/packages/build-plans/build-plan-resolution.js +3 -3
  51. package/dist/packages/build-plans/index.d.ts +1 -1
  52. package/dist/packages/build-plans/index.js +1 -1
  53. package/dist/packages/build-plans/package/build-plan-definitions.d.ts +14 -13
  54. package/dist/packages/build-plans/package/build-plan-definitions.js +45 -42
  55. package/dist/packages/build-plans/package/build-plan-helpers.d.ts +3 -2
  56. package/dist/packages/build-plans/package/build-plan-helpers.js +27 -13
  57. package/dist/packages/build-plans/package/build-plan-review-paths.d.ts +5 -5
  58. package/dist/packages/build-plans/package/build-plan-review-paths.js +15 -15
  59. package/dist/packages/build-plans/package/build-plan-stage-runner.d.ts +5 -4
  60. package/dist/packages/build-plans/package/build-plan-stage-runner.js +23 -11
  61. package/dist/packages/build-plans/package/builtin-build-plan.d.ts +7 -8
  62. package/dist/packages/build-plans/package/builtin-build-plan.js +10 -11
  63. package/dist/packages/build-plans/package/context-interface.d.ts +14 -9
  64. package/dist/packages/build-plans/package/context-interface.js +14 -33
  65. package/dist/packages/build-plans/package/interf-build-plan-package.d.ts +6 -17
  66. package/dist/packages/build-plans/package/interf-build-plan-package.js +68 -64
  67. package/dist/packages/build-plans/package/local-build-plans.d.ts +21 -14
  68. package/dist/packages/build-plans/package/local-build-plans.js +105 -55
  69. package/dist/packages/build-plans/package/user-build-plans.js +1 -1
  70. package/dist/packages/contracts/index.d.ts +5 -2
  71. package/dist/packages/contracts/index.js +3 -1
  72. package/dist/packages/contracts/lib/context-graph-layer.d.ts +161 -0
  73. package/dist/packages/contracts/lib/context-graph-layer.js +216 -0
  74. package/dist/packages/contracts/lib/project-paths.d.ts +144 -0
  75. package/dist/packages/contracts/lib/project-paths.js +220 -0
  76. package/dist/packages/contracts/lib/project-schema.d.ts +423 -0
  77. package/dist/packages/contracts/lib/project-schema.js +138 -0
  78. package/dist/packages/contracts/lib/schema.d.ts +1273 -81
  79. package/dist/packages/contracts/lib/schema.js +675 -79
  80. package/dist/packages/contracts/utils/filesystem.d.ts +1 -0
  81. package/dist/packages/contracts/utils/filesystem.js +29 -1
  82. package/dist/packages/contracts/utils/parse.js +67 -0
  83. package/dist/packages/projects/index.d.ts +6 -0
  84. package/dist/packages/{project → projects}/index.js +0 -3
  85. package/dist/packages/{project → projects}/interf-detect.d.ts +12 -12
  86. package/dist/packages/{project → projects}/interf-detect.js +56 -50
  87. package/dist/packages/projects/interf.d.ts +2 -0
  88. package/dist/packages/projects/interf.js +1 -0
  89. package/dist/packages/projects/lib/schema.d.ts +77 -0
  90. package/dist/packages/projects/lib/schema.js +91 -0
  91. package/dist/packages/projects/source-config.d.ts +53 -0
  92. package/dist/packages/projects/source-config.js +339 -0
  93. package/dist/packages/projects/source-folders.d.ts +11 -0
  94. package/dist/packages/{project → projects}/source-folders.js +26 -26
  95. package/dist/packages/{engine → runtime}/action-planner.d.ts +1 -1
  96. package/dist/packages/{engine → runtime}/action-planner.js +20 -22
  97. package/dist/packages/runtime/action-values.d.ts +1 -0
  98. package/dist/packages/runtime/action-values.js +1 -0
  99. package/dist/packages/runtime/actions/errors.d.ts +2 -0
  100. package/dist/packages/runtime/actions/errors.js +12 -0
  101. package/dist/packages/runtime/actions/fields.d.ts +86 -0
  102. package/dist/packages/runtime/actions/form-builders.d.ts +14 -0
  103. package/dist/packages/runtime/actions/form-builders.js +667 -0
  104. package/dist/packages/runtime/actions/form-validators.d.ts +8 -0
  105. package/dist/packages/runtime/actions/form-validators.js +134 -0
  106. package/dist/packages/runtime/actions/helpers.d.ts +11 -0
  107. package/dist/packages/runtime/actions/helpers.js +80 -0
  108. package/dist/packages/runtime/actions/index.d.ts +8 -0
  109. package/dist/packages/runtime/actions/index.js +11 -0
  110. package/dist/packages/runtime/actions/registry.d.ts +64 -0
  111. package/dist/packages/runtime/actions/registry.js +62 -0
  112. package/dist/packages/runtime/actions/requests.d.ts +45 -0
  113. package/dist/packages/runtime/actions/requests.js +164 -0
  114. package/dist/packages/runtime/actions/schemas.d.ts +161 -0
  115. package/dist/packages/runtime/actions/schemas.js +37 -0
  116. package/dist/packages/runtime/agent-handoff.d.ts +11 -0
  117. package/dist/packages/runtime/agent-handoff.js +102 -0
  118. package/dist/packages/{engine → runtime}/agents/index.d.ts +1 -2
  119. package/dist/packages/{engine → runtime}/agents/index.js +1 -2
  120. package/dist/packages/runtime/agents/lib/args.d.ts +14 -0
  121. package/dist/packages/runtime/agents/lib/args.js +24 -0
  122. package/dist/packages/{engine → runtime}/agents/lib/constants.d.ts +4 -1
  123. package/dist/packages/runtime/agents/lib/constants.js +13 -0
  124. package/dist/packages/runtime/agents/lib/context-graph-bootstrap.d.ts +3 -0
  125. package/dist/packages/{engine/agents/lib/verifiable-context-bootstrap.js → runtime/agents/lib/context-graph-bootstrap.js} +5 -6
  126. package/dist/packages/{engine → runtime}/agents/lib/detection.d.ts +5 -0
  127. package/dist/packages/{engine → runtime}/agents/lib/detection.js +16 -7
  128. package/dist/packages/{engine → runtime}/agents/lib/execution-profile.d.ts +14 -0
  129. package/dist/packages/{engine → runtime}/agents/lib/execution-profile.js +31 -14
  130. package/dist/packages/{engine → runtime}/agents/lib/execution.js +22 -6
  131. package/dist/packages/{engine → runtime}/agents/lib/executors.d.ts +1 -0
  132. package/dist/packages/{engine → runtime}/agents/lib/executors.js +11 -2
  133. package/dist/packages/runtime/agents/lib/logs.d.ts +12 -0
  134. package/dist/packages/runtime/agents/lib/logs.js +41 -0
  135. package/dist/packages/{engine → runtime}/agents/lib/preflight.js +19 -14
  136. package/dist/packages/runtime/agents/lib/render.d.ts +26 -0
  137. package/dist/packages/{engine → runtime}/agents/lib/render.js +48 -22
  138. package/dist/packages/runtime/agents/lib/shell-fs.d.ts +18 -0
  139. package/dist/packages/runtime/agents/lib/shell-fs.js +190 -0
  140. package/dist/packages/runtime/agents/lib/shell-paths.d.ts +16 -0
  141. package/dist/packages/runtime/agents/lib/shell-paths.js +63 -0
  142. package/dist/packages/runtime/agents/lib/shell-projection.d.ts +25 -0
  143. package/dist/packages/runtime/agents/lib/shell-projection.js +314 -0
  144. package/dist/packages/runtime/agents/lib/shell-templates.d.ts +30 -0
  145. package/dist/packages/runtime/agents/lib/shell-templates.js +494 -0
  146. package/dist/packages/runtime/agents/lib/shell-workspace.d.ts +17 -0
  147. package/dist/packages/runtime/agents/lib/shell-workspace.js +70 -0
  148. package/dist/packages/runtime/agents/lib/shells.d.ts +92 -0
  149. package/dist/packages/runtime/agents/lib/shells.js +509 -0
  150. package/dist/packages/runtime/agents/lib/source-context-scan.d.ts +10 -0
  151. package/dist/packages/runtime/agents/lib/source-context-scan.js +388 -0
  152. package/dist/packages/{engine → runtime}/agents/lib/status.js +1 -14
  153. package/dist/packages/runtime/agents/lib/string-utils.d.ts +16 -0
  154. package/dist/packages/runtime/agents/lib/string-utils.js +36 -0
  155. package/dist/packages/{engine → runtime}/agents/lib/types.d.ts +1 -0
  156. package/dist/packages/{engine → runtime}/agents/lib/user-config.d.ts +8 -2
  157. package/dist/packages/{engine → runtime}/agents/lib/user-config.js +8 -2
  158. package/dist/packages/runtime/agents/providers/claude-code.d.ts +13 -0
  159. package/dist/packages/runtime/agents/providers/claude-code.js +45 -0
  160. package/dist/packages/runtime/agents/providers/codex.d.ts +17 -0
  161. package/dist/packages/runtime/agents/providers/codex.js +66 -0
  162. package/dist/packages/runtime/agents/providers/cursor.d.ts +9 -0
  163. package/dist/packages/runtime/agents/providers/cursor.js +24 -0
  164. package/dist/packages/runtime/agents/providers/index.d.ts +9 -0
  165. package/dist/packages/runtime/agents/providers/index.js +31 -0
  166. package/dist/packages/runtime/agents/providers/types.d.ts +50 -0
  167. package/dist/packages/{engine → runtime}/agents/registry.d.ts +13 -2
  168. package/dist/packages/{engine → runtime}/agents/registry.js +48 -10
  169. package/dist/packages/{engine → runtime}/agents/role-executors.d.ts +1 -1
  170. package/dist/packages/{engine → runtime}/agents/role-executors.js +9 -7
  171. package/dist/packages/{engine → runtime}/agents/role-router.js +7 -5
  172. package/dist/packages/runtime/auth/account-context.d.ts +52 -0
  173. package/dist/packages/runtime/auth/account-context.js +68 -0
  174. package/dist/packages/runtime/auth/auth-flow.d.ts +73 -0
  175. package/dist/packages/runtime/auth/auth-flow.js +189 -0
  176. package/dist/packages/runtime/auth/jwt-validator.d.ts +58 -0
  177. package/dist/packages/runtime/auth/jwt-validator.js +86 -0
  178. package/dist/packages/runtime/auth/keychain.d.ts +35 -0
  179. package/dist/packages/runtime/auth/keychain.js +85 -0
  180. package/dist/packages/runtime/auth/session-store.d.ts +38 -0
  181. package/dist/packages/runtime/auth/session-store.js +96 -0
  182. package/dist/packages/runtime/auth/workos-client.d.ts +58 -0
  183. package/dist/packages/runtime/auth/workos-client.js +87 -0
  184. package/dist/packages/runtime/benchmark-question-draft.d.ts +23 -0
  185. package/dist/packages/runtime/benchmark-question-draft.js +153 -0
  186. package/dist/packages/runtime/build/artifact-counts.d.ts +1 -0
  187. package/dist/packages/{engine → runtime}/build/artifact-counts.js +5 -9
  188. package/dist/packages/{engine → runtime}/build/artifact-status.d.ts +6 -6
  189. package/dist/packages/{engine → runtime}/build/artifact-status.js +26 -24
  190. package/dist/packages/runtime/build/atomic-fs.d.ts +3 -0
  191. package/dist/packages/runtime/build/atomic-fs.js +95 -0
  192. package/dist/packages/runtime/build/billing-events.d.ts +78 -0
  193. package/dist/packages/{engine → runtime}/build/billing-events.js +17 -19
  194. package/dist/packages/runtime/build/build-evidence.d.ts +16 -0
  195. package/dist/packages/runtime/build/build-evidence.js +179 -0
  196. package/dist/packages/{engine → runtime}/build/build-pipeline.d.ts +12 -8
  197. package/dist/packages/runtime/build/build-pipeline.js +388 -0
  198. package/dist/packages/{engine → runtime}/build/build-plan-primitives.d.ts +1 -1
  199. package/dist/packages/{engine → runtime}/build/build-plan-primitives.js +0 -1
  200. package/dist/packages/runtime/build/build-plan-runs.d.ts +14 -0
  201. package/dist/packages/runtime/build/build-plan-runs.js +31 -0
  202. package/dist/packages/runtime/build/build-stage-plan.d.ts +16 -0
  203. package/dist/packages/runtime/build/build-stage-plan.js +101 -0
  204. package/dist/packages/{engine → runtime}/build/build-stage-runner.d.ts +2 -1
  205. package/dist/packages/runtime/build/build-stage-runner.js +302 -0
  206. package/dist/packages/{engine → runtime}/build/build-target.d.ts +7 -4
  207. package/dist/packages/runtime/build/build-target.js +40 -0
  208. package/dist/packages/{engine → runtime}/build/check-evaluator.d.ts +14 -16
  209. package/dist/packages/runtime/build/check-evaluator.js +1226 -0
  210. package/dist/packages/runtime/build/context-graph-paths.d.ts +64 -0
  211. package/dist/packages/runtime/build/context-graph-paths.js +160 -0
  212. package/dist/packages/runtime/build/context-graph-schema.d.ts +19 -0
  213. package/dist/packages/runtime/build/context-graph-schema.js +39 -0
  214. package/dist/packages/{engine → runtime}/build/discovery.d.ts +2 -2
  215. package/dist/packages/{engine → runtime}/build/discovery.js +4 -4
  216. package/dist/packages/{engine → runtime}/build/index.d.ts +7 -5
  217. package/dist/packages/{engine → runtime}/build/index.js +7 -5
  218. package/dist/packages/runtime/build/inspect-map.d.ts +10 -0
  219. package/dist/packages/runtime/build/inspect-map.js +270 -0
  220. package/dist/packages/{engine → runtime}/build/lib/schema.d.ts +449 -123
  221. package/dist/packages/runtime/build/lib/schema.js +494 -0
  222. package/dist/packages/runtime/build/native-entrypoint.d.ts +2 -0
  223. package/dist/packages/runtime/build/native-entrypoint.js +286 -0
  224. package/dist/packages/runtime/build/reset.d.ts +2 -0
  225. package/dist/packages/runtime/build/reset.js +62 -0
  226. package/dist/packages/{engine → runtime}/build/runtime-contracts.js +13 -7
  227. package/dist/packages/runtime/build/runtime-inventory.d.ts +7 -0
  228. package/dist/packages/{engine → runtime}/build/runtime-inventory.js +3 -3
  229. package/dist/packages/runtime/build/runtime-log-paths.d.ts +3 -0
  230. package/dist/packages/runtime/build/runtime-log-paths.js +16 -0
  231. package/dist/packages/{engine → runtime}/build/runtime-prompt.js +12 -9
  232. package/dist/packages/{engine → runtime}/build/runtime-reconcile.d.ts +1 -1
  233. package/dist/packages/{engine → runtime}/build/runtime-reconcile.js +25 -21
  234. package/dist/packages/runtime/build/runtime-runs.d.ts +10 -0
  235. package/dist/packages/runtime/build/runtime-runs.js +318 -0
  236. package/dist/packages/{engine → runtime}/build/runtime-types.d.ts +9 -6
  237. package/dist/packages/runtime/build/runtime-types.js +1 -0
  238. package/dist/packages/runtime/build/runtime.d.ts +8 -0
  239. package/dist/packages/runtime/build/runtime.js +7 -0
  240. package/dist/packages/runtime/build/source-files.d.ts +58 -0
  241. package/dist/packages/runtime/build/source-files.js +193 -0
  242. package/dist/packages/runtime/build/source-inventory.d.ts +28 -0
  243. package/dist/packages/runtime/build/source-inventory.js +512 -0
  244. package/dist/packages/runtime/build/source-manifest.d.ts +63 -0
  245. package/dist/packages/runtime/build/source-manifest.js +220 -0
  246. package/dist/packages/runtime/build/stage-evidence.d.ts +22 -0
  247. package/dist/packages/runtime/build/stage-evidence.js +386 -0
  248. package/dist/packages/runtime/build/stage-manifest.d.ts +45 -0
  249. package/dist/packages/runtime/build/stage-manifest.js +1125 -0
  250. package/dist/packages/runtime/build/stage-reuse.d.ts +11 -0
  251. package/dist/packages/runtime/build/stage-reuse.js +154 -0
  252. package/dist/packages/runtime/build/stage-session.d.ts +81 -0
  253. package/dist/packages/runtime/build/stage-session.js +308 -0
  254. package/dist/packages/runtime/build/state-artifacts.d.ts +9 -0
  255. package/dist/packages/runtime/build/state-artifacts.js +14 -0
  256. package/dist/packages/runtime/build/state-health.d.ts +4 -0
  257. package/dist/packages/{engine → runtime}/build/state-health.js +21 -26
  258. package/dist/packages/runtime/build/state-io.d.ts +12 -0
  259. package/dist/packages/runtime/build/state-io.js +118 -0
  260. package/dist/packages/runtime/build/state-view.d.ts +5 -0
  261. package/dist/packages/runtime/build/state-view.js +121 -0
  262. package/dist/packages/runtime/build/state.d.ts +7 -0
  263. package/dist/packages/runtime/build/state.js +12 -0
  264. package/dist/packages/runtime/build/summary-coverage-index.d.ts +21 -0
  265. package/dist/packages/runtime/build/summary-coverage-index.js +189 -0
  266. package/dist/packages/runtime/build/traces.d.ts +30 -0
  267. package/dist/packages/runtime/build/traces.js +133 -0
  268. package/dist/packages/{engine/build/validate-verifiable-context.d.ts → runtime/build/validate-context-graph.d.ts} +6 -6
  269. package/dist/packages/{engine/build/validate-verifiable-context.js → runtime/build/validate-context-graph.js} +49 -36
  270. package/dist/packages/{engine → runtime}/build/validate.d.ts +5 -5
  271. package/dist/packages/{engine → runtime}/build/validate.js +26 -26
  272. package/dist/packages/{engine → runtime}/client.d.ts +18 -18
  273. package/dist/packages/{engine → runtime}/client.js +48 -36
  274. package/dist/packages/{engine → runtime}/connection-config.d.ts +3 -2
  275. package/dist/packages/{engine → runtime}/connection-config.js +9 -8
  276. package/dist/packages/runtime/context-checks.d.ts +10 -0
  277. package/dist/packages/runtime/context-checks.js +127 -0
  278. package/dist/packages/runtime/context-graph-scaffold.d.ts +9 -0
  279. package/dist/packages/runtime/context-graph-scaffold.js +135 -0
  280. package/dist/packages/runtime/context-graph-semantic-graph.d.ts +9 -0
  281. package/dist/packages/runtime/context-graph-semantic-graph.js +416 -0
  282. package/dist/packages/runtime/entitlement-guard.d.ts +43 -0
  283. package/dist/packages/runtime/entitlement-guard.js +70 -0
  284. package/dist/packages/{engine → runtime}/execution/index.d.ts +2 -2
  285. package/dist/packages/{engine → runtime}/execution/index.js +1 -1
  286. package/dist/packages/{engine → runtime}/execution/lib/schema.d.ts +272 -191
  287. package/dist/packages/{engine → runtime}/execution/lib/schema.js +35 -32
  288. package/dist/packages/runtime/index.d.ts +29 -0
  289. package/dist/packages/runtime/index.js +21 -0
  290. package/dist/packages/runtime/instance-paths.d.ts +30 -0
  291. package/dist/packages/runtime/instance-paths.js +29 -0
  292. package/dist/packages/runtime/native-run-handlers.d.ts +63 -0
  293. package/dist/packages/{engine → runtime}/native-run-handlers.js +217 -166
  294. package/dist/packages/runtime/plan-artifact-contract.d.ts +17 -0
  295. package/dist/packages/runtime/plan-artifact-contract.js +42 -0
  296. package/dist/packages/runtime/project-entries.d.ts +11 -0
  297. package/dist/packages/runtime/project-entries.js +49 -0
  298. package/dist/packages/runtime/project-source-state.d.ts +26 -0
  299. package/dist/packages/runtime/project-source-state.js +56 -0
  300. package/dist/packages/runtime/project-store.d.ts +90 -0
  301. package/dist/packages/runtime/project-store.js +195 -0
  302. package/dist/packages/runtime/requested-artifacts.d.ts +7 -0
  303. package/dist/packages/{engine → runtime}/requested-artifacts.js +23 -1
  304. package/dist/packages/{engine → runtime}/run-observability.d.ts +2 -1
  305. package/dist/packages/{engine → runtime}/run-observability.js +174 -87
  306. package/dist/packages/runtime/runtime-action-proposals.d.ts +7 -0
  307. package/dist/packages/runtime/runtime-action-proposals.js +542 -0
  308. package/dist/packages/runtime/runtime-build-plans.d.ts +5 -0
  309. package/dist/packages/runtime/runtime-build-plans.js +175 -0
  310. package/dist/packages/runtime/runtime-build-runs.d.ts +47 -0
  311. package/dist/packages/runtime/runtime-build-runs.js +555 -0
  312. package/dist/packages/runtime/runtime-caches.d.ts +117 -0
  313. package/dist/packages/runtime/runtime-caches.js +266 -0
  314. package/dist/packages/{engine → runtime}/runtime-event-applier.d.ts +3 -1
  315. package/dist/packages/{engine → runtime}/runtime-event-applier.js +53 -17
  316. package/dist/packages/runtime/runtime-executor.d.ts +22 -0
  317. package/dist/packages/runtime/runtime-executor.js +131 -0
  318. package/dist/packages/runtime/runtime-jobs.d.ts +13 -0
  319. package/dist/packages/runtime/runtime-jobs.js +463 -0
  320. package/dist/packages/runtime/runtime-observability.d.ts +11 -0
  321. package/dist/packages/runtime/runtime-observability.js +39 -0
  322. package/dist/packages/{engine → runtime}/runtime-persistence.d.ts +9 -18
  323. package/dist/packages/{engine → runtime}/runtime-persistence.js +25 -25
  324. package/dist/packages/runtime/runtime-project-mutations.d.ts +7 -0
  325. package/dist/packages/runtime/runtime-project-mutations.js +65 -0
  326. package/dist/packages/runtime/runtime-project-reads.d.ts +18 -0
  327. package/dist/packages/runtime/runtime-project-reads.js +574 -0
  328. package/dist/packages/runtime/runtime-proposal-helpers.d.ts +22 -0
  329. package/dist/packages/runtime/runtime-proposal-helpers.js +223 -0
  330. package/dist/packages/{engine → runtime}/runtime-resource-builders.d.ts +23 -16
  331. package/dist/packages/{engine → runtime}/runtime-resource-builders.js +58 -46
  332. package/dist/packages/runtime/runtime-status.d.ts +14 -0
  333. package/dist/packages/runtime/runtime-status.js +15 -0
  334. package/dist/packages/runtime/runtime-verify-runs.d.ts +84 -0
  335. package/dist/packages/runtime/runtime-verify-runs.js +296 -0
  336. package/dist/packages/runtime/runtime.d.ts +1582 -0
  337. package/dist/packages/runtime/runtime.js +431 -0
  338. package/dist/packages/runtime/schemas/actions.d.ts +1206 -0
  339. package/dist/packages/runtime/schemas/actions.js +117 -0
  340. package/dist/packages/runtime/schemas/agents.d.ts +104 -0
  341. package/dist/packages/runtime/schemas/agents.js +74 -0
  342. package/dist/packages/runtime/schemas/build-plans.d.ts +1132 -0
  343. package/dist/packages/runtime/schemas/build-plans.js +141 -0
  344. package/dist/packages/runtime/schemas/context-graphs.d.ts +1522 -0
  345. package/dist/packages/runtime/schemas/context-graphs.js +110 -0
  346. package/dist/packages/runtime/schemas/files.d.ts +227 -0
  347. package/dist/packages/runtime/schemas/files.js +28 -0
  348. package/dist/packages/runtime/schemas/index.d.ts +9 -0
  349. package/dist/packages/runtime/schemas/index.js +13 -0
  350. package/dist/packages/runtime/schemas/instance.d.ts +141 -0
  351. package/dist/packages/runtime/schemas/instance.js +143 -0
  352. package/dist/packages/runtime/schemas/jobs.d.ts +339 -0
  353. package/dist/packages/runtime/schemas/jobs.js +107 -0
  354. package/dist/packages/runtime/schemas/projects.d.ts +366 -0
  355. package/dist/packages/runtime/schemas/projects.js +160 -0
  356. package/dist/packages/runtime/schemas/runs.d.ts +3445 -0
  357. package/dist/packages/runtime/schemas/runs.js +115 -0
  358. package/dist/packages/runtime/service/index.d.ts +3 -0
  359. package/dist/packages/runtime/service/index.js +3 -0
  360. package/dist/packages/runtime/service/openapi.d.ts +7 -0
  361. package/dist/packages/runtime/service/openapi.js +118 -0
  362. package/dist/packages/runtime/service/operations.d.ts +3011 -0
  363. package/dist/packages/runtime/service/operations.js +375 -0
  364. package/dist/packages/runtime/service/routes.d.ts +114 -0
  365. package/dist/packages/runtime/service/routes.js +128 -0
  366. package/dist/packages/runtime/service/server-api-files.d.ts +10 -0
  367. package/dist/packages/runtime/service/server-api-files.js +85 -0
  368. package/dist/packages/runtime/service/server-app-boot.d.ts +4 -0
  369. package/dist/packages/runtime/service/server-app-boot.js +46 -0
  370. package/dist/packages/runtime/service/server-guards.d.ts +63 -0
  371. package/dist/packages/runtime/service/server-guards.js +181 -0
  372. package/dist/packages/runtime/service/server-helpers.d.ts +38 -0
  373. package/dist/packages/runtime/service/server-helpers.js +108 -0
  374. package/dist/packages/runtime/service/server-instance-helpers.d.ts +30 -0
  375. package/dist/packages/runtime/service/server-instance-helpers.js +114 -0
  376. package/dist/packages/runtime/service/server-routes-action-proposals.d.ts +3 -0
  377. package/dist/packages/runtime/service/server-routes-action-proposals.js +45 -0
  378. package/dist/packages/runtime/service/server-routes-agents.d.ts +4 -0
  379. package/dist/packages/runtime/service/server-routes-agents.js +132 -0
  380. package/dist/packages/runtime/service/server-routes-auth.d.ts +33 -0
  381. package/dist/packages/runtime/service/server-routes-auth.js +138 -0
  382. package/dist/packages/runtime/service/server-routes-build-plans.d.ts +3 -0
  383. package/dist/packages/runtime/service/server-routes-build-plans.js +86 -0
  384. package/dist/packages/runtime/service/server-routes-discovery.d.ts +4 -0
  385. package/dist/packages/runtime/service/server-routes-discovery.js +196 -0
  386. package/dist/packages/runtime/service/server-routes-events.d.ts +5 -0
  387. package/dist/packages/runtime/service/server-routes-events.js +99 -0
  388. package/dist/packages/runtime/service/server-routes-project-context.d.ts +9 -0
  389. package/dist/packages/runtime/service/server-routes-project-context.js +287 -0
  390. package/dist/packages/runtime/service/server-routes-project-jobs.d.ts +9 -0
  391. package/dist/packages/runtime/service/server-routes-project-jobs.js +137 -0
  392. package/dist/packages/runtime/service/server-routes-project-runs.d.ts +14 -0
  393. package/dist/packages/runtime/service/server-routes-project-runs.js +88 -0
  394. package/dist/packages/runtime/service/server-routes-projects.d.ts +4 -0
  395. package/dist/packages/runtime/service/server-routes-projects.js +96 -0
  396. package/dist/packages/runtime/service/server-routes-runs.d.ts +3 -0
  397. package/dist/packages/runtime/service/server-routes-runs.js +119 -0
  398. package/dist/packages/runtime/service/server.d.ts +37 -0
  399. package/dist/packages/runtime/service/server.js +300 -0
  400. package/dist/packages/{engine → runtime/service}/service-registry.d.ts +5 -5
  401. package/dist/packages/{engine → runtime/service}/service-registry.js +7 -7
  402. package/dist/packages/runtime/verify/benchmark-run.d.ts +81 -0
  403. package/dist/packages/runtime/verify/benchmark-run.js +303 -0
  404. package/dist/packages/{engine → runtime}/verify/index.d.ts +2 -2
  405. package/dist/packages/{engine → runtime}/verify/index.js +1 -1
  406. package/dist/packages/{engine → runtime}/verify/lib/schema.d.ts +83 -16
  407. package/dist/packages/{engine → runtime}/verify/lib/schema.js +38 -18
  408. package/dist/packages/runtime/verify/test-file-guard.d.ts +2 -0
  409. package/dist/packages/runtime/verify/test-file-guard.js +29 -0
  410. package/dist/packages/{engine → runtime}/verify/verify-execution.d.ts +7 -0
  411. package/dist/packages/{engine → runtime}/verify/verify-execution.js +119 -45
  412. package/dist/packages/{engine → runtime}/verify/verify-paths.d.ts +5 -4
  413. package/dist/packages/runtime/verify/verify-paths.js +65 -0
  414. package/dist/packages/{engine → runtime}/verify/verify-sandbox.d.ts +1 -1
  415. package/dist/packages/runtime/verify/verify-sandbox.js +88 -0
  416. package/dist/packages/{engine → runtime}/verify/verify-specs.d.ts +2 -0
  417. package/dist/packages/runtime/verify/verify-specs.js +126 -0
  418. package/dist/packages/runtime/verify/verify-targets.d.ts +5 -0
  419. package/dist/packages/{engine → runtime}/verify/verify-targets.js +12 -12
  420. package/dist/packages/runtime/verify/verify-types.js +1 -0
  421. package/dist/packages/{engine → runtime}/verify/verify.d.ts +1 -1
  422. package/dist/packages/{engine → runtime}/verify/verify.js +1 -1
  423. package/dist/packages/runtime/wire-schemas.d.ts +18 -0
  424. package/dist/packages/runtime/wire-schemas.js +27 -0
  425. package/package.json +32 -30
  426. package/public-repo/CONTRIBUTING.md +16 -18
  427. package/public-repo/README.md +119 -282
  428. package/public-repo/SECURITY.md +3 -4
  429. package/public-repo/build-plans/interf-default/README.md +24 -16
  430. package/public-repo/build-plans/interf-default/build/stages/entrypoint/SKILL.md +74 -0
  431. package/public-repo/build-plans/interf-default/build/stages/knowledge/SKILL.md +95 -0
  432. package/public-repo/build-plans/interf-default/build/stages/summarize/SKILL.md +49 -4
  433. package/public-repo/build-plans/interf-default/build-plan.json +49 -39
  434. package/public-repo/build-plans/interf-default/build-plan.schema.json +59 -33
  435. package/public-repo/build-plans/interf-default/improve/SKILL.md +3 -3
  436. package/public-repo/build-plans/interf-default/use/query/SKILL.md +18 -11
  437. package/public-repo/openapi/local-service.openapi.json +14227 -0
  438. package/public-repo/skills/interf/SKILL.md +508 -187
  439. package/dist/cli/commands/prep.d.ts +0 -2
  440. package/dist/cli/commands/prep.js +0 -240
  441. package/dist/cli/commands/test.d.ts +0 -10
  442. package/dist/cli/commands/test.js +0 -85
  443. package/dist/cli/commands/web.d.ts +0 -2
  444. package/dist/cli/commands/web.js +0 -286
  445. package/dist/interf-ui/404.html +0 -1
  446. package/dist/interf-ui/__next.__PAGE__.txt +0 -10
  447. package/dist/interf-ui/__next._full.txt +0 -20
  448. package/dist/interf-ui/__next._head.txt +0 -5
  449. package/dist/interf-ui/__next._index.txt +0 -5
  450. package/dist/interf-ui/__next._tree.txt +0 -5
  451. package/dist/interf-ui/_next/static/--reS3xBzM5zc6QxNjZd6/_buildManifest.js +0 -11
  452. package/dist/interf-ui/_next/static/--reS3xBzM5zc6QxNjZd6/_clientMiddlewareManifest.js +0 -1
  453. package/dist/interf-ui/_next/static/--reS3xBzM5zc6QxNjZd6/_ssgManifest.js +0 -1
  454. package/dist/interf-ui/_next/static/chunks/0.tjb6f4golw..css +0 -3
  455. package/dist/interf-ui/_next/static/chunks/03~yq9q893hmn.js +0 -1
  456. package/dist/interf-ui/_next/static/chunks/085-n_jv2ng_q.css +0 -1
  457. package/dist/interf-ui/_next/static/chunks/0dn41fa_zvgsl.js +0 -1
  458. package/dist/interf-ui/_next/static/chunks/0g-ea0zj5d-0k.js +0 -1
  459. package/dist/interf-ui/_next/static/chunks/0gwqglc4iz583.js +0 -1
  460. package/dist/interf-ui/_next/static/chunks/0haldgm65ve6l.js +0 -1
  461. package/dist/interf-ui/_next/static/chunks/0nv3am99vjzn4.js +0 -1
  462. package/dist/interf-ui/_next/static/chunks/0s77gt_o4jwtx.js +0 -1
  463. package/dist/interf-ui/_next/static/chunks/0y5z3t-z1c8ks.js.map +0 -5
  464. package/dist/interf-ui/_next/static/chunks/0~a36ujuzpaz..js +0 -116
  465. package/dist/interf-ui/_next/static/chunks/10jeodxe4nkgj.js +0 -31
  466. package/dist/interf-ui/_next/static/chunks/119h2rouych2t.js +0 -1
  467. package/dist/interf-ui/_next/static/chunks/13c8b~m8knjsf.js +0 -1
  468. package/dist/interf-ui/_next/static/chunks/14dznb2qpt-ho.js +0 -91
  469. package/dist/interf-ui/_next/static/chunks/15z_en80lrq-3.js +0 -5
  470. package/dist/interf-ui/_next/static/chunks/turbopack-0p.pvcjrtq-jh.js +0 -1
  471. package/dist/interf-ui/_next/static/chunks/turbopack-0usj_75.8frlw.js +0 -1
  472. package/dist/interf-ui/_next/static/chunks/turbopack-worker-0sjn--fhq~1cg.js +0 -1
  473. package/dist/interf-ui/_next/static/media/GeistMono_Variable.p.17jn9btb_52pq.woff2 +0 -0
  474. package/dist/interf-ui/_next/static/media/Geist_Variable-s.p.0-te~ja_gpvcf.woff2 +0 -0
  475. package/dist/interf-ui/_next/static/media/worker.102zas1s52_pf.js +0 -109
  476. package/dist/interf-ui/_not-found/__next._full.txt +0 -15
  477. package/dist/interf-ui/_not-found/__next._head.txt +0 -5
  478. package/dist/interf-ui/_not-found/__next._index.txt +0 -5
  479. package/dist/interf-ui/_not-found/__next._not-found.__PAGE__.txt +0 -5
  480. package/dist/interf-ui/_not-found/__next._not-found.txt +0 -5
  481. package/dist/interf-ui/_not-found/__next._tree.txt +0 -2
  482. package/dist/interf-ui/_not-found.html +0 -1
  483. package/dist/interf-ui/_not-found.txt +0 -15
  484. package/dist/interf-ui/index.html +0 -1
  485. package/dist/interf-ui/index.txt +0 -20
  486. package/dist/packages/contracts/lib/preparation-paths.d.ts +0 -117
  487. package/dist/packages/contracts/lib/preparation-paths.js +0 -177
  488. package/dist/packages/engine/action-definitions.d.ts +0 -407
  489. package/dist/packages/engine/action-definitions.js +0 -1158
  490. package/dist/packages/engine/action-values.d.ts +0 -1
  491. package/dist/packages/engine/action-values.js +0 -1
  492. package/dist/packages/engine/agents/lib/args.d.ts +0 -4
  493. package/dist/packages/engine/agents/lib/args.js +0 -52
  494. package/dist/packages/engine/agents/lib/chart-guidance.d.ts +0 -1
  495. package/dist/packages/engine/agents/lib/chart-guidance.js +0 -8
  496. package/dist/packages/engine/agents/lib/constants.js +0 -28
  497. package/dist/packages/engine/agents/lib/logs.d.ts +0 -2
  498. package/dist/packages/engine/agents/lib/logs.js +0 -17
  499. package/dist/packages/engine/agents/lib/render.d.ts +0 -8
  500. package/dist/packages/engine/agents/lib/schema.d.ts +0 -8
  501. package/dist/packages/engine/agents/lib/schema.js +0 -7
  502. package/dist/packages/engine/agents/lib/shells.d.ts +0 -74
  503. package/dist/packages/engine/agents/lib/shells.js +0 -1052
  504. package/dist/packages/engine/agents/lib/verifiable-context-bootstrap.d.ts +0 -3
  505. package/dist/packages/engine/build/artifact-counts.d.ts +0 -1
  506. package/dist/packages/engine/build/billing-events.d.ts +0 -89
  507. package/dist/packages/engine/build/build-pipeline.js +0 -175
  508. package/dist/packages/engine/build/build-plan-runs.d.ts +0 -14
  509. package/dist/packages/engine/build/build-plan-runs.js +0 -31
  510. package/dist/packages/engine/build/build-stage-plan.d.ts +0 -16
  511. package/dist/packages/engine/build/build-stage-plan.js +0 -100
  512. package/dist/packages/engine/build/build-stage-runner.js +0 -94
  513. package/dist/packages/engine/build/build-target.js +0 -16
  514. package/dist/packages/engine/build/check-evaluator.js +0 -298
  515. package/dist/packages/engine/build/lib/schema.js +0 -316
  516. package/dist/packages/engine/build/reset.d.ts +0 -2
  517. package/dist/packages/engine/build/reset.js +0 -74
  518. package/dist/packages/engine/build/runtime-inventory.d.ts +0 -7
  519. package/dist/packages/engine/build/runtime-paths.d.ts +0 -8
  520. package/dist/packages/engine/build/runtime-paths.js +0 -26
  521. package/dist/packages/engine/build/runtime-runs.d.ts +0 -10
  522. package/dist/packages/engine/build/runtime-runs.js +0 -224
  523. package/dist/packages/engine/build/runtime.d.ts +0 -5
  524. package/dist/packages/engine/build/runtime.js +0 -4
  525. package/dist/packages/engine/build/source-files.d.ts +0 -46
  526. package/dist/packages/engine/build/source-files.js +0 -149
  527. package/dist/packages/engine/build/state-artifacts.d.ts +0 -9
  528. package/dist/packages/engine/build/state-artifacts.js +0 -14
  529. package/dist/packages/engine/build/state-health.d.ts +0 -4
  530. package/dist/packages/engine/build/state-io.d.ts +0 -11
  531. package/dist/packages/engine/build/state-io.js +0 -82
  532. package/dist/packages/engine/build/state-paths.d.ts +0 -5
  533. package/dist/packages/engine/build/state-paths.js +0 -16
  534. package/dist/packages/engine/build/state-view.d.ts +0 -5
  535. package/dist/packages/engine/build/state-view.js +0 -94
  536. package/dist/packages/engine/build/state.d.ts +0 -7
  537. package/dist/packages/engine/build/state.js +0 -12
  538. package/dist/packages/engine/build/validate-helpers.d.ts +0 -12
  539. package/dist/packages/engine/build/validate-helpers.js +0 -41
  540. package/dist/packages/engine/build/verifiable-context-paths.d.ts +0 -47
  541. package/dist/packages/engine/build/verifiable-context-paths.js +0 -121
  542. package/dist/packages/engine/build/verifiable-context-schema.d.ts +0 -21
  543. package/dist/packages/engine/build/verifiable-context-schema.js +0 -126
  544. package/dist/packages/engine/cloud-seams.d.ts +0 -115
  545. package/dist/packages/engine/cloud-seams.js +0 -84
  546. package/dist/packages/engine/index.d.ts +0 -22
  547. package/dist/packages/engine/index.js +0 -15
  548. package/dist/packages/engine/instance-paths.d.ts +0 -106
  549. package/dist/packages/engine/instance-paths.js +0 -171
  550. package/dist/packages/engine/lib/schema.d.ts +0 -6304
  551. package/dist/packages/engine/lib/schema.js +0 -730
  552. package/dist/packages/engine/native-run-handlers.d.ts +0 -25
  553. package/dist/packages/engine/preparation-store.d.ts +0 -105
  554. package/dist/packages/engine/preparation-store.js +0 -213
  555. package/dist/packages/engine/readiness-check-draft.d.ts +0 -20
  556. package/dist/packages/engine/readiness-check-draft.js +0 -111
  557. package/dist/packages/engine/requested-artifacts.d.ts +0 -5
  558. package/dist/packages/engine/routes.d.ts +0 -85
  559. package/dist/packages/engine/routes.js +0 -99
  560. package/dist/packages/engine/runtime-caches.d.ts +0 -76
  561. package/dist/packages/engine/runtime-caches.js +0 -191
  562. package/dist/packages/engine/runtime-proposal-helpers.d.ts +0 -35
  563. package/dist/packages/engine/runtime-proposal-helpers.js +0 -247
  564. package/dist/packages/engine/runtime.d.ts +0 -371
  565. package/dist/packages/engine/runtime.js +0 -2463
  566. package/dist/packages/engine/server.d.ts +0 -58
  567. package/dist/packages/engine/server.js +0 -1399
  568. package/dist/packages/engine/verify/readiness-check-run.d.ts +0 -82
  569. package/dist/packages/engine/verify/readiness-check-run.js +0 -265
  570. package/dist/packages/engine/verify/verify-paths.js +0 -61
  571. package/dist/packages/engine/verify/verify-sandbox.js +0 -88
  572. package/dist/packages/engine/verify/verify-specs.js +0 -114
  573. package/dist/packages/engine/verify/verify-targets.d.ts +0 -5
  574. package/dist/packages/engine/wire-schemas.d.ts +0 -547
  575. package/dist/packages/engine/wire-schemas.js +0 -59
  576. package/dist/packages/project/index.d.ts +0 -9
  577. package/dist/packages/project/interf-bootstrap.d.ts +0 -1
  578. package/dist/packages/project/interf-bootstrap.js +0 -1
  579. package/dist/packages/project/interf-scaffold.d.ts +0 -3
  580. package/dist/packages/project/interf-scaffold.js +0 -136
  581. package/dist/packages/project/interf.d.ts +0 -4
  582. package/dist/packages/project/interf.js +0 -3
  583. package/dist/packages/project/lib/schema.d.ts +0 -328
  584. package/dist/packages/project/lib/schema.js +0 -136
  585. package/dist/packages/project/preparation-entries.d.ts +0 -11
  586. package/dist/packages/project/preparation-entries.js +0 -49
  587. package/dist/packages/project/source-config.d.ts +0 -46
  588. package/dist/packages/project/source-config.js +0 -394
  589. package/dist/packages/project/source-folders.d.ts +0 -11
  590. package/public-repo/build-plans/interf-default/build/stages/shape/SKILL.md +0 -27
  591. package/public-repo/build-plans/interf-default/build/stages/structure/SKILL.md +0 -21
  592. package/public-repo/plugins/README.md +0 -9
  593. package/public-repo/plugins/interf/.claude-plugin/plugin.json +0 -21
  594. package/public-repo/plugins/interf/.mcp.json +0 -12
  595. package/public-repo/plugins/interf/README.md +0 -32
  596. package/public-repo/plugins/interf/skills/interf/SKILL.md +0 -376
  597. /package/dist/packages/{engine/agents/lib/types.js → runtime/actions/fields.js} +0 -0
  598. /package/dist/packages/{engine → runtime}/agents/lib/agents.d.ts +0 -0
  599. /package/dist/packages/{engine → runtime}/agents/lib/agents.js +0 -0
  600. /package/dist/packages/{engine → runtime}/agents/lib/execution.d.ts +0 -0
  601. /package/dist/packages/{engine → runtime}/agents/lib/preflight.d.ts +0 -0
  602. /package/dist/packages/{engine → runtime}/agents/lib/status.d.ts +0 -0
  603. /package/dist/packages/{engine/build/runtime-types.js → runtime/agents/lib/types.js} +0 -0
  604. /package/dist/packages/{engine/verify/verify-types.js → runtime/agents/providers/types.js} +0 -0
  605. /package/dist/packages/{engine → runtime}/agents/role-router.d.ts +0 -0
  606. /package/dist/packages/{engine → runtime}/build/build-execution.d.ts +0 -0
  607. /package/dist/packages/{engine → runtime}/build/build-execution.js +0 -0
  608. /package/dist/packages/{engine → runtime}/build/runtime-contracts.d.ts +0 -0
  609. /package/dist/packages/{engine → runtime}/build/runtime-prompt.d.ts +0 -0
  610. /package/dist/packages/{engine → runtime}/execution/adapters.d.ts +0 -0
  611. /package/dist/packages/{engine → runtime}/execution/adapters.js +0 -0
  612. /package/dist/packages/{engine → runtime}/execution/events.d.ts +0 -0
  613. /package/dist/packages/{engine → runtime}/execution/events.js +0 -0
  614. /package/dist/packages/{engine → runtime}/verify/verify-profile-presets.d.ts +0 -0
  615. /package/dist/packages/{engine → runtime}/verify/verify-profile-presets.js +0 -0
  616. /package/dist/packages/{engine → runtime}/verify/verify-types.d.ts +0 -0
@@ -0,0 +1,96 @@
1
+ import { ProjectCreateRequestSchema, ProjectUpdateRequestSchema, } from "../schemas/index.js";
2
+ import { LOCAL_SERVICE_ROUTES } from "./routes.js";
3
+ import { decodeOr400, readJsonBody, sendError, sendErrorResponse, sendJson, } from "./server-helpers.js";
4
+ import { createStoredProject, deleteStoredProject, getStoredProject, listStoredProjects, projectWireShape, updateStoredProject, } from "../project-store.js";
5
+ import { tryHandleProjectRuns, } from "./server-routes-project-runs.js";
6
+ import { tryHandleProjectJobs } from "./server-routes-project-jobs.js";
7
+ import { tryHandleProjectContext } from "./server-routes-project-context.js";
8
+ export async function tryHandleProjectCollection(req, res, runtime, path, method) {
9
+ // GET /v1/projects — list every Project on the instance.
10
+ if (method === "GET" && path === LOCAL_SERVICE_ROUTES.projects) {
11
+ const items = listStoredProjects().map(projectWireShape);
12
+ sendJson(res, 200, { projects: items });
13
+ return true;
14
+ }
15
+ // POST /v1/projects — create a new Project.
16
+ if (method === "POST" && path === LOCAL_SERVICE_ROUTES.projects) {
17
+ try {
18
+ const body = ProjectCreateRequestSchema.parse(await readJsonBody(req));
19
+ const stored = createStoredProject(runtime, {
20
+ id: body.id,
21
+ source: { kind: "local-folder", locator: body.source.locator },
22
+ intent: body.intent,
23
+ build_plan_id: body.build_plan_id,
24
+ });
25
+ sendJson(res, 201, projectWireShape(stored));
26
+ }
27
+ catch (error) {
28
+ // assertCanCreateProject throws EntitlementError when the Free
29
+ // 10-Project cap is reached. sendErrorResponse routes it to 402 with
30
+ // upgrade_hint; everything else stays a 400 with the message body.
31
+ sendErrorResponse(res, error);
32
+ }
33
+ return true;
34
+ }
35
+ return false;
36
+ }
37
+ export async function tryHandlePerProject(req, res, runtime, path, method) {
38
+ if (!path.startsWith(`${LOCAL_SERVICE_ROUTES.projects}/`)) {
39
+ return false;
40
+ }
41
+ const tail = path.slice(LOCAL_SERVICE_ROUTES.projects.length + 1);
42
+ const slashIndex = tail.indexOf("/");
43
+ const projectId = slashIndex === -1 ? tail : tail.slice(0, slashIndex);
44
+ const subPath = slashIndex === -1 ? "" : tail.slice(slashIndex + 1);
45
+ const decodedProjectId = decodeOr400(res, projectId, "Project id");
46
+ if (decodedProjectId === null)
47
+ return true;
48
+ const storedProject = getStoredProject(decodedProjectId);
49
+ if (!storedProject) {
50
+ sendError(res, 404, `Project not found: ${decodedProjectId}`);
51
+ return true;
52
+ }
53
+ runtime.touchProject(storedProject.projectDataDir);
54
+ if (subPath === "") {
55
+ // Bare /v1/projects/{id} — project CRUD.
56
+ if (method === "GET") {
57
+ const project = runtime.getProject(storedProject.projectDataDir, storedProject.id);
58
+ if (!project) {
59
+ sendError(res, 404, `Project not found: ${decodedProjectId}`);
60
+ return true;
61
+ }
62
+ sendJson(res, 200, project);
63
+ return true;
64
+ }
65
+ if (method === "PATCH") {
66
+ try {
67
+ const body = ProjectUpdateRequestSchema.parse(await readJsonBody(req));
68
+ const updated = updateStoredProject(decodedProjectId, {
69
+ intent: body.intent,
70
+ build_plan_id: body.build_plan_id,
71
+ });
72
+ sendJson(res, 200, projectWireShape(updated));
73
+ }
74
+ catch (error) {
75
+ sendError(res, 400, error instanceof Error ? error.message : String(error));
76
+ }
77
+ return true;
78
+ }
79
+ if (method === "DELETE") {
80
+ deleteStoredProject(runtime, decodedProjectId);
81
+ sendJson(res, 200, { id: decodedProjectId, deleted: true });
82
+ return true;
83
+ }
84
+ sendError(res, 404, `Unknown project route: ${path}`);
85
+ return true;
86
+ }
87
+ const ctx = { storedProject, decodedProjectId, subPath };
88
+ if (await tryHandleProjectRuns(req, res, runtime, ctx, method))
89
+ return true;
90
+ if (await tryHandleProjectJobs(req, res, runtime, ctx, method))
91
+ return true;
92
+ if (await tryHandleProjectContext(req, res, runtime, ctx, method))
93
+ return true;
94
+ sendError(res, 404, `Unknown project sub-route: ${subPath}`);
95
+ return true;
96
+ }
@@ -0,0 +1,3 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { LocalServiceRuntime } from "../runtime.js";
3
+ export declare function tryHandleRuns(req: IncomingMessage, res: ServerResponse, runtime: LocalServiceRuntime, path: string, method: string): boolean;
@@ -0,0 +1,119 @@
1
+ import { LOCAL_SERVICE_ROUTES, RUN_SUBRESOURCES } from "./routes.js";
2
+ import { decodeOr400, parseRequestUrl, sendError, sendJson } from "./server-helpers.js";
3
+ import { isTraversalRelativePath, safeApiFilePath, sendApiFile, } from "./server-api-files.js";
4
+ import { findInstanceBuildRun, findInstanceJob, findInstanceRun, findInstanceVerifyRun, listInstanceRuns, } from "./server-instance-helpers.js";
5
+ import { runObservabilityToStatus } from "../run-observability.js";
6
+ export function tryHandleRuns(req, res, runtime, path, method) {
7
+ if (method === "GET" && path === LOCAL_SERVICE_ROUTES.runs) {
8
+ sendJson(res, 200, { runs: listInstanceRuns(runtime) });
9
+ return true;
10
+ }
11
+ const observableRunMatch = path.match(/^\/v1\/runs\/([^/]+)(?:\/([^/]+))?$/);
12
+ if (observableRunMatch?.[1]) {
13
+ const runId = decodeOr400(res, observableRunMatch[1], "Run id");
14
+ if (runId === null)
15
+ return true;
16
+ const child = observableRunMatch[2];
17
+ if (method === "GET" && !child) {
18
+ const run = findInstanceRun(runtime, runId);
19
+ if (!run)
20
+ sendError(res, 404, "Run not found.");
21
+ else
22
+ sendJson(res, 200, run);
23
+ return true;
24
+ }
25
+ if (method === "GET" && child === RUN_SUBRESOURCES.status) {
26
+ const run = findInstanceRun(runtime, runId);
27
+ if (!run)
28
+ sendError(res, 404, "Run not found.");
29
+ else
30
+ sendJson(res, 200, runObservabilityToStatus(run));
31
+ return true;
32
+ }
33
+ const found = findInstanceBuildRun(runtime, runId);
34
+ if (method === "GET" && child === RUN_SUBRESOURCES.events) {
35
+ const events = found ? runtime.getBuildRunEvents(found.projectDataDir, runId) : null;
36
+ if (!events)
37
+ sendError(res, 404, "Build not found.");
38
+ else
39
+ sendJson(res, 200, { events });
40
+ return true;
41
+ }
42
+ if (method === "GET" && child === RUN_SUBRESOURCES.artifacts) {
43
+ const artifacts = found ? runtime.getBuildRunArtifacts(found.projectDataDir, runId) : null;
44
+ if (!artifacts)
45
+ sendError(res, 404, "Build not found.");
46
+ else
47
+ sendJson(res, 200, { artifacts });
48
+ return true;
49
+ }
50
+ if (method === "GET" && child === RUN_SUBRESOURCES.files) {
51
+ const relPath = parseRequestUrl(req).searchParams.get("path")?.trim() ?? "";
52
+ if (!found) {
53
+ sendError(res, 404, "Build not found.");
54
+ return true;
55
+ }
56
+ if (!relPath) {
57
+ sendError(res, 400, "Missing required query parameter: path.");
58
+ return true;
59
+ }
60
+ if (isTraversalRelativePath(relPath)) {
61
+ sendError(res, 400, "File path escapes Run output root.");
62
+ return true;
63
+ }
64
+ const safePath = safeApiFilePath(found.run.run.context_graph_path, relPath);
65
+ if (!safePath) {
66
+ sendError(res, 400, "File path escapes Run output root.");
67
+ return true;
68
+ }
69
+ if (!sendApiFile(res, safePath)) {
70
+ sendError(res, 404, `File not found: ${relPath}`);
71
+ }
72
+ return true;
73
+ }
74
+ if (method === "POST" && child === RUN_SUBRESOURCES.cancel) {
75
+ if (!found) {
76
+ sendError(res, 404, "Build not found.");
77
+ return true;
78
+ }
79
+ sendJson(res, 200, runtime.cancelBuildRun(runId));
80
+ return true;
81
+ }
82
+ }
83
+ const verifyRunMatch = path.match(/^\/v1\/verify-runs\/([^/]+)$/);
84
+ if (method === "GET" && verifyRunMatch?.[1]) {
85
+ const verifyRunId = decodeOr400(res, verifyRunMatch[1], "Verify run id");
86
+ if (verifyRunId === null)
87
+ return true;
88
+ const found = findInstanceVerifyRun(runtime, verifyRunId);
89
+ if (!found)
90
+ sendError(res, 404, "Verify run not found.");
91
+ else
92
+ sendJson(res, 200, found.run);
93
+ return true;
94
+ }
95
+ const jobMatch = path.match(/^\/v1\/jobs\/([^/]+)(?:\/([^/]+))?$/);
96
+ if (jobMatch?.[1]) {
97
+ const runId = decodeOr400(res, jobMatch[1], "Job run id");
98
+ if (runId === null)
99
+ return true;
100
+ const child = jobMatch[2];
101
+ const found = findInstanceJob(runtime, runId);
102
+ if (method === "GET" && !child) {
103
+ if (!found)
104
+ sendError(res, 404, "Job run not found.");
105
+ else
106
+ sendJson(res, 200, found.job);
107
+ return true;
108
+ }
109
+ if (method === "GET" && child === "events") {
110
+ const events = found ? runtime.getJobEvents(found.projectDataDir, runId) : null;
111
+ if (!events)
112
+ sendError(res, 404, "Job run not found.");
113
+ else
114
+ sendJson(res, 200, { events });
115
+ return true;
116
+ }
117
+ }
118
+ return false;
119
+ }
@@ -0,0 +1,37 @@
1
+ import { type Server } from "node:http";
2
+ import { type LocalServiceRunHandlers, type LocalServiceRuntime } from "../runtime.js";
3
+ import { createLocalServiceAuthToken } from "./server-guards.js";
4
+ export { createLocalServiceAuthToken };
5
+ export interface StartLocalServiceOptions {
6
+ rootPath?: string;
7
+ host?: string;
8
+ port?: number;
9
+ searchFromPort?: number;
10
+ packageVersion?: string;
11
+ handlers?: Partial<LocalServiceRunHandlers>;
12
+ /**
13
+ * Local authorization policy.
14
+ *
15
+ * Product/app-owned loopback defaults to `token-required`: startup
16
+ * generates a per-instance bearer token unless the caller pins one.
17
+ * Tests may pass `tokenless-dev` to keep direct fetch fixtures readable.
18
+ */
19
+ localAuthMode?: "token-required" | "tokenless-dev";
20
+ /**
21
+ * Per-instance bearer token. In token-required mode:
22
+ * - undefined or `"auto"` generates a fresh random hex token.
23
+ * - a literal string pins a token for tests.
24
+ * - `null` is rejected unless `localAuthMode` is `tokenless-dev`.
25
+ */
26
+ authToken?: string | null | "auto";
27
+ ownerKind?: "desktop-app" | "headless";
28
+ ownerPid?: number;
29
+ }
30
+ export interface StartedLocalService {
31
+ runtime: LocalServiceRuntime;
32
+ server: Server;
33
+ url: string;
34
+ close(): Promise<void>;
35
+ }
36
+ export declare function createLocalServiceServer(runtime: LocalServiceRuntime): Server;
37
+ export declare function startLocalService(options?: StartLocalServiceOptions): Promise<StartedLocalService>;
@@ -0,0 +1,300 @@
1
+ import { createServer } from "node:http";
2
+ import { resolve } from "node:path";
3
+ import { LOCAL_SERVICE_LOOPBACK_HOSTS, LocalServiceConfigSchema, LocalServiceErrorSchema, ServiceRegistryEntrySchema, } from "../schemas/index.js";
4
+ import { createLocalServiceRuntime, } from "../runtime.js";
5
+ import { LOCAL_SERVICE_DEFAULT_HOST, LOCAL_SERVICE_DEFAULT_PORT, LOCAL_SERVICE_ROUTES, } from "./routes.js";
6
+ import { registerServiceLocally, unregisterService, } from "./service-registry.js";
7
+ import { rehydrateProjects, } from "../project-store.js";
8
+ import { readSession } from "../auth/session-store.js";
9
+ import { clearConnection, readActiveConnection, writeConnection, } from "../connection-config.js";
10
+ import { attachResponseContext, NO_ORIGIN_RESPONSE_CONTEXT, parseRequestUrl, sendError, writeHeaders, } from "./server-helpers.js";
11
+ import { buildAllowedOrigins, corsHeadersFor, createLocalServiceAuthToken, isAuthorizedLocalBearer, isMutatingMethod, isOriginAllowed, originHeaderValue, requiresLocalServiceAuthorization, validateBearerJwt, } from "./server-guards.js";
12
+ import { sendDesktopAppBoot, sendServiceNotFound, } from "./server-app-boot.js";
13
+ import { tryHandleDiscovery, tryHandleOpenPath, } from "./server-routes-discovery.js";
14
+ import { tryHandlePerProject, tryHandleProjectCollection, } from "./server-routes-projects.js";
15
+ import { tryHandleBuildPlans } from "./server-routes-build-plans.js";
16
+ import { tryHandleRuns } from "./server-routes-runs.js";
17
+ import { notifyServiceChange, tryHandleEvents } from "./server-routes-events.js";
18
+ import { tryHandleActionProposals } from "./server-routes-action-proposals.js";
19
+ import { tryHandleAgents, tryHandleExecutor, } from "./server-routes-agents.js";
20
+ import { tryHandleAuth } from "./server-routes-auth.js";
21
+ export { createLocalServiceAuthToken };
22
+ async function routeApi(req, res, runtime) {
23
+ const url = parseRequestUrl(req);
24
+ const path = url.pathname;
25
+ const method = req.method ?? "GET";
26
+ const origin = originHeaderValue(req);
27
+ const allowed = buildAllowedOrigins(runtime.host, runtime.port);
28
+ // CORS preflight — answered for allowed origins, refused otherwise.
29
+ if (method === "OPTIONS") {
30
+ if (!isOriginAllowed(origin, allowed)) {
31
+ attachResponseContext(res, NO_ORIGIN_RESPONSE_CONTEXT);
32
+ sendError(res, 403, "Origin not allowed.");
33
+ return true;
34
+ }
35
+ attachResponseContext(res, { cors: corsHeadersFor(origin, allowed) });
36
+ writeHeaders(res, 204);
37
+ res.end();
38
+ return true;
39
+ }
40
+ // For non-OPTIONS, attach the CORS context once.
41
+ attachResponseContext(res, { cors: corsHeadersFor(origin, allowed) });
42
+ // Protected requests must:
43
+ // 1. Have an Origin that's local OR no Origin at all (CLI),
44
+ // 2. Carry a valid Authorization: Bearer <token> if the runtime issued one.
45
+ //
46
+ // Only /health, /v1, and /v1/instance stay tokenless for discovery.
47
+ if (requiresLocalServiceAuthorization(method, path) && path !== LOCAL_SERVICE_ROUTES.events) {
48
+ if (!isOriginAllowed(origin, allowed)) {
49
+ sendError(res, 403, "Origin not allowed.");
50
+ return true;
51
+ }
52
+ if (runtime.authMode === "jwt") {
53
+ const result = await validateBearerJwt(req);
54
+ if (!result.ok) {
55
+ writeHeaders(res, 401, { "www-authenticate": "Bearer realm=\"interf-cloud\"" });
56
+ res.end(`${JSON.stringify(LocalServiceErrorSchema.parse({
57
+ error: { message: "Missing or invalid bearer token." },
58
+ }), null, 2)}\n`);
59
+ return true;
60
+ }
61
+ // Hand the validated claims to downstream handlers (billing
62
+ // events, route guards) without forcing every handler to re-parse.
63
+ req.interfAccount = result.account;
64
+ }
65
+ else if (!isAuthorizedLocalBearer(req, runtime)) {
66
+ writeHeaders(res, 401, { "www-authenticate": "Bearer realm=\"interf-local-service\"" });
67
+ res.end(`${JSON.stringify(LocalServiceErrorSchema.parse({
68
+ error: { message: "Missing or invalid bearer token." },
69
+ }), null, 2)}\n`);
70
+ return true;
71
+ }
72
+ }
73
+ // Dispatch chain — each route module returns true once it has handled
74
+ // the request. The first match wins; nothing falls through to the next
75
+ // module after a handler claims the route.
76
+ if (tryHandleDiscovery(req, res, runtime, path, method))
77
+ return true;
78
+ if (tryHandleEvents(req, res, runtime, path, method))
79
+ return true;
80
+ if (await tryHandleAuth(req, res, runtime, path, method))
81
+ return true;
82
+ if (await tryHandleProjectCollection(req, res, runtime, path, method))
83
+ return true;
84
+ if (await tryHandlePerProject(req, res, runtime, path, method))
85
+ return true;
86
+ if (await tryHandleBuildPlans(req, res, runtime, path, method))
87
+ return true;
88
+ if (tryHandleRuns(req, res, runtime, path, method))
89
+ return true;
90
+ if (await tryHandleActionProposals(req, res, runtime, path, method))
91
+ return true;
92
+ if (await tryHandleExecutor(req, res, runtime, path, method))
93
+ return true;
94
+ if (await tryHandleAgents(req, res, runtime, path, method))
95
+ return true;
96
+ if (await tryHandleOpenPath(req, res, runtime, path, method))
97
+ return true;
98
+ return false;
99
+ }
100
+ export function createLocalServiceServer(runtime) {
101
+ return createServer((req, res) => {
102
+ void (async () => {
103
+ // Pre-attach a CORS context so app boot GETs and the 404
104
+ // fallback emit the right headers even before routeApi has a
105
+ // chance to set its own. The OPTIONS preflight handling and the
106
+ // mutating-buildPlan guards still happen inside routeApi.
107
+ const origin = originHeaderValue(req);
108
+ const allowed = buildAllowedOrigins(runtime.host, runtime.port);
109
+ attachResponseContext(res, { cors: corsHeadersFor(origin, allowed) });
110
+ try {
111
+ const routed = await routeApi(req, res, runtime);
112
+ if (routed) {
113
+ // After a successful mutation from any client (app, CLI, MCP), fan a
114
+ // change ping to SSE subscribers so open renderers refresh without
115
+ // polling. Run progress is still owned by the active-run poll.
116
+ if (isMutatingMethod(req.method) &&
117
+ res.statusCode >= 200 &&
118
+ res.statusCode < 300) {
119
+ notifyServiceChange(runtime);
120
+ }
121
+ return;
122
+ }
123
+ if (sendDesktopAppBoot(req, res, runtime))
124
+ return;
125
+ sendServiceNotFound(res);
126
+ }
127
+ catch (error) {
128
+ sendError(res, 500, error instanceof Error ? error.message : String(error));
129
+ }
130
+ })();
131
+ });
132
+ }
133
+ function resolvePort(optionPort) {
134
+ if (typeof optionPort === "number")
135
+ return { port: optionPort, pinned: true };
136
+ const envPort = Number.parseInt(process.env.INTERF_SERVICE_PORT ?? "", 10);
137
+ if (Number.isInteger(envPort))
138
+ return { port: envPort, pinned: true };
139
+ return { port: LOCAL_SERVICE_DEFAULT_PORT, pinned: false };
140
+ }
141
+ const LOCAL_SERVICE_PORT_FALLBACK_RANGE = 50;
142
+ async function listenWithFallback(server, host, startPort, pinned) {
143
+ const maxPort = pinned ? startPort : startPort + LOCAL_SERVICE_PORT_FALLBACK_RANGE;
144
+ for (let port = startPort; port <= maxPort; port += 1) {
145
+ try {
146
+ await new Promise((resolveListen, rejectListen) => {
147
+ const onError = (error) => {
148
+ server.off("listening", onListening);
149
+ rejectListen(error);
150
+ };
151
+ const onListening = () => {
152
+ server.off("error", onError);
153
+ resolveListen();
154
+ };
155
+ server.once("error", onError);
156
+ server.once("listening", onListening);
157
+ server.listen(port, host);
158
+ });
159
+ return port;
160
+ }
161
+ catch (error) {
162
+ const code = error?.code;
163
+ if (code !== "EADDRINUSE" || port === maxPort)
164
+ throw error;
165
+ // Retry on the next port; the server will emit a fresh "listening" event on the next attempt.
166
+ }
167
+ }
168
+ throw new Error(`Could not bind a free port between ${startPort} and ${maxPort}.`);
169
+ }
170
+ export async function startLocalService(options = {}) {
171
+ const requestedPort = typeof options.searchFromPort === "number"
172
+ ? { port: options.searchFromPort, pinned: false }
173
+ : resolvePort(options.port);
174
+ const requestedHost = options.host ?? process.env.INTERF_SERVICE_HOST ?? LOCAL_SERVICE_DEFAULT_HOST;
175
+ // Reject non-loopback host bindings before we even configure anything.
176
+ // This guards against `INTERF_SERVICE_HOST=0.0.0.0` env injection or a
177
+ // call site that passes a LAN IP. The schema-level refinement also
178
+ // rejects, but we want a clearer error message.
179
+ if (!LOCAL_SERVICE_LOOPBACK_HOSTS.includes(requestedHost)) {
180
+ throw new Error(`Refusing to bind local service to non-loopback host '${requestedHost}'. ` +
181
+ `Use one of ${LOCAL_SERVICE_LOOPBACK_HOSTS.join(", ")} ` +
182
+ `(adjust the --host flag or INTERF_SERVICE_HOST env var).`);
183
+ }
184
+ const config = LocalServiceConfigSchema.parse({
185
+ host: requestedHost,
186
+ port: requestedPort.port,
187
+ });
188
+ const rootPath = options.rootPath ?? process.cwd();
189
+ const resolvedRoot = resolve(rootPath);
190
+ // auth-token policy: app-owned/product loopback is token-required by
191
+ // default. Tests must opt into the explicit tokenless-dev mode.
192
+ const authToken = (() => {
193
+ const localAuthMode = options.localAuthMode ?? "token-required";
194
+ if (localAuthMode === "tokenless-dev")
195
+ return null;
196
+ if (options.authToken === null) {
197
+ throw new Error("authToken:null requires localAuthMode:'tokenless-dev'.");
198
+ }
199
+ if (options.authToken === "auto")
200
+ return createLocalServiceAuthToken();
201
+ if (typeof options.authToken === "string")
202
+ return options.authToken;
203
+ return createLocalServiceAuthToken();
204
+ })();
205
+ // Boot-time auth: read the persisted session, if any. The session file
206
+ // is local-only and stamps `account_id` on every billing event so audit
207
+ // trails connect runs to a signed-in user. Loopback engines stay JWT-free.
208
+ const bootAccount = (() => {
209
+ try {
210
+ return readSession();
211
+ }
212
+ catch {
213
+ return null;
214
+ }
215
+ })();
216
+ const runtime = createLocalServiceRuntime({
217
+ rootPath: resolvedRoot,
218
+ host: config.host,
219
+ port: config.port,
220
+ packageVersion: options.packageVersion,
221
+ ownerKind: options.ownerKind ?? "headless",
222
+ ...(options.ownerPid ? { ownerPid: options.ownerPid } : {}),
223
+ handlers: options.handlers,
224
+ ...(authToken ? { authToken } : {}),
225
+ currentAccount: bootAccount,
226
+ });
227
+ // Rehydrate saved Projects so subsequent
228
+ // build / benchmark / readiness calls find them after a service restart.
229
+ try {
230
+ rehydrateProjects(runtime);
231
+ }
232
+ catch {
233
+ // best effort
234
+ }
235
+ const server = createLocalServiceServer(runtime);
236
+ const boundPort = await listenWithFallback(server, config.host, config.port, requestedPort.pinned);
237
+ runtime.setBoundPort(boundPort);
238
+ const health = runtime.health();
239
+ const url = health.service_url;
240
+ const startedAt = health.instance_started_at ?? new Date().toISOString();
241
+ // Central stop-lookup registry — one entry per running instance.
242
+ // Runtime stop uses this as a fallback when the active connection record is missing.
243
+ const writeRegistryEntry = () => {
244
+ try {
245
+ registerServiceLocally(ServiceRegistryEntrySchema.parse({
246
+ pid: process.pid,
247
+ host: config.host,
248
+ port: boundPort,
249
+ url,
250
+ started_at: startedAt,
251
+ owner_kind: options.ownerKind ?? "headless",
252
+ ...(options.ownerPid ? { owner_pid: options.ownerPid } : {}),
253
+ ...(authToken ? { auth_token: authToken } : {}),
254
+ }));
255
+ }
256
+ catch {
257
+ // best effort: registry corruption shouldn't take the service down
258
+ }
259
+ };
260
+ writeRegistryEntry();
261
+ runtime.setOnRegistryChanged(writeRegistryEntry);
262
+ // Write the single-record CLI connection so `interf project`,
263
+ // `interf build`, etc. can find this engine without a pointer file.
264
+ try {
265
+ writeConnection({ url, auth_token: authToken });
266
+ }
267
+ catch {
268
+ // best effort: connection file is convenience, not correctness
269
+ }
270
+ return {
271
+ runtime,
272
+ server,
273
+ url,
274
+ close: () => new Promise((resolveClose, rejectClose) => {
275
+ runtime.setOnRegistryChanged(null);
276
+ server.close((error) => {
277
+ if (error) {
278
+ rejectClose(error);
279
+ return;
280
+ }
281
+ try {
282
+ unregisterService(process.pid);
283
+ }
284
+ catch {
285
+ // best effort
286
+ }
287
+ try {
288
+ // Clear connection record only if it still points at us.
289
+ const current = readActiveConnection();
290
+ if (current?.url === url)
291
+ clearConnection();
292
+ }
293
+ catch {
294
+ // best effort
295
+ }
296
+ resolveClose();
297
+ });
298
+ }),
299
+ };
300
+ }
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * Central service registry at `~/.interf/services.json`.
3
3
  *
4
- * Every running `interf web` instance writes an entry here on start and
4
+ * Every running `interf runtime` instance writes an entry here on start and
5
5
  * removes it on close. CLI/UX code consults this registry for explicit
6
- * `interf web stop` lookup.
6
+ * `interf runtime stop` lookup.
7
7
  *
8
8
  * Entry shape:
9
9
  * {
@@ -11,11 +11,11 @@
11
11
  * }
12
12
  *
13
13
  * Atomic write: write to a sibling tmp file, then rename. Concurrent
14
- * `interf web` invocations get last-writer-wins semantics; pruning of
14
+ * `interf runtime` invocations get last-writer-wins semantics; pruning of
15
15
  * stale entries makes that self-healing.
16
16
  */
17
- import { interfHomeRoot, serviceRegistryPath } from "../contracts/lib/preparation-paths.js";
18
- import { type ServiceRegistryEntry } from "./lib/schema.js";
17
+ import { interfHomeRoot, serviceRegistryPath } from "../../contracts/lib/project-paths.js";
18
+ import { type ServiceRegistryEntry } from "../schemas/index.js";
19
19
  /**
20
20
  * Read the service registry. Removes entries whose pid is no longer alive
21
21
  * before returning. Does not health-check the HTTP endpoint — that is too
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * Central service registry at `~/.interf/services.json`.
3
3
  *
4
- * Every running `interf web` instance writes an entry here on start and
4
+ * Every running `interf runtime` instance writes an entry here on start and
5
5
  * removes it on close. CLI/UX code consults this registry for explicit
6
- * `interf web stop` lookup.
6
+ * `interf runtime stop` lookup.
7
7
  *
8
8
  * Entry shape:
9
9
  * {
@@ -11,13 +11,13 @@
11
11
  * }
12
12
  *
13
13
  * Atomic write: write to a sibling tmp file, then rename. Concurrent
14
- * `interf web` invocations get last-writer-wins semantics; pruning of
14
+ * `interf runtime` invocations get last-writer-wins semantics; pruning of
15
15
  * stale entries makes that self-healing.
16
16
  */
17
17
  import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
18
18
  import { dirname } from "node:path";
19
- import { interfHomeRoot, serviceRegistryPath, } from "../contracts/lib/preparation-paths.js";
20
- import { ServiceRegistrySchema, ServiceRegistryEntrySchema, } from "./lib/schema.js";
19
+ import { interfHomeRoot, serviceRegistryPath, } from "../../contracts/lib/project-paths.js";
20
+ import { ServiceRegistrySchema, ServiceRegistryEntrySchema, } from "../schemas/index.js";
21
21
  /** Returns true when the OS still has a process with this pid. */
22
22
  function isProcessAlive(pid) {
23
23
  if (!Number.isInteger(pid) || pid <= 0)
@@ -54,10 +54,10 @@ function readRegistryRaw() {
54
54
  function writeRegistryRaw(registry) {
55
55
  const path = serviceRegistryPath();
56
56
  const dir = dirname(path);
57
- mkdirSync(dir, { recursive: true });
57
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
58
58
  const tmpPath = `${path}.${process.pid}.${Date.now()}.tmp`;
59
59
  const parsed = ServiceRegistrySchema.parse(registry);
60
- writeFileSync(tmpPath, `${JSON.stringify(parsed, null, 2)}\n`);
60
+ writeFileSync(tmpPath, `${JSON.stringify(parsed, null, 2)}\n`, { mode: 0o600 });
61
61
  try {
62
62
  renameSync(tmpPath, path);
63
63
  }