forgeos 0.1.0-alpha.0

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 (540) hide show
  1. package/.npmignore +1 -0
  2. package/AGENTS.md +277 -0
  3. package/CHANGELOG.md +8 -0
  4. package/CONTRIBUTING.md +58 -0
  5. package/README.md +377 -0
  6. package/bin/forge-bun.mjs +110 -0
  7. package/bin/forge.mjs +19 -0
  8. package/package.json +96 -0
  9. package/packages/eslint-plugin-forge/index.ts +15 -0
  10. package/packages/eslint-plugin-forge/package.json +10 -0
  11. package/packages/eslint-plugin-forge/src/check-source.ts +95 -0
  12. package/packages/eslint-plugin-forge/src/load-artifacts.ts +24 -0
  13. package/packages/eslint-plugin-forge/src/rule-no-forge-guard-violation.ts +93 -0
  14. package/src/forge/_generated/actionSubscriptions.json +2 -0
  15. package/src/forge/_generated/actionSubscriptions.ts +10 -0
  16. package/src/forge/_generated/agentAdapterManifest.json +2 -0
  17. package/src/forge/_generated/agentAdapterManifest.ts +73 -0
  18. package/src/forge/_generated/agentContract.json +2 -0
  19. package/src/forge/_generated/agentContract.ts +912 -0
  20. package/src/forge/_generated/agentQuickstart.md +32 -0
  21. package/src/forge/_generated/aiContext.ts +59 -0
  22. package/src/forge/_generated/aiModels.json +2 -0
  23. package/src/forge/_generated/aiModels.ts +35 -0
  24. package/src/forge/_generated/aiProviders.json +2 -0
  25. package/src/forge/_generated/aiProviders.ts +23 -0
  26. package/src/forge/_generated/aiRegistry.json +2 -0
  27. package/src/forge/_generated/aiRegistry.ts +29 -0
  28. package/src/forge/_generated/api.json +2 -0
  29. package/src/forge/_generated/api.ts +8 -0
  30. package/src/forge/_generated/appGraph.json +2 -0
  31. package/src/forge/_generated/appGraph.ts +14511 -0
  32. package/src/forge/_generated/appMap.md +35 -0
  33. package/src/forge/_generated/artifactManifest.json +2 -0
  34. package/src/forge/_generated/artifactManifest.ts +7 -0
  35. package/src/forge/_generated/authClaims.json +2 -0
  36. package/src/forge/_generated/authClaims.ts +13 -0
  37. package/src/forge/_generated/authConfig.json +2 -0
  38. package/src/forge/_generated/authConfig.ts +17 -0
  39. package/src/forge/_generated/authContext.ts +23 -0
  40. package/src/forge/_generated/authRegistry.json +2 -0
  41. package/src/forge/_generated/authRegistry.ts +25 -0
  42. package/src/forge/_generated/buildInfo.json +2 -0
  43. package/src/forge/_generated/buildInfo.ts +9 -0
  44. package/src/forge/_generated/capabilityMap.json +2 -0
  45. package/src/forge/_generated/capabilityMap.md +15 -0
  46. package/src/forge/_generated/capabilityMap.ts +17 -0
  47. package/src/forge/_generated/client.ts +282 -0
  48. package/src/forge/_generated/clientApi.ts +9 -0
  49. package/src/forge/_generated/clientManifest.json +2 -0
  50. package/src/forge/_generated/clientManifest.ts +39 -0
  51. package/src/forge/_generated/clientTypes.ts +78 -0
  52. package/src/forge/_generated/configRegistry.json +2 -0
  53. package/src/forge/_generated/configRegistry.ts +4 -0
  54. package/src/forge/_generated/dataGraph.json +2 -0
  55. package/src/forge/_generated/dataGraph.ts +8 -0
  56. package/src/forge/_generated/db.json +2 -0
  57. package/src/forge/_generated/db.ts +2 -0
  58. package/src/forge/_generated/dbSecurityManifest.json +2 -0
  59. package/src/forge/_generated/dbSecurityManifest.ts +15 -0
  60. package/src/forge/_generated/dbSessionContext.json +2 -0
  61. package/src/forge/_generated/dbSessionContext.ts +39 -0
  62. package/src/forge/_generated/deployManifest.json +2 -0
  63. package/src/forge/_generated/deployManifest.ts +14 -0
  64. package/src/forge/_generated/devManifest.json +2 -0
  65. package/src/forge/_generated/devManifest.ts +47 -0
  66. package/src/forge/_generated/envSchema.json +2 -0
  67. package/src/forge/_generated/envSchema.ts +59 -0
  68. package/src/forge/_generated/frontendGraph.json +2 -0
  69. package/src/forge/_generated/frontendGraph.ts +27 -0
  70. package/src/forge/_generated/importGuards.json +2 -0
  71. package/src/forge/_generated/importGuards.ts +652 -0
  72. package/src/forge/_generated/index.ts +67 -0
  73. package/src/forge/_generated/liveProductionManifest.json +2 -0
  74. package/src/forge/_generated/liveProductionManifest.ts +23 -0
  75. package/src/forge/_generated/liveProtocol.json +2 -0
  76. package/src/forge/_generated/liveProtocol.ts +21 -0
  77. package/src/forge/_generated/liveQueryRegistry.json +2 -0
  78. package/src/forge/_generated/liveQueryRegistry.ts +9 -0
  79. package/src/forge/_generated/liveTransportConfig.json +2 -0
  80. package/src/forge/_generated/liveTransportConfig.ts +19 -0
  81. package/src/forge/_generated/makeRegistry.json +2 -0
  82. package/src/forge/_generated/makeRegistry.ts +163 -0
  83. package/src/forge/_generated/makeTemplates.json +2 -0
  84. package/src/forge/_generated/makeTemplates.ts +61 -0
  85. package/src/forge/_generated/mockMap.json +2 -0
  86. package/src/forge/_generated/mockMap.ts +7 -0
  87. package/src/forge/_generated/operationPlaybooks.md +145 -0
  88. package/src/forge/_generated/packageGraph.json +2 -0
  89. package/src/forge/_generated/packageGraph.ts +168569 -0
  90. package/src/forge/_generated/packageUpgradeRegistry.json +2 -0
  91. package/src/forge/_generated/packageUpgradeRegistry.ts +15 -0
  92. package/src/forge/_generated/permissionMatrix.json +2 -0
  93. package/src/forge/_generated/permissionMatrix.ts +7 -0
  94. package/src/forge/_generated/policyRegistry.json +2 -0
  95. package/src/forge/_generated/policyRegistry.ts +11 -0
  96. package/src/forge/_generated/queryRegistry.json +2 -0
  97. package/src/forge/_generated/queryRegistry.ts +9 -0
  98. package/src/forge/_generated/react.d.ts +22 -0
  99. package/src/forge/_generated/react.ts +29 -0
  100. package/src/forge/_generated/reactManifest.json +2 -0
  101. package/src/forge/_generated/reactManifest.ts +19 -0
  102. package/src/forge/_generated/releaseManifest.json +2 -0
  103. package/src/forge/_generated/releaseManifest.ts +25 -0
  104. package/src/forge/_generated/rlsPolicies.json +2 -0
  105. package/src/forge/_generated/rlsPolicies.sql +34 -0
  106. package/src/forge/_generated/rlsPolicies.ts +6 -0
  107. package/src/forge/_generated/runtimeGraph.json +2 -0
  108. package/src/forge/_generated/runtimeGraph.ts +8 -0
  109. package/src/forge/_generated/runtimeMatrix.json +2 -0
  110. package/src/forge/_generated/runtimeMatrix.ts +229125 -0
  111. package/src/forge/_generated/runtimeRegistry.ts +2 -0
  112. package/src/forge/_generated/runtimeRules.md +79 -0
  113. package/src/forge/_generated/secretRegistry.json +2 -0
  114. package/src/forge/_generated/secretRegistry.ts +50 -0
  115. package/src/forge/_generated/secretsContext.ts +11 -0
  116. package/src/forge/_generated/serverApi.ts +10 -0
  117. package/src/forge/_generated/sourceMapManifest.json +2 -0
  118. package/src/forge/_generated/sourceMapManifest.ts +7 -0
  119. package/src/forge/_generated/sqlPlan.json +2 -0
  120. package/src/forge/_generated/sqlPlan.ts +88 -0
  121. package/src/forge/_generated/subscriptionManifest.json +2 -0
  122. package/src/forge/_generated/subscriptionManifest.ts +7 -0
  123. package/src/forge/_generated/symbolicationManifest.json +2 -0
  124. package/src/forge/_generated/symbolicationManifest.ts +17 -0
  125. package/src/forge/_generated/telemetryRegistry.json +2 -0
  126. package/src/forge/_generated/telemetryRegistry.ts +9 -0
  127. package/src/forge/_generated/telemetrySinks.json +2 -0
  128. package/src/forge/_generated/telemetrySinks.ts +11 -0
  129. package/src/forge/_generated/tenantScope.json +2 -0
  130. package/src/forge/_generated/tenantScope.ts +8 -0
  131. package/src/forge/_generated/testGraph.json +2 -0
  132. package/src/forge/_generated/testGraph.ts +3054 -0
  133. package/src/forge/_generated/testPlanRegistry.json +2 -0
  134. package/src/forge/_generated/testPlanRegistry.ts +33 -0
  135. package/src/forge/_generated/uiRoutes.json +2 -0
  136. package/src/forge/_generated/uiRoutes.ts +16 -0
  137. package/src/forge/_generated/uiScenarios.json +2 -0
  138. package/src/forge/_generated/uiScenarios.ts +30 -0
  139. package/src/forge/_generated/uiTestManifest.json +2 -0
  140. package/src/forge/_generated/uiTestManifest.ts +27 -0
  141. package/src/forge/_generated/workflowRegistry.json +2 -0
  142. package/src/forge/_generated/workflowRegistry.ts +9 -0
  143. package/src/forge/_generated/workflowSubscriptions.json +2 -0
  144. package/src/forge/_generated/workflowSubscriptions.ts +10 -0
  145. package/src/forge/agent-adapters/index.ts +1002 -0
  146. package/src/forge/agent-adapters/types.ts +135 -0
  147. package/src/forge/cli/agent-contract.ts +50 -0
  148. package/src/forge/cli/ai.ts +148 -0
  149. package/src/forge/cli/auth.ts +198 -0
  150. package/src/forge/cli/build.ts +105 -0
  151. package/src/forge/cli/bun-exec.ts +4 -0
  152. package/src/forge/cli/commands.ts +1130 -0
  153. package/src/forge/cli/db.ts +316 -0
  154. package/src/forge/cli/deps.ts +277 -0
  155. package/src/forge/cli/dev.ts +529 -0
  156. package/src/forge/cli/doctor.ts +209 -0
  157. package/src/forge/cli/feature.ts +485 -0
  158. package/src/forge/cli/index.ts +25 -0
  159. package/src/forge/cli/lint-forge.ts +119 -0
  160. package/src/forge/cli/live.ts +179 -0
  161. package/src/forge/cli/main.ts +92 -0
  162. package/src/forge/cli/make.ts +133 -0
  163. package/src/forge/cli/new.ts +505 -0
  164. package/src/forge/cli/outbox.ts +297 -0
  165. package/src/forge/cli/output.ts +114 -0
  166. package/src/forge/cli/parse.ts +2211 -0
  167. package/src/forge/cli/policy.ts +204 -0
  168. package/src/forge/cli/query.ts +91 -0
  169. package/src/forge/cli/refactor.ts +221 -0
  170. package/src/forge/cli/release.ts +285 -0
  171. package/src/forge/cli/rls.ts +322 -0
  172. package/src/forge/cli/run.ts +76 -0
  173. package/src/forge/cli/secrets.ts +274 -0
  174. package/src/forge/cli/self-host.ts +468 -0
  175. package/src/forge/cli/serve.ts +93 -0
  176. package/src/forge/cli/telemetry.ts +219 -0
  177. package/src/forge/cli/verify.ts +587 -0
  178. package/src/forge/cli/version.ts +1 -0
  179. package/src/forge/cli/windows.ts +413 -0
  180. package/src/forge/cli/worker.ts +87 -0
  181. package/src/forge/cli/workflow.ts +424 -0
  182. package/src/forge/compiler/action-subscriptions/build.ts +116 -0
  183. package/src/forge/compiler/action-subscriptions/constants.ts +2 -0
  184. package/src/forge/compiler/action-subscriptions/index.ts +6 -0
  185. package/src/forge/compiler/action-subscriptions/parse.ts +6 -0
  186. package/src/forge/compiler/agent-contract/build.ts +1651 -0
  187. package/src/forge/compiler/agent-contract/types.ts +326 -0
  188. package/src/forge/compiler/ai-registry/build.ts +165 -0
  189. package/src/forge/compiler/ai-registry/constants.ts +2 -0
  190. package/src/forge/compiler/ai-registry/parse.ts +56 -0
  191. package/src/forge/compiler/api-surface/build.ts +107 -0
  192. package/src/forge/compiler/app-graph/build.ts +121 -0
  193. package/src/forge/compiler/app-graph/classify.ts +10 -0
  194. package/src/forge/compiler/app-graph/dup-symbol.ts +29 -0
  195. package/src/forge/compiler/app-graph/extract.ts +124 -0
  196. package/src/forge/compiler/app-graph/forge-apis.ts +29 -0
  197. package/src/forge/compiler/app-graph/index.ts +15 -0
  198. package/src/forge/compiler/app-graph/module-graph.ts +320 -0
  199. package/src/forge/compiler/app-graph/parser.ts +119 -0
  200. package/src/forge/compiler/app-graph/symbols.ts +48 -0
  201. package/src/forge/compiler/app-graph/tsconfig-hash.ts +62 -0
  202. package/src/forge/compiler/app-graph/types.ts +43 -0
  203. package/src/forge/compiler/app-graph/versions.ts +14 -0
  204. package/src/forge/compiler/cache/index.ts +17 -0
  205. package/src/forge/compiler/cache/key.ts +46 -0
  206. package/src/forge/compiler/cache/scheduler.ts +72 -0
  207. package/src/forge/compiler/cache/store.ts +78 -0
  208. package/src/forge/compiler/classifier/capabilities.ts +78 -0
  209. package/src/forge/compiler/classifier/classify.ts +113 -0
  210. package/src/forge/compiler/classifier/contexts.ts +188 -0
  211. package/src/forge/compiler/classifier/index.ts +18 -0
  212. package/src/forge/compiler/classifier/runtime-matrix.ts +45 -0
  213. package/src/forge/compiler/classifier/secrets.ts +41 -0
  214. package/src/forge/compiler/classifier/signals.ts +129 -0
  215. package/src/forge/compiler/client-sdk/build-manifest.ts +151 -0
  216. package/src/forge/compiler/client-sdk/render-client.ts +432 -0
  217. package/src/forge/compiler/data-graph/build.ts +131 -0
  218. package/src/forge/compiler/data-graph/constants.ts +5 -0
  219. package/src/forge/compiler/data-graph/index.ts +6 -0
  220. package/src/forge/compiler/data-graph/parse.ts +176 -0
  221. package/src/forge/compiler/data-graph/rls/build.ts +222 -0
  222. package/src/forge/compiler/data-graph/rls/types.ts +62 -0
  223. package/src/forge/compiler/data-graph/sql/ddl.ts +390 -0
  224. package/src/forge/compiler/data-graph/sql/naming.ts +10 -0
  225. package/src/forge/compiler/data-graph/sql/serialize.ts +85 -0
  226. package/src/forge/compiler/data-graph/sql/types.ts +37 -0
  227. package/src/forge/compiler/dev-manifest/build.ts +170 -0
  228. package/src/forge/compiler/dev-manifest/constants.ts +5 -0
  229. package/src/forge/compiler/diagnostics/codes.ts +611 -0
  230. package/src/forge/compiler/diagnostics/create.ts +245 -0
  231. package/src/forge/compiler/diagnostics/index.ts +55 -0
  232. package/src/forge/compiler/emitter/artifact-kind.ts +14 -0
  233. package/src/forge/compiler/emitter/barrel.ts +44 -0
  234. package/src/forge/compiler/emitter/constants.ts +7 -0
  235. package/src/forge/compiler/emitter/emit.ts +237 -0
  236. package/src/forge/compiler/emitter/index.ts +24 -0
  237. package/src/forge/compiler/emitter/lock.ts +62 -0
  238. package/src/forge/compiler/emitter/render.ts +73 -0
  239. package/src/forge/compiler/emitter/write.ts +35 -0
  240. package/src/forge/compiler/frontend-graph/build.ts +495 -0
  241. package/src/forge/compiler/fs/index.ts +23 -0
  242. package/src/forge/compiler/fs/memory.ts +233 -0
  243. package/src/forge/compiler/fs/node.ts +139 -0
  244. package/src/forge/compiler/fs/profile.ts +108 -0
  245. package/src/forge/compiler/fs/types.ts +52 -0
  246. package/src/forge/compiler/guards/artifacts.ts +96 -0
  247. package/src/forge/compiler/guards/check-ai-usage.ts +98 -0
  248. package/src/forge/compiler/guards/check-import-guards.ts +106 -0
  249. package/src/forge/compiler/guards/check-process-env.ts +98 -0
  250. package/src/forge/compiler/guards/check-query-usage.ts +76 -0
  251. package/src/forge/compiler/guards/index.ts +11 -0
  252. package/src/forge/compiler/guards/propagate-contexts.ts +57 -0
  253. package/src/forge/compiler/index.ts +17 -0
  254. package/src/forge/compiler/integration/add.ts +496 -0
  255. package/src/forge/compiler/integration/index.ts +17 -0
  256. package/src/forge/compiler/integration/plan.ts +283 -0
  257. package/src/forge/compiler/integration/render.ts +189 -0
  258. package/src/forge/compiler/integration/snapshot.ts +52 -0
  259. package/src/forge/compiler/integration/templates/ai.ts +131 -0
  260. package/src/forge/compiler/integration/templates/index.ts +8 -0
  261. package/src/forge/compiler/integration/templates/posthog.ts +145 -0
  262. package/src/forge/compiler/integration/templates/render.ts +113 -0
  263. package/src/forge/compiler/integration/templates/sentry.ts +151 -0
  264. package/src/forge/compiler/integration/templates/stripe.ts +109 -0
  265. package/src/forge/compiler/integration/templates/types.ts +14 -0
  266. package/src/forge/compiler/integration/templates/zod.ts +55 -0
  267. package/src/forge/compiler/live-production/types.ts +122 -0
  268. package/src/forge/compiler/live-query-registry/build.ts +150 -0
  269. package/src/forge/compiler/live-query-registry/constants.ts +2 -0
  270. package/src/forge/compiler/make-registry/build.ts +179 -0
  271. package/src/forge/compiler/orchestrator/discover.ts +214 -0
  272. package/src/forge/compiler/orchestrator/fast-check.ts +117 -0
  273. package/src/forge/compiler/orchestrator/generate-lock.ts +138 -0
  274. package/src/forge/compiler/orchestrator/guards.ts +5 -0
  275. package/src/forge/compiler/orchestrator/index.ts +27 -0
  276. package/src/forge/compiler/orchestrator/manifest-hashes.ts +21 -0
  277. package/src/forge/compiler/orchestrator/manifest.ts +92 -0
  278. package/src/forge/compiler/orchestrator/orphans.ts +51 -0
  279. package/src/forge/compiler/orchestrator/plan.ts +876 -0
  280. package/src/forge/compiler/orchestrator/profile.ts +36 -0
  281. package/src/forge/compiler/orchestrator/run.ts +277 -0
  282. package/src/forge/compiler/orchestrator/serialize.ts +886 -0
  283. package/src/forge/compiler/orchestrator/session.ts +96 -0
  284. package/src/forge/compiler/orchestrator/types.ts +31 -0
  285. package/src/forge/compiler/orchestrator/verify.ts +38 -0
  286. package/src/forge/compiler/orchestrator/workspace-index.ts +154 -0
  287. package/src/forge/compiler/package-graph/capabilities-stub.ts +33 -0
  288. package/src/forge/compiler/package-graph/checksum.ts +97 -0
  289. package/src/forge/compiler/package-graph/compiler.ts +392 -0
  290. package/src/forge/compiler/package-graph/constants.ts +4 -0
  291. package/src/forge/compiler/package-graph/dts-extractor.ts +142 -0
  292. package/src/forge/compiler/package-graph/exports-discovery.ts +84 -0
  293. package/src/forge/compiler/package-graph/extract-dts.ts +32 -0
  294. package/src/forge/compiler/package-graph/index.ts +33 -0
  295. package/src/forge/compiler/package-graph/jsdoc.ts +62 -0
  296. package/src/forge/compiler/package-graph/read-file.ts +21 -0
  297. package/src/forge/compiler/package-graph/resolve.ts +127 -0
  298. package/src/forge/compiler/package-manager/adapter.ts +237 -0
  299. package/src/forge/compiler/package-manager/bun-executable.ts +92 -0
  300. package/src/forge/compiler/package-manager/commands.ts +47 -0
  301. package/src/forge/compiler/package-manager/detect.ts +79 -0
  302. package/src/forge/compiler/package-manager/executor.ts +117 -0
  303. package/src/forge/compiler/package-manager/index.ts +22 -0
  304. package/src/forge/compiler/package-manager/parse-spec.ts +16 -0
  305. package/src/forge/compiler/package-manager/version.ts +27 -0
  306. package/src/forge/compiler/package-upgrades/apply.ts +195 -0
  307. package/src/forge/compiler/package-upgrades/comparator.ts +181 -0
  308. package/src/forge/compiler/package-upgrades/impact.ts +139 -0
  309. package/src/forge/compiler/package-upgrades/markdown.ts +97 -0
  310. package/src/forge/compiler/package-upgrades/planner.ts +532 -0
  311. package/src/forge/compiler/package-upgrades/risk.ts +208 -0
  312. package/src/forge/compiler/package-upgrades/types.ts +174 -0
  313. package/src/forge/compiler/policy-registry/build.ts +266 -0
  314. package/src/forge/compiler/policy-registry/constants.ts +2 -0
  315. package/src/forge/compiler/policy-registry/parse.ts +81 -0
  316. package/src/forge/compiler/primitives/compare.ts +26 -0
  317. package/src/forge/compiler/primitives/hash.ts +40 -0
  318. package/src/forge/compiler/primitives/header.ts +45 -0
  319. package/src/forge/compiler/primitives/index.ts +45 -0
  320. package/src/forge/compiler/primitives/paths.ts +24 -0
  321. package/src/forge/compiler/primitives/result.ts +164 -0
  322. package/src/forge/compiler/primitives/serialize.ts +66 -0
  323. package/src/forge/compiler/primitives/sort.ts +87 -0
  324. package/src/forge/compiler/query-registry/build.ts +114 -0
  325. package/src/forge/compiler/query-registry/constants.ts +2 -0
  326. package/src/forge/compiler/recipes/definitions.ts +289 -0
  327. package/src/forge/compiler/recipes/helpers.ts +37 -0
  328. package/src/forge/compiler/recipes/index.ts +21 -0
  329. package/src/forge/compiler/recipes/registry.ts +102 -0
  330. package/src/forge/compiler/release/build.ts +100 -0
  331. package/src/forge/compiler/release/types.ts +119 -0
  332. package/src/forge/compiler/runtime-graph/build.ts +137 -0
  333. package/src/forge/compiler/runtime-graph/constants.ts +5 -0
  334. package/src/forge/compiler/runtime-graph/index.ts +5 -0
  335. package/src/forge/compiler/sandbox/artifact-sanitize.ts +26 -0
  336. package/src/forge/compiler/sandbox/backends/child.ts +123 -0
  337. package/src/forge/compiler/sandbox/backends/docker.ts +173 -0
  338. package/src/forge/compiler/sandbox/index.ts +51 -0
  339. package/src/forge/compiler/sandbox/inspect.ts +143 -0
  340. package/src/forge/compiler/sandbox/inspector-entry.ts +115 -0
  341. package/src/forge/compiler/sandbox/limits.ts +31 -0
  342. package/src/forge/compiler/sandbox/scrub-env.ts +60 -0
  343. package/src/forge/compiler/sandbox/secret-scan.ts +54 -0
  344. package/src/forge/compiler/sandbox/serialize.ts +106 -0
  345. package/src/forge/compiler/sandbox/types.ts +7 -0
  346. package/src/forge/compiler/secret-registry/build.ts +123 -0
  347. package/src/forge/compiler/telemetry-registry/build.ts +89 -0
  348. package/src/forge/compiler/telemetry-registry/constants.ts +2 -0
  349. package/src/forge/compiler/telemetry-registry/parse.ts +13 -0
  350. package/src/forge/compiler/test-graph/build.ts +277 -0
  351. package/src/forge/compiler/types/action-subscriptions.ts +19 -0
  352. package/src/forge/compiler/types/ai-registry.ts +33 -0
  353. package/src/forge/compiler/types/app-graph.ts +80 -0
  354. package/src/forge/compiler/types/capability.ts +29 -0
  355. package/src/forge/compiler/types/classification.ts +9 -0
  356. package/src/forge/compiler/types/cli.ts +159 -0
  357. package/src/forge/compiler/types/data-graph.ts +24 -0
  358. package/src/forge/compiler/types/dev-manifest.ts +41 -0
  359. package/src/forge/compiler/types/diagnostic.ts +12 -0
  360. package/src/forge/compiler/types/emit.ts +25 -0
  361. package/src/forge/compiler/types/frontend-graph.ts +81 -0
  362. package/src/forge/compiler/types/import-guards.ts +19 -0
  363. package/src/forge/compiler/types/index.ts +98 -0
  364. package/src/forge/compiler/types/integration.ts +25 -0
  365. package/src/forge/compiler/types/json.ts +3 -0
  366. package/src/forge/compiler/types/live-query-registry.ts +32 -0
  367. package/src/forge/compiler/types/lock.ts +37 -0
  368. package/src/forge/compiler/types/package-graph.ts +84 -0
  369. package/src/forge/compiler/types/policy-registry.ts +69 -0
  370. package/src/forge/compiler/types/query-registry.ts +18 -0
  371. package/src/forge/compiler/types/runtime-graph.ts +30 -0
  372. package/src/forge/compiler/types/runtime-matrix.ts +16 -0
  373. package/src/forge/compiler/types/runtime.ts +30 -0
  374. package/src/forge/compiler/types/sandbox.ts +24 -0
  375. package/src/forge/compiler/types/secret-registry.ts +38 -0
  376. package/src/forge/compiler/types/telemetry-registry.ts +26 -0
  377. package/src/forge/compiler/types/test-graph.ts +45 -0
  378. package/src/forge/compiler/types/workflow-registry.ts +42 -0
  379. package/src/forge/compiler/workflow-registry/build.ts +180 -0
  380. package/src/forge/compiler/workflow-registry/constants.ts +2 -0
  381. package/src/forge/compiler/workflow-registry/index.ts +5 -0
  382. package/src/forge/compiler/workflow-registry/parse.ts +19 -0
  383. package/src/forge/dev/server.ts +1379 -0
  384. package/src/forge/dev/types.ts +49 -0
  385. package/src/forge/dev/watch.ts +109 -0
  386. package/src/forge/dev-console/cycle.ts +652 -0
  387. package/src/forge/dev-console/types.ts +99 -0
  388. package/src/forge/feature/compiler.ts +656 -0
  389. package/src/forge/feature/examples.ts +125 -0
  390. package/src/forge/feature/types.ts +177 -0
  391. package/src/forge/impact/index.ts +1160 -0
  392. package/src/forge/impact/types.ts +151 -0
  393. package/src/forge/intent/index.ts +490 -0
  394. package/src/forge/intent/types.ts +73 -0
  395. package/src/forge/make/fields.ts +146 -0
  396. package/src/forge/make/index.ts +1101 -0
  397. package/src/forge/make/naming.ts +42 -0
  398. package/src/forge/make/templates.ts +525 -0
  399. package/src/forge/make/types.ts +151 -0
  400. package/src/forge/platform/module.ts +20 -0
  401. package/src/forge/policy.ts +1 -0
  402. package/src/forge/react/index.ts +418 -0
  403. package/src/forge/refactor/index.ts +1936 -0
  404. package/src/forge/refactor/text-utils.ts +34 -0
  405. package/src/forge/refactor/types.ts +191 -0
  406. package/src/forge/refactor/workspace-fs.ts +171 -0
  407. package/src/forge/repair/index.ts +656 -0
  408. package/src/forge/repair/rules/index.ts +476 -0
  409. package/src/forge/repair/types.ts +175 -0
  410. package/src/forge/review/index.ts +992 -0
  411. package/src/forge/review/types.ts +196 -0
  412. package/src/forge/runtime/ai/check.ts +86 -0
  413. package/src/forge/runtime/ai/context.ts +394 -0
  414. package/src/forge/runtime/ai/cost-estimator.ts +41 -0
  415. package/src/forge/runtime/ai/mock.ts +49 -0
  416. package/src/forge/runtime/ai/providers.ts +78 -0
  417. package/src/forge/runtime/ai/state.ts +17 -0
  418. package/src/forge/runtime/ai/types.ts +67 -0
  419. package/src/forge/runtime/auth/authenticate.ts +58 -0
  420. package/src/forge/runtime/auth/claims.ts +119 -0
  421. package/src/forge/runtime/auth/config.ts +148 -0
  422. package/src/forge/runtime/auth/errors.ts +45 -0
  423. package/src/forge/runtime/auth/evaluate.ts +126 -0
  424. package/src/forge/runtime/auth/resolve.ts +74 -0
  425. package/src/forge/runtime/auth/types.ts +87 -0
  426. package/src/forge/runtime/auth/verifier.ts +138 -0
  427. package/src/forge/runtime/context/create-context.ts +204 -0
  428. package/src/forge/runtime/context/create-query-context.ts +34 -0
  429. package/src/forge/runtime/db/adapter.ts +31 -0
  430. package/src/forge/runtime/db/factory.ts +83 -0
  431. package/src/forge/runtime/db/generated-client.ts +294 -0
  432. package/src/forge/runtime/db/memory-adapter.ts +706 -0
  433. package/src/forge/runtime/db/migrate.ts +132 -0
  434. package/src/forge/runtime/db/outbox.ts +54 -0
  435. package/src/forge/runtime/db/pglite-adapter.ts +51 -0
  436. package/src/forge/runtime/db/postgres-adapter.ts +112 -0
  437. package/src/forge/runtime/db/read-only-client.ts +97 -0
  438. package/src/forge/runtime/db/session-context.ts +62 -0
  439. package/src/forge/runtime/executor.ts +446 -0
  440. package/src/forge/runtime/live/dependency-tracker.ts +57 -0
  441. package/src/forge/runtime/live/invalidation-log.ts +189 -0
  442. package/src/forge/runtime/live/live-query-runner.ts +267 -0
  443. package/src/forge/runtime/live/registry.ts +28 -0
  444. package/src/forge/runtime/live/sse.ts +75 -0
  445. package/src/forge/runtime/live/subscription-manager.ts +443 -0
  446. package/src/forge/runtime/live/types.ts +143 -0
  447. package/src/forge/runtime/outbox/claim.ts +153 -0
  448. package/src/forge/runtime/outbox/process.ts +298 -0
  449. package/src/forge/runtime/outbox/retry.ts +8 -0
  450. package/src/forge/runtime/outbox/subscriptions.ts +33 -0
  451. package/src/forge/runtime/outbox/types.ts +69 -0
  452. package/src/forge/runtime/policy/check.ts +157 -0
  453. package/src/forge/runtime/policy/load.ts +55 -0
  454. package/src/forge/runtime/query/registry.ts +19 -0
  455. package/src/forge/runtime/query/run-query.ts +347 -0
  456. package/src/forge/runtime/release/runtime.ts +322 -0
  457. package/src/forge/runtime/release/symbolicate.ts +175 -0
  458. package/src/forge/runtime/runner/command-transaction.ts +193 -0
  459. package/src/forge/runtime/runner/run-entry.ts +226 -0
  460. package/src/forge/runtime/secrets/check.ts +78 -0
  461. package/src/forge/runtime/secrets/create-context.ts +138 -0
  462. package/src/forge/runtime/secrets/env-loader.ts +94 -0
  463. package/src/forge/runtime/secrets/runtime-bundle.ts +47 -0
  464. package/src/forge/runtime/secrets/types.ts +31 -0
  465. package/src/forge/runtime/telemetry/buffer.ts +87 -0
  466. package/src/forge/runtime/telemetry/context.ts +192 -0
  467. package/src/forge/runtime/telemetry/correlation.ts +13 -0
  468. package/src/forge/runtime/telemetry/flush.ts +190 -0
  469. package/src/forge/runtime/telemetry/process.ts +20 -0
  470. package/src/forge/runtime/telemetry/scrubber.ts +115 -0
  471. package/src/forge/runtime/telemetry/sinks/local-jsonl.ts +39 -0
  472. package/src/forge/runtime/telemetry/sinks/posthog.ts +64 -0
  473. package/src/forge/runtime/telemetry/sinks/sentry.ts +60 -0
  474. package/src/forge/runtime/telemetry/spans.ts +58 -0
  475. package/src/forge/runtime/telemetry/types.ts +64 -0
  476. package/src/forge/runtime/workflows/cancel.ts +26 -0
  477. package/src/forge/runtime/workflows/create-run.ts +98 -0
  478. package/src/forge/runtime/workflows/process-run.ts +182 -0
  479. package/src/forge/runtime/workflows/process-step.ts +190 -0
  480. package/src/forge/runtime/workflows/process.ts +260 -0
  481. package/src/forge/runtime/workflows/registry.ts +51 -0
  482. package/src/forge/runtime/workflows/resolve-step.ts +46 -0
  483. package/src/forge/runtime/workflows/retry-run.ts +44 -0
  484. package/src/forge/runtime/workflows/retry.ts +8 -0
  485. package/src/forge/runtime/workflows/sanitize.ts +19 -0
  486. package/src/forge/runtime/workflows/start-from-outbox.ts +71 -0
  487. package/src/forge/runtime/workflows/types.ts +77 -0
  488. package/src/forge/server.ts +96 -0
  489. package/src/forge/ui/index.ts +770 -0
  490. package/src/forge/ui/types.ts +191 -0
  491. package/templates/b2b-support-web/.env.example +22 -0
  492. package/templates/b2b-support-web/.vscode/settings.json +14 -0
  493. package/templates/b2b-support-web/AGENTS.md +108 -0
  494. package/templates/b2b-support-web/README.md +48 -0
  495. package/templates/b2b-support-web/forge.config.ts +3 -0
  496. package/templates/b2b-support-web/package.json +34 -0
  497. package/templates/b2b-support-web/src/actions/captureTicketCreated.ts +14 -0
  498. package/templates/b2b-support-web/src/commands/closeTicket.ts +20 -0
  499. package/templates/b2b-support-web/src/commands/createTicket.ts +47 -0
  500. package/templates/b2b-support-web/src/commands/manageBilling.ts +9 -0
  501. package/templates/b2b-support-web/src/forge/schema.ts +35 -0
  502. package/templates/b2b-support-web/src/policies.ts +9 -0
  503. package/templates/b2b-support-web/src/queries/getTicket.ts +6 -0
  504. package/templates/b2b-support-web/src/queries/listTickets.ts +6 -0
  505. package/templates/b2b-support-web/src/queries/liveTickets.ts +9 -0
  506. package/templates/b2b-support-web/src/workflows/triageTicketWorkflow.ts +64 -0
  507. package/templates/b2b-support-web/tsconfig.json +14 -0
  508. package/templates/b2b-support-web/web/app/globals.css +77 -0
  509. package/templates/b2b-support-web/web/app/layout.tsx +13 -0
  510. package/templates/b2b-support-web/web/app/page.tsx +13 -0
  511. package/templates/b2b-support-web/web/app/providers.tsx +21 -0
  512. package/templates/b2b-support-web/web/app/tickets/page.tsx +21 -0
  513. package/templates/b2b-support-web/web/components/CreateTicketForm.tsx +43 -0
  514. package/templates/b2b-support-web/web/components/PolicyDeniedDemo.tsx +31 -0
  515. package/templates/b2b-support-web/web/components/TicketList.tsx +52 -0
  516. package/templates/b2b-support-web/web/components/TraceDetails.tsx +18 -0
  517. package/templates/b2b-support-web/web/components/TriageStatus.tsx +13 -0
  518. package/templates/b2b-support-web/web/lib/forge.ts +13 -0
  519. package/templates/b2b-support-web/web/next-env.d.ts +5 -0
  520. package/templates/b2b-support-web/web/next.config.ts +8 -0
  521. package/templates/b2b-support-web/web/package.json +21 -0
  522. package/templates/b2b-support-web/web/tsconfig.json +30 -0
  523. package/templates/minimal-web/.vscode/settings.json +14 -0
  524. package/templates/minimal-web/README.md +21 -0
  525. package/templates/minimal-web/forge.config.ts +3 -0
  526. package/templates/minimal-web/package.json +32 -0
  527. package/templates/minimal-web/src/actions/logNoteCreated.ts +11 -0
  528. package/templates/minimal-web/src/commands/createNote.ts +26 -0
  529. package/templates/minimal-web/src/forge/schema.ts +12 -0
  530. package/templates/minimal-web/src/policies.ts +6 -0
  531. package/templates/minimal-web/src/queries/listNotes.ts +8 -0
  532. package/templates/minimal-web/src/queries/liveNotes.ts +8 -0
  533. package/templates/minimal-web/tsconfig.json +15 -0
  534. package/templates/minimal-web/web/index.html +12 -0
  535. package/templates/minimal-web/web/package.json +21 -0
  536. package/templates/minimal-web/web/src/App.tsx +89 -0
  537. package/templates/minimal-web/web/src/lib/forge.ts +13 -0
  538. package/templates/minimal-web/web/src/main.tsx +13 -0
  539. package/templates/minimal-web/web/src/styles.css +156 -0
  540. package/templates/minimal-web/web/tsconfig.json +18 -0
