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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/.npmignore +10 -0
  2. package/AGENTS.md +142 -90
  3. package/CHANGELOG.md +433 -0
  4. package/LICENSE +21 -0
  5. package/README.md +67 -8
  6. package/adapters/go/README.md +23 -0
  7. package/adapters/go/go.mod +3 -0
  8. package/adapters/go/http.go +149 -0
  9. package/adapters/go/registry.go +234 -0
  10. package/adapters/go/types.go +136 -0
  11. package/adapters/java/README.md +68 -0
  12. package/adapters/java/pom.xml +34 -0
  13. package/adapters/java/src/main/java/dev/forgeos/adapter/Auth.java +20 -0
  14. package/adapters/java/src/main/java/dev/forgeos/adapter/Diagnostic.java +16 -0
  15. package/adapters/java/src/main/java/dev/forgeos/adapter/Entry.java +38 -0
  16. package/adapters/java/src/main/java/dev/forgeos/adapter/EntryKind.java +16 -0
  17. package/adapters/java/src/main/java/dev/forgeos/adapter/ErrorInfo.java +4 -0
  18. package/adapters/java/src/main/java/dev/forgeos/adapter/Forge.java +94 -0
  19. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeCall.java +12 -0
  20. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeContext.java +11 -0
  21. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHandler.java +8 -0
  22. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHttpHandler.java +179 -0
  23. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeRegistry.java +121 -0
  24. package/adapters/java/src/main/java/dev/forgeos/adapter/Json.java +14 -0
  25. package/adapters/java/src/main/java/dev/forgeos/adapter/Manifest.java +14 -0
  26. package/adapters/java/src/main/java/dev/forgeos/adapter/RequestEnvelope.java +6 -0
  27. package/adapters/java/src/main/java/dev/forgeos/adapter/ResponseEnvelope.java +25 -0
  28. package/adapters/java/src/main/java/dev/forgeos/adapter/Risk.java +18 -0
  29. package/adapters/java/src/main/java/dev/forgeos/adapter/Schemas.java +36 -0
  30. package/adapters/java/src/main/java/dev/forgeos/adapter/Service.java +65 -0
  31. package/adapters/java/src/main/java/dev/forgeos/adapter/TransactionMode.java +18 -0
  32. package/adapters/java/src/main/java/dev/forgeos/adapter/TypedForgeHandler.java +6 -0
  33. package/adapters/java-spring-boot-starter/README.md +32 -0
  34. package/adapters/java-spring-boot-starter/pom.xml +36 -0
  35. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeCommand.java +22 -0
  36. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeExternalService.java +15 -0
  37. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeQuery.java +16 -0
  38. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.java +18 -0
  39. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.java +16 -0
  40. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringRuntime.java +104 -0
  41. package/adapters/java-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
  42. package/bin/forge.mjs +18 -0
  43. package/docs/cair-protocol.md +103 -0
  44. package/docs/changelog.md +548 -0
  45. package/docs/forge-protocol.md +189 -0
  46. package/examples/go-billing/go.mod +7 -0
  47. package/examples/go-billing/main.go +120 -0
  48. package/examples/java-billing/pom.xml +52 -0
  49. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/CreateInvoiceInput.java +4 -0
  50. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Invoice.java +11 -0
  51. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Main.java +127 -0
  52. package/package.json +31 -3
  53. package/schemas/forge-manifest.schema.json +57 -0
  54. package/src/forge/_generated/releaseManifest.json +1 -2
  55. package/src/forge/_generated/releaseManifest.ts +3 -3
  56. package/src/forge/agent-adapters/index.ts +1584 -125
  57. package/src/forge/agent-adapters/types.ts +224 -1
  58. package/src/forge/agent-memory/bridge.ts +1333 -0
  59. package/src/forge/agent-memory/context-pack.ts +277 -0
  60. package/src/forge/agent-memory/hook-runner.ts +312 -0
  61. package/src/forge/agent-memory/mcp.ts +224 -0
  62. package/src/forge/agent-memory/normalize.ts +498 -0
  63. package/src/forge/agent-memory/redaction.ts +103 -0
  64. package/src/forge/agent-memory/sources/claude-code.ts +51 -0
  65. package/src/forge/agent-memory/sources/codex-hook-runner.mjs +273 -0
  66. package/src/forge/agent-memory/sources/codex.ts +119 -0
  67. package/src/forge/agent-memory/sources/cursor.ts +35 -0
  68. package/src/forge/agent-memory/types.ts +204 -0
  69. package/src/forge/bench.ts +248 -0
  70. package/src/forge/brownfield-import/index.ts +801 -0
  71. package/src/forge/brownfield-import/types.ts +127 -0
  72. package/src/forge/cair/action-journal.ts +61 -0
  73. package/src/forge/cair/action-parser.ts +314 -0
  74. package/src/forge/cair/action-validator.ts +40 -0
  75. package/src/forge/cair/actions.ts +1818 -0
  76. package/src/forge/cair/format.ts +77 -0
  77. package/src/forge/cair/index.ts +106 -0
  78. package/src/forge/cair/query.ts +478 -0
  79. package/src/forge/cair/snapshot.ts +315 -0
  80. package/src/forge/cair/types.ts +248 -0
  81. package/src/forge/cli/ai.ts +339 -21
  82. package/src/forge/cli/auth.ts +348 -10
  83. package/src/forge/cli/authmd.ts +441 -0
  84. package/src/forge/cli/baseline.ts +112 -0
  85. package/src/forge/cli/build.ts +20 -4
  86. package/src/forge/cli/changed.ts +437 -0
  87. package/src/forge/cli/codex-app-server.ts +877 -0
  88. package/src/forge/cli/commands.ts +1620 -20
  89. package/src/forge/cli/db.ts +209 -2
  90. package/src/forge/cli/deploy.ts +887 -0
  91. package/src/forge/cli/deps.ts +82 -13
  92. package/src/forge/cli/dev.ts +961 -46
  93. package/src/forge/cli/docs.ts +265 -0
  94. package/src/forge/cli/doctor.ts +297 -0
  95. package/src/forge/cli/field-test.ts +329 -0
  96. package/src/forge/cli/handoff.ts +336 -0
  97. package/src/forge/cli/index.ts +1 -0
  98. package/src/forge/cli/last-run.ts +84 -0
  99. package/src/forge/cli/main.ts +107 -3
  100. package/src/forge/cli/new.ts +152 -13
  101. package/src/forge/cli/next-actions.ts +23 -0
  102. package/src/forge/cli/output.ts +389 -6
  103. package/src/forge/cli/parse.ts +1050 -34
  104. package/src/forge/cli/progress.ts +51 -0
  105. package/src/forge/cli/query.ts +32 -0
  106. package/src/forge/cli/release.ts +35 -11
  107. package/src/forge/cli/rls.ts +43 -4
  108. package/src/forge/cli/run.ts +41 -0
  109. package/src/forge/cli/security.ts +112 -0
  110. package/src/forge/cli/self-host.ts +56 -14
  111. package/src/forge/cli/studio.ts +2218 -0
  112. package/src/forge/cli/verify.ts +1455 -32
  113. package/src/forge/cli/windows.ts +23 -0
  114. package/src/forge/cli/workos.ts +1020 -0
  115. package/src/forge/compiler/agent-contract/build.ts +670 -64
  116. package/src/forge/compiler/agent-contract/types.ts +45 -2
  117. package/src/forge/compiler/ai-registry/parse.ts +71 -2
  118. package/src/forge/compiler/api-surface/build.ts +47 -0
  119. package/src/forge/compiler/app-graph/build.ts +112 -9
  120. package/src/forge/compiler/app-graph/extract.ts +107 -0
  121. package/src/forge/compiler/app-graph/module-graph.ts +73 -78
  122. package/src/forge/compiler/app-graph/parser.ts +24 -24
  123. package/src/forge/compiler/app-graph/profile.ts +26 -0
  124. package/src/forge/compiler/app-graph/versions.ts +1 -1
  125. package/src/forge/compiler/classifier/capabilities.ts +3 -2
  126. package/src/forge/compiler/classifier/classify.ts +32 -8
  127. package/src/forge/compiler/classifier/secrets.ts +3 -2
  128. package/src/forge/compiler/classifier/signals.ts +91 -1
  129. package/src/forge/compiler/client-sdk/build-manifest.ts +59 -0
  130. package/src/forge/compiler/client-sdk/render-client.ts +295 -13
  131. package/src/forge/compiler/data-graph/parse.ts +20 -4
  132. package/src/forge/compiler/data-graph/sql/ddl.ts +144 -31
  133. package/src/forge/compiler/data-graph/sql/serialize.ts +4 -0
  134. package/src/forge/compiler/data-graph/sql/types.ts +1 -0
  135. package/src/forge/compiler/diagnostics/codes.ts +30 -0
  136. package/src/forge/compiler/diagnostics/create.ts +21 -2
  137. package/src/forge/compiler/diagnostics/index.ts +2 -0
  138. package/src/forge/compiler/emitter/barrel.ts +3 -0
  139. package/src/forge/compiler/emitter/render.ts +9 -0
  140. package/src/forge/compiler/external-manifest/registry.ts +205 -0
  141. package/src/forge/compiler/external-manifest/types.ts +91 -0
  142. package/src/forge/compiler/external-manifest/validate.ts +373 -0
  143. package/src/forge/compiler/frontend-graph/build.ts +142 -14
  144. package/src/forge/compiler/integration/add.ts +618 -24
  145. package/src/forge/compiler/integration/plan.ts +43 -12
  146. package/src/forge/compiler/integration/render.ts +29 -0
  147. package/src/forge/compiler/integration/snapshot.ts +2 -0
  148. package/src/forge/compiler/integration/templates/convex.ts +70 -0
  149. package/src/forge/compiler/integration/templates/index.ts +1 -0
  150. package/src/forge/compiler/integration/templates/render.ts +38 -0
  151. package/src/forge/compiler/integration/templates/types.ts +3 -0
  152. package/src/forge/compiler/integration/templates/workos.ts +1219 -0
  153. package/src/forge/compiler/make-registry/build.ts +8 -9
  154. package/src/forge/compiler/orchestrator/fast-check.ts +4 -0
  155. package/src/forge/compiler/orchestrator/generate-lock.ts +14 -3
  156. package/src/forge/compiler/orchestrator/manifest.ts +1 -1
  157. package/src/forge/compiler/orchestrator/plan-profile.ts +23 -0
  158. package/src/forge/compiler/orchestrator/plan.ts +247 -10
  159. package/src/forge/compiler/orchestrator/profile.ts +65 -0
  160. package/src/forge/compiler/orchestrator/run.ts +97 -31
  161. package/src/forge/compiler/orchestrator/serialize.ts +33 -8
  162. package/src/forge/compiler/orchestrator/types.ts +1 -1
  163. package/src/forge/compiler/package-graph/compiler.ts +3 -1
  164. package/src/forge/compiler/package-graph/constants.ts +1 -1
  165. package/src/forge/compiler/package-manager/adapter.ts +4 -1
  166. package/src/forge/compiler/package-manager/commands.ts +4 -0
  167. package/src/forge/compiler/package-manager/executor.ts +30 -1
  168. package/src/forge/compiler/package-manager/version.ts +36 -12
  169. package/src/forge/compiler/package-upgrades/planner.ts +155 -18
  170. package/src/forge/compiler/package-upgrades/types.ts +2 -0
  171. package/src/forge/compiler/policy-registry/build.ts +47 -2
  172. package/src/forge/compiler/policy-registry/parse.ts +32 -2
  173. package/src/forge/compiler/recipes/definitions.ts +63 -0
  174. package/src/forge/compiler/recipes/index.ts +2 -0
  175. package/src/forge/compiler/recipes/registry.ts +6 -0
  176. package/src/forge/compiler/test-graph/build.ts +11 -3
  177. package/src/forge/compiler/types/app-graph.ts +8 -2
  178. package/src/forge/compiler/types/cli.ts +75 -1
  179. package/src/forge/compiler/types/dev-manifest.ts +4 -0
  180. package/src/forge/compiler/types/emit.ts +2 -0
  181. package/src/forge/compiler/types/frontend-graph.ts +2 -2
  182. package/src/forge/compiler/types/integration.ts +1 -0
  183. package/src/forge/compiler/types/package-graph.ts +6 -0
  184. package/src/forge/compiler/types/policy-registry.ts +3 -1
  185. package/src/forge/delta/classifier.ts +52 -0
  186. package/src/forge/delta/explain.ts +238 -0
  187. package/src/forge/delta/git-observer.ts +43 -0
  188. package/src/forge/delta/ids.ts +44 -0
  189. package/src/forge/delta/index.ts +25 -0
  190. package/src/forge/delta/recorder.ts +540 -0
  191. package/src/forge/delta/redaction.ts +50 -0
  192. package/src/forge/delta/schema.ts +240 -0
  193. package/src/forge/delta/session.ts +142 -0
  194. package/src/forge/delta/status.ts +1202 -0
  195. package/src/forge/delta/store.ts +3284 -0
  196. package/src/forge/delta/timeline.ts +178 -0
  197. package/src/forge/dev/server.ts +808 -17
  198. package/src/forge/dev/types.ts +15 -1
  199. package/src/forge/dev/watch.ts +17 -7
  200. package/src/forge/dev-console/cycle.ts +280 -33
  201. package/src/forge/dev-console/types.ts +47 -1
  202. package/src/forge/impact/index.ts +204 -9
  203. package/src/forge/impact/types.ts +33 -1
  204. package/src/forge/intent/index.ts +35 -16
  205. package/src/forge/make/fields.ts +26 -0
  206. package/src/forge/make/index.ts +40 -6
  207. package/src/forge/make/templates.ts +155 -2
  208. package/src/forge/make/types.ts +2 -1
  209. package/src/forge/policy.ts +1 -1
  210. package/src/forge/react/index.ts +160 -2
  211. package/src/forge/refactor/index.ts +1 -0
  212. package/src/forge/repair/rules/index.ts +2 -2
  213. package/src/forge/review/index.ts +158 -12
  214. package/src/forge/review/types.ts +15 -0
  215. package/src/forge/runtime/auth/config.ts +17 -0
  216. package/src/forge/runtime/auth/evaluate.ts +15 -2
  217. package/src/forge/runtime/auth/resolve.ts +61 -6
  218. package/src/forge/runtime/auth/types.ts +1 -0
  219. package/src/forge/runtime/db/factory.ts +1 -3
  220. package/src/forge/runtime/db/generated-client.ts +13 -2
  221. package/src/forge/runtime/db/memory-adapter.ts +139 -32
  222. package/src/forge/runtime/db/pglite-adapter.ts +263 -2
  223. package/src/forge/runtime/db/postgres-adapter.ts +6 -3
  224. package/src/forge/runtime/executor.ts +129 -16
  225. package/src/forge/runtime/external/bridge.ts +649 -0
  226. package/src/forge/runtime/runner/run-entry.ts +16 -7
  227. package/src/forge/runtime/telemetry/buffer.ts +4 -1
  228. package/src/forge/runtime/telemetry/scrubber.ts +35 -5
  229. package/src/forge/runtime/webhooks/security.ts +12 -7
  230. package/src/forge/server.ts +17 -3
  231. package/src/forge/ui/index.ts +209 -0
  232. package/src/forge/ui/types.ts +1 -0
  233. package/src/forge/version.ts +1 -1
  234. package/src/forge/vue/index.ts +422 -0
  235. package/src/forge/workspace/baseline.ts +112 -0
  236. package/src/forge/workspace/change-summary.ts +250 -0
  237. package/src/forge/workspace/forge-cli.ts +42 -0
  238. package/src/forge/workspace/git-summary.ts +391 -0
  239. package/templates/agent-workroom/AGENTS.md +29 -0
  240. package/templates/agent-workroom/README.md +34 -0
  241. package/templates/agent-workroom/forge.config.ts +3 -0
  242. package/templates/agent-workroom/package.json +33 -0
  243. package/templates/agent-workroom/src/actions/indexAgentSignal.ts +10 -0
  244. package/templates/agent-workroom/src/commands/openWorkroom.ts +61 -0
  245. package/templates/agent-workroom/src/commands/recordAgentSignal.ts +119 -0
  246. package/templates/agent-workroom/src/commands/recordCheckRun.ts +52 -0
  247. package/templates/agent-workroom/src/forge/schema.ts +54 -0
  248. package/templates/agent-workroom/src/policies.ts +6 -0
  249. package/templates/agent-workroom/src/queries/listWorkrooms.ts +11 -0
  250. package/templates/agent-workroom/src/queries/liveWorkroom.ts +63 -0
  251. package/templates/agent-workroom/tsconfig.json +16 -0
  252. package/templates/agent-workroom/web/index.html +12 -0
  253. package/templates/agent-workroom/web/package.json +21 -0
  254. package/templates/agent-workroom/web/src/App.tsx +345 -0
  255. package/templates/agent-workroom/web/src/lib/forge.ts +13 -0
  256. package/templates/agent-workroom/web/src/main.tsx +13 -0
  257. package/templates/agent-workroom/web/src/styles.css +545 -0
  258. package/templates/agent-workroom/web/tsconfig.json +27 -0
  259. package/templates/b2b-support-web/package.json +1 -0
  260. package/templates/b2b-support-web/web/package.json +1 -1
  261. package/templates/minimal-web/package.json +1 -1
  262. package/templates/minimal-web/web/package.json +2 -2
  263. package/templates/nuxt-web/.vscode/settings.json +14 -0
  264. package/templates/nuxt-web/README.md +30 -0
  265. package/templates/nuxt-web/forge.config.ts +3 -0
  266. package/templates/nuxt-web/package.json +33 -0
  267. package/templates/nuxt-web/src/actions/logNoteCreated.ts +11 -0
  268. package/templates/nuxt-web/src/commands/createNote.ts +26 -0
  269. package/templates/nuxt-web/src/forge/schema.ts +12 -0
  270. package/templates/nuxt-web/src/policies.ts +6 -0
  271. package/templates/nuxt-web/src/queries/listNotes.ts +8 -0
  272. package/templates/nuxt-web/src/queries/liveNotes.ts +8 -0
  273. package/templates/nuxt-web/tsconfig.json +17 -0
  274. package/templates/nuxt-web/web/app.vue +67 -0
  275. package/templates/nuxt-web/web/components/LiveNotes.vue +89 -0
  276. package/templates/nuxt-web/web/components/NoteComposer.vue +100 -0
  277. package/templates/nuxt-web/web/composables/forge.ts +13 -0
  278. package/templates/nuxt-web/web/composables/useNotes.ts +24 -0
  279. package/templates/nuxt-web/web/nuxt.config.ts +11 -0
  280. package/templates/nuxt-web/web/package.json +18 -0
  281. package/templates/nuxt-web/web/plugins/forge.client.ts +10 -0
  282. package/templates/nuxt-web/web/plugins/forge.server.ts +10 -0
  283. package/templates/nuxt-web/web/server/api/forge-health.get.ts +7 -0
  284. package/templates/nuxt-web/web/tsconfig.json +6 -0
  285. package/src/forge/_generated/actionSubscriptions.json +0 -2
  286. package/src/forge/_generated/actionSubscriptions.ts +0 -10
  287. package/src/forge/_generated/agentAdapterManifest.json +0 -2
  288. package/src/forge/_generated/agentAdapterManifest.ts +0 -73
  289. package/src/forge/_generated/agentContract.json +0 -2
  290. package/src/forge/_generated/agentContract.ts +0 -7829
  291. package/src/forge/_generated/agentQuickstart.md +0 -34
  292. package/src/forge/_generated/agentTools.json +0 -2
  293. package/src/forge/_generated/agentTools.md +0 -16
  294. package/src/forge/_generated/agentTools.ts +0 -12
  295. package/src/forge/_generated/aiContext.ts +0 -125
  296. package/src/forge/_generated/aiModels.json +0 -2
  297. package/src/forge/_generated/aiModels.ts +0 -51
  298. package/src/forge/_generated/aiProviders.json +0 -2
  299. package/src/forge/_generated/aiProviders.ts +0 -23
  300. package/src/forge/_generated/aiRegistry.json +0 -2
  301. package/src/forge/_generated/aiRegistry.ts +0 -31
  302. package/src/forge/_generated/api.json +0 -2
  303. package/src/forge/_generated/api.ts +0 -8
  304. package/src/forge/_generated/appGraph.json +0 -2
  305. package/src/forge/_generated/appGraph.ts +0 -14919
  306. package/src/forge/_generated/appMap.md +0 -55
  307. package/src/forge/_generated/artifactManifest.json +0 -2
  308. package/src/forge/_generated/artifactManifest.ts +0 -7
  309. package/src/forge/_generated/authClaims.json +0 -2
  310. package/src/forge/_generated/authClaims.ts +0 -13
  311. package/src/forge/_generated/authConfig.json +0 -2
  312. package/src/forge/_generated/authConfig.ts +0 -17
  313. package/src/forge/_generated/authContext.ts +0 -23
  314. package/src/forge/_generated/authRegistry.json +0 -2
  315. package/src/forge/_generated/authRegistry.ts +0 -25
  316. package/src/forge/_generated/buildInfo.json +0 -2
  317. package/src/forge/_generated/buildInfo.ts +0 -9
  318. package/src/forge/_generated/capabilityMap.json +0 -2
  319. package/src/forge/_generated/capabilityMap.md +0 -15
  320. package/src/forge/_generated/capabilityMap.ts +0 -17
  321. package/src/forge/_generated/client.ts +0 -282
  322. package/src/forge/_generated/clientApi.ts +0 -9
  323. package/src/forge/_generated/clientManifest.json +0 -2
  324. package/src/forge/_generated/clientManifest.ts +0 -39
  325. package/src/forge/_generated/clientTypes.ts +0 -78
  326. package/src/forge/_generated/configRegistry.json +0 -2
  327. package/src/forge/_generated/configRegistry.ts +0 -4
  328. package/src/forge/_generated/dataGraph.json +0 -2
  329. package/src/forge/_generated/dataGraph.ts +0 -8
  330. package/src/forge/_generated/db.json +0 -2
  331. package/src/forge/_generated/db.ts +0 -2
  332. package/src/forge/_generated/dbSecurityManifest.json +0 -2
  333. package/src/forge/_generated/dbSecurityManifest.ts +0 -15
  334. package/src/forge/_generated/dbSessionContext.json +0 -2
  335. package/src/forge/_generated/dbSessionContext.ts +0 -39
  336. package/src/forge/_generated/deployManifest.json +0 -2
  337. package/src/forge/_generated/deployManifest.ts +0 -14
  338. package/src/forge/_generated/devManifest.json +0 -2
  339. package/src/forge/_generated/devManifest.ts +0 -62
  340. package/src/forge/_generated/envSchema.json +0 -2
  341. package/src/forge/_generated/envSchema.ts +0 -59
  342. package/src/forge/_generated/frontendGraph.json +0 -2
  343. package/src/forge/_generated/frontendGraph.ts +0 -27
  344. package/src/forge/_generated/importGuards.json +0 -2
  345. package/src/forge/_generated/importGuards.ts +0 -686
  346. package/src/forge/_generated/index.ts +0 -68
  347. package/src/forge/_generated/liveProductionManifest.json +0 -2
  348. package/src/forge/_generated/liveProductionManifest.ts +0 -23
  349. package/src/forge/_generated/liveProtocol.json +0 -2
  350. package/src/forge/_generated/liveProtocol.ts +0 -21
  351. package/src/forge/_generated/liveQueryRegistry.json +0 -2
  352. package/src/forge/_generated/liveQueryRegistry.ts +0 -9
  353. package/src/forge/_generated/liveTransportConfig.json +0 -2
  354. package/src/forge/_generated/liveTransportConfig.ts +0 -19
  355. package/src/forge/_generated/makeRegistry.json +0 -2
  356. package/src/forge/_generated/makeRegistry.ts +0 -177
  357. package/src/forge/_generated/makeTemplates.json +0 -2
  358. package/src/forge/_generated/makeTemplates.ts +0 -66
  359. package/src/forge/_generated/mockMap.json +0 -2
  360. package/src/forge/_generated/mockMap.ts +0 -7
  361. package/src/forge/_generated/operationPlaybooks.md +0 -167
  362. package/src/forge/_generated/packageGraph.json +0 -2
  363. package/src/forge/_generated/packageGraph.ts +0 -249334
  364. package/src/forge/_generated/packageUpgradeRegistry.json +0 -2
  365. package/src/forge/_generated/packageUpgradeRegistry.ts +0 -15
  366. package/src/forge/_generated/permissionMatrix.json +0 -2
  367. package/src/forge/_generated/permissionMatrix.ts +0 -7
  368. package/src/forge/_generated/policyRegistry.json +0 -2
  369. package/src/forge/_generated/policyRegistry.ts +0 -11
  370. package/src/forge/_generated/queryRegistry.json +0 -2
  371. package/src/forge/_generated/queryRegistry.ts +0 -9
  372. package/src/forge/_generated/react.d.ts +0 -22
  373. package/src/forge/_generated/react.ts +0 -29
  374. package/src/forge/_generated/reactManifest.json +0 -2
  375. package/src/forge/_generated/reactManifest.ts +0 -19
  376. package/src/forge/_generated/rlsPolicies.json +0 -2
  377. package/src/forge/_generated/rlsPolicies.sql +0 -34
  378. package/src/forge/_generated/rlsPolicies.ts +0 -6
  379. package/src/forge/_generated/runtimeGraph.json +0 -2
  380. package/src/forge/_generated/runtimeGraph.ts +0 -8
  381. package/src/forge/_generated/runtimeMatrix.json +0 -2
  382. package/src/forge/_generated/runtimeMatrix.ts +0 -334130
  383. package/src/forge/_generated/runtimeRegistry.ts +0 -2
  384. package/src/forge/_generated/runtimeRules.md +0 -91
  385. package/src/forge/_generated/secretRegistry.json +0 -2
  386. package/src/forge/_generated/secretRegistry.ts +0 -50
  387. package/src/forge/_generated/secretsContext.ts +0 -11
  388. package/src/forge/_generated/serverApi.ts +0 -10
  389. package/src/forge/_generated/sourceMapManifest.json +0 -2
  390. package/src/forge/_generated/sourceMapManifest.ts +0 -7
  391. package/src/forge/_generated/sqlPlan.json +0 -2
  392. package/src/forge/_generated/sqlPlan.ts +0 -88
  393. package/src/forge/_generated/subscriptionManifest.json +0 -2
  394. package/src/forge/_generated/subscriptionManifest.ts +0 -7
  395. package/src/forge/_generated/symbolicationManifest.json +0 -2
  396. package/src/forge/_generated/symbolicationManifest.ts +0 -17
  397. package/src/forge/_generated/telemetryRegistry.json +0 -2
  398. package/src/forge/_generated/telemetryRegistry.ts +0 -9
  399. package/src/forge/_generated/telemetrySinks.json +0 -2
  400. package/src/forge/_generated/telemetrySinks.ts +0 -11
  401. package/src/forge/_generated/tenantScope.json +0 -2
  402. package/src/forge/_generated/tenantScope.ts +0 -8
  403. package/src/forge/_generated/testGraph.json +0 -2
  404. package/src/forge/_generated/testGraph.ts +0 -3430
  405. package/src/forge/_generated/testPlanRegistry.json +0 -2
  406. package/src/forge/_generated/testPlanRegistry.ts +0 -33
  407. package/src/forge/_generated/uiRoutes.json +0 -2
  408. package/src/forge/_generated/uiRoutes.ts +0 -16
  409. package/src/forge/_generated/uiScenarios.json +0 -2
  410. package/src/forge/_generated/uiScenarios.ts +0 -30
  411. package/src/forge/_generated/uiTestManifest.json +0 -2
  412. package/src/forge/_generated/uiTestManifest.ts +0 -27
  413. package/src/forge/_generated/workflowRegistry.json +0 -2
  414. package/src/forge/_generated/workflowRegistry.ts +0 -9
  415. package/src/forge/_generated/workflowSubscriptions.json +0 -2
  416. package/src/forge/_generated/workflowSubscriptions.ts +0 -10
