forgeos 0.1.0-alpha.4 → 0.1.0-alpha.41

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 (416) hide show
  1. package/.npmignore +10 -0
  2. package/AGENTS.md +142 -90
  3. package/CHANGELOG.md +433 -0
  4. package/LICENSE +21 -0
  5. package/README.md +67 -8
  6. package/adapters/go/README.md +23 -0
  7. package/adapters/go/go.mod +3 -0
  8. package/adapters/go/http.go +149 -0
  9. package/adapters/go/registry.go +234 -0
  10. package/adapters/go/types.go +136 -0
  11. package/adapters/java/README.md +68 -0
  12. package/adapters/java/pom.xml +34 -0
  13. package/adapters/java/src/main/java/dev/forgeos/adapter/Auth.java +20 -0
  14. package/adapters/java/src/main/java/dev/forgeos/adapter/Diagnostic.java +16 -0
  15. package/adapters/java/src/main/java/dev/forgeos/adapter/Entry.java +38 -0
  16. package/adapters/java/src/main/java/dev/forgeos/adapter/EntryKind.java +16 -0
  17. package/adapters/java/src/main/java/dev/forgeos/adapter/ErrorInfo.java +4 -0
  18. package/adapters/java/src/main/java/dev/forgeos/adapter/Forge.java +94 -0
  19. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeCall.java +12 -0
  20. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeContext.java +11 -0
  21. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHandler.java +8 -0
  22. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHttpHandler.java +179 -0
  23. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeRegistry.java +121 -0
  24. package/adapters/java/src/main/java/dev/forgeos/adapter/Json.java +14 -0
  25. package/adapters/java/src/main/java/dev/forgeos/adapter/Manifest.java +14 -0
  26. package/adapters/java/src/main/java/dev/forgeos/adapter/RequestEnvelope.java +6 -0
  27. package/adapters/java/src/main/java/dev/forgeos/adapter/ResponseEnvelope.java +25 -0
  28. package/adapters/java/src/main/java/dev/forgeos/adapter/Risk.java +18 -0
  29. package/adapters/java/src/main/java/dev/forgeos/adapter/Schemas.java +36 -0
  30. package/adapters/java/src/main/java/dev/forgeos/adapter/Service.java +65 -0
  31. package/adapters/java/src/main/java/dev/forgeos/adapter/TransactionMode.java +18 -0
  32. package/adapters/java/src/main/java/dev/forgeos/adapter/TypedForgeHandler.java +6 -0
  33. package/adapters/java-spring-boot-starter/README.md +32 -0
  34. package/adapters/java-spring-boot-starter/pom.xml +36 -0
  35. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeCommand.java +22 -0
  36. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeExternalService.java +15 -0
  37. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeQuery.java +16 -0
  38. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.java +18 -0
  39. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.java +16 -0
  40. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringRuntime.java +104 -0
  41. package/adapters/java-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
  42. package/bin/forge.mjs +18 -0
  43. package/docs/cair-protocol.md +103 -0
  44. package/docs/changelog.md +548 -0
  45. package/docs/forge-protocol.md +189 -0
  46. package/examples/go-billing/go.mod +7 -0
  47. package/examples/go-billing/main.go +120 -0
  48. package/examples/java-billing/pom.xml +52 -0
  49. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/CreateInvoiceInput.java +4 -0
  50. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Invoice.java +11 -0
  51. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Main.java +127 -0
  52. package/package.json +31 -3
  53. package/schemas/forge-manifest.schema.json +57 -0
  54. package/src/forge/_generated/releaseManifest.json +1 -2
  55. package/src/forge/_generated/releaseManifest.ts +3 -3
  56. package/src/forge/agent-adapters/index.ts +1584 -125
  57. package/src/forge/agent-adapters/types.ts +224 -1
  58. package/src/forge/agent-memory/bridge.ts +1333 -0
  59. package/src/forge/agent-memory/context-pack.ts +277 -0
  60. package/src/forge/agent-memory/hook-runner.ts +312 -0
  61. package/src/forge/agent-memory/mcp.ts +224 -0
  62. package/src/forge/agent-memory/normalize.ts +498 -0
  63. package/src/forge/agent-memory/redaction.ts +103 -0
  64. package/src/forge/agent-memory/sources/claude-code.ts +51 -0
  65. package/src/forge/agent-memory/sources/codex-hook-runner.mjs +273 -0
  66. package/src/forge/agent-memory/sources/codex.ts +119 -0
  67. package/src/forge/agent-memory/sources/cursor.ts +35 -0
  68. package/src/forge/agent-memory/types.ts +204 -0
  69. package/src/forge/bench.ts +248 -0
  70. package/src/forge/brownfield-import/index.ts +801 -0
  71. package/src/forge/brownfield-import/types.ts +127 -0
  72. package/src/forge/cair/action-journal.ts +61 -0
  73. package/src/forge/cair/action-parser.ts +314 -0
  74. package/src/forge/cair/action-validator.ts +40 -0
  75. package/src/forge/cair/actions.ts +1818 -0
  76. package/src/forge/cair/format.ts +77 -0
  77. package/src/forge/cair/index.ts +106 -0
  78. package/src/forge/cair/query.ts +478 -0
  79. package/src/forge/cair/snapshot.ts +315 -0
  80. package/src/forge/cair/types.ts +248 -0
  81. package/src/forge/cli/ai.ts +339 -21
  82. package/src/forge/cli/auth.ts +348 -10
  83. package/src/forge/cli/authmd.ts +441 -0
  84. package/src/forge/cli/baseline.ts +112 -0
  85. package/src/forge/cli/build.ts +20 -4
  86. package/src/forge/cli/changed.ts +437 -0
  87. package/src/forge/cli/codex-app-server.ts +877 -0
  88. package/src/forge/cli/commands.ts +1620 -20
  89. package/src/forge/cli/db.ts +209 -2
  90. package/src/forge/cli/deploy.ts +887 -0
  91. package/src/forge/cli/deps.ts +82 -13
  92. package/src/forge/cli/dev.ts +961 -46
  93. package/src/forge/cli/docs.ts +265 -0
  94. package/src/forge/cli/doctor.ts +297 -0
  95. package/src/forge/cli/field-test.ts +329 -0
  96. package/src/forge/cli/handoff.ts +336 -0
  97. package/src/forge/cli/index.ts +1 -0
  98. package/src/forge/cli/last-run.ts +84 -0
  99. package/src/forge/cli/main.ts +107 -3
  100. package/src/forge/cli/new.ts +152 -13
  101. package/src/forge/cli/next-actions.ts +23 -0
  102. package/src/forge/cli/output.ts +389 -6
  103. package/src/forge/cli/parse.ts +1050 -34
  104. package/src/forge/cli/progress.ts +51 -0
  105. package/src/forge/cli/query.ts +32 -0
  106. package/src/forge/cli/release.ts +35 -11
  107. package/src/forge/cli/rls.ts +43 -4
  108. package/src/forge/cli/run.ts +41 -0
  109. package/src/forge/cli/security.ts +112 -0
  110. package/src/forge/cli/self-host.ts +56 -14
  111. package/src/forge/cli/studio.ts +2218 -0
  112. package/src/forge/cli/verify.ts +1455 -32
  113. package/src/forge/cli/windows.ts +23 -0
  114. package/src/forge/cli/workos.ts +1020 -0
  115. package/src/forge/compiler/agent-contract/build.ts +670 -64
  116. package/src/forge/compiler/agent-contract/types.ts +45 -2
  117. package/src/forge/compiler/ai-registry/parse.ts +71 -2
  118. package/src/forge/compiler/api-surface/build.ts +47 -0
  119. package/src/forge/compiler/app-graph/build.ts +112 -9
  120. package/src/forge/compiler/app-graph/extract.ts +107 -0
  121. package/src/forge/compiler/app-graph/module-graph.ts +73 -78
  122. package/src/forge/compiler/app-graph/parser.ts +24 -24
  123. package/src/forge/compiler/app-graph/profile.ts +26 -0
  124. package/src/forge/compiler/app-graph/versions.ts +1 -1
  125. package/src/forge/compiler/classifier/capabilities.ts +3 -2
  126. package/src/forge/compiler/classifier/classify.ts +32 -8
  127. package/src/forge/compiler/classifier/secrets.ts +3 -2
  128. package/src/forge/compiler/classifier/signals.ts +91 -1
  129. package/src/forge/compiler/client-sdk/build-manifest.ts +59 -0
  130. package/src/forge/compiler/client-sdk/render-client.ts +295 -13
  131. package/src/forge/compiler/data-graph/parse.ts +20 -4
  132. package/src/forge/compiler/data-graph/sql/ddl.ts +144 -31
  133. package/src/forge/compiler/data-graph/sql/serialize.ts +4 -0
  134. package/src/forge/compiler/data-graph/sql/types.ts +1 -0
  135. package/src/forge/compiler/diagnostics/codes.ts +30 -0
  136. package/src/forge/compiler/diagnostics/create.ts +21 -2
  137. package/src/forge/compiler/diagnostics/index.ts +2 -0
  138. package/src/forge/compiler/emitter/barrel.ts +3 -0
  139. package/src/forge/compiler/emitter/render.ts +9 -0
  140. package/src/forge/compiler/external-manifest/registry.ts +205 -0
  141. package/src/forge/compiler/external-manifest/types.ts +91 -0
  142. package/src/forge/compiler/external-manifest/validate.ts +373 -0
  143. package/src/forge/compiler/frontend-graph/build.ts +142 -14
  144. package/src/forge/compiler/integration/add.ts +618 -24
  145. package/src/forge/compiler/integration/plan.ts +43 -12
  146. package/src/forge/compiler/integration/render.ts +29 -0
  147. package/src/forge/compiler/integration/snapshot.ts +2 -0
  148. package/src/forge/compiler/integration/templates/convex.ts +70 -0
  149. package/src/forge/compiler/integration/templates/index.ts +1 -0
  150. package/src/forge/compiler/integration/templates/render.ts +38 -0
  151. package/src/forge/compiler/integration/templates/types.ts +3 -0
  152. package/src/forge/compiler/integration/templates/workos.ts +1219 -0
  153. package/src/forge/compiler/make-registry/build.ts +8 -9
  154. package/src/forge/compiler/orchestrator/fast-check.ts +4 -0
  155. package/src/forge/compiler/orchestrator/generate-lock.ts +14 -3
  156. package/src/forge/compiler/orchestrator/manifest.ts +1 -1
  157. package/src/forge/compiler/orchestrator/plan-profile.ts +23 -0
  158. package/src/forge/compiler/orchestrator/plan.ts +247 -10
  159. package/src/forge/compiler/orchestrator/profile.ts +65 -0
  160. package/src/forge/compiler/orchestrator/run.ts +97 -31
  161. package/src/forge/compiler/orchestrator/serialize.ts +33 -8
  162. package/src/forge/compiler/orchestrator/types.ts +1 -1
  163. package/src/forge/compiler/package-graph/compiler.ts +3 -1
  164. package/src/forge/compiler/package-graph/constants.ts +1 -1
  165. package/src/forge/compiler/package-manager/adapter.ts +4 -1
  166. package/src/forge/compiler/package-manager/commands.ts +4 -0
  167. package/src/forge/compiler/package-manager/executor.ts +30 -1
  168. package/src/forge/compiler/package-manager/version.ts +36 -12
  169. package/src/forge/compiler/package-upgrades/planner.ts +155 -18
  170. package/src/forge/compiler/package-upgrades/types.ts +2 -0
  171. package/src/forge/compiler/policy-registry/build.ts +47 -2
  172. package/src/forge/compiler/policy-registry/parse.ts +32 -2
  173. package/src/forge/compiler/recipes/definitions.ts +63 -0
  174. package/src/forge/compiler/recipes/index.ts +2 -0
  175. package/src/forge/compiler/recipes/registry.ts +6 -0
  176. package/src/forge/compiler/test-graph/build.ts +11 -3
  177. package/src/forge/compiler/types/app-graph.ts +8 -2
  178. package/src/forge/compiler/types/cli.ts +75 -1
  179. package/src/forge/compiler/types/dev-manifest.ts +4 -0
  180. package/src/forge/compiler/types/emit.ts +2 -0
  181. package/src/forge/compiler/types/frontend-graph.ts +2 -2
  182. package/src/forge/compiler/types/integration.ts +1 -0
  183. package/src/forge/compiler/types/package-graph.ts +6 -0
  184. package/src/forge/compiler/types/policy-registry.ts +3 -1
  185. package/src/forge/delta/classifier.ts +52 -0
  186. package/src/forge/delta/explain.ts +238 -0
  187. package/src/forge/delta/git-observer.ts +43 -0
  188. package/src/forge/delta/ids.ts +44 -0
  189. package/src/forge/delta/index.ts +25 -0
  190. package/src/forge/delta/recorder.ts +540 -0
  191. package/src/forge/delta/redaction.ts +50 -0
  192. package/src/forge/delta/schema.ts +240 -0
  193. package/src/forge/delta/session.ts +142 -0
  194. package/src/forge/delta/status.ts +1202 -0
  195. package/src/forge/delta/store.ts +3284 -0
  196. package/src/forge/delta/timeline.ts +178 -0
  197. package/src/forge/dev/server.ts +808 -17
  198. package/src/forge/dev/types.ts +15 -1
  199. package/src/forge/dev/watch.ts +17 -7
  200. package/src/forge/dev-console/cycle.ts +280 -33
  201. package/src/forge/dev-console/types.ts +47 -1
  202. package/src/forge/impact/index.ts +204 -9
  203. package/src/forge/impact/types.ts +33 -1
  204. package/src/forge/intent/index.ts +35 -16
  205. package/src/forge/make/fields.ts +26 -0
  206. package/src/forge/make/index.ts +40 -6
  207. package/src/forge/make/templates.ts +155 -2
  208. package/src/forge/make/types.ts +2 -1
  209. package/src/forge/policy.ts +1 -1
  210. package/src/forge/react/index.ts +160 -2
  211. package/src/forge/refactor/index.ts +1 -0
  212. package/src/forge/repair/rules/index.ts +2 -2
  213. package/src/forge/review/index.ts +158 -12
  214. package/src/forge/review/types.ts +15 -0
  215. package/src/forge/runtime/auth/config.ts +17 -0
  216. package/src/forge/runtime/auth/evaluate.ts +15 -2
  217. package/src/forge/runtime/auth/resolve.ts +61 -6
  218. package/src/forge/runtime/auth/types.ts +1 -0
  219. package/src/forge/runtime/db/factory.ts +1 -3
  220. package/src/forge/runtime/db/generated-client.ts +13 -2
  221. package/src/forge/runtime/db/memory-adapter.ts +139 -32
  222. package/src/forge/runtime/db/pglite-adapter.ts +263 -2
  223. package/src/forge/runtime/db/postgres-adapter.ts +6 -3
  224. package/src/forge/runtime/executor.ts +129 -16
  225. package/src/forge/runtime/external/bridge.ts +649 -0
  226. package/src/forge/runtime/runner/run-entry.ts +16 -7
  227. package/src/forge/runtime/telemetry/buffer.ts +4 -1
  228. package/src/forge/runtime/telemetry/scrubber.ts +35 -5
  229. package/src/forge/runtime/webhooks/security.ts +12 -7
  230. package/src/forge/server.ts +17 -3
  231. package/src/forge/ui/index.ts +209 -0
  232. package/src/forge/ui/types.ts +1 -0
  233. package/src/forge/version.ts +1 -1
  234. package/src/forge/vue/index.ts +422 -0
  235. package/src/forge/workspace/baseline.ts +112 -0
  236. package/src/forge/workspace/change-summary.ts +250 -0
  237. package/src/forge/workspace/forge-cli.ts +42 -0
  238. package/src/forge/workspace/git-summary.ts +391 -0
  239. package/templates/agent-workroom/AGENTS.md +29 -0
  240. package/templates/agent-workroom/README.md +34 -0
  241. package/templates/agent-workroom/forge.config.ts +3 -0
  242. package/templates/agent-workroom/package.json +33 -0
  243. package/templates/agent-workroom/src/actions/indexAgentSignal.ts +10 -0
  244. package/templates/agent-workroom/src/commands/openWorkroom.ts +61 -0
  245. package/templates/agent-workroom/src/commands/recordAgentSignal.ts +119 -0
  246. package/templates/agent-workroom/src/commands/recordCheckRun.ts +52 -0
  247. package/templates/agent-workroom/src/forge/schema.ts +54 -0
  248. package/templates/agent-workroom/src/policies.ts +6 -0
  249. package/templates/agent-workroom/src/queries/listWorkrooms.ts +11 -0
  250. package/templates/agent-workroom/src/queries/liveWorkroom.ts +63 -0
  251. package/templates/agent-workroom/tsconfig.json +16 -0
  252. package/templates/agent-workroom/web/index.html +12 -0
  253. package/templates/agent-workroom/web/package.json +21 -0
  254. package/templates/agent-workroom/web/src/App.tsx +345 -0
  255. package/templates/agent-workroom/web/src/lib/forge.ts +13 -0
  256. package/templates/agent-workroom/web/src/main.tsx +13 -0
  257. package/templates/agent-workroom/web/src/styles.css +545 -0
  258. package/templates/agent-workroom/web/tsconfig.json +27 -0
  259. package/templates/b2b-support-web/package.json +1 -0
  260. package/templates/b2b-support-web/web/package.json +1 -1
  261. package/templates/minimal-web/package.json +1 -1
  262. package/templates/minimal-web/web/package.json +2 -2
  263. package/templates/nuxt-web/.vscode/settings.json +14 -0
  264. package/templates/nuxt-web/README.md +30 -0
  265. package/templates/nuxt-web/forge.config.ts +3 -0
  266. package/templates/nuxt-web/package.json +33 -0
  267. package/templates/nuxt-web/src/actions/logNoteCreated.ts +11 -0
  268. package/templates/nuxt-web/src/commands/createNote.ts +26 -0
  269. package/templates/nuxt-web/src/forge/schema.ts +12 -0
  270. package/templates/nuxt-web/src/policies.ts +6 -0
  271. package/templates/nuxt-web/src/queries/listNotes.ts +8 -0
  272. package/templates/nuxt-web/src/queries/liveNotes.ts +8 -0
  273. package/templates/nuxt-web/tsconfig.json +17 -0
  274. package/templates/nuxt-web/web/app.vue +67 -0
  275. package/templates/nuxt-web/web/components/LiveNotes.vue +89 -0
  276. package/templates/nuxt-web/web/components/NoteComposer.vue +100 -0
  277. package/templates/nuxt-web/web/composables/forge.ts +13 -0
  278. package/templates/nuxt-web/web/composables/useNotes.ts +24 -0
  279. package/templates/nuxt-web/web/nuxt.config.ts +11 -0
  280. package/templates/nuxt-web/web/package.json +18 -0
  281. package/templates/nuxt-web/web/plugins/forge.client.ts +10 -0
  282. package/templates/nuxt-web/web/plugins/forge.server.ts +10 -0
  283. package/templates/nuxt-web/web/server/api/forge-health.get.ts +7 -0
  284. package/templates/nuxt-web/web/tsconfig.json +6 -0
  285. package/src/forge/_generated/actionSubscriptions.json +0 -2
  286. package/src/forge/_generated/actionSubscriptions.ts +0 -10
  287. package/src/forge/_generated/agentAdapterManifest.json +0 -2
  288. package/src/forge/_generated/agentAdapterManifest.ts +0 -73
  289. package/src/forge/_generated/agentContract.json +0 -2
  290. package/src/forge/_generated/agentContract.ts +0 -7829
  291. package/src/forge/_generated/agentQuickstart.md +0 -34
  292. package/src/forge/_generated/agentTools.json +0 -2
  293. package/src/forge/_generated/agentTools.md +0 -16
  294. package/src/forge/_generated/agentTools.ts +0 -12
  295. package/src/forge/_generated/aiContext.ts +0 -125
  296. package/src/forge/_generated/aiModels.json +0 -2
  297. package/src/forge/_generated/aiModels.ts +0 -51
  298. package/src/forge/_generated/aiProviders.json +0 -2
  299. package/src/forge/_generated/aiProviders.ts +0 -23
  300. package/src/forge/_generated/aiRegistry.json +0 -2
  301. package/src/forge/_generated/aiRegistry.ts +0 -31
  302. package/src/forge/_generated/api.json +0 -2
  303. package/src/forge/_generated/api.ts +0 -8
  304. package/src/forge/_generated/appGraph.json +0 -2
  305. package/src/forge/_generated/appGraph.ts +0 -14919
  306. package/src/forge/_generated/appMap.md +0 -55
  307. package/src/forge/_generated/artifactManifest.json +0 -2
  308. package/src/forge/_generated/artifactManifest.ts +0 -7
  309. package/src/forge/_generated/authClaims.json +0 -2
  310. package/src/forge/_generated/authClaims.ts +0 -13
  311. package/src/forge/_generated/authConfig.json +0 -2
  312. package/src/forge/_generated/authConfig.ts +0 -17
  313. package/src/forge/_generated/authContext.ts +0 -23
  314. package/src/forge/_generated/authRegistry.json +0 -2
  315. package/src/forge/_generated/authRegistry.ts +0 -25
  316. package/src/forge/_generated/buildInfo.json +0 -2
  317. package/src/forge/_generated/buildInfo.ts +0 -9
  318. package/src/forge/_generated/capabilityMap.json +0 -2
  319. package/src/forge/_generated/capabilityMap.md +0 -15
  320. package/src/forge/_generated/capabilityMap.ts +0 -17
  321. package/src/forge/_generated/client.ts +0 -282
  322. package/src/forge/_generated/clientApi.ts +0 -9
  323. package/src/forge/_generated/clientManifest.json +0 -2
  324. package/src/forge/_generated/clientManifest.ts +0 -39
  325. package/src/forge/_generated/clientTypes.ts +0 -78
  326. package/src/forge/_generated/configRegistry.json +0 -2
  327. package/src/forge/_generated/configRegistry.ts +0 -4
  328. package/src/forge/_generated/dataGraph.json +0 -2
  329. package/src/forge/_generated/dataGraph.ts +0 -8
  330. package/src/forge/_generated/db.json +0 -2
  331. package/src/forge/_generated/db.ts +0 -2
  332. package/src/forge/_generated/dbSecurityManifest.json +0 -2
  333. package/src/forge/_generated/dbSecurityManifest.ts +0 -15
  334. package/src/forge/_generated/dbSessionContext.json +0 -2
  335. package/src/forge/_generated/dbSessionContext.ts +0 -39
  336. package/src/forge/_generated/deployManifest.json +0 -2
  337. package/src/forge/_generated/deployManifest.ts +0 -14
  338. package/src/forge/_generated/devManifest.json +0 -2
  339. package/src/forge/_generated/devManifest.ts +0 -62
  340. package/src/forge/_generated/envSchema.json +0 -2
  341. package/src/forge/_generated/envSchema.ts +0 -59
  342. package/src/forge/_generated/frontendGraph.json +0 -2
  343. package/src/forge/_generated/frontendGraph.ts +0 -27
  344. package/src/forge/_generated/importGuards.json +0 -2
  345. package/src/forge/_generated/importGuards.ts +0 -686
  346. package/src/forge/_generated/index.ts +0 -68
  347. package/src/forge/_generated/liveProductionManifest.json +0 -2
  348. package/src/forge/_generated/liveProductionManifest.ts +0 -23
  349. package/src/forge/_generated/liveProtocol.json +0 -2
  350. package/src/forge/_generated/liveProtocol.ts +0 -21
  351. package/src/forge/_generated/liveQueryRegistry.json +0 -2
  352. package/src/forge/_generated/liveQueryRegistry.ts +0 -9
  353. package/src/forge/_generated/liveTransportConfig.json +0 -2
  354. package/src/forge/_generated/liveTransportConfig.ts +0 -19
  355. package/src/forge/_generated/makeRegistry.json +0 -2
  356. package/src/forge/_generated/makeRegistry.ts +0 -177
  357. package/src/forge/_generated/makeTemplates.json +0 -2
  358. package/src/forge/_generated/makeTemplates.ts +0 -66
  359. package/src/forge/_generated/mockMap.json +0 -2
  360. package/src/forge/_generated/mockMap.ts +0 -7
  361. package/src/forge/_generated/operationPlaybooks.md +0 -167
  362. package/src/forge/_generated/packageGraph.json +0 -2
  363. package/src/forge/_generated/packageGraph.ts +0 -249334
  364. package/src/forge/_generated/packageUpgradeRegistry.json +0 -2
  365. package/src/forge/_generated/packageUpgradeRegistry.ts +0 -15
  366. package/src/forge/_generated/permissionMatrix.json +0 -2
  367. package/src/forge/_generated/permissionMatrix.ts +0 -7
  368. package/src/forge/_generated/policyRegistry.json +0 -2
  369. package/src/forge/_generated/policyRegistry.ts +0 -11
  370. package/src/forge/_generated/queryRegistry.json +0 -2
  371. package/src/forge/_generated/queryRegistry.ts +0 -9
  372. package/src/forge/_generated/react.d.ts +0 -22
  373. package/src/forge/_generated/react.ts +0 -29
  374. package/src/forge/_generated/reactManifest.json +0 -2
  375. package/src/forge/_generated/reactManifest.ts +0 -19
  376. package/src/forge/_generated/rlsPolicies.json +0 -2
  377. package/src/forge/_generated/rlsPolicies.sql +0 -34
  378. package/src/forge/_generated/rlsPolicies.ts +0 -6
  379. package/src/forge/_generated/runtimeGraph.json +0 -2
  380. package/src/forge/_generated/runtimeGraph.ts +0 -8
  381. package/src/forge/_generated/runtimeMatrix.json +0 -2
  382. package/src/forge/_generated/runtimeMatrix.ts +0 -334130
  383. package/src/forge/_generated/runtimeRegistry.ts +0 -2
  384. package/src/forge/_generated/runtimeRules.md +0 -91
  385. package/src/forge/_generated/secretRegistry.json +0 -2
  386. package/src/forge/_generated/secretRegistry.ts +0 -50
  387. package/src/forge/_generated/secretsContext.ts +0 -11
  388. package/src/forge/_generated/serverApi.ts +0 -10
  389. package/src/forge/_generated/sourceMapManifest.json +0 -2
  390. package/src/forge/_generated/sourceMapManifest.ts +0 -7
  391. package/src/forge/_generated/sqlPlan.json +0 -2
  392. package/src/forge/_generated/sqlPlan.ts +0 -88
  393. package/src/forge/_generated/subscriptionManifest.json +0 -2
  394. package/src/forge/_generated/subscriptionManifest.ts +0 -7
  395. package/src/forge/_generated/symbolicationManifest.json +0 -2
  396. package/src/forge/_generated/symbolicationManifest.ts +0 -17
  397. package/src/forge/_generated/telemetryRegistry.json +0 -2
  398. package/src/forge/_generated/telemetryRegistry.ts +0 -9
  399. package/src/forge/_generated/telemetrySinks.json +0 -2
  400. package/src/forge/_generated/telemetrySinks.ts +0 -11
  401. package/src/forge/_generated/tenantScope.json +0 -2
  402. package/src/forge/_generated/tenantScope.ts +0 -8
  403. package/src/forge/_generated/testGraph.json +0 -2
  404. package/src/forge/_generated/testGraph.ts +0 -3430
  405. package/src/forge/_generated/testPlanRegistry.json +0 -2
  406. package/src/forge/_generated/testPlanRegistry.ts +0 -33
  407. package/src/forge/_generated/uiRoutes.json +0 -2
  408. package/src/forge/_generated/uiRoutes.ts +0 -16
  409. package/src/forge/_generated/uiScenarios.json +0 -2
  410. package/src/forge/_generated/uiScenarios.ts +0 -30
  411. package/src/forge/_generated/uiTestManifest.json +0 -2
  412. package/src/forge/_generated/uiTestManifest.ts +0 -27
  413. package/src/forge/_generated/workflowRegistry.json +0 -2
  414. package/src/forge/_generated/workflowRegistry.ts +0 -9
  415. package/src/forge/_generated/workflowSubscriptions.json +0 -2
  416. package/src/forge/_generated/workflowSubscriptions.ts +0 -10
