forgeos 0.1.0-alpha.1 → 0.1.0-alpha.3

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 (184) hide show
  1. package/AGENTS.md +38 -3
  2. package/CHANGELOG.md +15 -0
  3. package/README.md +24 -7
  4. package/bin/forge.mjs +4 -3
  5. package/package.json +5 -4
  6. package/src/forge/_generated/actionSubscriptions.json +2 -2
  7. package/src/forge/_generated/actionSubscriptions.ts +3 -3
  8. package/src/forge/_generated/agentAdapterManifest.json +2 -2
  9. package/src/forge/_generated/agentAdapterManifest.ts +3 -3
  10. package/src/forge/_generated/agentContract.json +2 -2
  11. package/src/forge/_generated/agentContract.ts +183 -50
  12. package/src/forge/_generated/agentQuickstart.md +3 -1
  13. package/src/forge/_generated/agentTools.json +2 -0
  14. package/src/forge/_generated/agentTools.md +16 -0
  15. package/src/forge/_generated/agentTools.ts +12 -0
  16. package/src/forge/_generated/aiContext.ts +67 -1
  17. package/src/forge/_generated/aiModels.json +2 -2
  18. package/src/forge/_generated/aiModels.ts +17 -1
  19. package/src/forge/_generated/aiProviders.json +1 -1
  20. package/src/forge/_generated/aiProviders.ts +1 -1
  21. package/src/forge/_generated/aiRegistry.json +2 -2
  22. package/src/forge/_generated/aiRegistry.ts +7 -5
  23. package/src/forge/_generated/api.json +2 -2
  24. package/src/forge/_generated/api.ts +1 -1
  25. package/src/forge/_generated/appGraph.json +2 -2
  26. package/src/forge/_generated/appGraph.ts +496 -388
  27. package/src/forge/_generated/appMap.md +21 -1
  28. package/src/forge/_generated/artifactManifest.json +2 -2
  29. package/src/forge/_generated/artifactManifest.ts +2 -2
  30. package/src/forge/_generated/authClaims.json +1 -1
  31. package/src/forge/_generated/authClaims.ts +1 -1
  32. package/src/forge/_generated/authConfig.json +1 -1
  33. package/src/forge/_generated/authConfig.ts +1 -1
  34. package/src/forge/_generated/authContext.ts +1 -1
  35. package/src/forge/_generated/authRegistry.json +1 -1
  36. package/src/forge/_generated/authRegistry.ts +1 -1
  37. package/src/forge/_generated/buildInfo.json +2 -2
  38. package/src/forge/_generated/buildInfo.ts +4 -4
  39. package/src/forge/_generated/capabilityMap.json +2 -2
  40. package/src/forge/_generated/capabilityMap.md +1 -1
  41. package/src/forge/_generated/capabilityMap.ts +2 -2
  42. package/src/forge/_generated/client.ts +1 -1
  43. package/src/forge/_generated/clientApi.ts +1 -1
  44. package/src/forge/_generated/clientManifest.json +2 -2
  45. package/src/forge/_generated/clientManifest.ts +3 -3
  46. package/src/forge/_generated/clientTypes.ts +1 -1
  47. package/src/forge/_generated/configRegistry.json +1 -1
  48. package/src/forge/_generated/configRegistry.ts +1 -1
  49. package/src/forge/_generated/dataGraph.json +2 -2
  50. package/src/forge/_generated/dataGraph.ts +3 -3
  51. package/src/forge/_generated/db.json +1 -1
  52. package/src/forge/_generated/db.ts +1 -1
  53. package/src/forge/_generated/dbSecurityManifest.json +1 -1
  54. package/src/forge/_generated/dbSecurityManifest.ts +1 -1
  55. package/src/forge/_generated/dbSessionContext.json +1 -1
  56. package/src/forge/_generated/dbSessionContext.ts +1 -1
  57. package/src/forge/_generated/deployManifest.json +2 -2
  58. package/src/forge/_generated/deployManifest.ts +7 -7
  59. package/src/forge/_generated/devManifest.json +2 -2
  60. package/src/forge/_generated/devManifest.ts +18 -3
  61. package/src/forge/_generated/envSchema.json +1 -1
  62. package/src/forge/_generated/envSchema.ts +1 -1
  63. package/src/forge/_generated/frontendGraph.json +1 -1
  64. package/src/forge/_generated/frontendGraph.ts +1 -1
  65. package/src/forge/_generated/importGuards.json +1 -1
  66. package/src/forge/_generated/importGuards.ts +1 -1
  67. package/src/forge/_generated/index.ts +2 -1
  68. package/src/forge/_generated/liveProductionManifest.json +1 -1
  69. package/src/forge/_generated/liveProductionManifest.ts +1 -1
  70. package/src/forge/_generated/liveProtocol.json +1 -1
  71. package/src/forge/_generated/liveProtocol.ts +1 -1
  72. package/src/forge/_generated/liveQueryRegistry.json +2 -2
  73. package/src/forge/_generated/liveQueryRegistry.ts +3 -3
  74. package/src/forge/_generated/liveTransportConfig.json +1 -1
  75. package/src/forge/_generated/liveTransportConfig.ts +1 -1
  76. package/src/forge/_generated/makeRegistry.json +2 -2
  77. package/src/forge/_generated/makeRegistry.ts +16 -2
  78. package/src/forge/_generated/makeTemplates.json +2 -2
  79. package/src/forge/_generated/makeTemplates.ts +6 -1
  80. package/src/forge/_generated/mockMap.json +1 -1
  81. package/src/forge/_generated/mockMap.ts +1 -1
  82. package/src/forge/_generated/operationPlaybooks.md +34 -14
  83. package/src/forge/_generated/packageGraph.json +2 -2
  84. package/src/forge/_generated/packageGraph.ts +8808 -4723
  85. package/src/forge/_generated/packageUpgradeRegistry.json +2 -2
  86. package/src/forge/_generated/packageUpgradeRegistry.ts +2 -2
  87. package/src/forge/_generated/permissionMatrix.json +2 -2
  88. package/src/forge/_generated/permissionMatrix.ts +3 -3
  89. package/src/forge/_generated/policyRegistry.json +2 -2
  90. package/src/forge/_generated/policyRegistry.ts +3 -3
  91. package/src/forge/_generated/queryRegistry.json +2 -2
  92. package/src/forge/_generated/queryRegistry.ts +3 -3
  93. package/src/forge/_generated/react.d.ts +1 -1
  94. package/src/forge/_generated/react.ts +1 -1
  95. package/src/forge/_generated/reactManifest.json +2 -2
  96. package/src/forge/_generated/reactManifest.ts +3 -3
  97. package/src/forge/_generated/releaseManifest.json +2 -2
  98. package/src/forge/_generated/releaseManifest.ts +3 -3
  99. package/src/forge/_generated/rlsPolicies.json +1 -1
  100. package/src/forge/_generated/rlsPolicies.sql +1 -1
  101. package/src/forge/_generated/rlsPolicies.ts +1 -1
  102. package/src/forge/_generated/runtimeGraph.json +2 -2
  103. package/src/forge/_generated/runtimeGraph.ts +3 -3
  104. package/src/forge/_generated/runtimeMatrix.json +2 -2
  105. package/src/forge/_generated/runtimeMatrix.ts +8684 -1939
  106. package/src/forge/_generated/runtimeRegistry.ts +1 -1
  107. package/src/forge/_generated/runtimeRules.md +13 -1
  108. package/src/forge/_generated/secretRegistry.json +1 -1
  109. package/src/forge/_generated/secretRegistry.ts +1 -1
  110. package/src/forge/_generated/secretsContext.ts +1 -1
  111. package/src/forge/_generated/serverApi.ts +1 -1
  112. package/src/forge/_generated/sourceMapManifest.json +2 -2
  113. package/src/forge/_generated/sourceMapManifest.ts +2 -2
  114. package/src/forge/_generated/sqlPlan.json +1 -1
  115. package/src/forge/_generated/sqlPlan.ts +1 -1
  116. package/src/forge/_generated/subscriptionManifest.json +2 -2
  117. package/src/forge/_generated/subscriptionManifest.ts +3 -3
  118. package/src/forge/_generated/symbolicationManifest.json +2 -2
  119. package/src/forge/_generated/symbolicationManifest.ts +2 -2
  120. package/src/forge/_generated/telemetryRegistry.json +2 -2
  121. package/src/forge/_generated/telemetryRegistry.ts +3 -3
  122. package/src/forge/_generated/telemetrySinks.json +2 -2
  123. package/src/forge/_generated/telemetrySinks.ts +2 -2
  124. package/src/forge/_generated/tenantScope.json +2 -2
  125. package/src/forge/_generated/tenantScope.ts +3 -3
  126. package/src/forge/_generated/testGraph.json +2 -2
  127. package/src/forge/_generated/testGraph.ts +71 -7
  128. package/src/forge/_generated/testPlanRegistry.json +2 -2
  129. package/src/forge/_generated/testPlanRegistry.ts +2 -2
  130. package/src/forge/_generated/uiRoutes.json +1 -1
  131. package/src/forge/_generated/uiRoutes.ts +1 -1
  132. package/src/forge/_generated/uiScenarios.json +1 -1
  133. package/src/forge/_generated/uiScenarios.ts +1 -1
  134. package/src/forge/_generated/uiTestManifest.json +2 -2
  135. package/src/forge/_generated/uiTestManifest.ts +2 -2
  136. package/src/forge/_generated/workflowRegistry.json +2 -2
  137. package/src/forge/_generated/workflowRegistry.ts +3 -3
  138. package/src/forge/_generated/workflowSubscriptions.json +2 -2
  139. package/src/forge/_generated/workflowSubscriptions.ts +3 -3
  140. package/src/forge/cli/ai.ts +186 -1
  141. package/src/forge/cli/commands.ts +5 -0
  142. package/src/forge/cli/dev.ts +32 -5
  143. package/src/forge/cli/new.ts +29 -1
  144. package/src/forge/cli/parse.ts +30 -3
  145. package/src/forge/compiler/agent-contract/build.ts +281 -8
  146. package/src/forge/compiler/agent-contract/types.ts +41 -0
  147. package/src/forge/compiler/ai-registry/build.ts +62 -1
  148. package/src/forge/compiler/ai-registry/constants.ts +1 -1
  149. package/src/forge/compiler/ai-registry/parse.ts +98 -4
  150. package/src/forge/compiler/app-graph/forge-apis.ts +1 -0
  151. package/src/forge/compiler/dev-manifest/build.ts +3 -0
  152. package/src/forge/compiler/make-registry/build.ts +13 -0
  153. package/src/forge/compiler/orchestrator/plan.ts +11 -0
  154. package/src/forge/compiler/orchestrator/serialize.ts +68 -0
  155. package/src/forge/compiler/types/ai-registry.ts +25 -1
  156. package/src/forge/compiler/types/app-graph.ts +1 -0
  157. package/src/forge/compiler/types/cli.ts +1 -0
  158. package/src/forge/compiler/types/dev-manifest.ts +3 -0
  159. package/src/forge/dev/server.ts +524 -3
  160. package/src/forge/make/index.ts +126 -3
  161. package/src/forge/make/templates.ts +188 -0
  162. package/src/forge/make/types.ts +1 -0
  163. package/src/forge/runtime/ai/context.ts +210 -5
  164. package/src/forge/runtime/ai/types.ts +70 -0
  165. package/src/forge/runtime/context/create-context.ts +30 -6
  166. package/src/forge/runtime/executor.ts +3 -2
  167. package/src/forge/runtime/live/live-query-runner.ts +2 -1
  168. package/src/forge/runtime/outbox/process.ts +2 -1
  169. package/src/forge/runtime/query/run-query.ts +2 -1
  170. package/src/forge/runtime/runner/run-entry.ts +2 -1
  171. package/src/forge/runtime/telemetry/sinks/posthog.ts +4 -5
  172. package/src/forge/runtime/telemetry/sinks/sentry.ts +4 -5
  173. package/src/forge/runtime/workflows/resolve-step.ts +2 -1
  174. package/src/forge/server.ts +82 -0
  175. package/src/forge/version.ts +1 -1
  176. package/templates/b2b-support-web/src/actions/captureTicketCreated.ts +7 -2
  177. package/templates/b2b-support-web/src/commands/closeTicket.ts +6 -1
  178. package/templates/b2b-support-web/src/commands/createTicket.ts +8 -2
  179. package/templates/b2b-support-web/src/queries/getTicket.ts +8 -1
  180. package/templates/b2b-support-web/web/components/CreateTicketForm.tsx +1 -2
  181. package/templates/b2b-support-web/web/components/PolicyDeniedDemo.tsx +1 -2
  182. package/templates/b2b-support-web/web/components/TicketList.tsx +1 -2
  183. package/templates/b2b-support-web/web/components/TraceDetails.tsx +1 -1
  184. package/templates/b2b-support-web/web/lib/forge.ts +1 -0
