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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/.npmignore +10 -0
  2. package/AGENTS.md +142 -90
  3. package/CHANGELOG.md +433 -0
  4. package/LICENSE +21 -0
  5. package/README.md +67 -8
  6. package/adapters/go/README.md +23 -0
  7. package/adapters/go/go.mod +3 -0
  8. package/adapters/go/http.go +149 -0
  9. package/adapters/go/registry.go +234 -0
  10. package/adapters/go/types.go +136 -0
  11. package/adapters/java/README.md +68 -0
  12. package/adapters/java/pom.xml +34 -0
  13. package/adapters/java/src/main/java/dev/forgeos/adapter/Auth.java +20 -0
  14. package/adapters/java/src/main/java/dev/forgeos/adapter/Diagnostic.java +16 -0
  15. package/adapters/java/src/main/java/dev/forgeos/adapter/Entry.java +38 -0
  16. package/adapters/java/src/main/java/dev/forgeos/adapter/EntryKind.java +16 -0
  17. package/adapters/java/src/main/java/dev/forgeos/adapter/ErrorInfo.java +4 -0
  18. package/adapters/java/src/main/java/dev/forgeos/adapter/Forge.java +94 -0
  19. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeCall.java +12 -0
  20. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeContext.java +11 -0
  21. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHandler.java +8 -0
  22. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHttpHandler.java +179 -0
  23. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeRegistry.java +121 -0
  24. package/adapters/java/src/main/java/dev/forgeos/adapter/Json.java +14 -0
  25. package/adapters/java/src/main/java/dev/forgeos/adapter/Manifest.java +14 -0
  26. package/adapters/java/src/main/java/dev/forgeos/adapter/RequestEnvelope.java +6 -0
  27. package/adapters/java/src/main/java/dev/forgeos/adapter/ResponseEnvelope.java +25 -0
  28. package/adapters/java/src/main/java/dev/forgeos/adapter/Risk.java +18 -0
  29. package/adapters/java/src/main/java/dev/forgeos/adapter/Schemas.java +36 -0
  30. package/adapters/java/src/main/java/dev/forgeos/adapter/Service.java +65 -0
  31. package/adapters/java/src/main/java/dev/forgeos/adapter/TransactionMode.java +18 -0
  32. package/adapters/java/src/main/java/dev/forgeos/adapter/TypedForgeHandler.java +6 -0
  33. package/adapters/java-spring-boot-starter/README.md +32 -0
  34. package/adapters/java-spring-boot-starter/pom.xml +36 -0
  35. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeCommand.java +22 -0
  36. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeExternalService.java +15 -0
  37. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeQuery.java +16 -0
  38. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.java +18 -0
  39. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.java +16 -0
  40. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringRuntime.java +104 -0
  41. package/adapters/java-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
  42. package/bin/forge.mjs +18 -0
  43. package/docs/cair-protocol.md +103 -0
  44. package/docs/changelog.md +548 -0
  45. package/docs/forge-protocol.md +189 -0
  46. package/examples/go-billing/go.mod +7 -0
  47. package/examples/go-billing/main.go +120 -0
  48. package/examples/java-billing/pom.xml +52 -0
  49. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/CreateInvoiceInput.java +4 -0
  50. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Invoice.java +11 -0
  51. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Main.java +127 -0
  52. package/package.json +31 -3
  53. package/schemas/forge-manifest.schema.json +57 -0
  54. package/src/forge/_generated/releaseManifest.json +1 -2
  55. package/src/forge/_generated/releaseManifest.ts +3 -3
  56. package/src/forge/agent-adapters/index.ts +1584 -125
  57. package/src/forge/agent-adapters/types.ts +224 -1
  58. package/src/forge/agent-memory/bridge.ts +1333 -0
  59. package/src/forge/agent-memory/context-pack.ts +277 -0
  60. package/src/forge/agent-memory/hook-runner.ts +312 -0
  61. package/src/forge/agent-memory/mcp.ts +224 -0
  62. package/src/forge/agent-memory/normalize.ts +498 -0
  63. package/src/forge/agent-memory/redaction.ts +103 -0
  64. package/src/forge/agent-memory/sources/claude-code.ts +51 -0
  65. package/src/forge/agent-memory/sources/codex-hook-runner.mjs +273 -0
  66. package/src/forge/agent-memory/sources/codex.ts +119 -0
  67. package/src/forge/agent-memory/sources/cursor.ts +35 -0
  68. package/src/forge/agent-memory/types.ts +204 -0
  69. package/src/forge/bench.ts +248 -0
  70. package/src/forge/brownfield-import/index.ts +801 -0
  71. package/src/forge/brownfield-import/types.ts +127 -0
  72. package/src/forge/cair/action-journal.ts +61 -0
  73. package/src/forge/cair/action-parser.ts +314 -0
  74. package/src/forge/cair/action-validator.ts +40 -0
  75. package/src/forge/cair/actions.ts +1818 -0
  76. package/src/forge/cair/format.ts +77 -0
  77. package/src/forge/cair/index.ts +106 -0
  78. package/src/forge/cair/query.ts +478 -0
  79. package/src/forge/cair/snapshot.ts +315 -0
  80. package/src/forge/cair/types.ts +248 -0
  81. package/src/forge/cli/ai.ts +339 -21
  82. package/src/forge/cli/auth.ts +348 -10
  83. package/src/forge/cli/authmd.ts +441 -0
  84. package/src/forge/cli/baseline.ts +112 -0
  85. package/src/forge/cli/build.ts +20 -4
  86. package/src/forge/cli/changed.ts +437 -0
  87. package/src/forge/cli/codex-app-server.ts +877 -0
  88. package/src/forge/cli/commands.ts +1620 -20
  89. package/src/forge/cli/db.ts +209 -2
  90. package/src/forge/cli/deploy.ts +887 -0
  91. package/src/forge/cli/deps.ts +82 -13
  92. package/src/forge/cli/dev.ts +961 -46
  93. package/src/forge/cli/docs.ts +265 -0
  94. package/src/forge/cli/doctor.ts +297 -0
  95. package/src/forge/cli/field-test.ts +329 -0
  96. package/src/forge/cli/handoff.ts +336 -0
  97. package/src/forge/cli/index.ts +1 -0
  98. package/src/forge/cli/last-run.ts +84 -0
  99. package/src/forge/cli/main.ts +107 -3
  100. package/src/forge/cli/new.ts +152 -13
  101. package/src/forge/cli/next-actions.ts +23 -0
  102. package/src/forge/cli/output.ts +389 -6
  103. package/src/forge/cli/parse.ts +1050 -34
  104. package/src/forge/cli/progress.ts +51 -0
  105. package/src/forge/cli/query.ts +32 -0
  106. package/src/forge/cli/release.ts +35 -11
  107. package/src/forge/cli/rls.ts +43 -4
  108. package/src/forge/cli/run.ts +41 -0
  109. package/src/forge/cli/security.ts +112 -0
  110. package/src/forge/cli/self-host.ts +56 -14
  111. package/src/forge/cli/studio.ts +2218 -0
  112. package/src/forge/cli/verify.ts +1455 -32
  113. package/src/forge/cli/windows.ts +23 -0
  114. package/src/forge/cli/workos.ts +1020 -0
  115. package/src/forge/compiler/agent-contract/build.ts +670 -64
  116. package/src/forge/compiler/agent-contract/types.ts +45 -2
  117. package/src/forge/compiler/ai-registry/parse.ts +71 -2
  118. package/src/forge/compiler/api-surface/build.ts +47 -0
  119. package/src/forge/compiler/app-graph/build.ts +112 -9
  120. package/src/forge/compiler/app-graph/extract.ts +107 -0
  121. package/src/forge/compiler/app-graph/module-graph.ts +73 -78
  122. package/src/forge/compiler/app-graph/parser.ts +24 -24
  123. package/src/forge/compiler/app-graph/profile.ts +26 -0
  124. package/src/forge/compiler/app-graph/versions.ts +1 -1
  125. package/src/forge/compiler/classifier/capabilities.ts +3 -2
  126. package/src/forge/compiler/classifier/classify.ts +32 -8
  127. package/src/forge/compiler/classifier/secrets.ts +3 -2
  128. package/src/forge/compiler/classifier/signals.ts +91 -1
  129. package/src/forge/compiler/client-sdk/build-manifest.ts +59 -0
  130. package/src/forge/compiler/client-sdk/render-client.ts +295 -13
  131. package/src/forge/compiler/data-graph/parse.ts +20 -4
  132. package/src/forge/compiler/data-graph/sql/ddl.ts +144 -31
  133. package/src/forge/compiler/data-graph/sql/serialize.ts +4 -0
  134. package/src/forge/compiler/data-graph/sql/types.ts +1 -0
  135. package/src/forge/compiler/diagnostics/codes.ts +30 -0
  136. package/src/forge/compiler/diagnostics/create.ts +21 -2
  137. package/src/forge/compiler/diagnostics/index.ts +2 -0
  138. package/src/forge/compiler/emitter/barrel.ts +3 -0
  139. package/src/forge/compiler/emitter/render.ts +9 -0
  140. package/src/forge/compiler/external-manifest/registry.ts +205 -0
  141. package/src/forge/compiler/external-manifest/types.ts +91 -0
  142. package/src/forge/compiler/external-manifest/validate.ts +373 -0
  143. package/src/forge/compiler/frontend-graph/build.ts +142 -14
  144. package/src/forge/compiler/integration/add.ts +618 -24
  145. package/src/forge/compiler/integration/plan.ts +43 -12
  146. package/src/forge/compiler/integration/render.ts +29 -0
  147. package/src/forge/compiler/integration/snapshot.ts +2 -0
  148. package/src/forge/compiler/integration/templates/convex.ts +70 -0
  149. package/src/forge/compiler/integration/templates/index.ts +1 -0
  150. package/src/forge/compiler/integration/templates/render.ts +38 -0
  151. package/src/forge/compiler/integration/templates/types.ts +3 -0
  152. package/src/forge/compiler/integration/templates/workos.ts +1219 -0
  153. package/src/forge/compiler/make-registry/build.ts +8 -9
  154. package/src/forge/compiler/orchestrator/fast-check.ts +4 -0
  155. package/src/forge/compiler/orchestrator/generate-lock.ts +14 -3
  156. package/src/forge/compiler/orchestrator/manifest.ts +1 -1
  157. package/src/forge/compiler/orchestrator/plan-profile.ts +23 -0
  158. package/src/forge/compiler/orchestrator/plan.ts +247 -10
  159. package/src/forge/compiler/orchestrator/profile.ts +65 -0
  160. package/src/forge/compiler/orchestrator/run.ts +97 -31
  161. package/src/forge/compiler/orchestrator/serialize.ts +33 -8
  162. package/src/forge/compiler/orchestrator/types.ts +1 -1
  163. package/src/forge/compiler/package-graph/compiler.ts +3 -1
  164. package/src/forge/compiler/package-graph/constants.ts +1 -1
  165. package/src/forge/compiler/package-manager/adapter.ts +4 -1
  166. package/src/forge/compiler/package-manager/commands.ts +4 -0
  167. package/src/forge/compiler/package-manager/executor.ts +30 -1
  168. package/src/forge/compiler/package-manager/version.ts +36 -12
  169. package/src/forge/compiler/package-upgrades/planner.ts +155 -18
  170. package/src/forge/compiler/package-upgrades/types.ts +2 -0
  171. package/src/forge/compiler/policy-registry/build.ts +47 -2
  172. package/src/forge/compiler/policy-registry/parse.ts +32 -2
  173. package/src/forge/compiler/recipes/definitions.ts +63 -0
  174. package/src/forge/compiler/recipes/index.ts +2 -0
  175. package/src/forge/compiler/recipes/registry.ts +6 -0
  176. package/src/forge/compiler/test-graph/build.ts +11 -3
  177. package/src/forge/compiler/types/app-graph.ts +8 -2
  178. package/src/forge/compiler/types/cli.ts +75 -1
  179. package/src/forge/compiler/types/dev-manifest.ts +4 -0
  180. package/src/forge/compiler/types/emit.ts +2 -0
  181. package/src/forge/compiler/types/frontend-graph.ts +2 -2
  182. package/src/forge/compiler/types/integration.ts +1 -0
  183. package/src/forge/compiler/types/package-graph.ts +6 -0
  184. package/src/forge/compiler/types/policy-registry.ts +3 -1
  185. package/src/forge/delta/classifier.ts +52 -0
  186. package/src/forge/delta/explain.ts +238 -0
  187. package/src/forge/delta/git-observer.ts +43 -0
  188. package/src/forge/delta/ids.ts +44 -0
  189. package/src/forge/delta/index.ts +25 -0
  190. package/src/forge/delta/recorder.ts +540 -0
  191. package/src/forge/delta/redaction.ts +50 -0
  192. package/src/forge/delta/schema.ts +240 -0
  193. package/src/forge/delta/session.ts +142 -0
  194. package/src/forge/delta/status.ts +1202 -0
  195. package/src/forge/delta/store.ts +3284 -0
  196. package/src/forge/delta/timeline.ts +178 -0
  197. package/src/forge/dev/server.ts +808 -17
  198. package/src/forge/dev/types.ts +15 -1
  199. package/src/forge/dev/watch.ts +17 -7
  200. package/src/forge/dev-console/cycle.ts +280 -33
  201. package/src/forge/dev-console/types.ts +47 -1
  202. package/src/forge/impact/index.ts +204 -9
  203. package/src/forge/impact/types.ts +33 -1
  204. package/src/forge/intent/index.ts +35 -16
  205. package/src/forge/make/fields.ts +26 -0
  206. package/src/forge/make/index.ts +40 -6
  207. package/src/forge/make/templates.ts +155 -2
  208. package/src/forge/make/types.ts +2 -1
  209. package/src/forge/policy.ts +1 -1
  210. package/src/forge/react/index.ts +160 -2
  211. package/src/forge/refactor/index.ts +1 -0
  212. package/src/forge/repair/rules/index.ts +2 -2
  213. package/src/forge/review/index.ts +158 -12
  214. package/src/forge/review/types.ts +15 -0
  215. package/src/forge/runtime/auth/config.ts +17 -0
  216. package/src/forge/runtime/auth/evaluate.ts +15 -2
  217. package/src/forge/runtime/auth/resolve.ts +61 -6
  218. package/src/forge/runtime/auth/types.ts +1 -0
  219. package/src/forge/runtime/db/factory.ts +1 -3
  220. package/src/forge/runtime/db/generated-client.ts +13 -2
  221. package/src/forge/runtime/db/memory-adapter.ts +139 -32
  222. package/src/forge/runtime/db/pglite-adapter.ts +263 -2
  223. package/src/forge/runtime/db/postgres-adapter.ts +6 -3
  224. package/src/forge/runtime/executor.ts +129 -16
  225. package/src/forge/runtime/external/bridge.ts +649 -0
  226. package/src/forge/runtime/runner/run-entry.ts +16 -7
  227. package/src/forge/runtime/telemetry/buffer.ts +4 -1
  228. package/src/forge/runtime/telemetry/scrubber.ts +35 -5
  229. package/src/forge/runtime/webhooks/security.ts +12 -7
  230. package/src/forge/server.ts +17 -3
  231. package/src/forge/ui/index.ts +209 -0
  232. package/src/forge/ui/types.ts +1 -0
  233. package/src/forge/version.ts +1 -1
  234. package/src/forge/vue/index.ts +422 -0
  235. package/src/forge/workspace/baseline.ts +112 -0
  236. package/src/forge/workspace/change-summary.ts +250 -0
  237. package/src/forge/workspace/forge-cli.ts +42 -0
  238. package/src/forge/workspace/git-summary.ts +391 -0
  239. package/templates/agent-workroom/AGENTS.md +29 -0
  240. package/templates/agent-workroom/README.md +34 -0
  241. package/templates/agent-workroom/forge.config.ts +3 -0
  242. package/templates/agent-workroom/package.json +33 -0
  243. package/templates/agent-workroom/src/actions/indexAgentSignal.ts +10 -0
  244. package/templates/agent-workroom/src/commands/openWorkroom.ts +61 -0
  245. package/templates/agent-workroom/src/commands/recordAgentSignal.ts +119 -0
  246. package/templates/agent-workroom/src/commands/recordCheckRun.ts +52 -0
  247. package/templates/agent-workroom/src/forge/schema.ts +54 -0
  248. package/templates/agent-workroom/src/policies.ts +6 -0
  249. package/templates/agent-workroom/src/queries/listWorkrooms.ts +11 -0
  250. package/templates/agent-workroom/src/queries/liveWorkroom.ts +63 -0
  251. package/templates/agent-workroom/tsconfig.json +16 -0
  252. package/templates/agent-workroom/web/index.html +12 -0
  253. package/templates/agent-workroom/web/package.json +21 -0
  254. package/templates/agent-workroom/web/src/App.tsx +345 -0
  255. package/templates/agent-workroom/web/src/lib/forge.ts +13 -0
  256. package/templates/agent-workroom/web/src/main.tsx +13 -0
  257. package/templates/agent-workroom/web/src/styles.css +545 -0
  258. package/templates/agent-workroom/web/tsconfig.json +27 -0
  259. package/templates/b2b-support-web/package.json +1 -0
  260. package/templates/b2b-support-web/web/package.json +1 -1
  261. package/templates/minimal-web/package.json +1 -1
  262. package/templates/minimal-web/web/package.json +2 -2
  263. package/templates/nuxt-web/.vscode/settings.json +14 -0
  264. package/templates/nuxt-web/README.md +30 -0
  265. package/templates/nuxt-web/forge.config.ts +3 -0
  266. package/templates/nuxt-web/package.json +33 -0
  267. package/templates/nuxt-web/src/actions/logNoteCreated.ts +11 -0
  268. package/templates/nuxt-web/src/commands/createNote.ts +26 -0
  269. package/templates/nuxt-web/src/forge/schema.ts +12 -0
  270. package/templates/nuxt-web/src/policies.ts +6 -0
  271. package/templates/nuxt-web/src/queries/listNotes.ts +8 -0
  272. package/templates/nuxt-web/src/queries/liveNotes.ts +8 -0
  273. package/templates/nuxt-web/tsconfig.json +17 -0
  274. package/templates/nuxt-web/web/app.vue +67 -0
  275. package/templates/nuxt-web/web/components/LiveNotes.vue +89 -0
  276. package/templates/nuxt-web/web/components/NoteComposer.vue +100 -0
  277. package/templates/nuxt-web/web/composables/forge.ts +13 -0
  278. package/templates/nuxt-web/web/composables/useNotes.ts +24 -0
  279. package/templates/nuxt-web/web/nuxt.config.ts +11 -0
  280. package/templates/nuxt-web/web/package.json +18 -0
  281. package/templates/nuxt-web/web/plugins/forge.client.ts +10 -0
  282. package/templates/nuxt-web/web/plugins/forge.server.ts +10 -0
  283. package/templates/nuxt-web/web/server/api/forge-health.get.ts +7 -0
  284. package/templates/nuxt-web/web/tsconfig.json +6 -0
  285. package/src/forge/_generated/actionSubscriptions.json +0 -2
  286. package/src/forge/_generated/actionSubscriptions.ts +0 -10
  287. package/src/forge/_generated/agentAdapterManifest.json +0 -2
  288. package/src/forge/_generated/agentAdapterManifest.ts +0 -73
  289. package/src/forge/_generated/agentContract.json +0 -2
  290. package/src/forge/_generated/agentContract.ts +0 -7829
  291. package/src/forge/_generated/agentQuickstart.md +0 -34
  292. package/src/forge/_generated/agentTools.json +0 -2
  293. package/src/forge/_generated/agentTools.md +0 -16
  294. package/src/forge/_generated/agentTools.ts +0 -12
  295. package/src/forge/_generated/aiContext.ts +0 -125
  296. package/src/forge/_generated/aiModels.json +0 -2
  297. package/src/forge/_generated/aiModels.ts +0 -51
  298. package/src/forge/_generated/aiProviders.json +0 -2
  299. package/src/forge/_generated/aiProviders.ts +0 -23
  300. package/src/forge/_generated/aiRegistry.json +0 -2
  301. package/src/forge/_generated/aiRegistry.ts +0 -31
  302. package/src/forge/_generated/api.json +0 -2
  303. package/src/forge/_generated/api.ts +0 -8
  304. package/src/forge/_generated/appGraph.json +0 -2
  305. package/src/forge/_generated/appGraph.ts +0 -14919
  306. package/src/forge/_generated/appMap.md +0 -55
  307. package/src/forge/_generated/artifactManifest.json +0 -2
  308. package/src/forge/_generated/artifactManifest.ts +0 -7
  309. package/src/forge/_generated/authClaims.json +0 -2
  310. package/src/forge/_generated/authClaims.ts +0 -13
  311. package/src/forge/_generated/authConfig.json +0 -2
  312. package/src/forge/_generated/authConfig.ts +0 -17
  313. package/src/forge/_generated/authContext.ts +0 -23
  314. package/src/forge/_generated/authRegistry.json +0 -2
  315. package/src/forge/_generated/authRegistry.ts +0 -25
  316. package/src/forge/_generated/buildInfo.json +0 -2
  317. package/src/forge/_generated/buildInfo.ts +0 -9
  318. package/src/forge/_generated/capabilityMap.json +0 -2
  319. package/src/forge/_generated/capabilityMap.md +0 -15
  320. package/src/forge/_generated/capabilityMap.ts +0 -17
  321. package/src/forge/_generated/client.ts +0 -282
  322. package/src/forge/_generated/clientApi.ts +0 -9
  323. package/src/forge/_generated/clientManifest.json +0 -2
  324. package/src/forge/_generated/clientManifest.ts +0 -39
  325. package/src/forge/_generated/clientTypes.ts +0 -78
  326. package/src/forge/_generated/configRegistry.json +0 -2
  327. package/src/forge/_generated/configRegistry.ts +0 -4
  328. package/src/forge/_generated/dataGraph.json +0 -2
  329. package/src/forge/_generated/dataGraph.ts +0 -8
  330. package/src/forge/_generated/db.json +0 -2
  331. package/src/forge/_generated/db.ts +0 -2
  332. package/src/forge/_generated/dbSecurityManifest.json +0 -2
  333. package/src/forge/_generated/dbSecurityManifest.ts +0 -15
  334. package/src/forge/_generated/dbSessionContext.json +0 -2
  335. package/src/forge/_generated/dbSessionContext.ts +0 -39
  336. package/src/forge/_generated/deployManifest.json +0 -2
  337. package/src/forge/_generated/deployManifest.ts +0 -14
  338. package/src/forge/_generated/devManifest.json +0 -2
  339. package/src/forge/_generated/devManifest.ts +0 -62
  340. package/src/forge/_generated/envSchema.json +0 -2
  341. package/src/forge/_generated/envSchema.ts +0 -59
  342. package/src/forge/_generated/frontendGraph.json +0 -2
  343. package/src/forge/_generated/frontendGraph.ts +0 -27
  344. package/src/forge/_generated/importGuards.json +0 -2
  345. package/src/forge/_generated/importGuards.ts +0 -686
  346. package/src/forge/_generated/index.ts +0 -68
  347. package/src/forge/_generated/liveProductionManifest.json +0 -2
  348. package/src/forge/_generated/liveProductionManifest.ts +0 -23
  349. package/src/forge/_generated/liveProtocol.json +0 -2
  350. package/src/forge/_generated/liveProtocol.ts +0 -21
  351. package/src/forge/_generated/liveQueryRegistry.json +0 -2
  352. package/src/forge/_generated/liveQueryRegistry.ts +0 -9
  353. package/src/forge/_generated/liveTransportConfig.json +0 -2
  354. package/src/forge/_generated/liveTransportConfig.ts +0 -19
  355. package/src/forge/_generated/makeRegistry.json +0 -2
  356. package/src/forge/_generated/makeRegistry.ts +0 -177
  357. package/src/forge/_generated/makeTemplates.json +0 -2
  358. package/src/forge/_generated/makeTemplates.ts +0 -66
  359. package/src/forge/_generated/mockMap.json +0 -2
  360. package/src/forge/_generated/mockMap.ts +0 -7
  361. package/src/forge/_generated/operationPlaybooks.md +0 -167
  362. package/src/forge/_generated/packageGraph.json +0 -2
  363. package/src/forge/_generated/packageGraph.ts +0 -249334
  364. package/src/forge/_generated/packageUpgradeRegistry.json +0 -2
  365. package/src/forge/_generated/packageUpgradeRegistry.ts +0 -15
  366. package/src/forge/_generated/permissionMatrix.json +0 -2
  367. package/src/forge/_generated/permissionMatrix.ts +0 -7
  368. package/src/forge/_generated/policyRegistry.json +0 -2
  369. package/src/forge/_generated/policyRegistry.ts +0 -11
  370. package/src/forge/_generated/queryRegistry.json +0 -2
  371. package/src/forge/_generated/queryRegistry.ts +0 -9
  372. package/src/forge/_generated/react.d.ts +0 -22
  373. package/src/forge/_generated/react.ts +0 -29
  374. package/src/forge/_generated/reactManifest.json +0 -2
  375. package/src/forge/_generated/reactManifest.ts +0 -19
  376. package/src/forge/_generated/rlsPolicies.json +0 -2
  377. package/src/forge/_generated/rlsPolicies.sql +0 -34
  378. package/src/forge/_generated/rlsPolicies.ts +0 -6
  379. package/src/forge/_generated/runtimeGraph.json +0 -2
  380. package/src/forge/_generated/runtimeGraph.ts +0 -8
  381. package/src/forge/_generated/runtimeMatrix.json +0 -2
  382. package/src/forge/_generated/runtimeMatrix.ts +0 -334130
  383. package/src/forge/_generated/runtimeRegistry.ts +0 -2
  384. package/src/forge/_generated/runtimeRules.md +0 -91
  385. package/src/forge/_generated/secretRegistry.json +0 -2
  386. package/src/forge/_generated/secretRegistry.ts +0 -50
  387. package/src/forge/_generated/secretsContext.ts +0 -11
  388. package/src/forge/_generated/serverApi.ts +0 -10
  389. package/src/forge/_generated/sourceMapManifest.json +0 -2
  390. package/src/forge/_generated/sourceMapManifest.ts +0 -7
  391. package/src/forge/_generated/sqlPlan.json +0 -2
  392. package/src/forge/_generated/sqlPlan.ts +0 -88
  393. package/src/forge/_generated/subscriptionManifest.json +0 -2
  394. package/src/forge/_generated/subscriptionManifest.ts +0 -7
  395. package/src/forge/_generated/symbolicationManifest.json +0 -2
  396. package/src/forge/_generated/symbolicationManifest.ts +0 -17
  397. package/src/forge/_generated/telemetryRegistry.json +0 -2
  398. package/src/forge/_generated/telemetryRegistry.ts +0 -9
  399. package/src/forge/_generated/telemetrySinks.json +0 -2
  400. package/src/forge/_generated/telemetrySinks.ts +0 -11
  401. package/src/forge/_generated/tenantScope.json +0 -2
  402. package/src/forge/_generated/tenantScope.ts +0 -8
  403. package/src/forge/_generated/testGraph.json +0 -2
  404. package/src/forge/_generated/testGraph.ts +0 -3430
  405. package/src/forge/_generated/testPlanRegistry.json +0 -2
  406. package/src/forge/_generated/testPlanRegistry.ts +0 -33
  407. package/src/forge/_generated/uiRoutes.json +0 -2
  408. package/src/forge/_generated/uiRoutes.ts +0 -16
  409. package/src/forge/_generated/uiScenarios.json +0 -2
  410. package/src/forge/_generated/uiScenarios.ts +0 -30
  411. package/src/forge/_generated/uiTestManifest.json +0 -2
  412. package/src/forge/_generated/uiTestManifest.ts +0 -27
  413. package/src/forge/_generated/workflowRegistry.json +0 -2
  414. package/src/forge/_generated/workflowRegistry.ts +0 -9
  415. package/src/forge/_generated/workflowSubscriptions.json +0 -2
  416. package/src/forge/_generated/workflowSubscriptions.ts +0 -10