@@ -20,7 +20,6 @@ import { PACKAGE_ANALYZER_VERSION } from "../package-graph/constants.ts";
20
20
  import { RECIPE_SCHEMA_VERSION } from "../recipes/definitions.ts";
21
21
  import { hashStable } from "../primitives/hash.ts";
22
22
  import { stableSortEmitFiles, stableSortStrings } from "../primitives/index.ts";
23
- import { detectOrphanedGeneratedFiles } from "../orchestrator/orphans.ts";
24
23
  import type { DiscoverContext } from "../orchestrator/types.ts";
25
24
  import {
26
25
  createRenderContext,
@@ -28,6 +27,7 @@ import {
28
27
  renderAdapterModule,
29
28
  renderIntegrationDoc,
30
29
  renderIntegrationModule,
30
+ renderRootFile,
31
31
  renderTestkitModule,
32
32
  } from "./render.ts";
33
33
 
@@ -41,11 +41,23 @@ export interface IntegrationPlanInput {
41
41
  existingLock: ForgeLock | null;
42
42
  }
43
43
 
44
+ function headerForGeneratedPath(path: string): EmitFile["header"] {
45
+ return path.endsWith(".yml") || path.endsWith(".yaml") ? "none" : undefined;
46
+ }
47
+
48
+ function headerForRootFile(path: string): EmitFile["header"] {
49
+ if (path.endsWith(".env.example") || path.endsWith(".yml") || path.endsWith(".yaml")) {
50
+ return "none";
51
+ }
52
+ return "deterministic";
53
+ }
54
+
44
55
  function makeEmitFile(path: string, content: string): EmitFile {
45
56
  return {
46
57
  path,
47
58
  content,
48
59
  contentHash: hashStable(content),
60
+ header: headerForGeneratedPath(path),
49
61
  };
50
62
  }
51
63
 
@@ -85,6 +97,7 @@ function shouldEmitAdapter(
85
97
  function buildGeneratedPaths(
86
98
  recipe: IntegrationRecipe,
87
99
  compatible: RuntimeContext[],
100
+ workspaceRoot: string,
88
101
  ): string[] {
89
102
  const paths: string[] = [];
90
103
 
@@ -107,6 +120,13 @@ function buildGeneratedPaths(
107
120
  paths.push(`${GENERATED_DIR}/integrations/${integration}`);
108
121
  }
109
122
 
123
+ for (const rootFile of recipe.rootFiles ?? []) {
124
+ if (rootFile.startsWith("web/") && !nodeFileSystem.exists(join(workspaceRoot, "web", "package.json"))) {
125
+ continue;
126
+ }
127
+ paths.push(rootFile);
128
+ }
129
+
110
130
  paths.push(
111
131
  `${GENERATED_DIR}/runtimeMatrix.ts`,
112
132
  `${GENERATED_DIR}/runtimeMatrix.json`,
@@ -187,6 +207,8 @@ export function buildIntegrationEmitPlan(input: IntegrationPlanInput): EmitPlan
187
207
  secrets,
188
208
  compatible,
189
209
  incompatible,
210
+ workspaceRoot: ctx.workspaceRoot,
211
+ appGraph,
190
212
  });
191
213
 
192
214
  const files: EmitFile[] = [];
@@ -208,6 +230,8 @@ export function buildIntegrationEmitPlan(input: IntegrationPlanInput): EmitPlan
208
230
  secrets,
209
231
  compatible,
210
232
  incompatible,
233
+ workspaceRoot: ctx.workspaceRoot,
234
+ appGraph,
211
235
  }),
