forgeos 0.1.0-alpha.69 → 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 (280) hide show
  1. package/.agents/skills/forge-agent-fabric/SKILL.md +12 -0
  2. package/.npmignore +19 -19
  3. package/AGENTS.md +1 -1
  4. package/CHANGELOG.md +12 -3
  5. package/LICENSE +21 -21
  6. package/README.md +522 -522
  7. package/adapters/java/README.md +68 -68
  8. package/adapters/java/pom.xml +47 -47
  9. package/adapters/java/src/main/java/dev/forgeos/adapter/Auth.java +20 -20
  10. package/adapters/java/src/main/java/dev/forgeos/adapter/Diagnostic.java +16 -16
  11. package/adapters/java/src/main/java/dev/forgeos/adapter/Entry.java +38 -38
  12. package/adapters/java/src/main/java/dev/forgeos/adapter/EntryKind.java +16 -16
  13. package/adapters/java/src/main/java/dev/forgeos/adapter/ErrorInfo.java +4 -4
  14. package/adapters/java/src/main/java/dev/forgeos/adapter/Forge.java +94 -94
  15. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeCall.java +12 -12
  16. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeContext.java +11 -11
  17. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHandler.java +8 -8
  18. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHttpHandler.java +179 -179
  19. package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeRegistry.java +121 -121
  20. package/adapters/java/src/main/java/dev/forgeos/adapter/Json.java +14 -14
  21. package/adapters/java/src/main/java/dev/forgeos/adapter/Manifest.java +14 -14
  22. package/adapters/java/src/main/java/dev/forgeos/adapter/RequestEnvelope.java +6 -6
  23. package/adapters/java/src/main/java/dev/forgeos/adapter/ResponseEnvelope.java +25 -25
  24. package/adapters/java/src/main/java/dev/forgeos/adapter/Risk.java +18 -18
  25. package/adapters/java/src/main/java/dev/forgeos/adapter/Schemas.java +36 -36
  26. package/adapters/java/src/main/java/dev/forgeos/adapter/Service.java +65 -65
  27. package/adapters/java/src/main/java/dev/forgeos/adapter/TransactionMode.java +18 -18
  28. package/adapters/java/src/main/java/dev/forgeos/adapter/TypedForgeHandler.java +6 -6
  29. package/adapters/java-spring-boot-starter/README.md +32 -32
  30. package/adapters/java-spring-boot-starter/pom.xml +49 -49
  31. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeCommand.java +22 -22
  32. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeExternalService.java +15 -15
  33. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeQuery.java +16 -16
  34. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.java +18 -18
  35. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.java +16 -16
  36. package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringRuntime.java +104 -104
  37. package/adapters/java-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -1
  38. package/bin/forge.mjs +38 -38
  39. package/docs/agent-fabric-programs.md +168 -0
  40. package/docs/agent-fabric.md +16 -0
  41. package/docs/architecture/agent-fabric/README.md +28 -1
  42. package/docs/architecture/agent-fabric/REPOSITORY_MANIFEST_PLAN.md +13 -1
  43. package/docs/architecture/agent-fabric/WORKFLOW_PROGRAM_V2_ADR.md +41 -0
  44. package/docs/architecture/agent-fabric/WORKFLOW_PROGRAM_V2_EVIDENCE.md +109 -0
  45. package/docs/architecture/agent-fabric/WORKFLOW_PROGRAM_V2_PLAN.md +550 -0
  46. package/examples/agent-fabric-v2/README.md +54 -0
  47. package/examples/agent-fabric-v2/make-request.mjs +4 -0
  48. package/examples/agent-fabric-v2/migrate.workflow.ts +35 -0
  49. package/examples/agent-fabric-v2/registry.example.json +256 -0
  50. package/examples/agent-fabric-v2/workers/check.mjs +2 -0
  51. package/examples/agent-fabric-v2/workers/common.mjs +7 -0
  52. package/examples/agent-fabric-v2/workers/discover.mjs +2 -0
  53. package/examples/agent-fabric-v2/workers/migrate.mjs +4 -0
  54. package/examples/agent-fabric-v2/workers/review.mjs +3 -0
  55. package/examples/java-billing/pom.xml +60 -60
  56. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/CreateInvoiceInput.java +4 -4
  57. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Invoice.java +11 -11
  58. package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Main.java +127 -127
  59. package/package.json +7 -1
  60. package/packages/eslint-plugin-forge/index.ts +15 -15
  61. package/packages/eslint-plugin-forge/package.json +10 -10
  62. package/packages/eslint-plugin-forge/src/check-source.ts +95 -95
  63. package/packages/eslint-plugin-forge/src/load-artifacts.ts +24 -24
  64. package/packages/eslint-plugin-forge/src/rule-no-forge-guard-violation.ts +93 -93
  65. package/schemas/agent-fabric/v0.1/control-event.schema.json +281 -281
  66. package/schemas/forge-manifest.schema.json +305 -305
  67. package/scripts/field-test-forgeos.mjs +1021 -1021
  68. package/src/forge/_generated/releaseManifest.json +1 -1
  69. package/src/forge/_generated/releaseManifest.ts +3 -3
  70. package/src/forge/agent-fabric/codex-sdk-worker.ts +39 -1
  71. package/src/forge/agent-fabric/index.ts +7 -0
  72. package/src/forge/agent-fabric/local-adaptive-digest-worker.mjs +26 -26
  73. package/src/forge/agent-fabric/local-task-server.ts +335 -313
  74. package/src/forge/agent-fabric/managed-workspace.ts +5 -4
  75. package/src/forge/agent-fabric/program-contract.ts +229 -0
  76. package/src/forge/agent-fabric/program-dsl.ts +112 -0
  77. package/src/forge/agent-fabric/program-service.ts +619 -0
  78. package/src/forge/agent-fabric/program-store.ts +117 -0
  79. package/src/forge/agent-fabric/program-types.ts +98 -0
  80. package/src/forge/agent-fabric/program-worker.ts +91 -0
  81. package/src/forge/agent-memory/mcp.ts +491 -477
  82. package/src/forge/agent-memory/sources/codex-hook-runner.mjs +343 -343
  83. package/src/forge/bench.ts +154 -154
  84. package/src/forge/cair/action-journal.ts +61 -61
  85. package/src/forge/cair/action-parser.ts +314 -314
  86. package/src/forge/cair/action-validator.ts +40 -40
  87. package/src/forge/cair/actions.ts +1818 -1818
  88. package/src/forge/cair/format.ts +77 -77
  89. package/src/forge/cair/index.ts +103 -103
  90. package/src/forge/cair/query.ts +478 -478
  91. package/src/forge/cair/snapshot.ts +315 -315
  92. package/src/forge/cair/types.ts +246 -246
  93. package/src/forge/cli/ai.ts +816 -816
  94. package/src/forge/cli/codex-app-server.ts +877 -877
  95. package/src/forge/cli/fabric.ts +210 -196
  96. package/src/forge/cli/index.ts +26 -26
  97. package/src/forge/cli/main.ts +4 -0
  98. package/src/forge/cli/next-actions.ts +23 -23
  99. package/src/forge/cli/parse.ts +5 -5
  100. package/src/forge/cli/release.ts +309 -309
  101. package/src/forge/cli/self-host.ts +510 -510
  102. package/src/forge/compiler/ai-registry/parse.ts +219 -219
  103. package/src/forge/compiler/app-graph/classify.ts +10 -10
  104. package/src/forge/compiler/app-graph/dup-symbol.ts +29 -29
  105. package/src/forge/compiler/app-graph/extract.ts +231 -231
  106. package/src/forge/compiler/app-graph/forge-apis.ts +25 -25
  107. package/src/forge/compiler/app-graph/index.ts +11 -11
  108. package/src/forge/compiler/app-graph/module-graph.ts +151 -151
  109. package/src/forge/compiler/app-graph/parser.ts +71 -71
  110. package/src/forge/compiler/app-graph/symbols.ts +48 -48
  111. package/src/forge/compiler/app-graph/types.ts +43 -43
  112. package/src/forge/compiler/app-graph/versions.ts +14 -14
  113. package/src/forge/compiler/cache/index.ts +17 -17
  114. package/src/forge/compiler/cache/key.ts +46 -46
  115. package/src/forge/compiler/cache/scheduler.ts +72 -72
  116. package/src/forge/compiler/cache/store.ts +78 -78
  117. package/src/forge/compiler/classifier/capabilities.ts +64 -64
  118. package/src/forge/compiler/classifier/classify.ts +76 -76
  119. package/src/forge/compiler/classifier/contexts.ts +188 -188
  120. package/src/forge/compiler/classifier/index.ts +18 -18
  121. package/src/forge/compiler/classifier/runtime-matrix.ts +45 -45
  122. package/src/forge/compiler/classifier/secrets.ts +31 -31
  123. package/src/forge/compiler/classifier/signals.ts +95 -95
  124. package/src/forge/compiler/client-sdk/build-manifest.ts +210 -210
  125. package/src/forge/compiler/data-graph/sql/serialize.ts +89 -89
  126. package/src/forge/compiler/data-graph/sql/types.ts +38 -38
  127. package/src/forge/compiler/diagnostics/index.ts +57 -57
  128. package/src/forge/compiler/emitter/artifact-kind.ts +14 -14
  129. package/src/forge/compiler/emitter/barrel.ts +47 -47
  130. package/src/forge/compiler/emitter/constants.ts +7 -7
  131. package/src/forge/compiler/emitter/emit.ts +223 -223
  132. package/src/forge/compiler/emitter/index.ts +24 -24
  133. package/src/forge/compiler/emitter/lock.ts +61 -61
  134. package/src/forge/compiler/external-manifest/registry.ts +196 -196
  135. package/src/forge/compiler/external-manifest/types.ts +91 -91
  136. package/src/forge/compiler/external-manifest/validate.ts +373 -373
  137. package/src/forge/compiler/frontend-graph/build.ts +623 -623
  138. package/src/forge/compiler/guards/artifacts.ts +96 -96
  139. package/src/forge/compiler/guards/check-import-guards.ts +106 -106
  140. package/src/forge/compiler/guards/index.ts +11 -11
  141. package/src/forge/compiler/guards/propagate-contexts.ts +57 -57
  142. package/src/forge/compiler/index.ts +17 -17
  143. package/src/forge/compiler/integration/index.ts +17 -17
  144. package/src/forge/compiler/integration/snapshot.ts +54 -54
  145. package/src/forge/compiler/integration/templates/convex.ts +70 -70
  146. package/src/forge/compiler/orchestrator/discover.ts +214 -214
  147. package/src/forge/compiler/orchestrator/guards.ts +5 -5
  148. package/src/forge/compiler/orchestrator/index.ts +27 -27
  149. package/src/forge/compiler/orchestrator/orphans.ts +51 -51
  150. package/src/forge/compiler/orchestrator/profile.ts +23 -23
  151. package/src/forge/compiler/orchestrator/serialize.ts +979 -979
  152. package/src/forge/compiler/orchestrator/verify.ts +35 -35
  153. package/src/forge/compiler/package-graph/capabilities-stub.ts +33 -33
  154. package/src/forge/compiler/package-graph/checksum.ts +107 -107
  155. package/src/forge/compiler/package-graph/exports-discovery.ts +91 -91
  156. package/src/forge/compiler/package-graph/extract-dts.ts +32 -32
  157. package/src/forge/compiler/package-graph/index.ts +24 -24
  158. package/src/forge/compiler/package-graph/jsdoc.ts +50 -50
  159. package/src/forge/compiler/package-graph/oracle.ts +326 -326
  160. package/src/forge/compiler/package-graph/read-file.ts +21 -21
  161. package/src/forge/compiler/package-graph/resolve.ts +131 -131
  162. package/src/forge/compiler/package-manager/adapter.ts +240 -240
  163. package/src/forge/compiler/package-manager/commands.ts +51 -51
  164. package/src/forge/compiler/package-manager/detect.ts +65 -65
  165. package/src/forge/compiler/package-manager/executor.ts +146 -146
  166. package/src/forge/compiler/package-manager/index.ts +22 -22
  167. package/src/forge/compiler/package-manager/parse-spec.ts +16 -16
  168. package/src/forge/compiler/primitives/compare.ts +26 -26
  169. package/src/forge/compiler/primitives/hash.ts +29 -29
  170. package/src/forge/compiler/primitives/header.ts +43 -43
  171. package/src/forge/compiler/primitives/index.ts +45 -45
  172. package/src/forge/compiler/primitives/paths.ts +24 -24
  173. package/src/forge/compiler/primitives/serialize.ts +66 -66
  174. package/src/forge/compiler/primitives/sort.ts +87 -87
  175. package/src/forge/compiler/recipes/helpers.ts +37 -37
  176. package/src/forge/compiler/sandbox/artifact-sanitize.ts +26 -26
  177. package/src/forge/compiler/sandbox/backends/child.ts +123 -123
  178. package/src/forge/compiler/sandbox/backends/docker.ts +173 -173
  179. package/src/forge/compiler/sandbox/index.ts +51 -51
  180. package/src/forge/compiler/sandbox/inspect.ts +143 -143
  181. package/src/forge/compiler/sandbox/inspector-entry.ts +115 -115
  182. package/src/forge/compiler/sandbox/limits.ts +31 -31
  183. package/src/forge/compiler/sandbox/scrub-env.ts +60 -60
  184. package/src/forge/compiler/sandbox/secret-scan.ts +54 -54
  185. package/src/forge/compiler/sandbox/serialize.ts +106 -106
  186. package/src/forge/compiler/sandbox/types.ts +7 -7
  187. package/src/forge/compiler/test-graph/build.ts +285 -285
  188. package/src/forge/compiler/types/app-graph.ts +87 -87
  189. package/src/forge/compiler/types/capability.ts +29 -29
  190. package/src/forge/compiler/types/classification.ts +9 -9
  191. package/src/forge/compiler/types/diagnostic.ts +2 -2
  192. package/src/forge/compiler/types/frontend-graph.ts +81 -81
  193. package/src/forge/compiler/types/import-guards.ts +19 -19
  194. package/src/forge/compiler/types/index.ts +98 -98
  195. package/src/forge/compiler/types/json.ts +3 -3
  196. package/src/forge/compiler/types/lock.ts +37 -37
  197. package/src/forge/compiler/types/runtime-matrix.ts +16 -16
  198. package/src/forge/compiler/types/runtime.ts +30 -30
  199. package/src/forge/compiler/types/sandbox.ts +24 -24
  200. package/src/forge/delta/broker-runner.mjs +5 -5
  201. package/src/forge/delta/classifier.ts +52 -52
  202. package/src/forge/delta/explain.ts +238 -238
  203. package/src/forge/delta/ids.ts +40 -40
  204. package/src/forge/delta/index.ts +25 -25
  205. package/src/forge/delta/redaction.ts +50 -50
  206. package/src/forge/delta/schema.ts +135 -135
  207. package/src/forge/delta/session.ts +142 -142
  208. package/src/forge/delta/timeline.ts +178 -178
  209. package/src/forge/dev/types.ts +63 -63
  210. package/src/forge/dev/watch.ts +119 -119
  211. package/src/forge/intent/index.ts +509 -509
  212. package/src/forge/make/types.ts +153 -153
  213. package/src/forge/refactor/index.ts +1937 -1937
  214. package/src/forge/refactor/runtime-rename.ts +598 -598
  215. package/src/forge/repair/rules/index.ts +476 -476
  216. package/src/forge/repository-analysis/runtime-observation.ts +9 -0
  217. package/src/forge/review/types.ts +211 -211
  218. package/src/forge/runtime/db/generated-client.ts +305 -305
  219. package/src/forge/runtime/runner/run-entry.ts +236 -236
  220. package/src/forge/version.ts +1 -1
  221. package/templates/agent-workroom/AGENTS.md +29 -29
  222. package/templates/agent-workroom/README.md +34 -34
  223. package/templates/agent-workroom/forge.config.ts +3 -3
  224. package/templates/agent-workroom/package.json +34 -34
  225. package/templates/agent-workroom/pnpm-workspace.yaml +2 -2
  226. package/templates/agent-workroom/src/actions/indexAgentSignal.ts +10 -10
  227. package/templates/agent-workroom/src/commands/openWorkroom.ts +61 -61
  228. package/templates/agent-workroom/src/commands/recordAgentSignal.ts +119 -119
  229. package/templates/agent-workroom/src/commands/recordCheckRun.ts +52 -52
  230. package/templates/agent-workroom/src/forge/schema.ts +54 -54
  231. package/templates/agent-workroom/src/policies.ts +6 -6
  232. package/templates/agent-workroom/src/queries/listWorkrooms.ts +11 -11
  233. package/templates/agent-workroom/src/queries/liveWorkroom.ts +63 -63
  234. package/templates/agent-workroom/tsconfig.json +16 -16
  235. package/templates/agent-workroom/web/index.html +13 -13
  236. package/templates/agent-workroom/web/package.json +21 -21
  237. package/templates/agent-workroom/web/src/App.tsx +345 -345
  238. package/templates/agent-workroom/web/src/main.tsx +13 -13
  239. package/templates/agent-workroom/web/src/styles.css +545 -545
  240. package/templates/agent-workroom/web/tsconfig.json +27 -27
  241. package/templates/b2b-support-web/package.json +37 -37
  242. package/templates/b2b-support-web/pnpm-workspace.yaml +2 -2
  243. package/templates/b2b-support-web/web/package.json +20 -20
  244. package/templates/minimal-web/package.json +34 -34
  245. package/templates/minimal-web/pnpm-workspace.yaml +2 -2
  246. package/templates/minimal-web/web/index.html +13 -13
  247. package/templates/minimal-web/web/src/styles.css +190 -190
  248. package/templates/nuxt-web/.vscode/settings.json +14 -14
  249. package/templates/nuxt-web/.yarnrc.yml +1 -1
  250. package/templates/nuxt-web/README.md +30 -30
  251. package/templates/nuxt-web/forge.config.ts +3 -3
  252. package/templates/nuxt-web/package.json +37 -34
  253. package/templates/nuxt-web/pnpm-workspace.yaml +2 -2
  254. package/templates/nuxt-web/src/actions/logNoteCreated.ts +11 -11
  255. package/templates/nuxt-web/src/commands/createNote.ts +26 -26
  256. package/templates/nuxt-web/src/forge/schema.ts +12 -12
  257. package/templates/nuxt-web/src/policies.ts +6 -6
  258. package/templates/nuxt-web/src/queries/listNotes.ts +8 -8
  259. package/templates/nuxt-web/src/queries/liveNotes.ts +8 -8
  260. package/templates/nuxt-web/tsconfig.json +17 -17
  261. package/templates/nuxt-web/web/app.vue +67 -67
  262. package/templates/nuxt-web/web/components/LiveNotes.vue +89 -89
  263. package/templates/nuxt-web/web/components/NoteComposer.vue +100 -100
  264. package/templates/nuxt-web/web/composables/forge.ts +13 -13
  265. package/templates/nuxt-web/web/composables/useNotes.ts +24 -24
  266. package/templates/nuxt-web/web/nuxt.config.ts +11 -11
  267. package/templates/nuxt-web/web/package.json +22 -19
  268. package/templates/nuxt-web/web/plugins/forge.client.ts +10 -10
  269. package/templates/nuxt-web/web/plugins/forge.server.ts +10 -10
  270. package/templates/nuxt-web/web/server/api/forge-health.get.ts +7 -7
  271. package/templates/nuxt-web/web/tsconfig.json +6 -6
  272. package/templates/vendor-access/.vscode/settings.json +14 -14
  273. package/templates/vendor-access/README.md +30 -30
  274. package/templates/vendor-access/package.json +35 -35
  275. package/templates/vendor-access/pnpm-workspace.yaml +2 -2
  276. package/templates/vendor-access/tsconfig.json +17 -17
  277. package/templates/vendor-access/web/index.html +13 -13
  278. package/templates/vendor-access/web/package.json +21 -21
  279. package/templates/vendor-access/web/src/styles.css +682 -682
  280. package/templates/vendor-access/web/tsconfig.json +18 -18
