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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/.npmignore +4 -0
  2. package/AGENTS.md +168 -81
  3. package/CHANGELOG.md +199 -0
  4. package/README.md +88 -14
  5. package/adapters/go/README.md +23 -0
  6. package/adapters/go/go.mod +3 -0
  7. package/adapters/go/http.go +149 -0
  8. package/adapters/go/registry.go +234 -0
  9. package/adapters/go/types.go +136 -0
  10. package/adapters/java/README.md +68 -0
  11. package/adapters/java/pom.xml +34 -0
  12. package/adapters/java/src/main/java/dev/forgeos/adapter/Auth.java +20 -0
  13. package/adapters/java/src/main/java/dev/forgeos/adapter/Diagnostic.java +16 -0
  14. package/adapters/java/src/main/java/dev/forgeos/adapter/Entry.java +38 -0
  15. package/adapters/java/src/main/java/dev/forgeos/adapter/EntryKind.java +16 -0
  16. package/adapters/java/src/main/java/dev/forgeos/adapter/ErrorInfo.java +4 -0
  17. package/adapters/java/src/main/java/dev/forgeos/adapter/Forge.java +94 -0
  18. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeCall.java +12 -0
  19. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeContext.java +11 -0
  20. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHandler.java +8 -0
  21. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHttpHandler.java +179 -0
  22. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeRegistry.java +121 -0
  23. package/adapters/java/src/main/java/dev/forgeos/adapter/Json.java +14 -0
  24. package/adapters/java/src/main/java/dev/forgeos/adapter/Manifest.java +14 -0
  25. package/adapters/java/src/main/java/dev/forgeos/adapter/RequestEnvelope.java +6 -0
  26. package/adapters/java/src/main/java/dev/forgeos/adapter/ResponseEnvelope.java +25 -0
  27. package/adapters/java/src/main/java/dev/forgeos/adapter/Risk.java +18 -0
  28. package/adapters/java/src/main/java/dev/forgeos/adapter/Schemas.java +36 -0
  29. package/adapters/java/src/main/java/dev/forgeos/adapter/Service.java +65 -0
  30. package/adapters/java/src/main/java/dev/forgeos/adapter/TransactionMode.java +18 -0
  31. package/adapters/java/src/main/java/dev/forgeos/adapter/TypedForgeHandler.java +6 -0
  32. package/adapters/java/target/classes/dev/forgeos/adapter/Auth.class +0 -0
  33. package/adapters/java/target/classes/dev/forgeos/adapter/Diagnostic.class +0 -0
  34. package/adapters/java/target/classes/dev/forgeos/adapter/Entry.class +0 -0
  35. package/adapters/java/target/classes/dev/forgeos/adapter/EntryKind.class +0 -0
  36. package/adapters/java/target/classes/dev/forgeos/adapter/ErrorInfo.class +0 -0
  37. package/adapters/java/target/classes/dev/forgeos/adapter/Forge.class +0 -0
  38. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeCall.class +0 -0
  39. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeContext.class +0 -0
  40. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeHandler.class +0 -0
  41. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeHttpHandler.class +0 -0
  42. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry$EntryOption.class +0 -0
  43. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry$RegisteredEntry.class +0 -0
  44. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry$RegistryOption.class +0 -0
  45. package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry.class +0 -0
  46. package/adapters/java/target/classes/dev/forgeos/adapter/Json.class +0 -0
  47. package/adapters/java/target/classes/dev/forgeos/adapter/Manifest.class +0 -0
  48. package/adapters/java/target/classes/dev/forgeos/adapter/RequestEnvelope.class +0 -0
  49. package/adapters/java/target/classes/dev/forgeos/adapter/ResponseEnvelope.class +0 -0
  50. package/adapters/java/target/classes/dev/forgeos/adapter/Risk.class +0 -0
  51. package/adapters/java/target/classes/dev/forgeos/adapter/Schemas.class +0 -0
  52. package/adapters/java/target/classes/dev/forgeos/adapter/Service.class +0 -0
  53. package/adapters/java/target/classes/dev/forgeos/adapter/TransactionMode.class +0 -0
  54. package/adapters/java/target/classes/dev/forgeos/adapter/TypedForgeHandler.class +0 -0
  55. package/adapters/java/target/forge-java-adapter-0.1.0-alpha.11.jar +0 -0
  56. package/adapters/java/target/maven-archiver/pom.properties +3 -0
  57. package/adapters/java/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +23 -0
  58. package/adapters/java/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +20 -0
  59. package/adapters/java-spring-boot-starter/README.md +32 -0
  60. package/adapters/java-spring-boot-starter/pom.xml +36 -0
  61. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeCommand.java +22 -0
  62. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeExternalService.java +15 -0
  63. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeQuery.java +16 -0
  64. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.java +18 -0
  65. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.java +16 -0
  66. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringRuntime.java +104 -0
  67. package/adapters/java-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
  68. package/adapters/java-spring-boot-starter/target/classes/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
  69. package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeCommand.class +0 -0
  70. package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeExternalService.class +0 -0
  71. package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeQuery.class +0 -0
  72. package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.class +0 -0
  73. package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.class +0 -0
  74. package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeSpringRuntime.class +0 -0
  75. package/adapters/java-spring-boot-starter/target/forge-java-spring-boot-starter-0.1.0-alpha.11.jar +0 -0
  76. package/adapters/java-spring-boot-starter/target/maven-archiver/pom.properties +3 -0
  77. package/adapters/java-spring-boot-starter/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +6 -0
  78. package/adapters/java-spring-boot-starter/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +6 -0
  79. package/bin/forge.mjs +18 -0
  80. package/docs/changelog.md +212 -0
  81. package/docs/forge-protocol.md +189 -0
  82. package/examples/go-billing/go.mod +7 -0
  83. package/examples/go-billing/main.go +120 -0
  84. package/examples/java-billing/pom.xml +52 -0
  85. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/CreateInvoiceInput.java +4 -0
  86. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Invoice.java +11 -0
  87. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Main.java +127 -0
  88. package/examples/java-billing/target/classes/dev/forgeos/examples/billing/CreateInvoiceInput.class +0 -0
  89. package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Invoice.class +0 -0
  90. package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Main$EmptyInput.class +0 -0
  91. package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Main$Options.class +0 -0
  92. package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Main.class +0 -0
  93. package/examples/java-billing/target/java-billing-0.1.0-alpha.11-all.jar +0 -0
  94. package/examples/java-billing/target/java-billing-0.1.0-alpha.11.jar +0 -0
  95. package/examples/java-billing/target/maven-archiver/pom.properties +3 -0
  96. package/examples/java-billing/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +5 -0
  97. package/examples/java-billing/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +3 -0
  98. package/package.json +29 -7
  99. package/schemas/forge-manifest.schema.json +57 -0
  100. package/src/forge/_generated/releaseManifest.json +1 -2
  101. package/src/forge/_generated/releaseManifest.ts +3 -3
  102. package/src/forge/agent-adapters/index.ts +1511 -123
  103. package/src/forge/agent-adapters/types.ts +216 -1
  104. package/src/forge/agent-memory/bridge.ts +1192 -0
  105. package/src/forge/agent-memory/context-pack.ts +151 -0
  106. package/src/forge/agent-memory/hook-runner.ts +312 -0
  107. package/src/forge/agent-memory/mcp.ts +224 -0
  108. package/src/forge/agent-memory/normalize.ts +498 -0
  109. package/src/forge/agent-memory/redaction.ts +103 -0
  110. package/src/forge/agent-memory/sources/claude-code.ts +51 -0
  111. package/src/forge/agent-memory/sources/codex-hook-runner.mjs +84 -0
  112. package/src/forge/agent-memory/sources/codex.ts +119 -0
  113. package/src/forge/agent-memory/sources/cursor.ts +35 -0
  114. package/src/forge/agent-memory/types.ts +191 -0
  115. package/src/forge/bench.ts +248 -0
  116. package/src/forge/brownfield-import/index.ts +736 -0
  117. package/src/forge/brownfield-import/types.ts +127 -0
  118. package/src/forge/cair/action-journal.ts +61 -0
  119. package/src/forge/cair/action-parser.ts +314 -0
  120. package/src/forge/cair/action-validator.ts +40 -0
  121. package/src/forge/cair/actions.ts +1818 -0
  122. package/src/forge/cair/format.ts +77 -0
  123. package/src/forge/cair/index.ts +106 -0
  124. package/src/forge/cair/query.ts +478 -0
  125. package/src/forge/cair/snapshot.ts +315 -0
  126. package/src/forge/cair/types.ts +248 -0
  127. package/src/forge/cli/ai.ts +671 -3
  128. package/src/forge/cli/auth.ts +36 -1
  129. package/src/forge/cli/build.ts +20 -4
  130. package/src/forge/cli/changed.ts +300 -0
  131. package/src/forge/cli/codex-app-server.ts +877 -0
  132. package/src/forge/cli/commands.ts +1285 -7
  133. package/src/forge/cli/db.ts +121 -2
  134. package/src/forge/cli/deps.ts +79 -12
  135. package/src/forge/cli/dev.ts +502 -38
  136. package/src/forge/cli/docs.ts +265 -0
  137. package/src/forge/cli/handoff.ts +250 -0
  138. package/src/forge/cli/index.ts +1 -0
  139. package/src/forge/cli/main.ts +49 -3
  140. package/src/forge/cli/new.ts +3 -1
  141. package/src/forge/cli/next-actions.ts +23 -0
  142. package/src/forge/cli/output.ts +290 -1
  143. package/src/forge/cli/parse.ts +770 -36
  144. package/src/forge/cli/query.ts +32 -0
  145. package/src/forge/cli/release.ts +35 -11
  146. package/src/forge/cli/rls.ts +568 -17
  147. package/src/forge/cli/run.ts +41 -0
  148. package/src/forge/cli/secrets.ts +46 -1
  149. package/src/forge/cli/security.ts +381 -0
  150. package/src/forge/cli/self-host.ts +56 -14
  151. package/src/forge/cli/studio.ts +2163 -0
  152. package/src/forge/cli/verify.ts +1422 -32
  153. package/src/forge/compiler/agent-contract/build.ts +725 -41
  154. package/src/forge/compiler/agent-contract/types.ts +85 -0
  155. package/src/forge/compiler/ai-registry/build.ts +62 -1
  156. package/src/forge/compiler/ai-registry/constants.ts +1 -1
  157. package/src/forge/compiler/ai-registry/parse.ts +168 -5
  158. package/src/forge/compiler/api-surface/build.ts +47 -0
  159. package/src/forge/compiler/app-graph/build.ts +68 -8
  160. package/src/forge/compiler/app-graph/extract.ts +107 -0
  161. package/src/forge/compiler/app-graph/forge-apis.ts +1 -0
  162. package/src/forge/compiler/app-graph/module-graph.ts +73 -78
  163. package/src/forge/compiler/app-graph/parser.ts +24 -24
  164. package/src/forge/compiler/app-graph/profile.ts +26 -0
  165. package/src/forge/compiler/app-graph/versions.ts +1 -1
  166. package/src/forge/compiler/classifier/capabilities.ts +3 -2
  167. package/src/forge/compiler/classifier/classify.ts +32 -8
  168. package/src/forge/compiler/classifier/secrets.ts +3 -2
  169. package/src/forge/compiler/classifier/signals.ts +91 -1
  170. package/src/forge/compiler/client-sdk/build-manifest.ts +59 -0
  171. package/src/forge/compiler/client-sdk/render-client.ts +188 -13
  172. package/src/forge/compiler/data-graph/parse.ts +3 -3
  173. package/src/forge/compiler/data-graph/sql/ddl.ts +60 -2
  174. package/src/forge/compiler/data-graph/sql/serialize.ts +4 -0
  175. package/src/forge/compiler/data-graph/sql/types.ts +1 -0
  176. package/src/forge/compiler/dev-manifest/build.ts +3 -0
  177. package/src/forge/compiler/diagnostics/codes.ts +35 -0
  178. package/src/forge/compiler/diagnostics/create.ts +8 -3
  179. package/src/forge/compiler/diagnostics/index.ts +2 -0
  180. package/src/forge/compiler/emitter/barrel.ts +3 -0
  181. package/src/forge/compiler/emitter/render.ts +5 -0
  182. package/src/forge/compiler/external-manifest/registry.ts +205 -0
  183. package/src/forge/compiler/external-manifest/types.ts +91 -0
  184. package/src/forge/compiler/external-manifest/validate.ts +373 -0
  185. package/src/forge/compiler/frontend-graph/build.ts +85 -13
  186. package/src/forge/compiler/integration/add.ts +498 -22
  187. package/src/forge/compiler/integration/snapshot.ts +2 -0
  188. package/src/forge/compiler/make-registry/build.ts +19 -7
  189. package/src/forge/compiler/orchestrator/plan-profile.ts +23 -0
  190. package/src/forge/compiler/orchestrator/plan.ts +78 -7
  191. package/src/forge/compiler/orchestrator/profile.ts +65 -0
  192. package/src/forge/compiler/orchestrator/run.ts +97 -31
  193. package/src/forge/compiler/orchestrator/serialize.ts +101 -8
  194. package/src/forge/compiler/package-graph/compiler.ts +13 -3
  195. package/src/forge/compiler/package-manager/adapter.ts +4 -1
  196. package/src/forge/compiler/package-manager/commands.ts +4 -0
  197. package/src/forge/compiler/package-manager/executor.ts +30 -1
  198. package/src/forge/compiler/policy-registry/build.ts +44 -1
  199. package/src/forge/compiler/test-graph/build.ts +11 -3
  200. package/src/forge/compiler/types/ai-registry.ts +25 -1
  201. package/src/forge/compiler/types/app-graph.ts +9 -2
  202. package/src/forge/compiler/types/cli.ts +76 -1
  203. package/src/forge/compiler/types/dev-manifest.ts +3 -0
  204. package/src/forge/compiler/types/frontend-graph.ts +2 -2
  205. package/src/forge/delta/classifier.ts +52 -0
  206. package/src/forge/delta/explain.ts +126 -0
  207. package/src/forge/delta/git-observer.ts +43 -0
  208. package/src/forge/delta/ids.ts +44 -0
  209. package/src/forge/delta/index.ts +13 -0
  210. package/src/forge/delta/recorder.ts +402 -0
  211. package/src/forge/delta/redaction.ts +50 -0
  212. package/src/forge/delta/schema.ts +240 -0
  213. package/src/forge/delta/session.ts +142 -0
  214. package/src/forge/delta/status.ts +489 -0
  215. package/src/forge/delta/store.ts +2975 -0
  216. package/src/forge/delta/timeline.ts +104 -0
  217. package/src/forge/dev/server.ts +768 -15
  218. package/src/forge/dev/types.ts +15 -1
  219. package/src/forge/dev/watch.ts +17 -7
  220. package/src/forge/dev-console/cycle.ts +233 -21
  221. package/src/forge/dev-console/types.ts +46 -1
  222. package/src/forge/impact/index.ts +46 -8
  223. package/src/forge/impact/types.ts +6 -0
  224. package/src/forge/intent/index.ts +35 -16
  225. package/src/forge/make/index.ts +149 -6
  226. package/src/forge/make/templates.ts +343 -2
  227. package/src/forge/make/types.ts +3 -1
  228. package/src/forge/refactor/index.ts +1 -0
  229. package/src/forge/repair/rules/index.ts +2 -2
  230. package/src/forge/review/index.ts +158 -12
  231. package/src/forge/review/types.ts +15 -0
  232. package/src/forge/runtime/ai/context.ts +210 -5
  233. package/src/forge/runtime/ai/types.ts +70 -0
  234. package/src/forge/runtime/auth/claims.ts +32 -0
  235. package/src/forge/runtime/auth/errors.ts +2 -0
  236. package/src/forge/runtime/context/create-context.ts +30 -6
  237. package/src/forge/runtime/db/generated-client.ts +13 -2
  238. package/src/forge/runtime/db/memory-adapter.ts +2 -2
  239. package/src/forge/runtime/db/pglite-adapter.ts +77 -2
  240. package/src/forge/runtime/db/postgres-adapter.ts +6 -3
  241. package/src/forge/runtime/executor.ts +112 -2
  242. package/src/forge/runtime/external/bridge.ts +649 -0
  243. package/src/forge/runtime/runner/run-entry.ts +16 -7
  244. package/src/forge/runtime/telemetry/scrubber.ts +91 -10
  245. package/src/forge/runtime/webhooks/security.ts +184 -0
  246. package/src/forge/server.ts +100 -2
  247. package/src/forge/version.ts +1 -1
  248. package/src/forge/vue/index.ts +407 -0
  249. package/src/forge/workspace/change-summary.ts +209 -0
  250. package/src/forge/workspace/forge-cli.ts +14 -0
  251. package/src/forge/workspace/git-summary.ts +279 -0
  252. package/templates/agent-workroom/AGENTS.md +29 -0
  253. package/templates/agent-workroom/README.md +34 -0
  254. package/templates/agent-workroom/forge.config.ts +3 -0
  255. package/templates/agent-workroom/package.json +33 -0
  256. package/templates/agent-workroom/src/actions/indexAgentSignal.ts +10 -0
  257. package/templates/agent-workroom/src/commands/openWorkroom.ts +61 -0
  258. package/templates/agent-workroom/src/commands/recordAgentSignal.ts +119 -0
  259. package/templates/agent-workroom/src/commands/recordCheckRun.ts +52 -0
  260. package/templates/agent-workroom/src/forge/schema.ts +54 -0
  261. package/templates/agent-workroom/src/policies.ts +6 -0
  262. package/templates/agent-workroom/src/queries/listWorkrooms.ts +11 -0
  263. package/templates/agent-workroom/src/queries/liveWorkroom.ts +63 -0
  264. package/templates/agent-workroom/tsconfig.json +16 -0
  265. package/templates/agent-workroom/web/index.html +12 -0
  266. package/templates/agent-workroom/web/package.json +21 -0
  267. package/templates/agent-workroom/web/src/App.tsx +345 -0
  268. package/templates/agent-workroom/web/src/lib/forge.ts +13 -0
  269. package/templates/agent-workroom/web/src/main.tsx +13 -0
  270. package/templates/agent-workroom/web/src/styles.css +545 -0
  271. package/templates/agent-workroom/web/tsconfig.json +27 -0
  272. package/templates/b2b-support-web/package.json +2 -0
  273. package/templates/b2b-support-web/tsconfig.json +4 -1
  274. package/templates/b2b-support-web/web/package.json +1 -1
  275. package/templates/minimal-web/package.json +2 -1
  276. package/templates/minimal-web/tsconfig.json +3 -1
  277. package/templates/minimal-web/web/package.json +2 -2
  278. package/src/forge/_generated/actionSubscriptions.json +0 -2
  279. package/src/forge/_generated/actionSubscriptions.ts +0 -10
  280. package/src/forge/_generated/agentAdapterManifest.json +0 -2
  281. package/src/forge/_generated/agentAdapterManifest.ts +0 -73
  282. package/src/forge/_generated/agentContract.json +0 -2
  283. package/src/forge/_generated/agentContract.ts +0 -7696
  284. package/src/forge/_generated/agentQuickstart.md +0 -32
  285. package/src/forge/_generated/aiContext.ts +0 -59
  286. package/src/forge/_generated/aiModels.json +0 -2
  287. package/src/forge/_generated/aiModels.ts +0 -35
  288. package/src/forge/_generated/aiProviders.json +0 -2
  289. package/src/forge/_generated/aiProviders.ts +0 -23
  290. package/src/forge/_generated/aiRegistry.json +0 -2
  291. package/src/forge/_generated/aiRegistry.ts +0 -29
  292. package/src/forge/_generated/api.json +0 -2
  293. package/src/forge/_generated/api.ts +0 -8
  294. package/src/forge/_generated/appGraph.json +0 -2
  295. package/src/forge/_generated/appGraph.ts +0 -14667
  296. package/src/forge/_generated/appMap.md +0 -35
  297. package/src/forge/_generated/artifactManifest.json +0 -2
  298. package/src/forge/_generated/artifactManifest.ts +0 -7
  299. package/src/forge/_generated/authClaims.json +0 -2
  300. package/src/forge/_generated/authClaims.ts +0 -13
  301. package/src/forge/_generated/authConfig.json +0 -2
  302. package/src/forge/_generated/authConfig.ts +0 -17
  303. package/src/forge/_generated/authContext.ts +0 -23
  304. package/src/forge/_generated/authRegistry.json +0 -2
  305. package/src/forge/_generated/authRegistry.ts +0 -25
  306. package/src/forge/_generated/buildInfo.json +0 -2
  307. package/src/forge/_generated/buildInfo.ts +0 -9
  308. package/src/forge/_generated/capabilityMap.json +0 -2
  309. package/src/forge/_generated/capabilityMap.md +0 -15
  310. package/src/forge/_generated/capabilityMap.ts +0 -17
  311. package/src/forge/_generated/client.ts +0 -282
  312. package/src/forge/_generated/clientApi.ts +0 -9
  313. package/src/forge/_generated/clientManifest.json +0 -2
  314. package/src/forge/_generated/clientManifest.ts +0 -39
  315. package/src/forge/_generated/clientTypes.ts +0 -78
  316. package/src/forge/_generated/configRegistry.json +0 -2
  317. package/src/forge/_generated/configRegistry.ts +0 -4
  318. package/src/forge/_generated/dataGraph.json +0 -2
  319. package/src/forge/_generated/dataGraph.ts +0 -8
  320. package/src/forge/_generated/db.json +0 -2
  321. package/src/forge/_generated/db.ts +0 -2
  322. package/src/forge/_generated/dbSecurityManifest.json +0 -2
  323. package/src/forge/_generated/dbSecurityManifest.ts +0 -15
  324. package/src/forge/_generated/dbSessionContext.json +0 -2
  325. package/src/forge/_generated/dbSessionContext.ts +0 -39
  326. package/src/forge/_generated/deployManifest.json +0 -2
  327. package/src/forge/_generated/deployManifest.ts +0 -14
  328. package/src/forge/_generated/devManifest.json +0 -2
  329. package/src/forge/_generated/devManifest.ts +0 -47
  330. package/src/forge/_generated/envSchema.json +0 -2
  331. package/src/forge/_generated/envSchema.ts +0 -59
  332. package/src/forge/_generated/frontendGraph.json +0 -2
  333. package/src/forge/_generated/frontendGraph.ts +0 -27
  334. package/src/forge/_generated/importGuards.json +0 -2
  335. package/src/forge/_generated/importGuards.ts +0 -686
  336. package/src/forge/_generated/index.ts +0 -67
  337. package/src/forge/_generated/liveProductionManifest.json +0 -2
  338. package/src/forge/_generated/liveProductionManifest.ts +0 -23
  339. package/src/forge/_generated/liveProtocol.json +0 -2
  340. package/src/forge/_generated/liveProtocol.ts +0 -21
  341. package/src/forge/_generated/liveQueryRegistry.json +0 -2
  342. package/src/forge/_generated/liveQueryRegistry.ts +0 -9
  343. package/src/forge/_generated/liveTransportConfig.json +0 -2
  344. package/src/forge/_generated/liveTransportConfig.ts +0 -19
  345. package/src/forge/_generated/makeRegistry.json +0 -2
  346. package/src/forge/_generated/makeRegistry.ts +0 -163
  347. package/src/forge/_generated/makeTemplates.json +0 -2
  348. package/src/forge/_generated/makeTemplates.ts +0 -61
  349. package/src/forge/_generated/mockMap.json +0 -2
  350. package/src/forge/_generated/mockMap.ts +0 -7
  351. package/src/forge/_generated/operationPlaybooks.md +0 -147
  352. package/src/forge/_generated/packageGraph.json +0 -2
  353. package/src/forge/_generated/packageGraph.ts +0 -245249
  354. package/src/forge/_generated/packageUpgradeRegistry.json +0 -2
  355. package/src/forge/_generated/packageUpgradeRegistry.ts +0 -15
  356. package/src/forge/_generated/permissionMatrix.json +0 -2
  357. package/src/forge/_generated/permissionMatrix.ts +0 -7
  358. package/src/forge/_generated/policyRegistry.json +0 -2
  359. package/src/forge/_generated/policyRegistry.ts +0 -11
  360. package/src/forge/_generated/queryRegistry.json +0 -2
  361. package/src/forge/_generated/queryRegistry.ts +0 -9
  362. package/src/forge/_generated/react.d.ts +0 -22
  363. package/src/forge/_generated/react.ts +0 -29
  364. package/src/forge/_generated/reactManifest.json +0 -2
  365. package/src/forge/_generated/reactManifest.ts +0 -19
  366. package/src/forge/_generated/rlsPolicies.json +0 -2
  367. package/src/forge/_generated/rlsPolicies.sql +0 -34
  368. package/src/forge/_generated/rlsPolicies.ts +0 -6
  369. package/src/forge/_generated/runtimeGraph.json +0 -2
  370. package/src/forge/_generated/runtimeGraph.ts +0 -8
  371. package/src/forge/_generated/runtimeMatrix.json +0 -2
  372. package/src/forge/_generated/runtimeMatrix.ts +0 -327385
  373. package/src/forge/_generated/runtimeRegistry.ts +0 -2
  374. package/src/forge/_generated/runtimeRules.md +0 -79
  375. package/src/forge/_generated/secretRegistry.json +0 -2
  376. package/src/forge/_generated/secretRegistry.ts +0 -50
  377. package/src/forge/_generated/secretsContext.ts +0 -11
  378. package/src/forge/_generated/serverApi.ts +0 -10
  379. package/src/forge/_generated/sourceMapManifest.json +0 -2
  380. package/src/forge/_generated/sourceMapManifest.ts +0 -7
  381. package/src/forge/_generated/sqlPlan.json +0 -2
  382. package/src/forge/_generated/sqlPlan.ts +0 -88
  383. package/src/forge/_generated/subscriptionManifest.json +0 -2
  384. package/src/forge/_generated/subscriptionManifest.ts +0 -7
  385. package/src/forge/_generated/symbolicationManifest.json +0 -2
  386. package/src/forge/_generated/symbolicationManifest.ts +0 -17
  387. package/src/forge/_generated/telemetryRegistry.json +0 -2
  388. package/src/forge/_generated/telemetryRegistry.ts +0 -9
  389. package/src/forge/_generated/telemetrySinks.json +0 -2
  390. package/src/forge/_generated/telemetrySinks.ts +0 -11
  391. package/src/forge/_generated/tenantScope.json +0 -2
  392. package/src/forge/_generated/tenantScope.ts +0 -8
  393. package/src/forge/_generated/testGraph.json +0 -2
  394. package/src/forge/_generated/testGraph.ts +0 -3108
  395. package/src/forge/_generated/testPlanRegistry.json +0 -2
  396. package/src/forge/_generated/testPlanRegistry.ts +0 -33
  397. package/src/forge/_generated/uiRoutes.json +0 -2
  398. package/src/forge/_generated/uiRoutes.ts +0 -16
  399. package/src/forge/_generated/uiScenarios.json +0 -2
  400. package/src/forge/_generated/uiScenarios.ts +0 -30
  401. package/src/forge/_generated/uiTestManifest.json +0 -2
  402. package/src/forge/_generated/uiTestManifest.ts +0 -27
  403. package/src/forge/_generated/workflowRegistry.json +0 -2
  404. package/src/forge/_generated/workflowRegistry.ts +0 -9
  405. package/src/forge/_generated/workflowSubscriptions.json +0 -2
  406. package/src/forge/_generated/workflowSubscriptions.ts +0 -10
