@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,3 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { LocalServiceRuntime } from "../runtime.js";
3
+ export declare function tryHandleActionProposals(req: IncomingMessage, res: ServerResponse, runtime: LocalServiceRuntime, path: string, method: string): Promise<boolean>;
@@ -0,0 +1,45 @@
1
+ import { LOCAL_SERVICE_ROUTES } from "./routes.js";
2
+ import { decodeOr400, readJsonBody, sendError, sendJson, } from "./server-helpers.js";
3
+ import { listStoredProjects } from "../project-store.js";
4
+ export async function tryHandleActionProposals(req, res, runtime, path, method) {
5
+ if (method === "GET" && path === LOCAL_SERVICE_ROUTES.actionProposals) {
6
+ const firstProject = listStoredProjects()[0];
7
+ sendJson(res, 200, {
8
+ action_proposals: runtime.listActionProposals(firstProject?.projectDataDir ?? runtime.rootPath),
9
+ });
10
+ return true;
11
+ }
12
+ if (method === "POST" && path === LOCAL_SERVICE_ROUTES.actionProposals) {
13
+ const body = await readJsonBody(req);
14
+ const firstProject = listStoredProjects()[0];
15
+ sendJson(res, 202, await runtime.createActionProposal(firstProject?.projectDataDir ?? runtime.rootPath, body));
16
+ return true;
17
+ }
18
+ const actionProposalMatch = path.match(/^\/v1\/action-proposals\/([^/]+)(?:\/([^/]+))?$/);
19
+ if (actionProposalMatch?.[1]) {
20
+ const proposalId = decodeOr400(res, actionProposalMatch[1], "Action proposal id");
21
+ if (proposalId === null)
22
+ return true;
23
+ const child = actionProposalMatch[2];
24
+ const firstProject = listStoredProjects()[0];
25
+ const projectDataDir = firstProject?.projectDataDir ?? runtime.rootPath;
26
+ if (method === "GET" && !child) {
27
+ const proposal = runtime.getActionProposal(projectDataDir, proposalId);
28
+ if (!proposal)
29
+ sendError(res, 404, "Action proposal not found.");
30
+ else
31
+ sendJson(res, 200, proposal);
32
+ return true;
33
+ }
34
+ if (method === "POST" && child === "decision") {
35
+ const body = await readJsonBody(req);
36
+ const proposal = await runtime.decideActionProposal(projectDataDir, proposalId, body);
37
+ if (!proposal)
38
+ sendError(res, 404, "Action proposal not found.");
39
+ else
40
+ sendJson(res, 202, proposal);
41
+ return true;
42
+ }
43
+ }
44
+ return false;
45
+ }
@@ -0,0 +1,4 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { LocalServiceRuntime } from "../runtime.js";
3
+ export declare function tryHandleExecutor(req: IncomingMessage, res: ServerResponse, runtime: LocalServiceRuntime, path: string, method: string): Promise<boolean>;
4
+ export declare function tryHandleAgents(req: IncomingMessage, res: ServerResponse, runtime: LocalServiceRuntime, path: string, method: string): Promise<boolean>;
@@ -0,0 +1,132 @@
1
+ import { join } from "node:path";
2
+ import { AgentPrefsPatchSchema, AgentRoleMapPatchSchema, CustomAgentRegisterRequestSchema, InterfMcpHandoffSchema, } from "../schemas/index.js";
3
+ import { buildInterfMcpHandoff } from "../agent-handoff.js";
4
+ import { buildLocalServiceUrl, LOCAL_SERVICE_ROUTES } from "./routes.js";
5
+ import { decodeOr400, readJsonBody, sendError, sendJson, } from "./server-helpers.js";
6
+ import { packageRoot } from "./server-api-files.js";
7
+ export async function tryHandleExecutor(req, res, runtime, path, method) {
8
+ if (method === "GET" && path === LOCAL_SERVICE_ROUTES.executor) {
9
+ sendJson(res, 200, runtime.getExecutorStatus());
10
+ return true;
11
+ }
12
+ if (method === "POST" && path === LOCAL_SERVICE_ROUTES.executor) {
13
+ const body = await readJsonBody(req);
14
+ sendJson(res, 202, runtime.selectExecutor(body));
15
+ return true;
16
+ }
17
+ return false;
18
+ }
19
+ export async function tryHandleAgents(req, res, runtime, path, method) {
20
+ if (path === LOCAL_SERVICE_ROUTES.agents) {
21
+ if (method === "GET") {
22
+ sendJson(res, 200, runtime.getAgentsRegistry());
23
+ return true;
24
+ }
25
+ if (method === "POST") {
26
+ try {
27
+ const body = CustomAgentRegisterRequestSchema.parse(await readJsonBody(req));
28
+ const updated = runtime.registerCustomAgent(body);
29
+ sendJson(res, 201, updated);
30
+ }
31
+ catch (error) {
32
+ sendError(res, 400, error instanceof Error ? error.message : String(error));
33
+ }
34
+ return true;
35
+ }
36
+ }
37
+ if (method === "GET" && path === `${LOCAL_SERVICE_ROUTES.agents}/roles`) {
38
+ sendJson(res, 200, {
39
+ kind: "interf-canonical-roles",
40
+ version: 1,
41
+ roles: ["extractor", "summarizer", "structurer", "verifier", "general"],
42
+ });
43
+ return true;
44
+ }
45
+ if (method === "GET" && path === `${LOCAL_SERVICE_ROUTES.mcp}/connect`) {
46
+ const serviceUrl = buildLocalServiceUrl({ host: runtime.host, port: runtime.port });
47
+ const skillPath = join(packageRoot(), "public-repo", "skills", "interf", "SKILL.md");
48
+ const mcpBinPath = join(packageRoot(), "dist", "bin-mcp.js");
49
+ const mcpArgs = [mcpBinPath, "--profile", "app", "--url", serviceUrl];
50
+ if (runtime.authToken) {
51
+ mcpArgs.push("--token", runtime.authToken);
52
+ }
53
+ sendJson(res, 200, InterfMcpHandoffSchema.parse(buildInterfMcpHandoff({
54
+ serviceUrl,
55
+ authToken: runtime.authToken,
56
+ skillPath,
57
+ mcpCommand: process.execPath,
58
+ mcpArgs,
59
+ })));
60
+ return true;
61
+ }
62
+ if (path === `${LOCAL_SERVICE_ROUTES.agents}/role-map`) {
63
+ if (method === "GET") {
64
+ const registry = runtime.getAgentsRegistry();
65
+ sendJson(res, 200, {
66
+ role_map: registry.role_map,
67
+ active_agent: registry.active_agent,
68
+ });
69
+ return true;
70
+ }
71
+ if (method === "PATCH") {
72
+ try {
73
+ const patch = AgentRoleMapPatchSchema.parse(await readJsonBody(req));
74
+ const updated = runtime.patchAgentsRoleMap(patch);
75
+ sendJson(res, 200, updated);
76
+ }
77
+ catch (error) {
78
+ sendError(res, 400, error instanceof Error ? error.message : String(error));
79
+ }
80
+ return true;
81
+ }
82
+ }
83
+ // /v1/agents/<name> — DELETE removes a custom agent (built-in names
84
+ // return 400). PATCH updates the agent's stored prefs (env vars, model,
85
+ // effort) for built-ins or custom agents alike.
86
+ const agentMatch = path.match(/^\/v1\/agents\/([^/]+)$/);
87
+ if (agentMatch?.[1] && method === "DELETE") {
88
+ const name = decodeOr400(res, agentMatch[1], "Agent name");
89
+ if (name === null)
90
+ return true;
91
+ try {
92
+ const updated = runtime.unregisterCustomAgent(name);
93
+ sendJson(res, 200, updated);
94
+ }
95
+ catch (error) {
96
+ const message = error instanceof Error ? error.message : String(error);
97
+ const status = /built-in agent/.test(message) ? 400 : 404;
98
+ sendError(res, status, message);
99
+ }
100
+ return true;
101
+ }
102
+ if (agentMatch?.[1] && method === "PATCH") {
103
+ const name = decodeOr400(res, agentMatch[1], "Agent name");
104
+ if (name === null)
105
+ return true;
106
+ try {
107
+ const body = AgentPrefsPatchSchema.parse(await readJsonBody(req));
108
+ // Normalize the validated patch into the stored prefs shape, preserving
109
+ // the prior wire tolerance: an empty env_vars map is omitted, and a `""`
110
+ // or `null` model/effort clears that pref.
111
+ const prefs = {};
112
+ if ("env_vars" in body) {
113
+ const value = body.env_vars;
114
+ if (value && Object.keys(value).length > 0)
115
+ prefs.env_vars = value;
116
+ }
117
+ if ("model" in body) {
118
+ prefs.model = body.model === "" ? null : body.model ?? null;
119
+ }
120
+ if ("effort" in body) {
121
+ prefs.effort = body.effort === "" ? null : body.effort ?? null;
122
+ }
123
+ const updated = runtime.setAgentPrefs(name, prefs);
124
+ sendJson(res, 200, updated);
125
+ }
126
+ catch (error) {
127
+ sendError(res, 400, error instanceof Error ? error.message : String(error));
128
+ }
129
+ return true;
130
+ }
131
+ return false;
132
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Auth routes for the desktop shell.
3
+ *
4
+ * The CLI's `interf auth login` command runs the loopback PKCE flow
5
+ * in-process and writes the session itself. The desktop app cannot do
6
+ * that — it is a Zero Native (Zig + WKWebView) binary with no Node
7
+ * runtime — so it asks the engine to run the same flow on its behalf
8
+ * and waits for the result.
9
+ *
10
+ * The flow is identical to the CLI path:
11
+ *
12
+ * 1. Engine binds a fresh loopback HTTP server on 127.0.0.1.
13
+ * 2. Engine asks WorkOS for a PKCE authorize URL bound to that
14
+ * callback URL and opens the user's system browser at it.
15
+ * 3. User completes AuthKit; AuthKit redirects to the loopback
16
+ * server with `?code=...&state=...`.
17
+ * 4. Engine exchanges the code for tokens, writes the refresh token
18
+ * to the keychain, writes `~/.interf/auth/session.json`, and
19
+ * updates `runtime.currentAccount` so any subsequent `/v1/me` GET
20
+ * reflects the new identity without an engine restart.
21
+ *
22
+ * The POST that triggers all this is long-running by design — the
23
+ * response is sent only after AuthKit has roundtripped. The UI calls
24
+ * it with a generous timeout and shows a spinner.
25
+ *
26
+ * `interf://` URL scheme handling is intentionally NOT used here. The
27
+ * loopback flow is platform-agnostic and reuses the CLI's well-tested
28
+ * orchestration; the deep-link path adds an Info.plist /
29
+ * NSAppleEventManager hop that zero-native 0.1.9 does not register.
30
+ */
31
+ import type { IncomingMessage, ServerResponse } from "node:http";
32
+ import type { LocalServiceRuntime } from "../runtime.js";
33
+ export declare function tryHandleAuth(req: IncomingMessage, res: ServerResponse, runtime: LocalServiceRuntime, path: string, method: string): Promise<boolean>;
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Auth routes for the desktop shell.
3
+ *
4
+ * The CLI's `interf auth login` command runs the loopback PKCE flow
5
+ * in-process and writes the session itself. The desktop app cannot do
6
+ * that — it is a Zero Native (Zig + WKWebView) binary with no Node
7
+ * runtime — so it asks the engine to run the same flow on its behalf
8
+ * and waits for the result.
9
+ *
10
+ * The flow is identical to the CLI path:
11
+ *
12
+ * 1. Engine binds a fresh loopback HTTP server on 127.0.0.1.
13
+ * 2. Engine asks WorkOS for a PKCE authorize URL bound to that
14
+ * callback URL and opens the user's system browser at it.
15
+ * 3. User completes AuthKit; AuthKit redirects to the loopback
16
+ * server with `?code=...&state=...`.
17
+ * 4. Engine exchanges the code for tokens, writes the refresh token
18
+ * to the keychain, writes `~/.interf/auth/session.json`, and
19
+ * updates `runtime.currentAccount` so any subsequent `/v1/me` GET
20
+ * reflects the new identity without an engine restart.
21
+ *
22
+ * The POST that triggers all this is long-running by design — the
23
+ * response is sent only after AuthKit has roundtripped. The UI calls
24
+ * it with a generous timeout and shows a spinner.
25
+ *
26
+ * `interf://` URL scheme handling is intentionally NOT used here. The
27
+ * loopback flow is platform-agnostic and reuses the CLI's well-tested
28
+ * orchestration; the deep-link path adds an Info.plist /
29
+ * NSAppleEventManager hop that zero-native 0.1.9 does not register.
30
+ */
31
+ import { AuthFlowError, defaultPkceTransport, runPkceFlow, } from "../auth/auth-flow.js";
32
+ import { entitlementsForPlan } from "../auth/account-context.js";
33
+ import { deleteRefreshToken, setRefreshToken, } from "../auth/keychain.js";
34
+ import { clearSession, writeSession, } from "../auth/session-store.js";
35
+ import { WorkOSConfigError } from "../auth/workos-client.js";
36
+ import { LOCAL_SERVICE_ROUTES } from "./routes.js";
37
+ import { readJsonBody, sendError, sendErrorResponse, sendJson, } from "./server-helpers.js";
38
+ const AUTH_LOGIN_PATH = `${LOCAL_SERVICE_ROUTES.auth}/login`;
39
+ const AUTH_LOGOUT_PATH = `${LOCAL_SERVICE_ROUTES.auth}/logout`;
40
+ export async function tryHandleAuth(req, res, runtime, path, method) {
41
+ if (method !== "POST")
42
+ return false;
43
+ if (path === AUTH_LOGIN_PATH) {
44
+ await handleLogin(req, res, runtime);
45
+ return true;
46
+ }
47
+ if (path === AUTH_LOGOUT_PATH) {
48
+ await handleLogout(req, res, runtime);
49
+ return true;
50
+ }
51
+ return false;
52
+ }
53
+ async function handleLogin(req, res, runtime) {
54
+ let body = {};
55
+ try {
56
+ const raw = await readJsonBody(req);
57
+ if (raw && typeof raw === "object")
58
+ body = raw;
59
+ }
60
+ catch {
61
+ // Empty/invalid body is fine — login takes no required input.
62
+ }
63
+ try {
64
+ const result = await runPkceFlow(defaultPkceTransport(), {
65
+ autoOpenBrowser: body.open_browser ?? true,
66
+ ...(body.login_hint ? { loginHint: body.login_hint } : {}),
67
+ });
68
+ try {
69
+ await setRefreshToken(result.user.id, result.refreshToken);
70
+ }
71
+ catch {
72
+ // Keychain failure is non-fatal — the session still works for
73
+ // the current process. The user will be prompted again after
74
+ // the next engine restart.
75
+ }
76
+ const refreshedAt = new Date().toISOString();
77
+ const plan = "free";
78
+ const displayName = [result.user.firstName, result.user.lastName]
79
+ .filter((part) => typeof part === "string" && part.length > 0)
80
+ .join(" ") || null;
81
+ const account = {
82
+ user_id: result.user.id,
83
+ email: result.user.email,
84
+ display_name: displayName,
85
+ plan,
86
+ entitlements: entitlementsForPlan(plan),
87
+ refreshed_at: refreshedAt,
88
+ };
89
+ writeSession(account);
90
+ runtime.currentAccount = account;
91
+ sendJson(res, 200, {
92
+ kind: "interf-auth-login",
93
+ version: 1,
94
+ account: {
95
+ user_id: account.user_id,
96
+ email: account.email,
97
+ display_name: account.display_name,
98
+ plan: account.plan,
99
+ entitlements: {
100
+ max_active_projects: Number.isFinite(account.entitlements.max_active_projects)
101
+ ? account.entitlements.max_active_projects
102
+ : null,
103
+ pro_features: account.entitlements.pro_features,
104
+ },
105
+ refreshed_at: account.refreshed_at,
106
+ },
107
+ });
108
+ }
109
+ catch (error) {
110
+ if (error instanceof WorkOSConfigError) {
111
+ sendError(res, 503, error.message);
112
+ return;
113
+ }
114
+ if (error instanceof AuthFlowError) {
115
+ sendError(res, 400, `Sign-in failed: ${error.message}`);
116
+ return;
117
+ }
118
+ sendErrorResponse(res, error, 500);
119
+ }
120
+ }
121
+ async function handleLogout(_req, res, runtime) {
122
+ const previous = runtime.currentAccount;
123
+ if (previous) {
124
+ try {
125
+ await deleteRefreshToken(previous.user_id);
126
+ }
127
+ catch {
128
+ // Best-effort cleanup; the on-disk session below is the
129
+ // authoritative signal.
130
+ }
131
+ }
132
+ clearSession();
133
+ runtime.currentAccount = null;
134
+ sendJson(res, 200, {
135
+ kind: "interf-auth-logout",
136
+ version: 1,
137
+ });
138
+ }
@@ -0,0 +1,3 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { LocalServiceRuntime } from "../runtime.js";
3
+ export declare function tryHandleBuildPlans(req: IncomingMessage, res: ServerResponse, runtime: LocalServiceRuntime, path: string, method: string): Promise<boolean>;
@@ -0,0 +1,86 @@
1
+ import { BuildPlanSaveRequestSchema } from "../schemas/index.js";
2
+ import { LOCAL_SERVICE_ROUTES } from "./routes.js";
3
+ import { decodeOr400, readJsonBody, sendError, sendJson, } from "./server-helpers.js";
4
+ import { isTraversalRelativePath, safeApiFilePath, sendApiFile, } from "./server-api-files.js";
5
+ import { findInstanceBuildPlan, listInstanceBuildPlanRuns, listInstanceBuildPlans, resolveInstanceBuildPlanPackageRoot, } from "./server-instance-helpers.js";
6
+ import { installUserBuildPlan } from "../../build-plans/package/user-build-plans.js";
7
+ export async function tryHandleBuildPlans(req, res, runtime, path, method) {
8
+ if (method === "GET" && path === LOCAL_SERVICE_ROUTES.buildPlans) {
9
+ sendJson(res, 200, { build_plans: listInstanceBuildPlans(runtime) });
10
+ return true;
11
+ }
12
+ if (method === "POST" && path === LOCAL_SERVICE_ROUTES.buildPlans) {
13
+ try {
14
+ const body = BuildPlanSaveRequestSchema.parse(await readJsonBody(req));
15
+ const installed = installUserBuildPlan({
16
+ sourceDir: body.source_path,
17
+ id: body.id,
18
+ overwrite: body.overwrite,
19
+ });
20
+ sendJson(res, 201, {
21
+ build_plan_id: installed.id,
22
+ installed: true,
23
+ path: installed.path,
24
+ });
25
+ }
26
+ catch (error) {
27
+ sendError(res, 400, error instanceof Error ? error.message : String(error));
28
+ }
29
+ return true;
30
+ }
31
+ const buildPlanMatch = path.match(/^\/v1\/build-plans\/([^/]+)$/);
32
+ if (method === "GET" && buildPlanMatch?.[1]) {
33
+ const buildPlanId = decodeOr400(res, buildPlanMatch[1], "Build Plan id");
34
+ if (buildPlanId === null)
35
+ return true;
36
+ const buildPlanResource = findInstanceBuildPlan(runtime, buildPlanId);
37
+ if (!buildPlanResource)
38
+ sendError(res, 404, "Build Plan not found.");
39
+ else
40
+ sendJson(res, 200, buildPlanResource);
41
+ return true;
42
+ }
43
+ const buildPlanRunsMatch = path.match(/^\/v1\/build-plans\/([^/]+)\/runs$/);
44
+ if (method === "GET" && buildPlanRunsMatch?.[1]) {
45
+ const buildPlanId = decodeOr400(res, buildPlanRunsMatch[1], "Build Plan id");
46
+ if (buildPlanId === null)
47
+ return true;
48
+ const runs = listInstanceBuildPlanRuns(runtime, buildPlanId);
49
+ sendJson(res, 200, { runs });
50
+ return true;
51
+ }
52
+ // GET /v1/build-plans/<id>/files/<relpath> — read-only file serving inside
53
+ // the Build Plan package root. Used by the locator pattern's `api-served` kind so
54
+ // the UI can render SKILL.md / contract files in a side drawer over a
55
+ // remote engine. Resolution: project-draft (when first project exists) →
56
+ // user library → built-in. Path-guard rejects any traversal outside
57
+ // the resolved root.
58
+ const buildPlanFilesMatch = path.match(/^\/v1\/build-plans\/([^/]+)\/files\/(.+)$/);
59
+ if (method === "GET" && buildPlanFilesMatch?.[1] && buildPlanFilesMatch[2]) {
60
+ const buildPlanId = decodeOr400(res, buildPlanFilesMatch[1], "Build Plan id");
61
+ if (buildPlanId === null)
62
+ return true;
63
+ const relPath = decodeOr400(res, buildPlanFilesMatch[2], "File path");
64
+ if (relPath === null)
65
+ return true;
66
+ if (isTraversalRelativePath(relPath)) {
67
+ sendError(res, 400, "File path escapes Build Plan root.");
68
+ return true;
69
+ }
70
+ const root = resolveInstanceBuildPlanPackageRoot(runtime, buildPlanId);
71
+ if (!root) {
72
+ sendError(res, 404, `Build Plan not found: ${buildPlanId}`);
73
+ return true;
74
+ }
75
+ const safePath = safeApiFilePath(root, relPath);
76
+ if (!safePath) {
77
+ sendError(res, 400, "File path escapes Build Plan root.");
78
+ return true;
79
+ }
80
+ if (!sendApiFile(res, safePath)) {
81
+ sendError(res, 404, `File not found: ${relPath}`);
82
+ }
83
+ return true;
84
+ }
85
+ return false;
86
+ }
@@ -0,0 +1,4 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { LocalServiceRuntime } from "../runtime.js";
3
+ export declare function tryHandleDiscovery(_req: IncomingMessage, res: ServerResponse, runtime: LocalServiceRuntime, path: string, method: string): boolean;
4
+ export declare function tryHandleOpenPath(req: IncomingMessage, res: ServerResponse, _runtime: LocalServiceRuntime, path: string, method: string): Promise<boolean>;
@@ -0,0 +1,196 @@
1
+ import { LOCAL_SERVICE_LOOPBACK_HOSTS, LocalServiceDiscoverySchema, OpenPathRequestSchema, } from "../schemas/index.js";
2
+ import { buildLocalServiceUrl, LOCAL_SERVICE_ROUTES, } from "./routes.js";
3
+ import { buildOpenApiDocument } from "./openapi.js";
4
+ import { readJsonBody, sendError, sendJson, } from "./server-helpers.js";
5
+ import { packageRoot, } from "./server-api-files.js";
6
+ import { listStoredProjects } from "../project-store.js";
7
+ import { userBuildPlansRoot } from "../../contracts/lib/project-paths.js";
8
+ import { spawn } from "node:child_process";
9
+ import { existsSync, statSync } from "node:fs";
10
+ import { dirname, resolve } from "node:path";
11
+ import { assertPathWithinRoot } from "../../contracts/utils/path-guards.js";
12
+ export function tryHandleDiscovery(_req, res, runtime, path, method) {
13
+ // GET /health — liveness probe used by the CLI bootstrap.
14
+ if (method === "GET" && path === LOCAL_SERVICE_ROUTES.health) {
15
+ sendJson(res, 200, runtime.health());
16
+ return true;
17
+ }
18
+ // GET /v1 — discovery list of available resources.
19
+ if (method === "GET" && path === LOCAL_SERVICE_ROUTES.api) {
20
+ sendJson(res, 200, LocalServiceDiscoverySchema.parse({
21
+ kind: "interf-local-service-discovery",
22
+ version: 1,
23
+ resources: {
24
+ instance: LOCAL_SERVICE_ROUTES.instance,
25
+ projects: LOCAL_SERVICE_ROUTES.projects,
26
+ build_plans: LOCAL_SERVICE_ROUTES.buildPlans,
27
+ runs: LOCAL_SERVICE_ROUTES.runs,
28
+ openapi: LOCAL_SERVICE_ROUTES.openapi,
29
+ action_proposals: LOCAL_SERVICE_ROUTES.actionProposals,
30
+ executor: LOCAL_SERVICE_ROUTES.executor,
31
+ agents: LOCAL_SERVICE_ROUTES.agents,
32
+ me: LOCAL_SERVICE_ROUTES.me,
33
+ open_path: LOCAL_SERVICE_ROUTES.openPath,
34
+ },
35
+ }));
36
+ return true;
37
+ }
38
+ // GET /v1/openapi.json — human-readable API contract generated from the
39
+ // same operation registry used by clients and tools.
40
+ if (method === "GET" && path === LOCAL_SERVICE_ROUTES.openapi) {
41
+ sendJson(res, 200, buildOpenApiDocument({
42
+ version: runtime.packageVersion ?? "0.1.0",
43
+ }));
44
+ return true;
45
+ }
46
+ // GET /v1/me — current account / session.
47
+ if (method === "GET" && path === LOCAL_SERVICE_ROUTES.me) {
48
+ if (runtime.currentAccount) {
49
+ sendJson(res, 200, {
50
+ kind: "interf-current-account",
51
+ version: 1,
52
+ user_id: runtime.currentAccount.user_id,
53
+ email: runtime.currentAccount.email,
54
+ display_name: runtime.currentAccount.display_name,
55
+ plan: runtime.currentAccount.plan,
56
+ entitlements: {
57
+ max_active_projects: Number.isFinite(runtime.currentAccount.entitlements.max_active_projects)
58
+ ? runtime.currentAccount.entitlements.max_active_projects
59
+ : null,
60
+ pro_features: runtime.currentAccount.entitlements.pro_features,
61
+ },
62
+ refreshed_at: runtime.currentAccount.refreshed_at,
63
+ });
64
+ }
65
+ else {
66
+ sendJson(res, 200, {
67
+ kind: "interf-current-account",
68
+ version: 1,
69
+ user_id: null,
70
+ email: null,
71
+ display_name: null,
72
+ plan: "anonymous",
73
+ entitlements: {
74
+ max_active_projects: 10,
75
+ pro_features: [],
76
+ },
77
+ refreshed_at: null,
78
+ });
79
+ }
80
+ return true;
81
+ }
82
+ // GET /v1/instance — local service metadata.
83
+ if (method === "GET" && path === LOCAL_SERVICE_ROUTES.instance) {
84
+ const startedAtIso = runtime.startedAt ?? new Date().toISOString();
85
+ const startedMs = Date.parse(startedAtIso);
86
+ const uptimeSeconds = Number.isFinite(startedMs)
87
+ ? Math.max(0, Math.floor((Date.now() - startedMs) / 1000))
88
+ : 0;
89
+ const agentState = runtime.getAgentsRegistry();
90
+ // `connection_kind` lets the UI know whether OS-open is even
91
+ // possible. A loopback bind means the local service has filesystem access
92
+ // to the same host as the user; non-loopback (cloud) returns
93
+ // "remote" so the UI routes to api-served / signed-URL paths
94
+ // instead. The current binary refuses non-loopback binds (see the
95
+ // host whitelist below), so the value is "local" today; the field
96
+ // is in place so the UI can read it without a CLI version sniff.
97
+ const isLoopback = LOCAL_SERVICE_LOOPBACK_HOSTS.includes(runtime.host);
98
+ const health = runtime.health();
99
+ sendJson(res, 200, {
100
+ kind: "interf-instance",
101
+ version: 1,
102
+ url: buildLocalServiceUrl({ host: runtime.host, port: runtime.port }),
103
+ host: runtime.host,
104
+ port: runtime.port,
105
+ pid: process.pid,
106
+ started_at: startedAtIso,
107
+ uptime_seconds: uptimeSeconds,
108
+ package_version: runtime.packageVersion ?? null,
109
+ project_count: listStoredProjects().length,
110
+ active_run_count: health.active_runs,
111
+ idle_for_seconds: health.idle_for_seconds,
112
+ auth_required: Boolean(runtime.authToken),
113
+ owner_kind: runtime.ownerKind,
114
+ ...(runtime.ownerPid ? { owner_pid: runtime.ownerPid } : {}),
115
+ // connected-agents fields:
116
+ agent_count: agentState.agents.length,
117
+ default_agent: agentState.active_agent?.name ?? null,
118
+ // connection-mode flag:
119
+ connection_kind: isLoopback ? "local" : "remote",
120
+ });
121
+ return true;
122
+ }
123
+ return false;
124
+ }
125
+ function resolveOpenPath(allowedRoots, pathValue) {
126
+ const roots = allowedRoots.map((root) => resolve(root));
127
+ const targetPath = resolve(pathValue);
128
+ for (const root of roots) {
129
+ try {
130
+ return assertPathWithinRoot(root, targetPath, "Open path");
131
+ }
132
+ catch {
133
+ continue;
134
+ }
135
+ }
136
+ throw new Error(`Open path must stay inside ${roots.join(" or ")}: ${targetPath}`);
137
+ }
138
+ async function openLocalPath(allowedRoots, pathValue) {
139
+ const targetPath = resolveOpenPath(allowedRoots, pathValue);
140
+ if (!existsSync(targetPath)) {
141
+ throw new Error(`Path does not exist: ${targetPath}`);
142
+ }
143
+ if (process.env.INTERF_OPEN_PATH_DRY_RUN === "1") {
144
+ return targetPath;
145
+ }
146
+ const isDirectory = statSync(targetPath).isDirectory();
147
+ const command = process.platform === "darwin"
148
+ ? "open"
149
+ : process.platform === "win32"
150
+ ? "explorer.exe"
151
+ : "xdg-open";
152
+ const args = process.platform === "darwin"
153
+ ? (isDirectory ? [targetPath] : ["-R", targetPath])
154
+ : process.platform === "win32"
155
+ ? (isDirectory ? [targetPath] : ["/select,", targetPath])
156
+ : [isDirectory ? targetPath : dirname(targetPath)];
157
+ await new Promise((resolveOpen, rejectOpen) => {
158
+ const child = spawn(command, args, {
159
+ detached: true,
160
+ stdio: "ignore",
161
+ });
162
+ child.once("error", rejectOpen);
163
+ child.once("spawn", () => {
164
+ child.unref();
165
+ resolveOpen();
166
+ });
167
+ });
168
+ return targetPath;
169
+ }
170
+ export async function tryHandleOpenPath(req, res, _runtime, path, method) {
171
+ if (!(method === "POST" && path === LOCAL_SERVICE_ROUTES.openPath)) {
172
+ return false;
173
+ }
174
+ try {
175
+ const body = OpenPathRequestSchema.parse(await readJsonBody(req));
176
+ // Permit opening:
177
+ // - any registered project root or its bound source folder
178
+ // - the user buildPlan library at `~/.interf/build-plans/`
179
+ // - the bundled built-in buildPlan root inside the installed package
180
+ // (so SKILL.md / contract files in `interf-default` open correctly)
181
+ const allowedRoots = [];
182
+ for (const stored of listStoredProjects()) {
183
+ allowedRoots.push(stored.projectDataDir);
184
+ if (stored.source.locator)
185
+ allowedRoots.push(stored.source.locator);
186
+ }
187
+ allowedRoots.push(userBuildPlansRoot());
188
+ allowedRoots.push(packageRoot()); // covers <pkg>/public-repo/build-plans/...
189
+ const openedPath = await openLocalPath(allowedRoots, body.path);
190
+ sendJson(res, 202, { opened: true, path: openedPath });
191
+ }
192
+ catch (error) {
193
+ sendError(res, 400, error instanceof Error ? error.message : String(error));
194
+ }
195
+ return true;
196
+ }
@@ -0,0 +1,5 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { LocalServiceRuntime } from "../runtime.js";
3
+ /** Fan a change ping out to every open events stream for this runtime. */
4
+ export declare function notifyServiceChange(runtime: LocalServiceRuntime): void;
5
+ export declare function tryHandleEvents(req: IncomingMessage, res: ServerResponse, runtime: LocalServiceRuntime, path: string, method: string): boolean;