forgeos 0.1.0-alpha.3 → 0.1.0-alpha.30

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 (400) hide show
  1. package/.npmignore +10 -0
  2. package/AGENTS.md +142 -90
  3. package/CHANGELOG.md +321 -0
  4. package/LICENSE +21 -0
  5. package/README.md +86 -13
  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 +366 -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 +34 -4
  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 +1556 -123
  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 +485 -2
  82. package/src/forge/cli/auth.ts +92 -2
  83. package/src/forge/cli/authmd.ts +356 -0
  84. package/src/forge/cli/build.ts +20 -4
  85. package/src/forge/cli/changed.ts +306 -0
  86. package/src/forge/cli/codex-app-server.ts +877 -0
  87. package/src/forge/cli/commands.ts +1357 -9
  88. package/src/forge/cli/db.ts +121 -2
  89. package/src/forge/cli/deps.ts +79 -12
  90. package/src/forge/cli/dev.ts +502 -38
  91. package/src/forge/cli/docs.ts +265 -0
  92. package/src/forge/cli/handoff.ts +253 -0
  93. package/src/forge/cli/index.ts +1 -0
  94. package/src/forge/cli/main.ts +59 -3
  95. package/src/forge/cli/new.ts +13 -1
  96. package/src/forge/cli/next-actions.ts +23 -0
  97. package/src/forge/cli/output.ts +302 -1
  98. package/src/forge/cli/parse.ts +862 -34
  99. package/src/forge/cli/query.ts +32 -0
  100. package/src/forge/cli/release.ts +35 -11
  101. package/src/forge/cli/rls.ts +568 -17
  102. package/src/forge/cli/run.ts +41 -0
  103. package/src/forge/cli/secrets.ts +46 -1
  104. package/src/forge/cli/security.ts +381 -0
  105. package/src/forge/cli/self-host.ts +56 -14
  106. package/src/forge/cli/studio.ts +2217 -0
  107. package/src/forge/cli/verify.ts +1424 -32
  108. package/src/forge/cli/workos.ts +340 -0
  109. package/src/forge/compiler/agent-contract/build.ts +637 -51
  110. package/src/forge/compiler/agent-contract/types.ts +47 -2
  111. package/src/forge/compiler/ai-registry/parse.ts +71 -2
  112. package/src/forge/compiler/api-surface/build.ts +47 -0
  113. package/src/forge/compiler/app-graph/build.ts +68 -8
  114. package/src/forge/compiler/app-graph/extract.ts +107 -0
  115. package/src/forge/compiler/app-graph/module-graph.ts +73 -78
  116. package/src/forge/compiler/app-graph/parser.ts +24 -24
  117. package/src/forge/compiler/app-graph/profile.ts +26 -0
  118. package/src/forge/compiler/app-graph/versions.ts +1 -1
  119. package/src/forge/compiler/classifier/capabilities.ts +3 -2
  120. package/src/forge/compiler/classifier/classify.ts +32 -8
  121. package/src/forge/compiler/classifier/secrets.ts +3 -2
  122. package/src/forge/compiler/classifier/signals.ts +91 -1
  123. package/src/forge/compiler/client-sdk/build-manifest.ts +59 -0
  124. package/src/forge/compiler/client-sdk/render-client.ts +188 -13
  125. package/src/forge/compiler/data-graph/parse.ts +3 -3
  126. package/src/forge/compiler/data-graph/sql/ddl.ts +60 -2
  127. package/src/forge/compiler/data-graph/sql/serialize.ts +4 -0
  128. package/src/forge/compiler/data-graph/sql/types.ts +1 -0
  129. package/src/forge/compiler/diagnostics/codes.ts +35 -0
  130. package/src/forge/compiler/diagnostics/create.ts +8 -3
  131. package/src/forge/compiler/diagnostics/index.ts +2 -0
  132. package/src/forge/compiler/emitter/barrel.ts +3 -0
  133. package/src/forge/compiler/emitter/render.ts +9 -0
  134. package/src/forge/compiler/external-manifest/registry.ts +205 -0
  135. package/src/forge/compiler/external-manifest/types.ts +91 -0
  136. package/src/forge/compiler/external-manifest/validate.ts +373 -0
  137. package/src/forge/compiler/frontend-graph/build.ts +142 -14
  138. package/src/forge/compiler/integration/add.ts +536 -23
  139. package/src/forge/compiler/integration/plan.ts +17 -11
  140. package/src/forge/compiler/integration/render.ts +20 -0
  141. package/src/forge/compiler/integration/snapshot.ts +2 -0
  142. package/src/forge/compiler/integration/templates/convex.ts +70 -0
  143. package/src/forge/compiler/integration/templates/index.ts +1 -0
  144. package/src/forge/compiler/integration/templates/render.ts +34 -0
  145. package/src/forge/compiler/integration/templates/workos.ts +1063 -0
  146. package/src/forge/compiler/make-registry/build.ts +6 -7
  147. package/src/forge/compiler/orchestrator/fast-check.ts +4 -0
  148. package/src/forge/compiler/orchestrator/manifest.ts +1 -1
  149. package/src/forge/compiler/orchestrator/plan-profile.ts +23 -0
  150. package/src/forge/compiler/orchestrator/plan.ts +240 -10
  151. package/src/forge/compiler/orchestrator/profile.ts +65 -0
  152. package/src/forge/compiler/orchestrator/run.ts +97 -31
  153. package/src/forge/compiler/orchestrator/serialize.ts +33 -8
  154. package/src/forge/compiler/orchestrator/types.ts +1 -1
  155. package/src/forge/compiler/package-graph/compiler.ts +13 -3
  156. package/src/forge/compiler/package-manager/adapter.ts +4 -1
  157. package/src/forge/compiler/package-manager/commands.ts +4 -0
  158. package/src/forge/compiler/package-manager/executor.ts +30 -1
  159. package/src/forge/compiler/policy-registry/build.ts +47 -2
  160. package/src/forge/compiler/policy-registry/parse.ts +32 -2
  161. package/src/forge/compiler/recipes/definitions.ts +63 -0
  162. package/src/forge/compiler/recipes/index.ts +2 -0
  163. package/src/forge/compiler/recipes/registry.ts +6 -0
  164. package/src/forge/compiler/test-graph/build.ts +11 -3
  165. package/src/forge/compiler/types/app-graph.ts +8 -2
  166. package/src/forge/compiler/types/cli.ts +75 -1
  167. package/src/forge/compiler/types/dev-manifest.ts +4 -0
  168. package/src/forge/compiler/types/emit.ts +2 -0
  169. package/src/forge/compiler/types/frontend-graph.ts +2 -2
  170. package/src/forge/compiler/types/integration.ts +1 -0
  171. package/src/forge/compiler/types/policy-registry.ts +3 -1
  172. package/src/forge/delta/classifier.ts +52 -0
  173. package/src/forge/delta/explain.ts +238 -0
  174. package/src/forge/delta/git-observer.ts +43 -0
  175. package/src/forge/delta/ids.ts +44 -0
  176. package/src/forge/delta/index.ts +25 -0
  177. package/src/forge/delta/recorder.ts +540 -0
  178. package/src/forge/delta/redaction.ts +50 -0
  179. package/src/forge/delta/schema.ts +240 -0
  180. package/src/forge/delta/session.ts +142 -0
  181. package/src/forge/delta/status.ts +1126 -0
  182. package/src/forge/delta/store.ts +3284 -0
  183. package/src/forge/delta/timeline.ts +178 -0
  184. package/src/forge/dev/server.ts +777 -17
  185. package/src/forge/dev/types.ts +15 -1
  186. package/src/forge/dev/watch.ts +17 -7
  187. package/src/forge/dev-console/cycle.ts +233 -21
  188. package/src/forge/dev-console/types.ts +46 -1
  189. package/src/forge/impact/index.ts +46 -8
  190. package/src/forge/impact/types.ts +6 -0
  191. package/src/forge/intent/index.ts +35 -16
  192. package/src/forge/make/index.ts +34 -5
  193. package/src/forge/make/templates.ts +155 -2
  194. package/src/forge/make/types.ts +2 -1
  195. package/src/forge/policy.ts +1 -1
  196. package/src/forge/refactor/index.ts +1 -0
  197. package/src/forge/repair/rules/index.ts +2 -2
  198. package/src/forge/review/index.ts +158 -12
  199. package/src/forge/review/types.ts +15 -0
  200. package/src/forge/runtime/auth/claims.ts +32 -0
  201. package/src/forge/runtime/auth/config.ts +17 -0
  202. package/src/forge/runtime/auth/errors.ts +2 -0
  203. package/src/forge/runtime/auth/evaluate.ts +15 -2
  204. package/src/forge/runtime/auth/resolve.ts +29 -4
  205. package/src/forge/runtime/db/generated-client.ts +13 -2
  206. package/src/forge/runtime/db/memory-adapter.ts +2 -2
  207. package/src/forge/runtime/db/pglite-adapter.ts +77 -2
  208. package/src/forge/runtime/db/postgres-adapter.ts +6 -3
  209. package/src/forge/runtime/executor.ts +129 -16
  210. package/src/forge/runtime/external/bridge.ts +649 -0
  211. package/src/forge/runtime/runner/run-entry.ts +16 -7
  212. package/src/forge/runtime/telemetry/buffer.ts +4 -1
  213. package/src/forge/runtime/telemetry/scrubber.ts +91 -10
  214. package/src/forge/runtime/webhooks/security.ts +189 -0
  215. package/src/forge/server.ts +23 -2
  216. package/src/forge/version.ts +1 -1
  217. package/src/forge/vue/index.ts +407 -0
  218. package/src/forge/workspace/change-summary.ts +243 -0
  219. package/src/forge/workspace/forge-cli.ts +14 -0
  220. package/src/forge/workspace/git-summary.ts +328 -0
  221. package/templates/agent-workroom/AGENTS.md +29 -0
  222. package/templates/agent-workroom/README.md +34 -0
  223. package/templates/agent-workroom/forge.config.ts +3 -0
  224. package/templates/agent-workroom/package.json +33 -0
  225. package/templates/agent-workroom/src/actions/indexAgentSignal.ts +10 -0
  226. package/templates/agent-workroom/src/commands/openWorkroom.ts +61 -0
  227. package/templates/agent-workroom/src/commands/recordAgentSignal.ts +119 -0
  228. package/templates/agent-workroom/src/commands/recordCheckRun.ts +52 -0
  229. package/templates/agent-workroom/src/forge/schema.ts +54 -0
  230. package/templates/agent-workroom/src/policies.ts +6 -0
  231. package/templates/agent-workroom/src/queries/listWorkrooms.ts +11 -0
  232. package/templates/agent-workroom/src/queries/liveWorkroom.ts +63 -0
  233. package/templates/agent-workroom/tsconfig.json +16 -0
  234. package/templates/agent-workroom/web/index.html +12 -0
  235. package/templates/agent-workroom/web/package.json +21 -0
  236. package/templates/agent-workroom/web/src/App.tsx +345 -0
  237. package/templates/agent-workroom/web/src/lib/forge.ts +13 -0
  238. package/templates/agent-workroom/web/src/main.tsx +13 -0
  239. package/templates/agent-workroom/web/src/styles.css +545 -0
  240. package/templates/agent-workroom/web/tsconfig.json +27 -0
  241. package/templates/b2b-support-web/package.json +2 -0
  242. package/templates/b2b-support-web/tsconfig.json +4 -1
  243. package/templates/b2b-support-web/web/package.json +1 -1
  244. package/templates/minimal-web/package.json +2 -1
  245. package/templates/minimal-web/tsconfig.json +3 -1
  246. package/templates/minimal-web/web/package.json +2 -2
  247. package/templates/nuxt-web/.vscode/settings.json +14 -0
  248. package/templates/nuxt-web/README.md +30 -0
  249. package/templates/nuxt-web/forge.config.ts +3 -0
  250. package/templates/nuxt-web/package.json +33 -0
  251. package/templates/nuxt-web/src/actions/logNoteCreated.ts +11 -0
  252. package/templates/nuxt-web/src/commands/createNote.ts +26 -0
  253. package/templates/nuxt-web/src/forge/schema.ts +12 -0
  254. package/templates/nuxt-web/src/policies.ts +6 -0
  255. package/templates/nuxt-web/src/queries/listNotes.ts +8 -0
  256. package/templates/nuxt-web/src/queries/liveNotes.ts +8 -0
  257. package/templates/nuxt-web/tsconfig.json +17 -0
  258. package/templates/nuxt-web/web/app.vue +67 -0
  259. package/templates/nuxt-web/web/components/LiveNotes.vue +89 -0
  260. package/templates/nuxt-web/web/components/NoteComposer.vue +100 -0
  261. package/templates/nuxt-web/web/composables/forge.ts +13 -0
  262. package/templates/nuxt-web/web/composables/useNotes.ts +24 -0
  263. package/templates/nuxt-web/web/nuxt.config.ts +11 -0
  264. package/templates/nuxt-web/web/package.json +17 -0
  265. package/templates/nuxt-web/web/plugins/forge.client.ts +10 -0
  266. package/templates/nuxt-web/web/plugins/forge.server.ts +10 -0
  267. package/templates/nuxt-web/web/server/api/forge-health.get.ts +7 -0
  268. package/templates/nuxt-web/web/tsconfig.json +3 -0
  269. package/src/forge/_generated/actionSubscriptions.json +0 -2
  270. package/src/forge/_generated/actionSubscriptions.ts +0 -10
  271. package/src/forge/_generated/agentAdapterManifest.json +0 -2
  272. package/src/forge/_generated/agentAdapterManifest.ts +0 -73
  273. package/src/forge/_generated/agentContract.json +0 -2
  274. package/src/forge/_generated/agentContract.ts +0 -7829
  275. package/src/forge/_generated/agentQuickstart.md +0 -34
  276. package/src/forge/_generated/agentTools.json +0 -2
  277. package/src/forge/_generated/agentTools.md +0 -16
  278. package/src/forge/_generated/agentTools.ts +0 -12
  279. package/src/forge/_generated/aiContext.ts +0 -125
  280. package/src/forge/_generated/aiModels.json +0 -2
  281. package/src/forge/_generated/aiModels.ts +0 -51
  282. package/src/forge/_generated/aiProviders.json +0 -2
  283. package/src/forge/_generated/aiProviders.ts +0 -23
  284. package/src/forge/_generated/aiRegistry.json +0 -2
  285. package/src/forge/_generated/aiRegistry.ts +0 -31
  286. package/src/forge/_generated/api.json +0 -2
  287. package/src/forge/_generated/api.ts +0 -8
  288. package/src/forge/_generated/appGraph.json +0 -2
  289. package/src/forge/_generated/appGraph.ts +0 -14775
  290. package/src/forge/_generated/appMap.md +0 -55
  291. package/src/forge/_generated/artifactManifest.json +0 -2
  292. package/src/forge/_generated/artifactManifest.ts +0 -7
  293. package/src/forge/_generated/authClaims.json +0 -2
  294. package/src/forge/_generated/authClaims.ts +0 -13
  295. package/src/forge/_generated/authConfig.json +0 -2
  296. package/src/forge/_generated/authConfig.ts +0 -17
  297. package/src/forge/_generated/authContext.ts +0 -23
  298. package/src/forge/_generated/authRegistry.json +0 -2
  299. package/src/forge/_generated/authRegistry.ts +0 -25
  300. package/src/forge/_generated/buildInfo.json +0 -2
  301. package/src/forge/_generated/buildInfo.ts +0 -9
  302. package/src/forge/_generated/capabilityMap.json +0 -2
  303. package/src/forge/_generated/capabilityMap.md +0 -15
  304. package/src/forge/_generated/capabilityMap.ts +0 -17
  305. package/src/forge/_generated/client.ts +0 -282
  306. package/src/forge/_generated/clientApi.ts +0 -9
  307. package/src/forge/_generated/clientManifest.json +0 -2
  308. package/src/forge/_generated/clientManifest.ts +0 -39
  309. package/src/forge/_generated/clientTypes.ts +0 -78
  310. package/src/forge/_generated/configRegistry.json +0 -2
  311. package/src/forge/_generated/configRegistry.ts +0 -4
  312. package/src/forge/_generated/dataGraph.json +0 -2
  313. package/src/forge/_generated/dataGraph.ts +0 -8
  314. package/src/forge/_generated/db.json +0 -2
  315. package/src/forge/_generated/db.ts +0 -2
  316. package/src/forge/_generated/dbSecurityManifest.json +0 -2
  317. package/src/forge/_generated/dbSecurityManifest.ts +0 -15
  318. package/src/forge/_generated/dbSessionContext.json +0 -2
  319. package/src/forge/_generated/dbSessionContext.ts +0 -39
  320. package/src/forge/_generated/deployManifest.json +0 -2
  321. package/src/forge/_generated/deployManifest.ts +0 -14
  322. package/src/forge/_generated/devManifest.json +0 -2
  323. package/src/forge/_generated/devManifest.ts +0 -62
  324. package/src/forge/_generated/envSchema.json +0 -2
  325. package/src/forge/_generated/envSchema.ts +0 -59
  326. package/src/forge/_generated/frontendGraph.json +0 -2
  327. package/src/forge/_generated/frontendGraph.ts +0 -27
  328. package/src/forge/_generated/importGuards.json +0 -2
  329. package/src/forge/_generated/importGuards.ts +0 -686
  330. package/src/forge/_generated/index.ts +0 -68
  331. package/src/forge/_generated/liveProductionManifest.json +0 -2
  332. package/src/forge/_generated/liveProductionManifest.ts +0 -23
  333. package/src/forge/_generated/liveProtocol.json +0 -2
  334. package/src/forge/_generated/liveProtocol.ts +0 -21
  335. package/src/forge/_generated/liveQueryRegistry.json +0 -2
  336. package/src/forge/_generated/liveQueryRegistry.ts +0 -9
  337. package/src/forge/_generated/liveTransportConfig.json +0 -2
  338. package/src/forge/_generated/liveTransportConfig.ts +0 -19
  339. package/src/forge/_generated/makeRegistry.json +0 -2
  340. package/src/forge/_generated/makeRegistry.ts +0 -177
  341. package/src/forge/_generated/makeTemplates.json +0 -2
  342. package/src/forge/_generated/makeTemplates.ts +0 -66
  343. package/src/forge/_generated/mockMap.json +0 -2
  344. package/src/forge/_generated/mockMap.ts +0 -7
  345. package/src/forge/_generated/operationPlaybooks.md +0 -167
  346. package/src/forge/_generated/packageGraph.json +0 -2
  347. package/src/forge/_generated/packageGraph.ts +0 -249334
  348. package/src/forge/_generated/packageUpgradeRegistry.json +0 -2
  349. package/src/forge/_generated/packageUpgradeRegistry.ts +0 -15
  350. package/src/forge/_generated/permissionMatrix.json +0 -2
  351. package/src/forge/_generated/permissionMatrix.ts +0 -7
  352. package/src/forge/_generated/policyRegistry.json +0 -2
  353. package/src/forge/_generated/policyRegistry.ts +0 -11
  354. package/src/forge/_generated/queryRegistry.json +0 -2
  355. package/src/forge/_generated/queryRegistry.ts +0 -9
  356. package/src/forge/_generated/react.d.ts +0 -22
  357. package/src/forge/_generated/react.ts +0 -29
  358. package/src/forge/_generated/reactManifest.json +0 -2
  359. package/src/forge/_generated/reactManifest.ts +0 -19
  360. package/src/forge/_generated/rlsPolicies.json +0 -2
  361. package/src/forge/_generated/rlsPolicies.sql +0 -34
  362. package/src/forge/_generated/rlsPolicies.ts +0 -6
  363. package/src/forge/_generated/runtimeGraph.json +0 -2
  364. package/src/forge/_generated/runtimeGraph.ts +0 -8
  365. package/src/forge/_generated/runtimeMatrix.json +0 -2
  366. package/src/forge/_generated/runtimeMatrix.ts +0 -334130
  367. package/src/forge/_generated/runtimeRegistry.ts +0 -2
  368. package/src/forge/_generated/runtimeRules.md +0 -91
  369. package/src/forge/_generated/secretRegistry.json +0 -2
  370. package/src/forge/_generated/secretRegistry.ts +0 -50
  371. package/src/forge/_generated/secretsContext.ts +0 -11
  372. package/src/forge/_generated/serverApi.ts +0 -10
  373. package/src/forge/_generated/sourceMapManifest.json +0 -2
  374. package/src/forge/_generated/sourceMapManifest.ts +0 -7
  375. package/src/forge/_generated/sqlPlan.json +0 -2
  376. package/src/forge/_generated/sqlPlan.ts +0 -88
  377. package/src/forge/_generated/subscriptionManifest.json +0 -2
  378. package/src/forge/_generated/subscriptionManifest.ts +0 -7
  379. package/src/forge/_generated/symbolicationManifest.json +0 -2
  380. package/src/forge/_generated/symbolicationManifest.ts +0 -17
  381. package/src/forge/_generated/telemetryRegistry.json +0 -2
  382. package/src/forge/_generated/telemetryRegistry.ts +0 -9
  383. package/src/forge/_generated/telemetrySinks.json +0 -2
  384. package/src/forge/_generated/telemetrySinks.ts +0 -11
  385. package/src/forge/_generated/tenantScope.json +0 -2
  386. package/src/forge/_generated/tenantScope.ts +0 -8
  387. package/src/forge/_generated/testGraph.json +0 -2
  388. package/src/forge/_generated/testGraph.ts +0 -3118
  389. package/src/forge/_generated/testPlanRegistry.json +0 -2
  390. package/src/forge/_generated/testPlanRegistry.ts +0 -33
  391. package/src/forge/_generated/uiRoutes.json +0 -2
  392. package/src/forge/_generated/uiRoutes.ts +0 -16
  393. package/src/forge/_generated/uiScenarios.json +0 -2
  394. package/src/forge/_generated/uiScenarios.ts +0 -30
  395. package/src/forge/_generated/uiTestManifest.json +0 -2
  396. package/src/forge/_generated/uiTestManifest.ts +0 -27
  397. package/src/forge/_generated/workflowRegistry.json +0 -2
  398. package/src/forge/_generated/workflowRegistry.ts +0 -9
  399. package/src/forge/_generated/workflowSubscriptions.json +0 -2
  400. package/src/forge/_generated/workflowSubscriptions.ts +0 -10