212
236
  ),
213
237
  );
@@ -222,6 +246,19 @@ export function buildIntegrationEmitPlan(input: IntegrationPlanInput): EmitPlan
222
246
  );
223
247
  }
224
248
 
249
+ for (const rootFile of recipe.rootFiles ?? []) {
250
+ if (rootFile.startsWith("web/") && !nodeFileSystem.exists(join(ctx.workspaceRoot, "web", "package.json"))) {
251
+ continue;
252
+ }
253
+ const content = renderRootFile(rootFile, templateCtx);
254
+ files.push({
255
+ path: rootFile,
256
+ content,
257
+ contentHash: hashStable(content),
258
+ header: headerForRootFile(rootFile),
259
+ });
260
+ }
261
+
225
262
  for (const testkit of recipe.testkits) {
226
263
  files.push(
227
264
  makeEmitFile(
@@ -242,6 +279,8 @@ export function buildIntegrationEmitPlan(input: IntegrationPlanInput): EmitPlan
242
279
  secrets,
243
280
  compatible,
244
281
  incompatible,
282
+ workspaceRoot: ctx.workspaceRoot,
283
+ appGraph,
245
284
  }),
246
285
  ),
247
286
  );
@@ -250,21 +289,13 @@ export function buildIntegrationEmitPlan(input: IntegrationPlanInput): EmitPlan
250
289
  const matrix = buildRuntimeMatrix(allClassified);