@@ -1,4 +1,4 @@
1
- import type { CapabilitySet } from "../types/capability.ts";
1
+ import type { CapabilitySet } from "../types/capability.ts";
2
2
  import type { IntegrationRecipe } from "../types/integration.ts";
3
3
  import type { PackageApi } from "../types/package-graph.ts";
4
4
  import { capability, emptyCapabilitySet } from "../recipes/helpers.ts";
@@ -14,66 +14,66 @@ export function detectCapabilities(
14
14
  }
15
15
 
16
16
  const signals = precomputedSignals ?? gatherSignals(api);
17
- const caps = emptyCapabilitySet();
18
-
19
- if (signals.usesNetwork) {
20
- caps.network = capability<{ egress?: string[] }>(
21
- "required",
22
- "static",
23
- signals.networkEvidence,
24
- );
25
- } else {
26
- caps.network = capability<{ egress?: string[] }>("unknown", "static", [
27
- "static analysis cannot prove absence of network access",
28
- ]);
29
- }
30
-
31
- if (signals.usesFilesystem) {
32
- caps.filesystem = capability<{ read?: boolean; write?: boolean }>(
33
- "required",
34
- "static",
35
- signals.filesystemEvidence,
36
- {
37
- read: true,
38
- write: signals.filesystemEvidence.some((e) => /write/i.test(e)),
39
- },
40
- );
41
- } else {
42
- caps.filesystem = capability<{ read?: boolean; write?: boolean }>(
43
- "unknown",
44
- "static",
45
- ["static analysis cannot prove absence of filesystem access"],
46
- );
47
- }
48
-
49
- if (signals.usesProcess) {
50
- caps.process = capability("required", "static", signals.processEvidence);
51
- } else {
52
- caps.process = capability("unknown", "static", [
53
- "static analysis cannot prove absence of process access",
54
- ]);
55
- }
56
-
57
- if (signals.usesNativeAddon) {
58
- caps.nativeAddon = capability("required", "static", signals.nativeAddonEvidence);
59
- } else {
60
- caps.nativeAddon = capability("not-detected", "static", ["no native addon signals"]);
61
- }
62
-
63
- caps.lifecycleScripts = capability("not-detected", "rule", [
64
- "forge add disables lifecycle scripts by default",
65
- ]);
66
-
67
- return caps;
68
- }
69
-
70
- function cloneCapabilitySet(source: CapabilitySet): CapabilitySet {
71
- return {
72
- network: { ...source.network },
73
- filesystem: { ...source.filesystem },
74
- process: { ...source.process },
75
- nativeAddon: { ...source.nativeAddon },
76
- lifecycleScripts: { ...source.lifecycleScripts },
77
- secrets: [...source.secrets],
78
- };
79
- }
17
+ const caps = emptyCapabilitySet();
18
+
19
+ if (signals.usesNetwork) {
20
+ caps.network = capability<{ egress?: string[] }>(
21
+ "required",
22
+ "static",
23
+ signals.networkEvidence,
24
+ );
25
+ } else {
26
+ caps.network = capability<{ egress?: string[] }>("unknown", "static", [
27
+ "static analysis cannot prove absence of network access",
28
+ ]);
29
+ }
30
+
31
+ if (signals.usesFilesystem) {
32
+ caps.filesystem = capability<{ read?: boolean; write?: boolean }>(
33
+ "required",
34
+ "static",
35
+ signals.filesystemEvidence,
36
+ {
37
+ read: true,
38
+ write: signals.filesystemEvidence.some((e) => /write/i.test(e)),
39
+ },
40
+ );
41
+ } else {
42
+ caps.filesystem = capability<{ read?: boolean; write?: boolean }>(
43
+ "unknown",
44
+ "static",
45
+ ["static analysis cannot prove absence of filesystem access"],
46
+ );
47
+ }
48
+
49
+ if (signals.usesProcess) {
50
+ caps.process = capability("required", "static", signals.processEvidence);
51
+ } else {
52
+ caps.process = capability("unknown", "static", [
53
+ "static analysis cannot prove absence of process access",
54
+ ]);
55
+ }
56
+
57
+ if (signals.usesNativeAddon) {
58
+ caps.nativeAddon = capability("required", "static", signals.nativeAddonEvidence);
59
+ } else {
60
+ caps.nativeAddon = capability("not-detected", "static", ["no native addon signals"]);
61
+ }
62
+
63
+ caps.lifecycleScripts = capability("not-detected", "rule", [
64
+ "forge add disables lifecycle scripts by default",
65
+ ]);
66
+
67
+ return caps;
68
+ }
69
+
70
+ function cloneCapabilitySet(source: CapabilitySet): CapabilitySet {
71
+ return {
72
+ network: { ...source.network },
73
+ filesystem: { ...source.filesystem },
74
+ process: { ...source.process },
75
+ nativeAddon: { ...source.nativeAddon },
76
+ lifecycleScripts: { ...source.lifecycleScripts },
77
+ secrets: [...source.secrets],
78
+ };
79
+ }
@@ -1,32 +1,32 @@
1
- import type { CapabilitySet, SecretRequirement } from "../types/capability.ts";
2
- import type { RuntimeClassification } from "../types/classification.ts";
3
- import type { ExportClassification } from "../types/package-graph.ts";
4
- import type { IntegrationRecipe } from "../types/integration.ts";
5
- import type { PackageApi } from "../types/package-graph.ts";
6
- import { compareBytes } from "../primitives/compare.ts";
7
- import { resolveByPackageName } from "../recipes/registry.ts";
1
+ import type { CapabilitySet, SecretRequirement } from "../types/capability.ts";
2
+ import type { RuntimeClassification } from "../types/classification.ts";
3
+ import type { ExportClassification } from "../types/package-graph.ts";
4
+ import type { IntegrationRecipe } from "../types/integration.ts";
5
+ import type { PackageApi } from "../types/package-graph.ts";
6
+ import { compareBytes } from "../primitives/compare.ts";
7
+ import { resolveByPackageName } from "../recipes/registry.ts";
8
8
  import { detectCapabilities } from "./capabilities.ts";
