@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,112 @@
1
+ import { LOCAL_SERVICE_ROUTES, RUN_SUBRESOURCES } from "./routes.js";
2
+ import { 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 = decodeURIComponent(observableRunMatch[1]);
14
+ const child = observableRunMatch[2];
15
+ if (method === "GET" && !child) {
16
+ const run = findInstanceRun(runtime, runId);
17
+ if (!run)
18
+ sendError(res, 404, "Run not found.");
19
+ else
20
+ sendJson(res, 200, run);
21
+ return true;
22
+ }
23
+ if (method === "GET" && child === RUN_SUBRESOURCES.status) {
24
+ const run = findInstanceRun(runtime, runId);
25
+ if (!run)
26
+ sendError(res, 404, "Run not found.");
27
+ else
28
+ sendJson(res, 200, runObservabilityToStatus(run));
29
+ return true;
30
+ }
31
+ const found = findInstanceBuildRun(runtime, runId);
32
+ if (method === "GET" && child === RUN_SUBRESOURCES.events) {
33
+ const events = found ? runtime.getBuildRunEvents(found.projectDataDir, runId) : null;
34
+ if (!events)
35
+ sendError(res, 404, "Build not found.");
36
+ else
37
+ sendJson(res, 200, { events });
38
+ return true;
39
+ }
40
+ if (method === "GET" && child === RUN_SUBRESOURCES.artifacts) {
41
+ const artifacts = found ? runtime.getBuildRunArtifacts(found.projectDataDir, runId) : null;
42
+ if (!artifacts)
43
+ sendError(res, 404, "Build not found.");
44
+ else
45
+ sendJson(res, 200, { artifacts });
46
+ return true;
47
+ }
48
+ if (method === "GET" && child === RUN_SUBRESOURCES.files) {
49
+ const relPath = parseRequestUrl(req).searchParams.get("path")?.trim() ?? "";
50
+ if (!found) {
51
+ sendError(res, 404, "Build not found.");
52
+ return true;
53
+ }
54
+ if (!relPath) {
55
+ sendError(res, 400, "Missing required query parameter: path.");
56
+ return true;
57
+ }
58
+ if (isTraversalRelativePath(relPath)) {
59
+ sendError(res, 400, "File path escapes Run output root.");
60
+ return true;
61
+ }
62
+ const safePath = safeApiFilePath(found.run.run.context_graph_path, relPath);
63
+ if (!safePath) {
64
+ sendError(res, 400, "File path escapes Run output root.");
65
+ return true;
66
+ }
67
+ if (!sendApiFile(res, safePath)) {
68
+ sendError(res, 404, `File not found: ${relPath}`);
69
+ }
70
+ return true;
71
+ }
72
+ if (method === "POST" && child === RUN_SUBRESOURCES.cancel) {
73
+ if (!found) {
74
+ sendError(res, 404, "Build not found.");
75
+ return true;
76
+ }
77
+ sendJson(res, 200, runtime.cancelBuildRun(runId));
78
+ return true;
79
+ }
80
+ }
81
+ const verifyRunMatch = path.match(/^\/v1\/verify-runs\/([^/]+)$/);
82
+ if (method === "GET" && verifyRunMatch?.[1]) {
83
+ const found = findInstanceVerifyRun(runtime, decodeURIComponent(verifyRunMatch[1]));
84
+ if (!found)
85
+ sendError(res, 404, "Verify run not found.");
86
+ else
87
+ sendJson(res, 200, found.run);
88
+ return true;
89
+ }
90
+ const jobMatch = path.match(/^\/v1\/jobs\/([^/]+)(?:\/([^/]+))?$/);
91
+ if (jobMatch?.[1]) {
92
+ const runId = decodeURIComponent(jobMatch[1]);
93
+ const child = jobMatch[2];
94
+ const found = findInstanceJob(runtime, runId);
95
+ if (method === "GET" && !child) {
96
+ if (!found)
97
+ sendError(res, 404, "Job run not found.");
98
+ else
99
+ sendJson(res, 200, found.job);
100
+ return true;
101
+ }
102
+ if (method === "GET" && child === "events") {
103
+ const events = found ? runtime.getJobEvents(found.projectDataDir, runId) : null;
104
+ if (!events)
105
+ sendError(res, 404, "Job run not found.");
106
+ else
107
+ sendJson(res, 200, { events });
108
+ return true;
109
+ }
110
+ }
111
+ return false;
112
+ }
@@ -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
  }