@@ -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,10 +1,15 @@
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 = {
5
5
  userId?: string;
6
6
  tenantId?: string;
7
+ organizationId?: string;
8
+ organizationMembershipId?: string;
7
9
  role?: string;
10
+ roles?: string[];
11
+ permissions?: string[];
12
+ claims?: Record<string, unknown>;
8
13
  token?: string;
9
14
  getToken?: () => string | Promise<string>;
10
15
  headers?: Record<string, string>;
@@ -14,7 +19,12 @@ export function renderClientTypesTs(): string {
14
19
  export type ForgeResolvedAuth = {
15
20
  userId?: string;
16
21
  tenantId?: string;
22
+ organizationId?: string;
23
+ organizationMembershipId?: string;
17
24
  role?: string;
25
+ roles?: string[];
26
+ permissions?: string[];
27
+ claims?: Record<string, unknown>;
18
28
  token?: string;
19
29
  getToken?: () => string | Promise<string>;
20
30
  headers?: Record<string, string>;
@@ -52,6 +62,22 @@ export class ForgeError extends Error {
52
62
  export type QueryName = keyof typeof import("./api.ts").api.queries;
53
63
  export type CommandName = keyof typeof import("./api.ts").api.commands;
54
64
  export type LiveQueryName = keyof typeof import("./api.ts").api.liveQueries;
65
+ export type ExternalCommandName = string;
66
+ export type ExternalQueryName = string;
67
+ export type ExternalRuntimeRefObject = {
68
+ service: string;
69
+ name: string;
70
+ kind?: "command" | "query";
71
+ language?: string;
72
+ framework?: string;
73
+ transport?: string;
74
+ };
75
+ export type ExternalCommandRef =
76
+ | ExternalCommandName
77
+ | ExternalRuntimeRefObject;
78
+ export type ExternalQueryRef =
79
+ | ExternalQueryName
80
+ | ExternalRuntimeRefObject;
55
81
 
56
82
  export type LiveSnapshot<T> = {
57
83
  subscriptionId: string;
@@ -60,6 +86,22 @@ export type LiveSnapshot<T> = {
60
86
  traceId?: string;
61
87
  };
62
88
 
89
+ export type ForgeCommandResult<T = unknown> =
90
+ | {
91
+ ok: true;
92
+ result: T;
93
+ status: number;
94
+ traceId?: string;
95
+ diagnostics?: { code: string; message: string }[];
96
+ }
97
+ | {
98
+ ok: false;
99
+ error: { code: string; message: string; details?: unknown };
100
+ status: number;
101
+ traceId?: string;
102
+ diagnostics?: { code: string; message: string }[];
103
+ };
104
+
63
105
  export type LiveQueryOptions = {
64
106
  signal?: AbortSignal;
65
107
  };
@@ -70,6 +112,9 @@ export type ForgeClient = {
70
112
  readonly lastTraceId?: string;
71
113
  query<Name extends QueryName>(name: Name, args: unknown): Promise<unknown>;
72
114
  command<Name extends CommandName>(name: Name, args: unknown): Promise<unknown>;
115
+ commandResult<Name extends CommandName>(name: Name, args: unknown): Promise<ForgeCommandResult<unknown>>;
116
+ externalQuery<Name extends ExternalQueryRef>(name: Name, args: unknown): Promise<unknown>;
117
+ externalCommand<Name extends ExternalCommandRef>(name: Name, args: unknown): Promise<unknown>;
73
118
  liveQuery<Name extends LiveQueryName>(
74
119
  name: Name,
75
120
  args: unknown,
@@ -85,8 +130,11 @@ export function renderClientTs(): string {
85
130
  return `import { api } from "./api.ts";
86
131
  import type {
87
132
  ForgeAuthProvider,
133
+ ForgeCommandResult,
88
134
  ForgeClient,
89
135
  ForgeClientConfig,
136
+ ExternalCommandRef,
137
+ ExternalQueryRef,
90
138
  LiveQueryOptions,
91
139
  LiveSnapshot,
92
140
  } from "./clientTypes.ts";
@@ -98,10 +146,16 @@ export type {
98
146
  ForgeAuthProvider,
99
147
  ForgeClient,
100
148
  ForgeClientConfig,
149
+ ForgeCommandResult,
101
150
  ForgeStaticAuth,
102
151
  QueryName,
103
152
  CommandName,
104
153
  LiveQueryName,
154
+ ExternalCommandName,
155
+ ExternalQueryName,
156
+ ExternalRuntimeRefObject,
157
+ ExternalCommandRef,
158
+ ExternalQueryRef,
105
159
  ForgeResolvedAuth,
106
160
  LiveQueryOptions,
107
161
  LiveSnapshot,
@@ -134,7 +188,12 @@ async function resolveAuthHeaders(
134
188
  typeof value === "string" &&
135
189
  key !== "userId" &&
136
190
  key !== "tenantId" &&
191
+ key !== "organizationId" &&
192
+ key !== "organizationMembershipId" &&
137
193
  key !== "role" &&
194
+ key !== "roles" &&
195
+ key !== "permissions" &&
196
+ key !== "claims" &&
138
197
  key !== "token"
139
198
  ) {
140
199
  headers[key] = value;
@@ -147,9 +206,25 @@ async function resolveAuthHeaders(
147
206
  if (resolved.tenantId) {
148
207
  headers["x-forge-tenant-id"] = resolved.tenantId;
149
208
  }
209
+ if (resolved.organizationId) {
210
+ headers["x-forge-organization-id"] = resolved.organizationId;
211
+ headers["x-forge-tenant-id"] ??= resolved.organizationId;
212
+ }
213
+ if (resolved.organizationMembershipId) {
214
+ headers["x-forge-organization-membership-id"] = resolved.organizationMembershipId;
215
+ }
150
216
  if (resolved.role) {
151
217
  headers["x-forge-role"] = resolved.role;
152
218
  }
219
+ if (Array.isArray(resolved.roles)) {
220
+ headers["x-forge-roles"] = JSON.stringify(resolved.roles);
221
+ }
222
+ if (Array.isArray(resolved.permissions)) {
223
+ headers["x-forge-permissions"] = JSON.stringify(resolved.permissions);
224
+ }
225
+ if (resolved.claims && typeof resolved.claims === "object") {
226
+ headers["x-forge-claims"] = JSON.stringify(resolved.claims);
227
+ }
153
228
 
154
229
  return headers;
155
230
  }
@@ -179,6 +254,16 @@ function parseJsonPayload(body: unknown): {
179
254
  };
180
255
  }
181
256
 
257
+ function normalizeExternalRef(
258
+ ref: ExternalCommandRef | ExternalQueryRef,
259
+ ): { service: string; name: string } {
260
+ if (typeof ref === "string") {
261
+ const [service, ...entryParts] = ref.split(".");
262
+ return { service: service ?? "", name: entryParts.join(".") };
263
+ }
264
+ return { service: ref.service, name: ref.name };
265
+ }
266
+
182
267
  class ForgeHttpClient implements ForgeClient {
183
268
  lastTraceId?: string;
184
269
 
@@ -192,6 +277,18 @@ class ForgeHttpClient implements ForgeClient {
192
277
  return this.invoke("commands", name, args);
193
278
  }
194
279
 
280
+ commandResult(name: string, args: unknown): Promise<ForgeCommandResult<unknown>> {
281
+ return this.invokeResult("commands", name, args);
282
+ }
283
+
284
+ externalQuery(name: ExternalQueryRef, args: unknown): Promise<unknown> {
285
+ return this.invokeExternal("queries", name, args);
286
+ }
287
+
288
+ externalCommand(name: ExternalCommandRef, args: unknown): Promise<unknown> {
289
+ return this.invokeExternal("commands", name, args);
290
+ }
291
+
195
292
  liveQuery(
196
293
  name: string,
197
294
  args: unknown,
@@ -223,10 +320,117 @@ class ForgeHttpClient implements ForgeClient {
223
320
  name: string,
224
321
  args: unknown,
225
322
  ): Promise<unknown> {
323
+ const result = await this.invokeResult(kind, name, args);
324
+ if (!result.ok) {
325
+ throw new ForgeError(result.error.message, {
326
+ code: result.error.code,
327
+ traceId: result.traceId,
328
+ status: result.status,
329
+ details: result.error.details ?? result.diagnostics,
330
+ });
331
+ }
332
+ return result.result;
333
+ }
334
+
335
+ private async invokeResult(
336
+ kind: "queries" | "commands",
337
+ name: string,
338
+ args: unknown,
339
+ ): Promise<ForgeCommandResult<unknown>> {
226
340
  const baseUrl = this.config.url.replace(/\\/$/, "");
227
341
  const url = \`\${baseUrl}/\${kind}/\${encodeURIComponent(name)}\`;
228
342
  const authHeaders = await resolveAuthHeaders(this.config.auth);
229
343
 
344
+ let response: Response;
345
+ try {
346
+ response = await fetch(url, {
347
+ method: "POST",
348
+ headers: {
349
+ "Content-Type": "application/json",
350
+ ...authHeaders,
351
+ },
352
+ body: JSON.stringify({ args }),
353
+ });
354
+ } catch (error) {
355
+ return {
356
+ ok: false,
357
+ status: 0,
358
+ error: {
359
+ code: "FORGE_NETWORK_ERROR",
360
+ message: error instanceof Error ? error.message : "network request failed",
361
+ details: error,
362
+ },
363
+ };
364
+ }
365
+
366
+ let body: unknown;
367
+ try {
368
+ body = await response.json();
369
+ } catch {
370
+ return {
371
+ ok: false,
372
+ status: response.status,
373
+ error: {
374
+ code: "FORGE_HTTP_ERROR",
375
+ message: \`HTTP \${response.status}\`,
376
+ },
377
+ };
378
+ }
379
+
380
+ const payload = parseJsonPayload(body);
381
+ this.lastTraceId = payload.traceId;
382
+
383
+ if (!response.ok || payload.ok === false) {
384
+ const diagnostic = payload.diagnostics?.find((entry) => entry.code);
385
+ const code =
386
+ payload.error?.code ?? diagnostic?.code ?? "FORGE_REQUEST_FAILED";
387
+ const message =
388
+ payload.error?.message ??
389
+ diagnostic?.message ??
390
+ \`Request failed with status \${response.status}\`;
391
+ return {
392
+ ok: false,
393
+ status: response.status,
394
+ traceId: payload.traceId,
395
+ diagnostics: payload.diagnostics,
396
+ error: {
397
+ code,
398
+ message,
399
+ details: payload.error?.details ?? payload.diagnostics,
400
+ },
401
+ };
402
+ }
403
+
404
+ return {
405
+ ok: true,
406
+ result: payload.result,
407
+ status: response.status,
408
+ traceId: payload.traceId,
409
+ diagnostics: payload.diagnostics,
410
+ };
411
+ }
412
+
413
+ private async invokeExternal(
414
+ kind: "queries" | "commands",
415
+ name: ExternalCommandRef | ExternalQueryRef,
416
+ args: unknown,
417
+ ): Promise<unknown> {
418
+ const normalized = normalizeExternalRef(name);
419
+ const serviceName = normalized.service;
420
+ const entryName = normalized.name;
421
+ if (!serviceName || !entryName) {
422
+ throw new ForgeError(\`External runtime name must be service.entry\`, {
423
+ code: "FORGE_EXTERNAL_RUNTIME_NOT_FOUND",
424
+ });
425
+ }
426
+ const baseUrl = this.config.url.replace(/\\/$/, "");
427
+ const url = \`\${baseUrl}/external/\${encodeURIComponent(serviceName)}/\${kind}/\${encodeURIComponent(entryName)}\`;
428
+ return this.invokeUrl(url, args);
429
+ }
430
+
431
+ private async invokeUrl(url: string, args: unknown): Promise<unknown> {
432
+ const authHeaders = await resolveAuthHeaders(this.config.auth);
433
+
230
434
  const response = await fetch(url, {
231
435
  method: "POST",
232
436
  headers: {
@@ -297,19 +501,24 @@ class ForgeHttpClient implements ForgeClient {
297
501
  const reader = response.body.getReader();
298
502
  let buffer = "";
299
503
 
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");
504
+ try {
505
+ while (!signal.aborted) {
506
+ const { done, value } = await reader.read();
507
+ if (done) {
508
+ break;
509
+ }
510
+ buffer += decoder.decode(value, { stream: true });
511
+ let boundary = buffer.indexOf("\\n\\n");
512
+ while (boundary !== -1) {
513
+ const frame = buffer.slice(0, boundary);
514
+ buffer = buffer.slice(boundary + 2);
515
+ this.handleSseFrame(frame, onSnapshot, onError);
516
+ boundary = buffer.indexOf("\\n\\n");
517
+ }
312
518
  }
519
+ } finally {
520
+ await reader.cancel().catch(() => undefined);
521
+ reader.releaseLock();
313
522
  }
314
523
  }
315
524
 
@@ -383,8 +592,11 @@ export type {
383
592
  ForgeReactAuthProvider,
384
593
  ForgeReactClient,
385
594
  ForgeReactError,
595
+ ForgeCommandCallResult,
386
596
  UseCommandOptions,
387
597
  UseCommandResult,
598
+ UseCommandResultHook,
599
+ UseCommandResultOptions,
388
600
  UseLiveQueryOptions,
389
601
  UseLiveQueryResult,
390
602
  UseQueryOptions,
@@ -398,6 +610,7 @@ export const useForgeClient = forgeReact.useForgeClient;
398
610
  export const useAuth = forgeReact.useAuth;
399
611
  export const useQuery = forgeReact.useQuery;
400
612
  export const useCommand = forgeReact.useCommand;
613
+ export const useCommandResult = forgeReact.useCommandResult;
401
614
  export const useLiveQuery = forgeReact.useLiveQuery;
402
615
  `;
403
616
  }
@@ -410,8 +623,11 @@ export function renderReactDts(): string {
410
623
  ForgeReactAuthProvider,
411
624
  ForgeReactClient,
412
625
  ForgeReactError,
626
+ ForgeCommandCallResult,
413
627
  UseCommandOptions,
414
628
  UseCommandResult,
629
+ UseCommandResultHook,
630
+ UseCommandResultOptions,
415
631
  UseLiveQueryOptions,
416
632
  UseLiveQueryResult,
417
633
  UseQueryOptions,
@@ -423,6 +639,7 @@ export declare const useForgeClient: import("forge/react").ForgeReactBindings["u
423
639
  export declare const useAuth: import("forge/react").ForgeReactBindings["useAuth"];
424
640
  export declare const useQuery: import("forge/react").ForgeReactBindings["useQuery"];
425
641
  export declare const useCommand: import("forge/react").ForgeReactBindings["useCommand"];
642
+ export declare const useCommandResult: import("forge/react").ForgeReactBindings["useCommandResult"];
426
643
  export declare const useLiveQuery: import("forge/react").ForgeReactBindings["useLiveQuery"];
427
644
  `;
428
645
  }
@@ -430,3 +647,68 @@ export declare const useLiveQuery: import("forge/react").ForgeReactBindings["use
430
647
  export function renderReactManifestTs(manifest: ReactManifest): string {
431
648
  return `export const reactManifest = ${JSON.stringify(manifest, null, 2)} as const;\n`;
432
649
  }
650
+
651
+ export function renderVueTs(): string {
652
+ return `import { createForgeVueBindings } from "forge/vue";
653
+ import { createForgeClient } from "./client.ts";
654
+
655
+ export type {
656
+ ForgeDevAuthConfig,
657
+ ForgeVueAuth,
658
+ ForgeVueAuthProvider,
659
+ ForgeVueBindings,
660
+ ForgeVueClient,
661
+ ForgeVueClientConfig,
662
+ ForgeVueError,
663
+ ForgeVuePluginOptions,
664
+ UseForgeCommandOptions,
665
+ UseForgeCommandResult,
666
+ UseForgeLiveQueryOptions,
667
+ UseForgeLiveQueryResult,
668
+ UseForgeQueryOptions,
669
+ UseForgeQueryResult,
670
+ } from "forge/vue";
671
+
672
+ const forgeVue = createForgeVueBindings(createForgeClient);
673
+
674
+ export const ForgeVuePlugin = forgeVue.ForgeVuePlugin;
675
+ export const provideForge = forgeVue.provideForge;
676
+ export const useForgeClient = forgeVue.useForgeClient;
677
+ export const useForgeAuth = forgeVue.useForgeAuth;
678
+ export const useForgeQuery = forgeVue.useForgeQuery;
679
+ export const useForgeCommand = forgeVue.useForgeCommand;
680
+ export const useForgeLiveQuery = forgeVue.useForgeLiveQuery;
681
+ `;
682
+ }
683
+
684
+ export function renderVueDts(): string {
685
+ return `export type {
686
+ ForgeDevAuthConfig,
687
+ ForgeVueAuth,
688
+ ForgeVueAuthProvider,
689
+ ForgeVueBindings,
690
+ ForgeVueClient,
691
+ ForgeVueClientConfig,
692
+ ForgeVueError,
693
+ ForgeVuePluginOptions,
694
+ UseForgeCommandOptions,
695
+ UseForgeCommandResult,
696
+ UseForgeLiveQueryOptions,
697
+ UseForgeLiveQueryResult,
698
+ UseForgeQueryOptions,
699
+ UseForgeQueryResult,
700
+ } from "forge/vue";
701
+
702
+ export declare const ForgeVuePlugin: import("forge/vue").ForgeVueBindings["ForgeVuePlugin"];
703
+ export declare const provideForge: import("forge/vue").ForgeVueBindings["provideForge"];
704
+ export declare const useForgeClient: import("forge/vue").ForgeVueBindings["useForgeClient"];
705
+ export declare const useForgeAuth: import("forge/vue").ForgeVueBindings["useForgeAuth"];
706
+ export declare const useForgeQuery: import("forge/vue").ForgeVueBindings["useForgeQuery"];
707
+ export declare const useForgeCommand: import("forge/vue").ForgeVueBindings["useForgeCommand"];
708
+ export declare const useForgeLiveQuery: import("forge/vue").ForgeVueBindings["useForgeLiveQuery"];
709
+ `;
710
+ }
711
+
712
+ export function renderVueManifestTs(manifest: VueManifest): string {
713
+ return `export const vueManifest = ${JSON.stringify(manifest, null, 2)} as const;\n`;
714
+ }
@@ -36,7 +36,23 @@ function unwrapStringLiteral(node: SyntaxNode): string | null {
36
36
  return null;
37
37
  }
38
38
 
39
- function extractFieldsFromObject(objectNode: SyntaxNode): DataField[] {
39
+ function unwrapNullableType(node: SyntaxNode): string | null {
40
+ if (node.type !== "call_expression") {
41
+ return null;
42
+ }
43
+ const functionNode = node.childForFieldName("function");
44
+ if (functionNode?.type !== "identifier" || functionNode.text !== "nullable") {
45
+ return null;
46
+ }
47
+ const argsNode = node.childForFieldName("arguments");
48
+ const firstArg = argsNode?.namedChildren.find((child) =>
49
+ child.type !== "," && child.type !== "comment" && child.type !== "(" && child.type !== ")"
50
+ );
51
+ const inner = firstArg ? unwrapStringLiteral(firstArg) : null;
52
+ return inner ? `${inner}?` : null;
53
+ }
54
+
55
+ function extractFieldsFromObject(objectNode: SyntaxNode, options: { skipConfigName?: boolean } = {}): DataField[] {
40
56
  const fields: DataField[] = [];
41
57
 
42
58
  for (const child of objectNode.namedChildren) {
@@ -55,7 +71,7 @@ function extractFieldsFromObject(objectNode: SyntaxNode): DataField[] {
55
71
  ? keyNode.text
56
72
  : unwrapStringLiteral(keyNode);
57
73
 
58
- if (!key || key === "name") {
74
+ if (!key || (options.skipConfigName && key === "name")) {
59
75
  continue;
60
76
  }
61
77
 
@@ -64,7 +80,7 @@ function extractFieldsFromObject(objectNode: SyntaxNode): DataField[] {
64
80
  continue;
65
81
  }
66
82
 
67
- const typeValue = unwrapStringLiteral(valueNode);
83
+ const typeValue = unwrapStringLiteral(valueNode) ?? unwrapNullableType(valueNode);
68
84
  if (typeValue !== null) {
69
85
  fields.push({ name: key, type: typeValue });
70
86
  }
@@ -131,7 +147,7 @@ function parseCallArguments(callNode: SyntaxNode): ParsedDefineTable | null {
131
147
 
132
148
  if (first.type === "object") {
133
149
  const tableName = extractNameFromObject(first);
134
- const fields = extractFieldsFromObject(first);
150
+ const fields = extractFieldsFromObject(first, { skipConfigName: true });
135
151
  return { tableName, fields };
136
152
  }
137
153