package/README.md ADDED
@@ -0,0 +1,377 @@
1
+ # ForgeOS
2
+
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
+
5
+ **Status:** private 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, AST-aware codemods for `extract-action`, `rename field`, and `rename table`, and quieter template workspaces are present. Public release still needs deeper semantic codemods and final npm Trusted Publisher activation.
6
+
7
+ ## Agent-First Quickstart
8
+
9
+ ```bash
10
+ bun install --ignore-scripts
11
+ bun run forge generate
12
+ bun run forge do inspect --json
13
+ bun run forge dev
14
+ bun run forge dev --once --json
15
+ bun run forge inspect all --json
16
+ bun run forge inspect framework --json
17
+ bun run forge doctor
18
+ bun run forge verify --standard
19
+ bun run forge verify --strict
20
+ ```
21
+
22
+ Node is supported for the CLI/runtime path as well:
23
+
24
+ ```bash
25
+ npm install
26
+ npm run forge:node -- generate
27
+ npm run forge:node -- dev --once --json
28
+ npm run forge:node -- inspect framework --json
29
+ ```
30
+
31
+ When working as an AI coder, read:
32
+
33
+ ```txt
34
+ AGENTS.md
35
+ src/forge/_generated/agentContract.json
36
+ src/forge/_generated/runtimeRules.md
37
+ src/forge/_generated/appMap.md
38
+ src/forge/_generated/operationPlaybooks.md
39
+ ```
40
+
41
+ These files describe the app surface, runtime rules, generated files, policies, secrets, workflows, UI routes, commands to run, and common repair/refactor playbooks.
42
+
43
+ ## Create a Test App
44
+
45
+ ```bash
46
+ forge new notes-app --template minimal-web --package-manager npm
47
+ cd notes-app
48
+ npm run dev -- --open
49
+ ```
50
+
51
+ `forge dev` starts the API runtime and the web dev server together when a `web/` app exists. The `--once --json` mode is the central agent/CI diagnostic entrypoint: it checks generated drift, guardrails, frontend routes/bindings, doctor status, impact, and the last test/UI reports in one deterministic response.
52
+
53
+ Template apps ignore `src/forge/_generated/`, `forge.lock`, and operational `.forge/**` work dirs by default so a freshly created app does not flood git or the editor with generated files. Run `forge generate` after checkout or before verification to recreate the agent contract, client SDK, frontend graph, capability map, and runtime manifests.
54
+ Templates also include workspace editor excludes for generated/runtime directories so source files stay visually prominent.
55
+
56
+ For release or external smoke testing, choose the Forge package source explicitly:
57
+
58
+ ```bash
59
+ forge new smoke-app --template minimal-web --package-manager npm --forge-spec "npm:forgeos@^0.1.0-alpha.0"
60
+ forge new local-app --template minimal-web --package-manager npm --local-forge
61
+ ```
62
+
63
+ `--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.
64
+
65
+ ## What ForgeOS Generates
66
+
67
+ ```txt
68
+ src/forge/_generated/
69
+ api.ts/json
70
+ client.ts, clientTypes.ts, clientApi.ts
71
+ react.ts, reactManifest.ts/json
72
+ appGraph.ts/json
73
+ dataGraph.ts/json
74
+ runtimeGraph.ts/json
75
+ runtimeMatrix.ts/json
76
+ policyRegistry.ts/json
77
+ permissionMatrix.ts/json
78
+ tenantScope.ts/json
79
+ secretRegistry.ts/json
80
+ aiRegistry.ts/json
81
+ workflowRegistry.ts/json
82
+ liveQueryRegistry.ts/json
83
+ agentContract.ts/json
84
+ capabilityMap.ts/json/md
85
+ agentAdapterManifest.ts/json
86
+ testGraph.ts/json
87
+ uiTestManifest.ts/json
88
+ uiRoutes.ts/json
89
+ uiScenarios.ts/json
90
+ ```
91
+
92
+ Project-level generated context:
93
+
94
+ ```txt
95
+ AGENTS.md
96
+ forge.lock
97
+ .forge/test-plans/**
98
+ .forge/repairs/**
99
+ .forge/refactors/**
100
+ .forge/ui-runs/**
101
+ ```
102
+
103
+ ## Core Capabilities
104
+
105
+ | Area | What exists now |
106
+ | --- | --- |
107
+ | Compiler | AppGraph, DataGraph, RuntimeGraph, PackageGraph, deterministic generated artifacts, drift checks |
108
+ | Runtime | commands, queries, liveQueries, actions, workflows, durable outbox, local dev server |
109
+ | Data | schema compiler, SQL DDL, migrations, PGlite/Postgres adapter, tenant scope metadata |
110
+ | Policies | RBAC policy registry, permission matrix, simulation, strict policy checks |
111
+ | Auth | dev headers, JWT, OIDC discovery/JWKS verification via `jose`, production-mode guardrails |
112
+ | RLS | Postgres RLS SQL compiler/checks for DB-enforced tenant isolation |
113
+ | Secrets/env | secret registry, env schema, redaction, strict `process.env` checks |
114
+ | AI | provider registry, `ctx.ai`, mock mode, telemetry without prompt/output retention by default |
115
+ | Frontend | generated client SDK, React/Next hooks, template app, liveQuery client support |
116
+ | LiveQuery | durable invalidation log, reconnect/resume semantics, production hardening checks |
117
+ | Self-host | compose/deploy artifacts and self-host checks |
118
+ | Agent contract | `AGENTS.md`, `agentContract.json`, app maps, runtime rules, playbooks, inspect/doctor |
119
+ | Authoring | `forge make`, feature blueprints, safe refactor plans, package upgrade plans |
120
+ | Testing/repair | impact-based test planner, repair loop, structured review, UI/browser test bridge |
121
+ | Adapters | agent adapter export for external AI tools |
122
+ | Intent router | `forge do` maps objectives like fix, verify, connect UI, and add feature into plans, files, risks, and next commands |
123
+ | Full-stack map | `frontendGraph` + `capabilityMap` connect routes, components, hooks, runtime entries, tables, policies, and gaps |
124
+ | Dev loop | `forge dev` prints API/Web URLs, phase health, capability coverage, cache status, diagnostics, and next action |
125
+ | Templates | source-only templates and showcase app avoid committing generated artifacts by default |
126
+ | Verification | `forge verify --smoke`, `--standard`, and `--strict` report per-step duration/command metadata, use impact-selected tests for the standard loop, and time out package scripts predictably |
127
+
128
+ ## Command Map
129
+
130
+ Prefer task-oriented commands first:
131
+
132
+ ```bash
133
+ forge do "<objective>" --json
134
+ forge do fix --json
135
+ forge do connect-ui --json
136
+ forge do verify --json
137
+ forge dev --once --json
138
+ forge dev
139
+ forge inspect all --json
140
+ forge inspect framework --json
141
+ forge inspect capabilities --json
142
+ forge doctor
143
+ forge verify --standard
144
+ forge verify --strict
145
+ forge impact --changed --json
146
+ forge test plan --changed --json
147
+ forge test run --changed --timeout-ms 120000 --json
148
+ forge repair diagnose --from-last-test-run --json
149
+ forge repair diagnose --from-last-ui-run --json
150
+ forge review run --changed --json
151
+ forge ui smoke --json
152
+ ```
153
+
154
+ Common command groups:
155
+
156
+ | Command | Purpose |
157
+ | --- | --- |
158
+ | `forge generate` | Analyze source and emit generated artifacts |
159
+ | `forge generate --check` | Fail on generated drift |
160
+ | `forge check --json` | Validate guardrails and emit diagnostics with fix hints |
161
+ | `forge verify --smoke` | Fast local gate: generated drift, Forge checks, typecheck when present, no tests/lint |
162
+ | `forge verify --standard` | Agent development gate: generated drift, Forge/security checks, typecheck, and impact-selected tests |
163
+ | `forge verify --strict` | Full handoff/CI gate: generated drift, Forge/security checks, typecheck, full test script, lint |
164
+ | `forge verify --script-timeout-ms <ms>` | Run package scripts with a predictable timeout and machine-readable timeout diagnostics |
165
+ | `forge do "<objective>" --json` | Guided intent router: choose the right workflow, files, risks, and next action |
166
+ | `forge inspect <target> --json` | Inspect generated app/data/runtime/policy/client/agent/UI surfaces |
167
+ | `forge inspect framework --json` | Inspect ForgeOS framework modules, CLI commands, templates, examples, tests, and preferred entrypoints |
168
+ | `forge doctor --json` | Human/agent health check for project coherence |
169
+ | `forge dev` | Interactive local loop: generated checks, API runtime, DB, worker, watch mode, frontend server, URLs, and next agent checks |
170
+ | `forge dev --once --json` | One-shot diagnostic orchestrator for agents/CI: generated drift/cache hit, check, frontend, capability map, doctor, impact, reports, next actions |
171
+ | `forge run`, `forge query`, `forge live` | Execute and inspect runtime entries locally |
172
+ | `forge db`, `forge rls` | Diff/migrate/status and inspect/check RLS |
173
+ | `forge policy`, `forge secrets`, `forge env`, `forge auth` | Security and configuration operations |
174
+ | `forge make` | Scaffold resources, commands, queries, policies, actions, workflows |
175
+ | `forge feature` | Validate/plan/apply feature blueprints |
176
+ | `forge refactor` | Plan/apply/rollback safe refactors and targeted codemods |
177
+ | `forge impact`, `forge test` | Compute change impact and run targeted checks |
178
+ | `forge test run --timeout-ms <ms>` | Run impact-selected checks with a per-command timeout |
179
+ | `forge repair` | Diagnose failures and produce repair plans |
180
+ | `forge review` | Structured code review with findings and suggested commands |
181
+ | `forge ui` | Browser/UI smoke, scenario, route, snapshot, doctor, and reports |
182
+ | `forge deps` | Package upgrade planning and application |
183
+ | `forge release` | Release/source-map bridge and symbolication |
184
+ | `forge agent`, `forge agent-contract` | Agent-facing contract and adapter exports |
185
+ | `forge self-host` | Self-host packaging and checks |
186
+
187
+ Refactor codemods are AST-aware where safety matters most:
188
+
189
+ - `forge refactor extract-action` is binding-aware and preserves unrelated imports, type-only imports, and shadowed locals.
190
+ - `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.
191
+ - `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.
192
+
193
+ ## Runtime Rules
194
+
195
+ Commands are transactional and deterministic:
196
+
197
+ - allowed: `ctx.db`, `ctx.emit`, buffered telemetry
198
+ - forbidden: network packages, direct integrations, `ctx.secrets`, `ctx.ai`, direct `process.env`
199
+
200
+ Queries and liveQueries are read-only:
201
+
202
+ - allowed: scoped DB reads
203
+ - forbidden: writes, emits, secrets, AI, network integrations
204
+
205
+ Actions and workflows handle side effects after commit:
206
+
207
+ - allowed: integrations, secrets, AI, network packages, retries
208
+ - expected: idempotent behavior and traceable telemetry
209
+
210
+ Use `src/forge/_generated/runtimeRules.md` as the canonical generated version.
211
+
212
+ ## Showcase App
213
+
214
+ See [`examples/showcase-forge-app`](examples/showcase-forge-app/README.md).
215
+
216
+ ```bash
217
+ cd examples/showcase-forge-app
218
+ bun install
219
+ bun run generate
220
+ bun run dev
221
+ ```
222
+
223
+ Examples are source-only where practical: generated artifacts, `forge.lock`, package lockfiles, and operational `.forge/**` state are recreated locally. The showcase demonstrates tenant-scoped data, policies, commands, queries, liveQueries, outbox actions, workflows, mock AI, telemetry trace IDs, generated React hooks, `agentContract`, `frontendGraph`, and `capabilityMap`.
224
+
225
+ ## Platform Support
226
+
227
+ | Platform | Support |
228
+ | --- | --- |
229
+ | Linux | Supported for MVP development |
230
+ | macOS | Supported for MVP development |
231
+ | Windows (WSL) | Supported for MVP development |
232
+ | Windows (native) | Experimental, with `forge doctor windows` and `forge setup windows` |
233
+
234
+ ForgeOS is Bun-first but no longer Bun-only. The package bin runs through Node via `tsx`, the dev server has a `node:http` fallback, package scripts use the detected package manager, and the Postgres adapter uses `Bun.SQL` when available or the `postgres` npm package under Node.
235
+
236
+ Known Windows note: ForgeOS resolves Bun through a Windows-safe resolver and ignores known non-Bun `Kiro-Cli\bun` shims. If your shell still resolves a broken app association, invoke Bun from the real install path:
237
+
238
+ ```powershell
239
+ & "$env:USERPROFILE\.bun\bin\bun.exe"
240
+ ```
241
+
242
+ Native Windows diagnostics:
243
+
244
+ ```powershell
245
+ node .\bin\forge.mjs doctor windows --json
246
+ node .\bin\forge.mjs setup windows --json
247
+ ```
248
+
249
+ `forge doctor windows` checks Node, npm, Git, safe Bun resolution, suspicious Bun shims, Git long-path support, PowerShell execution policy, and symlink support. `forge setup windows` is dry-run by default and only applies supported environment fixes with `--yes`.
250
+
251
+ For Node-only local checks, use:
252
+
253
+ ```powershell
254
+ node .\bin\forge.mjs dev --once --json
255
+ node .\bin\forge.mjs inspect framework --json
256
+ ```
257
+
258
+ ## Verification
259
+
260
+ Fast focused checks:
261
+
262
+ ```bash
263
+ bun run typecheck
264
+ bun run lint
265
+ bun test tests/<area>
266
+ bun run forge generate --check
267
+ forge verify --changed
268
+ ```
269
+
270
+ Full gate:
271
+
272
+ ```bash
273
+ bun test --timeout 120000
274
+ bun run forge verify --strict
275
+ ```
276
+
277
+ UI bridge note: `forge ui` uses Playwright when installed. Without Playwright, `forge ui doctor --json` reports `FORGE_UI_PLAYWRIGHT_MISSING` with fix hints instead of silently failing.
278
+
279
+ Frontend bridge note: `forge inspect frontend --json` and `forge dev --once --json` expose routes, components, `ForgeProvider`, generated client bindings, raw runtime fetch warnings, and fix hints. Agents should use this before editing UI wiring.
280
+
281
+ CI note: the main GitHub Actions gate runs the full Bun-based verification path on Ubuntu. A separate Node breadth smoke matrix runs on Ubuntu, Windows, and macOS with Node 22 and 24, including template package-manager smoke for npm, pnpm, yarn, and Bun.
282
+
283
+ ## npm Release
284
+
285
+ ForgeOS publishes to npm as `forgeos` and exposes the executable as `forge`.
286
+
287
+ Release automation uses Changesets plus npm Trusted Publishing:
288
+
289
+ ```bash
290
+ npm run changeset
291
+ npm run version-packages
292
+ npm run release:smoke
293
+ ```
294
+
295
+ For the first prerelease publish, use the alpha dist-tag explicitly:
296
+
297
+ ```bash
298
+ npm run release:publish-local-alpha -- --dry-run
299
+ npm run release:publish-local-alpha -- --yes
300
+ ```
301
+
302
+ The normal path is:
303
+
304
+ ```txt
305
+ merge feature PR with changeset
306
+ -> publish.yml opens/updates a version PR
307
+ merge version PR
308
+ -> publish.yml publishes through npm OIDC Trusted Publisher
309
+ ```
310
+
311
+ Configure npm Trusted Publisher for package `forgeos`:
312
+
313
+ | Field | Value |
314
+ | --- | --- |
315
+ | Provider | GitHub Actions |
316
+ | Organization/user | `Stahldavid` |
317
+ | Repository | `forge` |
318
+ | Workflow filename | `publish.yml` |
319
+ | Environment | blank |
320
+ | Allowed action | `npm publish` |
321
+
322
+ 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.
323
+
324
+ ## Milestone History
325
+
326
+ ```txt
327
+ H1 Hardening, CI, examples
328
+ H2 Reference integration quality
329
+ H3 DataGraph Compiler
330
+ H4 Local command/action runtime
331
+ H5 Local dev server
332
+ H6 DataGraph-backed persistence runtime
333
+ H7 Durable outbox worker
334
+ H8 Lightweight workflow engine
335
+ H9 Telemetry bridge
336
+ H10 Auth, policy engine, tenant isolation
337
+ H11 Secrets & environment runtime
338
+ H12 AI workflow integration
339
+ H13 Query runtime & typed API surface
340
+ H14 Frontend client SDK core
341
+ H15 LiveQuery/Reactivity MVP
342
+ H16 React/Next hooks
343
+ H17 Minimal frontend app template
344
+ H18 Self-host packaging
345
+ H19 Agent Contract & Project Introspection Layer
346
+ H20 Production Auth / JWT & OIDC v1
347
+ H21 Postgres RLS Compiler & DB-enforced tenant isolation
348
+ H22 Package Upgrade Planner
349
+ H23 Release / Source Map Bridge
350
+ H24 Production LiveQuery Hardening
351
+ H25 Authoring primitives: forge make
352
+ H26 Feature Blueprint Compiler
353
+ H27 Safe Refactor / Codemod Engine
354
+ H28 Impact-Based Test Planner
355
+ H29 Repair Loop
356
+ H30 Agent Adapter Export
357
+ H31 Forge Review / Structured Code Review
358
+ H32 UI / Browser Test Bridge
359
+ H33 Intent Router / Guided Dev Loop
360
+ H34 Full-Stack App Contract v2
361
+ H35 Capability Map
362
+ H36 Template hygiene / git noise
363
+ H37 Convex-style forge dev panel
364
+ H38 Fast generated check visibility
365
+ H39 Showcase app
366
+ H40 Windows/runtime hardening
367
+ H41 Node-compatible CLI/runtime
368
+ H42 Verify observability and quieter app workspaces
369
+ ```
370
+
371
+ ## Remaining Hardening Before Public Release
372
+
373
+ - Keep expanding semantic codemods beyond the current AST-aware `extract-action`, `rename field`, and `rename table` paths.
374
+ - Reduce command-selection risk with more task routers and richer inline diagnostics.
375
+ - Keep hardening native Windows setup beyond diagnostics and safe automatic environment fixes.
376
+ - Keep broadening package manager CI from template smoke toward install/build smoke for pnpm and yarn apps.
377
+ - Broaden UI bridge coverage with installed Playwright browsers in CI.
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { basename, delimiter, join, win32 } from "node:path";
5
+ import { spawn } from "node:child_process";
6
+
7
+ function isWindows() {
8
+ return process.platform === "win32";
9
+ }
10
+
11
+ function isKiroBun(path) {
12
+ return path.replace(/\//g, "\\").toLowerCase().includes("\\kiro-cli\\");
13
+ }
14
+
15
+ function isBunExecutablePath(path) {
16
+ const file = (isWindows() ? win32.basename(path) : basename(path)).toLowerCase();
17
+ return isWindows() ? file === "bun.exe" : file === "bun";
18
+ }
19
+
20
+ function which(command) {
21
+ const pathEntries = (process.env.PATH ?? "").split(delimiter).filter(Boolean);
22
+ const extensions = isWindows() ? [".exe", ".cmd", ".bat", ""] : [""];
23
+ for (const dir of pathEntries) {
24
+ for (const extension of extensions) {
25
+ const candidate = join(dir, `${command}${extension}`);
26
+ if (existsSync(candidate)) {
27
+ return candidate;
28
+ }
29
+ }
30
+ }
31
+ return null;
32
+ }
33
+
34
+ function normalizeWindowsBun(candidate) {
35
+ if (!candidate || isKiroBun(candidate)) {
36
+ return null;
37
+ }
38
+ if (candidate.toLowerCase().endsWith(".exe")) {
39
+ return existsSync(candidate) ? candidate : null;
40
+ }
41
+ const exeCandidate = `${candidate}.exe`;
42
+ return existsSync(exeCandidate) ? exeCandidate : null;
43
+ }
44
+
45
+ function resolveBunExecutable() {
46
+ const configured = process.env.FORGE_BUN;
47
+ if (configured) {
48
+ if (isWindows()) {
49
+ const normalized = normalizeWindowsBun(configured);
50
+ if (normalized) {
51
+ return normalized;
52
+ }
53
+ } else if (existsSync(configured)) {
54
+ return configured;
55
+ }
56
+ throw new Error(`FORGE_BUN does not point to a safe Bun executable: ${configured}`);
57
+ }
58
+
59
+ if (isBunExecutablePath(process.execPath) && existsSync(process.execPath)) {
60
+ return process.execPath;
61
+ }
62
+
63
+ const fromPath = which("bun");
64
+ if (!isWindows()) {
65
+ return fromPath ?? "bun";
66
+ }
67
+
68
+ const normalized = normalizeWindowsBun(fromPath);
69
+ if (normalized) {
70
+ return normalized;
71
+ }
72
+
73
+ const homeBun = win32.join(homedir(), ".bun", "bin", "bun.exe");
74
+ if (existsSync(homeBun)) {
75
+ return homeBun;
76
+ }
77
+
78
+ throw new Error(
79
+ "Unable to resolve a safe Bun executable on Windows. Install Bun at ~/.bun/bin/bun.exe or set FORGE_BUN to an existing bun.exe. Refusing to spawn bare bun.exe because Windows may open an app picker.",
80
+ );
81
+ }
82
+
83
+ let bunPath;
84
+ try {
85
+ bunPath = resolveBunExecutable();
86
+ } catch (error) {
87
+ console.error(error instanceof Error ? error.message : String(error));
88
+ process.exit(1);
89
+ }
90
+
91
+ const args = process.argv.slice(2);
92
+ const child = spawn(bunPath, args, {
93
+ cwd: process.cwd(),
94
+ env: process.env,
95
+ stdio: "inherit",
96
+ windowsHide: true,
97
+ });
98
+
99
+ child.on("error", (error) => {
100
+ console.error(error.message);
101
+ process.exit(1);
102
+ });
103
+
104
+ child.on("close", (code, signal) => {
105
+ if (signal) {
106
+ process.kill(process.pid, signal);
107
+ return;
108
+ }
109
+ process.exit(code ?? 1);
110
+ });
package/bin/forge.mjs ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import { dirname, join } from "node:path";
3
+ import { fileURLToPath, pathToFileURL } from "node:url";
4
+
5
+ const root = dirname(dirname(fileURLToPath(import.meta.url)));
6
+ const entrypoint = join(root, "src", "forge", "cli", "main.ts");
7
+
8
+ let tsImport;
9
+ try {
10
+ ({ tsImport } = await import("tsx/esm/api"));
11
+ } catch {
12
+ console.error("error: Forge requires the 'tsx' package to run under Node.");
13
+ console.error("Install dependencies with your package manager, then retry.");
14
+ process.exit(1);
15
+ }
16
+
17
+ const module = await tsImport(pathToFileURL(entrypoint).href, import.meta.url);
18
+ const exitCode = await module.main(process.argv.slice(2));
19
+ process.exit(exitCode);
package/package.json ADDED
@@ -0,0 +1,96 @@
1
+ {
2
+ "name": "forgeos",
3
+ "version": "0.1.0-alpha.0",
4
+ "description": "Agent-native application framework and compiler for building Forge apps without a mandatory dashboard.",
5
+ "type": "module",
6
+ "files": [
7
+ "bin/",
8
+ "packages/eslint-plugin-forge/",
9
+ "src/",
10
+ "templates/",
11
+ "README.md",
12
+ "CHANGELOG.md",
13
+ "CONTRIBUTING.md",
14
+ "AGENTS.md",
15
+ ".npmignore"
16
+ ],
17
+ "forge": {
18
+ "sourceRoots": [
19
+ "src"
20
+ ]
21
+ },
22
+ "bin": {
23
+ "forge": "bin/forge.mjs"
24
+ },
25
+ "exports": {
26
+ "./react": "./src/forge/react/index.ts",
27
+ "./server": "./src/forge/server.ts",
28
+ "./policy": "./src/forge/policy.ts"
29
+ },
30
+ "scripts": {
31
+ "test": "node ./bin/forge-bun.mjs test --timeout 120000",
32
+ "build": "tsc --noEmit",
33
+ "typecheck": "tsc --noEmit",
34
+ "changeset": "changeset",
35
+ "version-packages": "changeset version",
36
+ "release": "changeset publish --tag alpha",
37
+ "release:pack": "npm pack --dry-run",
38
+ "release:smoke": "node scripts/smoke-packed-package.mjs",
39
+ "release:publish-local-alpha": "node scripts/publish-local-alpha.mjs",
40
+ "forge": "node ./bin/forge.mjs",
41
+ "forge:node": "node ./bin/forge.mjs",
42
+ "forge:bun": "node ./bin/forge-bun.mjs src/forge/cli/main.ts",
43
+ "forge:check": "node ./bin/forge.mjs check",
44
+ "forge:generate": "node ./bin/forge.mjs generate",
45
+ "forge:generate:check": "node ./bin/forge.mjs generate --check",
46
+ "lint": "node --import tsx ./src/forge/cli/lint-forge.ts",
47
+ "verify": "node ./bin/forge.mjs verify",
48
+ "example:setup": "node scripts/setup-example.mjs"
49
+ },
50
+ "publishConfig": {
51
+ "access": "public",
52
+ "tag": "alpha"
53
+ },
54
+ "engines": {
55
+ "node": ">=22.14"
56
+ },
57
+ "repository": {
58
+ "type": "git",
59
+ "url": "git+https://github.com/Stahldavid/forge.git"
60
+ },
61
+ "homepage": "https://github.com/Stahldavid/forge#readme",
62
+ "bugs": {
63
+ "url": "https://github.com/Stahldavid/forge/issues"
64
+ },
65
+ "keywords": [
66
+ "forgeos",
67
+ "agent-native",
68
+ "application-framework",
69
+ "ai-agents",
70
+ "full-stack",
71
+ "cli"
72
+ ],
73
+ "dependencies": {
74
+ "@ai-sdk/anthropic": "^2.0.0",
75
+ "@ai-sdk/openai": "^2.0.0",
76
+ "@electric-sql/pglite": "^0.2.17",
77
+ "ai": "^5.0.0",
78
+ "jose": "^6.2.3",
79
+ "postgres": "^3.4.5",
80
+ "react": "^19.2.7",
81
+ "tree-sitter": "^0.22.4",
82
+ "tree-sitter-typescript": "^0.23.2",
83
+ "tsx": "^4.20.6",
84
+ "typescript": "^5.7.3",
85
+ "zod": "^3.25.76"
86
+ },
87
+ "devDependencies": {
88
+ "@changesets/changelog-github": "^0.7.0",
89
+ "@changesets/cli": "^2.31.0",
90
+ "@types/bun": "1.3.14",
91
+ "@types/react": "^19.2.17",
92
+ "@types/react-test-renderer": "^19.1.0",
93
+ "fast-check": "^3.23.2",
94
+ "react-test-renderer": "^19.2.7"
95
+ }
96
+ }
@@ -0,0 +1,15 @@
1
+ export {
2
+ loadForgeGuardArtifacts,
3
+ type ForgeGuardArtifacts,
4
+ } from "./src/load-artifacts.ts";
5
+ export {
6
+ checkSourceForgeGuards,
7
+ type ForgeGuardSourceViolation,
8
+ } from "./src/check-source.ts";
9
+ export {
10
+ runForgeGuardRule,
11
+ forgeGuardRuleDefinition,
12
+ formatViolationMessage,
13
+ type ForgeEslintContext,
14
+ type ForgeEslintSettings,
15
+ } from "./src/rule-no-forge-guard-violation.ts";
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "eslint-plugin-forge",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "main": "./index.ts",
7
+ "exports": {
8
+ ".": "./index.ts"
9
+ }
10
+ }