forgeos 0.1.0-alpha.7 → 0.1.0-alpha.70

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 (582) hide show
  1. package/.agents/skills/forge-agent-fabric/SKILL.md +169 -0
  2. package/.agents/skills/forge-agent-fabric/references/managed-workflows.md +95 -0
  3. package/.agents/skills/forge-agent-fabric/references/repository-analysis.md +102 -0
  4. package/.agents/skills/forge-agent-fabric/scripts/fabric.mjs +46 -0
  5. package/.agents/skills/forge-agent-fabric/scripts/repository.mjs +44 -0
  6. package/.npmignore +10 -0
  7. package/AGENTS.md +142 -90
  8. package/CHANGELOG.md +864 -9
  9. package/LICENSE +21 -0
  10. package/README.md +121 -6
  11. package/adapters/go/README.md +23 -0
  12. package/adapters/go/go.mod +3 -0
  13. package/adapters/go/http.go +149 -0
  14. package/adapters/go/registry.go +234 -0
  15. package/adapters/go/types.go +136 -0
  16. package/adapters/java/README.md +68 -0
  17. package/adapters/java/pom.xml +47 -0
  18. package/adapters/java/src/main/java/dev/forgeos/adapter/Auth.java +20 -0
  19. package/adapters/java/src/main/java/dev/forgeos/adapter/Diagnostic.java +16 -0
  20. package/adapters/java/src/main/java/dev/forgeos/adapter/Entry.java +38 -0
  21. package/adapters/java/src/main/java/dev/forgeos/adapter/EntryKind.java +16 -0
  22. package/adapters/java/src/main/java/dev/forgeos/adapter/ErrorInfo.java +4 -0
  23. package/adapters/java/src/main/java/dev/forgeos/adapter/Forge.java +94 -0
  24. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeCall.java +12 -0
  25. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeContext.java +11 -0
  26. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHandler.java +8 -0
  27. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHttpHandler.java +179 -0
  28. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeRegistry.java +121 -0
  29. package/adapters/java/src/main/java/dev/forgeos/adapter/Json.java +14 -0
  30. package/adapters/java/src/main/java/dev/forgeos/adapter/Manifest.java +14 -0
  31. package/adapters/java/src/main/java/dev/forgeos/adapter/RequestEnvelope.java +6 -0
  32. package/adapters/java/src/main/java/dev/forgeos/adapter/ResponseEnvelope.java +25 -0
  33. package/adapters/java/src/main/java/dev/forgeos/adapter/Risk.java +18 -0
  34. package/adapters/java/src/main/java/dev/forgeos/adapter/Schemas.java +36 -0
  35. package/adapters/java/src/main/java/dev/forgeos/adapter/Service.java +65 -0
  36. package/adapters/java/src/main/java/dev/forgeos/adapter/TransactionMode.java +18 -0
  37. package/adapters/java/src/main/java/dev/forgeos/adapter/TypedForgeHandler.java +6 -0
  38. package/adapters/java-spring-boot-starter/README.md +32 -0
  39. package/adapters/java-spring-boot-starter/pom.xml +49 -0
  40. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeCommand.java +22 -0
  41. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeExternalService.java +15 -0
  42. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeQuery.java +16 -0
  43. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.java +18 -0
  44. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.java +16 -0
  45. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringRuntime.java +104 -0
  46. package/adapters/java-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
  47. package/bin/forge.mjs +18 -0
  48. package/docs/agent-fabric-programs.md +168 -0
  49. package/docs/agent-fabric.md +584 -0
  50. package/docs/architecture/agent-fabric/PORTABLE_PROJECTS_PLAN.md +136 -0
  51. package/docs/architecture/agent-fabric/README.md +180 -0
  52. package/docs/architecture/agent-fabric/REPOSITORY_MANIFEST_PLAN.md +284 -0
  53. package/docs/architecture/agent-fabric/WORKFLOW_PROGRAM_V2_ADR.md +41 -0
  54. package/docs/architecture/agent-fabric/WORKFLOW_PROGRAM_V2_EVIDENCE.md +109 -0
  55. package/docs/architecture/agent-fabric/WORKFLOW_PROGRAM_V2_PLAN.md +550 -0
  56. package/docs/cair-protocol.md +103 -0
  57. package/docs/changelog.md +1070 -0
  58. package/docs/forge-protocol.md +189 -0
  59. package/docs/repository-agent-benchmark.md +179 -0
  60. package/docs/repository-analysis.md +139 -0
  61. package/docs/repository-context-quality.md +179 -0
  62. package/docs/repository-runtime-observation.md +82 -0
  63. package/examples/agent-fabric-v2/README.md +54 -0
  64. package/examples/agent-fabric-v2/make-request.mjs +4 -0
  65. package/examples/agent-fabric-v2/migrate.workflow.ts +35 -0
  66. package/examples/agent-fabric-v2/registry.example.json +256 -0
  67. package/examples/agent-fabric-v2/workers/check.mjs +2 -0
  68. package/examples/agent-fabric-v2/workers/common.mjs +7 -0
  69. package/examples/agent-fabric-v2/workers/discover.mjs +2 -0
  70. package/examples/agent-fabric-v2/workers/migrate.mjs +4 -0
  71. package/examples/agent-fabric-v2/workers/review.mjs +3 -0
  72. package/examples/go-billing/go.mod +7 -0
  73. package/examples/go-billing/main.go +120 -0
  74. package/examples/java-billing/pom.xml +60 -0
  75. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/CreateInvoiceInput.java +4 -0
  76. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Invoice.java +11 -0
  77. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Main.java +127 -0
  78. package/package.json +58 -5
  79. package/schemas/agent-fabric/v0.1/control-event.schema.json +281 -0
  80. package/schemas/forge-manifest.schema.json +389 -0
  81. package/scripts/field-test-forgeos.mjs +1021 -0
  82. package/scripts/install-agent-fabric-skill.mjs +105 -0
  83. package/src/forge/_generated/releaseManifest.json +1 -2
  84. package/src/forge/_generated/releaseManifest.ts +3 -3
  85. package/src/forge/agent-adapters/index.ts +1592 -125
  86. package/src/forge/agent-adapters/types.ts +225 -1
  87. package/src/forge/agent-fabric/adapter.ts +131 -0
  88. package/src/forge/agent-fabric/attached-snapshot.ts +55 -0
  89. package/src/forge/agent-fabric/attached-task-contract.ts +105 -0
  90. package/src/forge/agent-fabric/attached-task-service.ts +127 -0
  91. package/src/forge/agent-fabric/attached-task-store.ts +109 -0
  92. package/src/forge/agent-fabric/authority.ts +298 -0
  93. package/src/forge/agent-fabric/canonical.ts +135 -0
  94. package/src/forge/agent-fabric/codex-adversarial-review.ts +229 -0
  95. package/src/forge/agent-fabric/codex-sdk-worker.ts +201 -0
  96. package/src/forge/agent-fabric/conductor.ts +754 -0
  97. package/src/forge/agent-fabric/dictionary.ts +12 -0
  98. package/src/forge/agent-fabric/errors.ts +32 -0
  99. package/src/forge/agent-fabric/hardened-conductor.ts +485 -0
  100. package/src/forge/agent-fabric/hardened-reducer.ts +211 -0
  101. package/src/forge/agent-fabric/index.ts +48 -0
  102. package/src/forge/agent-fabric/journal.ts +116 -0
  103. package/src/forge/agent-fabric/local-adaptive-digest-worker.mjs +26 -0
  104. package/src/forge/agent-fabric/local-adaptive-harness.ts +343 -0
  105. package/src/forge/agent-fabric/local-adaptive-service.ts +398 -0
  106. package/src/forge/agent-fabric/local-adaptive-worker.ts +146 -0
  107. package/src/forge/agent-fabric/local-approval-window.ts +211 -0
  108. package/src/forge/agent-fabric/local-change-review-service.ts +374 -0
  109. package/src/forge/agent-fabric/local-coding-worker.ts +285 -0
  110. package/src/forge/agent-fabric/local-control-store.ts +239 -0
  111. package/src/forge/agent-fabric/local-effect-broker.ts +348 -0
  112. package/src/forge/agent-fabric/local-evolution-approval.ts +81 -0
  113. package/src/forge/agent-fabric/local-evolution-profile.ts +87 -0
  114. package/src/forge/agent-fabric/local-evolution-registry.ts +427 -0
  115. package/src/forge/agent-fabric/local-evolution-service.ts +200 -0
  116. package/src/forge/agent-fabric/local-intelligence.ts +281 -0
  117. package/src/forge/agent-fabric/local-paths.ts +18 -0
  118. package/src/forge/agent-fabric/local-task-contract.ts +203 -0
  119. package/src/forge/agent-fabric/local-task-inbox.ts +543 -0
  120. package/src/forge/agent-fabric/local-task-server.ts +374 -0
  121. package/src/forge/agent-fabric/local-task-service.ts +982 -0
  122. package/src/forge/agent-fabric/local-verification.ts +551 -0
  123. package/src/forge/agent-fabric/managed-environment.ts +205 -0
  124. package/src/forge/agent-fabric/managed-run-contract.ts +103 -0
  125. package/src/forge/agent-fabric/managed-run-service.ts +401 -0
  126. package/src/forge/agent-fabric/managed-run-store.ts +165 -0
  127. package/src/forge/agent-fabric/managed-workspace.ts +253 -0
  128. package/src/forge/agent-fabric/p0a.ts +104 -0
  129. package/src/forge/agent-fabric/p0b-model-adapter.ts +434 -0
  130. package/src/forge/agent-fabric/planning.ts +155 -0
  131. package/src/forge/agent-fabric/program-contract.ts +229 -0
  132. package/src/forge/agent-fabric/program-dsl.ts +112 -0
  133. package/src/forge/agent-fabric/program-service.ts +619 -0
  134. package/src/forge/agent-fabric/program-store.ts +117 -0
  135. package/src/forge/agent-fabric/program-types.ts +98 -0
  136. package/src/forge/agent-fabric/program-worker.ts +91 -0
  137. package/src/forge/agent-fabric/project-profile.ts +50 -0
  138. package/src/forge/agent-fabric/project-registry.ts +120 -0
  139. package/src/forge/agent-fabric/project-runtime.ts +85 -0
  140. package/src/forge/agent-fabric/readiness.ts +26 -0
  141. package/src/forge/agent-fabric/reducer.ts +863 -0
  142. package/src/forge/agent-fabric/repository-context.ts +83 -0
  143. package/src/forge/agent-fabric/resource-ledger.ts +266 -0
  144. package/src/forge/agent-fabric/serialized-local-adapter.ts +60 -0
  145. package/src/forge/agent-fabric/types.ts +424 -0
  146. package/src/forge/agent-fabric/validation.ts +500 -0
  147. package/src/forge/agent-fabric/workflow-engine.ts +218 -0
  148. package/src/forge/agent-fabric/workflow-task-actions.ts +104 -0
  149. package/src/forge/agent-fabric/workflow-templates.ts +11 -0
  150. package/src/forge/agent-memory/bridge.ts +1728 -0
  151. package/src/forge/agent-memory/context-pack.ts +284 -0
  152. package/src/forge/agent-memory/hook-runner.ts +331 -0
  153. package/src/forge/agent-memory/mcp.ts +597 -0
  154. package/src/forge/agent-memory/normalize.ts +498 -0
  155. package/src/forge/agent-memory/redaction.ts +103 -0
  156. package/src/forge/agent-memory/sources/claude-code.ts +51 -0
  157. package/src/forge/agent-memory/sources/codex-hook-runner.mjs +343 -0
  158. package/src/forge/agent-memory/sources/codex.ts +161 -0
  159. package/src/forge/agent-memory/sources/cursor.ts +35 -0
  160. package/src/forge/agent-memory/types.ts +215 -0
  161. package/src/forge/bench.ts +248 -0
  162. package/src/forge/brownfield-import/index.ts +896 -0
  163. package/src/forge/brownfield-import/types.ts +127 -0
  164. package/src/forge/cair/action-journal.ts +61 -0
  165. package/src/forge/cair/action-parser.ts +314 -0
  166. package/src/forge/cair/action-validator.ts +40 -0
  167. package/src/forge/cair/actions.ts +1818 -0
  168. package/src/forge/cair/format.ts +77 -0
  169. package/src/forge/cair/index.ts +118 -0
  170. package/src/forge/cair/query.ts +478 -0
  171. package/src/forge/cair/snapshot.ts +315 -0
  172. package/src/forge/cair/types.ts +255 -0
  173. package/src/forge/cli/adaptive.ts +51 -0
  174. package/src/forge/cli/ai.ts +16 -1
  175. package/src/forge/cli/auth.ts +459 -15
  176. package/src/forge/cli/authmd.ts +441 -0
  177. package/src/forge/cli/baseline.ts +112 -0
  178. package/src/forge/cli/build.ts +20 -4
  179. package/src/forge/cli/changed.ts +418 -0
  180. package/src/forge/cli/codex-app-server.ts +877 -0
  181. package/src/forge/cli/commands.ts +1859 -20
  182. package/src/forge/cli/db.ts +209 -2
  183. package/src/forge/cli/deploy.ts +1339 -0
  184. package/src/forge/cli/deps.ts +150 -23
  185. package/src/forge/cli/dev.ts +1137 -53
  186. package/src/forge/cli/docs.ts +265 -0
  187. package/src/forge/cli/doctor.ts +297 -0
  188. package/src/forge/cli/env-placeholders.ts +62 -0
  189. package/src/forge/cli/evolution.ts +40 -0
  190. package/src/forge/cli/fabric.ts +253 -0
  191. package/src/forge/cli/field-test.ts +568 -0
  192. package/src/forge/cli/golden-path.ts +487 -0
  193. package/src/forge/cli/handoff.ts +336 -0
  194. package/src/forge/cli/index.ts +1 -0
  195. package/src/forge/cli/last-run.ts +84 -0
  196. package/src/forge/cli/main.ts +194 -3
  197. package/src/forge/cli/new.ts +169 -17
  198. package/src/forge/cli/next-actions.ts +23 -0
  199. package/src/forge/cli/output.ts +398 -6
  200. package/src/forge/cli/parse.ts +1377 -38
  201. package/src/forge/cli/progress.ts +51 -0
  202. package/src/forge/cli/query.ts +32 -0
  203. package/src/forge/cli/release.ts +35 -11
  204. package/src/forge/cli/repository.ts +151 -0
  205. package/src/forge/cli/run.ts +42 -0
  206. package/src/forge/cli/secrets.ts +137 -1
  207. package/src/forge/cli/seed.ts +581 -0
  208. package/src/forge/cli/self-host.ts +56 -14
  209. package/src/forge/cli/studio.ts +2282 -0
  210. package/src/forge/cli/verify.ts +1458 -32
  211. package/src/forge/cli/windows.ts +23 -0
  212. package/src/forge/cli/workos.ts +3509 -0
  213. package/src/forge/compiler/agent-contract/build.ts +728 -64
  214. package/src/forge/compiler/agent-contract/types.ts +45 -2
  215. package/src/forge/compiler/ai-registry/parse.ts +71 -2
  216. package/src/forge/compiler/api-surface/build.ts +47 -0
  217. package/src/forge/compiler/app-graph/build.ts +112 -9
  218. package/src/forge/compiler/app-graph/extract.ts +107 -0
  219. package/src/forge/compiler/app-graph/module-graph.ts +73 -78
  220. package/src/forge/compiler/app-graph/parser.ts +24 -24
  221. package/src/forge/compiler/app-graph/profile.ts +26 -0
  222. package/src/forge/compiler/app-graph/tsconfig-hash.ts +41 -4
  223. package/src/forge/compiler/app-graph/versions.ts +1 -1
  224. package/src/forge/compiler/classifier/capabilities.ts +3 -2
  225. package/src/forge/compiler/classifier/classify.ts +32 -8
  226. package/src/forge/compiler/classifier/secrets.ts +3 -2
  227. package/src/forge/compiler/classifier/signals.ts +91 -1
  228. package/src/forge/compiler/client-sdk/build-manifest.ts +59 -0
  229. package/src/forge/compiler/client-sdk/render-client.ts +295 -13
  230. package/src/forge/compiler/data-graph/build.ts +29 -1
  231. package/src/forge/compiler/data-graph/parse.ts +20 -4
  232. package/src/forge/compiler/data-graph/sql/ddl.ts +144 -31
  233. package/src/forge/compiler/data-graph/sql/serialize.ts +4 -0
  234. package/src/forge/compiler/data-graph/sql/types.ts +1 -0
  235. package/src/forge/compiler/diagnostics/codes.ts +38 -0
  236. package/src/forge/compiler/diagnostics/create.ts +28 -2
  237. package/src/forge/compiler/diagnostics/index.ts +2 -0
  238. package/src/forge/compiler/emitter/barrel.ts +3 -0
  239. package/src/forge/compiler/emitter/render.ts +9 -0
  240. package/src/forge/compiler/external-manifest/registry.ts +217 -0
  241. package/src/forge/compiler/external-manifest/types.ts +91 -0
  242. package/src/forge/compiler/external-manifest/validate.ts +373 -0
  243. package/src/forge/compiler/frontend-graph/build.ts +142 -14
  244. package/src/forge/compiler/integration/add.ts +991 -33
  245. package/src/forge/compiler/integration/plan.ts +43 -12
  246. package/src/forge/compiler/integration/render.ts +29 -0
  247. package/src/forge/compiler/integration/snapshot.ts +2 -0
  248. package/src/forge/compiler/integration/templates/convex.ts +70 -0
  249. package/src/forge/compiler/integration/templates/index.ts +1 -0
  250. package/src/forge/compiler/integration/templates/render.ts +38 -0
  251. package/src/forge/compiler/integration/templates/types.ts +3 -0
  252. package/src/forge/compiler/integration/templates/workos.ts +1439 -0
  253. package/src/forge/compiler/make-registry/build.ts +8 -9
  254. package/src/forge/compiler/orchestrator/fast-check.ts +4 -0
  255. package/src/forge/compiler/orchestrator/generate-lock.ts +14 -3
  256. package/src/forge/compiler/orchestrator/manifest.ts +1 -1
  257. package/src/forge/compiler/orchestrator/plan-profile.ts +23 -0
  258. package/src/forge/compiler/orchestrator/plan.ts +249 -10
  259. package/src/forge/compiler/orchestrator/profile.ts +65 -0
  260. package/src/forge/compiler/orchestrator/run.ts +101 -33
  261. package/src/forge/compiler/orchestrator/serialize.ts +33 -8
  262. package/src/forge/compiler/orchestrator/types.ts +1 -1
  263. package/src/forge/compiler/package-graph/compiler.ts +3 -1
  264. package/src/forge/compiler/package-graph/constants.ts +1 -1
  265. package/src/forge/compiler/package-graph/dts-extractor.ts +14 -1
  266. package/src/forge/compiler/package-manager/adapter.ts +4 -1
  267. package/src/forge/compiler/package-manager/commands.ts +4 -0
  268. package/src/forge/compiler/package-manager/executor.ts +30 -1
  269. package/src/forge/compiler/package-manager/version.ts +36 -12
  270. package/src/forge/compiler/package-upgrades/planner.ts +155 -18
  271. package/src/forge/compiler/package-upgrades/types.ts +2 -0
  272. package/src/forge/compiler/policy-registry/build.ts +47 -2
  273. package/src/forge/compiler/policy-registry/parse.ts +32 -2
  274. package/src/forge/compiler/recipes/definitions.ts +63 -0
  275. package/src/forge/compiler/recipes/index.ts +2 -0
  276. package/src/forge/compiler/recipes/profiles.ts +81 -0
  277. package/src/forge/compiler/recipes/registry.ts +6 -0
  278. package/src/forge/compiler/test-graph/build.ts +11 -3
  279. package/src/forge/compiler/types/app-graph.ts +8 -2
  280. package/src/forge/compiler/types/cli.ts +76 -1
  281. package/src/forge/compiler/types/dev-manifest.ts +4 -0
  282. package/src/forge/compiler/types/emit.ts +2 -0
  283. package/src/forge/compiler/types/frontend-graph.ts +2 -2
  284. package/src/forge/compiler/types/integration.ts +1 -0
  285. package/src/forge/compiler/types/package-graph.ts +6 -0
  286. package/src/forge/compiler/types/policy-registry.ts +3 -1
  287. package/src/forge/delta/broker-runner.mjs +5 -0
  288. package/src/forge/delta/broker.ts +429 -0
  289. package/src/forge/delta/classifier.ts +52 -0
  290. package/src/forge/delta/explain.ts +238 -0
  291. package/src/forge/delta/git-observer.ts +67 -0
  292. package/src/forge/delta/ids.ts +44 -0
  293. package/src/forge/delta/index.ts +25 -0
  294. package/src/forge/delta/process-identity.ts +37 -0
  295. package/src/forge/delta/queue-status.ts +190 -0
  296. package/src/forge/delta/recorder.ts +540 -0
  297. package/src/forge/delta/redaction.ts +50 -0
  298. package/src/forge/delta/schema.ts +240 -0
  299. package/src/forge/delta/session.ts +142 -0
  300. package/src/forge/delta/status.ts +1139 -0
  301. package/src/forge/delta/store.ts +3329 -0
  302. package/src/forge/delta/timeline.ts +178 -0
  303. package/src/forge/dev/server.ts +1061 -22
  304. package/src/forge/dev/types.ts +15 -1
  305. package/src/forge/dev/watch.ts +17 -7
  306. package/src/forge/dev-console/cycle.ts +285 -33
  307. package/src/forge/dev-console/types.ts +47 -1
  308. package/src/forge/impact/index.ts +222 -30
  309. package/src/forge/impact/types.ts +33 -1
  310. package/src/forge/intent/index.ts +35 -16
  311. package/src/forge/make/fields.ts +26 -0
  312. package/src/forge/make/index.ts +42 -6
  313. package/src/forge/make/templates.ts +211 -4
  314. package/src/forge/make/types.ts +2 -1
  315. package/src/forge/policy.ts +1 -1
  316. package/src/forge/react/index.ts +160 -2
  317. package/src/forge/refactor/index.ts +1 -0
  318. package/src/forge/repair/rules/index.ts +2 -2
  319. package/src/forge/repository-analysis/adapters/common.ts +72 -0
  320. package/src/forge/repository-analysis/adapters/docker.ts +185 -0
  321. package/src/forge/repository-analysis/adapters/java.ts +133 -0
  322. package/src/forge/repository-analysis/adapters/typescript.ts +350 -0
  323. package/src/forge/repository-analysis/adapters/vue.ts +71 -0
  324. package/src/forge/repository-analysis/analyze.ts +434 -0
  325. package/src/forge/repository-analysis/benchmark.ts +336 -0
  326. package/src/forge/repository-analysis/cache-gc.ts +154 -0
  327. package/src/forge/repository-analysis/check-selection.ts +123 -0
  328. package/src/forge/repository-analysis/context-node.ts +17 -0
  329. package/src/forge/repository-analysis/context.ts +456 -0
  330. package/src/forge/repository-analysis/http-resolution.ts +135 -0
  331. package/src/forge/repository-analysis/identity.ts +45 -0
  332. package/src/forge/repository-analysis/index.ts +18 -0
  333. package/src/forge/repository-analysis/nuxt-resolution.ts +188 -0
  334. package/src/forge/repository-analysis/quality.ts +60 -0
  335. package/src/forge/repository-analysis/retrieval.ts +309 -0
  336. package/src/forge/repository-analysis/runtime-artifacts.ts +195 -0
  337. package/src/forge/repository-analysis/runtime-observation.ts +325 -0
  338. package/src/forge/repository-analysis/scanner.ts +174 -0
  339. package/src/forge/repository-analysis/storage.ts +193 -0
  340. package/src/forge/repository-analysis/test-associations.ts +59 -0
  341. package/src/forge/repository-analysis/types.ts +99 -0
  342. package/src/forge/repository-manifest/index.ts +178 -0
  343. package/src/forge/repository-manifest/types.ts +63 -0
  344. package/src/forge/review/index.ts +162 -12
  345. package/src/forge/review/types.ts +15 -0
  346. package/src/forge/runtime/ai/providers.ts +19 -4
  347. package/src/forge/runtime/auth/config.ts +17 -0
  348. package/src/forge/runtime/auth/evaluate.ts +15 -2
  349. package/src/forge/runtime/auth/resolve.ts +61 -6
  350. package/src/forge/runtime/auth/types.ts +1 -0
  351. package/src/forge/runtime/db/factory.ts +1 -3
  352. package/src/forge/runtime/db/generated-client.ts +13 -2
  353. package/src/forge/runtime/db/memory-adapter.ts +139 -32
  354. package/src/forge/runtime/db/pglite-adapter.ts +285 -2
  355. package/src/forge/runtime/executor.ts +129 -16
  356. package/src/forge/runtime/external/bridge.ts +663 -0
  357. package/src/forge/runtime/runner/run-entry.ts +16 -7
  358. package/src/forge/runtime/telemetry/buffer.ts +4 -1
  359. package/src/forge/runtime/telemetry/scrubber.ts +35 -5
  360. package/src/forge/runtime/webhooks/security.ts +12 -7
  361. package/src/forge/server.ts +71 -7
  362. package/src/forge/ui/index.ts +831 -19
  363. package/src/forge/ui/types.ts +3 -1
  364. package/src/forge/version.ts +1 -1
  365. package/src/forge/vue/index.ts +422 -0
  366. package/src/forge/workspace/baseline.ts +112 -0
  367. package/src/forge/workspace/change-summary.ts +292 -0
  368. package/src/forge/workspace/forge-cli.ts +42 -0
  369. package/src/forge/workspace/git-summary.ts +393 -0
  370. package/templates/agent-workroom/AGENTS.md +29 -0
  371. package/templates/agent-workroom/README.md +34 -0
  372. package/templates/agent-workroom/forge.config.ts +3 -0
  373. package/templates/agent-workroom/package.json +34 -0
  374. package/templates/agent-workroom/pnpm-workspace.yaml +2 -0
  375. package/templates/agent-workroom/src/actions/indexAgentSignal.ts +10 -0
  376. package/templates/agent-workroom/src/commands/openWorkroom.ts +61 -0
  377. package/templates/agent-workroom/src/commands/recordAgentSignal.ts +119 -0
  378. package/templates/agent-workroom/src/commands/recordCheckRun.ts +52 -0
  379. package/templates/agent-workroom/src/forge/schema.ts +54 -0
  380. package/templates/agent-workroom/src/policies.ts +6 -0
  381. package/templates/agent-workroom/src/queries/listWorkrooms.ts +11 -0
  382. package/templates/agent-workroom/src/queries/liveWorkroom.ts +63 -0
  383. package/templates/agent-workroom/tsconfig.json +16 -0
  384. package/templates/agent-workroom/web/index.html +13 -0
  385. package/templates/agent-workroom/web/package.json +21 -0
  386. package/templates/agent-workroom/web/src/App.tsx +345 -0
  387. package/templates/agent-workroom/web/src/lib/forge.ts +20 -0
  388. package/templates/agent-workroom/web/src/main.tsx +13 -0
  389. package/templates/agent-workroom/web/src/styles.css +545 -0
  390. package/templates/agent-workroom/web/tsconfig.json +27 -0
  391. package/templates/agent-workroom/web/vite.config.ts +36 -0
  392. package/templates/b2b-support-web/package.json +2 -0
  393. package/templates/b2b-support-web/pnpm-workspace.yaml +2 -0
  394. package/templates/b2b-support-web/web/app/page.tsx +2 -2
  395. package/templates/b2b-support-web/web/lib/forge.ts +9 -2
  396. package/templates/b2b-support-web/web/next.config.ts +24 -0
  397. package/templates/b2b-support-web/web/package.json +1 -1
  398. package/templates/minimal-web/package.json +2 -1
  399. package/templates/minimal-web/pnpm-workspace.yaml +2 -0
  400. package/templates/minimal-web/web/index.html +1 -0
  401. package/templates/minimal-web/web/src/App.tsx +12 -6
  402. package/templates/minimal-web/web/src/lib/forge.ts +9 -2
  403. package/templates/minimal-web/web/src/styles.css +34 -0
  404. package/templates/minimal-web/web/vite.config.ts +36 -0
  405. package/templates/nuxt-web/.vscode/settings.json +14 -0
  406. package/templates/nuxt-web/.yarnrc.yml +1 -0
  407. package/templates/nuxt-web/README.md +30 -0
  408. package/templates/nuxt-web/forge.config.ts +3 -0
  409. package/templates/nuxt-web/package.json +37 -0
  410. package/templates/nuxt-web/pnpm-workspace.yaml +2 -0
  411. package/templates/nuxt-web/src/actions/logNoteCreated.ts +11 -0
  412. package/templates/nuxt-web/src/commands/createNote.ts +26 -0
  413. package/templates/nuxt-web/src/forge/schema.ts +12 -0
  414. package/templates/nuxt-web/src/policies.ts +6 -0
  415. package/templates/nuxt-web/src/queries/listNotes.ts +8 -0
  416. package/templates/nuxt-web/src/queries/liveNotes.ts +8 -0
  417. package/templates/nuxt-web/tsconfig.json +17 -0
  418. package/templates/nuxt-web/web/app.vue +67 -0
  419. package/templates/nuxt-web/web/components/LiveNotes.vue +89 -0
  420. package/templates/nuxt-web/web/components/NoteComposer.vue +100 -0
  421. package/templates/nuxt-web/web/composables/forge.ts +13 -0
  422. package/templates/nuxt-web/web/composables/useNotes.ts +24 -0
  423. package/templates/nuxt-web/web/nuxt.config.ts +11 -0
  424. package/templates/nuxt-web/web/package.json +22 -0
  425. package/templates/nuxt-web/web/plugins/forge.client.ts +10 -0
  426. package/templates/nuxt-web/web/plugins/forge.server.ts +10 -0
  427. package/templates/nuxt-web/web/server/api/forge-health.get.ts +7 -0
  428. package/templates/nuxt-web/web/tsconfig.json +6 -0
  429. package/templates/vendor-access/.vscode/settings.json +14 -0
  430. package/templates/vendor-access/README.md +30 -0
  431. package/templates/vendor-access/forge.config.ts +3 -0
  432. package/templates/vendor-access/package.json +35 -0
  433. package/templates/vendor-access/pnpm-workspace.yaml +2 -0
  434. package/templates/vendor-access/src/commands/addEvidence.ts +42 -0
  435. package/templates/vendor-access/src/commands/approveAccessRequest.ts +43 -0
  436. package/templates/vendor-access/src/commands/createAccessRequest.ts +49 -0
  437. package/templates/vendor-access/src/commands/seedVendorAccessDemo.ts +200 -0
  438. package/templates/vendor-access/src/forge/schema.ts +74 -0
  439. package/templates/vendor-access/src/policies.ts +11 -0
  440. package/templates/vendor-access/src/queries/listVendorAccessDashboard.ts +24 -0
  441. package/templates/vendor-access/src/queries/liveVendorAccessDashboard.ts +24 -0
  442. package/templates/vendor-access/tsconfig.json +17 -0
  443. package/templates/vendor-access/web/index.html +13 -0
  444. package/templates/vendor-access/web/package.json +21 -0
  445. package/templates/vendor-access/web/src/App.tsx +573 -0
  446. package/templates/vendor-access/web/src/lib/forge.ts +20 -0
  447. package/templates/vendor-access/web/src/main.tsx +205 -0
  448. package/templates/vendor-access/web/src/styles.css +682 -0
  449. package/templates/vendor-access/web/tsconfig.json +18 -0
  450. package/templates/vendor-access/web/vite.config.ts +36 -0
  451. package/src/forge/_generated/actionSubscriptions.json +0 -2
  452. package/src/forge/_generated/actionSubscriptions.ts +0 -10
  453. package/src/forge/_generated/agentAdapterManifest.json +0 -2
  454. package/src/forge/_generated/agentAdapterManifest.ts +0 -73
  455. package/src/forge/_generated/agentContract.json +0 -2
  456. package/src/forge/_generated/agentContract.ts +0 -7829
  457. package/src/forge/_generated/agentQuickstart.md +0 -34
  458. package/src/forge/_generated/agentTools.json +0 -2
  459. package/src/forge/_generated/agentTools.md +0 -16
  460. package/src/forge/_generated/agentTools.ts +0 -12
  461. package/src/forge/_generated/aiContext.ts +0 -125
  462. package/src/forge/_generated/aiModels.json +0 -2
  463. package/src/forge/_generated/aiModels.ts +0 -51
  464. package/src/forge/_generated/aiProviders.json +0 -2
  465. package/src/forge/_generated/aiProviders.ts +0 -23
  466. package/src/forge/_generated/aiRegistry.json +0 -2
  467. package/src/forge/_generated/aiRegistry.ts +0 -31
  468. package/src/forge/_generated/api.json +0 -2
  469. package/src/forge/_generated/api.ts +0 -8
  470. package/src/forge/_generated/appGraph.json +0 -2
  471. package/src/forge/_generated/appGraph.ts +0 -14937
  472. package/src/forge/_generated/appMap.md +0 -55
  473. package/src/forge/_generated/artifactManifest.json +0 -2
  474. package/src/forge/_generated/artifactManifest.ts +0 -7
  475. package/src/forge/_generated/authClaims.json +0 -2
  476. package/src/forge/_generated/authClaims.ts +0 -13
  477. package/src/forge/_generated/authConfig.json +0 -2
  478. package/src/forge/_generated/authConfig.ts +0 -17
  479. package/src/forge/_generated/authContext.ts +0 -23
  480. package/src/forge/_generated/authRegistry.json +0 -2
  481. package/src/forge/_generated/authRegistry.ts +0 -25
  482. package/src/forge/_generated/buildInfo.json +0 -2
  483. package/src/forge/_generated/buildInfo.ts +0 -9
  484. package/src/forge/_generated/capabilityMap.json +0 -2
  485. package/src/forge/_generated/capabilityMap.md +0 -15
  486. package/src/forge/_generated/capabilityMap.ts +0 -17
  487. package/src/forge/_generated/client.ts +0 -282
  488. package/src/forge/_generated/clientApi.ts +0 -9
  489. package/src/forge/_generated/clientManifest.json +0 -2
  490. package/src/forge/_generated/clientManifest.ts +0 -39
  491. package/src/forge/_generated/clientTypes.ts +0 -78
  492. package/src/forge/_generated/configRegistry.json +0 -2
  493. package/src/forge/_generated/configRegistry.ts +0 -4
  494. package/src/forge/_generated/dataGraph.json +0 -2
  495. package/src/forge/_generated/dataGraph.ts +0 -8
  496. package/src/forge/_generated/db.json +0 -2
  497. package/src/forge/_generated/db.ts +0 -2
  498. package/src/forge/_generated/dbSecurityManifest.json +0 -2
  499. package/src/forge/_generated/dbSecurityManifest.ts +0 -15
  500. package/src/forge/_generated/dbSessionContext.json +0 -2
  501. package/src/forge/_generated/dbSessionContext.ts +0 -39
  502. package/src/forge/_generated/deployManifest.json +0 -2
  503. package/src/forge/_generated/deployManifest.ts +0 -14
  504. package/src/forge/_generated/devManifest.json +0 -2
  505. package/src/forge/_generated/devManifest.ts +0 -62
  506. package/src/forge/_generated/envSchema.json +0 -2
  507. package/src/forge/_generated/envSchema.ts +0 -59
  508. package/src/forge/_generated/frontendGraph.json +0 -2
  509. package/src/forge/_generated/frontendGraph.ts +0 -27
  510. package/src/forge/_generated/importGuards.json +0 -2
  511. package/src/forge/_generated/importGuards.ts +0 -686
  512. package/src/forge/_generated/index.ts +0 -68
  513. package/src/forge/_generated/liveProductionManifest.json +0 -2
  514. package/src/forge/_generated/liveProductionManifest.ts +0 -23
  515. package/src/forge/_generated/liveProtocol.json +0 -2
  516. package/src/forge/_generated/liveProtocol.ts +0 -21
  517. package/src/forge/_generated/liveQueryRegistry.json +0 -2
  518. package/src/forge/_generated/liveQueryRegistry.ts +0 -9
  519. package/src/forge/_generated/liveTransportConfig.json +0 -2
  520. package/src/forge/_generated/liveTransportConfig.ts +0 -19
  521. package/src/forge/_generated/makeRegistry.json +0 -2
  522. package/src/forge/_generated/makeRegistry.ts +0 -177
  523. package/src/forge/_generated/makeTemplates.json +0 -2
  524. package/src/forge/_generated/makeTemplates.ts +0 -66
  525. package/src/forge/_generated/mockMap.json +0 -2
  526. package/src/forge/_generated/mockMap.ts +0 -7
  527. package/src/forge/_generated/operationPlaybooks.md +0 -167
  528. package/src/forge/_generated/packageGraph.json +0 -2
  529. package/src/forge/_generated/packageGraph.ts +0 -249334
  530. package/src/forge/_generated/packageUpgradeRegistry.json +0 -2
  531. package/src/forge/_generated/packageUpgradeRegistry.ts +0 -15
  532. package/src/forge/_generated/permissionMatrix.json +0 -2
  533. package/src/forge/_generated/permissionMatrix.ts +0 -7
  534. package/src/forge/_generated/policyRegistry.json +0 -2
  535. package/src/forge/_generated/policyRegistry.ts +0 -11
  536. package/src/forge/_generated/queryRegistry.json +0 -2
  537. package/src/forge/_generated/queryRegistry.ts +0 -9
  538. package/src/forge/_generated/react.d.ts +0 -22
  539. package/src/forge/_generated/react.ts +0 -29
  540. package/src/forge/_generated/reactManifest.json +0 -2
  541. package/src/forge/_generated/reactManifest.ts +0 -19
  542. package/src/forge/_generated/rlsPolicies.json +0 -2
  543. package/src/forge/_generated/rlsPolicies.sql +0 -34
  544. package/src/forge/_generated/rlsPolicies.ts +0 -6
  545. package/src/forge/_generated/runtimeGraph.json +0 -2
  546. package/src/forge/_generated/runtimeGraph.ts +0 -8
  547. package/src/forge/_generated/runtimeMatrix.json +0 -2
  548. package/src/forge/_generated/runtimeMatrix.ts +0 -334130
  549. package/src/forge/_generated/runtimeRegistry.ts +0 -2
  550. package/src/forge/_generated/runtimeRules.md +0 -91
  551. package/src/forge/_generated/secretRegistry.json +0 -2
  552. package/src/forge/_generated/secretRegistry.ts +0 -50
  553. package/src/forge/_generated/secretsContext.ts +0 -11
  554. package/src/forge/_generated/serverApi.ts +0 -10
  555. package/src/forge/_generated/sourceMapManifest.json +0 -2
  556. package/src/forge/_generated/sourceMapManifest.ts +0 -7
  557. package/src/forge/_generated/sqlPlan.json +0 -2
  558. package/src/forge/_generated/sqlPlan.ts +0 -88
  559. package/src/forge/_generated/subscriptionManifest.json +0 -2
  560. package/src/forge/_generated/subscriptionManifest.ts +0 -7
  561. package/src/forge/_generated/symbolicationManifest.json +0 -2
  562. package/src/forge/_generated/symbolicationManifest.ts +0 -17
  563. package/src/forge/_generated/telemetryRegistry.json +0 -2
  564. package/src/forge/_generated/telemetryRegistry.ts +0 -9
  565. package/src/forge/_generated/telemetrySinks.json +0 -2
  566. package/src/forge/_generated/telemetrySinks.ts +0 -11
  567. package/src/forge/_generated/tenantScope.json +0 -2
  568. package/src/forge/_generated/tenantScope.ts +0 -8
  569. package/src/forge/_generated/testGraph.json +0 -2
  570. package/src/forge/_generated/testGraph.ts +0 -3452
  571. package/src/forge/_generated/testPlanRegistry.json +0 -2
  572. package/src/forge/_generated/testPlanRegistry.ts +0 -33
  573. package/src/forge/_generated/uiRoutes.json +0 -2
  574. package/src/forge/_generated/uiRoutes.ts +0 -16
  575. package/src/forge/_generated/uiScenarios.json +0 -2
  576. package/src/forge/_generated/uiScenarios.ts +0 -30
  577. package/src/forge/_generated/uiTestManifest.json +0 -2
  578. package/src/forge/_generated/uiTestManifest.ts +0 -27
  579. package/src/forge/_generated/workflowRegistry.json +0 -2
  580. package/src/forge/_generated/workflowRegistry.ts +0 -9
  581. package/src/forge/_generated/workflowSubscriptions.json +0 -2
  582. package/src/forge/_generated/workflowSubscriptions.ts +0 -10