@@ -0,0 +1,104 @@
1
+ package dev.forgeos.adapter.spring;
2
+
3
+ import com.fasterxml.jackson.databind.JsonNode;
4
+ import dev.forgeos.adapter.Forge;
5
+ import dev.forgeos.adapter.ForgeContext;
6
+ import dev.forgeos.adapter.ForgeHandler;
7
+ import dev.forgeos.adapter.ForgeRegistry;
8
+ import java.lang.reflect.InvocationTargetException;
9
+ import java.lang.reflect.Method;
10
+ import java.lang.reflect.Parameter;
11
+ import org.springframework.aop.support.AopUtils;
12
+ import org.springframework.context.ApplicationContext;
13
+ import org.springframework.core.annotation.AnnotatedElementUtils;
14
+ import org.springframework.util.ReflectionUtils;
15
+
16
+ public final class ForgeSpringRuntime {
17
+ private ForgeSpringRuntime() {
18
+ }
19
+
20
+ public static ForgeRegistry buildRegistry(ApplicationContext context) {
21
+ String[] serviceBeanNames = context.getBeanNamesForAnnotation(ForgeExternalService.class);
22
+ if (serviceBeanNames.length == 0) {
23
+ throw new IllegalStateException("no @ForgeExternalService bean found");
24
+ }
25
+
26
+ Object serviceBean = context.getBean(serviceBeanNames[0]);
27
+ Class<?> serviceClass = AopUtils.getTargetClass(serviceBean);
28
+ ForgeExternalService service = AnnotatedElementUtils.findMergedAnnotation(
29
+ serviceClass,
30
+ ForgeExternalService.class
31
+ );
32
+ if (service == null) {
33
+ throw new IllegalStateException("selected bean is missing @ForgeExternalService");
34
+ }
35
+
36
+ ForgeRegistry registry = Forge.service(service.name(),
37
+ Forge.framework(service.framework()),
38
+ Forge.baseUrl(service.baseUrl()),
39
+ Forge.health(service.health())
40
+ );
41
+
42
+ ReflectionUtils.doWithMethods(serviceClass, method -> registerMethod(registry, serviceBean, method));
43
+ return registry;
44
+ }
45
+
46
+ private static void registerMethod(ForgeRegistry registry, Object bean, Method method) {
47
+ ForgeCommand command = AnnotatedElementUtils.findMergedAnnotation(method, ForgeCommand.class);
48
+ if (command != null) {
49
+ registry.command(command.name(), handlerFor(bean, method),
50
+ command.description().isBlank() ? entry -> { } : Forge.description(command.description()),
51
+ command.path().isBlank() ? entry -> { } : Forge.path(command.path()),
52
+ command.policy().isBlank() ? entry -> { } : Forge.policy(command.policy()),
53
+ Forge.tenantScoped(command.tenantScoped()),
54
+ Forge.transaction(command.transaction()),
55
+ Forge.risk(command.risk()),
56
+ Forge.needsApproval(command.needsApproval()),
57
+ Forge.effects(command.effects())
58
+ );
59
+ }
60
+
61
+ ForgeQuery query = AnnotatedElementUtils.findMergedAnnotation(method, ForgeQuery.class);
62
+ if (query != null) {
63
+ registry.query(query.name(), handlerFor(bean, method),
64
+ query.description().isBlank() ? entry -> { } : Forge.description(query.description()),
65
+ query.path().isBlank() ? entry -> { } : Forge.path(query.path()),
66
+ query.policy().isBlank() ? entry -> { } : Forge.policy(query.policy()),
67
+ Forge.tenantScoped(query.tenantScoped()),
68
+ Forge.readOnly()
69
+ );
70
+ }
71
+ }
72
+
73
+ private static ForgeHandler handlerFor(Object bean, Method method) {
74
+ ReflectionUtils.makeAccessible(method);
75
+ return (context, args) -> {
76
+ try {
77
+ return method.invoke(bean, argumentsFor(method, context, args));
78
+ } catch (InvocationTargetException error) {
79
+ Throwable target = error.getTargetException();
80
+ if (target instanceof Exception exception) {
81
+ throw exception;
82
+ }
83
+ throw new RuntimeException(target);
84
+ }
85
+ };
86
+ }
87
+
88
+ private static Object[] argumentsFor(Method method, ForgeContext context, JsonNode args) throws Exception {
89
+ Parameter[] parameters = method.getParameters();
90
+ Object[] values = new Object[parameters.length];
91
+ for (int index = 0; index < parameters.length; index += 1) {
92
+ Class<?> type = parameters[index].getType();
93
+ if (type.equals(ForgeContext.class)) {
94
+ values[index] = context;
95
+ } else {
96
+ JsonNode safeArgs = args == null || args.isNull()
97
+ ? dev.forgeos.adapter.Json.MAPPER.createObjectNode()
98
+ : args;
99
+ values[index] = dev.forgeos.adapter.Json.MAPPER.treeToValue(safeArgs, type);
100
+ }
101
+ }
102
+ return values;
103
+ }
104
+ }
@@ -0,0 +1,3 @@
1
+ artifactId=forge-java-spring-boot-starter
2
+ groupId=dev.forgeos
3
+ version=0.1.0-alpha.11
@@ -0,0 +1,6 @@
1
+ dev/forgeos/adapter/spring/ForgeServiceBeanCondition.class
2
+ dev/forgeos/adapter/spring/ForgeSpringRuntime.class
3
+ dev/forgeos/adapter/spring/ForgeExternalService.class
4
+ dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.class
5
+ dev/forgeos/adapter/spring/ForgeQuery.class
6
+ dev/forgeos/adapter/spring/ForgeCommand.class
@@ -0,0 +1,6 @@
1
+ /home/runner/work/forge/forge/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeCommand.java
2
+ /home/runner/work/forge/forge/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeExternalService.java
3
+ /home/runner/work/forge/forge/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeQuery.java
4
+ /home/runner/work/forge/forge/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.java
5
+ /home/runner/work/forge/forge/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.java
6
+ /home/runner/work/forge/forge/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringRuntime.java
package/bin/forge.mjs CHANGED
@@ -1,8 +1,26 @@
1
1
  #!/usr/bin/env node