251
290
  files.push(...buildGuardArtifactEmitFiles(matrix, appGraph.moduleGraph));
252
291
 
253
- const generatedFiles = buildGeneratedPaths(recipe, compatible);
292
+ const generatedFiles = buildGeneratedPaths(recipe, compatible, ctx.workspaceRoot);
254
293
  const lockEntry = buildLockEntry(recipe, classified, generatedFiles);
255
294
  const lock = mergeLockPackages(input.existingLock, lockEntry, ctx);
256
295
 
257
- const sortedFiles = stableSortEmitFiles(files);
258
- const plannedPathSet = new Set(sortedFiles.map((file) => file.path));
259
- const orphanedFiles = detectOrphanedGeneratedFiles(
260
- ctx.workspaceRoot,
261
- ctx.generatedDir,
262
- plannedPathSet,
263
- );
264
-
265
296
  return {
266
- files: sortedFiles,
267
- orphanedFiles,
297
+ files: stableSortEmitFiles(files),
298
+ orphanedFiles: [],
268
299
  lock,
269
300
  };
270
301
  }
@@ -1,4 +1,5 @@
1
1
  import type { SecretRequirement } from "../types/capability.ts";
2
+ import type { AppGraph } from "../types/app-graph.ts";
2
3
  import type { IntegrationRecipe } from "../types/integration.ts";