@@ -16,11 +16,17 @@ export interface ClientManifest {
16
16
  queries: string;
17
17
  commands: string;
18
18
  liveQueries: string;
19
+ externalQueries: string;
20
+ externalCommands: string;
19
21
  };
20
22
  react: {
21
23
  entrypoint: string;
22
24
  hooks: string[];
23
25
  };
26
+ vue: {
27
+ entrypoint: string;
28
+ composables: string[];
29
+ };
24
30
  excluded: {
25
31
  actions: string[];
26
32
  workflows: string[];
@@ -41,6 +47,18 @@ export interface ReactManifest {
41
47
  clientSafe: true;
42
48
  }
43
49
 
50
+ export interface VueManifest {
51
+ schemaVersion: string;
52
+ generatorVersion: string;
53
+ inputHash: string;
54
+ entrypoint: string;
55
+ composables: string[];
56
+ queries: string[];
57
+ commands: string[];
58
+ liveQueries: string[];
59
+ clientSafe: true;
60
+ }
61
+
44
62
  const SERVER_ADAPTER_SUFFIX = ".server.ts";
45
63
 
46
64
  function collectServerAdapters(classified: ClassifiedPackage[]): string[] {
@@ -101,6 +119,8 @@ export function buildClientManifest(
101
119
  queries: "POST /queries/:name",
102
120
  commands: "POST /commands/:name",
103
121
  liveQueries: "GET /live/:name",
122
+ externalQueries: "POST /external/:service/queries/:name",
123
+ externalCommands: "POST /external/:service/commands/:name",
104
124
  },
105
125
  react: {
106
126
  entrypoint: "src/forge/_generated/react.ts",
@@ -113,6 +133,17 @@ export function buildClientManifest(
113
133
  "useLiveQuery",
114
134
  ],
115
135
  },
136
+ vue: {
137
+ entrypoint: "src/forge/_generated/vue.ts",
138
+ composables: [
139
+ "provideForge",
140
+ "useForgeClient",
141
+ "useForgeAuth",
142
+ "useForgeQuery",
143
+ "useForgeCommand",
144
+ "useForgeLiveQuery",
145
+ ],
146
+ },
116
147
  excluded: {
117
148
  actions,
118
149
  workflows,
@@ -149,3 +180,31 @@ export function buildReactManifest(clientManifest: ClientManifest): ReactManifes
149
180
  clientSafe: true,
150
181
  };
151
182
  }
183
+
184
+ export function buildVueManifest(clientManifest: ClientManifest): VueManifest {
185
+ const composables = [
186
+ "provideForge",
187
+ "useForgeClient",
188
+ "useForgeAuth",
189
+ "useForgeQuery",
190
+ "useForgeCommand",
191
+ "useForgeLiveQuery",
192
+ ];
193
+
194
+ return {
195
+ schemaVersion: "1.0.0",
196
+ generatorVersion: GENERATOR_VERSION,
197
+ inputHash: hashStable(
198
+ canonicalJson({
199
+ clientInputHash: clientManifest.inputHash,
200
+ composables,
201
+ }),
202
+ ),
203
+ entrypoint: "src/forge/_generated/vue.ts",
204
+ composables,
205
+ queries: clientManifest.queries,
206
+ commands: clientManifest.commands,
207
+ liveQueries: clientManifest.liveQueries,
208
+ clientSafe: true,
209
+ };
210
+ }
@@ -1,4 +1,4 @@
1
- import type { ClientManifest, ReactManifest } from "./build-manifest.ts";
1
+ import type { ClientManifest, ReactManifest, VueManifest } from "./build-manifest.ts";
2
2
 
3
3
  export function renderClientTypesTs(): string {
4
4
  return `export type ForgeStaticAuth = {
@@ -52,6 +52,22 @@ export class ForgeError extends Error {
52
52
  export type QueryName = keyof typeof import("./api.ts").api.queries;
53
53
  export type CommandName = keyof typeof import("./api.ts").api.commands;
54
54
  export type LiveQueryName = keyof typeof import("./api.ts").api.liveQueries;
55
+ export type ExternalCommandName = string;
56
+ export type ExternalQueryName = string;
57
+ export type ExternalRuntimeRefObject = {
58
+ service: string;
59
+ name: string;
60
+ kind?: "command" | "query";
61
+ language?: string;
62
+ framework?: string;
63
+ transport?: string;
64
+ };
65
+ export type ExternalCommandRef =
66
+ | ExternalCommandName
67
+ | ExternalRuntimeRefObject;
68
+ export type ExternalQueryRef =
69
+ | ExternalQueryName
70
+ | ExternalRuntimeRefObject;
55
71
 
56
72
  export type LiveSnapshot<T> = {
57
73
  subscriptionId: string;
@@ -70,6 +86,8 @@ export type ForgeClient = {
70
86
  readonly lastTraceId?: string;
71
87
  query<Name extends QueryName>(name: Name, args: unknown): Promise<unknown>;
72
88
  command<Name extends CommandName>(name: Name, args: unknown): Promise<unknown>;
89
+ externalQuery<Name extends ExternalQueryRef>(name: Name, args: unknown): Promise<unknown>;
90
+ externalCommand<Name extends ExternalCommandRef>(name: Name, args: unknown): Promise<unknown>;
73
91
  liveQuery<Name extends LiveQueryName>(
74
92
  name: Name,
75
93
  args: unknown,
@@ -87,6 +105,8 @@ import type {
87
105
  ForgeAuthProvider,
88
106
  ForgeClient,
89
107
  ForgeClientConfig,
108
+ ExternalCommandRef,
109
+ ExternalQueryRef,
90
110
  LiveQueryOptions,
91
111
  LiveSnapshot,
92
112
  } from "./clientTypes.ts";
@@ -102,6 +122,11 @@ export type {
102
122
  QueryName,
103
123
  CommandName,
104
124
  LiveQueryName,
125
+ ExternalCommandName,
126
+ ExternalQueryName,
127
+ ExternalRuntimeRefObject,
128
+ ExternalCommandRef,
129
+ ExternalQueryRef,
105
130
  ForgeResolvedAuth,
106
131
  LiveQueryOptions,
107
132
  LiveSnapshot,
@@ -179,6 +204,16 @@ function parseJsonPayload(body: unknown): {
179
204
  };
180
205
  }
181
206
 
207
+ function normalizeExternalRef(
208
+ ref: ExternalCommandRef | ExternalQueryRef,
209
+ ): { service: string; name: string } {
210
+ if (typeof ref === "string") {
211
+ const [service, ...entryParts] = ref.split(".");
212
+ return { service: service ?? "", name: entryParts.join(".") };
213
+ }
214
+ return { service: ref.service, name: ref.name };
215
+ }
216
+
182
217
  class ForgeHttpClient implements ForgeClient {
183
218
  lastTraceId?: string;
184
219
 
@@ -192,6 +227,14 @@ class ForgeHttpClient implements ForgeClient {
192
227
  return this.invoke("commands", name, args);
193
228
  }
194
229
 
230
+ externalQuery(name: ExternalQueryRef, args: unknown): Promise<unknown> {
231
+ return this.invokeExternal("queries", name, args);
232
+ }
233
+
234
+ externalCommand(name: ExternalCommandRef, args: unknown): Promise<unknown> {
235
+ return this.invokeExternal("commands", name, args);
236
+ }
237
+
195
238
  liveQuery(
196
239
  name: string,
197
240
  args: unknown,
@@ -268,6 +311,68 @@ class ForgeHttpClient implements ForgeClient {
268
311
  return payload.result;
269
312
  }
270
313
 
314
+ private async invokeExternal(
315
+ kind: "queries" | "commands",
316
+ name: ExternalCommandRef | ExternalQueryRef,
317
+ args: unknown,
318
+ ): Promise<unknown> {
319
+ const normalized = normalizeExternalRef(name);
320
+ const serviceName = normalized.service;
321
+ const entryName = normalized.name;
322
+ if (!serviceName || !entryName) {
323
+ throw new ForgeError(\`External runtime name must be service.entry\`, {
324
+ code: "FORGE_EXTERNAL_RUNTIME_NOT_FOUND",
325
+ });
326
+ }
327
+ const baseUrl = this.config.url.replace(/\\/$/, "");
328
+ const url = \`\${baseUrl}/external/\${encodeURIComponent(serviceName)}/\${kind}/\${encodeURIComponent(entryName)}\`;
329
+ return this.invokeUrl(url, args);
330
+ }
331
+
332
+ private async invokeUrl(url: string, args: unknown): Promise<unknown> {
333
+ const authHeaders = await resolveAuthHeaders(this.config.auth);
334
+
335
+ const response = await fetch(url, {
336
+ method: "POST",
337
+ headers: {
338
+ "Content-Type": "application/json",
339
+ ...authHeaders,
340
+ },
341
+ body: JSON.stringify({ args }),
342
+ });
343
+
344
+ let body: unknown;
345
+ try {
346
+ body = await response.json();
347
+ } catch {
348
+ throw new ForgeError(\`HTTP \${response.status}\`, {
349
+ code: "FORGE_HTTP_ERROR",
350
+ status: response.status,
351
+ });
352
+ }
353
+
354
+ const payload = parseJsonPayload(body);
355
+ this.lastTraceId = payload.traceId;
356
+
357
+ if (!response.ok || payload.ok === false) {
358
+ const diagnostic = payload.diagnostics?.find((entry) => entry.code);
359
+ const code =
360
+ payload.error?.code ?? diagnostic?.code ?? "FORGE_REQUEST_FAILED";
361
+ const message =
362
+ payload.error?.message ??
363
+ diagnostic?.message ??
364
+ \`Request failed with status \${response.status}\`;
365
+ throw new ForgeError(message, {
366
+ code,
367
+ traceId: payload.traceId,
368
+ status: response.status,
369
+ details: payload.error?.details ?? payload.diagnostics,
370
+ });
371
+ }
372
+
373
+ return payload.result;
374
+ }
375
+
271
376
  private async openLiveQuery(
272
377
  name: string,
273
378
  args: unknown,
@@ -297,19 +402,24 @@ class ForgeHttpClient implements ForgeClient {
297
402
  const reader = response.body.getReader();
298
403
  let buffer = "";
299
404
 
300
- while (!signal.aborted) {
301
- const { done, value } = await reader.read();
302
- if (done) {
303
- break;
304
- }
305
- buffer += decoder.decode(value, { stream: true });
306
- let boundary = buffer.indexOf("\\n\\n");
307
- while (boundary !== -1) {
308
- const frame = buffer.slice(0, boundary);
309
- buffer = buffer.slice(boundary + 2);
310
- this.handleSseFrame(frame, onSnapshot, onError);
311
- boundary = buffer.indexOf("\\n\\n");
405
+ try {
406
+ while (!signal.aborted) {
407
+ const { done, value } = await reader.read();
408
+ if (done) {
409
+ break;
410
+ }
411
+ buffer += decoder.decode(value, { stream: true });
412
+ let boundary = buffer.indexOf("\\n\\n");
413
+ while (boundary !== -1) {
414
+ const frame = buffer.slice(0, boundary);
415
+ buffer = buffer.slice(boundary + 2);
416
+ this.handleSseFrame(frame, onSnapshot, onError);
417
+ boundary = buffer.indexOf("\\n\\n");
418
+ }
312
419
  }
420
+ } finally {
421
+ await reader.cancel().catch(() => undefined);
422
+ reader.releaseLock();
313
423
  }
314
424
  }
315
425
 
@@ -430,3 +540,68 @@ export declare const useLiveQuery: import("forge/react").ForgeReactBindings["use
430
540
  export function renderReactManifestTs(manifest: ReactManifest): string {
431
541
  return `export const reactManifest = ${JSON.stringify(manifest, null, 2)} as const;\n`;
432
542
  }
543
+
544
+ export function renderVueTs(): string {
545
+ return `import { createForgeVueBindings } from "forge/vue";
546
+ import { createForgeClient } from "./client.ts";
547
+
548
+ export type {
549
+ ForgeDevAuthConfig,
550
+ ForgeVueAuth,
551
+ ForgeVueAuthProvider,
552
+ ForgeVueBindings,
553
+ ForgeVueClient,
554
+ ForgeVueClientConfig,
555
+ ForgeVueError,
556
+ ForgeVuePluginOptions,
557
+ UseForgeCommandOptions,
558
+ UseForgeCommandResult,
559
+ UseForgeLiveQueryOptions,
560
+ UseForgeLiveQueryResult,
561
+ UseForgeQueryOptions,
562
+ UseForgeQueryResult,
563
+ } from "forge/vue";
564
+
565
+ const forgeVue = createForgeVueBindings(createForgeClient);
566
+
567
+ export const ForgeVuePlugin = forgeVue.ForgeVuePlugin;
568
+ export const provideForge = forgeVue.provideForge;
569
+ export const useForgeClient = forgeVue.useForgeClient;
570
+ export const useForgeAuth = forgeVue.useForgeAuth;
571
+ export const useForgeQuery = forgeVue.useForgeQuery;
572
+ export const useForgeCommand = forgeVue.useForgeCommand;
573
+ export const useForgeLiveQuery = forgeVue.useForgeLiveQuery;
574
+ `;
575
+ }
576
+
577
+ export function renderVueDts(): string {
578
+ return `export type {
579
+ ForgeDevAuthConfig,
580
+ ForgeVueAuth,
581
+ ForgeVueAuthProvider,
582
+ ForgeVueBindings,
583
+ ForgeVueClient,
584
+ ForgeVueClientConfig,
585
+ ForgeVueError,
586
+ ForgeVuePluginOptions,
587
+ UseForgeCommandOptions,
588
+ UseForgeCommandResult,
589
+ UseForgeLiveQueryOptions,
590
+ UseForgeLiveQueryResult,
591
+ UseForgeQueryOptions,
592
+ UseForgeQueryResult,
593
+ } from "forge/vue";
594
+
595
+ export declare const ForgeVuePlugin: import("forge/vue").ForgeVueBindings["ForgeVuePlugin"];
596
+ export declare const provideForge: import("forge/vue").ForgeVueBindings["provideForge"];
597
+ export declare const useForgeClient: import("forge/vue").ForgeVueBindings["useForgeClient"];
598
+ export declare const useForgeAuth: import("forge/vue").ForgeVueBindings["useForgeAuth"];
599
+ export declare const useForgeQuery: import("forge/vue").ForgeVueBindings["useForgeQuery"];
600
+ export declare const useForgeCommand: import("forge/vue").ForgeVueBindings["useForgeCommand"];
601
+ export declare const useForgeLiveQuery: import("forge/vue").ForgeVueBindings["useForgeLiveQuery"];
602
+ `;
603
+ }
604
+
605
+ export function renderVueManifestTs(manifest: VueManifest): string {
606
+ return `export const vueManifest = ${JSON.stringify(manifest, null, 2)} as const;\n`;
607
+ }
@@ -36,7 +36,7 @@ function unwrapStringLiteral(node: SyntaxNode): string | null {
36
36
  return null;
37
37
  }
38
38
 
39
- function extractFieldsFromObject(objectNode: SyntaxNode): DataField[] {
39
+ function extractFieldsFromObject(objectNode: SyntaxNode, options: { skipConfigName?: boolean } = {}): DataField[] {
40
40
  const fields: DataField[] = [];
41
41
 
42
42
  for (const child of objectNode.namedChildren) {
@@ -55,7 +55,7 @@ function extractFieldsFromObject(objectNode: SyntaxNode): DataField[] {
55
55
  ? keyNode.text
56
56
  : unwrapStringLiteral(keyNode);
57
57
 
58
- if (!key || key === "name") {
58
+ if (!key || (options.skipConfigName && key === "name")) {
59
59
  continue;
60
60
  }
61
61
 
@@ -131,7 +131,7 @@ function parseCallArguments(callNode: SyntaxNode): ParsedDefineTable | null {
131
131
 
132
132
  if (first.type === "object") {
133
133
  const tableName = extractNameFromObject(first);
134
- const fields = extractFieldsFromObject(first);
134
+ const fields = extractFieldsFromObject(first, { skipConfigName: true });
135
135
  return { tableName, fields };
136
136
  }
137
137
 
@@ -42,6 +42,61 @@ function stableSortTables(tables: DataTable[]): DataTable[] {
42
42
  return [...tables].sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
43
43
  }
44
44
 
45
+ function stableSortTableChangesByReferences(tables: SqlChange[]): SqlChange[] {
46
+ const orderedInput = [...tables].sort((a, b) => {
47
+ const tableA = a.table ?? "";
48
+ const tableB = b.table ?? "";
49
+ return tableA < tableB ? -1 : tableA > tableB ? 1 : 0;
50
+ });
51
+ const byName = new Map<string, SqlChange>();
52
+
53
+ for (const table of orderedInput) {
54
+ if (table.table) {
55
+ byName.set(table.table, table);
56
+ }
57
+ }
58
+
59
+ const pending = new Set(byName.keys());
60
+ const emitted = new Set<string>();
61
+ const ordered: SqlChange[] = [];
62
+
63
+ while (pending.size > 0) {
64
+ let progressed = false;
65
+
66
+ for (const tableName of pending) {
67
+ const table = byName.get(tableName);
68
+ if (!table) {
69
+ pending.delete(tableName);
70
+ continue;
71
+ }
72
+
73
+ const dependencies = (table.columns ?? [])
74
+ .map((column) => column.references?.table)
75
+ .filter((dependency): dependency is string => Boolean(dependency))
76
+ .filter((dependency) => dependency !== tableName && byName.has(dependency));
77
+
78
+ if (dependencies.every((dependency) => emitted.has(dependency))) {
79
+ ordered.push(table);
80
+ emitted.add(tableName);
81
+ pending.delete(tableName);
82
+ progressed = true;
83
+ }
84
+ }
85
+
86
+ if (!progressed) {
87
+ for (const tableName of pending) {
88
+ const table = byName.get(tableName);
89
+ if (table) {
90
+ ordered.push(table);
91
+ }
92
+ }
93
+ break;
94
+ }
95
+ }
96
+
97
+ return ordered;
98
+ }
99
+
45
100
  function parseFieldType(
46
101
  field: DataField,
47
102
  tableName: string,
@@ -254,6 +309,7 @@ function buildTableChange(table: DataTable, diagnostics: Diagnostic[]): SqlChang
254
309
  return {
255
310
  kind: "create_table",
256
311
  table: tableName,
312
+ accessName: table.name,
257
313
  columns,
258
314
  sql: buildCreateTableSql(tableName, columns),
259
315
  };
@@ -342,6 +398,8 @@ export function buildSqlPlan(dataGraph: DataGraph): SqlPlan {
342
398
  }
343
399
  }
344
400
 
401
+ const orderedTables = stableSortTableChangesByReferences(tables);
402
+
345
403
  indexes.sort((a, b) => {
346
404
  const nameA = a.index?.name ?? "";
347
405
  const nameB = b.index?.name ?? "";
@@ -364,7 +422,7 @@ export function buildSqlPlan(dataGraph: DataGraph): SqlPlan {
364
422
  const payload = {
365
423
  schemaVersion: SQL_PLAN_SCHEMA_VERSION,
366
424
  systemTables: systemTables.map((change) => change.sql),
367
- tables: tables.map((change) => change.sql),
425
+ tables: orderedTables.map((change) => change.sql),
368
426
  indexes: indexes.map((change) => change.sql),
369
427
  };
370
428
 
@@ -376,7 +434,7 @@ export function buildSqlPlan(dataGraph: DataGraph): SqlPlan {
376
434
  migrationId,
377
435
  checksum,
378
436
  systemTables,
379
- tables,
437
+ tables: orderedTables,
380
438
  indexes,
381
439
  diagnostics: diagnostics.sort((a, b) => {
382
440
  const fileA = a.file ?? "";
@@ -15,6 +15,7 @@ export function serializeSqlPlanJson(plan: SqlPlan): string {
15
15
  tables: plan.tables.map((change) => ({
16
16
  kind: change.kind,
17
17
  table: change.table,
18
+ accessName: change.accessName,
18
19
  columns: change.columns,
19
20
  sql: change.sql,
20
21
  })),
@@ -69,6 +70,9 @@ export function buildTableMap(
69
70
  ? { tenantScoped: true, tenantIdColumn }
70
71
  : {}),
71
72
  };
73
+ if (change.accessName && change.accessName !== change.table) {
74
+ map[change.accessName] = map[change.table]!;
75
+ }
72
76
  }
73
77
 
74
78
  return map;
@@ -21,6 +21,7 @@ export interface IndexDef {
21
21
  export interface SqlChange {
22
22
  kind: "create_table" | "create_index" | "create_sequence";
23
23
  table?: string;
24
+ accessName?: string;
24
25
  columns?: ColumnDef[];
25
26
  index?: IndexDef;
26
27
  sql: string;
@@ -14,6 +14,7 @@ export const FORGE_AUTH_INVALID_AUDIENCE = "FORGE_AUTH_INVALID_AUDIENCE" as cons
14
14
  export const FORGE_AUTH_TOKEN_EXPIRED = "FORGE_AUTH_TOKEN_EXPIRED" as const;
15
15
  export const FORGE_AUTH_JWKS_FAILED = "FORGE_AUTH_JWKS_FAILED" as const;
16
16
  export const FORGE_AUTH_CLAIM_MISSING = "FORGE_AUTH_CLAIM_MISSING" as const;
17
+ export const FORGE_AUTH_CLAIM_INVALID = "FORGE_AUTH_CLAIM_INVALID" as const;
17
18
  export const FORGE_AUTH_TENANT_MISSING = "FORGE_AUTH_TENANT_MISSING" as const;
18
19
  export const FORGE_AUTH_DEV_HEADERS_IN_PRODUCTION =
19
20
  "FORGE_AUTH_DEV_HEADERS_IN_PRODUCTION" as const;
@@ -26,11 +27,20 @@ export const FORGE_DUP_RUNTIME_ENTRY = "FORGE_DUP_RUNTIME_ENTRY" as const;
26
27
  export const FORGE_RUNTIME_UNRESOLVABLE = "FORGE_RUNTIME_UNRESOLVABLE" as const;
27
28
  export const FORGE_RUNTIME_NOT_FOUND = "FORGE_RUNTIME_NOT_FOUND" as const;
28
29
  export const FORGE_RUNTIME_GUARD_BLOCKED = "FORGE_RUNTIME_GUARD_BLOCKED" as const;
30
+ export const FORGE_EXTERNAL_RUNTIME_NOT_FOUND =
31
+ "FORGE_EXTERNAL_RUNTIME_NOT_FOUND" as const;
32
+ export const FORGE_EXTERNAL_RUNTIME_UNSUPPORTED =
33
+ "FORGE_EXTERNAL_RUNTIME_UNSUPPORTED" as const;
34
+ export const FORGE_EXTERNAL_RUNTIME_FAILED =
35
+ "FORGE_EXTERNAL_RUNTIME_FAILED" as const;
36
+ export const FORGE_EXTERNAL_RUNTIME_BAD_RESPONSE =
37
+ "FORGE_EXTERNAL_RUNTIME_BAD_RESPONSE" as const;
29
38
  export const FORGE_DEV_SERVER_ERROR = "FORGE_DEV_SERVER_ERROR" as const;
30
39
  export const FORGE_DEV_WATCH_FAILED = "FORGE_DEV_WATCH_FAILED" as const;
31
40
  export const FORGE_DEV_INVOKE_FAILED = "FORGE_DEV_INVOKE_FAILED" as const;
32
41
  export const FORGE_DEV_DOCTOR_MISSING_ARTIFACT =
33
42
  "FORGE_DEV_DOCTOR_MISSING_ARTIFACT" as const;
43
+ export const FORGE_DEV_DB_RESET = "FORGE_DEV_DB_RESET" as const;
34
44
  export const FORGE_DB_CONNECT_FAILED = "FORGE_DB_CONNECT_FAILED" as const;
35
45
  export const FORGE_DB_MIGRATION_FAILED = "FORGE_DB_MIGRATION_FAILED" as const;
36
46
  export const FORGE_DB_UNSUPPORTED_FIELD_TYPE =
@@ -47,6 +57,7 @@ export const FORGE_RLS_UNSUPPORTED_TENANT_TYPE =
47
57
  export const FORGE_RLS_FORCE_DISABLED = "FORGE_RLS_FORCE_DISABLED" as const;
48
58
  export const FORGE_RLS_APPLY_FAILED = "FORGE_RLS_APPLY_FAILED" as const;
49
59
  export const FORGE_RLS_TEST_FAILED = "FORGE_RLS_TEST_FAILED" as const;
60
+ export const FORGE_RLS_MUTATION_FAILED = "FORGE_RLS_MUTATION_FAILED" as const;
50
61
  export const FORGE_RLS_SESSION_CONTEXT_MISSING =
51
62
  "FORGE_RLS_SESSION_CONTEXT_MISSING" as const;
52
63
  export const FORGE_RLS_SESSION_CONTEXT_UNSAFE =
@@ -90,6 +101,8 @@ export const FORGE_RELEASE_DIRTY_WORKTREE =
90
101
  export const FORGE_RELEASE_GENERATED_DRIFT =
91
102
  "FORGE_RELEASE_GENERATED_DRIFT" as const;
92
103
  export const FORGE_RELEASE_ID_MISSING = "FORGE_RELEASE_ID_MISSING" as const;
104
+ export const FORGE_RELEASE_PACKAGE_PACK_FAILED =
105
+ "FORGE_RELEASE_PACKAGE_PACK_FAILED" as const;
93
106
  export const FORGE_SOURCEMAP_PUBLIC_EXPOSURE =
94
107
  "FORGE_SOURCEMAP_PUBLIC_EXPOSURE" as const;
95
108
  export const FORGE_SOURCEMAP_UPLOAD_MISSING =
@@ -214,6 +227,8 @@ export const FORGE_TEST_DOCKER_REQUIRED = "FORGE_TEST_DOCKER_REQUIRED" as const;
214
227
  export const FORGE_TEST_BROWSER_REQUIRED = "FORGE_TEST_BROWSER_REQUIRED" as const;
215
228
  export const FORGE_VERIFY_CHANGED_INCOMPLETE =
216
229
  "FORGE_VERIFY_CHANGED_INCOMPLETE" as const;
230
+ export const FORGE_VERIFY_NO_TESTS_SELECTED =
231
+ "FORGE_VERIFY_NO_TESTS_SELECTED" as const;
217
232
  export const FORGE_VERIFY_SCRIPT_TIMEOUT =
218
233
  "FORGE_VERIFY_SCRIPT_TIMEOUT" as const;
219
234
  export const FORGE_REPAIR_SOURCE_NOT_FOUND =
@@ -315,6 +330,12 @@ export const FORGE_TELEMETRY_PAYLOAD_TRUNCATED =
315
330
  "FORGE_TELEMETRY_PAYLOAD_TRUNCATED" as const;
316
331
  export const FORGE_TELEMETRY_SINK_FAILED = "FORGE_TELEMETRY_SINK_FAILED" as const;
317
332
  export const FORGE_TELEMETRY_UNKNOWN_SINK = "FORGE_TELEMETRY_UNKNOWN_SINK" as const;
333
+ export const FORGE_WEBHOOK_SIGNATURE_INVALID =
334
+ "FORGE_WEBHOOK_SIGNATURE_INVALID" as const;
335
+ export const FORGE_WEBHOOK_TIMESTAMP_INVALID =
336
+ "FORGE_WEBHOOK_TIMESTAMP_INVALID" as const;
337
+ export const FORGE_WEBHOOK_REPLAY_DETECTED =
338
+ "FORGE_WEBHOOK_REPLAY_DETECTED" as const;
318
339
  export const FORGE_POLICY_DENIED = "FORGE_POLICY_DENIED" as const;
319
340
  export const FORGE_POLICY_MISSING = "FORGE_POLICY_MISSING" as const;
320
341
  export const FORGE_POLICY_UNKNOWN = "FORGE_POLICY_UNKNOWN" as const;
@@ -338,6 +359,7 @@ export const FORGE_AI_SECRET_MISSING = "FORGE_AI_SECRET_MISSING" as const;
338
359
  export const FORGE_AI_DYNAMIC_PROVIDER = "FORGE_AI_DYNAMIC_PROVIDER" as const;
339
360
  export const FORGE_AI_GENERATION_FAILED = "FORGE_AI_GENERATION_FAILED" as const;
340
361
  export const FORGE_AI_USAGE_UNAVAILABLE = "FORGE_AI_USAGE_UNAVAILABLE" as const;
362
+ export const FORGE_AI_REDTEAM_FAILED = "FORGE_AI_REDTEAM_FAILED" as const;
341
363
  export const FORGE_QUERY_WRITE_FORBIDDEN = "FORGE_QUERY_WRITE_FORBIDDEN" as const;
342
364
  export const FORGE_QUERY_EMIT_FORBIDDEN = "FORGE_QUERY_EMIT_FORBIDDEN" as const;
343
365
  export const FORGE_QUERY_SECRET_FORBIDDEN = "FORGE_QUERY_SECRET_FORBIDDEN" as const;
@@ -379,6 +401,7 @@ export const DIAGNOSTIC_CODES = [
379
401
  FORGE_AUTH_TOKEN_EXPIRED,
380
402
  FORGE_AUTH_JWKS_FAILED,
381
403
  FORGE_AUTH_CLAIM_MISSING,
404
+ FORGE_AUTH_CLAIM_INVALID,
382
405
  FORGE_AUTH_TENANT_MISSING,
383
406
  FORGE_AUTH_DEV_HEADERS_IN_PRODUCTION,
384
407
  FORGE_AUTH_MODE_INVALID,
@@ -389,10 +412,15 @@ export const DIAGNOSTIC_CODES = [
389
412
  FORGE_RUNTIME_UNRESOLVABLE,
390
413
  FORGE_RUNTIME_NOT_FOUND,
391
414
  FORGE_RUNTIME_GUARD_BLOCKED,
415
+ FORGE_EXTERNAL_RUNTIME_NOT_FOUND,
416
+ FORGE_EXTERNAL_RUNTIME_UNSUPPORTED,
417
+ FORGE_EXTERNAL_RUNTIME_FAILED,
418
+ FORGE_EXTERNAL_RUNTIME_BAD_RESPONSE,
392
419
  FORGE_DEV_SERVER_ERROR,
393
420
  FORGE_DEV_WATCH_FAILED,
394
421
  FORGE_DEV_INVOKE_FAILED,
395
422
  FORGE_DEV_DOCTOR_MISSING_ARTIFACT,
423
+ FORGE_DEV_DB_RESET,
396
424
  FORGE_DB_CONNECT_FAILED,
397
425
  FORGE_DB_MIGRATION_FAILED,
398
426
  FORGE_DB_UNSUPPORTED_FIELD_TYPE,
@@ -406,6 +434,7 @@ export const DIAGNOSTIC_CODES = [
406
434
  FORGE_RLS_FORCE_DISABLED,
407
435
  FORGE_RLS_APPLY_FAILED,
408
436
  FORGE_RLS_TEST_FAILED,
437
+ FORGE_RLS_MUTATION_FAILED,
409
438
  FORGE_RLS_SESSION_CONTEXT_MISSING,
410
439
  FORGE_RLS_SESSION_CONTEXT_UNSAFE,
411
440
  FORGE_DB_SUPERUSER_RUNTIME,
@@ -433,6 +462,7 @@ export const DIAGNOSTIC_CODES = [
433
462
  FORGE_RELEASE_DIRTY_WORKTREE,
434
463
  FORGE_RELEASE_GENERATED_DRIFT,
435
464
  FORGE_RELEASE_ID_MISSING,
465
+ FORGE_RELEASE_PACKAGE_PACK_FAILED,
436
466
  FORGE_SOURCEMAP_PUBLIC_EXPOSURE,
437
467
  FORGE_SOURCEMAP_UPLOAD_MISSING,
438
468
  FORGE_SOURCEMAP_UPLOAD_FAILED,
@@ -510,6 +540,7 @@ export const DIAGNOSTIC_CODES = [
510
540
  FORGE_TEST_DOCKER_REQUIRED,
511
541
  FORGE_TEST_BROWSER_REQUIRED,
512
542
  FORGE_VERIFY_CHANGED_INCOMPLETE,
543
+ FORGE_VERIFY_NO_TESTS_SELECTED,
513
544
  FORGE_REPAIR_SOURCE_NOT_FOUND,
514
545
  FORGE_REPAIR_UNKNOWN_FAILURE,
515
546
  FORGE_REPAIR_NO_RULE_MATCHED,
@@ -575,6 +606,9 @@ export const DIAGNOSTIC_CODES = [
575
606
  FORGE_TELEMETRY_PAYLOAD_TRUNCATED,
576
607
  FORGE_TELEMETRY_SINK_FAILED,
577
608
  FORGE_TELEMETRY_UNKNOWN_SINK,
609
+ FORGE_WEBHOOK_SIGNATURE_INVALID,
610
+ FORGE_WEBHOOK_TIMESTAMP_INVALID,
611
+ FORGE_WEBHOOK_REPLAY_DETECTED,
578
612
  FORGE_POLICY_DENIED,
579
613
  FORGE_POLICY_MISSING,
580
614
  FORGE_POLICY_UNKNOWN,
@@ -595,6 +629,7 @@ export const DIAGNOSTIC_CODES = [
595
629
  FORGE_AI_DYNAMIC_PROVIDER,
596
630
  FORGE_AI_GENERATION_FAILED,
597
631
  FORGE_AI_USAGE_UNAVAILABLE,
632
+ FORGE_AI_REDTEAM_FAILED,
598
633
  FORGE_QUERY_WRITE_FORBIDDEN,
599
634
  FORGE_QUERY_EMIT_FORBIDDEN,
600
635
  FORGE_QUERY_SECRET_FORBIDDEN,
@@ -49,7 +49,7 @@ function defaultGuidanceForCode(code: string): DiagnosticGuidance | null {
49
49
  }
50
50
  if (code === "FORGE_SECRET_DIRECT_PROCESS_ENV") {
51
51
  return {
52
- fixHint: "Use ctx.secrets or ctx.config instead of reading process.env directly from app runtime code.",
52
+ fixHint: "Use ctx.secrets or ctx.config for Forge runtime secrets/config; public frontend bridge env may use the framework's public env surface.",
53
53
  suggestedCommands: ["forge repair diagnose --diagnostic FORGE_SECRET_DIRECT_PROCESS_ENV --json", "forge refactor replace-process-env <ENV_NAME> --dry-run --json"],
54
54
  docs: ["src/forge/_generated/runtimeRules.md"],
55
55
  };
@@ -71,7 +71,7 @@ function defaultGuidanceForCode(code: string): DiagnosticGuidance | null {
71
71
  if (code.startsWith("FORGE_RLS_")) {
72
72
  return {
73
73
  fixHint: "Inspect generated RLS SQL and validate tenant isolation before applying migrations.",
74
- suggestedCommands: ["forge rls check --json", "forge rls print --json"],
74
+ suggestedCommands: ["forge rls check --json", "forge rls test --db postgres --json"],
75
75
  docs: ["src/forge/_generated/agentContract.json"],
76
76
  };
77
77
  }
@@ -106,7 +106,12 @@ function defaultGuidanceForCode(code: string): DiagnosticGuidance | null {
106
106
  if (code.startsWith("FORGE_FRONTEND_")) {
107
107
  return {
108
108
  fixHint: "Use the generated frontend bridge and inspect src/forge/_generated/frontendGraph.json before editing UI wiring.",
109
- suggestedCommands: ["forge inspect frontend --json", "forge make ui --framework vite --dry-run --json", "forge generate"],
109
+ suggestedCommands: [
110
+ "forge inspect frontend --json",
111
+ "forge make ui --framework vite --dry-run --json",
112
+ "forge make ui --framework nuxt --dry-run --json",
113
+ "forge generate",
114
+ ],
110
115
  docs: ["src/forge/_generated/frontendGraph.json", "AGENTS.md"],
111
116
  };
112
117
  }
@@ -37,6 +37,8 @@ export {
37
37
  FORGE_LIVEQUERY_UNKNOWN,
38
38
  FORGE_LIVEQUERY_SUBSCRIPTION_FAILED,
39
39
  FORGE_LIVEQUERY_RERUN_FAILED,
40
+ FORGE_RELEASE_PACKAGE_PACK_FAILED,
41
+ FORGE_VERIFY_NO_TESTS_SELECTED,
40
42
  DIAGNOSTIC_CODES,
41
43
  } from "./codes.ts";
42
44
  export type { DiagnosticCode } from "./codes.ts";