forgeos 0.1.0-alpha.2 → 0.1.0-alpha.20

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 (406) hide show
  1. package/.npmignore +4 -0
  2. package/AGENTS.md +168 -81
  3. package/CHANGELOG.md +199 -0
  4. package/README.md +88 -14
  5. package/adapters/go/README.md +23 -0
  6. package/adapters/go/go.mod +3 -0
  7. package/adapters/go/http.go +149 -0
  8. package/adapters/go/registry.go +234 -0
  9. package/adapters/go/types.go +136 -0
  10. package/adapters/java/README.md +68 -0
  11. package/adapters/java/pom.xml +34 -0
  12. package/adapters/java/src/main/java/dev/forgeos/adapter/Auth.java +20 -0
  13. package/adapters/java/src/main/java/dev/forgeos/adapter/Diagnostic.java +16 -0
  14. package/adapters/java/src/main/java/dev/forgeos/adapter/Entry.java +38 -0
  15. package/adapters/java/src/main/java/dev/forgeos/adapter/EntryKind.java +16 -0
  16. package/adapters/java/src/main/java/dev/forgeos/adapter/ErrorInfo.java +4 -0
  17. package/adapters/java/src/main/java/dev/forgeos/adapter/Forge.java +94 -0
  18. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeCall.java +12 -0
  19. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeContext.java +11 -0
  20. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHandler.java +8 -0
  21. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHttpHandler.java +179 -0
  22. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeRegistry.java +121 -0
  23. package/adapters/java/src/main/java/dev/forgeos/adapter/Json.java +14 -0
  24. package/adapters/java/src/main/java/dev/forgeos/adapter/Manifest.java +14 -0
  25. package/adapters/java/src/main/java/dev/forgeos/adapter/RequestEnvelope.java +6 -0
  26. package/adapters/java/src/main/java/dev/forgeos/adapter/ResponseEnvelope.java +25 -0
  27. package/adapters/java/src/main/java/dev/forgeos/adapter/Risk.java +18 -0
  28. package/adapters/java/src/main/java/dev/forgeos/adapter/Schemas.java +36 -0
  29. package/adapters/java/src/main/java/dev/forgeos/adapter/Service.java +65 -0
  30. package/adapters/java/src/main/java/dev/forgeos/adapter/TransactionMode.java +18 -0
  31. package/adapters/java/src/main/java/dev/forgeos/adapter/TypedForgeHandler.java +6 -0
  32. package/adapters/java/target/classes/dev/forgeos/adapter/Auth.class +0 -0
  33. package/adapters/java/target/classes/dev/forgeos/adapter/Diagnostic.class +0 -0
  34. package/adapters/java/target/classes/dev/forgeos/adapter/Entry.class +0 -0
  35. package/adapters/java/target/classes/dev/forgeos/adapter/EntryKind.class +0 -0
  36. package/adapters/java/target/classes/dev/forgeos/adapter/ErrorInfo.class +0 -0
  37. package/adapters/java/target/classes/dev/forgeos/adapter/Forge.class +0 -0
  38. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeCall.class +0 -0
  39. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeContext.class +0 -0
  40. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeHandler.class +0 -0
  41. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeHttpHandler.class +0 -0
  42. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry$EntryOption.class +0 -0
  43. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry$RegisteredEntry.class +0 -0
  44. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry$RegistryOption.class +0 -0
  45. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry.class +0 -0
  46. package/adapters/java/target/classes/dev/forgeos/adapter/Json.class +0 -0
  47. package/adapters/java/target/classes/dev/forgeos/adapter/Manifest.class +0 -0
  48. package/adapters/java/target/classes/dev/forgeos/adapter/RequestEnvelope.class +0 -0
  49. package/adapters/java/target/classes/dev/forgeos/adapter/ResponseEnvelope.class +0 -0
  50. package/adapters/java/target/classes/dev/forgeos/adapter/Risk.class +0 -0
  51. package/adapters/java/target/classes/dev/forgeos/adapter/Schemas.class +0 -0
  52. package/adapters/java/target/classes/dev/forgeos/adapter/Service.class +0 -0
  53. package/adapters/java/target/classes/dev/forgeos/adapter/TransactionMode.class +0 -0
  54. package/adapters/java/target/classes/dev/forgeos/adapter/TypedForgeHandler.class +0 -0
  55. package/adapters/java/target/forge-java-adapter-0.1.0-alpha.11.jar +0 -0
  56. package/adapters/java/target/maven-archiver/pom.properties +3 -0
  57. package/adapters/java/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +23 -0
  58. package/adapters/java/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +20 -0
  59. package/adapters/java-spring-boot-starter/README.md +32 -0
  60. package/adapters/java-spring-boot-starter/pom.xml +36 -0
  61. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeCommand.java +22 -0
  62. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeExternalService.java +15 -0
  63. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeQuery.java +16 -0
  64. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.java +18 -0
  65. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.java +16 -0
  66. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringRuntime.java +104 -0
  67. package/adapters/java-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
  68. package/adapters/java-spring-boot-starter/target/classes/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
  69. package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeCommand.class +0 -0
  70. package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeExternalService.class +0 -0
  71. package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeQuery.class +0 -0
  72. package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.class +0 -0
  73. package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.class +0 -0
  74. package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeSpringRuntime.class +0 -0
  75. package/adapters/java-spring-boot-starter/target/forge-java-spring-boot-starter-0.1.0-alpha.11.jar +0 -0
  76. package/adapters/java-spring-boot-starter/target/maven-archiver/pom.properties +3 -0
  77. package/adapters/java-spring-boot-starter/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +6 -0
  78. package/adapters/java-spring-boot-starter/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +6 -0
  79. package/bin/forge.mjs +18 -0
  80. package/docs/changelog.md +212 -0
  81. package/docs/forge-protocol.md +189 -0
  82. package/examples/go-billing/go.mod +7 -0
  83. package/examples/go-billing/main.go +120 -0
  84. package/examples/java-billing/pom.xml +52 -0
  85. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/CreateInvoiceInput.java +4 -0
  86. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Invoice.java +11 -0
  87. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Main.java +127 -0
  88. package/examples/java-billing/target/classes/dev/forgeos/examples/billing/CreateInvoiceInput.class +0 -0
  89. package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Invoice.class +0 -0
  90. package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Main$EmptyInput.class +0 -0
  91. package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Main$Options.class +0 -0
  92. package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Main.class +0 -0
  93. package/examples/java-billing/target/java-billing-0.1.0-alpha.11-all.jar +0 -0
  94. package/examples/java-billing/target/java-billing-0.1.0-alpha.11.jar +0 -0
  95. package/examples/java-billing/target/maven-archiver/pom.properties +3 -0
  96. package/examples/java-billing/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +5 -0
  97. package/examples/java-billing/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +3 -0
  98. package/package.json +29 -7
  99. package/schemas/forge-manifest.schema.json +57 -0
  100. package/src/forge/_generated/releaseManifest.json +1 -2
  101. package/src/forge/_generated/releaseManifest.ts +3 -3
  102. package/src/forge/agent-adapters/index.ts +1511 -123
  103. package/src/forge/agent-adapters/types.ts +216 -1
  104. package/src/forge/agent-memory/bridge.ts +1192 -0
  105. package/src/forge/agent-memory/context-pack.ts +151 -0
  106. package/src/forge/agent-memory/hook-runner.ts +312 -0
  107. package/src/forge/agent-memory/mcp.ts +224 -0
  108. package/src/forge/agent-memory/normalize.ts +498 -0
  109. package/src/forge/agent-memory/redaction.ts +103 -0
  110. package/src/forge/agent-memory/sources/claude-code.ts +51 -0
  111. package/src/forge/agent-memory/sources/codex-hook-runner.mjs +84 -0
  112. package/src/forge/agent-memory/sources/codex.ts +119 -0
  113. package/src/forge/agent-memory/sources/cursor.ts +35 -0
  114. package/src/forge/agent-memory/types.ts +191 -0
  115. package/src/forge/bench.ts +248 -0
  116. package/src/forge/brownfield-import/index.ts +736 -0
  117. package/src/forge/brownfield-import/types.ts +127 -0
  118. package/src/forge/cair/action-journal.ts +61 -0
  119. package/src/forge/cair/action-parser.ts +314 -0
  120. package/src/forge/cair/action-validator.ts +40 -0
  121. package/src/forge/cair/actions.ts +1818 -0
  122. package/src/forge/cair/format.ts +77 -0
  123. package/src/forge/cair/index.ts +106 -0
  124. package/src/forge/cair/query.ts +478 -0
  125. package/src/forge/cair/snapshot.ts +315 -0
  126. package/src/forge/cair/types.ts +248 -0
  127. package/src/forge/cli/ai.ts +671 -3
  128. package/src/forge/cli/auth.ts +36 -1
  129. package/src/forge/cli/build.ts +20 -4
  130. package/src/forge/cli/changed.ts +300 -0
  131. package/src/forge/cli/codex-app-server.ts +877 -0
  132. package/src/forge/cli/commands.ts +1285 -7
  133. package/src/forge/cli/db.ts +121 -2
  134. package/src/forge/cli/deps.ts +79 -12
  135. package/src/forge/cli/dev.ts +502 -38
  136. package/src/forge/cli/docs.ts +265 -0
  137. package/src/forge/cli/handoff.ts +250 -0
  138. package/src/forge/cli/index.ts +1 -0
  139. package/src/forge/cli/main.ts +49 -3
  140. package/src/forge/cli/new.ts +3 -1
  141. package/src/forge/cli/next-actions.ts +23 -0
  142. package/src/forge/cli/output.ts +290 -1
  143. package/src/forge/cli/parse.ts +770 -36
  144. package/src/forge/cli/query.ts +32 -0
  145. package/src/forge/cli/release.ts +35 -11
  146. package/src/forge/cli/rls.ts +568 -17
  147. package/src/forge/cli/run.ts +41 -0
  148. package/src/forge/cli/secrets.ts +46 -1
  149. package/src/forge/cli/security.ts +381 -0
  150. package/src/forge/cli/self-host.ts +56 -14
  151. package/src/forge/cli/studio.ts +2163 -0
  152. package/src/forge/cli/verify.ts +1422 -32
  153. package/src/forge/compiler/agent-contract/build.ts +725 -41
  154. package/src/forge/compiler/agent-contract/types.ts +85 -0
  155. package/src/forge/compiler/ai-registry/build.ts +62 -1
  156. package/src/forge/compiler/ai-registry/constants.ts +1 -1
  157. package/src/forge/compiler/ai-registry/parse.ts +168 -5
  158. package/src/forge/compiler/api-surface/build.ts +47 -0
  159. package/src/forge/compiler/app-graph/build.ts +68 -8
  160. package/src/forge/compiler/app-graph/extract.ts +107 -0
  161. package/src/forge/compiler/app-graph/forge-apis.ts +1 -0
  162. package/src/forge/compiler/app-graph/module-graph.ts +73 -78
  163. package/src/forge/compiler/app-graph/parser.ts +24 -24
  164. package/src/forge/compiler/app-graph/profile.ts +26 -0
  165. package/src/forge/compiler/app-graph/versions.ts +1 -1
  166. package/src/forge/compiler/classifier/capabilities.ts +3 -2
  167. package/src/forge/compiler/classifier/classify.ts +32 -8
  168. package/src/forge/compiler/classifier/secrets.ts +3 -2
  169. package/src/forge/compiler/classifier/signals.ts +91 -1
  170. package/src/forge/compiler/client-sdk/build-manifest.ts +59 -0
  171. package/src/forge/compiler/client-sdk/render-client.ts +188 -13
  172. package/src/forge/compiler/data-graph/parse.ts +3 -3
  173. package/src/forge/compiler/data-graph/sql/ddl.ts +60 -2
  174. package/src/forge/compiler/data-graph/sql/serialize.ts +4 -0
  175. package/src/forge/compiler/data-graph/sql/types.ts +1 -0
  176. package/src/forge/compiler/dev-manifest/build.ts +3 -0
  177. package/src/forge/compiler/diagnostics/codes.ts +35 -0
  178. package/src/forge/compiler/diagnostics/create.ts +8 -3
  179. package/src/forge/compiler/diagnostics/index.ts +2 -0
  180. package/src/forge/compiler/emitter/barrel.ts +3 -0
  181. package/src/forge/compiler/emitter/render.ts +5 -0
  182. package/src/forge/compiler/external-manifest/registry.ts +205 -0
  183. package/src/forge/compiler/external-manifest/types.ts +91 -0
  184. package/src/forge/compiler/external-manifest/validate.ts +373 -0
  185. package/src/forge/compiler/frontend-graph/build.ts +85 -13
  186. package/src/forge/compiler/integration/add.ts +498 -22
  187. package/src/forge/compiler/integration/snapshot.ts +2 -0
  188. package/src/forge/compiler/make-registry/build.ts +19 -7
  189. package/src/forge/compiler/orchestrator/plan-profile.ts +23 -0
  190. package/src/forge/compiler/orchestrator/plan.ts +78 -7
  191. package/src/forge/compiler/orchestrator/profile.ts +65 -0
  192. package/src/forge/compiler/orchestrator/run.ts +97 -31
  193. package/src/forge/compiler/orchestrator/serialize.ts +101 -8
  194. package/src/forge/compiler/package-graph/compiler.ts +13 -3
  195. package/src/forge/compiler/package-manager/adapter.ts +4 -1
  196. package/src/forge/compiler/package-manager/commands.ts +4 -0
  197. package/src/forge/compiler/package-manager/executor.ts +30 -1
  198. package/src/forge/compiler/policy-registry/build.ts +44 -1
  199. package/src/forge/compiler/test-graph/build.ts +11 -3
  200. package/src/forge/compiler/types/ai-registry.ts +25 -1
  201. package/src/forge/compiler/types/app-graph.ts +9 -2
  202. package/src/forge/compiler/types/cli.ts +76 -1
  203. package/src/forge/compiler/types/dev-manifest.ts +3 -0
  204. package/src/forge/compiler/types/frontend-graph.ts +2 -2
  205. package/src/forge/delta/classifier.ts +52 -0
  206. package/src/forge/delta/explain.ts +126 -0
  207. package/src/forge/delta/git-observer.ts +43 -0
  208. package/src/forge/delta/ids.ts +44 -0
  209. package/src/forge/delta/index.ts +13 -0
  210. package/src/forge/delta/recorder.ts +402 -0
  211. package/src/forge/delta/redaction.ts +50 -0
  212. package/src/forge/delta/schema.ts +240 -0
  213. package/src/forge/delta/session.ts +142 -0
  214. package/src/forge/delta/status.ts +489 -0
  215. package/src/forge/delta/store.ts +2975 -0
  216. package/src/forge/delta/timeline.ts +104 -0
  217. package/src/forge/dev/server.ts +768 -15
  218. package/src/forge/dev/types.ts +15 -1
  219. package/src/forge/dev/watch.ts +17 -7
  220. package/src/forge/dev-console/cycle.ts +233 -21
  221. package/src/forge/dev-console/types.ts +46 -1
  222. package/src/forge/impact/index.ts +46 -8
  223. package/src/forge/impact/types.ts +6 -0
  224. package/src/forge/intent/index.ts +35 -16
  225. package/src/forge/make/index.ts +149 -6
  226. package/src/forge/make/templates.ts +343 -2
  227. package/src/forge/make/types.ts +3 -1
  228. package/src/forge/refactor/index.ts +1 -0
  229. package/src/forge/repair/rules/index.ts +2 -2
  230. package/src/forge/review/index.ts +158 -12
  231. package/src/forge/review/types.ts +15 -0
  232. package/src/forge/runtime/ai/context.ts +210 -5
  233. package/src/forge/runtime/ai/types.ts +70 -0
  234. package/src/forge/runtime/auth/claims.ts +32 -0
  235. package/src/forge/runtime/auth/errors.ts +2 -0
  236. package/src/forge/runtime/context/create-context.ts +30 -6
  237. package/src/forge/runtime/db/generated-client.ts +13 -2
  238. package/src/forge/runtime/db/memory-adapter.ts +2 -2
  239. package/src/forge/runtime/db/pglite-adapter.ts +77 -2
  240. package/src/forge/runtime/db/postgres-adapter.ts +6 -3
  241. package/src/forge/runtime/executor.ts +112 -2
  242. package/src/forge/runtime/external/bridge.ts +649 -0
  243. package/src/forge/runtime/runner/run-entry.ts +16 -7
  244. package/src/forge/runtime/telemetry/scrubber.ts +91 -10
  245. package/src/forge/runtime/webhooks/security.ts +184 -0
  246. package/src/forge/server.ts +100 -2
  247. package/src/forge/version.ts +1 -1
  248. package/src/forge/vue/index.ts +407 -0
  249. package/src/forge/workspace/change-summary.ts +209 -0
  250. package/src/forge/workspace/forge-cli.ts +14 -0
  251. package/src/forge/workspace/git-summary.ts +279 -0
  252. package/templates/agent-workroom/AGENTS.md +29 -0
  253. package/templates/agent-workroom/README.md +34 -0
  254. package/templates/agent-workroom/forge.config.ts +3 -0
  255. package/templates/agent-workroom/package.json +33 -0
  256. package/templates/agent-workroom/src/actions/indexAgentSignal.ts +10 -0
  257. package/templates/agent-workroom/src/commands/openWorkroom.ts +61 -0
  258. package/templates/agent-workroom/src/commands/recordAgentSignal.ts +119 -0
  259. package/templates/agent-workroom/src/commands/recordCheckRun.ts +52 -0
  260. package/templates/agent-workroom/src/forge/schema.ts +54 -0
  261. package/templates/agent-workroom/src/policies.ts +6 -0
  262. package/templates/agent-workroom/src/queries/listWorkrooms.ts +11 -0
  263. package/templates/agent-workroom/src/queries/liveWorkroom.ts +63 -0
  264. package/templates/agent-workroom/tsconfig.json +16 -0
  265. package/templates/agent-workroom/web/index.html +12 -0
  266. package/templates/agent-workroom/web/package.json +21 -0
  267. package/templates/agent-workroom/web/src/App.tsx +345 -0
  268. package/templates/agent-workroom/web/src/lib/forge.ts +13 -0
  269. package/templates/agent-workroom/web/src/main.tsx +13 -0
  270. package/templates/agent-workroom/web/src/styles.css +545 -0
  271. package/templates/agent-workroom/web/tsconfig.json +27 -0
  272. package/templates/b2b-support-web/package.json +2 -0
  273. package/templates/b2b-support-web/tsconfig.json +4 -1
  274. package/templates/b2b-support-web/web/package.json +1 -1
  275. package/templates/minimal-web/package.json +2 -1
  276. package/templates/minimal-web/tsconfig.json +3 -1
  277. package/templates/minimal-web/web/package.json +2 -2
  278. package/src/forge/_generated/actionSubscriptions.json +0 -2
  279. package/src/forge/_generated/actionSubscriptions.ts +0 -10
  280. package/src/forge/_generated/agentAdapterManifest.json +0 -2
  281. package/src/forge/_generated/agentAdapterManifest.ts +0 -73
  282. package/src/forge/_generated/agentContract.json +0 -2
  283. package/src/forge/_generated/agentContract.ts +0 -7696
  284. package/src/forge/_generated/agentQuickstart.md +0 -32
  285. package/src/forge/_generated/aiContext.ts +0 -59
  286. package/src/forge/_generated/aiModels.json +0 -2
  287. package/src/forge/_generated/aiModels.ts +0 -35
  288. package/src/forge/_generated/aiProviders.json +0 -2
  289. package/src/forge/_generated/aiProviders.ts +0 -23
  290. package/src/forge/_generated/aiRegistry.json +0 -2
  291. package/src/forge/_generated/aiRegistry.ts +0 -29
  292. package/src/forge/_generated/api.json +0 -2
  293. package/src/forge/_generated/api.ts +0 -8
  294. package/src/forge/_generated/appGraph.json +0 -2
  295. package/src/forge/_generated/appGraph.ts +0 -14667
  296. package/src/forge/_generated/appMap.md +0 -35
  297. package/src/forge/_generated/artifactManifest.json +0 -2
  298. package/src/forge/_generated/artifactManifest.ts +0 -7
  299. package/src/forge/_generated/authClaims.json +0 -2
  300. package/src/forge/_generated/authClaims.ts +0 -13
  301. package/src/forge/_generated/authConfig.json +0 -2
  302. package/src/forge/_generated/authConfig.ts +0 -17
  303. package/src/forge/_generated/authContext.ts +0 -23
  304. package/src/forge/_generated/authRegistry.json +0 -2
  305. package/src/forge/_generated/authRegistry.ts +0 -25
  306. package/src/forge/_generated/buildInfo.json +0 -2
  307. package/src/forge/_generated/buildInfo.ts +0 -9
  308. package/src/forge/_generated/capabilityMap.json +0 -2
  309. package/src/forge/_generated/capabilityMap.md +0 -15
  310. package/src/forge/_generated/capabilityMap.ts +0 -17
  311. package/src/forge/_generated/client.ts +0 -282
  312. package/src/forge/_generated/clientApi.ts +0 -9
  313. package/src/forge/_generated/clientManifest.json +0 -2
  314. package/src/forge/_generated/clientManifest.ts +0 -39
  315. package/src/forge/_generated/clientTypes.ts +0 -78
  316. package/src/forge/_generated/configRegistry.json +0 -2
  317. package/src/forge/_generated/configRegistry.ts +0 -4
  318. package/src/forge/_generated/dataGraph.json +0 -2
  319. package/src/forge/_generated/dataGraph.ts +0 -8
  320. package/src/forge/_generated/db.json +0 -2
  321. package/src/forge/_generated/db.ts +0 -2
  322. package/src/forge/_generated/dbSecurityManifest.json +0 -2
  323. package/src/forge/_generated/dbSecurityManifest.ts +0 -15
  324. package/src/forge/_generated/dbSessionContext.json +0 -2
  325. package/src/forge/_generated/dbSessionContext.ts +0 -39
  326. package/src/forge/_generated/deployManifest.json +0 -2
  327. package/src/forge/_generated/deployManifest.ts +0 -14
  328. package/src/forge/_generated/devManifest.json +0 -2
  329. package/src/forge/_generated/devManifest.ts +0 -47
  330. package/src/forge/_generated/envSchema.json +0 -2
  331. package/src/forge/_generated/envSchema.ts +0 -59
  332. package/src/forge/_generated/frontendGraph.json +0 -2
  333. package/src/forge/_generated/frontendGraph.ts +0 -27
  334. package/src/forge/_generated/importGuards.json +0 -2
  335. package/src/forge/_generated/importGuards.ts +0 -686
  336. package/src/forge/_generated/index.ts +0 -67
  337. package/src/forge/_generated/liveProductionManifest.json +0 -2
  338. package/src/forge/_generated/liveProductionManifest.ts +0 -23
  339. package/src/forge/_generated/liveProtocol.json +0 -2
  340. package/src/forge/_generated/liveProtocol.ts +0 -21
  341. package/src/forge/_generated/liveQueryRegistry.json +0 -2
  342. package/src/forge/_generated/liveQueryRegistry.ts +0 -9
  343. package/src/forge/_generated/liveTransportConfig.json +0 -2
  344. package/src/forge/_generated/liveTransportConfig.ts +0 -19
  345. package/src/forge/_generated/makeRegistry.json +0 -2
  346. package/src/forge/_generated/makeRegistry.ts +0 -163
  347. package/src/forge/_generated/makeTemplates.json +0 -2
  348. package/src/forge/_generated/makeTemplates.ts +0 -61
  349. package/src/forge/_generated/mockMap.json +0 -2
  350. package/src/forge/_generated/mockMap.ts +0 -7
  351. package/src/forge/_generated/operationPlaybooks.md +0 -147
  352. package/src/forge/_generated/packageGraph.json +0 -2
  353. package/src/forge/_generated/packageGraph.ts +0 -245249
  354. package/src/forge/_generated/packageUpgradeRegistry.json +0 -2
  355. package/src/forge/_generated/packageUpgradeRegistry.ts +0 -15
  356. package/src/forge/_generated/permissionMatrix.json +0 -2
  357. package/src/forge/_generated/permissionMatrix.ts +0 -7
  358. package/src/forge/_generated/policyRegistry.json +0 -2
  359. package/src/forge/_generated/policyRegistry.ts +0 -11
  360. package/src/forge/_generated/queryRegistry.json +0 -2
  361. package/src/forge/_generated/queryRegistry.ts +0 -9
  362. package/src/forge/_generated/react.d.ts +0 -22
  363. package/src/forge/_generated/react.ts +0 -29
  364. package/src/forge/_generated/reactManifest.json +0 -2
  365. package/src/forge/_generated/reactManifest.ts +0 -19
  366. package/src/forge/_generated/rlsPolicies.json +0 -2
  367. package/src/forge/_generated/rlsPolicies.sql +0 -34
  368. package/src/forge/_generated/rlsPolicies.ts +0 -6
  369. package/src/forge/_generated/runtimeGraph.json +0 -2
  370. package/src/forge/_generated/runtimeGraph.ts +0 -8
  371. package/src/forge/_generated/runtimeMatrix.json +0 -2
  372. package/src/forge/_generated/runtimeMatrix.ts +0 -327385
  373. package/src/forge/_generated/runtimeRegistry.ts +0 -2
  374. package/src/forge/_generated/runtimeRules.md +0 -79
  375. package/src/forge/_generated/secretRegistry.json +0 -2
  376. package/src/forge/_generated/secretRegistry.ts +0 -50
  377. package/src/forge/_generated/secretsContext.ts +0 -11
  378. package/src/forge/_generated/serverApi.ts +0 -10
  379. package/src/forge/_generated/sourceMapManifest.json +0 -2
  380. package/src/forge/_generated/sourceMapManifest.ts +0 -7
  381. package/src/forge/_generated/sqlPlan.json +0 -2
  382. package/src/forge/_generated/sqlPlan.ts +0 -88
  383. package/src/forge/_generated/subscriptionManifest.json +0 -2
  384. package/src/forge/_generated/subscriptionManifest.ts +0 -7
  385. package/src/forge/_generated/symbolicationManifest.json +0 -2
  386. package/src/forge/_generated/symbolicationManifest.ts +0 -17
  387. package/src/forge/_generated/telemetryRegistry.json +0 -2
  388. package/src/forge/_generated/telemetryRegistry.ts +0 -9
  389. package/src/forge/_generated/telemetrySinks.json +0 -2
  390. package/src/forge/_generated/telemetrySinks.ts +0 -11
  391. package/src/forge/_generated/tenantScope.json +0 -2
  392. package/src/forge/_generated/tenantScope.ts +0 -8
  393. package/src/forge/_generated/testGraph.json +0 -2
  394. package/src/forge/_generated/testGraph.ts +0 -3108
  395. package/src/forge/_generated/testPlanRegistry.json +0 -2
  396. package/src/forge/_generated/testPlanRegistry.ts +0 -33
  397. package/src/forge/_generated/uiRoutes.json +0 -2
  398. package/src/forge/_generated/uiRoutes.ts +0 -16
  399. package/src/forge/_generated/uiScenarios.json +0 -2
  400. package/src/forge/_generated/uiScenarios.ts +0 -30
  401. package/src/forge/_generated/uiTestManifest.json +0 -2
  402. package/src/forge/_generated/uiTestManifest.ts +0 -27
  403. package/src/forge/_generated/workflowRegistry.json +0 -2
  404. package/src/forge/_generated/workflowRegistry.ts +0 -9
  405. package/src/forge/_generated/workflowSubscriptions.json +0 -2
  406. package/src/forge/_generated/workflowSubscriptions.ts +0 -10
