forgeos 0.1.0-alpha.2 → 0.1.0-alpha.21

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 +211 -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 +242 -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 +1245 -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 +273 -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 +801 -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
@@ -9,7 +9,7 @@ import { mapClaimsToAuthContext } from "../runtime/auth/claims.ts";
9
9
  import { ForgeAuthError } from "../runtime/auth/errors.ts";
10
10
  import { verifyJwtToken } from "../runtime/auth/verifier.ts";
11
11
 
12
- export type AuthSubcommand = "check" | "config" | "decode" | "test-token" | "jwks";
12
+ export type AuthSubcommand = "check" | "config" | "decode" | "test-token" | "jwks" | "prove";
13
13
 
14
14
  export interface AuthCommandOptions {
15
15
  subcommand: AuthSubcommand;
@@ -163,6 +163,41 @@ export async function runAuthCommand(
163
163
  if (options.subcommand === "check") {
164
164
  return validateConfig(options.workspaceRoot);
165
165
  }
166
+ if (options.subcommand === "prove") {
167
+ const checked = validateConfig(options.workspaceRoot);
168
+ const config = loadAuthConfigFromEnv(options.workspaceRoot);
169
+ const productionMode = config.mode === "jwt" || config.mode === "oidc";
170
+ return {
171
+ ok: checked.ok,
172
+ mode: config.mode,
173
+ data: {
174
+ schemaVersion: "0.1.0",
175
+ kind: "auth-proof",
176
+ ok: checked.ok,
177
+ mode: config.mode,
178
+ productionReady: productionMode && checked.ok,
179
+ invariants: [
180
+ {
181
+ id: "INV-001",
182
+ name: "dev headers are not production auth",
183
+ status: productionMode ? "passed" : "local-only",
184
+ evidence: productionMode
185
+ ? "jwt/oidc mode configured through environment"
186
+ : "dev-headers mode is allowed only for local dev, tests, and agent workflows",
187
+ },
188
+ {
189
+ id: "INV-001-CONFIG",
190
+ name: "jwt/oidc required settings are present when production auth is enabled",
191
+ status: checked.ok ? "passed" : "failed",
192
+ evidence: checked.data,
193
+ },
194
+ ],
195
+ checkedAt: "deterministic",
196
+ },
197
+ error: checked.error,
198
+ exitCode: checked.exitCode,
199
+ };
200
+ }
166
201
  if (options.subcommand === "config") {
167
202
  return publicConfig(options.workspaceRoot);
168
203
  }
@@ -46,6 +46,22 @@ async function runOptionalScript(
46
46
  return { skipped: false, exitCode };
47
47
  }
48
48
 
49
+ function readPackageScripts(workspaceRoot: string): Record<string, string> {
50
+ const packageJsonPath = join(workspaceRoot, "package.json");
51
+ if (!nodeFileSystem.exists(packageJsonPath)) {
52
+ return {};
53
+ }
54
+ const pkg = JSON.parse(nodeFileSystem.readText(packageJsonPath) ?? "{}") as {
55
+ scripts?: Record<string, string>;
56
+ };
57
+ return pkg.scripts ?? {};
58
+ }
59
+
60
+ function shouldTypecheckBuild(workspaceRoot: string): boolean {
61
+ const scripts = readPackageScripts(workspaceRoot);
62
+ return Boolean(scripts.typecheck || nodeFileSystem.exists(join(workspaceRoot, "tsconfig.json")));
63
+ }
64
+
49
65
  export async function runBuildCommand(options: BuildCommandOptions): Promise<BuildCommandResult> {
50
66
  const steps: BuildCommandResult["steps"] = [];
51
67
  const generate = await runGenerateCommand({
@@ -63,10 +79,10 @@ export async function runBuildCommand(options: BuildCommandOptions): Promise<Bui
63
79
  const verify = await runVerifyCommand({
64
80
  workspaceRoot: options.workspaceRoot,
65
81
  json: false,
66
- skipTests: false,
67
- skipTypecheck: false,
68
- skipEslint: false,
69
- strict: true,
82
+ skipTests: true,
83
+ skipTypecheck: !shouldTypecheckBuild(options.workspaceRoot),
84
+ skipEslint: true,
85
+ strict: false,
70
86
  });
71
87
  steps.push({ name: "verify", ok: verify.exitCode === 0, exitCode: verify.exitCode });
72
88
  if (verify.exitCode !== 0) {
@@ -0,0 +1,300 @@
1
+ import type { CategorizedFileSummary, DiffPlan } from "../workspace/change-summary.ts";
2
+ import { buildDiffPlanFromChangeSummary, summarizeChangeTypes } from "../workspace/change-summary.ts";
3
+ import { buildWorkspaceGitSummary, type WorkspaceGitSummary } from "../workspace/git-summary.ts";
4
+
5
+ export interface ChangedCommandResult {
6
+ ok: boolean;
7
+ data: Record<string, unknown>;
8
+ exitCode: 0 | 1;
9
+ }
10
+
11
+ interface HumanChangeSummary {
12
+ total: number;
13
+ source: CategorizedFileSummary["byType"]["source"];
14
+ tests: CategorizedFileSummary["byType"]["tests"];
15
+ docs: CategorizedFileSummary["byType"]["docs"];
16
+ config: CategorizedFileSummary["byType"]["config"];
17
+ operational: CategorizedFileSummary["byType"]["operational"];
18
+ assets: CategorizedFileSummary["byType"]["assets"];
19
+ other: CategorizedFileSummary["byType"]["other"];
20
+ }
21
+
22
+ interface DerivedChangeSummary {
23
+ total: number;
24
+ generated: CategorizedFileSummary["byType"]["generated"];
25
+ }
26
+
27
+ interface ReviewFocus {
28
+ first: "humanChanges";
29
+ then: "derivedChanges";
30
+ generatedIsDerived: boolean;
31
+ suggestedOrder: Array<keyof HumanChangeSummary | "generated">;
32
+ summary: string;
33
+ }
34
+
35
+ interface GeneratedChangeExplanation {
36
+ kind: "none" | "mixed-with-authored" | "versioned-generated-only";
37
+ generatorCheckMeaning: string;
38
+ gitMeaning: string;
39
+ summary: string;
40
+ }
41
+
42
+ function emptyCategory(summary: CategorizedFileSummary, category: keyof CategorizedFileSummary["byType"]): boolean {
43
+ return summary.byType[category].count === 0;
44
+ }
45
+
46
+ function selectHumanChangeSummary(summary: CategorizedFileSummary): HumanChangeSummary {
47
+ const source = summary.byType.source;
48
+ const tests = summary.byType.tests;
49
+ const docs = summary.byType.docs;
50
+ const config = summary.byType.config;
51
+ const operational = summary.byType.operational;
52
+ const assets = summary.byType.assets;
53
+ const other = summary.byType.other;
54
+ const total =
55
+ source.count +
56
+ tests.count +
57
+ docs.count +
58
+ config.count +
59
+ operational.count +
60
+ assets.count +
61
+ other.count;
62
+ return {
63
+ total,
64
+ source,
65
+ tests,
66
+ docs,
67
+ config,
68
+ operational,
69
+ assets,
70
+ other,
71
+ };
72
+ }
73
+
74
+ function selectDerivedChangeSummary(summary: CategorizedFileSummary): DerivedChangeSummary {
75
+ return {
76
+ total: summary.byType.generated.count,
77
+ generated: summary.byType.generated,
78
+ };
79
+ }
80
+
81
+ function buildRisks(git: WorkspaceGitSummary): string[] {
82
+ const risks: string[] = [];
83
+ const changed = git.changeSummary.changed;
84
+ if (!git.available) {
85
+ risks.push("git status is unavailable; changed-file analysis may be incomplete");
86
+ return risks;
87
+ }
88
+ if (git.untracked.count > 0) {
89
+ risks.push(`${git.untracked.count} untracked file(s) are not in git history`);
90
+ }
91
+ if (changed.byType.other.count > 0) {
92
+ risks.push(`${changed.byType.other.count} changed file(s) were not recognized by ForgeOS categories`);
93
+ }
94
+ const humanChanges = selectHumanChangeSummary(changed);
95
+ if (!emptyCategory(changed, "generated") && humanChanges.total === 0) {
96
+ risks.push("only generated artifacts changed; verify the source edit, generator input, or intentional regeneration that produced them");
97
+ }
98
+ if (changed.total.count > 50) {
99
+ risks.push(`${changed.total.count} changed file(s) detected; use the grouped summaries before reviewing raw diffs`);
100
+ }
101
+ return risks;
102
+ }
103
+
104
+ function buildRecommendedCommands(git: WorkspaceGitSummary): string[] {
105
+ if (!git.available) {
106
+ return ["git status --short", "forge status --json"];
107
+ }
108
+ if (git.changeSummary.changed.total.count === 0) {
109
+ return ["forge status --json", "forge dev --once --json"];
110
+ }
111
+ const changed = git.changeSummary.changed;
112
+ const humanFiles = changed.total.count - changed.byType.generated.count;
113
+ if (humanFiles === 0 && changed.byType.generated.count > 0) {
114
+ return [
115
+ "forge changed --authored --json",
116
+ "forge status --json",
117
+ "forge generate --check --json",
118
+ ];
119
+ }
120
+ return [
121
+ "forge handoff --json",
122
+ "forge test plan --changed --json",
123
+ "forge verify --changed",
124
+ "forge review run --changed --json",
125
+ ];
126
+ }
127
+
128
+ function buildReviewFocus(humanChanges: HumanChangeSummary, derivedChanges: DerivedChangeSummary): ReviewFocus {
129
+ const authoredOrder = ([
130
+ "source",
131
+ "tests",
132
+ "docs",
133
+ "config",
134
+ "operational",
135
+ "assets",
136
+ "other",
137
+ ] as Array<keyof HumanChangeSummary>)
138
+ .filter((category) => category !== "total" && humanChanges[category].count > 0);
139
+ const suggestedOrder: ReviewFocus["suggestedOrder"] = [...authoredOrder];
140
+ if (derivedChanges.total > 0) {
141
+ suggestedOrder.push("generated");
142
+ }
143
+ return {
144
+ first: "humanChanges",
145
+ then: "derivedChanges",
146
+ generatedIsDerived: true,
147
+ suggestedOrder,
148
+ summary: derivedChanges.total > 0
149
+ ? "Review authored source/tests/docs first; inspect generated artifacts after the source cause is understood."
150
+ : "Review authored changes directly; no generated artifacts changed.",
151
+ };
152
+ }
153
+
154
+ function buildGeneratedChangeExplanation(
155
+ humanChanges: HumanChangeSummary,
156
+ derivedChanges: DerivedChangeSummary,
157
+ ): GeneratedChangeExplanation {
158
+ if (derivedChanges.total === 0) {
159
+ return {
160
+ kind: "none",
161
+ generatorCheckMeaning: "forge generate --check verifies generated files match current workspace inputs.",
162
+ gitMeaning: "git status has no generated artifact changes.",
163
+ summary: "No generated artifacts changed.",
164
+ };
165
+ }
166
+ if (humanChanges.total === 0) {
167
+ return {
168
+ kind: "versioned-generated-only",
169
+ generatorCheckMeaning: "forge generate --check verifies generated files match current workspace inputs; it does not mean generated artifacts match HEAD.",
170
+ gitMeaning: "git status is showing versioned generated artifacts that differ from HEAD.",
171
+ summary: "Generated artifacts are consistent with current inputs but differ from git HEAD; review or discard them intentionally.",
172
+ };
173
+ }
174
+ return {
175
+ kind: "mixed-with-authored",
176
+ generatorCheckMeaning: "forge generate --check verifies generated files match current workspace inputs.",
177
+ gitMeaning: "git status includes generated artifacts alongside authored changes.",
178
+ summary: "Review authored changes first; generated artifacts should be explained by those source inputs.",
179
+ };
180
+ }
181
+
182
+ export function runChangedCommand(workspaceRoot: string, options: { authoredOnly?: boolean } = {}): ChangedCommandResult {
183
+ const git = buildWorkspaceGitSummary(workspaceRoot);
184
+ const changed = git.changeSummary.changed;
185
+ const humanChanges = selectHumanChangeSummary(changed);
186
+ const derivedChanges = selectDerivedChangeSummary(changed);
187
+ const authoredChanged: CategorizedFileSummary = {
188
+ ...changed,
189
+ total: { ...changed.total, count: humanChanges.total },
190
+ byType: {
191
+ ...changed.byType,
192
+ generated: { count: 0, sample: [], hidden: 0 },
193
+ },
194
+ primaryTypes: changed.primaryTypes.filter((type) => type !== "generated"),
195
+ };
196
+ const viewChanged = options.authoredOnly ? authoredChanged : changed;
197
+ const viewDerivedChanges: DerivedChangeSummary = options.authoredOnly
198
+ ? { total: 0, generated: { count: 0, sample: [], hidden: 0 } }
199
+ : derivedChanges;
200
+ const risks = buildRisks(git);
201
+ const recommendedCommands = buildRecommendedCommands(git);
202
+ const reviewFocus = buildReviewFocus(humanChanges, viewDerivedChanges);
203
+ const generatedExplanation = buildGeneratedChangeExplanation(humanChanges, viewDerivedChanges);
204
+ const diffPlan: DiffPlan = buildDiffPlanFromChangeSummary(viewChanged);
205
+
206
+ return {
207
+ ok: git.available,
208
+ data: {
209
+ schemaVersion: "0.1.0",
210
+ ok: git.available,
211
+ summary: {
212
+ branch: git.branch,
213
+ commit: git.commit,
214
+ view: options.authoredOnly ? "authored" : "all",
215
+ changedFiles: viewChanged.total.count,
216
+ humanFiles: humanChanges.total,
217
+ generatedFiles: viewDerivedChanges.total,
218
+ stagedFiles: git.staged.count,
219
+ unstagedFiles: git.unstaged.count,
220
+ untrackedFiles: git.untracked.count,
221
+ primaryTypes: viewChanged.primaryTypes,
222
+ changeTypes: summarizeChangeTypes(viewChanged),
223
+ },
224
+ git: {
225
+ available: git.available,
226
+ ...(git.error ? { error: git.error } : {}),
227
+ branch: git.branch,
228
+ commit: git.commit,
229
+ changed: viewChanged,
230
+ staged: git.changeSummary.staged,
231
+ unstaged: git.changeSummary.unstaged,
232
+ untracked: git.changeSummary.untracked,
233
+ },
234
+ humanChanges,
235
+ derivedChanges: viewDerivedChanges,
236
+ reviewFocus,
237
+ generatedExplanation,
238
+ diffPlan,
239
+ risks,
240
+ recommendedCommands,
241
+ nextActions: recommendedCommands,
242
+ },
243
+ exitCode: git.available ? 0 : 1,
244
+ };
245
+ }
246
+
247
+ export function formatChangedHuman(result: ChangedCommandResult): string {
248
+ const summary = result.data.summary as Record<string, unknown>;
249
+ const human = result.data.humanChanges as Record<string, { count: number; sample: string[]; hidden: number } | number>;
250
+ const derived = result.data.derivedChanges as Record<string, { count: number; sample: string[]; hidden: number } | number>;
251
+ const reviewFocus = result.data.reviewFocus as { summary?: string; suggestedOrder?: string[] } | undefined;
252
+ const generatedExplanation = result.data.generatedExplanation as { summary?: string } | undefined;
253
+ const diffPlan = result.data.diffPlan as { summary?: string; authoredDiffCommand?: string; generatedDiffCommand?: string; generatedCollapsedByDefault?: boolean } | undefined;
254
+ const risks = (result.data.risks as string[] | undefined) ?? [];
255
+ const nextActions = (result.data.nextActions as string[] | undefined) ?? [];
256
+ const lines = [
257
+ `Forge changed: ${result.ok ? "ready" : "git unavailable"}`,
258
+ `Branch: ${summary.branch ?? "unknown"} @ ${summary.commit ?? "unknown"}`,
259
+ `Changed: ${summary.changedFiles ?? 0} (${summary.changeTypes || "none"})`,
260
+ `Human files: ${summary.humanFiles ?? 0}`,
261
+ `Generated files: ${summary.generatedFiles ?? 0}`,
262
+ ];
263
+
264
+ if (reviewFocus?.summary) {
265
+ lines.push(`Review focus: ${reviewFocus.summary}`);
266
+ if (reviewFocus.suggestedOrder && reviewFocus.suggestedOrder.length > 0) {
267
+ lines.push(`Review order: ${reviewFocus.suggestedOrder.join(" -> ")}`);
268
+ }
269
+ }
270
+ if (generatedExplanation?.summary) {
271
+ lines.push(`Generated explanation: ${generatedExplanation.summary}`);
272
+ }
273
+
274
+ if (diffPlan?.summary) {
275
+ lines.push(`Diff plan: ${diffPlan.summary}`);
276
+ lines.push(` authored: ${diffPlan.authoredDiffCommand ?? "git diff"}`);
277
+ if (diffPlan.generatedCollapsedByDefault) {
278
+ lines.push(` generated: ${diffPlan.generatedDiffCommand ?? "git diff -- src/forge/_generated forge.lock"}`);
279
+ }
280
+ }
281
+
282
+ for (const category of ["source", "tests", "docs", "config", "operational", "assets", "other"] as const) {
283
+ const value = human[category];
284
+ if (typeof value === "object" && value.count > 0) {
285
+ lines.push(` ${category}: ${value.count} ${value.sample.join(", ")}${value.hidden > 0 ? ` (+${value.hidden})` : ""}`);
286
+ }
287
+ }
288
+
289
+ const generated = derived.generated;
290
+ if (typeof generated === "object" && generated.count > 0) {
291
+ lines.push(` generated: ${generated.count} ${generated.sample.join(", ")}${generated.hidden > 0 ? ` (+${generated.hidden})` : ""}`);
292
+ }
293
+
294
+ if (risks.length > 0) {
295
+ lines.push("", "Risks:", ...risks.map((risk) => ` ${risk}`));
296
+ }
297
+
298
+ lines.push("", "Next:", ...nextActions.map((command) => ` ${command}`));
299
+ return `${lines.join("\n")}\n`;
300
+ }