@@ -0,0 +1,32 @@
1
+ # Forge Java Spring Boot Starter
2
+
3
+ `adapters/java-spring-boot-starter` is the first Spring integration layer for
4
+ Forge external runtimes. It discovers a bean annotated with
5
+ `@ForgeExternalService`, registers methods annotated with `@ForgeCommand` and
6
+ `@ForgeQuery`, and exposes a `ForgeRegistry` bean.
7
+
8
+ ```java
9
+ @Service
10
+ @ForgeExternalService(name = "billing", baseUrl = "http://127.0.0.1:8080")
11
+ public class BillingService {
12
+ @ForgeCommand(
13
+ name = "createInvoice",
14
+ policy = "billing.manage",
15
+ tenantScoped = true,
16
+ needsApproval = true,
17
+ effects = {"invoice.created"})
18
+ public Invoice createInvoice(ForgeContext context, CreateInvoiceInput input) {
19
+ return new Invoice("inv_java_1", input.title(), context.auth().tenantId());
20
+ }
21
+
22
+ @ForgeQuery(name = "listInvoices", policy = "billing.manage", tenantScoped = true)
23
+ public List<Invoice> listInvoices(ForgeContext context) {
24
+ return List.of(new Invoice("inv_java_1", "Spring invoice", context.auth().tenantId()));
25
+ }
26
+ }
27
+ ```
28
+
29
+ The starter intentionally keeps HTTP endpoint wiring thin in this first version.
30
+ Applications can inject the generated `ForgeRegistry` and serve it with the core
31
+ adapter, or add their own Spring MVC bridge. Full MVC/Actuator auto-endpoints
32
+ are a follow-up layer.
@@ -0,0 +1,36 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project xmlns="http://maven.apache.org/POM/4.0.0"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+ <modelVersion>4.0.0</modelVersion>
6
+
7
+ <groupId>dev.forgeos</groupId>
8
+ <artifactId>forge-java-spring-boot-starter</artifactId>
9
+ <version>0.1.0-alpha.11</version>
10
+ <name>Forge Java Spring Boot Starter</name>
11
+ <description>Spring Boot integration for Forge external runtimes.</description>
12
+
13
+ <properties>
14
+ <maven.compiler.release>17</maven.compiler.release>
15
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
16
+ <spring.boot.version>3.3.5</spring.boot.version>
17
+ </properties>
18
+
19
+ <dependencies>
20
+ <dependency>
21
+ <groupId>dev.forgeos</groupId>
22
+ <artifactId>forge-java-adapter</artifactId>
23
+ <version>0.1.0-alpha.11</version>
24
+ </dependency>
25
+ <dependency>
26
+ <groupId>org.springframework.boot</groupId>
27
+ <artifactId>spring-boot-autoconfigure</artifactId>
28
+ <version>${spring.boot.version}</version>
29
+ </dependency>
30
+ <dependency>
31
+ <groupId>org.springframework</groupId>
32
+ <artifactId>spring-context</artifactId>
33
+ <version>6.1.14</version>
34
+ </dependency>
35
+ </dependencies>
36
+ </project>
@@ -0,0 +1,22 @@
1
+ package dev.forgeos.adapter.spring;
2
+
3
+ import dev.forgeos.adapter.Risk;
4
+ import dev.forgeos.adapter.TransactionMode;
5
+ import java.lang.annotation.ElementType;
6
+ import java.lang.annotation.Retention;
7
+ import java.lang.annotation.RetentionPolicy;
8
+ import java.lang.annotation.Target;
9
+
10
+ @Target(ElementType.METHOD)
11
+ @Retention(RetentionPolicy.RUNTIME)
12
+ public @interface ForgeCommand {
13
+ String name();
14
+ String description() default "";
15
+ String path() default "";
16
+ String policy() default "";
17
+ boolean tenantScoped() default false;
18
+ TransactionMode transaction() default TransactionMode.EXTERNAL_MANAGED;
19
+ Risk risk() default Risk.WRITE;
20
+ boolean needsApproval() default false;
21
+ String[] effects() default {};
22
+ }
@@ -0,0 +1,15 @@
1
+ package dev.forgeos.adapter.spring;
2
+
3
+ import java.lang.annotation.ElementType;
4
+ import java.lang.annotation.Retention;
5
+ import java.lang.annotation.RetentionPolicy;
6
+ import java.lang.annotation.Target;
7
+
8
+ @Target(ElementType.TYPE)
9
+ @Retention(RetentionPolicy.RUNTIME)
10
+ public @interface ForgeExternalService {
11
+ String name();
12
+ String baseUrl() default "";
13
+ String framework() default "spring-boot";
14
+ String health() default "/health";
15
+ }
@@ -0,0 +1,16 @@
1
+ package dev.forgeos.adapter.spring;
2
+
3
+ import java.lang.annotation.ElementType;
4
+ import java.lang.annotation.Retention;
5
+ import java.lang.annotation.RetentionPolicy;
6
+ import java.lang.annotation.Target;
7
+
8
+ @Target(ElementType.METHOD)
9
+ @Retention(RetentionPolicy.RUNTIME)
10
+ public @interface ForgeQuery {
11
+ String name();
12
+ String description() default "";
13
+ String path() default "";
14
+ String policy() default "";
15
+ boolean tenantScoped() default false;
16
+ }
@@ -0,0 +1,18 @@
1
+ package dev.forgeos.adapter.spring;
2
+
3
+ import org.springframework.beans.factory.BeanFactory;
4
+ import org.springframework.beans.factory.ListableBeanFactory;
5
+ import org.springframework.context.annotation.Condition;
6
+ import org.springframework.context.annotation.ConditionContext;
7
+ import org.springframework.core.type.AnnotatedTypeMetadata;
8
+
9
+ public final class ForgeServiceBeanCondition implements Condition {
10
+ @Override
11
+ public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
12
+ BeanFactory beanFactory = context.getBeanFactory();
13
+ if (!(beanFactory instanceof ListableBeanFactory listable)) {
14
+ return false;
15
+ }
16
+ return !listable.getBeansWithAnnotation(ForgeExternalService.class).isEmpty();
17
+ }
18
+ }
@@ -0,0 +1,16 @@
1
+ package dev.forgeos.adapter.spring;
2
+
3
+ import dev.forgeos.adapter.ForgeRegistry;
4
+ import org.springframework.boot.autoconfigure.AutoConfiguration;
5
+ import org.springframework.context.ApplicationContext;
6
+ import org.springframework.context.annotation.Bean;
7
+ import org.springframework.context.annotation.Conditional;
8
+
9
+ @AutoConfiguration
10
+ public class ForgeSpringAutoConfiguration {
11
+ @Bean
12
+ @Conditional(ForgeServiceBeanCondition.class)
13
+ public ForgeRegistry forgeRegistry(ApplicationContext context) {
14
+ return ForgeSpringRuntime.buildRegistry(context);
15
+ }
16
+ }
@@ -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
+ }
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,103 @@
1
+ # CAIR Protocol
2
+
3
+ CAIR is ForgeOS' compact agent interface for reading code structure, querying symbols, and planning safe edits without loading the whole repository into an agent context window.
4
+
5
+ CAIR is intentionally CLI-first. It does not add a second mutating tool surface. Agents should use CAIR to inspect structure and create reviewable plans, then apply those plans through the ForgeOS CLI with hash checks and rollback journals.
6
+
7
+ ## Read Workflow
8
+
9
+ Start with a compact snapshot:
10
+
11
+ ```bash
12
+ forge cair snapshot
13
+ forge cair query "Q STATUS"
14
+ forge cair query "Q ST"
15
+ ```
16
+
17
+ Use symbol, definition, reference, impact, and dependency API queries before opening large files:
18
+
19
+ ```bash
20
+ forge cair query "Q S name=createTicket"
21
+ forge cair query "Q D S#1"
22
+ forge cair query "Q R S#1"
23
+ forge cair query "Q I S#1"
24
+ forge cair query "Q DEP.API package=zod symbol=object"
25
+ ```
26
+
27
+ The goal is to make agent navigation evidence-backed: CAIR gives stable ids for modules, symbols, packages, APIs, and tests so an agent can select a small file set instead of scanning the whole project.
28
+
29
+ ## Action Safety
30
+
31
+ Mutating CAIR actions should be planned first:
32
+
33
+ ```bash
34
+ forge cair action --plan "A RN t=S#1 nn=openTicket"
35
+ ```
36
+
37
+ The plan lives under `.forge/cair/plans/` and records the target files and expected hashes. Applying a plan checks those hashes before editing:
38
+
39
+ ```bash
40
+ forge cair action "A APPLY plan=<P#|.forge/cair/plans/...json>"
41
+ ```
42
+
43
+ Applied plans write rollback journals under `.forge/cair/journal/`:
44
+
45
+ ```bash
46
+ forge cair action "A ROLLBACK journal=.forge/cair/journal/<journal>.json"
47
+ ```
48
+
49
+ Use `--dry-run` when exploring an action shape without creating a plan:
50
+
51
+ ```bash
52
+ forge cair action --dry-run "A CREATE.SYMBOL path=src/example.ts kind=function name=example export=true createFile=true"
53
+ ```
54
+
55
+ Generated files stay protected by default. Use `--include-generated` only when the edit is intentionally about generated artifacts.
56
+
57
+ ## DeltaDB Evidence
58
+
59
+ Successful CAIR CLI runs are recorded in DeltaDB as sanitized operational events:
60
+
61
+ | CAIR command | Delta event |
62
+ |--------------|-------------|
63
+ | `forge cair snapshot` | `cair.snapshot.created` |
64
+ | `forge cair query ...` | `cair.query.run` |
65
+ | `forge cair action --plan ...` | `cair.plan.created` |
66
+ | `forge cair action "A APPLY ..."` | `cair.plan.applied` |
67
+ | `forge cair action --dry-run ...` | `cair.action.previewed` |
68
+
69
+ The recorder stores compact verbs such as `Q ST` or `A APPLY`; it does not need to store full action bodies as first-class timeline data. Use:
70
+
71
+ ```bash
72
+ forge timeline cair:protocol --json
73
+ forge timeline --kind cair.plan.applied --json
74
+ ```
75
+
76
+ This makes CAIR navigation and guarded edits visible beside file changes, proofs, and agent activity.
77
+
78
+ ## Compact Aliases
79
+
80
+ | Long form | Compact |
81
+ |-----------|---------|
82
+ | `Q STATUS` | `Q ST` |
83
+ | `Q SYMBOL` | `Q S` |
84
+ | `Q DEF` | `Q D` |
85
+ | `Q REFS` | `Q R` |
86
+ | `Q IMPACT` | `Q I` |
87
+ | `A RENAME.SYMBOL target=S#1 newName=x` | `A RN t=S#1 nn=x` |
88
+
89
+ ## Agent Posture
90
+
91
+ Use this loop for code work:
92
+
93
+ ```bash
94
+ forge cair snapshot
95
+ forge cair query "Q ST"
96
+ forge cair query "Q S name=<symbol>"
97
+ forge cair query "Q I S#1"
98
+ forge cair action --plan "A RN t=S#1 nn=<newName>"
99
+ forge cair action "A APPLY plan=<P#|path>"
100
+ forge check --json
101
+ ```
102
+
103
+ Do not use CAIR as a bypass around ForgeOS rules. Commands remain transactional writes, queries and liveQueries remain read-only, side effects still belong in actions and workflows, and generated artifacts remain derived.