package/AGENTS.md CHANGED
@@ -1,4 +1,4 @@
1
- // @forge-generated generator=0.1.0-alpha.1 input=d50515ea2f22c012d06e8794c2031206c9478d732b15ce6592aa8bf74bdaa665 content=e0bf36433d915daf5ad06ac6265b3ac6f2cd1706269c69618bbbc1cb1f44e465
1
+ // @forge-generated generator=0.1.0-alpha.3 input=c6d07cc92a729a46f2ff02a05c005e7fe0d71a3a5800be6f670a3fca2db04d6f content=1611635edf59c122b013ba76c85bd333ab3b30b289aaea04a9074f9438782a50
2
2
  # AGENTS.md
3
3
 
4
4
  <!-- forge-generated:start -->
@@ -69,6 +69,7 @@ forge inspect app --json
69
69
  forge inspect all --json
70
70
  forge inspect frontend --json
71
71
  forge inspect capabilities --json
72
+ forge inspect agent-tools --json
72
73
  forge deps inspect <package> --json
73
74
  forge deps api <package> <symbol> --json
74
75
  forge deps trace <package> --json
@@ -82,6 +83,9 @@ forge doctor
82
83
  forge doctor windows --json
83
84
  forge setup windows --json
84
85
  forge agent print-context --json