@@ -5,11 +5,18 @@ import {
5
5
  import type { GenerateOptions, GenerateResult } from "../types/cli.ts";
6
6
  import type { Diagnostic } from "../types/diagnostic.ts";
7
7
  import { classify } from "../classifier/classify.ts";
8
+ import { getAppGraphProfile } from "../app-graph/profile.ts";
9
+ import {
10
+ clearSignalProfile,
11
+ getSignalProfile,
12
+ resetSignalProfile,
13
+ } from "../classifier/signals.ts";
8
14
  import type { ClassifiedPackage } from "../classifier/runtime-matrix.ts";
9
15
  import { buildRuntimeMatrix } from "../classifier/runtime-matrix.ts";
10
16
  import { emit } from "../emitter/emit.ts";
11
17
  import { PackageGraphCompiler } from "../package-graph/compiler.ts";
12
18
  import { resolveByPackageName } from "../recipes/registry.ts";
19
+ import { applyWorkspaceRecipeProfile } from "../recipes/profiles.ts";
13
20
  import { checkImportGuards } from "./guards.ts";
14
21
  import {
15
22
  saveManifest,
@@ -25,8 +32,10 @@ import {
25
32
  formatCompileTimings,
26
33
  isCompileProfileEnabled,
27
34
  recordCompileTimings,
35
+ shouldPrintCompileProfile,
28
36
  } from "./profile.ts";
29
37
  import { plan } from "./plan.ts";
38
+ import { getPlanProfile } from "./plan-profile.ts";
30
39
  import {
31
40
  buildAppGraphForSession,
32
41
  discoverForSession,
@@ -37,9 +46,10 @@ import { verifyLockIntegrity } from "./verify.ts";
37
46
 
38
47
  function classifyPackages(
39
48
  packageGraph: Awaited<ReturnType<PackageGraphCompiler["build"]>>["graph"],
49
+ workspaceRoot: string,
40
50
  ): ClassifiedPackage[] {
41
51
  return packageGraph.packages.map((api) => {
42
- const recipe = resolveByPackageName(api.name) ?? undefined;
52
+ const recipe = applyWorkspaceRecipeProfile(resolveByPackageName(api.name), workspaceRoot);
43
53
  return {
44
54
  api,
45
55
  classification: classify(api, recipe),
@@ -100,6 +110,7 @@ export async function run(options: GenerateOptions): Promise<GenerateResult> {
100
110
  async function runUnlocked(options: GenerateOptions): Promise<GenerateResult> {
101
111
  const profileEnabled = isCompileProfileEnabled();
102
112
  const runStarted = profileEnabled ? performance.now() : 0;
113
+ let fastCheckMs = 0;
103
114
  let generateCheckCache: GenerateResult["cache"] =
104
115
  options.check && !options.dryRun
105
116
  ? {
@@ -110,7 +121,9 @@ async function runUnlocked(options: GenerateOptions): Promise<GenerateResult> {
110
121
  : undefined;
111
122
 
112
123
  if (options.check && !options.dryRun) {
124
+ const fastCheckStarted = profileEnabled ? performance.now() : 0;
113
125
  const fastCheck = runFastGenerateCheck(options.workspaceRoot);
126
+ fastCheckMs = profileEnabled ? performance.now() - fastCheckStarted : 0;
114
127
  if (fastCheck.kind === "hit") {
115
128
  return fastCheck.result;
116
129
  }
@@ -121,7 +134,9 @@ async function runUnlocked(options: GenerateOptions): Promise<GenerateResult> {
121
134
  };
122
135
  }
123
136
 
137
+ const sessionStarted = profileEnabled ? performance.now() : 0;
124
138
  const session = getCompileSession(options.workspaceRoot);
139
+ const sessionMs = profileEnabled ? performance.now() - sessionStarted : 0;
125
140
 
126
141
  const discoverStarted = profileEnabled ? performance.now() : 0;
127
142
  const ctx = discoverForSession(session);
@@ -130,20 +145,40 @@ async function runUnlocked(options: GenerateOptions): Promise<GenerateResult> {
130
145
 
131
146
  const pkgCompiler = new PackageGraphCompiler();
132
147
 
133
- const graphStarted = profileEnabled ? performance.now() : 0;
134
- const [appGraph, pkgResult] = await Promise.all([
135
- buildAppGraphForSession(session),
136
- pkgCompiler.build(ctx.dependencies, {
148
+ let appGraphMs = 0;
149
+ let packageGraphMs = 0;
150
+ const graphBuildStarted = profileEnabled ? performance.now() : 0;
151
+ const appGraphPromise = (async () => {
152
+ const started = profileEnabled ? performance.now() : 0;
153
+ const graph = await buildAppGraphForSession(session);
154
+ appGraphMs = profileEnabled ? performance.now() - started : 0;
155
+ return graph;
156
+ })();
157
+ const packageGraphPromise = (async () => {
158
+ const started = profileEnabled ? performance.now() : 0;
159
+ const result = await pkgCompiler.build(ctx.dependencies, {
137
160
  runtimeInspect: false,
138
161
  resolutionMode: "nodenext",
139
162
  cacheDir: ctx.cacheDir,
140
163
  concurrency: options.concurrency,
141
164
  lockfileHash: ctx.lockfileHash,
142
- }),
143
- ]);
144
- const graphMs = profileEnabled ? performance.now() - graphStarted : 0;
165
+ });
166
+ packageGraphMs = profileEnabled ? performance.now() - started : 0;
167
+ return result;
168
+ })();
169
+ const [appGraph, pkgResult] = await Promise.all([appGraphPromise, packageGraphPromise]);
170
+ const graphBuildMs = profileEnabled ? performance.now() - graphBuildStarted : 0;
145
171
 
146
- const classified = classifyPackages(pkgResult.graph);
172
+ const classifyStarted = profileEnabled ? performance.now() : 0;
173
+ if (profileEnabled) {
174
+ resetSignalProfile();
175
+ }
176
+ const classified = classifyPackages(pkgResult.graph, options.workspaceRoot);
177
+ const classifierSignals = profileEnabled ? getSignalProfile() : undefined;
178
+ if (profileEnabled) {
179
+ clearSignalProfile();
180
+ }
181
+ const classifyMs = profileEnabled ? performance.now() - classifyStarted : 0;
147
182
 
148
183
  const planStarted = profileEnabled ? performance.now() : 0;
149
184
  const emitPlan = plan({
@@ -160,8 +195,13 @@ async function runUnlocked(options: GenerateOptions): Promise<GenerateResult> {
160
195
  ? "dry-run"
161
196
  : "write";
162
197
 
198
+ const runtimeMatrixStarted = profileEnabled ? performance.now() : 0;
163
199
  const matrix = buildRuntimeMatrix(classified);
200
+ const runtimeMatrixMs = profileEnabled ? performance.now() - runtimeMatrixStarted : 0;
201
+ const importGuardsStarted = profileEnabled ? performance.now() : 0;
164
202
  const guardDiagnostics = checkImportGuards(appGraph.moduleGraph, matrix);
203
+ const importGuardsMs = profileEnabled ? performance.now() - importGuardsStarted : 0;
204
+ const qualityGateStarted = profileEnabled ? performance.now() : 0;
165
205
  // Import guards fail `forge check`; generate/drift only surface them as warnings.
166
206
  const guardDiagnosticsForGate =
167
207
  mode === "check"
@@ -176,6 +216,7 @@ async function runUnlocked(options: GenerateOptions): Promise<GenerateResult> {
176
216
  pkgResult.diagnostics,
177
217
  [...guardDiagnosticsForGate, ...(emitPlan.diagnostics ?? [])],
178
218
  );
219
+ const qualityGateMs = profileEnabled ? performance.now() - qualityGateStarted : 0;
179
220
 
180
221
  const emitStarted = profileEnabled ? performance.now() : 0;
181
222
  const emitResult = await emit(emitPlan, {
@@ -184,6 +225,7 @@ async function runUnlocked(options: GenerateOptions): Promise<GenerateResult> {
184
225
  });
185
226
  const emitMs = profileEnabled ? performance.now() - emitStarted : 0;
186
227
 
228
+ const postEmitStarted = profileEnabled ? performance.now() : 0;
187
229
  const warnings: Diagnostic[] = [
188
230
  ...qualityDiagnostics.filter((d) => d.severity === "warning"),
189
231
  ...emitResult.warnings,
@@ -214,30 +256,6 @@ async function runUnlocked(options: GenerateOptions): Promise<GenerateResult> {
214
256
  }
215
257
  }
216
258
 
217
- if (profileEnabled) {
218
- const totalMs = performance.now() - runStarted;
219
- recordCompileTimings({
220
- discoverMs,
221
- appGraphMs: graphMs,
222
- packageGraphMs: 0,
223
- planMs,
224
- emitMs,
225
- totalMs,
226
- });
227
- const fsProfile = getFileSystemProfile();
228
- process.stderr.write(`${formatCompileTimings({
229
- discoverMs,
230
- appGraphMs: graphMs,
231
- packageGraphMs: 0,
232
- planMs,
233
- emitMs,
234
- totalMs,
235
- })}\n`);
236
- if (fsProfile) {
237
- process.stderr.write(`${formatFileSystemProfile(fsProfile)}\n`);
238
- }
239
- }
240
-
241
259
  const driftFailure =
242
260
  options.check &&
243
261
  (emitResult.changed.length > 0 ||
@@ -257,6 +275,56 @@ async function runUnlocked(options: GenerateOptions): Promise<GenerateResult> {
257
275
  const unchanged = emitResult.unchanged.filter((path) =>
258
276
  plannedPaths.has(path),
259
277
  );
278
+ const postEmitMs = profileEnabled ? performance.now() - postEmitStarted : 0;
279
+
280
+ if (profileEnabled) {
281
+ const totalMs = performance.now() - runStarted;
282
+ const appGraphProfile = getAppGraphProfile(appGraph);
283
+ const planProfile = getPlanProfile(emitPlan);
284
+ const unaccountedMs = Math.max(
285
+ 0,
286
+ totalMs -
287
+ fastCheckMs -
288
+ sessionMs -
289
+ discoverMs -
290
+ graphBuildMs -
291
+ classifyMs -
292
+ planMs -
293
+ runtimeMatrixMs -
294
+ importGuardsMs -
295
+ qualityGateMs -
296
+ emitMs -
297
+ postEmitMs,
298
+ );
299
+ const timings = {
300
+ fastCheckMs,
301
+ sessionMs,
302
+ discoverMs,
303
+ graphBuildMs,
304
+ appGraphMs,
305
+ ...(appGraphProfile ? { appGraph: appGraphProfile } : {}),
306
+ packageGraphMs,
307
+ classifyMs,
308
+ ...(classifierSignals ? { classifierSignals } : {}),
309
+ planMs,
310
+ ...(planProfile ? { planDetail: planProfile } : {}),
311
+ runtimeMatrixMs,
312
+ importGuardsMs,
313
+ qualityGateMs,
314
+ emitMs,
315
+ postEmitMs,
316
+ unaccountedMs,
317
+ totalMs,
318
+ };
319
+ recordCompileTimings(timings);
320
+ const fsProfile = getFileSystemProfile();
321
+ if (shouldPrintCompileProfile()) {
322
+ process.stderr.write(`${formatCompileTimings(timings)}\n`);
323
+ if (fsProfile) {
324
+ process.stderr.write(`${formatFileSystemProfile(fsProfile)}\n`);
325
+ }
326
+ }
327
+ }
260
328
 
261
329
  return {
262
330
  changed,
@@ -86,6 +86,14 @@ function moduleGraphForAppGraphSnapshot(graph: AppGraph): AppGraph["moduleGraph"
86
86
  };
87
87
  }
88
88
 
89
+ export function serializeConstFromJson(
90
+ exportName: string,
91
+ serializedJson: string,
92
+ ): string {
93
+ const parsed: unknown = JSON.parse(serializedJson.trimEnd());
94
+ return `export const ${exportName} = ${JSON.stringify(parsed, null, 2)} as const;\n`;
95
+ }
96
+
89
97
  export function serializeAppGraphJson(graph: AppGraph): string {
90
98
  const payload = {
91
99
  schemaVersion: graph.schemaVersion,
@@ -100,26 +108,35 @@ export function serializeAppGraphJson(graph: AppGraph): string {
100
108
  }
101
109
 
102
110
  export function serializeAppGraphTs(graph: AppGraph): string {
103
- const parsed: unknown = JSON.parse(serializeAppGraphJson(graph).trimEnd());
104
- return `export const appGraph = ${JSON.stringify(parsed, null, 2)} as const;\n`;
111
+ return serializeConstFromJson("appGraph", serializeAppGraphJson(graph));
105
112
  }
106
113
 
107
114
  export function serializePackageGraphJson(graph: PackageGraph): string {
108
115
  return serializeCanonical(graph);
109
116
  }
110
117
 
111
- export function serializePackageGraphTs(graph: PackageGraph): string {
112
- const parsed: unknown = JSON.parse(serializePackageGraphJson(graph).trimEnd());
113
- return `export const packageGraph = ${JSON.stringify(parsed, null, 2)} as const;\n`;
118
+ export function serializePackageGraphTs(_graph: PackageGraph): string {
119
+ return [
120
+ "import packageGraphJson from \"./packageGraph.json\" with { type: \"json\" };",
121
+ "",
122
+ "export type PackageGraph = typeof packageGraphJson;",
123
+ "export const packageGraph = packageGraphJson;",
124
+ "",
125
+ ].join("\n");
114
126
  }
115
127
 
116
128
  export function serializeRuntimeMatrixJson(matrix: RuntimeMatrix): string {
117
129
  return serializeCanonical(matrix);
118
130
  }
119
131
 
120
- export function serializeRuntimeMatrixTs(matrix: RuntimeMatrix): string {
121
- const parsed: unknown = JSON.parse(serializeRuntimeMatrixJson(matrix).trimEnd());
122
- return `export const runtimeMatrix = ${JSON.stringify(parsed, null, 2)} as const;\n`;
132
+ export function serializeRuntimeMatrixTs(_matrix: RuntimeMatrix): string {
133
+ return [
134
+ "import runtimeMatrixJson from \"./runtimeMatrix.json\" with { type: \"json\" };",
135
+ "",
136
+ "export type RuntimeMatrix = typeof runtimeMatrixJson;",
137
+ "export const runtimeMatrix = runtimeMatrixJson;",
138
+ "",
139
+ ].join("\n");
123
140
  }
124
141
 
125
142
  export function serializeImportGuardsJson(
@@ -890,6 +907,7 @@ export function serializeSubscriptionManifestTs(
890
907
  }
891
908
 
892
909
  export function serializeApiJson(surface: ApiSurface): string {
910
+ const external = surface.external ?? { services: {}, commands: {}, queries: {} };
893
911
  return serializeCanonical({
894
912
  schemaVersion: surface.schemaVersion,
895
913
  generatorVersion: surface.generatorVersion,
@@ -899,6 +917,7 @@ export function serializeApiJson(surface: ApiSurface): string {
899
917
  liveQueries: surface.liveQueries,
900
918
  actions: surface.actions,
901
919
  workflows: surface.workflows,
920
+ external,
902
921
  });
903
922
  }
904
923
 
@@ -933,6 +952,12 @@ export function serializeReactManifestJson(
933
952
  return serializeCanonical(manifest);
934
953
  }
935
954
 
955
+ export function serializeVueManifestJson(
956
+ manifest: import("../client-sdk/build-manifest.ts").VueManifest,
957
+ ): string {
958
+ return serializeCanonical(manifest);
959
+ }
960
+
936
961
  export function serializeTestGraphJson(graph: TestGraph): string {
937
962
  return serializeCanonical(graph);
938
963
  }
@@ -3,7 +3,7 @@ import type { Dependency } from "../types/package-graph.ts";
3
3
  import type { PackageManager } from "../types/runtime.ts";
4
4
  import type { SourceFileIndex } from "./workspace-index.ts";
5
5
 
6
- export const ORCHESTRATOR_MANIFEST_VERSION = "1";
6
+ export const ORCHESTRATOR_MANIFEST_VERSION = "2";
7
7
 
8
8
  export interface DiscoverContext {
9
9
  workspaceRoot: string;
@@ -271,6 +271,7 @@ export class PackageGraphCompiler {
271
271
 
272
272
  const partialApi = {
273
273
  name: dep.name,
274
+ ...(packageJson.name && packageJson.name !== dep.name ? { packageName: packageJson.name } : {}),
274
275
  version: dep.version,
275
276
  packageManager: dep.packageManager,
276
277
  resolutionMode: opts.resolutionMode,
@@ -454,10 +455,11 @@ function portableDtsPath(dtsPath: string, dep: Pick<Dependency, "installPath" |
454
455
  }
455
456
 
456
457
  function readPackageJson(installPath: string): {
458
+ name?: string;
457
459
  exports?: unknown;
458
460
  } {
459
461
  const raw = readTextFile(join(installPath, "package.json"));
460
- return JSON.parse(raw) as { exports?: unknown };
462
+ return JSON.parse(raw) as { name?: string; exports?: unknown };
461
463
  }
462
464
 
463
465
  function resolveSandboxBackend(
@@ -1,4 +1,4 @@
1
1
  export const PACKAGE_GRAPH_SCHEMA_VERSION = "1.0.0";
2
- export const PACKAGE_ANALYZER_VERSION = "0.2.0";
2
+ export const PACKAGE_ANALYZER_VERSION = "0.2.1";
3
3
  export { GENERATOR_VERSION } from "../../version.ts";
4
4
  export const DEFAULT_PATTERN_EXPANSION_LIMIT = 50;
@@ -5,8 +5,21 @@ import { stubExportClassification } from "./capabilities-stub.ts";
5
5
  import { extractExamples, extractJsDoc } from "./jsdoc.ts";
6
6
  import { createResolutionCompilerOptions } from "./resolve.ts";
7
7
  import type { ResolutionMode } from "../types/runtime.ts";
8
+
9
+ function canonicalizeNodeModulesImportPaths(text: string): string {
10
+ return text.replace(/import\("([^"]+)"/g, (match, importPath: string) => {
11
+ const normalized = importPath.replace(/\\/g, "/");
12
+ const marker = "/node_modules/";
13
+ const markerIndex = normalized.lastIndexOf(marker);
14
+ if (markerIndex < 0) {
15
+ return match;
16
+ }
17
+ return `import("${normalized.slice(markerIndex + marker.length)}"`;
18
+ });
19
+ }
20
+
8
21
  export function normalizeSignatureText(text: string): string {
9
- return text
22
+ return canonicalizeNodeModulesImportPaths(text)
10
23
  .replace(/\r\n/g, "\n")
11
24
  .replace(/\s+/g, " ")
12
25
  .trim();
@@ -83,7 +83,10 @@ async function runInstall(
83
83
  executor: CommandExecutor,
84
84
  ): Promise<PmAddResult> {
85
85
  const ignoreScripts = opts.ignoreScripts ?? true;
86
- const argv = buildAddCommand(pm, spec, { ignoreScripts });
86
+ const argv = buildAddCommand(pm, spec, {
87
+ ignoreScripts,
88
+ workspace: opts.workspace,
89
+ });
87
90
  const lockBefore = hashLockfiles(opts.cwd, pm);
88
91
 
89
92
  const result = await executor.run(argv, { cwd: opts.cwd });
@@ -2,6 +2,7 @@ import type { PackageManager } from "../types/runtime.ts";
2
2
 
3
3
  export interface BuildAddCommandOptions {
4
4
  ignoreScripts: boolean;
5
+ workspace?: string;
5
6
  }
6
7
 
7
8
  /**
@@ -27,6 +28,9 @@ export function buildAddCommand(
27
28
  if (ignoreScripts) {
28
29
  args.push("--ignore-scripts");
29
30
  }
31
+ if (options.workspace) {
32
+ args.push("--workspace", options.workspace);
33
+ }
30
34
  return args;
31
35
  }
32
36
  case "pnpm": {
@@ -88,11 +88,40 @@ export class PackageManagerCommandError extends Error {
88
88
  }
89
89
  }
90
90
 
91
+ function quoteWindowsShellArg(arg: string): string {
92
+ if (/^[a-zA-Z0-9@._/:=-]+$/.test(arg)) {
93
+ return arg;
94
+ }
95
+ return `"${arg.replace(/(["^&|<>])/g, "^$1")}"`;
96
+ }
97
+
98
+ function spawnArgvForWindowsScript(originalArgv: string[], resolvedArgv: string[]): string[] {
99
+ const originalCommand = originalArgv[0] ?? resolvedArgv[0]!;
100
+ const command =
101
+ originalCommand.includes("\\") ||
102
+ originalCommand.includes("/") ||
103
+ isAbsolute(originalCommand)
104
+ ? resolvedArgv[0]!
105
+ : originalCommand;
106
+ const commandPart = command === originalCommand ? command : quoteWindowsShellArg(command);
107
+ const args = originalArgv.slice(1).map(quoteWindowsShellArg).join(" ");
108
+ return [
109
+ process.env.ComSpec ?? "cmd.exe",
110
+ "/d",
111
+ "/c",
112
+ `${commandPart}${args ? ` ${args}` : ""}`,
113
+ ];
114
+ }
115
+
91
116
  export const defaultCommandExecutor: CommandExecutor = {
92
117
  async run(argv, options) {
93
118
  const resolvedArgv = resolvePackageManagerArgv(argv);
119
+ const spawnArgv =
120
+ process.platform === "win32" && /\.(?:cmd|bat)$/i.test(resolvedArgv[0] ?? "")
121
+ ? spawnArgvForWindowsScript(argv, resolvedArgv)
122
+ : resolvedArgv;
94
123
  return new Promise<CommandRunResult>((resolve, reject) => {
95
- const child = spawn(resolvedArgv[0]!, resolvedArgv.slice(1), {
124
+ const child = spawn(spawnArgv[0]!, spawnArgv.slice(1), {
96
125
  cwd: options.cwd,
97
126
  env: options.env ?? process.env,
98
127
  windowsHide: true,
@@ -1,23 +1,21 @@
1
- import { join } from "node:path";
1
+ import { dirname, join, parse } from "node:path";
2
2
  import { nodeFileSystem } from "../fs/index.ts";
3
3
  import { parsePackageName } from "./parse-spec.ts";
4
4
 
5
- export function readInstalledVersion(
6
- specOrName: string,
7
- cwd: string,
8
- ): string | null {
9
- const name = parsePackageName(specOrName);
10
- const segments = name.startsWith("@")
11
- ? name.split("/")
12
- : [name];
13
- const pkgJsonPath = join(cwd, "node_modules", ...segments, "package.json");
5
+ function packageJsonPath(cwd: string, packageName: string): string {
6
+ const segments = packageName.startsWith("@")
7
+ ? packageName.split("/")
8
+ : [packageName];
9
+ return join(cwd, "node_modules", ...segments, "package.json");
10
+ }
14
11
 
15
- if (!nodeFileSystem.exists(pkgJsonPath)) {
12
+ function readVersionAt(path: string): string | null {
13
+ if (!nodeFileSystem.exists(path)) {
16
14
  return null;
17
15
  }
18
16
 
19
17
  try {
20
- const pkg = JSON.parse((nodeFileSystem.readText(pkgJsonPath) ?? "")) as {
18
+ const pkg = JSON.parse((nodeFileSystem.readText(path) ?? "")) as {
21
19
  version?: string;
22
20
  };
23
21
  return typeof pkg.version === "string" ? pkg.version : null;
@@ -25,3 +23,29 @@ export function readInstalledVersion(
25
23
  return null;
26
24
  }
27
25
  }
26
+
27
+ export function readInstalledVersion(
28
+ specOrName: string,
29
+ cwd: string,
30
+ ): string | null {
31
+ const name = parsePackageName(specOrName);
32
+ let current = cwd;
33
+ const root = parse(cwd).root;
34
+
35
+ while (true) {
36
+ const version = readVersionAt(packageJsonPath(current, name));
37
+ if (version) {
38
+ return version;
39
+ }
40
+
41
+ if (current === root) {
42
+ return null;
43
+ }
44
+
45
+ const parent = dirname(current);
46
+ if (parent === current) {
47
+ return null;
48
+ }
49
+ current = parent;
50
+ }
51
+ }