@interf/compiler 0.22.2 → 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 +175 -234
  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 +39 -31
  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/--reS3xBzM5zc6QxNjZd6/_buildManifest.js +0 -11
  415. package/dist/interf-ui/_next/static/--reS3xBzM5zc6QxNjZd6/_clientMiddlewareManifest.js +0 -1
  416. package/dist/interf-ui/_next/static/--reS3xBzM5zc6QxNjZd6/_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
@@ -168,14 +168,14 @@ function summarizeToolUse(name, input) {
168
168
  const target = summarizeToolTarget(input);
169
169
  switch (name) {
170
170
  case "Read":
171
- return target ? `reading ${target}` : "reading verifiable context files";
171
+ return target ? `reading ${target}` : "reading context graph files";
172
172
  case "Write":
173
- return target ? `writing ${target}` : "writing verifiable context files";
173
+ return target ? `writing ${target}` : "writing context graph files";
174
174
  case "Edit":
175
- return target ? `editing ${target}` : "editing verifiable context files";
175
+ return target ? `editing ${target}` : "editing context graph files";
176
176
  case "Glob":
177
177
  case "Grep":
178
- return target ? `${name.toLowerCase()} on ${target}` : `${name.toLowerCase()}ing verifiable context files`;
178
+ return target ? `${name.toLowerCase()} on ${target}` : `${name.toLowerCase()}ing context graph files`;
179
179
  case "Bash":
180
180
  return target ? `running ${target}` : "running a local helper";
181
181
  default:
@@ -0,0 +1,18 @@
1
+ import type { PreservedShellType } from "../../build/lib/schema.js";
2
+ export declare function writeIfChanged(path: string, content: string): boolean;
3
+ export declare function writeNativeSkillCopies(rootPath: string, skillName: string, content: string): boolean;
4
+ export declare function linkPath(targetPath: string, linkPathname: string): void;
5
+ export declare function linkIfExists(targetPath: string, linkPathname: string): void;
6
+ export declare function linkRelativePath(targetPath: string, linkPathname: string): void;
7
+ export declare function copyResolvedTree(options: {
8
+ sourcePath: string;
9
+ targetPath: string;
10
+ shellType: PreservedShellType;
11
+ relativePath?: string;
12
+ activeRealPaths?: Set<string>;
13
+ materializedRealPaths?: Map<string, string>;
14
+ }): {
15
+ materializedSymlinks: number;
16
+ };
17
+ export declare function copyIfExists(sourcePath: string, targetPath: string, shellType: PreservedShellType): void;
18
+ export declare function freezePreservedShell(rootPath: string, shellType: PreservedShellType): string | null;
@@ -0,0 +1,190 @@
1
+ import { copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, symlinkSync, writeFileSync, lstatSync, } from "node:fs";
2
+ import { dirname, join, relative, sep as pathSep } from "node:path";
3
+ import { LOCAL_SKILL_ROOTS, preservedShellManifestPath, } from "./shell-paths.js";
4
+ export function writeIfChanged(path, content) {
5
+ if (existsSync(path) && readFileSync(path, "utf8") === content) {
6
+ return false;
7
+ }
8
+ mkdirSync(dirname(path), { recursive: true });
9
+ writeFileSync(path, content);
10
+ return true;
11
+ }
12
+ export function writeNativeSkillCopies(rootPath, skillName, content) {
13
+ let changed = false;
14
+ for (const skillsRoot of LOCAL_SKILL_ROOTS) {
15
+ const skillPath = join(rootPath, skillsRoot, skillName, "SKILL.md");
16
+ changed = writeIfChanged(skillPath, content) || changed;
17
+ }
18
+ return changed;
19
+ }
20
+ export function linkPath(targetPath, linkPathname) {
21
+ mkdirSync(dirname(linkPathname), { recursive: true });
22
+ symlinkSync(targetPath, linkPathname);
23
+ }
24
+ export function linkIfExists(targetPath, linkPathname) {
25
+ if (!existsSync(targetPath))
26
+ return;
27
+ linkPath(targetPath, linkPathname);
28
+ }
29
+ export function linkRelativePath(targetPath, linkPathname) {
30
+ mkdirSync(dirname(linkPathname), { recursive: true });
31
+ symlinkSync(relative(dirname(linkPathname), targetPath), linkPathname);
32
+ }
33
+ function shouldSkipFrozenStageShellRelativePath(relativePath) {
34
+ const normalized = relativePath.replaceAll("\\", "/");
35
+ return normalized === "execution-shells" ||
36
+ normalized.endsWith("/execution-shells") ||
37
+ normalized.includes("/execution-shells/") ||
38
+ normalized === "improvement-loops" ||
39
+ normalized.endsWith("/improvement-loops") ||
40
+ normalized.includes("/improvement-loops/");
41
+ }
42
+ /**
43
+ * System path prefixes a malicious symlink in a Build Plan package must
44
+ * never reach. Without this, the preserved-shell logic could be
45
+ * tricked into copying anything the running user has access to —
46
+ * `/etc/passwd`, `~/.ssh/id_rsa`, etc. (CSO finding).
47
+ *
48
+ * We deliberately allow targets that escape the immediate freeze
49
+ * root: legitimate execution shells contain symlinks pointing back
50
+ * to the parent Project's `interf.json`. The threat is only links
51
+ * that resolve into truly system-level paths.
52
+ */
53
+ const FORBIDDEN_SYMLINK_TARGET_PREFIXES = [
54
+ "/etc",
55
+ "/sys",
56
+ "/proc",
57
+ "/dev",
58
+ "/var/run",
59
+ "/var/lib",
60
+ "/usr",
61
+ "/bin",
62
+ "/sbin",
63
+ "/boot",
64
+ "/root",
65
+ ];
66
+ function ensureSymlinkTargetSafe(realTarget, symlinkPath) {
67
+ for (const prefix of FORBIDDEN_SYMLINK_TARGET_PREFIXES) {
68
+ if (realTarget === prefix || realTarget.startsWith(`${prefix}${pathSep}`)) {
69
+ throw new Error(`Refusing to follow symlink ${symlinkPath} → ${realTarget}: ` +
70
+ `resolves into system directory ${prefix}.`);
71
+ }
72
+ }
73
+ // Also refuse links that escape into another user's SSH directory
74
+ // even if the path is not on the literal forbidden list.
75
+ if (/\/\.ssh(\/|$)/.test(realTarget)) {
76
+ throw new Error(`Refusing to follow symlink ${symlinkPath} → ${realTarget}: ` +
77
+ `targets a .ssh directory.`);
78
+ }
79
+ }
80
+ export function copyResolvedTree(options) {
81
+ const relativePath = options.relativePath ?? "";
82
+ if (options.shellType === "stage-execution" && shouldSkipFrozenStageShellRelativePath(relativePath)) {
83
+ return { materializedSymlinks: 0 };
84
+ }
85
+ const stat = lstatSync(options.sourcePath);
86
+ if (stat.isSymbolicLink()) {
87
+ // existsSync follows symlinks, so a dangling link (target absent)
88
+ // returns false. Skip those entries: realpathSync would throw
89
+ // ENOENT, and the freeze step is best-effort review material —
90
+ // losing one unresolvable link is better than aborting the whole
91
+ // preserved shell. Production trigger: createStageExecutionShell links
92
+ // runtime/stage-contract.json before writeStageContract runs, so
93
+ // any failure between those two points leaves a dangling link
94
+ // that the per-stage finally-block freeze would otherwise hit.
95
+ if (!existsSync(options.sourcePath)) {
96
+ return { materializedSymlinks: 0 };
97
+ }
98
+ const realTarget = realpathSync(options.sourcePath);
99
+ // Refuse symlinks resolving into system paths (CSO finding). We
100
+ // deliberately allow links that escape the immediate freeze root
101
+ // because legitimate execution shells contain links back to the
102
+ // parent Project's interf.json — the only thing we care about
103
+ // is that the realpath does not land in /etc, /sys, /proc, etc.
104
+ ensureSymlinkTargetSafe(realTarget, options.sourcePath);
105
+ const realStat = statSync(realTarget);
106
+ if (realStat.isDirectory()) {
107
+ const mappedTarget = options.materializedRealPaths?.get(realTarget);
108
+ if (mappedTarget) {
109
+ linkRelativePath(mappedTarget, options.targetPath);
110
+ return { materializedSymlinks: 1 };
111
+ }
112
+ return {
113
+ materializedSymlinks: 1 + copyResolvedTree({
114
+ sourcePath: realTarget,
115
+ targetPath: options.targetPath,
116
+ shellType: options.shellType,
117
+ relativePath,
118
+ activeRealPaths: options.activeRealPaths,
119
+ materializedRealPaths: options.materializedRealPaths,
120
+ }).materializedSymlinks,
121
+ };
122
+ }
123
+ mkdirSync(dirname(options.targetPath), { recursive: true });
124
+ copyFileSync(realTarget, options.targetPath);
125
+ return { materializedSymlinks: 1 };
126
+ }
127
+ if (stat.isDirectory()) {
128
+ const realSource = realpathSync(options.sourcePath);
129
+ const mappedTarget = options.materializedRealPaths?.get(realSource);
130
+ if (mappedTarget && mappedTarget !== options.targetPath) {
131
+ linkRelativePath(mappedTarget, options.targetPath);
132
+ return { materializedSymlinks: 0 };
133
+ }
134
+ const nextRealPaths = new Set([...(options.activeRealPaths ?? []), realSource]);
135
+ const nextMaterializedRealPaths = new Map(options.materializedRealPaths ?? []);
136
+ nextMaterializedRealPaths.set(realSource, options.targetPath);
137
+ mkdirSync(options.targetPath, { recursive: true });
138
+ let materializedSymlinks = 0;
139
+ for (const entry of readdirSync(options.sourcePath)) {
140
+ const childRelativePath = relativePath.length > 0 ? `${relativePath}/${entry}` : entry;
141
+ const copied = copyResolvedTree({
142
+ sourcePath: join(options.sourcePath, entry),
143
+ targetPath: join(options.targetPath, entry),
144
+ shellType: options.shellType,
145
+ relativePath: childRelativePath,
146
+ activeRealPaths: nextRealPaths,
147
+ materializedRealPaths: nextMaterializedRealPaths,
148
+ });
149
+ materializedSymlinks += copied.materializedSymlinks;
150
+ }
151
+ return { materializedSymlinks };
152
+ }
153
+ mkdirSync(dirname(options.targetPath), { recursive: true });
154
+ copyFileSync(options.sourcePath, options.targetPath);
155
+ return { materializedSymlinks: 0 };
156
+ }
157
+ export function copyIfExists(sourcePath, targetPath, shellType) {
158
+ if (!existsSync(sourcePath))
159
+ return;
160
+ copyResolvedTree({
161
+ sourcePath,
162
+ targetPath,
163
+ shellType,
164
+ });
165
+ }
166
+ export function freezePreservedShell(rootPath, shellType) {
167
+ if (!existsSync(rootPath))
168
+ return null;
169
+ const manifestPath = preservedShellManifestPath(rootPath);
170
+ if (existsSync(manifestPath))
171
+ return manifestPath;
172
+ const tempRoot = `${rootPath}.frozen-${Date.now().toString(36)}`;
173
+ const copied = copyResolvedTree({
174
+ sourcePath: rootPath,
175
+ targetPath: tempRoot,
176
+ shellType,
177
+ });
178
+ const manifest = {
179
+ kind: "interf-preserved-shell",
180
+ version: 1,
181
+ shell_type: shellType,
182
+ generated_at: new Date().toISOString(),
183
+ root_path: rootPath,
184
+ materialized_symlinks: copied.materializedSymlinks,
185
+ };
186
+ writeFileSync(preservedShellManifestPath(tempRoot), `${JSON.stringify(manifest, null, 2)}\n`);
187
+ rmSync(rootPath, { recursive: true, force: true });
188
+ renameSync(tempRoot, rootPath);
189
+ return manifestPath;
190
+ }
@@ -0,0 +1,16 @@
1
+ import type { ContextInterfaceArtifact as BuildPlanArtifact } from "../../../build-plans/package/context-interface.js";
2
+ export declare const LOCAL_SKILL_ROOTS: readonly [".claude/skills", ".codex/skills", ".agents/skills", ".cursor/skills"];
3
+ export declare function contextGraphQuerySkillSourcePath(contextGraphPath: string): string;
4
+ export declare function stageShellBuildPlanRoot(shellRoot: string): string;
5
+ export declare function shellArtifactAliasMountPath(shellRoot: string, artifact: BuildPlanArtifact, mountKind: "inputs" | "outputs"): string;
6
+ export declare function describeShellArtifactAliasMountPath(artifact: BuildPlanArtifact, mountKind: "inputs" | "outputs"): string;
7
+ export declare function shellRuntimePath(shellRoot: string, relativePath: string): string;
8
+ export declare function shellLogsPath(shellRoot: string, relativePath?: string): string;
9
+ export declare function shellPromptLogPath(shellRoot: string, runId: string): string;
10
+ export declare function shellEventLogPath(shellRoot: string, runId: string): string;
11
+ export declare function shellStatusLogPath(shellRoot: string, runId: string): string;
12
+ export declare function shellWorkspaceManifestPath(shellRoot: string): string;
13
+ export declare function preservedShellManifestPath(rootPath: string): string;
14
+ export declare function improvementBuildPlanDocsPath(contextGraphPath: string): string;
15
+ export declare function normalizeArtifactRelativePath(path: string): string;
16
+ export declare function relativePathEqualsOrWithin(basePath: string, candidatePath: string): boolean;
@@ -0,0 +1,63 @@
1
+ import { basename, join } from "node:path";
2
+ import { BUILD_PLAN_PACKAGE_DIR } from "../../../projects/interf-detect.js";
3
+ import { buildPlanPackagePathForContextGraph } from "../../build/context-graph-paths.js";
4
+ export const LOCAL_SKILL_ROOTS = [
5
+ ".claude/skills",
6
+ ".codex/skills",
7
+ ".agents/skills",
8
+ ".cursor/skills",
9
+ ];
10
+ export function contextGraphQuerySkillSourcePath(contextGraphPath) {
11
+ return join(buildPlanPackagePathForContextGraph(contextGraphPath), "use", "query", "SKILL.md");
12
+ }
13
+ export function stageShellBuildPlanRoot(shellRoot) {
14
+ return join(shellRoot, BUILD_PLAN_PACKAGE_DIR);
15
+ }
16
+ export function shellArtifactAliasMountPath(shellRoot, artifact, mountKind) {
17
+ const mountRoot = join(shellRoot, mountKind, artifact.id);
18
+ return artifact.kind === "file"
19
+ ? join(mountRoot, basename(artifact.path))
20
+ : mountRoot;
21
+ }
22
+ export function describeShellArtifactAliasMountPath(artifact, mountKind) {
23
+ return artifact.kind === "file"
24
+ ? `${mountKind}/${artifact.id}/${basename(artifact.path)}`
25
+ : `${mountKind}/${artifact.id}`;
26
+ }
27
+ export function shellRuntimePath(shellRoot, relativePath) {
28
+ return join(shellRoot, "runtime", relativePath);
29
+ }
30
+ export function shellLogsPath(shellRoot, relativePath = "") {
31
+ return relativePath ? join(shellRoot, "logs", relativePath) : join(shellRoot, "logs");
32
+ }
33
+ export function shellPromptLogPath(shellRoot, runId) {
34
+ return shellLogsPath(shellRoot, `${runId}.prompt.txt`);
35
+ }
36
+ export function shellEventLogPath(shellRoot, runId) {
37
+ return shellLogsPath(shellRoot, `${runId}.events.ndjson`);
38
+ }
39
+ export function shellStatusLogPath(shellRoot, runId) {
40
+ return shellLogsPath(shellRoot, `${runId}.status.log`);
41
+ }
42
+ export function shellWorkspaceManifestPath(shellRoot) {
43
+ return shellRuntimePath(shellRoot, "workspace.json");
44
+ }
45
+ export function preservedShellManifestPath(rootPath) {
46
+ return shellRuntimePath(rootPath, "preserved-shell.json");
47
+ }
48
+ export function improvementBuildPlanDocsPath(contextGraphPath) {
49
+ return join(buildPlanPackagePathForContextGraph(contextGraphPath), "improve");
50
+ }
51
+ export function normalizeArtifactRelativePath(path) {
52
+ return path
53
+ .replaceAll("\\", "/")
54
+ .replace(/^\.?\//, "")
55
+ .replace(/\/+$/g, "");
56
+ }
57
+ export function relativePathEqualsOrWithin(basePath, candidatePath) {
58
+ const base = normalizeArtifactRelativePath(basePath);
59
+ const candidate = normalizeArtifactRelativePath(candidatePath);
60
+ if (base.length === 0 || candidate.length === 0)
61
+ return false;
62
+ return candidate === base || candidate.startsWith(`${base}/`);
63
+ }
@@ -0,0 +1,25 @@
1
+ import { type ContextInterface as BuildPlanContextSchema, type ContextInterfaceArtifact as BuildPlanArtifact, type ContextInterfaceArtifactId as BuildPlanArtifactId } from "../../../build-plans/package/context-interface.js";
2
+ import type { ExecutionShellArtifactMount } from "../../build/lib/schema.js";
3
+ import type { NativeStageDefinition } from "./shell-templates.js";
4
+ export declare function loadContextGraphSchema(contextGraphPath: string): BuildPlanContextSchema;
5
+ export declare function artifactMap(schema: BuildPlanContextSchema): Map<BuildPlanArtifactId, BuildPlanArtifact>;
6
+ export declare function artifactOrThrow(artifacts: Map<BuildPlanArtifactId, BuildPlanArtifact>, artifactId: BuildPlanArtifactId): BuildPlanArtifact;
7
+ export declare function stageWriteArtifactSet(schema: BuildPlanContextSchema, stage: NativeStageDefinition): Set<BuildPlanArtifactId>;
8
+ export declare function stageMaterializedArtifactSet(schema: BuildPlanContextSchema, stage: NativeStageDefinition, writeArtifacts?: readonly string[]): Set<BuildPlanArtifactId>;
9
+ export declare function ensureBuildExecutionSurface(contextGraphPath: string): BuildPlanContextSchema;
10
+ export declare function readStageBuildPlanDoc(contextGraphPath: string, stage: NativeStageDefinition): string | null;
11
+ export declare function stageBuildPlanDocsPath(contextGraphPath: string, stage: NativeStageDefinition): string;
12
+ export declare function projectBuildPlanMetadata(contextGraphPath: string, shellRoot: string, stage: NativeStageDefinition): void;
13
+ export declare function projectContextGraphSchemaArtifacts(contextGraphPath: string, shellRoot: string, schema: BuildPlanContextSchema, artifactIds?: Iterable<BuildPlanArtifactId>, materializedArtifactIds?: ReadonlySet<BuildPlanArtifactId>, cleanMaterializedArtifactIds?: ReadonlySet<BuildPlanArtifactId>): void;
14
+ export declare function buildStageArtifactMounts(_contextGraphPath: string, _shellRoot: string, stage: NativeStageDefinition, schema: BuildPlanContextSchema): {
15
+ reads: ExecutionShellArtifactMount[];
16
+ writes: ExecutionShellArtifactMount[];
17
+ };
18
+ export declare function projectStageArtifactMountAliases(shellRoot: string, stage: NativeStageDefinition, schema: BuildPlanContextSchema): void;
19
+ export declare function writeExecutionShellPathsFile(shellRoot: string, buildPlanId: string, stage: NativeStageDefinition, mounts: {
20
+ reads: ExecutionShellArtifactMount[];
21
+ writes: ExecutionShellArtifactMount[];
22
+ }): void;
23
+ export declare function syncStageExecutionShellWrites(contextGraphPath: string, shellRoot: string, stage: NativeStageDefinition, writeArtifacts?: readonly string[]): void;
24
+ export declare function projectContextGraphReviewArtifactsState(contextGraphPath: string, shellRoot: string, schema: BuildPlanContextSchema): void;
25
+ export declare function projectContextGraphRuntimeArtifacts(contextGraphPath: string, shellRoot: string): void;
@@ -0,0 +1,314 @@
1
+ import { copyFileSync, cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync, writeFileSync, } from "node:fs";
2
+ import { dirname, join, sep } from "node:path";
3
+ import { buildPlanPackagePathForContextGraph, contextGraphRuntimeRoot, } from "../../build/context-graph-paths.js";
4
+ import { ensureBuildPlanArtifactTargets } from "../../build/context-graph-schema.js";
5
+ import { listFilesRecursive } from "../../../contracts/utils/filesystem.js";
6
+ import { CONTEXT_INTERFACE_FILE as BUILD_PLAN_SCHEMA_FILE, contextInterfaceArtifactAbsolutePath as contextGraphArtifactAbsolutePath, listContextInterfaceArtifacts, readContextInterface as readBuildPlanContextFile, resolveContextInterfacePath as resolveBuildPlanSchemaPath, } from "../../../build-plans/package/context-interface.js";
7
+ import { copyResolvedTree, linkPath, linkRelativePath, } from "./shell-fs.js";
8
+ import { describeShellArtifactAliasMountPath, normalizeArtifactRelativePath, relativePathEqualsOrWithin, shellArtifactAliasMountPath, shellRuntimePath, stageShellBuildPlanRoot, } from "./shell-paths.js";
9
+ export function loadContextGraphSchema(contextGraphPath) {
10
+ const buildPlanRoot = buildPlanPackagePathForContextGraph(contextGraphPath);
11
+ const schema = readBuildPlanContextFile(buildPlanRoot);
12
+ if (!schema) {
13
+ throw new Error(`Missing Build Plan schema at ${join(buildPlanRoot, BUILD_PLAN_SCHEMA_FILE)}`);
14
+ }
15
+ return schema;
16
+ }
17
+ export function artifactMap(schema) {
18
+ return new Map(listContextInterfaceArtifacts(schema).map((artifact) => [artifact.id, artifact]));
19
+ }
20
+ export function artifactOrThrow(artifacts, artifactId) {
21
+ const artifact = artifacts.get(artifactId);
22
+ if (!artifact) {
23
+ throw new Error(`Missing Build Plan schema Artifact "${artifactId}" for stage shell projection.`);
24
+ }
25
+ return artifact;
26
+ }
27
+ export function stageWriteArtifactSet(schema, stage) {
28
+ const artifacts = listContextInterfaceArtifacts(schema);
29
+ return new Set(stage.writes.filter((artifactId) => artifacts.some((artifact) => artifact.id === artifactId)));
30
+ }
31
+ export function stageMaterializedArtifactSet(schema, stage, writeArtifacts = []) {
32
+ const materialized = stageWriteArtifactSet(schema, stage);
33
+ for (const artifact of listContextInterfaceArtifacts(schema)) {
34
+ if (stage.reads.includes(artifact.id)) {
35
+ materialized.add(artifact.id);
36
+ }
37
+ }
38
+ for (const artifactPath of writeArtifacts) {
39
+ const normalizedArtifactPath = normalizeArtifactRelativePath(artifactPath);
40
+ if (normalizedArtifactPath.length === 0)
41
+ continue;
42
+ const owner = listContextInterfaceArtifacts(schema).find((artifact) => relativePathEqualsOrWithin(artifact.path, normalizedArtifactPath));
43
+ if (owner) {
44
+ materialized.add(owner.id);
45
+ }
46
+ }
47
+ return materialized;
48
+ }
49
+ function ensureShellLocalProjection(sourcePath, targetPath, artifact) {
50
+ if (existsSync(sourcePath)) {
51
+ copyResolvedTree({
52
+ sourcePath,
53
+ targetPath,
54
+ shellType: "stage-execution",
55
+ });
56
+ return;
57
+ }
58
+ if (artifact.kind === "file") {
59
+ mkdirSync(dirname(targetPath), { recursive: true });
60
+ return;
61
+ }
62
+ mkdirSync(targetPath, { recursive: true });
63
+ }
64
+ export function ensureBuildExecutionSurface(contextGraphPath) {
65
+ mkdirSync(contextGraphRuntimeRoot(contextGraphPath), { recursive: true });
66
+ mkdirSync(buildPlanPackagePathForContextGraph(contextGraphPath), { recursive: true });
67
+ const schema = loadContextGraphSchema(contextGraphPath);
68
+ ensureBuildPlanArtifactTargets(contextGraphPath, schema);
69
+ return schema;
70
+ }
71
+ export function readStageBuildPlanDoc(contextGraphPath, stage) {
72
+ const buildPlanRoot = buildPlanPackagePathForContextGraph(contextGraphPath);
73
+ const path = join(buildPlanRoot, "build", "stages", stage.skillDir, "SKILL.md");
74
+ if (!isRegularBuildPlanFile(buildPlanRoot, path))
75
+ return null;
76
+ return readFileSync(path, "utf8").trim();
77
+ }
78
+ export function stageBuildPlanDocsPath(contextGraphPath, stage) {
79
+ return join(buildPlanPackagePathForContextGraph(contextGraphPath), "build", "stages", stage.skillDir);
80
+ }
81
+ function isInsideRealRoot(realRoot, path) {
82
+ try {
83
+ const realPath = realpathSync(path);
84
+ return realPath === realRoot || realPath.startsWith(`${realRoot}${sep}`);
85
+ }
86
+ catch {
87
+ return false;
88
+ }
89
+ }
90
+ function isRegularBuildPlanFile(buildPlanRoot, path) {
91
+ if (!existsSync(path))
92
+ return false;
93
+ try {
94
+ return lstatSync(path).isFile() && isInsideRealRoot(realpathSync(buildPlanRoot), path);
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ function copyBuildPlanPath(buildPlanRoot, sourcePath, targetPath) {
101
+ if (!existsSync(sourcePath))
102
+ return;
103
+ const realRoot = realpathSync(buildPlanRoot);
104
+ if (!isInsideRealRoot(realRoot, sourcePath))
105
+ return;
106
+ const stat = lstatSync(sourcePath);
107
+ if (stat.isSymbolicLink())
108
+ return;
109
+ if (stat.isDirectory()) {
110
+ mkdirSync(targetPath, { recursive: true });
111
+ for (const entry of readdirSync(sourcePath)) {
112
+ copyBuildPlanPath(buildPlanRoot, join(sourcePath, entry), join(targetPath, entry));
113
+ }
114
+ return;
115
+ }
116
+ if (!stat.isFile())
117
+ return;
118
+ mkdirSync(dirname(targetPath), { recursive: true });
119
+ copyFileSync(sourcePath, targetPath);
120
+ }
121
+ export function projectBuildPlanMetadata(contextGraphPath, shellRoot, stage) {
122
+ const shellBuildPlanRoot = stageShellBuildPlanRoot(shellRoot);
123
+ mkdirSync(join(shellBuildPlanRoot, "build", "stages"), { recursive: true });
124
+ const contextGraphBuildPlanRoot = buildPlanPackagePathForContextGraph(contextGraphPath);
125
+ const buildPlanJsonPath = join(contextGraphBuildPlanRoot, "build-plan.json");
126
+ copyBuildPlanPath(contextGraphBuildPlanRoot, buildPlanJsonPath, join(shellBuildPlanRoot, "build-plan.json"));
127
+ const buildPlanSchemaPath = resolveBuildPlanSchemaPath(contextGraphBuildPlanRoot);
128
+ if (buildPlanSchemaPath) {
129
+ copyBuildPlanPath(contextGraphBuildPlanRoot, buildPlanSchemaPath, join(shellBuildPlanRoot, BUILD_PLAN_SCHEMA_FILE));
130
+ }
131
+ const readmePath = join(contextGraphBuildPlanRoot, "README.md");
132
+ copyBuildPlanPath(contextGraphBuildPlanRoot, readmePath, join(shellBuildPlanRoot, "README.md"));
133
+ const stageDocsPath = stageBuildPlanDocsPath(contextGraphPath, stage);
134
+ copyBuildPlanPath(contextGraphBuildPlanRoot, stageDocsPath, join(shellBuildPlanRoot, "build", "stages", stage.skillDir));
135
+ }
136
+ export function projectContextGraphSchemaArtifacts(contextGraphPath, shellRoot, schema, artifactIds, materializedArtifactIds, cleanMaterializedArtifactIds) {
137
+ const allowedArtifactIds = artifactIds ? new Set(artifactIds) : null;
138
+ for (const artifact of listContextInterfaceArtifacts(schema)) {
139
+ if (allowedArtifactIds && !allowedArtifactIds.has(artifact.id))
140
+ continue;
141
+ const sourcePath = contextGraphArtifactAbsolutePath(contextGraphPath, artifact);
142
+ const targetPath = join(shellRoot, artifact.path);
143
+ if (cleanMaterializedArtifactIds?.has(artifact.id)) {
144
+ rmSync(targetPath, { recursive: true, force: true });
145
+ if (artifact.kind === "file") {
146
+ mkdirSync(dirname(targetPath), { recursive: true });
147
+ }
148
+ else {
149
+ mkdirSync(targetPath, { recursive: true });
150
+ }
151
+ continue;
152
+ }
153
+ if (materializedArtifactIds?.has(artifact.id)) {
154
+ ensureShellLocalProjection(sourcePath, targetPath, artifact);
155
+ continue;
156
+ }
157
+ linkPath(sourcePath, targetPath);
158
+ }
159
+ }
160
+ export function buildStageArtifactMounts(_contextGraphPath, _shellRoot, stage, schema) {
161
+ const artifacts = artifactMap(schema);
162
+ const mountFor = (artifactId) => {
163
+ const artifact = artifactOrThrow(artifacts, artifactId);
164
+ return {
165
+ artifact_id: artifact.id,
166
+ artifact_path: artifact.path,
167
+ shell_root_path: artifact.path,
168
+ input_mount_path: stage.reads.includes(artifactId)
169
+ ? describeShellArtifactAliasMountPath(artifact, "inputs")
170
+ : null,
171
+ output_mount_path: stage.writes.includes(artifactId)
172
+ ? describeShellArtifactAliasMountPath(artifact, "outputs")
173
+ : null,
174
+ };
175
+ };
176
+ return {
177
+ reads: stage.reads.map(mountFor),
178
+ writes: stage.writes.map(mountFor),
179
+ };
180
+ }
181
+ export function projectStageArtifactMountAliases(shellRoot, stage, schema) {
182
+ const artifacts = artifactMap(schema);
183
+ for (const artifactId of new Set([...stage.reads, ...stage.writes])) {
184
+ const artifact = artifactOrThrow(artifacts, artifactId);
185
+ const targetPath = join(shellRoot, artifact.path);
186
+ if (stage.reads.includes(artifactId)) {
187
+ linkRelativePath(targetPath, shellArtifactAliasMountPath(shellRoot, artifact, "inputs"));
188
+ }
189
+ if (stage.writes.includes(artifactId)) {
190
+ linkRelativePath(targetPath, shellArtifactAliasMountPath(shellRoot, artifact, "outputs"));
191
+ }
192
+ }
193
+ }
194
+ export function writeExecutionShellPathsFile(shellRoot, buildPlanId, stage, mounts) {
195
+ const paths = {
196
+ kind: "interf-execution-shell",
197
+ version: 1,
198
+ build_plan: buildPlanId,
199
+ stage: stage.id,
200
+ reads: mounts.reads,
201
+ writes: mounts.writes,
202
+ };
203
+ writeFileSync(shellRuntimePath(shellRoot, "paths.json"), `${JSON.stringify(paths, null, 2)}\n`);
204
+ }
205
+ export function syncStageExecutionShellWrites(contextGraphPath, shellRoot, stage, writeArtifacts = []) {
206
+ const schema = ensureBuildExecutionSurface(contextGraphPath);
207
+ const artifacts = artifactMap(schema);
208
+ const stageWriteArtifacts = Array.from(stageWriteArtifactSet(schema, stage))
209
+ .map((artifactId) => artifactOrThrow(artifacts, artifactId));
210
+ for (const artifact of stageWriteArtifacts) {
211
+ const canonicalShellArtifactPath = join(shellRoot, artifact.path);
212
+ const outputAliasPath = shellArtifactAliasMountPath(shellRoot, artifact, "outputs");
213
+ const shellArtifactPath = artifact.kind === "file" &&
214
+ existsSync(outputAliasPath) &&
215
+ !lstatSync(outputAliasPath).isSymbolicLink()
216
+ ? outputAliasPath
217
+ : canonicalShellArtifactPath;
218
+ if (!existsSync(shellArtifactPath))
219
+ continue;
220
+ const shellArtifactStat = lstatSync(shellArtifactPath);
221
+ if (shellArtifactStat.isSymbolicLink())
222
+ continue;
223
+ const contextGraphArtifactPath = contextGraphArtifactAbsolutePath(contextGraphPath, artifact);
224
+ if (shellArtifactStat.isDirectory()) {
225
+ const shellArtifactFiles = listFilesRecursive(shellArtifactPath);
226
+ const contextGraphArtifactFiles = existsSync(contextGraphArtifactPath)
227
+ ? listFilesRecursive(contextGraphArtifactPath)
228
+ : [];
229
+ if (shellArtifactFiles.length === 0 && contextGraphArtifactFiles.length > 0) {
230
+ continue;
231
+ }
232
+ rmSync(contextGraphArtifactPath, { recursive: true, force: true });
233
+ mkdirSync(dirname(contextGraphArtifactPath), { recursive: true });
234
+ cpSync(shellArtifactPath, contextGraphArtifactPath, {
235
+ recursive: true,
236
+ force: true,
237
+ });
238
+ continue;
239
+ }
240
+ mkdirSync(dirname(contextGraphArtifactPath), { recursive: true });
241
+ copyFileSync(shellArtifactPath, contextGraphArtifactPath);
242
+ }
243
+ for (const artifactPath of writeArtifacts) {
244
+ const normalizedArtifactPath = normalizeArtifactRelativePath(artifactPath);
245
+ if (normalizedArtifactPath.length === 0 ||
246
+ stageWriteArtifacts.some((artifact) => relativePathEqualsOrWithin(artifact.path, normalizedArtifactPath))) {
247
+ continue;
248
+ }
249
+ const shellArtifactPath = join(shellRoot, normalizedArtifactPath);
250
+ if (!existsSync(shellArtifactPath))
251
+ continue;
252
+ const contextGraphArtifactPath = join(contextGraphPath, normalizedArtifactPath);
253
+ const shellArtifactStat = lstatSync(shellArtifactPath);
254
+ if (shellArtifactStat.isSymbolicLink())
255
+ continue;
256
+ if (shellArtifactStat.isDirectory()) {
257
+ rmSync(contextGraphArtifactPath, { recursive: true, force: true });
258
+ mkdirSync(dirname(contextGraphArtifactPath), { recursive: true });
259
+ cpSync(shellArtifactPath, contextGraphArtifactPath, {
260
+ recursive: true,
261
+ force: true,
262
+ });
263
+ continue;
264
+ }
265
+ mkdirSync(dirname(contextGraphArtifactPath), { recursive: true });
266
+ copyFileSync(shellArtifactPath, contextGraphArtifactPath);
267
+ }
268
+ }
269
+ export function projectContextGraphReviewArtifactsState(contextGraphPath, shellRoot, schema) {
270
+ const contextGraphViewRoot = join(shellRoot, "artifacts", "context-graph-view");
271
+ mkdirSync(contextGraphViewRoot, { recursive: true });
272
+ for (const artifact of listContextInterfaceArtifacts(schema)) {
273
+ if (artifact.path === "source-files")
274
+ continue;
275
+ const sourcePath = contextGraphArtifactAbsolutePath(contextGraphPath, artifact);
276
+ if (!existsSync(sourcePath))
277
+ continue;
278
+ copyResolvedTree({
279
+ sourcePath,
280
+ targetPath: join(contextGraphViewRoot, artifact.path),
281
+ shellType: "build-plan-improvement",
282
+ });
283
+ }
284
+ }
285
+ export function projectContextGraphRuntimeArtifacts(contextGraphPath, shellRoot) {
286
+ const runtimeTarget = join(shellRoot, "artifacts", "context-graph-runtime");
287
+ mkdirSync(runtimeTarget, { recursive: true });
288
+ const runtimeRoot = contextGraphRuntimeRoot(contextGraphPath);
289
+ const artifactNames = [
290
+ "run.json",
291
+ "run-history.jsonl",
292
+ "state.json",
293
+ "health.json",
294
+ "view-spec.json",
295
+ "source-manifest.json",
296
+ "source-manifest.audit.json",
297
+ "source-files.json",
298
+ "source-state.json",
299
+ "stages",
300
+ "logs",
301
+ ];
302
+ for (const artifactName of artifactNames) {
303
+ copyIfExistsLocal(join(runtimeRoot, artifactName), join(runtimeTarget, artifactName));
304
+ }
305
+ }
306
+ function copyIfExistsLocal(sourcePath, targetPath) {
307
+ if (!existsSync(sourcePath))
308
+ return;
309
+ copyResolvedTree({
310
+ sourcePath,
311
+ targetPath,
312
+ shellType: "build-plan-improvement",
313
+ });
314
+ }