86
+ forge ai tools --json
87
+ forge ai agents --json
88
+ forge ai trace <traceId> --json
85
89
  forge verify --smoke
86
90
  forge verify --standard
87
91
  forge verify --strict
@@ -103,6 +107,21 @@ Tenant-scoped tables:
103
107
  - ANTHROPIC_API_KEY (required)
104
108
  - OPENAI_API_KEY (required)
105
109
 
110
+ ## AI Tools And Agents
111
+
112
+ - AI SDK engine: Vercel AI SDK v6.
113
+ - Forge layer: generated registry, runtime rules, telemetry, secrets, tenant/auth context, and agent contract.
114
+ - Use `ctx.agent.run` or `ctx.ai.runAgent` only in actions, workflows, endpoints, and server code.
115
+ - Do not create custom tool loops; use Forge tools and AI SDK `ToolLoopAgent` through the Forge runtime.
116
+
117
+ Tools:
118
+
119
+ - none
120
+
121
+ Agents:
122
+
123
+ - none
124
+
106
125
  ## Auth
107
126
 
108
127
  - Modes: dev-headers, jwt, oidc, disabled
@@ -158,6 +177,7 @@ Use:
158
177
  forge make resource <name> --fields title:text,status:enum(open,closed) --dry-run --json
159
178
  forge make resource <name> --fields title:text,status:enum(open,closed) --with-ui --yes