3
4
  import type { RuntimeContext } from "../types/runtime.ts";
4
5
  import { RUNTIME_CONTEXTS } from "../types/runtime.ts";
@@ -8,6 +9,7 @@ import {
8
9
  renderQualityAdapter,
9
10
  renderQualityDoc,
10
11
  renderQualityIntegration,
12
+ renderQualityRootFile,
11
13
  renderQualityTestkit,
12
14
  } from "./templates/index.ts";
13
15
  import type { IntegrationTemplateInput } from "./templates/types.ts";
@@ -92,6 +94,8 @@ export function createRenderContext(input: {
92
94
  secrets: SecretRequirement[];
93
95
  compatible: RuntimeContext[];
94
96
  incompatible: RuntimeContext[];
97
+ workspaceRoot?: string;
98
+ appGraph?: AppGraph;
95
99
  }): IntegrationTemplateInput {
96
100
  return buildTemplateInput(input);
97
101
  }
@@ -105,6 +109,8 @@ export function renderAdapterModule(input: {
105
109
  secrets: SecretRequirement[];
106
110
  compatible: RuntimeContext[];
107
111
  incompatible: RuntimeContext[];
112
+ workspaceRoot?: string;
113
+ appGraph?: AppGraph;
108
114
  }): string {
109
115
  const ctx = createRenderContext(input);
110
116
  const adapterFilename = `${input.alias}.${input.context}.ts`;
@@ -167,6 +173,8 @@ export function renderIntegrationDoc(input: {
167
173
  secrets: SecretRequirement[];
168
174
  compatible: RuntimeContext[];
169
175
  incompatible: RuntimeContext[];
176
+ workspaceRoot?: string;
177
+ appGraph?: AppGraph;
170
178
  }): string {
171
179
  const ctx = buildTemplateInput({
172
180
  alias: input.alias,
@@ -177,6 +185,8 @@ export function renderIntegrationDoc(input: {
177
185
  secrets: input.secrets,
178
186
  compatible: input.compatible,
179
187
  incompatible: input.incompatible,
188
+ workspaceRoot: input.workspaceRoot,
189
+ appGraph: input.appGraph,
180
190
  });
181
191
 
182
192
  const docName = `${input.alias}.md`;
@@ -187,3 +197,22 @@ export function renderIntegrationDoc(input: {
187
197
 
188
198
  return skeletonDoc(ctx);
189
199
  }
200
+
201
+ export function renderRootFile(
202
+ relativePath: string,
203
+ input: IntegrationTemplateInput,
204
+ ): string {
205
+ const quality = renderQualityRootFile(relativePath, input);
206
+ if (quality) {
207
+ return quality;
208
+ }
209
+
210
+ return [
211
+ `/** Forge generated root file for ${input.alias}: ${relativePath}. */`,
212
+ `export const forgeIntegrationRootFile = ${serializeCanonical({
213
+ alias: input.alias,
214
+ path: relativePath,
215
+ }).trim()} as const;`,
216
+ "",
217
+ ].join("\n");
218
+ }
@@ -14,6 +14,7 @@ function readOptional(path: string): string | null {
14
14
 
15
15
  export function snapshotVersionControlled(
16
16
  workspaceRoot: string,
17
+ extraRelativePaths: string[] = [],
17
18
  ): VersionControlledSnapshot {
18
19
  const pm = detectPackageManager(workspaceRoot);
19
20
  const lockfile = getLockfileForPm(pm);
@@ -25,6 +26,7 @@ export function snapshotVersionControlled(
25
26
  `${workspaceRoot.replace(/\\/g, "/")}/`,
26
27
  "",
27
28
  ),
29
+ ...extraRelativePaths,
28
30
  ];
29
31
 
30
32
  const files = new Map<string, string | null>();
@@ -0,0 +1,70 @@
1
+ import type { IntegrationTemplateInput } from "./types.ts";
2
+
3
+ export function renderConvexTestkit(_input: IntegrationTemplateInput): string {
4
+ return [
5
+ "/** Forge generated mock testkit for Convex app-contract evaluation. */",
6
+ "export interface ConvexFunctionRef {",
7
+ " readonly kind: \"query\" | \"mutation\" | \"action\";",
8
+ " readonly path: string;",
9
+ "}",
10
+ "",
11
+ "export function createConvexMock(functions: ConvexFunctionRef[] = []) {",
12
+ " const calls: Array<{ path: string; args: unknown }> = [];",
13
+ " return {",
14
+ " functions,",
15
+ " calls,",
16
+ " call(path: string, args: unknown = {}) {",
17
+ " calls.push({ path, args });",
18
+ " return { ok: true, path, args } as const;",
19
+ " },",
20
+ " } as const;",
21
+ "}",
22
+ "",
23
+ ].join("\n");
24
+ }
25
+
26
+ export function renderConvexDoc(input: IntegrationTemplateInput): string {
27
+ return [
28
+ "# Convex integration",
29
+ "",
30
+ "Generated by Forge (recipe v1).",
31
+ "",
32
+ "Convex is treated as an agent-friendly backend package. ForgeOS treats it as an app-contract integration surface: package placement, frontend/backend usage, generated docs, and future function-map import.",
33
+ "",
34
+ "## Runtime placement",
35
+ "",
36
+ "- Use Convex client hooks and generated Convex APIs in frontend/client code.",
37
+ "- Use Convex server/admin clients only from server, action, workflow, or endpoint contexts.",
38
+ "- Do not import Convex runtime clients from Forge commands, queries, or liveQueries.",
39
+ "- Type-only imports are acceptable when the TypeScript compiler erases them.",
40
+ "",
41
+ "## App-contract import targets",
42
+ "",
43
+ "Future Convex import support should inspect:",
44
+ "",
45
+ "- `convex/schema.ts` for table names and fields;",
46
+ "- `convex/_generated/api.d.ts` for query, mutation, and action references;",
47
+ "- frontend `useQuery`, `useMutation`, and `useAction` calls for route/component capability mapping;",
48
+ "- auth and deployment notes from Convex config files.",
49
+ "",
50
+ "## Commands",
51
+ "",
52
+ "```bash",
53
+ "forge add convex",
54
+ "forge deps inspect convex --json",
55
+ "forge inspect runtime-matrix --json",
56
+ "forge check --json",
57
+ "```",
58
+ "",
59
+ "## Generated evidence",
60
+ "",
61
+ `Compatible contexts: ${input.compatible.join(", ")}`,
62
+ "",
63
+ `Incompatible contexts: ${input.incompatible.join(", ")}`,
64
+ "",
65
+ "Optional environment names:",
66
+ "",
67
+ ...input.secrets.map((secret) => `- ${secret.envVar}`),
68
+ "",
69
+ ].join("\n");
70
+ }
@@ -4,5 +4,6 @@ export {
4
4
  renderQualityAdapter,
5
5
  renderQualityDoc,
6
6
  renderQualityIntegration,
7
+ renderQualityRootFile,
7
8
  renderQualityTestkit,
8
9
  } from "./render.ts";
@@ -1,8 +1,10 @@
1
1
  import type { IntegrationTemplateInput } from "./types.ts";
2
2
  import * as ai from "./ai.ts";
3
+ import * as convex from "./convex.ts";
3
4
  import * as posthog from "./posthog.ts";
4
5
  import * as sentry from "./sentry.ts";
5
6
  import * as stripe from "./stripe.ts";
7
+ import * as workos from "./workos.ts";
6
8
  import * as zod from "./zod.ts";
7
9
 
8
10
  type TemplateRenderer = (input: IntegrationTemplateInput) => string;
@@ -26,6 +28,9 @@ const ADAPTER_RENDERERS: Record<string, Record<string, TemplateRenderer>> = {
26
28
  ai: {
27
29
  "ai.server.ts": ai.renderAiServerAdapter,
28
30
  },
31
+ workos: {
32
+ "workos.server.ts": workos.renderWorkosServerAdapter,
33
+ },
29
34
  };
30
35
 
31
36
  const INTEGRATION_RENDERERS: Record<string, Record<string, TemplateRenderer>> = {
@@ -45,6 +50,17 @@ const INTEGRATION_RENDERERS: Record<string, Record<string, TemplateRenderer>> =
45
50
  "ai/generations.ts": ai.renderAiGenerations,
46
51
  "ai/testkit.ts": ai.renderAiTestkit,
47
52
  },
53
+ workos: {
54
+ "workos/authkit.ts": workos.renderWorkosAuthkit,
55
+ "workos/auth-routes.ts": workos.renderWorkosAuthRoutes,
56
+ "workos/fga.ts": workos.renderWorkosFga,
57
+ "workos/http-handler.ts": workos.renderWorkosHttpHandler,
58
+ "workos/resource-map.ts": workos.renderWorkosResourceMap,
59
+ "workos/seed.ts": workos.renderWorkosSeed,
60
+ "workos/session.ts": workos.renderWorkosSession,
61
+ "workos/webhook.ts": workos.renderWorkosWebhook,
62
+ "workos/workos-seed.yml": workos.renderWorkosSeedYaml,
63
+ },
48
64
  };
49
65
 
50
66
  const TESTKIT_RENDERERS: Record<string, Record<string, TemplateRenderer>> = {
@@ -52,7 +68,9 @@ const TESTKIT_RENDERERS: Record<string, Record<string, TemplateRenderer>> = {
52
68
  stripe: { "stripe.mock.ts": stripe.renderStripeTestkit },
53
69
  posthog: { "posthog.mock.ts": posthog.renderPosthogTestkit },
54
70
  sentry: { "sentry.mock.ts": sentry.renderSentryTestkit },
71
+ convex: { "convex.mock.ts": convex.renderConvexTestkit },
55
72
  ai: { "ai.mock.ts": ai.renderAiTestkitLegacy },
73
+ workos: { "workos.mock.ts": workos.renderWorkosTestkit },
56
74
  };
57
75
 
58
76
  const DOC_RENDERERS: Record<string, Record<string, TemplateRenderer>> = {
@@ -60,7 +78,18 @@ const DOC_RENDERERS: Record<string, Record<string, TemplateRenderer>> = {
60
78
  stripe: { "stripe.md": stripe.renderStripeDoc },
61
79
  posthog: { "posthog.md": posthog.renderPosthogDoc },
62
80
  sentry: { "sentry.md": sentry.renderSentryDoc },
81
+ convex: { "convex.md": convex.renderConvexDoc },
63
82
  ai: { "ai.md": ai.renderAiDoc },
83
+ workos: { "workos.md": workos.renderWorkosDoc },
84
+ };
85
+
86
+ const ROOT_FILE_RENDERERS: Record<string, Record<string, TemplateRenderer>> = {
87
+ workos: {
88
+ ".env.example": workos.renderWorkosEnvExample,
89
+ "src/policies.workos.ts": workos.renderWorkosPolicies,
90
+ "web/src/lib/workos-auth.tsx": workos.renderWorkosReactBridge,
91
+ "workos-seed.yml": workos.renderWorkosSeedYaml,
92
+ },
64
93
  };
65
94
 
66
95
  function lookup(
@@ -99,6 +128,13 @@ export function renderQualityDoc(
99
128
  return lookup(DOC_RENDERERS, input.alias, filename)?.(input) ?? null;
100
129
  }
101
130
 
131
+ export function renderQualityRootFile(
132
+ filename: string,
133
+ input: IntegrationTemplateInput,
134
+ ): string | null {
135
+ return lookup(ROOT_FILE_RENDERERS, input.alias, filename)?.(input) ?? null;
136
+ }
137
+
102
138
  export function buildTemplateInput(input: {
103
139
  alias: string;
104
140
  recipe: IntegrationTemplateInput["recipe"];
@@ -108,6 +144,8 @@ export function buildTemplateInput(input: {
108
144
  secrets: IntegrationTemplateInput["secrets"];
109
145
  compatible: IntegrationTemplateInput["compatible"];
110
146
  incompatible: IntegrationTemplateInput["incompatible"];
147
+ workspaceRoot?: string;
148
+ appGraph?: IntegrationTemplateInput["appGraph"];
111
149
  }): IntegrationTemplateInput {
112
150
  return input;
113
151
  }
@@ -1,4 +1,5 @@
1
1
  import type { SecretRequirement } from "../../types/capability.ts";
2
+ import type { AppGraph } from "../../types/app-graph.ts";
2
3
  import type { IntegrationRecipe } from "../../types/integration.ts";
3
4
  import type { RuntimeContext } from "../../types/runtime.ts";
4
5
 
@@ -11,4 +12,6 @@ export interface IntegrationTemplateInput {
11
12
  secrets: SecretRequirement[];
12
13
  compatible: RuntimeContext[];
13
14
  incompatible: RuntimeContext[];
15
+ workspaceRoot?: string;
16
+ appGraph?: AppGraph;
14
17
  }