@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,189 @@
1
+ /**
2
+ * PKCE auth flow orchestration.
3
+ *
4
+ * Drives the public-client OAuth dance: spawns a loopback HTTP server on
5
+ * 127.0.0.1, asks WorkOS for an authorize URL bound to that server's
6
+ * dynamic port, opens the user's browser at AuthKit, and waits for the
7
+ * callback. On callback, the returned `state` is checked against the SDK-
8
+ * generated value and the `code` is exchanged for `{ user, accessToken,
9
+ * refreshToken }` via `authenticateWithCode` with the stored `codeVerifier`.
10
+ *
11
+ * No part of this module touches `~/.interf/auth/*`. Callers (CLI today,
12
+ * desktop shell later) take the returned tokens and decide what to persist.
13
+ *
14
+ * The `transport` seam lets tests stand in for the WorkOS SDK without env
15
+ * config or live HTTP. Production callers use `defaultPkceTransport()`.
16
+ */
17
+ import { createServer } from "node:http";
18
+ import { URL } from "node:url";
19
+ import open from "open";
20
+ import { getWorkOS, workosConfig } from "./workos-client.js";
21
+ /** Five minutes — generous enough for SSO redirects, short enough to bound
22
+ * a hung browser session. Tests pass a tighter timeout. */
23
+ const DEFAULT_CALLBACK_TIMEOUT_MS = 5 * 60 * 1000;
24
+ const DEFAULT_CALLBACK_HOST = "127.0.0.1";
25
+ export class AuthFlowError extends Error {
26
+ constructor(message) {
27
+ super(message);
28
+ this.name = "AuthFlowError";
29
+ }
30
+ }
31
+ /**
32
+ * Default transport — proxies to the real WorkOS SDK. Lazy-loads the
33
+ * singleton client on first call so importing this module does not require
34
+ * env config.
35
+ */
36
+ export function defaultPkceTransport() {
37
+ return {
38
+ getAuthorizationUrlWithPKCE: (input) => getWorkOS().userManagement.getAuthorizationUrlWithPKCE(input),
39
+ authenticateWithCode: (input) => getWorkOS().userManagement.authenticateWithCode(input),
40
+ };
41
+ }
42
+ /**
43
+ * Run the full PKCE flow end-to-end. Returns the WorkOS tokens + user.
44
+ * Always closes the loopback server before returning, even on error.
45
+ */
46
+ export async function runPkceFlow(transport, options = {}) {
47
+ const callbackHost = options.callbackHost ?? DEFAULT_CALLBACK_HOST;
48
+ const callbackPort = options.callbackPort ?? 0;
49
+ const autoOpenBrowser = options.autoOpenBrowser ?? true;
50
+ const timeoutMs = options.timeoutMs ?? DEFAULT_CALLBACK_TIMEOUT_MS;
51
+ const cfg = workosConfig();
52
+ const bound = await bindCallbackServer(callbackHost, callbackPort, timeoutMs);
53
+ const { server, port, callbackPromise, close } = bound;
54
+ const redirectUri = `http://${callbackHost}:${port}/callback`;
55
+ try {
56
+ const authorize = await transport.getAuthorizationUrlWithPKCE({
57
+ provider: "authkit",
58
+ redirectUri,
59
+ clientId: cfg.clientId,
60
+ ...(options.loginHint ? { loginHint: options.loginHint } : {}),
61
+ });
62
+ if (options.onAuthorizeUrl) {
63
+ await options.onAuthorizeUrl(authorize.url, redirectUri);
64
+ }
65
+ if (autoOpenBrowser) {
66
+ try {
67
+ await open(authorize.url);
68
+ }
69
+ catch {
70
+ // Browser launch failed — fall back to print so the user can copy.
71
+ console.log(`\nOpen this URL to sign in:\n ${authorize.url}\n`);
72
+ }
73
+ }
74
+ else {
75
+ console.log(`\nOpen this URL to sign in:\n ${authorize.url}\n`);
76
+ }
77
+ const callback = await callbackPromise;
78
+ if (callback.state !== authorize.state) {
79
+ throw new AuthFlowError("State mismatch on auth callback — possible CSRF. Re-run `interf auth login`.");
80
+ }
81
+ const result = await transport.authenticateWithCode({
82
+ code: callback.code,
83
+ codeVerifier: authorize.codeVerifier,
84
+ clientId: cfg.clientId,
85
+ });
86
+ return result;
87
+ }
88
+ finally {
89
+ server.removeAllListeners();
90
+ await close();
91
+ }
92
+ }
93
+ function bindCallbackServer(host, port, timeoutMs) {
94
+ return new Promise((resolveBind, rejectBind) => {
95
+ let resolveCallback = () => { };
96
+ let rejectCallback = () => { };
97
+ const callbackPromise = new Promise((res, rej) => {
98
+ resolveCallback = res;
99
+ rejectCallback = rej;
100
+ });
101
+ // The server handler can reject the callback promise BEFORE the outer
102
+ // `await callbackPromise` runs (provider error / missing code path).
103
+ // Attach a noop handler so node's unhandled-rejection detector does not
104
+ // flag those rejections during the brief window between `rejectCallback`
105
+ // firing and the `await` later in `runPkceFlow`. The actual rejection
106
+ // still propagates when the original promise is awaited.
107
+ callbackPromise.catch(() => { });
108
+ const server = createServer((req, res) => {
109
+ const reqUrl = new URL(req.url ?? "/", `http://${host}:${port}`);
110
+ if (reqUrl.pathname !== "/callback") {
111
+ res.writeHead(404, { "content-type": "text/plain" });
112
+ res.end("Not found\n");
113
+ return;
114
+ }
115
+ const error = reqUrl.searchParams.get("error");
116
+ const errorDescription = reqUrl.searchParams.get("error_description");
117
+ if (error) {
118
+ const detail = errorDescription ? `${error}: ${errorDescription}` : error;
119
+ res.writeHead(400, { "content-type": "text/html; charset=utf-8" });
120
+ res.end(callbackHtml("Sign-in failed", detail));
121
+ rejectCallback(new AuthFlowError(`provider returned error: ${detail}`));
122
+ return;
123
+ }
124
+ const code = reqUrl.searchParams.get("code");
125
+ const state = reqUrl.searchParams.get("state");
126
+ if (!code || !state) {
127
+ res.writeHead(400, { "content-type": "text/html; charset=utf-8" });
128
+ res.end(callbackHtml("Sign-in failed", "Callback missing code or state."));
129
+ rejectCallback(new AuthFlowError("callback missing code or state"));
130
+ return;
131
+ }
132
+ res.writeHead(200, { "content-type": "text/html; charset=utf-8" });
133
+ res.end(callbackHtml("Signed in to Interf", "You can close this window and return to your terminal."));
134
+ resolveCallback({ code, state });
135
+ });
136
+ const timeout = setTimeout(() => {
137
+ rejectCallback(new AuthFlowError(`Timed out waiting for auth callback after ${Math.round(timeoutMs / 1000)}s.`));
138
+ }, timeoutMs);
139
+ timeout.unref();
140
+ const close = () => new Promise((closed) => {
141
+ clearTimeout(timeout);
142
+ server.close(() => closed());
143
+ });
144
+ server.once("error", (error) => {
145
+ clearTimeout(timeout);
146
+ rejectBind(error);
147
+ });
148
+ server.listen(port, host, () => {
149
+ const address = server.address();
150
+ const actualPort = address && typeof address === "object" ? address.port : port;
151
+ resolveBind({ server, port: actualPort, callbackPromise, close });
152
+ });
153
+ });
154
+ }
155
+ function callbackHtml(title, body) {
156
+ const safeTitle = escapeHtml(title);
157
+ const safeBody = escapeHtml(body);
158
+ return `<!doctype html>
159
+ <html lang="en">
160
+ <head>
161
+ <meta charset="utf-8">
162
+ <title>${safeTitle} — Interf</title>
163
+ <style>
164
+ body { font-family: system-ui, -apple-system, sans-serif; background: #fafaf9;
165
+ color: #1f2937; display: grid; place-items: center; height: 100vh;
166
+ margin: 0; padding: 1.5rem; }
167
+ .card { background: #fff; border: 1px solid #e5e7eb; border-radius: 12px;
168
+ padding: 2rem 2.25rem; max-width: 28rem; box-shadow: 0 1px 2px rgba(0,0,0,0.04); }
169
+ h1 { font-size: 1.125rem; margin: 0 0 0.5rem; }
170
+ p { margin: 0; color: #4b5563; line-height: 1.5; }
171
+ </style>
172
+ </head>
173
+ <body>
174
+ <div class="card">
175
+ <h1>${safeTitle}</h1>
176
+ <p>${safeBody}</p>
177
+ </div>
178
+ </body>
179
+ </html>
180
+ `;
181
+ }
182
+ function escapeHtml(value) {
183
+ return value
184
+ .replace(/&/g, "&amp;")
185
+ .replace(/</g, "&lt;")
186
+ .replace(/>/g, "&gt;")
187
+ .replace(/"/g, "&quot;")
188
+ .replace(/'/g, "&#39;");
189
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Access-token validation for the cloud engine binding.
3
+ *
4
+ * The loopback engine never calls this — its security boundary is the
5
+ * loopback bind + CORS allowlist + per-instance hex bearer in
6
+ * `isAuthorizedMutation`. The cloud variant runs `authMode: "jwt"` and
7
+ * requires `Authorization: Bearer <jwt>` on every mutating request.
8
+ *
9
+ * Validation uses `jose`'s `createRemoteJWKSet`, which fetches the WorkOS
10
+ * JWKS document, caches it in-process, and rotates keys when WorkOS
11
+ * publishes new ones. Verification covers signature, `exp`, and (optionally)
12
+ * `iss`. Audience is not pinned by WorkOS access tokens.
13
+ */
14
+ import { jwtVerify } from "jose";
15
+ /**
16
+ * Whatever jose accepts as its second `jwtVerify` argument — a
17
+ * `createRemoteJWKSet` function, a `createLocalJWKSet` function, a
18
+ * `CryptoKey`, or a `Uint8Array`. Tests inject the local variant; production
19
+ * uses the remote one.
20
+ */
21
+ type JwtKeyResolver = Parameters<typeof jwtVerify>[1];
22
+ export interface ValidatedAccessToken {
23
+ /** WorkOS user id (`user_01...`). */
24
+ sub: string;
25
+ /** Session id, when present in the token. */
26
+ sid: string | null;
27
+ /** Email, when included by AuthKit. */
28
+ email: string | null;
29
+ /** Organization id, when the access token is org-scoped. */
30
+ orgId: string | null;
31
+ /** Role string, when included. */
32
+ role: string | null;
33
+ /** Permissions list, when included. */
34
+ permissions: ReadonlyArray<string>;
35
+ /** Unix expiry (seconds). */
36
+ exp: number;
37
+ /** Unix issued-at (seconds). */
38
+ iat: number;
39
+ }
40
+ export declare class JwtValidationError extends Error {
41
+ constructor(message: string);
42
+ }
43
+ /** Reset cached JWKS resolver. Test seam. */
44
+ export declare function resetJwtCache(): void;
45
+ /**
46
+ * Inject a custom JWKS resolver (tests). Pass `null` to restore lazy init
47
+ * from the live WorkOS SDK.
48
+ */
49
+ export declare function setJwksResolverForTests(resolver: JwtKeyResolver | null): void;
50
+ /**
51
+ * Verify a WorkOS access token. Throws JwtValidationError on any failure
52
+ * (bad signature, expired, malformed). On success returns the claims we
53
+ * care about flattened into a stable shape.
54
+ */
55
+ export declare function validateAccessToken(token: string): Promise<ValidatedAccessToken>;
56
+ /** The JWKS URL the validator is currently bound to. Debug / observability. */
57
+ export declare function currentJwksUrl(): string | null;
58
+ export {};
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Access-token validation for the cloud engine binding.
3
+ *
4
+ * The loopback engine never calls this — its security boundary is the
5
+ * loopback bind + CORS allowlist + per-instance hex bearer in
6
+ * `isAuthorizedMutation`. The cloud variant runs `authMode: "jwt"` and
7
+ * requires `Authorization: Bearer <jwt>` on every mutating request.
8
+ *
9
+ * Validation uses `jose`'s `createRemoteJWKSet`, which fetches the WorkOS
10
+ * JWKS document, caches it in-process, and rotates keys when WorkOS
11
+ * publishes new ones. Verification covers signature, `exp`, and (optionally)
12
+ * `iss`. Audience is not pinned by WorkOS access tokens.
13
+ */
14
+ import { createRemoteJWKSet, jwtVerify } from "jose";
15
+ import { getWorkOS, workosConfig } from "./workos-client.js";
16
+ export class JwtValidationError extends Error {
17
+ constructor(message) {
18
+ super(message);
19
+ this.name = "JwtValidationError";
20
+ }
21
+ }
22
+ let cachedResolver = null;
23
+ let cachedJwksUrl = null;
24
+ /** Reset cached JWKS resolver. Test seam. */
25
+ export function resetJwtCache() {
26
+ cachedResolver = null;
27
+ cachedJwksUrl = null;
28
+ }
29
+ /**
30
+ * Inject a custom JWKS resolver (tests). Pass `null` to restore lazy init
31
+ * from the live WorkOS SDK.
32
+ */
33
+ export function setJwksResolverForTests(resolver) {
34
+ if (resolver === null) {
35
+ cachedResolver = null;
36
+ cachedJwksUrl = null;
37
+ return;
38
+ }
39
+ cachedResolver = resolver;
40
+ cachedJwksUrl = "test://jwks";
41
+ }
42
+ function getResolver() {
43
+ if (cachedResolver)
44
+ return cachedResolver;
45
+ const cfg = workosConfig();
46
+ const jwksUrl = getWorkOS().userManagement.getJwksUrl(cfg.clientId);
47
+ cachedResolver = createRemoteJWKSet(new URL(jwksUrl));
48
+ cachedJwksUrl = jwksUrl;
49
+ return cachedResolver;
50
+ }
51
+ /**
52
+ * Verify a WorkOS access token. Throws JwtValidationError on any failure
53
+ * (bad signature, expired, malformed). On success returns the claims we
54
+ * care about flattened into a stable shape.
55
+ */
56
+ export async function validateAccessToken(token) {
57
+ const resolver = getResolver();
58
+ let payload;
59
+ try {
60
+ const result = await jwtVerify(token, resolver);
61
+ payload = result.payload;
62
+ }
63
+ catch (error) {
64
+ const message = error instanceof Error ? error.message : String(error);
65
+ throw new JwtValidationError(`access token rejected: ${message}`);
66
+ }
67
+ if (typeof payload.sub !== "string" || payload.sub.length === 0) {
68
+ throw new JwtValidationError("access token missing `sub` claim");
69
+ }
70
+ return {
71
+ sub: payload.sub,
72
+ sid: typeof payload.sid === "string" ? payload.sid : null,
73
+ email: typeof payload.email === "string" ? payload.email : null,
74
+ orgId: typeof payload.org_id === "string" ? payload.org_id : null,
75
+ role: typeof payload.role === "string" ? payload.role : null,
76
+ permissions: Array.isArray(payload.permissions)
77
+ ? payload.permissions.filter((value) => typeof value === "string")
78
+ : [],
79
+ exp: typeof payload.exp === "number" ? payload.exp : 0,
80
+ iat: typeof payload.iat === "number" ? payload.iat : 0,
81
+ };
82
+ }
83
+ /** The JWKS URL the validator is currently bound to. Debug / observability. */
84
+ export function currentJwksUrl() {
85
+ return cachedJwksUrl;
86
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Refresh-token storage backed by the system keychain.
3
+ *
4
+ * On macOS this lands in the user's Keychain; on Linux it uses libsecret /
5
+ * gnome-keyring; on Windows it uses the Credential Vault. The native
6
+ * `keytar` binding is loaded lazily so importing this module from contexts
7
+ * that never touch the keychain (the loopback engine, tests, CI) does not
8
+ * pay the dlopen cost.
9
+ *
10
+ * When the native binding fails to load (uncommon: corrupt prebuild, exotic
11
+ * platform, headless CI without libsecret), the in-memory fallback adapter
12
+ * keeps the auth flow alive for the current process. The user is warned —
13
+ * tokens won't survive a restart.
14
+ */
15
+ export interface KeychainAdapter {
16
+ setPassword(account: string, password: string): Promise<void>;
17
+ getPassword(account: string): Promise<string | null>;
18
+ deletePassword(account: string): Promise<boolean>;
19
+ }
20
+ /**
21
+ * Inject a custom adapter (tests). Pass `null` to restore lazy init.
22
+ */
23
+ export declare function setKeychainAdapterForTests(adapter: KeychainAdapter | null): void;
24
+ /**
25
+ * Resolve the active adapter. Tries `keytar` first; falls back to an
26
+ * in-memory map on platforms where the native binding fails to load,
27
+ * with a one-time warning.
28
+ */
29
+ export declare function getKeychainAdapter(): Promise<KeychainAdapter>;
30
+ /** Persist a refresh token keyed on user_id. */
31
+ export declare function setRefreshToken(userId: string, token: string): Promise<void>;
32
+ /** Read a refresh token by user_id, or null if none is stored. */
33
+ export declare function getRefreshToken(userId: string): Promise<string | null>;
34
+ /** Remove a refresh token. Idempotent — returns false if nothing was stored. */
35
+ export declare function deleteRefreshToken(userId: string): Promise<boolean>;
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Refresh-token storage backed by the system keychain.
3
+ *
4
+ * On macOS this lands in the user's Keychain; on Linux it uses libsecret /
5
+ * gnome-keyring; on Windows it uses the Credential Vault. The native
6
+ * `keytar` binding is loaded lazily so importing this module from contexts
7
+ * that never touch the keychain (the loopback engine, tests, CI) does not
8
+ * pay the dlopen cost.
9
+ *
10
+ * When the native binding fails to load (uncommon: corrupt prebuild, exotic
11
+ * platform, headless CI without libsecret), the in-memory fallback adapter
12
+ * keeps the auth flow alive for the current process. The user is warned —
13
+ * tokens won't survive a restart.
14
+ */
15
+ const KEYCHAIN_SERVICE = "interf";
16
+ /** Account-key prefix for refresh tokens. Distinguishes them from any future
17
+ * Vault entries (API keys, signing keys) we might also store. */
18
+ const REFRESH_TOKEN_PREFIX = "refresh:";
19
+ let cachedAdapter = null;
20
+ let warnedAboutFallback = false;
21
+ /**
22
+ * Inject a custom adapter (tests). Pass `null` to restore lazy init.
23
+ */
24
+ export function setKeychainAdapterForTests(adapter) {
25
+ cachedAdapter = adapter;
26
+ warnedAboutFallback = false;
27
+ }
28
+ /**
29
+ * Resolve the active adapter. Tries `keytar` first; falls back to an
30
+ * in-memory map on platforms where the native binding fails to load,
31
+ * with a one-time warning.
32
+ */
33
+ export async function getKeychainAdapter() {
34
+ if (cachedAdapter)
35
+ return cachedAdapter;
36
+ try {
37
+ const keytar = await import("keytar");
38
+ cachedAdapter = {
39
+ setPassword: (account, password) => keytar.setPassword(KEYCHAIN_SERVICE, account, password),
40
+ getPassword: (account) => keytar.getPassword(KEYCHAIN_SERVICE, account),
41
+ deletePassword: (account) => keytar.deletePassword(KEYCHAIN_SERVICE, account),
42
+ };
43
+ return cachedAdapter;
44
+ }
45
+ catch (error) {
46
+ if (!warnedAboutFallback) {
47
+ const reason = error instanceof Error ? error.message : String(error);
48
+ console.warn(`[interf auth] keychain unavailable (${reason}); ` +
49
+ "refresh tokens will not persist across restarts. " +
50
+ "Re-run `interf auth login` after the engine restarts.");
51
+ warnedAboutFallback = true;
52
+ }
53
+ cachedAdapter = createInMemoryAdapter();
54
+ return cachedAdapter;
55
+ }
56
+ }
57
+ function createInMemoryAdapter() {
58
+ const store = new Map();
59
+ return {
60
+ async setPassword(account, password) {
61
+ store.set(account, password);
62
+ },
63
+ async getPassword(account) {
64
+ return store.get(account) ?? null;
65
+ },
66
+ async deletePassword(account) {
67
+ return store.delete(account);
68
+ },
69
+ };
70
+ }
71
+ /** Persist a refresh token keyed on user_id. */
72
+ export async function setRefreshToken(userId, token) {
73
+ const adapter = await getKeychainAdapter();
74
+ await adapter.setPassword(`${REFRESH_TOKEN_PREFIX}${userId}`, token);
75
+ }
76
+ /** Read a refresh token by user_id, or null if none is stored. */
77
+ export async function getRefreshToken(userId) {
78
+ const adapter = await getKeychainAdapter();
79
+ return adapter.getPassword(`${REFRESH_TOKEN_PREFIX}${userId}`);
80
+ }
81
+ /** Remove a refresh token. Idempotent — returns false if nothing was stored. */
82
+ export async function deleteRefreshToken(userId) {
83
+ const adapter = await getKeychainAdapter();
84
+ return adapter.deletePassword(`${REFRESH_TOKEN_PREFIX}${userId}`);
85
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Session store — read/write `~/.interf/auth/session.json`.
3
+ *
4
+ * The session file is the engine's view of the current account: who is
5
+ * signed in, what plan they are on, when the session was last refreshed.
6
+ * Refresh tokens live in the keychain (see `keychain.ts`), not here.
7
+ *
8
+ * The store is intentionally tiny — pure file IO + schema validation — so
9
+ * tests can swap `~/.interf/` via the `INTERF_USER_HOME` env var and
10
+ * exercise auth flows without touching the real home dir.
11
+ */
12
+ import { z } from "zod";
13
+ import { type CurrentAccount } from "./account-context.js";
14
+ export declare const AUTH_DIR = "auth";
15
+ export declare const SESSION_FILENAME = "session.json";
16
+ declare const SessionFileSchema: z.ZodObject<{
17
+ kind: z.ZodLiteral<"interf-session">;
18
+ version: z.ZodLiteral<1>;
19
+ user_id: z.ZodString;
20
+ email: z.ZodString;
21
+ display_name: z.ZodDefault<z.ZodNullable<z.ZodString>>;
22
+ plan: z.ZodEnum<{
23
+ free: "free";
24
+ pro: "pro";
25
+ enterprise: "enterprise";
26
+ }>;
27
+ refreshed_at: z.ZodString;
28
+ }, z.core.$strict>;
29
+ export type SessionFile = z.infer<typeof SessionFileSchema>;
30
+ export declare function authDir(): string;
31
+ export declare function sessionPath(): string;
32
+ /** Read the active session, or null if no session is on disk. */
33
+ export declare function readSession(): CurrentAccount | null;
34
+ /** Persist a session. Creates the auth dir if it does not exist. */
35
+ export declare function writeSession(account: CurrentAccount): void;
36
+ /** Clear the session (logout). Idempotent. */
37
+ export declare function clearSession(): void;
38
+ export {};
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Session store — read/write `~/.interf/auth/session.json`.
3
+ *
4
+ * The session file is the engine's view of the current account: who is
5
+ * signed in, what plan they are on, when the session was last refreshed.
6
+ * Refresh tokens live in the keychain (see `keychain.ts`), not here.
7
+ *
8
+ * The store is intentionally tiny — pure file IO + schema validation — so
9
+ * tests can swap `~/.interf/` via the `INTERF_USER_HOME` env var and
10
+ * exercise auth flows without touching the real home dir.
11
+ */
12
+ import { chmodSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
13
+ import { dirname, join } from "node:path";
14
+ import { z } from "zod";
15
+ import { interfHomeRoot } from "../../contracts/lib/project-paths.js";
16
+ import { entitlementsForPlan, } from "./account-context.js";
17
+ export const AUTH_DIR = "auth";
18
+ export const SESSION_FILENAME = "session.json";
19
+ const SessionFileSchema = z.object({
20
+ kind: z.literal("interf-session"),
21
+ version: z.literal(1),
22
+ user_id: z.string().min(1),
23
+ email: z.string().min(1),
24
+ display_name: z.string().min(1).nullable().default(null),
25
+ plan: z.enum(["free", "pro", "enterprise"]),
26
+ refreshed_at: z.string().min(1),
27
+ }).strict();
28
+ export function authDir() {
29
+ return join(interfHomeRoot(), AUTH_DIR);
30
+ }
31
+ export function sessionPath() {
32
+ return join(authDir(), SESSION_FILENAME);
33
+ }
34
+ /** Read the active session, or null if no session is on disk. */
35
+ export function readSession() {
36
+ const path = sessionPath();
37
+ if (!existsSync(path))
38
+ return null;
39
+ let raw;
40
+ try {
41
+ raw = readFileSync(path, "utf8");
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ let parsed;
47
+ try {
48
+ parsed = JSON.parse(raw);
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ const result = SessionFileSchema.safeParse(parsed);
54
+ if (!result.success)
55
+ return null;
56
+ const session = result.data;
57
+ return {
58
+ user_id: session.user_id,
59
+ email: session.email,
60
+ display_name: session.display_name,
61
+ plan: session.plan,
62
+ entitlements: entitlementsForPlan(session.plan),
63
+ refreshed_at: session.refreshed_at,
64
+ };
65
+ }
66
+ /** Persist a session. Creates the auth dir if it does not exist. */
67
+ export function writeSession(account) {
68
+ const path = sessionPath();
69
+ const dir = dirname(path);
70
+ // `mode` on mkdir/writeFile only applies when the entry is *created*; node
71
+ // ignores it when the dir/file already exists. A session file (or auth dir)
72
+ // left over from an earlier run with looser perms (e.g. 0o644) would never be
73
+ // re-tightened. chmod after the write so the PII session file is always 0o600
74
+ // inside a 0o700 dir, even when it pre-existed.
75
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
76
+ chmodSync(dir, 0o700);
77
+ const file = {
78
+ kind: "interf-session",
79
+ version: 1,
80
+ user_id: account.user_id,
81
+ email: account.email,
82
+ display_name: account.display_name,
83
+ plan: account.plan === "anonymous" ? "free" : account.plan,
84
+ refreshed_at: account.refreshed_at,
85
+ };
86
+ const validated = SessionFileSchema.parse(file);
87
+ writeFileSync(path, `${JSON.stringify(validated, null, 2)}\n`, { mode: 0o600 });
88
+ chmodSync(path, 0o600);
89
+ }
90
+ /** Clear the session (logout). Idempotent. */
91
+ export function clearSession() {
92
+ const path = sessionPath();
93
+ if (existsSync(path)) {
94
+ rmSync(path, { force: true });
95
+ }
96
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * WorkOS SDK wrapper.
3
+ *
4
+ * Reads config from env at lazy-init time. The engine and CLI never import
5
+ * `@workos-inc/node` directly — they go through `getWorkOS()` so the provider
6
+ * stays behind one seam.
7
+ *
8
+ * Two modes:
9
+ * - **Public Client (CLI / desktop / loopback engine)**: only
10
+ * `WORKOS_CLIENT_ID` required. PKCE replaces the missing client secret.
11
+ * This is the path `interf auth login` drives.
12
+ * - **Confidential Client (cloud control plane)**: both `WORKOS_API_KEY`
13
+ * and `WORKOS_CLIENT_ID` required. Phase 2; not exercised by the local
14
+ * engine.
15
+ *
16
+ * Optional `WORKOS_ISSUER` overrides the AuthKit base URL (defaults to the
17
+ * production WorkOS API). Used for the JWKS URL and for any direct HTTP
18
+ * call we make outside the SDK.
19
+ */
20
+ import { WorkOS } from "@workos-inc/node";
21
+ export interface WorkOSConfig {
22
+ /** Server-side API key. Present only in confidential client mode. */
23
+ apiKey: string | null;
24
+ /** Public client identifier. Always required. */
25
+ clientId: string;
26
+ /** AuthKit issuer base URL, no trailing slash. */
27
+ issuer: string;
28
+ }
29
+ export declare class WorkOSConfigError extends Error {
30
+ constructor(message: string);
31
+ }
32
+ /** Reset cached config + client. Test seam. */
33
+ export declare function resetWorkOSCache(): void;
34
+ /**
35
+ * Load + validate WorkOS config from the environment.
36
+ *
37
+ * `WORKOS_CLIENT_ID` is always required. `WORKOS_API_KEY` is optional —
38
+ * leave it unset for CLI/Public Client mode. Set it only on the cloud
39
+ * control plane.
40
+ *
41
+ * Throws WorkOSConfigError with an actionable message when the client id
42
+ * is missing.
43
+ */
44
+ export declare function workosConfig(): WorkOSConfig;
45
+ /**
46
+ * Get a singleton WorkOS SDK client.
47
+ *
48
+ * Public Client Mode is the default when no API key is configured —
49
+ * matches the upstream SDK pattern for browser / mobile / CLI / desktop
50
+ * apps that cannot securely store a client secret.
51
+ */
52
+ export declare function getWorkOS(): WorkOS;
53
+ /**
54
+ * Test seam — inject a stub `WorkOS` instance so tests can drive the
55
+ * auth flow without touching the live SDK or env. Pass `null` to
56
+ * restore lazy init.
57
+ */
58
+ export declare function setWorkOSClientForTests(client: WorkOS | null): void;