@@ -0,0 +1,81 @@
1
+ import type { AgentExecutor } from "../agents/lib/executors.js";
2
+ import type { ProjectConfig } from "../../projects/lib/schema.js";
3
+ import type { RuntimeExecutorInfo } from "../../contracts/lib/schema.js";
4
+ import { type TestTargetCandidate, type TestTargetResult } from "./verify.js";
5
+ import type { TestSandboxRetentionMode } from "./verify-sandbox.js";
6
+ import { type BenchmarkRun, type TestRunMode } from "./lib/schema.js";
7
+ export interface SavedBenchmarkOutcome {
8
+ runPath: string;
9
+ displayRunPath?: string;
10
+ executor?: RuntimeExecutorInfo | null;
11
+ target: TestTargetCandidate;
12
+ result: TestTargetResult;
13
+ }
14
+ export interface BenchmarkRunResult {
15
+ sourcePath: string;
16
+ projectConfig: ProjectConfig;
17
+ contextGraphPath: string | null;
18
+ /**
19
+ * restored. Populated when the verify run targets
20
+ * `source-files`; null when targeting context graph. Aggregates back
21
+ * onto the saved `BenchmarkRun` payload's `source_files` field.
22
+ */
23
+ sourceFilesOutcome: SavedBenchmarkOutcome | null;
24
+ contextGraphOutcome: SavedBenchmarkOutcome | null;
25
+ benchmarkRunPath: string | null;
26
+ benchmarkRun: BenchmarkRun | null;
27
+ }
28
+ export declare function benchmarkPassRate(outcome: SavedBenchmarkOutcome): number;
29
+ export declare function readSavedBenchmarkRun(projectDataDir: string, projectName: string): BenchmarkRun | null;
30
+ export declare function parseBenchmarkRun(value: unknown): BenchmarkRun | null;
31
+ export declare function readBenchmarkRunAtPath(filePath: string, label?: string): BenchmarkRun | null;
32
+ export declare function readCurrentSavedBenchmarkRun(options: {
33
+ projectDataDir: string;
34
+ projectName: string;
35
+ }): {
36
+ benchmarkRun: BenchmarkRun | null;
37
+ stale: boolean;
38
+ };
39
+ export declare function saveBenchmarkRun(options: {
40
+ sourcePath: string;
41
+ contextGraphPath: string | null;
42
+ projectName: string;
43
+ checksFingerprint: string;
44
+ sourceFilesOutcome?: SavedBenchmarkOutcome | null;
45
+ contextGraphOutcome: SavedBenchmarkOutcome | null;
46
+ }): string;
47
+ export declare function runSavedContextGraphBenchmark(options: {
48
+ sourcePath: string;
49
+ projectConfig: ProjectConfig;
50
+ executor?: AgentExecutor | null;
51
+ contextGraphPath?: string | null;
52
+ preserveSandboxes?: TestSandboxRetentionMode;
53
+ runSuffix?: string | null;
54
+ }): Promise<SavedBenchmarkOutcome | null>;
55
+ /**
56
+ * Run the saved benchmark checks against Source references from the recorded
57
+ * Source Manifest so users can compare raw Source access with the Context Graph.
58
+ */
59
+ export declare function runSavedSourceFilesBenchmark(options: {
60
+ sourcePath: string;
61
+ projectConfig: ProjectConfig;
62
+ contextGraphPath: string | null;
63
+ executor?: AgentExecutor | null;
64
+ preserveSandboxes?: TestSandboxRetentionMode;
65
+ runSuffix?: string | null;
66
+ }): Promise<SavedBenchmarkOutcome | null>;
67
+ export declare function runBenchmarkForExecutor(options: {
68
+ sourcePath: string;
69
+ projectConfig: ProjectConfig;
70
+ contextGraphPath: string | null;
71
+ executor?: AgentExecutor | null;
72
+ preserveSandboxes?: TestSandboxRetentionMode;
73
+ runSuffix?: string | null;
74
+ saveLatest?: boolean;
75
+ /**
76
+ * Selects which target the benchmark checks judge against.
77
+ * `both` runs the Source files baseline and the Context Graph under one
78
+ * saved benchmark payload so the UI can compare them directly.
79
+ */
80
+ target?: TestRunMode;
81
+ }): Promise<BenchmarkRunResult>;