2
2
  import { dirname, join } from "node:path";
3
+ import { readFileSync } from "node:fs";
3
4
  import { fileURLToPath, pathToFileURL } from "node:url";
4
5
 
5
6
  const root = dirname(dirname(fileURLToPath(import.meta.url)));
7
+ const args = process.argv.slice(2);
8
+
9
+ if (args.includes("--version") || args.includes("-v")) {
10
+ const pkg = JSON.parse(readFileSync(join(root, "package.json"), "utf8"));
11
+ const version = typeof pkg.version === "string" ? pkg.version : "unknown";
12
+ if (args.includes("--json")) {
13
+ console.log(JSON.stringify({
14
+ version,
15
+ cliVersion: version,
16
+ forgeosVersion: version,
17
+ }, null, 2));
18
+ } else {
19
+ console.log(version);
20
+ }
21
+ process.exit(0);
22
+ }
23
+
6
24
  const entrypoint = join(root, "src", "forge", "cli", "main.ts");
7
25
 
8
26
  let register;
@@ -0,0 +1,212 @@
1
+ # Changelog
2
+
3
+ Release history for the `forgeos` npm package.
4
+
5
+ The canonical source file in the repository is `CHANGELOG.md`.
6
+
7
+ ## Unreleased
8
+
9
+ ## 0.1.0-alpha.19
10
+
11
+ Alpha hardening:
12
+
13
+ - Added the `agent-workroom` app template for Forge Studio style demos: external
14
+ agents edit the app, while ForgeOS shows preview URL, agent signals, check
15
+ runs, and handoff evidence through generated commands and liveQuery bindings.
16
+ - Added `forge studio attach` for Studio-style observer apps: writes `.forge/studio/attachment.json`, prepares external-agent adapters/hooks, and returns the target preview URL.
17
+ - Added `summary.preview` and `summary.urls.suggestedPreview` to `forge dev --once --json` so observer UIs can target the app under construction instead of pointing at themselves.
18
+ - Improved `forge dev` port-busy failures with a `port_busy` JSON failure kind and suggested recovery commands, including the common "Is port X in use?" startup error shape.
19
+ - `forge dev` now resolves the web app port before startup and automatically moves to the next available port when the default web port is busy, keeping the printed/JSON web URL truthful.
20
+ - Improved `forge check --json` next actions by surfacing diagnostic-specific repair/inspect commands instead of a generic last-test-run repair hint.
21
+ - Added `forge doctor agent --target <agent>` as the top-level agent readiness check.
22
+ - Added explicit `forge agent ingest <source> --watch --file <events.ndjson>` support for opt-in hook/export file ingestion.
23
+ - Added human-friendly verifier aliases: `forge verify quick`, `forge verify agent`, and `forge verify release`.
24
+ - Made `forge status --human` an explicit accepted spelling and documented `forge add <npm-package> --workspace web` as the normal package-add path.
25
+ - Made bare `forge inspect` default to the compact `summary` target instead of returning a usage error.
26
+ - Added `forge release doctor`, `release check --allow-missing-local-release`, and `self-host check --prepared-only` so release readiness can distinguish hard failures from not-yet-prepared local artifacts.
27
+ - Hardened the public packed-package smoke with dry-run mode, per-step JSON evidence, step timeouts, installed-global CLI coverage, hook smoke readiness, Studio open coverage, and preview-port cleanup checks.
28
+ - Expanded `forge docs check` with YAML shape checks, internal Markdown link validation, optional ReadTheDocs-style venv installation, and strict MkDocs build execution.
29
+ - Added authored-only review paths through `forge changed --authored` and `forge diff authored`, keeping generated artifacts collapsed unless explicitly requested.
30
+ - Added `forge delta status --verbose --json` for schema, lock, path, and aggregate-count diagnostics without expanding the default status payload.
31
+ - Added explicit hook readiness levels (`none`, `canary`, `trusted-native`) and documented `.codex/hooks.json` as versioned adapter configuration while keeping `.forge/agent/**` as local operational state.
32
+
33
+ ## 0.1.0-alpha.18
34
+
35
+ Codex hook memory hardening:
36
+
37
+ - Derived useful Codex hook metadata from the documented wire format while keeping raw prompts, tool inputs, tool responses, transcripts, and secrets out of Agent Memory.
38
+ - Added safe command summaries, tool-call ids, result status, exit codes, response summaries, inferred files, and inferred runtime entries for Codex tool events.
39
+ - Updated Codex hook installation with hook timeouts, status messages, and a local wrapper for checkout-based ingestion.
40
+ - Updated Agent Memory docs and regression coverage for real Codex hook payloads.
41
+
42
+ ## 0.1.0-alpha.17
43
+
44
+ External runtime timeline metadata:
45
+
46
+ - Enriched `forge timeline` and `forge explain` for imported external runtimes.
47
+ - External command/query calls now keep `service`, `language`, `risk`, `policy`, `tenantScoped`, and `needsApproval` metadata in DeltaDB.
48
+ - Promoted this release on npm as both `alpha` and `latest`.
49
+
50
+ ## 0.1.0-alpha.16
51
+
52
+ Stability alignment:
53
+
54
+ - Fixed `forge timeline` and `forge explain` crashes after large generated artifact batches.
55
+ - Fixed brownfield import detection for root-level Next.js App Router and Pages API routes.
56
+ - Updated CLI, Agent Memory, and DeltaDB docs for the alpha.16 command surface.
57
+
58
+ ## 0.1.0-alpha.15
59
+
60
+ Brownfield import analysis:
61
+
62
+ - Added H49 `forge import analyze`, `forge import inspect`, and `forge inspect imported --json`.
63
+ - Emits `.forge/import` inventory, route, frontend call, candidate entry, risk, migration plan, and imported agent contract artifacts.
64
+ - Keeps every imported entry hidden from agents until review, with approval required for command-like or risky static detections.
65
+
66
+ ## 0.1.0-alpha.14
67
+
68
+ Java and Nuxt/Vue support:
69
+
70
+ - Added the Java external runtime adapter, Spring Boot starter, and `java-billing` conformance example.
71
+ - Added generated Vue bindings and the `forgeos/vue` export.
72
+ - Added Nuxt UI scaffolding through `forge make ui --framework nuxt`.
73
+ - Updated docs, agent adapter guidance, generated manifests, and focused Java/Vue/Nuxt tests.
74
+
75
+ ## 0.1.0-alpha.13
76
+
77
+ Agent Memory Bridge:
78
+
79
+ - Added H48 redacted external agent event ingestion with normalized `forge.agent-event.v1` envelopes.
80
+ - Added Codex and Claude Code hook installers plus Cursor MCP/rules setup.
81
+ - Added `forge mcp serve`, `forge agent install`, `forge agent ingest`, `forge agent context`, and `forge agent memory`.
82
+ - Persisted external agent activity in DeltaDB and linked agent/tool/file events into the semantic timeline.
83
+
84
+ ## 0.1.0-alpha.12
85
+
86
+ Semantic Timeline:
87
+
88
+ - Added the H47 DeltaDB semantic timeline projection with rebuildable events, entity indexes, causal edges, and projection state.
89
+ - Upgraded `forge timeline` from raw operations into an entity-oriented timeline for runtime entries, policies, diagnostics, proofs, services, files, and sessions.
90
+ - Added proof staleness detection and timeline context in `forge explain`.
91
+
92
+ ## 0.1.0-alpha.11
93
+
94
+ Strict verify performance:
95
+
96
+ - Reduced the validated `forge verify --strict` wall time from roughly 358-454s to about 116s on the current Windows test machine.
97
+ - Added stable repo-local `tsx` CLI caching under `node_modules/.cache/forge-tsx-cli` so spawned CLI tests reuse the warm compiler path.
98
+ - Balanced TestGraph strict execution across shared and isolated lanes, bringing the slowest files down from roughly 50s to under 10s in the updated profile.
99
+ - Moved heavy refactor/impact/external runtime suites onto faster shared paths where safe and kept isolation for process-sensitive tests.
100
+ - Documented and guarded the cache behavior so future test helpers preserve the speedup without checking cache contents into git.
101
+ - Added guarded alpha release workflow support for promoting the public `latest` dist-tag when npm token auth is configured.
102
+
103
+ ## 0.1.0-alpha.10
104
+
105
+ Launch polish:
106
+
107
+ - Fixed `forge run <external-command> --args ...` so CLI arguments reach the external runtime bridge.
108
+ - Added direct external query CLI support through `forge query <service.query> --args ...`.
109
+ - Emit generated `.json` artifacts as pure JSON while keeping deterministic headers on code/text artifacts.
110
+ - Relaxed the `minimal-web` template verify script to `forge verify --smoke` and added the missing `check` script to `b2b-support-web`.
111
+ - Updated public protocol/changelog docs for the external runtime and Go adapter alpha line.
112
+ - Bumped the create-app wrapper package line to `create-forgeos-app@0.1.0-alpha.4`.
113
+
114
+ ## 0.1.0-alpha.9
115
+
116
+ Compiler, external runtime, and Go adapter:
117
+
118
+ - Added the Forge external runtime protocol bridge for manifest-backed commands and queries.
119
+ - Added the Go adapter MVP with a real `go-billing` conformance example.
120
+ - Emitted external service metadata into inspect/API/agent artifacts, including `needsApproval` for agent tools.
121
+ - Reuse compiler classifier package signals across export classification, dropping repeated package signal scans.
122
+ - Reuse serialized graph JSON when rendering the largest generated TypeScript graph artifacts.
123
+ - Keep generated Forge artifacts aligned with the `0.1.0-alpha.9` compiler/runtime version.
124
+
125
+ ## 0.1.0-alpha.8
126
+
127
+ Publishing:
128
+
129
+ - Publish prerelease packages through the ForgeOS alpha publisher so npm dist-tags stay aligned.
130
+
131
+ ## 0.1.0-alpha.7
132
+
133
+ Publishing:
134
+
135
+ - Keep npm prerelease publishing on the public alpha dist-tag.
136
+
137
+ ## 0.1.0-alpha.6
138
+
139
+ Release and packaging hardening:
140
+
141
+ - Added `forge --version` / `forge --version --json`.
142
+ - Updated `create-forgeos-app` help to read the wrapper package version instead of a hardcoded string and bumped the wrapper to `0.1.0-alpha.2`.
143
+ - Added dependency vulnerability evidence with an explicit waiver file and CI release gate.
144
+ - Updated generated web template dependencies to current Vite/plugin-react and Next majors.
145
+
146
+ ## 0.1.0-alpha.5
147
+
148
+ Release alignment for the public alpha channel:
149
+
150
+ - Added `forge ai redteam --model-level --json` with deterministic prompt-injection, secret-exfiltration, approval-bypass, cross-tenant, and indirect tool-injection probes.
151
+ - Added `forge security prove --full --json` support for source checkouts, with graceful structural-proof fallback when packaged apps do not include ForgeOS test fixtures.
152
+ - Strengthened npm publish workflows to run `security prove --db postgres --full --json`.
153
+ - Added public registry smoke coverage for `forgeos@alpha` and `create-forgeos-app@alpha`.
154
+ - Bumped the create-app wrapper package line to `create-forgeos-app@0.1.0-alpha.1`.
155
+
156
+ ## 0.1.0-alpha.4
157
+
158
+ Security assurance and release evidence hardening:
159
+
160
+ - Added value-aware telemetry redaction for known secret values in safe-looking fields, messages, details, outputs, and stack traces.
161
+ - Added webhook signature, timestamp, and replay protection helpers with Stripe/GitHub/generic HMAC coverage.
162
+ - Added HTTP tenant-isolation tests that exercise the dev server/API boundary, not only the internal runtime executor.
163
+ - Added `forge rls mutate-test --json` to kill dangerous generated RLS mutations such as missing FORCE RLS, missing policies, unconditional predicates, and `BYPASSRLS`.
164
+ - Extended `forge security prove --json` with RLS mutation proof and invariant-level evidence metadata.
165
+ - Added scripts to split security evidence by invariant and emit basic release supply-chain evidence plus CycloneDX SBOM.
166
+ - Strengthened publish/security workflows so release gates use Postgres-backed security proof, RLS mutation proof, release evidence, and SBOM generation.
167
+
168
+ ## 0.1.0-alpha.3
169
+
170
+ Native Forge AI agents on top of Vercel AI SDK v6:
171
+
172
+ - Added `aiTool` and `agent` primitives with generated `agentTools.json` / `agentTools.md`.
173
+ - Added `ctx.agent.run` and `ctx.ai.runAgent` using AI SDK `ToolLoopAgent`.
174
+ - Added auto-tools for commands, queries, and liveQueries with read-only vs approval-required writes.
175
+ - Added dev agent endpoints: `POST /ai/agents/run` and `POST /ai/agents/chat`.
176
+ - Extended `forge ai` CLI with `tools`, `agents`, and `trace` subcommands.
177
+ - Added `forge inspect agent-tools` and agent tool metadata in `agentContract.json`.
178
+ - Upgraded runtime dependency to AI SDK v6 for tool calling, streaming UI, and MCP compatibility.
179
+
180
+ Documentation:
181
+
182
+ - Added public [AI](ai.md) page and AST-aware `rename command` codemod docs.
183
+ - Full RTD expansion: [Agent Workflow](agent-workflow.md), [Frontend](frontend.md), [Security & Data](security-and-data.md), [Authoring](authoring.md), [Testing & Repair](testing-and-repair.md), [Self-Host](self-host.md), [Templates](templates.md), Material theme, search, and Mermaid diagrams.
184
+
185
+ ## 0.1.0-alpha.2
186
+
187
+ Windows and generated-app hardening:
188
+
189
+ - Fixed Node ESM handler loading on Windows by importing generated app modules through `file://` URLs across commands, queries, liveQueries, outbox actions, workflow steps, mocks, and telemetry adapters.
190
+ - Fixed `forge dev` SSE streaming on the Node HTTP fallback so liveQuery snapshots are flushed immediately instead of buffering forever.
191
+ - Hardened generated app scaffolding and web dev spawning on Windows.
192
+ - Updated the B2B support template to route frontend imports through `web/lib/forge.ts` and use safer handler input validation.
193
+ - Added focused tests for Node compatibility, template scaffolding, runtime imports, and streaming responses.
194
+ - Added `create-forgeos-app@alpha` for `npm create forgeos-app@alpha`.
195
+ - Added GitHub Packages mirror workflow for scoped package publishing.
196
+
197
+ ## 0.1.0-alpha.1
198
+
199
+ Republish alpha with the dependency/API oracle improvements:
200
+
201
+ - Added dependency API inspection commands for agents: `forge deps api`, `forge deps trace`, and `forge deps runtime-compat`.
202
+ - Added dependency API summaries to `agentContract.json`.
203
+ - Added package resolution traces, runtime compatibility metadata, and runtime/type mismatch diagnostics to `packageGraph`.
204
+ - Reduced package graph warning noise for `package.json` metadata exports, declaration-file subpaths, and pattern exports.
205
+
206
+ ## 0.1.0-alpha.0
207
+
208
+ Initial alpha packaging baseline for ForgeOS.
209
+
210
+ This release line validates npm installation, the `forge` CLI binary, template creation, generated contracts, and the agent-native local development loop.
211
+
212
+ Added Read the Docs-ready public documentation, generator/package version alignment checks, and a broad generated-app field-test harness for release hardening.
@@ -0,0 +1,189 @@
1
+ # Forge External Runtime Protocol
2
+
3
+ Forge apps can import and call services written outside TypeScript through a
4
+ `forge.manifest.json` compatible manifest. The manifest is the source of truth
5
+ for external commands and queries:
6
+
7
+ - validate and import external service metadata;
8
+ - expose external services in generated inspect/API/agent artifacts;
9
+ - execute external commands and queries through the Forge runtime bridge.
10
+
11
+ This lets Java/Spring, Go, Rust, C#, Python, and other runtimes join the Forge
12
+ contract without requiring the Forge compiler to parse every language AST.
13
+
14
+ ## Manifest
15
+
16
+ External services publish JSON that matches
17
+ `schemas/forge-manifest.schema.json`.
18
+
19
+ ```json
20
+ {
21
+ "forgeProtocol": "1.0",
22
+ "language": "java",
23
+ "framework": "spring-boot",
24
+ "service": {
25
+ "name": "billing",
26
+ "transport": "http",
27
+ "baseUrl": "http://localhost:8080",
28
+ "health": "/actuator/health"
29
+ },
30
+ "entries": [
31
+ {
32
+ "name": "createInvoice",
33
+ "kind": "command",
34
+ "path": "/invoices",
35
+ "policy": "billing.write",
36
+ "transaction": "external-managed",
37
+ "risk": "write",
38
+ "needsApproval": true,
39
+ "effects": ["invoice.created"]
40
+ },
41
+ {
42
+ "name": "listInvoices",
43
+ "kind": "query",
44
+ "path": "/invoices",
45
+ "policy": "billing.read",
46
+ "transaction": "read-only",
47
+ "risk": "read",
48
+ "tenantScoped": true
49
+ }
50
+ ]
51
+ }
52
+ ```
53
+
54
+ Queries must stay read-only. Commands can declare write, destructive, or
55
+ external risk. Policies are metadata until the runtime bridge enforces them for
56
+ the external transport.
57
+
58
+ ## CLI
59
+
60
+ Validate a manifest:
61
+
62
+ ```bash
63
+ forge manifest validate ./forge.manifest.json --json
64
+ ```
65
+
66
+ Import or update a service in the app registry:
67
+
68
+ ```bash
69
+ forge manifest import ./forge.manifest.json --json
70
+ ```
71
+
72
+ Imports are stored in `.forge/external-manifests.json`. A root
73
+ `forge.manifest.json` is also discovered automatically for single-service
74
+ experiments.
75
+
76
+ ## Generated Artifacts
77
+
78
+ After `forge generate`, external services are emitted to:
79
+
80
+ - `src/forge/_generated/externalServices.json`
81
+ - `src/forge/_generated/api.json` under `external`
82
+ - `src/forge/_generated/agentContract.json`
83
+ - `src/forge/_generated/agentTools.json`
84
+ - `src/forge/_generated/capabilityMap.json`
85
+
86
+ External auto-tools use `execution: "external-runtime-endpoint"`. Forge exposes
87
+ runtime bridge endpoints for these tools:
88
+
89
+ ```text
90
+ POST /external/:service/commands/:name
91
+ POST /external/:service/queries/:name
92
+ ```
93
+
94
+ The generated client exposes the same bridge through:
95
+
96
+ ```ts
97
+ await client.externalCommand("billing.createInvoice", args);
98
+ await client.externalQuery(api.external.queries["billing.listInvoices"], args);
99
+ ```
100
+
101
+ Command entries can also be invoked from the CLI with a qualified external
102
+ name:
103
+
104
+ ```bash
105
+ forge run billing.createInvoice --args '{"title":"Invoice"}'
106
+ forge query billing.listInvoices --args '{}'
107
+ forge run query billing.listInvoices --args '{}'
108
+ ```
109
+
110
+ ## Java Adapter
111
+
112
+ Forge ships a minimal Java adapter under `adapters/java`. The adapter is a small
113
+ SDK for JVM services that want to join the Forge external runtime protocol
114
+ without requiring Forge to parse Java source code.
115
+
116
+ ```java
117
+ ForgeRegistry app = Forge.service("billing",
118
+ Forge.framework("java/jdk-http"),
119
+ Forge.baseUrl("http://127.0.0.1:8788"));
120
+
121
+ app.command("createInvoice",
122
+ Forge.handle(CreateInvoiceInput.class, Billing::createInvoice),
123
+ Forge.policy("billing.manage"),
124
+ Forge.tenantScoped(true),
125
+ Forge.needsApproval(true));
126
+
127
+ app.query("listInvoices",
128
+ Forge.handle(EmptyInput.class, Billing::listInvoices),
129
+ Forge.policy("billing.manage"),
130
+ Forge.tenantScoped(true),
131
+ Forge.readOnly());
132
+ ```
133
+
134
+ The adapter exposes `GET /manifest`, `GET /health`, `POST /commands/:name`, and
135
+ `POST /queries/:name`. The `examples/java-billing` app demonstrates manifest
136
+ export, HTTP serving, policy enforcement through the Forge bridge, generated
137
+ client calls, and agent tool registration.
138
+
139
+ Spring Boot users can start from `adapters/java-spring-boot-starter`, which
140
+ provides `@ForgeExternalService`, `@ForgeCommand`, and `@ForgeQuery` annotations
141
+ plus a `ForgeRegistry` auto-configuration hook.
142
+
143
+ ## Runtime Bridge
144
+
145
+ Forge accepts the normal JSON body:
146
+
147
+ ```json
148
+ { "args": {} }
149
+ ```
150
+
151
+ For HTTP services, Forge forwards a JSON envelope:
152
+
153
+ ```json
154
+ {
155
+ "args": {},
156
+ "auth": { "kind": "user", "userId": "u1", "tenantId": "t1", "role": "member" },
157
+ "forge": {
158
+ "service": "billing",
159
+ "entry": "createInvoice",
160
+ "kind": "command",
161
+ "traceId": "trace_..."
162
+ }
163
+ }
164
+ ```
165
+
166
+ Forge also forwards runtime headers such as `x-forge-trace-id`,
167
+ `x-forge-auth-kind`, `x-forge-user-id`, `x-forge-tenant-id`, `x-forge-role`,
168
+ and the inbound `Authorization` header when present.
169
+
170
+ External services can return either a Forge envelope:
171
+
172
+ ```json
173
+ { "ok": true, "result": { "id": "inv_1" } }
174
+ ```
175
+
176
+ or a raw JSON value, which Forge treats as the result for successful HTTP
177
+ responses. Error envelopes should include `ok: false`, `diagnostics`, or
178
+ `error`.
179
+
180
+ Supported runtime transports:
181
+
182
+ - `http`: calls `service.baseUrl + entry.path`.
183
+ - `stdio`: starts `service.command`, writes the JSON envelope to stdin, and
184
+ reads a JSON envelope or raw JSON result from stdout.
185
+ - `grpc`: accepted in manifests for forward compatibility, but not executable
186
+ by the built-in runtime bridge yet.
187
+
188
+ Manifest `policy` values are added to Forge policy bindings during generation.
189
+ Use a named Forge policy, or `public`, `user`, or `system`.
@@ -0,0 +1,7 @@
1
+ module github.com/Stahldavid/forge/examples/go-billing
2
+
3
+ go 1.22
4
+
5
+ require github.com/Stahldavid/forge/adapters/go v0.0.0
6
+
7
+ replace github.com/Stahldavid/forge/adapters/go => ../../adapters/go