9
9
  import { partitionContexts } from "./contexts.ts";
10
10
  import { detectSecrets } from "./secrets.ts";
11
11
  import { gatherSignals, type PackageSignals } from "./signals.ts";
12
-
13
- export interface RuntimeClassifier {
14
- classify(api: PackageApi, recipe?: IntegrationRecipe): RuntimeClassification;
15
- detectCapabilities(api: PackageApi, recipe?: IntegrationRecipe): CapabilitySet;
16
- detectSecrets(api: PackageApi, recipe?: IntegrationRecipe): SecretRequirement[];
17
- }
18
-
19
- function resolveRecipeForApi(
20
- api: PackageApi,
21
- recipe?: IntegrationRecipe,
22
- ): IntegrationRecipe | undefined {
23
- return recipe ?? resolveByPackageName(api.name) ?? undefined;
24
- }
25
-
26
- function classifyExport(
27
- api: PackageApi,
28
- entrypoint: string,
29
- exportName: string,
12
+
13
+ export interface RuntimeClassifier {
14
+ classify(api: PackageApi, recipe?: IntegrationRecipe): RuntimeClassification;
15
+ detectCapabilities(api: PackageApi, recipe?: IntegrationRecipe): CapabilitySet;
16
+ detectSecrets(api: PackageApi, recipe?: IntegrationRecipe): SecretRequirement[];
17
+ }
18
+
19
+ function resolveRecipeForApi(
20
+ api: PackageApi,
21
+ recipe?: IntegrationRecipe,
22
+ ): IntegrationRecipe | undefined {
23
+ return recipe ?? resolveByPackageName(api.name) ?? undefined;
24
+ }
25
+
26
+ function classifyExport(
27
+ api: PackageApi,
28
+ entrypoint: string,
29
+ exportName: string,
30
30
  recipe: IntegrationRecipe | undefined,
31
31
  caps: CapabilitySet,
32
32
  alias: string,
@@ -35,24 +35,24 @@ function classifyExport(
35
35
  const { compatible, incompatible } = partitionContexts(
36
36
  recipe,
37
37
  caps,
38
- signals,
39
- api.name,
40
- );
41
-
42
- return {
43
- alias,
44
- packageName: api.name,
45
- entrypoint,
46
- exportName,
47
- compatible,
48
- incompatible,
49
- capabilities: caps,
50
- };
51
- }
52
-
53
- export function classify(
54
- api: PackageApi,
55
- recipe?: IntegrationRecipe,
38
+ signals,
39
+ api.name,
40
+ );
41
+
42
+ return {
43
+ alias,
44
+ packageName: api.name,
45
+ entrypoint,
46
+ exportName,
47
+ compatible,
48
+ incompatible,
49
+ capabilities: caps,
50
+ };
51
+ }
52
+
53
+ export function classify(
54
+ api: PackageApi,
55
+ recipe?: IntegrationRecipe,
56
56
  ): RuntimeClassification {
57
57
  const resolvedRecipe = resolveRecipeForApi(api, recipe);
58
58
  const signals = gatherSignals(api);
@@ -62,17 +62,17 @@ export function classify(
62
62
  secrets: detectSecrets(api, resolvedRecipe, signals),
63
63
  };
64
64
  const alias = resolvedRecipe?.alias ?? api.name;
65
-
66
- const { compatible, incompatible, rationale } = partitionContexts(
67
- resolvedRecipe,
68
- capsWithSecrets,
69
- signals,
70
- api.name,
71
- );
72
-
73
- const perEntrypoint: ExportClassification[] = [];
74
- for (const ep of api.entrypoints) {
75
- for (const exp of ep.exports) {
65
+
66
+ const { compatible, incompatible, rationale } = partitionContexts(
67
+ resolvedRecipe,
68
+ capsWithSecrets,
69
+ signals,
70
+ api.name,
71
+ );
72
+
73
+ const perEntrypoint: ExportClassification[] = [];
74
+ for (const ep of api.entrypoints) {
75
+ for (const exp of ep.exports) {
76
76
  perEntrypoint.push(
77
77
  classifyExport(
78
78
  api,
@@ -113,25 +113,25 @@ export function classify(
113
113
  ),
114
114
  );
115
115
  }
116
-
117
- perEntrypoint.sort((a, b) => {
118
- const ep = compareBytes(a.entrypoint, b.entrypoint);
119
- if (ep !== 0) return ep;
120
- return compareBytes(a.exportName, b.exportName);
121
- });
122
-
123
- return {
124
- compatible,
125
- incompatible,
126
- rationale,
127
- perEntrypoint,
128
- };
129
- }
130
-
131
- export function createRuntimeClassifier(): RuntimeClassifier {
132
- return {
133
- classify,
134
- detectCapabilities,
135
- detectSecrets,
136
- };
137
- }
116
+
117
+ perEntrypoint.sort((a, b) => {
118
+ const ep = compareBytes(a.entrypoint, b.entrypoint);
119
+ if (ep !== 0) return ep;
120
+ return compareBytes(a.exportName, b.exportName);
121
+ });
122
+
123
+ return {
124
+ compatible,
125
+ incompatible,
126
+ rationale,
127
+ perEntrypoint,
128
+ };
129
+ }
130
+
131
+ export function createRuntimeClassifier(): RuntimeClassifier {
132
+ return {
133
+ classify,
134
+ detectCapabilities,
135
+ detectSecrets,
136
+ };
137
+ }