@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,388 @@
1
+ import { opendirSync, realpathSync, statSync } from "node:fs";
2
+ import { extname, join } from "node:path";
3
+ /**
4
+ * Cheap, contents-free Source scan for Build Plan authoring.
5
+ *
6
+ * The Build Plan authoring agent locks a plan skeleton before reading any
7
+ * Source file. Without an inventory it defaults to a generic 4-stage plan
8
+ * for every Source. This scan gives the draft agent a real, task-agnostic
9
+ * map of the Source up front so it can shape stages to what is actually
10
+ * there.
11
+ *
12
+ * Guarantees:
13
+ * - Never opens or reads file contents. It only lists directory entries and
14
+ * parses names/extensions. Source files stay read-only and unread.
15
+ * - Generic: no intent keywords, no task taxonomy, no per-Project answers.
16
+ * It works for a folder of calls, PDFs, a codebase, or anything else.
17
+ * - O(file-listing) with hard caps so a pathological tree (deep nesting,
18
+ * huge fan-out) can never turn the scan into a recursion or time bomb.
19
+ */
20
+ const MAX_ENTRIES = 20000;
21
+ const MAX_DEPTH = 6;
22
+ const MAX_FOLDER_ITEMS = 40;
23
+ const MAX_SAMPLE_NAMES = 6;
24
+ const MAX_OBSERVATIONS = 24;
25
+ const IGNORED_ENTRY_NAMES = new Set([
26
+ ".git",
27
+ ".interf",
28
+ "node_modules",
29
+ ".DS_Store",
30
+ ".cache",
31
+ "__pycache__",
32
+ ".venv",
33
+ ".svn",
34
+ ".hg",
35
+ ]);
36
+ // Canonical, task-agnostic file kinds. Mirrors the Source Manifest kind
37
+ // vocabulary (pdf, document, spreadsheet, presentation, image, text, other)
38
+ // plus coarse buckets that are useful for plan shaping (code, data, audio,
39
+ // video, archive). No kind is intent-specific.
40
+ function classifyKind(extension) {
41
+ const ext = extension.replace(/^\./, "").toLowerCase();
42
+ if (!ext)
43
+ return "no-extension";
44
+ if (ext === "pdf")
45
+ return "pdf";
46
+ if (["doc", "docx", "rtf", "odt", "pages"].includes(ext))
47
+ return "document";
48
+ if (["csv", "tsv", "xls", "xlsx", "ods", "numbers", "parquet"].includes(ext)) {
49
+ return "spreadsheet";
50
+ }
51
+ if (["ppt", "pptx", "odp", "key"].includes(ext))
52
+ return "presentation";
53
+ if (["jpg", "jpeg", "png", "gif", "webp", "svg", "heic", "tiff", "bmp"].includes(ext)) {
54
+ return "image";
55
+ }
56
+ if (["mp3", "wav", "m4a", "aac", "flac", "ogg", "aiff"].includes(ext))
57
+ return "audio";
58
+ if (["mp4", "mov", "avi", "mkv", "webm", "m4v"].includes(ext))
59
+ return "video";
60
+ if (["zip", "tar", "gz", "tgz", "bz2", "7z", "rar"].includes(ext))
61
+ return "archive";
62
+ if (["md", "markdown", "txt", "text"].includes(ext))
63
+ return "text";
64
+ if (["json", "ndjson", "yaml", "yml", "xml", "toml", "ini"].includes(ext))
65
+ return "data";
66
+ if ([
67
+ "ts", "tsx", "js", "jsx", "mjs", "cjs", "py", "rb", "go", "rs", "java",
68
+ "kt", "c", "h", "cpp", "hpp", "cs", "php", "swift", "sh", "sql", "html",
69
+ "css", "scss", "vue", "svelte",
70
+ ].includes(ext)) {
71
+ return "code";
72
+ }
73
+ return "other";
74
+ }
75
+ // Bare year (2019), year-month (2024-03, 2024_03), or full date
76
+ // (2024-03-15, 20240315) appearing in a filename. Filename-only; we never
77
+ // read file contents to find dates.
78
+ const DATE_TOKEN = /\b(19|20)\d{2}([-_./]?(0[1-9]|1[0-2]))?([-_./]?(0[1-9]|[12]\d|3[01]))?\b/g;
79
+ function extractDateTokens(name) {
80
+ const matches = name.match(DATE_TOKEN);
81
+ if (!matches)
82
+ return [];
83
+ return matches.filter((token) => /^(19|20)\d{2}/.test(token));
84
+ }
85
+ function makeFolder() {
86
+ return { fileCount: 0, kinds: new Map(), sampleNames: [] };
87
+ }
88
+ function recordFile(folder, name) {
89
+ folder.fileCount += 1;
90
+ const kind = classifyKind(extname(name));
91
+ folder.kinds.set(kind, (folder.kinds.get(kind) ?? 0) + 1);
92
+ if (folder.sampleNames.length < MAX_SAMPLE_NAMES) {
93
+ folder.sampleNames.push(name);
94
+ }
95
+ }
96
+ function kindSummary(kinds) {
97
+ return [...kinds.entries()]
98
+ .sort((a, b) => b[1] - a[1])
99
+ .map(([kind, count]) => `${count} ${kind}`)
100
+ .join(", ");
101
+ }
102
+ /**
103
+ * Resolve a directory entry to a coarse type, following symlinks.
104
+ *
105
+ * `Dirent` reports the type of the entry itself, so a symlink is neither a
106
+ * file nor a directory and would be dropped. The Source can legitimately be
107
+ * (or contain) symlinked files and dirs — mirroring the repo walker in
108
+ * contracts/utils/filesystem.ts, we stat the link target and classify the
109
+ * entry as the target's type. Broken or inaccessible links resolve to
110
+ * "other" and are skipped. We never read file contents here.
111
+ */
112
+ function resolveEntryType(fullPath, isSymlink, isDir, isFile) {
113
+ if (isDir)
114
+ return { type: "dir", realDir: null };
115
+ if (isFile)
116
+ return { type: "file", realDir: null };
117
+ if (!isSymlink)
118
+ return { type: "other", realDir: null };
119
+ // Symlink: stat (follows the link) to learn the target's real type.
120
+ try {
121
+ const target = statSync(fullPath);
122
+ if (target.isDirectory()) {
123
+ // Need the canonical target path to guard against symlink cycles.
124
+ let realDir = null;
125
+ try {
126
+ realDir = realpathSync(fullPath);
127
+ }
128
+ catch {
129
+ realDir = null;
130
+ }
131
+ return { type: "dir", realDir };
132
+ }
133
+ if (target.isFile())
134
+ return { type: "file", realDir: null };
135
+ return { type: "other", realDir: null };
136
+ }
137
+ catch {
138
+ // Broken or inaccessible link.
139
+ return { type: "other", realDir: null };
140
+ }
141
+ }
142
+ /**
143
+ * Walk the Source tree shallowly and group counts by the top-level folder
144
+ * (files directly under the root group under "."). Bounded by MAX_ENTRIES
145
+ * and MAX_DEPTH so the cost is always O(file-listing) with a ceiling.
146
+ *
147
+ * Directories are streamed via `opendirSync` and read one entry at a time so
148
+ * a pathological directory with hundreds of thousands of entries can never be
149
+ * materialized into a single array — the MAX_ENTRIES ceiling is enforced
150
+ * while iterating, and iteration stops the moment it is hit. Symlinked files
151
+ * and directories are followed (with cycle protection) so a Source built from
152
+ * symlinks is counted instead of silently yielding an empty inventory.
153
+ */
154
+ function scan(sourceFolderPath) {
155
+ const folders = new Map();
156
+ const totalKinds = new Map();
157
+ const dateTokens = [];
158
+ let totalFiles = 0;
159
+ let visited = 0;
160
+ let truncated = false;
161
+ // A read failure on the Source root itself (permission denied, path is a
162
+ // file, etc.) means a real Source may exist but Interf could not enumerate
163
+ // it. That is distinct from an empty-but-readable Source and must not be
164
+ // silently flattened into the same "no inventory" result. ENOENT (the root
165
+ // is simply not there) is treated as empty, not as a read failure.
166
+ let rootReadError = null;
167
+ // Canonical paths of directories already walked. Following symlinked dirs
168
+ // can introduce cycles; this set keeps the walk finite. Seeded lazily with
169
+ // each directory's realpath as it is opened.
170
+ const visitedDirs = new Set();
171
+ // Stack-based shallow walk. Each entry carries the absolute dir path, its
172
+ // depth, and the top-level group it rolls up into.
173
+ const stack = [
174
+ { dir: sourceFolderPath, depth: 0, group: "." },
175
+ ];
176
+ while (stack.length > 0) {
177
+ if (visited >= MAX_ENTRIES) {
178
+ truncated = true;
179
+ break;
180
+ }
181
+ const { dir, depth, group } = stack.pop();
182
+ // Cycle guard: skip a directory whose canonical path we have already
183
+ // walked (reached again through a symlink).
184
+ let canonicalDir;
185
+ try {
186
+ canonicalDir = realpathSync(dir);
187
+ }
188
+ catch {
189
+ canonicalDir = dir;
190
+ }
191
+ if (visitedDirs.has(canonicalDir))
192
+ continue;
193
+ visitedDirs.add(canonicalDir);
194
+ // Stream the directory: opendirSync yields one Dirent at a time so a
195
+ // directory with 100k+ entries is never materialized as an array. We
196
+ // stop reading as soon as the MAX_ENTRIES budget is exhausted.
197
+ let handle;
198
+ try {
199
+ handle = opendirSync(dir);
200
+ }
201
+ catch (error) {
202
+ // A failure to open the Source root is a read failure we must surface,
203
+ // not swallow — otherwise an unreadable Source produces the same empty
204
+ // inventory as a genuinely empty one and the draft silently goes
205
+ // generic. ENOENT (root absent) is left as the empty/null case so an
206
+ // unbound or missing Source still degrades quietly. Failures on nested
207
+ // directories during the walk stay tolerated: they yield a partial
208
+ // inventory, which the truncation note already covers.
209
+ if (depth === 0) {
210
+ const errno = error;
211
+ if (errno?.code !== "ENOENT")
212
+ rootReadError = errno;
213
+ }
214
+ continue;
215
+ }
216
+ try {
217
+ let entry = handle.readSync();
218
+ while (entry !== null) {
219
+ if (visited >= MAX_ENTRIES) {
220
+ truncated = true;
221
+ break;
222
+ }
223
+ const name = entry.name;
224
+ if (IGNORED_ENTRY_NAMES.has(name) || name.startsWith(".")) {
225
+ entry = handle.readSync();
226
+ continue;
227
+ }
228
+ visited += 1;
229
+ const resolved = resolveEntryType(join(dir, name), entry.isSymbolicLink(), entry.isDirectory(), entry.isFile());
230
+ if (resolved.type === "dir") {
231
+ // At the root, each subfolder becomes its own top-level group.
232
+ const childGroup = depth === 0 ? name : group;
233
+ if (!folders.has(childGroup))
234
+ folders.set(childGroup, makeFolder());
235
+ if (depth + 1 <= MAX_DEPTH) {
236
+ if (!(resolved.realDir !== null && visitedDirs.has(resolved.realDir))) {
237
+ stack.push({ dir: join(dir, name), depth: depth + 1, group: childGroup });
238
+ }
239
+ }
240
+ else {
241
+ truncated = true;
242
+ }
243
+ }
244
+ else if (resolved.type === "file") {
245
+ const folder = folders.get(group) ?? makeFolder();
246
+ if (!folders.has(group))
247
+ folders.set(group, folder);
248
+ recordFile(folder, name);
249
+ totalFiles += 1;
250
+ const kind = classifyKind(extname(name));
251
+ totalKinds.set(kind, (totalKinds.get(kind) ?? 0) + 1);
252
+ for (const token of extractDateTokens(name))
253
+ dateTokens.push(token);
254
+ }
255
+ entry = handle.readSync();
256
+ }
257
+ }
258
+ finally {
259
+ handle.closeSync();
260
+ }
261
+ }
262
+ return { folders, totalFiles, totalKinds, dateTokens, truncated, rootReadError };
263
+ }
264
+ function dateRange(tokens) {
265
+ if (tokens.length === 0)
266
+ return null;
267
+ // Compare on a normalized digits-only key so 2024-03 sorts against
268
+ // 20240315 consistently; report the original tokens for the bounds.
269
+ // Drop any token whose normalized key is not a YYYY[MMDD] digit key — a
270
+ // malformed or separator-only token must never become a reported date
271
+ // bound, which would feed the draft a misleading "Filenames span X to Y".
272
+ const keyed = tokens
273
+ .map((token) => ({
274
+ token,
275
+ key: token.replace(/[-_./]/g, "").padEnd(8, "0"),
276
+ }))
277
+ .filter(({ key }) => /^(19|20)\d{6}$/.test(key));
278
+ if (keyed.length === 0)
279
+ return null;
280
+ keyed.sort((a, b) => a.key.localeCompare(b.key));
281
+ return { min: keyed[0].token, max: keyed[keyed.length - 1].token };
282
+ }
283
+ /**
284
+ * Build the SourceContext returned when the Source root could not be read.
285
+ *
286
+ * A read failure is NOT the empty/null case: returning null here would let the
287
+ * draft go generic as if the Source had no files, hiding a real Source that
288
+ * Interf simply could not enumerate (permission denied, path is a file, etc.).
289
+ * Instead we surface a populated SourceContext whose limitations make the
290
+ * failure explicit, so the authoring agent sees it and does not lock a generic
291
+ * plan on a false "empty Source" reading. No file is ever opened or read.
292
+ */
293
+ function readErrorContext(sourceFolderPath, error) {
294
+ const code = error?.code ? ` (${error.code})` : "";
295
+ return {
296
+ summary: "Contents-free Source scan could not read the Source root" +
297
+ `${code}; no inventory was produced.`,
298
+ items: [],
299
+ observations: [
300
+ `Interf could not enumerate the Source at ${sourceFolderPath}${code}.`,
301
+ ],
302
+ limitations: [
303
+ "Interf could not read the Source root, so this is NOT an empty Source. " +
304
+ "Do not lock a generic plan: inspect the Source through your own tools " +
305
+ "and confirm access before shaping stages.",
306
+ ],
307
+ };
308
+ }
309
+ /**
310
+ * Produce a populated SourceContext for the authoring agent from a cheap,
311
+ * contents-free scan. Returns null when the Source has no readable files so
312
+ * callers can fall back to the existing null (no fabricated inventory). A
313
+ * genuine read failure on the Source root returns an explicit read-error
314
+ * SourceContext instead, so an unreadable Source never silently degrades into
315
+ * a generic plan.
316
+ */
317
+ export function scanSourceContext(sourceFolderPath) {
318
+ let result;
319
+ try {
320
+ result = scan(sourceFolderPath);
321
+ }
322
+ catch (error) {
323
+ // scan() handles its own root-open failure, so a throw here is unexpected.
324
+ // Classify it the same way: a non-ENOENT errno is a read failure that must
325
+ // be surfaced, not flattened into the empty/null result; ENOENT (or a
326
+ // non-errno) stays the quiet empty case.
327
+ const errno = error;
328
+ if (errno?.code && errno.code !== "ENOENT") {
329
+ return readErrorContext(sourceFolderPath, errno);
330
+ }
331
+ return null;
332
+ }
333
+ // A read failure on the Source root with nothing enumerated is distinct from
334
+ // a genuinely empty Source: surface it loudly so the draft never goes generic
335
+ // on a false "empty" reading.
336
+ if (result.totalFiles === 0 && result.rootReadError) {
337
+ return readErrorContext(sourceFolderPath, result.rootReadError);
338
+ }
339
+ if (result.totalFiles === 0)
340
+ return null;
341
+ const items = [];
342
+ const sortedFolders = [...result.folders.entries()]
343
+ .filter(([, folder]) => folder.fileCount > 0)
344
+ .sort((a, b) => b[1].fileCount - a[1].fileCount)
345
+ .slice(0, MAX_FOLDER_ITEMS);
346
+ for (const [folderName, folder] of sortedFolders) {
347
+ const sample = folder.sampleNames.join(", ");
348
+ const noteParts = [
349
+ `${folder.fileCount} file(s)`,
350
+ kindSummary(folder.kinds),
351
+ ].filter((part) => part.length > 0);
352
+ if (sample)
353
+ noteParts.push(`e.g. ${sample}`);
354
+ items.push({
355
+ name: folderName === "." ? "(root)" : folderName,
356
+ path: folderName === "." ? "." : folderName,
357
+ kind: "folder",
358
+ note: noteParts.join(" — "),
359
+ });
360
+ }
361
+ const observations = [];
362
+ observations.push(`${result.totalFiles} file(s) across ${result.folders.size} top-level group(s).`);
363
+ const totalKindSummary = kindSummary(result.totalKinds);
364
+ if (totalKindSummary) {
365
+ observations.push(`File kinds by extension: ${totalKindSummary}.`);
366
+ }
367
+ const range = dateRange(result.dateTokens);
368
+ if (range) {
369
+ observations.push(range.min === range.max
370
+ ? `Filenames reference the period ${range.min}.`
371
+ : `Filenames span ${range.min} to ${range.max} (parsed from names, not contents).`);
372
+ }
373
+ const limitations = [
374
+ "Inventory is filename- and extension-only; Interf did not open or read any Source file. Inspect the Source through your own tools before locking stages.",
375
+ ];
376
+ if (result.truncated) {
377
+ limitations.push("Scan was capped for cost; some files or deep folders were not enumerated. Treat counts as a lower bound.");
378
+ }
379
+ return {
380
+ summary: `Contents-free Source scan: ${result.totalFiles} file(s) in ` +
381
+ `${result.folders.size} top-level group(s)` +
382
+ (totalKindSummary ? ` (${totalKindSummary})` : "") +
383
+ ".",
384
+ items,
385
+ observations: observations.slice(0, MAX_OBSERVATIONS),
386
+ limitations,
387
+ };
388
+ }
@@ -1,3 +1,4 @@
1
+ import { pickString } from "./string-utils.js";
1
2
  export function extractAgentFailureStatus(event) {
2
3
  const candidates = [];
3
4
  const directMessage = pickString(event.message) ??
@@ -42,17 +43,3 @@ export function classifyTerminalVisibleStatus(text) {
42
43
  export function hasAgentStalled(lastActivityAt, now, stallTimeoutMs) {
43
44
  return typeof stallTimeoutMs === "number" && stallTimeoutMs > 0 && now - lastActivityAt >= stallTimeoutMs;
44
45
  }
45
- function pickString(value) {
46
- if (typeof value === "string")
47
- return value;
48
- if (!Array.isArray(value))
49
- return null;
50
- for (const entry of value) {
51
- if (typeof entry === "string")
52
- return entry;
53
- if (entry && typeof entry === "object" && "text" in entry && typeof entry.text === "string") {
54
- return entry.text;
55
- }
56
- }
57
- return null;
58
- }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Pick the first usable string out of a value that may be a bare string or an
3
+ * array of strings / `{ text }` content blocks. Agent event payloads carry
4
+ * message/text/content/output/summary fields in either shape across executors,
5
+ * so status-determination and render paths both reach for this.
6
+ */
7
+ export declare function pickString(value: unknown): string | null;
8
+ /**
9
+ * Pull the primary path-like field out of a tool-use `input` record for display
10
+ * summaries. Tools name the same concept differently — `file_path` (Read/Write/
11
+ * Edit), `path`, `pattern` (Glob/Grep), `command` (Bash), `notebook_path`
12
+ * (notebook tools) — so every render site collapses them with the same
13
+ * precedence. Returns an empty string when no field is present, matching the
14
+ * `?? ""` default the call sites relied on.
15
+ */
16
+ export declare function extractInputPath(input: Record<string, unknown>): string;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Pick the first usable string out of a value that may be a bare string or an
3
+ * array of strings / `{ text }` content blocks. Agent event payloads carry
4
+ * message/text/content/output/summary fields in either shape across executors,
5
+ * so status-determination and render paths both reach for this.
6
+ */
7
+ export function pickString(value) {
8
+ if (typeof value === "string")
9
+ return value;
10
+ if (!Array.isArray(value))
11
+ return null;
12
+ for (const entry of value) {
13
+ if (typeof entry === "string")
14
+ return entry;
15
+ if (entry && typeof entry === "object" && "text" in entry && typeof entry.text === "string") {
16
+ return entry.text;
17
+ }
18
+ }
19
+ return null;
20
+ }
21
+ /**
22
+ * Pull the primary path-like field out of a tool-use `input` record for display
23
+ * summaries. Tools name the same concept differently — `file_path` (Read/Write/
24
+ * Edit), `path`, `pattern` (Glob/Grep), `command` (Bash), `notebook_path`
25
+ * (notebook tools) — so every render site collapses them with the same
26
+ * precedence. Returns an empty string when no field is present, matching the
27
+ * `?? ""` default the call sites relied on.
28
+ */
29
+ export function extractInputPath(input) {
30
+ return (input.file_path ??
31
+ input.path ??
32
+ input.pattern ??
33
+ input.command ??
34
+ input.notebook_path ??
35
+ "");
36
+ }
@@ -25,6 +25,7 @@ export interface AgentAutomationReadiness {
25
25
  export interface SpawnAgentOptions {
26
26
  eventLogPath?: string | null;
27
27
  statusLogPath?: string | null;
28
+ reasoningLogPath?: string | null;
28
29
  executionProfile?: AgentExecutionProfile;
29
30
  completionCheck?: (() => boolean) | null;
30
31
  onStatus?: (line: string) => void;
@@ -1,5 +1,11 @@
1
- import { type InterfUserConfig } from "./schema.js";
2
- export type { InterfUserConfig } from "./schema.js";
1
+ import { z } from "zod";
2
+ export declare const InterfUserConfigSchema: z.ZodObject<{
3
+ agent: z.ZodString;
4
+ agentCommand: z.ZodString;
5
+ skillsInstalled: z.ZodBoolean;
6
+ initialized: z.ZodString;
7
+ }, z.core.$strip>;
8
+ export type InterfUserConfig = z.infer<typeof InterfUserConfigSchema>;
3
9
  /** `~/.interf/` (overridable via `INTERF_USER_HOME`). */
4
10
  export declare function interfHome(): string;
5
11
  /** `~/.interf/config.json` — local executor preferences. */
@@ -1,8 +1,14 @@
1
1
  import { existsSync, mkdirSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
+ import { z } from "zod";
3
4
  import { readJsonFileWithSchema } from "../../../contracts/utils/parse.js";
4
- import { interfHomeRoot } from "../../../contracts/lib/preparation-paths.js";
5
- import { InterfUserConfigSchema } from "./schema.js";
5
+ import { interfHomeRoot } from "../../../contracts/lib/project-paths.js";
6
+ export const InterfUserConfigSchema = z.object({
7
+ agent: z.string(),
8
+ agentCommand: z.string(),
9
+ skillsInstalled: z.boolean(),
10
+ initialized: z.string(),
11
+ });
6
12
  /** `~/.interf/` (overridable via `INTERF_USER_HOME`). */
7
13
  export function interfHome() {
8
14
  return interfHomeRoot();
@@ -0,0 +1,13 @@
1
+ import type { AgentProvider } from "./types.js";
2
+ /**
3
+ * Claude Code provider.
4
+ *
5
+ * Configuration follows Anthropic's third-party integration spec:
6
+ * https://code.claude.com/docs/en/third-party-integrations
7
+ *
8
+ * The user-facing model knob is the alias (`opus`, `sonnet`, `haiku`)
9
+ * which Anthropic resolves server-side to the current pinned version.
10
+ * Hosts that need to pin a specific version do it via the
11
+ * `ANTHROPIC_DEFAULT_*_MODEL` env vars supplied by the user.
12
+ */
13
+ export declare const claudeCodeProvider: AgentProvider;
@@ -0,0 +1,45 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ /**
4
+ * Claude Code provider.
5
+ *
6
+ * Configuration follows Anthropic's third-party integration spec:
7
+ * https://code.claude.com/docs/en/third-party-integrations
8
+ *
9
+ * The user-facing model knob is the alias (`opus`, `sonnet`, `haiku`)
10
+ * which Anthropic resolves server-side to the current pinned version.
11
+ * Hosts that need to pin a specific version do it via the
12
+ * `ANTHROPIC_DEFAULT_*_MODEL` env vars supplied by the user.
13
+ */
14
+ export const claudeCodeProvider = {
15
+ name: "claude-code",
16
+ displayName: "Claude Code",
17
+ command: "claude",
18
+ homeDir: join(homedir(), ".claude"),
19
+ skillsDir: join(homedir(), ".claude", "skills"),
20
+ supportsAutomatedRuns: true,
21
+ defaultModel: "claude-sonnet-4-6",
22
+ defaultEffort: "low",
23
+ noiseFilters: [],
24
+ buildArgs(prompt, profile) {
25
+ const args = [
26
+ "-p",
27
+ prompt,
28
+ "--output-format",
29
+ "stream-json",
30
+ "--verbose",
31
+ "--allowedTools",
32
+ "Read,Write,Edit,Bash,Grep,Glob,Agent",
33
+ ];
34
+ if (profile.model) {
35
+ args.push("--model", profile.model);
36
+ }
37
+ if (profile.effort) {
38
+ args.push("--effort", profile.effort);
39
+ }
40
+ return args;
41
+ },
42
+ buildEnv(baseEnv) {
43
+ return { ...baseEnv };
44
+ },
45
+ };
@@ -0,0 +1,17 @@
1
+ import type { AgentProvider } from "./types.js";
2
+ /**
3
+ * Codex provider.
4
+ *
5
+ * Reasoning effort is passed via the documented config override
6
+ * (`-c model_reasoning_effort=...`) rather than a flag.
7
+ *
8
+ * The `SHELL` env var is stripped from the spawn so Codex picks a
9
+ * sandbox-safe default shell instead of inheriting the host login shell.
10
+ *
11
+ * Two stderr noise lines are expected on every run and must not be
12
+ * treated as preflight failures.
13
+ *
14
+ * Codex preflight is retried when it reports transient session-record
15
+ * errors that resolve on a second attempt.
16
+ */
17
+ export declare const codexProvider: AgentProvider;
@@ -0,0 +1,66 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ const SANDBOX_MODE = `work${"space-write"}`;
4
+ /**
5
+ * Codex provider.
6
+ *
7
+ * Reasoning effort is passed via the documented config override
8
+ * (`-c model_reasoning_effort=...`) rather than a flag.
9
+ *
10
+ * The `SHELL` env var is stripped from the spawn so Codex picks a
11
+ * sandbox-safe default shell instead of inheriting the host login shell.
12
+ *
13
+ * Two stderr noise lines are expected on every run and must not be
14
+ * treated as preflight failures.
15
+ *
16
+ * Codex preflight is retried when it reports transient session-record
17
+ * errors that resolve on a second attempt.
18
+ */
19
+ export const codexProvider = {
20
+ name: "codex",
21
+ displayName: "Codex",
22
+ command: "codex",
23
+ homeDir: join(homedir(), ".codex"),
24
+ skillsDir: join(homedir(), ".codex", "skills"),
25
+ supportsAutomatedRuns: true,
26
+ defaultModel: "gpt-5.3-codex",
27
+ defaultEffort: "high",
28
+ noiseFilters: [
29
+ /codex_core_skills::loader: failed to stat skills entry .*\/interf-[^ ]+ \(symlink\): No such file or directory/,
30
+ /codex_core::codex: failed to load skill .*\/gstack\/SKILL\.md: invalid description: exceeds maximum length of 1024 characters/,
31
+ ],
32
+ buildArgs(prompt, profile) {
33
+ const args = [
34
+ "exec",
35
+ "--json",
36
+ "-s",
37
+ SANDBOX_MODE,
38
+ "--skip-git-repo-check",
39
+ "-c",
40
+ 'service_tier="fast"',
41
+ ];
42
+ if (profile.model) {
43
+ args.push("--model", profile.model);
44
+ }
45
+ if (profile.profile) {
46
+ args.push("--profile", profile.profile);
47
+ }
48
+ if (profile.effort) {
49
+ args.push("-c", `model_reasoning_effort=${JSON.stringify(profile.effort)}`);
50
+ }
51
+ args.push(prompt);
52
+ return args;
53
+ },
54
+ buildEnv(baseEnv) {
55
+ const env = { ...baseEnv };
56
+ delete env.SHELL;
57
+ return env;
58
+ },
59
+ isTransientPreflightFailure(stderr, errorMessage) {
60
+ const text = `${errorMessage}\n${stderr}`;
61
+ if (/usage limit/i.test(text))
62
+ return false;
63
+ return /failed to record rollout items/i.test(text)
64
+ || /thread\s+[0-9a-f-]+\s+not found/i.test(text);
65
+ },
66
+ };
@@ -0,0 +1,9 @@
1
+ import type { AgentProvider } from "./types.js";
2
+ /**
3
+ * Cursor provider.
4
+ *
5
+ * Cursor is detected for `interf init` so the listing shows it, but
6
+ * Interf cannot drive automated Build runs through Cursor today.
7
+ * `buildArgs` therefore throws.
8
+ */
9
+ export declare const cursorProvider: AgentProvider;