160
179
  forge make ui --framework vite --dry-run --json
180
+ forge make ai-chat support --dry-run --json
161
181
  ```
162
182
 
163
183
  Review the plan before applying when the resource touches schema or policies.
@@ -194,11 +214,13 @@ Use:
194
214
  ```bash
195
215
  forge refactor rename field tickets.priority tickets.urgency --dry-run --json
196
216
  forge refactor rename field tickets.priority tickets.urgency --yes
217
+ forge refactor rename command createTicket openTicket --dry-run --json
218
+ forge refactor rename command createTicket openTicket --yes
197
219
  ```
198
220
 
199
- These codemods are AST-aware for `extract-action`, `rename field`, and `rename table`. Field renames are scoped to the target table, so `tickets.priority` only rewrites references linked to `tickets`.
221
+ These codemods are AST-aware for `extract-action`, `rename command`, `rename field`, and `rename table`. Command renames update runtime registries, generated client references, frontend hooks, tests, and string references where safe. Field renames are scoped to the target table, so `tickets.priority` only rewrites references linked to `tickets`.
200
222
 
201
- Never edit `src/forge/_generated/**` directly. Review migration hints before applying field or table renames.
223
+ Never edit `src/forge/_generated/**` directly. Review migration hints before applying command, field, or table renames.
202
224
 
203
225
  ### Plan impact-based tests
204
226
 
@@ -224,6 +246,19 @@ forge repair plan --from-last-test-run --write
224
246
 
225
247
  Apply only high-confidence deterministic repairs automatically. Review medium or low confidence repairs before changing code.
226
248
 
249
+ ### Add AI tools or agents
250
+
251
+ Use:
252
+
253
+ ```bash
254
+ forge generate
255
+ forge inspect all --json
256
+ forge ai check --json
257
+ forge ai trace <traceId> --json
258
+ ```
259
+
260
+ Define tools with `aiTool({ inputSchema, outputSchema, risk, needsApproval, handler })` and agents with `agent({ provider, model, instructions, tools, stopWhen })`. Execute agents with `ctx.agent.run` or `ctx.ai.runAgent` only from actions, workflows, endpoints, or server code. In dev, POST `/ai/agents/run` returns JSON for automation and POST `/ai/agents/chat` returns an AI SDK UIMessage stream for React `useChat`; both accept `agent: "<exportedAgentName>"` and use generated auto-tools from `agentTools.json`.
261
+
227
262
  ### Export agent adapters
228
263
 
229
264
  Use:
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # forgeos
2
2
 
3
+ ## 0.1.0-alpha.2
4
+
5
+ Windows and generated-app hardening:
6
+
7
+ - Fixed Node ESM handler loading on Windows by importing generated app modules
8
+ through `file://` URLs across commands, queries, liveQueries, outbox actions,
9
+ workflow steps, mocks, and telemetry adapters.
10
+ - Fixed `forge dev` SSE streaming on the Node HTTP fallback so liveQuery
11
+ snapshots are flushed immediately instead of buffering forever.
12
+ - Hardened generated app scaffolding and web dev spawning on Windows.
13
+ - Updated the B2B support template to route frontend imports through
14
+ `web/lib/forge.ts` and use safer handler input validation.
15
+ - Added focused tests for Node compatibility, template scaffolding, runtime
16
+ imports, and streaming responses.
17
+
3
18
  ## 0.1.0-alpha.1
4
19
 
5
20
  Republish alpha with the dependency/API oracle improvements:
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Agent-native application framework and compiler for building Forge apps without a mandatory dashboard. ForgeOS turns application source into deterministic runtime contracts, generated clients, safety checks, and machine-readable context that humans and AI coding agents can use safely.
4
4
 
5
- **Status:** private/public alpha MVP, implemented through H42. The core compiler, local runtime, frontend SDK, production auth, RLS compiler, repair/review loops, UI test bridge, guided intent router, full-stack capability map, clean templates, faster generated checks, showcase app, Windows-safe Bun resolution, native Windows diagnostics/setup, Node-compatible CLI/runtime paths, observable verify timeouts, multi-OS Node CI smoke, release packaging smoke, npm alpha publishing, Trusted Publisher/OIDC release wiring, ReadTheDocs-ready public docs, package/version-aligned generator metadata, AST-aware codemods for `extract-action`, `rename field`, and `rename table`, broader field-test automation, and quieter template workspaces are present. Public release hardening is still focused on deeper semantic codemods and more real-project field reports.
5
+ **Status:** private/public alpha MVP, implemented through H42. The core compiler, local runtime, frontend SDK, production auth, RLS compiler, repair/review loops, UI test bridge, guided intent router, full-stack capability map, clean templates, faster generated checks, showcase app, Windows-safe Bun resolution, native Windows diagnostics/setup, Node-compatible CLI/runtime paths, observable verify timeouts, multi-OS Node CI smoke, release packaging smoke, npm alpha publishing, Trusted Publisher/OIDC release wiring, ReadTheDocs-ready public docs, package/version-aligned generator metadata, AST-aware codemods for `extract-action`, `rename command`, `rename field`, and `rename table`, broader field-test automation, and quieter template workspaces are present. Public release hardening is still focused on deeper semantic codemods and more real-project field reports.
6
6
 
7
7
  Public docs are configured for ReadTheDocs with `.readthedocs.yaml` and `mkdocs.yml`. The local docs entrypoint is `docs/index.md`.
8
8
 
@@ -44,6 +44,22 @@ These files describe the app surface, runtime rules, generated files, policies,
44
44
 
45
45
  ## Create a Test App
46
46
 
47
+ Public one-command app creation:
48
+
49
+ ```bash
50
+ npm create forge-app@alpha notes-app -- --template minimal-web
51
+ cd notes-app
52
+ npm run dev
53
+ ```
54
+
55
+ Equivalent lower-level command without installing ForgeOS globally:
56
+
57
+ ```bash
58
+ npm exec --package forgeos@alpha -- forge new notes-app --template minimal-web --package-manager npm
59
+ ```
60
+
61
+ If ForgeOS is already installed or you are inside this repository:
62
+
47
63
  ```bash
48
64
  forge new notes-app --template minimal-web --package-manager npm
49
65
  cd notes-app
@@ -58,11 +74,11 @@ Templates also include workspace editor excludes for generated/runtime directori
58
74
  For release or external smoke testing, choose the Forge package source explicitly:
59
75
 
60
76
  ```bash
61
- forge new smoke-app --template minimal-web --package-manager npm --forge-spec "npm:forgeos@^0.1.0-alpha.0"
77
+ forge new smoke-app --template minimal-web --package-manager npm --forge-spec "npm:forgeos@alpha"
62
78
  forge new local-app --template minimal-web --package-manager npm --local-forge
63
79
  ```
64
80
 
65
- `--forge-spec` writes that dependency spec into the generated app, while `--local-forge` keeps the monorepo/local package workflow. The npm package is published as `forgeos`, but generated apps keep the dependency key, CLI binary, and import surface as `forge` (`forge`, `forge/server`, `forge/react`) by using npm alias specs such as `"forge": "npm:forgeos@^0.1.0-alpha.0"`. CI uses both `--forge-spec "file:$GITHUB_WORKSPACE"` and a packed tarball smoke to prove freshly created apps can install ForgeOS and run outside the framework workspace.
81
+ `--forge-spec` writes that dependency spec into the generated app, while `--local-forge` keeps the monorepo/local package workflow. The npm package is published as `forgeos`, but generated apps keep the dependency key, CLI binary, and import surface as `forge` (`forge`, `forge/server`, `forge/react`) by using npm alias specs such as `"forge": "npm:forgeos@alpha"`. CI uses both `--forge-spec "file:$GITHUB_WORKSPACE"` and a packed tarball smoke to prove freshly created apps can install ForgeOS and run outside the framework workspace.
66
82
 
67
83
  For broader field testing:
68
84
 
@@ -122,7 +138,7 @@ forge.lock
122
138
  | Auth | dev headers, JWT, OIDC discovery/JWKS verification via `jose`, production-mode guardrails |
123
139
  | RLS | Postgres RLS SQL compiler/checks for DB-enforced tenant isolation |
124
140
  | Secrets/env | secret registry, env schema, redaction, strict `process.env` checks |
125
- | AI | provider registry, `ctx.ai`, mock mode, telemetry without prompt/output retention by default |
141
+ | AI | Vercel AI SDK v6 engine, provider registry, `ctx.ai`, `ctx.agent.run`, `aiTool`, `agent`, `/ai/agents/run` JSON automation, `/ai/agents/chat` UIMessage streaming, `forge ai trace`, mock mode, telemetry without prompt/output retention by default |
126
142
  | Frontend | generated client SDK, React/Next hooks, template app, liveQuery client support |
127
143
  | LiveQuery | durable invalidation log, reconnect/resume semantics, production hardening checks |
128
144
  | Self-host | compose/deploy artifacts and self-host checks |
@@ -198,6 +214,7 @@ Common command groups:
198
214
  Refactor codemods are AST-aware where safety matters most:
199
215
 
200
216
  - `forge refactor extract-action` is binding-aware and preserves unrelated imports, type-only imports, and shadowed locals.
217
+ - `forge refactor rename command <oldName> <newName>` rewrites command declarations, generated client references, React hook usage, tests, and safe string references while preserving unrelated symbols.
201
218
  - `forge refactor rename field <table.field> <table.field>` rewrites structured TS/JS/JSX/TSX and JSON references, preserves locals, and scopes the field change to files/objects linked to the target table. For example, `tickets.priority -> tickets.urgency` does not rewrite a generic `priority` prop in a component with no `tickets` binding.
202
219
  - `forge refactor rename table <from> <to>` rewrites table definitions, `ctx.db.<table>` access, policy strings, JSON/blueprints, and import/export specifiers while preserving unrelated locals with the same name.
203
220
 
@@ -307,7 +324,7 @@ For the first prerelease publish, use the alpha dist-tag explicitly:
307
324
 
308
325
  ```bash
309
326
  npm run release:publish-local-alpha -- --dry-run
310
- npm run release:publish-local-alpha -- --yes
327
+ npm run release:publish-alpha
311
328
  ```
312
329
 
313
330
  The normal path is:
@@ -330,7 +347,7 @@ Configure npm Trusted Publisher for package `forgeos`:
330
347
  | Environment | blank |
331
348
  | Allowed action | `npm publish` |
332
349
 
333
- Do not add `NPM_TOKEN` for normal releases. Alpha releases publish with the `alpha` dist-tag so prerelease builds do not become `latest` accidentally. The first manual package creation uses `release:publish-local-alpha`, which publishes from a temporary hardlink-free staging copy and disables provenance because local shells do not have a GitHub OIDC provider. The workflow uses `id-token: write`, Node 24/npm 11+, and provenance for subsequent releases. `npm run release:smoke` runs `npm pack`, creates a fresh app with the packed tarball, installs dependencies, runs `forge dev --once --json`, and verifies the app smoke path.
350
+ Do not add `NPM_TOKEN` for normal releases. Alpha releases publish with the `alpha` dist-tag so prerelease builds do not become `latest` accidentally. Use `release:publish-local-alpha -- --dry-run` only to validate the staged tarball locally; real npm publishing should go through `release:publish-alpha`, which dispatches `publish.yml` and uses npm OIDC Trusted Publisher. The workflow checks whether the package version already exists before installing dependencies or running tests, then uses `id-token: write`, Node 24/npm 11+, and provenance for the actual publish. `npm run release:smoke` runs `npm pack`, creates a fresh app with the packed tarball, installs dependencies, runs `forge dev --once --json`, and verifies the app smoke path.
334
351
 
335
352
  ## Milestone History
336
353
 
@@ -381,7 +398,7 @@ H42 Verify observability and quieter app workspaces
381
398
 
382
399
  ## Remaining Hardening Before Public Release
383
400
 
384
- - Keep expanding semantic codemods beyond the current AST-aware `extract-action`, `rename field`, and `rename table` paths.
401
+ - Keep expanding semantic codemods beyond the current AST-aware `extract-action`, `rename command`, `rename field`, and `rename table` paths.
385
402
  - Reduce command-selection risk with more task routers and richer inline diagnostics.
386
403
  - Keep hardening native Windows setup beyond diagnostics and safe automatic environment fixes.
387
404
  - Keep broadening package manager CI from template smoke toward install/build smoke for pnpm and yarn apps.
package/bin/forge.mjs CHANGED
@@ -5,15 +5,16 @@ import { fileURLToPath, pathToFileURL } from "node:url";
5
5
  const root = dirname(dirname(fileURLToPath(import.meta.url)));
6
6
  const entrypoint = join(root, "src", "forge", "cli", "main.ts");
7
7
 
8
- let tsImport;
8
+ let register;
9
9
  try {
10
- ({ tsImport } = await import("tsx/esm/api"));
10
+ ({ register } = await import("tsx/esm/api"));
11
11
  } catch {
12
12
  console.error("error: Forge requires the 'tsx' package to run under Node.");
13
13
  console.error("Install dependencies with your package manager, then retry.");
14
14
  process.exit(1);
15
15
  }
16
16
 
17
- const module = await tsImport(pathToFileURL(entrypoint).href, import.meta.url);
17
+ register();
18
+ const module = await import(pathToFileURL(entrypoint).href);
18
19
  const exitCode = await module.main(process.argv.slice(2));
19
20
  process.exit(exitCode);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forgeos",
3
- "version": "0.1.0-alpha.1",
3
+ "version": "0.1.0-alpha.3",
4
4
  "description": "Agent-native application framework and compiler for building Forge apps without a mandatory dashboard.",
5
5
  "type": "module",
6
6
  "files": [
@@ -36,6 +36,7 @@
36
36
  "release": "changeset publish --tag alpha",
37
37
  "release:pack": "npm pack --dry-run",
38
38
  "release:smoke": "node scripts/smoke-packed-package.mjs",
39
+ "release:publish-alpha": "node scripts/publish-trusted-alpha.mjs",
39
40
  "release:publish-local-alpha": "node scripts/publish-local-alpha.mjs",
40
41
  "field:test": "node scripts/field-test-forgeos.mjs",
41
42
  "forge": "node ./bin/forge.mjs",
@@ -72,10 +73,10 @@
72
73
  "cli"
73
74
  ],
74
75
  "dependencies": {
75
- "@ai-sdk/anthropic": "^2.0.0",
76
- "@ai-sdk/openai": "^2.0.0",
76
+ "@ai-sdk/anthropic": "^3.0.84",
77
+ "@ai-sdk/openai": "^3.0.71",
77
78
  "@electric-sql/pglite": "^0.2.17",
78
- "ai": "^5.0.0",
79
+ "ai": "^6.0.205",
79
80
  "jose": "^6.2.3",
80
81
  "postgres": "^3.4.5",
81
82
  "react": "^19.2.7",
@@ -1,2 +1,2 @@
1
- // @forge-generated generator=0.1.0-alpha.1 input=d50515ea2f22c012d06e8794c2031206c9478d732b15ce6592aa8bf74bdaa665 content=8f488b6c983f10308f100f4cf8180d2d1d35bc3c6f4cc1ef07e601718c7919df
2
- {"analyzerVersion":"0.1.0","byEvent":{},"diagnostics":[],"generatorVersion":"0.1.0-alpha.1","inputHash":"a07f627a67301f9fec75b77a777eaa16189a423dea394ddca4a2a04e4f4df32a","schemaVersion":"0.1.0","subscriptions":[]}
1
+ // @forge-generated generator=0.1.0-alpha.3 input=c6d07cc92a729a46f2ff02a05c005e7fe0d71a3a5800be6f670a3fca2db04d6f content=2d023951fabe281a316ab0cfb3de2a66b02f8a8f79941d1131bdd5e473bbf07d
2
+ {"analyzerVersion":"0.1.0","byEvent":{},"diagnostics":[],"generatorVersion":"0.1.0-alpha.3","inputHash":"c9475eac5a16004809cb3ec4a8a67a0d6c9a310cb414b8be0200c1f787d021df","schemaVersion":"0.1.0","subscriptions":[]}
@@ -1,10 +1,10 @@
1
- // @forge-generated generator=0.1.0-alpha.1 input=d50515ea2f22c012d06e8794c2031206c9478d732b15ce6592aa8bf74bdaa665 content=40b73d563f42e079c6094c5ee02cb6a9cfee3d83e73a7e8780303f9ceb6955f9
1
+ // @forge-generated generator=0.1.0-alpha.3 input=c6d07cc92a729a46f2ff02a05c005e7fe0d71a3a5800be6f670a3fca2db04d6f content=37a3e90789abd2ccddf4a70b82a8d7f377c97475268be530292c8ba1e830e616
2
2
  export const actionSubscriptions = {
3
3
  "analyzerVersion": "0.1.0",
4
4
  "byEvent": {},
5
5
  "diagnostics": [],
6
- "generatorVersion": "0.1.0-alpha.1",
7
- "inputHash": "a07f627a67301f9fec75b77a777eaa16189a423dea394ddca4a2a04e4f4df32a",
6
+ "generatorVersion": "0.1.0-alpha.3",
7
+ "inputHash": "c9475eac5a16004809cb3ec4a8a67a0d6c9a310cb414b8be0200c1f787d021df",
8
8
  "schemaVersion": "0.1.0",
9
9
  "subscriptions": []
10
10
  } as const;
@@ -1,2 +1,2 @@
1
- // @forge-generated generator=0.1.0-alpha.1 input=d50515ea2f22c012d06e8794c2031206c9478d732b15ce6592aa8bf74bdaa665 content=2e84c3d34032ddcbe0a51653be3afa91a0176bb8adc41256adb3d46c2bddd54f
2
- {"generatorVersion":"0.1.0-alpha.1","schemaVersion":"0.1.0","sourceHash":"sha256:f13473abd20c2fa51c3fca8a56e110d129acf60b3d783326caaf7ab351e5f3da","targets":[{"adapterVersion":"agent-adapter-0.1.0","default":true,"files":["AGENTS.md",".forge/agent/context.json",".forge/agent/commands.json",".forge/agent/done-criteria.json",".forge/agent/playbooks/add-command.md",".forge/agent/playbooks/add-query.md",".forge/agent/playbooks/add-livequery.md",".forge/agent/playbooks/add-resource.md",".forge/agent/playbooks/refactor-field.md",".forge/agent/playbooks/fix-policy-denied.md",".forge/agent/playbooks/fix-guard-violation.md",".forge/agent/playbooks/upgrade-package.md",".forge/agent/playbooks/debug-trace.md",".forge/agent/playbooks/frontend-change.md",".forge/agent/playbooks/self-host-check.md"],"formatVersion":"2026-06","name":"generic"},{"adapterVersion":"agent-adapter-0.1.0","files":[".codex/skills/forge-add-command/SKILL.md",".codex/skills/forge-add-resource/SKILL.md",".codex/skills/forge-fix-guard-violation/SKILL.md",".codex/skills/forge-fix-policy-denied/SKILL.md",".codex/skills/forge-upgrade-package/SKILL.md",".codex/skills/forge-debug-trace/SKILL.md",".codex/agents/forge-explorer.toml",".codex/agents/forge-worker.toml",".codex/agents/forge-reviewer.toml",".codex/agents/forge-security.toml"],"formatVersion":"2026-06","name":"codex","optional":true},{"adapterVersion":"agent-adapter-0.1.0","files":[".cursor/rules/forge-runtime.mdc",".cursor/rules/forge-frontend.mdc",".cursor/rules/forge-security.mdc",".cursor/rules/forge-workflow.mdc"],"formatVersion":"2026-06","name":"cursor","optional":true},{"adapterVersion":"agent-adapter-0.1.0","files":["CLAUDE.md",".claude/forge-runtime.md",".claude/forge-playbooks.md",".claude/forge-security.md"],"formatVersion":"2026-06","name":"claude","optional":true}]}
1
+ // @forge-generated generator=0.1.0-alpha.3 input=c6d07cc92a729a46f2ff02a05c005e7fe0d71a3a5800be6f670a3fca2db04d6f content=29b0486d2fbd8fec9b07e00a910ef11bca3ce47cd33374878f81e34a9ddd8a4d
2
+ {"generatorVersion":"0.1.0-alpha.3","schemaVersion":"0.1.0","sourceHash":"sha256:96d8a8d8dbf71b5a8b36a062aa69312aa540fe47ac1a3fc7e03c49befc428a30","targets":[{"adapterVersion":"agent-adapter-0.1.0","default":true,"files":["AGENTS.md",".forge/agent/context.json",".forge/agent/commands.json",".forge/agent/done-criteria.json",".forge/agent/playbooks/add-command.md",".forge/agent/playbooks/add-query.md",".forge/agent/playbooks/add-livequery.md",".forge/agent/playbooks/add-resource.md",".forge/agent/playbooks/refactor-field.md",".forge/agent/playbooks/fix-policy-denied.md",".forge/agent/playbooks/fix-guard-violation.md",".forge/agent/playbooks/upgrade-package.md",".forge/agent/playbooks/debug-trace.md",".forge/agent/playbooks/frontend-change.md",".forge/agent/playbooks/self-host-check.md"],"formatVersion":"2026-06","name":"generic"},{"adapterVersion":"agent-adapter-0.1.0","files":[".codex/skills/forge-add-command/SKILL.md",".codex/skills/forge-add-resource/SKILL.md",".codex/skills/forge-fix-guard-violation/SKILL.md",".codex/skills/forge-fix-policy-denied/SKILL.md",".codex/skills/forge-upgrade-package/SKILL.md",".codex/skills/forge-debug-trace/SKILL.md",".codex/agents/forge-explorer.toml",".codex/agents/forge-worker.toml",".codex/agents/forge-reviewer.toml",".codex/agents/forge-security.toml"],"formatVersion":"2026-06","name":"codex","optional":true},{"adapterVersion":"agent-adapter-0.1.0","files":[".cursor/rules/forge-runtime.mdc",".cursor/rules/forge-frontend.mdc",".cursor/rules/forge-security.mdc",".cursor/rules/forge-workflow.mdc"],"formatVersion":"2026-06","name":"cursor","optional":true},{"adapterVersion":"agent-adapter-0.1.0","files":["CLAUDE.md",".claude/forge-runtime.md",".claude/forge-playbooks.md",".claude/forge-security.md"],"formatVersion":"2026-06","name":"claude","optional":true}]}
@@ -1,8 +1,8 @@
1
- // @forge-generated generator=0.1.0-alpha.1 input=d50515ea2f22c012d06e8794c2031206c9478d732b15ce6592aa8bf74bdaa665 content=dd6c7e8b6dc51f6304c9c1f72374b43a8539d86f182cda985a1b284afc78f6cb
1
+ // @forge-generated generator=0.1.0-alpha.3 input=c6d07cc92a729a46f2ff02a05c005e7fe0d71a3a5800be6f670a3fca2db04d6f content=5fa75085c83aafc4d227978e3aeb555c16cfea75584c57fc75de474b2f230d5a
2
2
  export const agentAdapterManifest = {
3
- "generatorVersion": "0.1.0-alpha.1",
3
+ "generatorVersion": "0.1.0-alpha.3",
4
4
  "schemaVersion": "0.1.0",
5
- "sourceHash": "sha256:f13473abd20c2fa51c3fca8a56e110d129acf60b3d783326caaf7ab351e5f3da",
5
+ "sourceHash": "sha256:96d8a8d8dbf71b5a8b36a062aa69312aa540fe47ac1a3fc7e03c49befc428a30",
6
6
  "targets": [
7
7
  {
8
8
  "adapterVersion": "agent-adapter-0.1.0",