@@ -15,6 +15,64 @@ export interface PackageSignals {
15
15
  nativeAddonEvidence: string[];
16
16
  }
17
17
 
18
+ export interface SignalProfile {
19
+ calls: number;
20
+ totalMs: number;
21
+ entrypoints: number;
22
+ exports: number;
23
+ textFragments: number;
24
+ corpusBytes: number;
25
+ packageCount: number;
26
+ topPackages: SignalPackageProfile[];
27
+ }
28
+
29
+ export interface SignalPackageProfile {
30
+ packageName: string;
31
+ calls: number;
32
+ totalMs: number;
33
+ entrypoints: number;
34
+ exports: number;
35
+ textFragments: number;
36
+ corpusBytes: number;
37
+ }
38
+
39
+ let activeProfile: SignalProfile | undefined;
40
+ let activePackageProfiles: Map<string, SignalPackageProfile> | undefined;
41
+
42
+ export function resetSignalProfile(): void {
43
+ activeProfile = {
44
+ calls: 0,
45
+ totalMs: 0,
46
+ entrypoints: 0,
47
+ exports: 0,
48
+ textFragments: 0,
49
+ corpusBytes: 0,
50
+ packageCount: 0,
51
+ topPackages: [],
52
+ };
53
+ activePackageProfiles = new Map();
54
+ }
55
+
56
+ export function getSignalProfile(): SignalProfile | undefined {
57
+ if (!activeProfile) {
58
+ return undefined;
59
+ }
60
+ const topPackages = [...(activePackageProfiles?.values() ?? [])]
61
+ .sort((a, b) => b.totalMs - a.totalMs)
62
+ .slice(0, 10)
63
+ .map((entry) => ({ ...entry }));
64
+ return {
65
+ ...activeProfile,
66
+ packageCount: activePackageProfiles?.size ?? 0,
67
+ topPackages,
68
+ };
69
+ }
70
+
71
+ export function clearSignalProfile(): void {
72
+ activeProfile = undefined;
73
+ activePackageProfiles = undefined;
74
+ }
75
+
18
76
  const NODE_BUILTIN_PATTERNS = [
19
77
  /\bnode:/,
20
78
  /\brequire\s*\(\s*["'](?:fs|child_process|net|http|https|dns|tls|os|crypto)["']/,
@@ -89,9 +147,12 @@ function collectEnvVars(text: string): string[] {
89
147
  }
90
148
 
91
149
  export function gatherSignals(api: PackageApi): PackageSignals {
150
+ const started = activeProfile ? performance.now() : 0;
92
151
  const texts: string[] = [];
152
+ let exportCount = 0;
93
153
  for (const ep of api.entrypoints) {
94
154
  for (const exp of ep.exports) {
155
+ exportCount += 1;
95
156
  texts.push(exp.signature);
96
157
  if (exp.overloads) texts.push(...exp.overloads);
97
158
  if (exp.declarations) texts.push(...exp.declarations);
@@ -112,7 +173,7 @@ export function gatherSignals(api: PackageApi): PackageSignals {
112
173
  const nativeAddonEvidence = collectMatches(corpus, NATIVE_ADDON_PATTERNS);
113
174
  const envVars = collectEnvVars(corpus);
114
175
 
115
- return {
176
+ const result = {
116
177
  usesNodeBuiltins: nodeBuiltins.length > 0,
117
178
  nodeBuiltins,
118
179
  usesNetwork: networkEvidence.length > 0,
@@ -126,4 +187,33 @@ export function gatherSignals(api: PackageApi): PackageSignals {
126
187
  usesNativeAddon: nativeAddonEvidence.length > 0,
127
188
  nativeAddonEvidence,
128
189
  };
190
+
191
+ if (activeProfile) {
192
+ const durationMs = performance.now() - started;
193
+ activeProfile.calls += 1;
194
+ activeProfile.totalMs += durationMs;
195
+ activeProfile.entrypoints += api.entrypoints.length;
196
+ activeProfile.exports += exportCount;
197
+ activeProfile.textFragments += texts.length;
198
+ activeProfile.corpusBytes += corpus.length;
199
+
200
+ const packageProfile = activePackageProfiles?.get(api.name) ?? {
201
+ packageName: api.name,
202
+ calls: 0,
203
+ totalMs: 0,
204
+ entrypoints: 0,
205
+ exports: 0,
206
+ textFragments: 0,
207
+ corpusBytes: 0,
208
+ };
209
+ packageProfile.calls += 1;
210
+ packageProfile.totalMs += durationMs;
211
+ packageProfile.entrypoints += api.entrypoints.length;
212
+ packageProfile.exports += exportCount;
213
+ packageProfile.textFragments += texts.length;
214
+ packageProfile.corpusBytes += corpus.length;
215
+ activePackageProfiles?.set(api.name, packageProfile);
216
+ }
217
+
218
+ return result;
129
219
  }
@@ -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;
@@ -61,6 +61,9 @@ function buildRoutes(
61
61
  { method: "GET", path: "/health", purpose: "health" },
62
62
  { method: "GET", path: "/entries", purpose: "entries" },
63
63
  { method: "GET", path: "/queries", purpose: "queries" },
64
+ { method: "POST", path: "/ai/agents/chat", purpose: "ai-agent-chat" },
65
+ { method: "POST", path: "/ai/agents/run", purpose: "ai-agent-run" },
66
+ { method: "GET", path: "/ai/providers", purpose: "ai-providers" },
64
67
  { method: "GET", path: "/workflows", purpose: "workflows" },
65
68
  { method: "GET", path: "/workflows/runs", purpose: "workflow-runs" },
66
69
  { method: "POST", path: "/workflows/process", purpose: "workflow-process" },