forgeos 0.1.0-alpha.0
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.
- package/.npmignore +1 -0
- package/AGENTS.md +277 -0
- package/CHANGELOG.md +8 -0
- package/CONTRIBUTING.md +58 -0
- package/README.md +377 -0
- package/bin/forge-bun.mjs +110 -0
- package/bin/forge.mjs +19 -0
- package/package.json +96 -0
- package/packages/eslint-plugin-forge/index.ts +15 -0
- package/packages/eslint-plugin-forge/package.json +10 -0
- package/packages/eslint-plugin-forge/src/check-source.ts +95 -0
- package/packages/eslint-plugin-forge/src/load-artifacts.ts +24 -0
- package/packages/eslint-plugin-forge/src/rule-no-forge-guard-violation.ts +93 -0
- package/src/forge/_generated/actionSubscriptions.json +2 -0
- package/src/forge/_generated/actionSubscriptions.ts +10 -0
- package/src/forge/_generated/agentAdapterManifest.json +2 -0
- package/src/forge/_generated/agentAdapterManifest.ts +73 -0
- package/src/forge/_generated/agentContract.json +2 -0
- package/src/forge/_generated/agentContract.ts +912 -0
- package/src/forge/_generated/agentQuickstart.md +32 -0
- package/src/forge/_generated/aiContext.ts +59 -0
- package/src/forge/_generated/aiModels.json +2 -0
- package/src/forge/_generated/aiModels.ts +35 -0
- package/src/forge/_generated/aiProviders.json +2 -0
- package/src/forge/_generated/aiProviders.ts +23 -0
- package/src/forge/_generated/aiRegistry.json +2 -0
- package/src/forge/_generated/aiRegistry.ts +29 -0
- package/src/forge/_generated/api.json +2 -0
- package/src/forge/_generated/api.ts +8 -0
- package/src/forge/_generated/appGraph.json +2 -0
- package/src/forge/_generated/appGraph.ts +14511 -0
- package/src/forge/_generated/appMap.md +35 -0
- package/src/forge/_generated/artifactManifest.json +2 -0
- package/src/forge/_generated/artifactManifest.ts +7 -0
- package/src/forge/_generated/authClaims.json +2 -0
- package/src/forge/_generated/authClaims.ts +13 -0
- package/src/forge/_generated/authConfig.json +2 -0
- package/src/forge/_generated/authConfig.ts +17 -0
- package/src/forge/_generated/authContext.ts +23 -0
- package/src/forge/_generated/authRegistry.json +2 -0
- package/src/forge/_generated/authRegistry.ts +25 -0
- package/src/forge/_generated/buildInfo.json +2 -0
- package/src/forge/_generated/buildInfo.ts +9 -0
- package/src/forge/_generated/capabilityMap.json +2 -0
- package/src/forge/_generated/capabilityMap.md +15 -0
- package/src/forge/_generated/capabilityMap.ts +17 -0
- package/src/forge/_generated/client.ts +282 -0
- package/src/forge/_generated/clientApi.ts +9 -0
- package/src/forge/_generated/clientManifest.json +2 -0
- package/src/forge/_generated/clientManifest.ts +39 -0
- package/src/forge/_generated/clientTypes.ts +78 -0
- package/src/forge/_generated/configRegistry.json +2 -0
- package/src/forge/_generated/configRegistry.ts +4 -0
- package/src/forge/_generated/dataGraph.json +2 -0
- package/src/forge/_generated/dataGraph.ts +8 -0
- package/src/forge/_generated/db.json +2 -0
- package/src/forge/_generated/db.ts +2 -0
- package/src/forge/_generated/dbSecurityManifest.json +2 -0
- package/src/forge/_generated/dbSecurityManifest.ts +15 -0
- package/src/forge/_generated/dbSessionContext.json +2 -0
- package/src/forge/_generated/dbSessionContext.ts +39 -0
- package/src/forge/_generated/deployManifest.json +2 -0
- package/src/forge/_generated/deployManifest.ts +14 -0
- package/src/forge/_generated/devManifest.json +2 -0
- package/src/forge/_generated/devManifest.ts +47 -0
- package/src/forge/_generated/envSchema.json +2 -0
- package/src/forge/_generated/envSchema.ts +59 -0
- package/src/forge/_generated/frontendGraph.json +2 -0
- package/src/forge/_generated/frontendGraph.ts +27 -0
- package/src/forge/_generated/importGuards.json +2 -0
- package/src/forge/_generated/importGuards.ts +652 -0
- package/src/forge/_generated/index.ts +67 -0
- package/src/forge/_generated/liveProductionManifest.json +2 -0
- package/src/forge/_generated/liveProductionManifest.ts +23 -0
- package/src/forge/_generated/liveProtocol.json +2 -0
- package/src/forge/_generated/liveProtocol.ts +21 -0
- package/src/forge/_generated/liveQueryRegistry.json +2 -0
- package/src/forge/_generated/liveQueryRegistry.ts +9 -0
- package/src/forge/_generated/liveTransportConfig.json +2 -0
- package/src/forge/_generated/liveTransportConfig.ts +19 -0
- package/src/forge/_generated/makeRegistry.json +2 -0
- package/src/forge/_generated/makeRegistry.ts +163 -0
- package/src/forge/_generated/makeTemplates.json +2 -0
- package/src/forge/_generated/makeTemplates.ts +61 -0
- package/src/forge/_generated/mockMap.json +2 -0
- package/src/forge/_generated/mockMap.ts +7 -0
- package/src/forge/_generated/operationPlaybooks.md +145 -0
- package/src/forge/_generated/packageGraph.json +2 -0
- package/src/forge/_generated/packageGraph.ts +168569 -0
- package/src/forge/_generated/packageUpgradeRegistry.json +2 -0
- package/src/forge/_generated/packageUpgradeRegistry.ts +15 -0
- package/src/forge/_generated/permissionMatrix.json +2 -0
- package/src/forge/_generated/permissionMatrix.ts +7 -0
- package/src/forge/_generated/policyRegistry.json +2 -0
- package/src/forge/_generated/policyRegistry.ts +11 -0
- package/src/forge/_generated/queryRegistry.json +2 -0
- package/src/forge/_generated/queryRegistry.ts +9 -0
- package/src/forge/_generated/react.d.ts +22 -0
- package/src/forge/_generated/react.ts +29 -0
- package/src/forge/_generated/reactManifest.json +2 -0
- package/src/forge/_generated/reactManifest.ts +19 -0
- package/src/forge/_generated/releaseManifest.json +2 -0
- package/src/forge/_generated/releaseManifest.ts +25 -0
- package/src/forge/_generated/rlsPolicies.json +2 -0
- package/src/forge/_generated/rlsPolicies.sql +34 -0
- package/src/forge/_generated/rlsPolicies.ts +6 -0
- package/src/forge/_generated/runtimeGraph.json +2 -0
- package/src/forge/_generated/runtimeGraph.ts +8 -0
- package/src/forge/_generated/runtimeMatrix.json +2 -0
- package/src/forge/_generated/runtimeMatrix.ts +229125 -0
- package/src/forge/_generated/runtimeRegistry.ts +2 -0
- package/src/forge/_generated/runtimeRules.md +79 -0
- package/src/forge/_generated/secretRegistry.json +2 -0
- package/src/forge/_generated/secretRegistry.ts +50 -0
- package/src/forge/_generated/secretsContext.ts +11 -0
- package/src/forge/_generated/serverApi.ts +10 -0
- package/src/forge/_generated/sourceMapManifest.json +2 -0
- package/src/forge/_generated/sourceMapManifest.ts +7 -0
- package/src/forge/_generated/sqlPlan.json +2 -0
- package/src/forge/_generated/sqlPlan.ts +88 -0
- package/src/forge/_generated/subscriptionManifest.json +2 -0
- package/src/forge/_generated/subscriptionManifest.ts +7 -0
- package/src/forge/_generated/symbolicationManifest.json +2 -0
- package/src/forge/_generated/symbolicationManifest.ts +17 -0
- package/src/forge/_generated/telemetryRegistry.json +2 -0
- package/src/forge/_generated/telemetryRegistry.ts +9 -0
- package/src/forge/_generated/telemetrySinks.json +2 -0
- package/src/forge/_generated/telemetrySinks.ts +11 -0
- package/src/forge/_generated/tenantScope.json +2 -0
- package/src/forge/_generated/tenantScope.ts +8 -0
- package/src/forge/_generated/testGraph.json +2 -0
- package/src/forge/_generated/testGraph.ts +3054 -0
- package/src/forge/_generated/testPlanRegistry.json +2 -0
- package/src/forge/_generated/testPlanRegistry.ts +33 -0
- package/src/forge/_generated/uiRoutes.json +2 -0
- package/src/forge/_generated/uiRoutes.ts +16 -0
- package/src/forge/_generated/uiScenarios.json +2 -0
- package/src/forge/_generated/uiScenarios.ts +30 -0
- package/src/forge/_generated/uiTestManifest.json +2 -0
- package/src/forge/_generated/uiTestManifest.ts +27 -0
- package/src/forge/_generated/workflowRegistry.json +2 -0
- package/src/forge/_generated/workflowRegistry.ts +9 -0
- package/src/forge/_generated/workflowSubscriptions.json +2 -0
- package/src/forge/_generated/workflowSubscriptions.ts +10 -0
- package/src/forge/agent-adapters/index.ts +1002 -0
- package/src/forge/agent-adapters/types.ts +135 -0
- package/src/forge/cli/agent-contract.ts +50 -0
- package/src/forge/cli/ai.ts +148 -0
- package/src/forge/cli/auth.ts +198 -0
- package/src/forge/cli/build.ts +105 -0
- package/src/forge/cli/bun-exec.ts +4 -0
- package/src/forge/cli/commands.ts +1130 -0
- package/src/forge/cli/db.ts +316 -0
- package/src/forge/cli/deps.ts +277 -0
- package/src/forge/cli/dev.ts +529 -0
- package/src/forge/cli/doctor.ts +209 -0
- package/src/forge/cli/feature.ts +485 -0
- package/src/forge/cli/index.ts +25 -0
- package/src/forge/cli/lint-forge.ts +119 -0
- package/src/forge/cli/live.ts +179 -0
- package/src/forge/cli/main.ts +92 -0
- package/src/forge/cli/make.ts +133 -0
- package/src/forge/cli/new.ts +505 -0
- package/src/forge/cli/outbox.ts +297 -0
- package/src/forge/cli/output.ts +114 -0
- package/src/forge/cli/parse.ts +2211 -0
- package/src/forge/cli/policy.ts +204 -0
- package/src/forge/cli/query.ts +91 -0
- package/src/forge/cli/refactor.ts +221 -0
- package/src/forge/cli/release.ts +285 -0
- package/src/forge/cli/rls.ts +322 -0
- package/src/forge/cli/run.ts +76 -0
- package/src/forge/cli/secrets.ts +274 -0
- package/src/forge/cli/self-host.ts +468 -0
- package/src/forge/cli/serve.ts +93 -0
- package/src/forge/cli/telemetry.ts +219 -0
- package/src/forge/cli/verify.ts +587 -0
- package/src/forge/cli/version.ts +1 -0
- package/src/forge/cli/windows.ts +413 -0
- package/src/forge/cli/worker.ts +87 -0
- package/src/forge/cli/workflow.ts +424 -0
- package/src/forge/compiler/action-subscriptions/build.ts +116 -0
- package/src/forge/compiler/action-subscriptions/constants.ts +2 -0
- package/src/forge/compiler/action-subscriptions/index.ts +6 -0
- package/src/forge/compiler/action-subscriptions/parse.ts +6 -0
- package/src/forge/compiler/agent-contract/build.ts +1651 -0
- package/src/forge/compiler/agent-contract/types.ts +326 -0
- package/src/forge/compiler/ai-registry/build.ts +165 -0
- package/src/forge/compiler/ai-registry/constants.ts +2 -0
- package/src/forge/compiler/ai-registry/parse.ts +56 -0
- package/src/forge/compiler/api-surface/build.ts +107 -0
- package/src/forge/compiler/app-graph/build.ts +121 -0
- package/src/forge/compiler/app-graph/classify.ts +10 -0
- package/src/forge/compiler/app-graph/dup-symbol.ts +29 -0
- package/src/forge/compiler/app-graph/extract.ts +124 -0
- package/src/forge/compiler/app-graph/forge-apis.ts +29 -0
- package/src/forge/compiler/app-graph/index.ts +15 -0
- package/src/forge/compiler/app-graph/module-graph.ts +320 -0
- package/src/forge/compiler/app-graph/parser.ts +119 -0
- package/src/forge/compiler/app-graph/symbols.ts +48 -0
- package/src/forge/compiler/app-graph/tsconfig-hash.ts +62 -0
- package/src/forge/compiler/app-graph/types.ts +43 -0
- package/src/forge/compiler/app-graph/versions.ts +14 -0
- package/src/forge/compiler/cache/index.ts +17 -0
- package/src/forge/compiler/cache/key.ts +46 -0
- package/src/forge/compiler/cache/scheduler.ts +72 -0
- package/src/forge/compiler/cache/store.ts +78 -0
- package/src/forge/compiler/classifier/capabilities.ts +78 -0
- package/src/forge/compiler/classifier/classify.ts +113 -0
- package/src/forge/compiler/classifier/contexts.ts +188 -0
- package/src/forge/compiler/classifier/index.ts +18 -0
- package/src/forge/compiler/classifier/runtime-matrix.ts +45 -0
- package/src/forge/compiler/classifier/secrets.ts +41 -0
- package/src/forge/compiler/classifier/signals.ts +129 -0
- package/src/forge/compiler/client-sdk/build-manifest.ts +151 -0
- package/src/forge/compiler/client-sdk/render-client.ts +432 -0
- package/src/forge/compiler/data-graph/build.ts +131 -0
- package/src/forge/compiler/data-graph/constants.ts +5 -0
- package/src/forge/compiler/data-graph/index.ts +6 -0
- package/src/forge/compiler/data-graph/parse.ts +176 -0
- package/src/forge/compiler/data-graph/rls/build.ts +222 -0
- package/src/forge/compiler/data-graph/rls/types.ts +62 -0
- package/src/forge/compiler/data-graph/sql/ddl.ts +390 -0
- package/src/forge/compiler/data-graph/sql/naming.ts +10 -0
- package/src/forge/compiler/data-graph/sql/serialize.ts +85 -0
- package/src/forge/compiler/data-graph/sql/types.ts +37 -0
- package/src/forge/compiler/dev-manifest/build.ts +170 -0
- package/src/forge/compiler/dev-manifest/constants.ts +5 -0
- package/src/forge/compiler/diagnostics/codes.ts +611 -0
- package/src/forge/compiler/diagnostics/create.ts +245 -0
- package/src/forge/compiler/diagnostics/index.ts +55 -0
- package/src/forge/compiler/emitter/artifact-kind.ts +14 -0
- package/src/forge/compiler/emitter/barrel.ts +44 -0
- package/src/forge/compiler/emitter/constants.ts +7 -0
- package/src/forge/compiler/emitter/emit.ts +237 -0
- package/src/forge/compiler/emitter/index.ts +24 -0
- package/src/forge/compiler/emitter/lock.ts +62 -0
- package/src/forge/compiler/emitter/render.ts +73 -0
- package/src/forge/compiler/emitter/write.ts +35 -0
- package/src/forge/compiler/frontend-graph/build.ts +495 -0
- package/src/forge/compiler/fs/index.ts +23 -0
- package/src/forge/compiler/fs/memory.ts +233 -0
- package/src/forge/compiler/fs/node.ts +139 -0
- package/src/forge/compiler/fs/profile.ts +108 -0
- package/src/forge/compiler/fs/types.ts +52 -0
- package/src/forge/compiler/guards/artifacts.ts +96 -0
- package/src/forge/compiler/guards/check-ai-usage.ts +98 -0
- package/src/forge/compiler/guards/check-import-guards.ts +106 -0
- package/src/forge/compiler/guards/check-process-env.ts +98 -0
- package/src/forge/compiler/guards/check-query-usage.ts +76 -0
- package/src/forge/compiler/guards/index.ts +11 -0
- package/src/forge/compiler/guards/propagate-contexts.ts +57 -0
- package/src/forge/compiler/index.ts +17 -0
- package/src/forge/compiler/integration/add.ts +496 -0
- package/src/forge/compiler/integration/index.ts +17 -0
- package/src/forge/compiler/integration/plan.ts +283 -0
- package/src/forge/compiler/integration/render.ts +189 -0
- package/src/forge/compiler/integration/snapshot.ts +52 -0
- package/src/forge/compiler/integration/templates/ai.ts +131 -0
- package/src/forge/compiler/integration/templates/index.ts +8 -0
- package/src/forge/compiler/integration/templates/posthog.ts +145 -0
- package/src/forge/compiler/integration/templates/render.ts +113 -0
- package/src/forge/compiler/integration/templates/sentry.ts +151 -0
- package/src/forge/compiler/integration/templates/stripe.ts +109 -0
- package/src/forge/compiler/integration/templates/types.ts +14 -0
- package/src/forge/compiler/integration/templates/zod.ts +55 -0
- package/src/forge/compiler/live-production/types.ts +122 -0
- package/src/forge/compiler/live-query-registry/build.ts +150 -0
- package/src/forge/compiler/live-query-registry/constants.ts +2 -0
- package/src/forge/compiler/make-registry/build.ts +179 -0
- package/src/forge/compiler/orchestrator/discover.ts +214 -0
- package/src/forge/compiler/orchestrator/fast-check.ts +117 -0
- package/src/forge/compiler/orchestrator/generate-lock.ts +138 -0
- package/src/forge/compiler/orchestrator/guards.ts +5 -0
- package/src/forge/compiler/orchestrator/index.ts +27 -0
- package/src/forge/compiler/orchestrator/manifest-hashes.ts +21 -0
- package/src/forge/compiler/orchestrator/manifest.ts +92 -0
- package/src/forge/compiler/orchestrator/orphans.ts +51 -0
- package/src/forge/compiler/orchestrator/plan.ts +876 -0
- package/src/forge/compiler/orchestrator/profile.ts +36 -0
- package/src/forge/compiler/orchestrator/run.ts +277 -0
- package/src/forge/compiler/orchestrator/serialize.ts +886 -0
- package/src/forge/compiler/orchestrator/session.ts +96 -0
- package/src/forge/compiler/orchestrator/types.ts +31 -0
- package/src/forge/compiler/orchestrator/verify.ts +38 -0
- package/src/forge/compiler/orchestrator/workspace-index.ts +154 -0
- package/src/forge/compiler/package-graph/capabilities-stub.ts +33 -0
- package/src/forge/compiler/package-graph/checksum.ts +97 -0
- package/src/forge/compiler/package-graph/compiler.ts +392 -0
- package/src/forge/compiler/package-graph/constants.ts +4 -0
- package/src/forge/compiler/package-graph/dts-extractor.ts +142 -0
- package/src/forge/compiler/package-graph/exports-discovery.ts +84 -0
- package/src/forge/compiler/package-graph/extract-dts.ts +32 -0
- package/src/forge/compiler/package-graph/index.ts +33 -0
- package/src/forge/compiler/package-graph/jsdoc.ts +62 -0
- package/src/forge/compiler/package-graph/read-file.ts +21 -0
- package/src/forge/compiler/package-graph/resolve.ts +127 -0
- package/src/forge/compiler/package-manager/adapter.ts +237 -0
- package/src/forge/compiler/package-manager/bun-executable.ts +92 -0
- package/src/forge/compiler/package-manager/commands.ts +47 -0
- package/src/forge/compiler/package-manager/detect.ts +79 -0
- package/src/forge/compiler/package-manager/executor.ts +117 -0
- package/src/forge/compiler/package-manager/index.ts +22 -0
- package/src/forge/compiler/package-manager/parse-spec.ts +16 -0
- package/src/forge/compiler/package-manager/version.ts +27 -0
- package/src/forge/compiler/package-upgrades/apply.ts +195 -0
- package/src/forge/compiler/package-upgrades/comparator.ts +181 -0
- package/src/forge/compiler/package-upgrades/impact.ts +139 -0
- package/src/forge/compiler/package-upgrades/markdown.ts +97 -0
- package/src/forge/compiler/package-upgrades/planner.ts +532 -0
- package/src/forge/compiler/package-upgrades/risk.ts +208 -0
- package/src/forge/compiler/package-upgrades/types.ts +174 -0
- package/src/forge/compiler/policy-registry/build.ts +266 -0
- package/src/forge/compiler/policy-registry/constants.ts +2 -0
- package/src/forge/compiler/policy-registry/parse.ts +81 -0
- package/src/forge/compiler/primitives/compare.ts +26 -0
- package/src/forge/compiler/primitives/hash.ts +40 -0
- package/src/forge/compiler/primitives/header.ts +45 -0
- package/src/forge/compiler/primitives/index.ts +45 -0
- package/src/forge/compiler/primitives/paths.ts +24 -0
- package/src/forge/compiler/primitives/result.ts +164 -0
- package/src/forge/compiler/primitives/serialize.ts +66 -0
- package/src/forge/compiler/primitives/sort.ts +87 -0
- package/src/forge/compiler/query-registry/build.ts +114 -0
- package/src/forge/compiler/query-registry/constants.ts +2 -0
- package/src/forge/compiler/recipes/definitions.ts +289 -0
- package/src/forge/compiler/recipes/helpers.ts +37 -0
- package/src/forge/compiler/recipes/index.ts +21 -0
- package/src/forge/compiler/recipes/registry.ts +102 -0
- package/src/forge/compiler/release/build.ts +100 -0
- package/src/forge/compiler/release/types.ts +119 -0
- package/src/forge/compiler/runtime-graph/build.ts +137 -0
- package/src/forge/compiler/runtime-graph/constants.ts +5 -0
- package/src/forge/compiler/runtime-graph/index.ts +5 -0
- package/src/forge/compiler/sandbox/artifact-sanitize.ts +26 -0
- package/src/forge/compiler/sandbox/backends/child.ts +123 -0
- package/src/forge/compiler/sandbox/backends/docker.ts +173 -0
- package/src/forge/compiler/sandbox/index.ts +51 -0
- package/src/forge/compiler/sandbox/inspect.ts +143 -0
- package/src/forge/compiler/sandbox/inspector-entry.ts +115 -0
- package/src/forge/compiler/sandbox/limits.ts +31 -0
- package/src/forge/compiler/sandbox/scrub-env.ts +60 -0
- package/src/forge/compiler/sandbox/secret-scan.ts +54 -0
- package/src/forge/compiler/sandbox/serialize.ts +106 -0
- package/src/forge/compiler/sandbox/types.ts +7 -0
- package/src/forge/compiler/secret-registry/build.ts +123 -0
- package/src/forge/compiler/telemetry-registry/build.ts +89 -0
- package/src/forge/compiler/telemetry-registry/constants.ts +2 -0
- package/src/forge/compiler/telemetry-registry/parse.ts +13 -0
- package/src/forge/compiler/test-graph/build.ts +277 -0
- package/src/forge/compiler/types/action-subscriptions.ts +19 -0
- package/src/forge/compiler/types/ai-registry.ts +33 -0
- package/src/forge/compiler/types/app-graph.ts +80 -0
- package/src/forge/compiler/types/capability.ts +29 -0
- package/src/forge/compiler/types/classification.ts +9 -0
- package/src/forge/compiler/types/cli.ts +159 -0
- package/src/forge/compiler/types/data-graph.ts +24 -0
- package/src/forge/compiler/types/dev-manifest.ts +41 -0
- package/src/forge/compiler/types/diagnostic.ts +12 -0
- package/src/forge/compiler/types/emit.ts +25 -0
- package/src/forge/compiler/types/frontend-graph.ts +81 -0
- package/src/forge/compiler/types/import-guards.ts +19 -0
- package/src/forge/compiler/types/index.ts +98 -0
- package/src/forge/compiler/types/integration.ts +25 -0
- package/src/forge/compiler/types/json.ts +3 -0
- package/src/forge/compiler/types/live-query-registry.ts +32 -0
- package/src/forge/compiler/types/lock.ts +37 -0
- package/src/forge/compiler/types/package-graph.ts +84 -0
- package/src/forge/compiler/types/policy-registry.ts +69 -0
- package/src/forge/compiler/types/query-registry.ts +18 -0
- package/src/forge/compiler/types/runtime-graph.ts +30 -0
- package/src/forge/compiler/types/runtime-matrix.ts +16 -0
- package/src/forge/compiler/types/runtime.ts +30 -0
- package/src/forge/compiler/types/sandbox.ts +24 -0
- package/src/forge/compiler/types/secret-registry.ts +38 -0
- package/src/forge/compiler/types/telemetry-registry.ts +26 -0
- package/src/forge/compiler/types/test-graph.ts +45 -0
- package/src/forge/compiler/types/workflow-registry.ts +42 -0
- package/src/forge/compiler/workflow-registry/build.ts +180 -0
- package/src/forge/compiler/workflow-registry/constants.ts +2 -0
- package/src/forge/compiler/workflow-registry/index.ts +5 -0
- package/src/forge/compiler/workflow-registry/parse.ts +19 -0
- package/src/forge/dev/server.ts +1379 -0
- package/src/forge/dev/types.ts +49 -0
- package/src/forge/dev/watch.ts +109 -0
- package/src/forge/dev-console/cycle.ts +652 -0
- package/src/forge/dev-console/types.ts +99 -0
- package/src/forge/feature/compiler.ts +656 -0
- package/src/forge/feature/examples.ts +125 -0
- package/src/forge/feature/types.ts +177 -0
- package/src/forge/impact/index.ts +1160 -0
- package/src/forge/impact/types.ts +151 -0
- package/src/forge/intent/index.ts +490 -0
- package/src/forge/intent/types.ts +73 -0
- package/src/forge/make/fields.ts +146 -0
- package/src/forge/make/index.ts +1101 -0
- package/src/forge/make/naming.ts +42 -0
- package/src/forge/make/templates.ts +525 -0
- package/src/forge/make/types.ts +151 -0
- package/src/forge/platform/module.ts +20 -0
- package/src/forge/policy.ts +1 -0
- package/src/forge/react/index.ts +418 -0
- package/src/forge/refactor/index.ts +1936 -0
- package/src/forge/refactor/text-utils.ts +34 -0
- package/src/forge/refactor/types.ts +191 -0
- package/src/forge/refactor/workspace-fs.ts +171 -0
- package/src/forge/repair/index.ts +656 -0
- package/src/forge/repair/rules/index.ts +476 -0
- package/src/forge/repair/types.ts +175 -0
- package/src/forge/review/index.ts +992 -0
- package/src/forge/review/types.ts +196 -0
- package/src/forge/runtime/ai/check.ts +86 -0
- package/src/forge/runtime/ai/context.ts +394 -0
- package/src/forge/runtime/ai/cost-estimator.ts +41 -0
- package/src/forge/runtime/ai/mock.ts +49 -0
- package/src/forge/runtime/ai/providers.ts +78 -0
- package/src/forge/runtime/ai/state.ts +17 -0
- package/src/forge/runtime/ai/types.ts +67 -0
- package/src/forge/runtime/auth/authenticate.ts +58 -0
- package/src/forge/runtime/auth/claims.ts +119 -0
- package/src/forge/runtime/auth/config.ts +148 -0
- package/src/forge/runtime/auth/errors.ts +45 -0
- package/src/forge/runtime/auth/evaluate.ts +126 -0
- package/src/forge/runtime/auth/resolve.ts +74 -0
- package/src/forge/runtime/auth/types.ts +87 -0
- package/src/forge/runtime/auth/verifier.ts +138 -0
- package/src/forge/runtime/context/create-context.ts +204 -0
- package/src/forge/runtime/context/create-query-context.ts +34 -0
- package/src/forge/runtime/db/adapter.ts +31 -0
- package/src/forge/runtime/db/factory.ts +83 -0
- package/src/forge/runtime/db/generated-client.ts +294 -0
- package/src/forge/runtime/db/memory-adapter.ts +706 -0
- package/src/forge/runtime/db/migrate.ts +132 -0
- package/src/forge/runtime/db/outbox.ts +54 -0
- package/src/forge/runtime/db/pglite-adapter.ts +51 -0
- package/src/forge/runtime/db/postgres-adapter.ts +112 -0
- package/src/forge/runtime/db/read-only-client.ts +97 -0
- package/src/forge/runtime/db/session-context.ts +62 -0
- package/src/forge/runtime/executor.ts +446 -0
- package/src/forge/runtime/live/dependency-tracker.ts +57 -0
- package/src/forge/runtime/live/invalidation-log.ts +189 -0
- package/src/forge/runtime/live/live-query-runner.ts +267 -0
- package/src/forge/runtime/live/registry.ts +28 -0
- package/src/forge/runtime/live/sse.ts +75 -0
- package/src/forge/runtime/live/subscription-manager.ts +443 -0
- package/src/forge/runtime/live/types.ts +143 -0
- package/src/forge/runtime/outbox/claim.ts +153 -0
- package/src/forge/runtime/outbox/process.ts +298 -0
- package/src/forge/runtime/outbox/retry.ts +8 -0
- package/src/forge/runtime/outbox/subscriptions.ts +33 -0
- package/src/forge/runtime/outbox/types.ts +69 -0
- package/src/forge/runtime/policy/check.ts +157 -0
- package/src/forge/runtime/policy/load.ts +55 -0
- package/src/forge/runtime/query/registry.ts +19 -0
- package/src/forge/runtime/query/run-query.ts +347 -0
- package/src/forge/runtime/release/runtime.ts +322 -0
- package/src/forge/runtime/release/symbolicate.ts +175 -0
- package/src/forge/runtime/runner/command-transaction.ts +193 -0
- package/src/forge/runtime/runner/run-entry.ts +226 -0
- package/src/forge/runtime/secrets/check.ts +78 -0
- package/src/forge/runtime/secrets/create-context.ts +138 -0
- package/src/forge/runtime/secrets/env-loader.ts +94 -0
- package/src/forge/runtime/secrets/runtime-bundle.ts +47 -0
- package/src/forge/runtime/secrets/types.ts +31 -0
- package/src/forge/runtime/telemetry/buffer.ts +87 -0
- package/src/forge/runtime/telemetry/context.ts +192 -0
- package/src/forge/runtime/telemetry/correlation.ts +13 -0
- package/src/forge/runtime/telemetry/flush.ts +190 -0
- package/src/forge/runtime/telemetry/process.ts +20 -0
- package/src/forge/runtime/telemetry/scrubber.ts +115 -0
- package/src/forge/runtime/telemetry/sinks/local-jsonl.ts +39 -0
- package/src/forge/runtime/telemetry/sinks/posthog.ts +64 -0
- package/src/forge/runtime/telemetry/sinks/sentry.ts +60 -0
- package/src/forge/runtime/telemetry/spans.ts +58 -0
- package/src/forge/runtime/telemetry/types.ts +64 -0
- package/src/forge/runtime/workflows/cancel.ts +26 -0
- package/src/forge/runtime/workflows/create-run.ts +98 -0
- package/src/forge/runtime/workflows/process-run.ts +182 -0
- package/src/forge/runtime/workflows/process-step.ts +190 -0
- package/src/forge/runtime/workflows/process.ts +260 -0
- package/src/forge/runtime/workflows/registry.ts +51 -0
- package/src/forge/runtime/workflows/resolve-step.ts +46 -0
- package/src/forge/runtime/workflows/retry-run.ts +44 -0
- package/src/forge/runtime/workflows/retry.ts +8 -0
- package/src/forge/runtime/workflows/sanitize.ts +19 -0
- package/src/forge/runtime/workflows/start-from-outbox.ts +71 -0
- package/src/forge/runtime/workflows/types.ts +77 -0
- package/src/forge/server.ts +96 -0
- package/src/forge/ui/index.ts +770 -0
- package/src/forge/ui/types.ts +191 -0
- package/templates/b2b-support-web/.env.example +22 -0
- package/templates/b2b-support-web/.vscode/settings.json +14 -0
- package/templates/b2b-support-web/AGENTS.md +108 -0
- package/templates/b2b-support-web/README.md +48 -0
- package/templates/b2b-support-web/forge.config.ts +3 -0
- package/templates/b2b-support-web/package.json +34 -0
- package/templates/b2b-support-web/src/actions/captureTicketCreated.ts +14 -0
- package/templates/b2b-support-web/src/commands/closeTicket.ts +20 -0
- package/templates/b2b-support-web/src/commands/createTicket.ts +47 -0
- package/templates/b2b-support-web/src/commands/manageBilling.ts +9 -0
- package/templates/b2b-support-web/src/forge/schema.ts +35 -0
- package/templates/b2b-support-web/src/policies.ts +9 -0
- package/templates/b2b-support-web/src/queries/getTicket.ts +6 -0
- package/templates/b2b-support-web/src/queries/listTickets.ts +6 -0
- package/templates/b2b-support-web/src/queries/liveTickets.ts +9 -0
- package/templates/b2b-support-web/src/workflows/triageTicketWorkflow.ts +64 -0
- package/templates/b2b-support-web/tsconfig.json +14 -0
- package/templates/b2b-support-web/web/app/globals.css +77 -0
- package/templates/b2b-support-web/web/app/layout.tsx +13 -0
- package/templates/b2b-support-web/web/app/page.tsx +13 -0
- package/templates/b2b-support-web/web/app/providers.tsx +21 -0
- package/templates/b2b-support-web/web/app/tickets/page.tsx +21 -0
- package/templates/b2b-support-web/web/components/CreateTicketForm.tsx +43 -0
- package/templates/b2b-support-web/web/components/PolicyDeniedDemo.tsx +31 -0
- package/templates/b2b-support-web/web/components/TicketList.tsx +52 -0
- package/templates/b2b-support-web/web/components/TraceDetails.tsx +18 -0
- package/templates/b2b-support-web/web/components/TriageStatus.tsx +13 -0
- package/templates/b2b-support-web/web/lib/forge.ts +13 -0
- package/templates/b2b-support-web/web/next-env.d.ts +5 -0
- package/templates/b2b-support-web/web/next.config.ts +8 -0
- package/templates/b2b-support-web/web/package.json +21 -0
- package/templates/b2b-support-web/web/tsconfig.json +30 -0
- package/templates/minimal-web/.vscode/settings.json +14 -0
- package/templates/minimal-web/README.md +21 -0
- package/templates/minimal-web/forge.config.ts +3 -0
- package/templates/minimal-web/package.json +32 -0
- package/templates/minimal-web/src/actions/logNoteCreated.ts +11 -0
- package/templates/minimal-web/src/commands/createNote.ts +26 -0
- package/templates/minimal-web/src/forge/schema.ts +12 -0
- package/templates/minimal-web/src/policies.ts +6 -0
- package/templates/minimal-web/src/queries/listNotes.ts +8 -0
- package/templates/minimal-web/src/queries/liveNotes.ts +8 -0
- package/templates/minimal-web/tsconfig.json +15 -0
- package/templates/minimal-web/web/index.html +12 -0
- package/templates/minimal-web/web/package.json +21 -0
- package/templates/minimal-web/web/src/App.tsx +89 -0
- package/templates/minimal-web/web/src/lib/forge.ts +13 -0
- package/templates/minimal-web/web/src/main.tsx +13 -0
- package/templates/minimal-web/web/src/styles.css +156 -0
- package/templates/minimal-web/web/tsconfig.json +18 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { lookupMatrixEntry } from "../../../src/forge/compiler/classifier/runtime-matrix.ts";
|
|
2
|
+
import type { ImportGuardsArtifact } from "../../../src/forge/compiler/types/import-guards.ts";
|
|
3
|
+
import type { RuntimeContext } from "../../../src/forge/compiler/types/runtime.ts";
|
|
4
|
+
import type { RuntimeMatrix } from "../../../src/forge/compiler/types/runtime-matrix.ts";
|
|
5
|
+
import { parsePackageSpecifier } from "../../../src/forge/compiler/app-graph/module-graph.ts";
|
|
6
|
+
|
|
7
|
+
export interface ForgeGuardSourceViolation {
|
|
8
|
+
packageName: string;
|
|
9
|
+
context: RuntimeContext;
|
|
10
|
+
rationale: string;
|
|
11
|
+
line: number;
|
|
12
|
+
column: number;
|
|
13
|
+
endColumn: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const IMPORT_PATTERN =
|
|
17
|
+
/(?:import\s+(?:type\s+)?(?:[\w*{}\s,]+from\s+)?|export\s+(?:type\s+)?(?:[\w*{}\s,]+from\s+)?)['"]([^'"]+)['"]|require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
|
|
18
|
+
|
|
19
|
+
function lineColumnAtOffset(
|
|
20
|
+
source: string,
|
|
21
|
+
offset: number,
|
|
22
|
+
): { line: number; column: number } {
|
|
23
|
+
const before = source.slice(0, offset);
|
|
24
|
+
const lines = before.split("\n");
|
|
25
|
+
return {
|
|
26
|
+
line: lines.length,
|
|
27
|
+
column: (lines.at(-1)?.length ?? 0) + 1,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function effectiveContextsForFile(
|
|
32
|
+
file: string,
|
|
33
|
+
guards: ImportGuardsArtifact,
|
|
34
|
+
): RuntimeContext[] {
|
|
35
|
+
const normalized = file.replace(/\\/g, "/");
|
|
36
|
+
const entry = guards.moduleContexts.find(
|
|
37
|
+
(module) =>
|
|
38
|
+
module.file === normalized ||
|
|
39
|
+
normalized.endsWith(`/${module.file}`) ||
|
|
40
|
+
module.file.endsWith(normalized),
|
|
41
|
+
);
|
|
42
|
+
return entry?.effectiveContexts ?? [];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function checkSourceForgeGuards(
|
|
46
|
+
filePath: string,
|
|
47
|
+
source: string,
|
|
48
|
+
importGuards: ImportGuardsArtifact,
|
|
49
|
+
runtimeMatrix: RuntimeMatrix,
|
|
50
|
+
): ForgeGuardSourceViolation[] {
|
|
51
|
+
const effectiveContexts = effectiveContextsForFile(filePath, importGuards);
|
|
52
|
+
if (effectiveContexts.length === 0) {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const violations: ForgeGuardSourceViolation[] = [];
|
|
57
|
+
|
|
58
|
+
for (const match of source.matchAll(IMPORT_PATTERN)) {
|
|
59
|
+
const specifier = match[1] ?? match[2];
|
|
60
|
+
if (!specifier) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const parsed = parsePackageSpecifier(specifier);
|
|
65
|
+
if (!parsed) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const matrixEntry = lookupMatrixEntry(runtimeMatrix, parsed.packageName);
|
|
70
|
+
if (matrixEntry == null) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const offset = match.index ?? 0;
|
|
75
|
+
const start = lineColumnAtOffset(source, offset);
|
|
76
|
+
const endColumn = start.column + match[0].length;
|
|
77
|
+
|
|
78
|
+
for (const context of effectiveContexts) {
|
|
79
|
+
if (!matrixEntry.compatible.includes(context)) {
|
|
80
|
+
violations.push({
|
|
81
|
+
packageName: parsed.packageName,
|
|
82
|
+
context,
|
|
83
|
+
rationale:
|
|
84
|
+
matrixEntry.rationale[context] ??
|
|
85
|
+
"package is incompatible with this runtime context",
|
|
86
|
+
line: start.line,
|
|
87
|
+
column: start.column,
|
|
88
|
+
endColumn,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return violations;
|
|
95
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { stripDeterministicHeader } from "../../../src/forge/compiler/primitives/header.ts";
|
|
3
|
+
import type { ImportGuardsArtifact } from "../../../src/forge/compiler/types/import-guards.ts";
|
|
4
|
+
import type { RuntimeMatrix } from "../../../src/forge/compiler/types/runtime-matrix.ts";
|
|
5
|
+
|
|
6
|
+
export interface ForgeGuardArtifacts {
|
|
7
|
+
importGuards: ImportGuardsArtifact;
|
|
8
|
+
runtimeMatrix: RuntimeMatrix;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function parseGeneratedJson<T>(path: string): T {
|
|
12
|
+
const raw = stripDeterministicHeader(readFileSync(path, "utf8"));
|
|
13
|
+
return JSON.parse(raw) as T;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function loadForgeGuardArtifacts(
|
|
17
|
+
importGuardsPath: string,
|
|
18
|
+
runtimeMatrixPath: string,
|
|
19
|
+
): ForgeGuardArtifacts {
|
|
20
|
+
const importGuards = parseGeneratedJson<ImportGuardsArtifact>(importGuardsPath);
|
|
21
|
+
const runtimeMatrix = parseGeneratedJson<RuntimeMatrix>(runtimeMatrixPath);
|
|
22
|
+
|
|
23
|
+
return { importGuards, runtimeMatrix };
|
|
24
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { ForgeGuardArtifacts } from "./load-artifacts.ts";
|
|
2
|
+
import { loadForgeGuardArtifacts } from "./load-artifacts.ts";
|
|
3
|
+
import {
|
|
4
|
+
checkSourceForgeGuards,
|
|
5
|
+
type ForgeGuardSourceViolation,
|
|
6
|
+
} from "./check-source.ts";
|
|
7
|
+
|
|
8
|
+
export interface ForgeEslintSettings {
|
|
9
|
+
importGuardsPath?: string;
|
|
10
|
+
runtimeMatrixPath?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface ForgeEslintContext {
|
|
14
|
+
filename: string;
|
|
15
|
+
sourceCode: string;
|
|
16
|
+
settings?: { forge?: ForgeEslintSettings };
|
|
17
|
+
report: (descriptor: {
|
|
18
|
+
message: string;
|
|
19
|
+
line: number;
|
|
20
|
+
column: number;
|
|
21
|
+
endColumn: number;
|
|
22
|
+
}) => void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
let cachedArtifacts: ForgeGuardArtifacts | null = null;
|
|
26
|
+
let cachedKey = "";
|
|
27
|
+
|
|
28
|
+
function resolveArtifacts(context: ForgeEslintContext): ForgeGuardArtifacts | null {
|
|
29
|
+
const forgeSettings = context.settings?.forge;
|
|
30
|
+
const importGuardsPath = forgeSettings?.importGuardsPath;
|
|
31
|
+
const runtimeMatrixPath = forgeSettings?.runtimeMatrixPath;
|
|
32
|
+
|
|
33
|
+
if (!importGuardsPath || !runtimeMatrixPath) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const key = `${importGuardsPath}|${runtimeMatrixPath}`;
|
|
38
|
+
if (cachedArtifacts && cachedKey === key) {
|
|
39
|
+
return cachedArtifacts;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
cachedArtifacts = loadForgeGuardArtifacts(importGuardsPath, runtimeMatrixPath);
|
|
43
|
+
cachedKey = key;
|
|
44
|
+
return cachedArtifacts;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function runForgeGuardRule(context: ForgeEslintContext): void {
|
|
48
|
+
const artifacts = resolveArtifacts(context);
|
|
49
|
+
if (!artifacts) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const violations = checkSourceForgeGuards(
|
|
54
|
+
context.filename,
|
|
55
|
+
context.sourceCode,
|
|
56
|
+
artifacts.importGuards,
|
|
57
|
+
artifacts.runtimeMatrix,
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
for (const violation of violations) {
|
|
61
|
+
context.report({
|
|
62
|
+
message: `'${violation.packageName}' is not allowed in '${violation.context}' context: ${violation.rationale}`,
|
|
63
|
+
line: violation.line,
|
|
64
|
+
column: violation.column,
|
|
65
|
+
endColumn: violation.endColumn,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function formatViolationMessage(violation: ForgeGuardSourceViolation): string {
|
|
71
|
+
return `'${violation.packageName}' is not allowed in '${violation.context}' context: ${violation.rationale}`;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export const forgeGuardRuleDefinition = {
|
|
75
|
+
meta: {
|
|
76
|
+
type: "problem" as const,
|
|
77
|
+
docs: {
|
|
78
|
+
description:
|
|
79
|
+
"Disallow package imports incompatible with Forge effective runtime contexts",
|
|
80
|
+
},
|
|
81
|
+
schema: [],
|
|
82
|
+
messages: {
|
|
83
|
+
violation: "{{message}}",
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
create(context: ForgeEslintContext) {
|
|
87
|
+
return {
|
|
88
|
+
Program() {
|
|
89
|
+
runForgeGuardRule(context);
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @forge-generated generator=0.0.0 input=eb8d78e749f083957f69f7f316aa4efc3faf5ccd81ff63e3cf32bf7fb7f705ac content=8b0157f6f5ada213d0614d45aea3535d310f4aa74afce62dd6144a50d90375b2
|
|
2
|
+
{"analyzerVersion":"0.1.0","byEvent":{},"diagnostics":[],"generatorVersion":"0.0.0","inputHash":"dd356f5b886d56bc39e3633c018d348746ab64c4d5e7778b0ba47687e421f568","schemaVersion":"0.1.0","subscriptions":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// @forge-generated generator=0.0.0 input=eb8d78e749f083957f69f7f316aa4efc3faf5ccd81ff63e3cf32bf7fb7f705ac content=3651d5984e70296e09aab8a2ece35bceb207fecb9548fc9ac3067c091188f098
|
|
2
|
+
export const actionSubscriptions = {
|
|
3
|
+
"analyzerVersion": "0.1.0",
|
|
4
|
+
"byEvent": {},
|
|
5
|
+
"diagnostics": [],
|
|
6
|
+
"generatorVersion": "0.0.0",
|
|
7
|
+
"inputHash": "dd356f5b886d56bc39e3633c018d348746ab64c4d5e7778b0ba47687e421f568",
|
|
8
|
+
"schemaVersion": "0.1.0",
|
|
9
|
+
"subscriptions": []
|
|
10
|
+
} as const;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @forge-generated generator=0.0.0 input=6b855b87f2f57fce3e0939076b81cc0263cccfeae7bb969d2662613867b1c8ee content=31b6d77c832d71d7b897e35d7bd415732db0f5d1ddb9168abf92938beb22deb4
|
|
2
|
+
{"generatorVersion":"0.0.0","schemaVersion":"0.1.0","sourceHash":"sha256:837cea11273ca7d9149ffc0f3e6f52b1f754f498b6ab4604e8090b8ed59ade89","targets":[{"adapterVersion":"agent-adapter-0.1.0","default":true,"files":["AGENTS.md",".forge/agent/context.json",".forge/agent/commands.json",".forge/agent/done-criteria.json",".forge/agent/playbooks/add-command.md",".forge/agent/playbooks/add-query.md",".forge/agent/playbooks/add-livequery.md",".forge/agent/playbooks/add-resource.md",".forge/agent/playbooks/refactor-field.md",".forge/agent/playbooks/fix-policy-denied.md",".forge/agent/playbooks/fix-guard-violation.md",".forge/agent/playbooks/upgrade-package.md",".forge/agent/playbooks/debug-trace.md",".forge/agent/playbooks/frontend-change.md",".forge/agent/playbooks/self-host-check.md"],"formatVersion":"2026-06","name":"generic"},{"adapterVersion":"agent-adapter-0.1.0","files":[".codex/skills/forge-add-command/SKILL.md",".codex/skills/forge-add-resource/SKILL.md",".codex/skills/forge-fix-guard-violation/SKILL.md",".codex/skills/forge-fix-policy-denied/SKILL.md",".codex/skills/forge-upgrade-package/SKILL.md",".codex/skills/forge-debug-trace/SKILL.md",".codex/agents/forge-explorer.toml",".codex/agents/forge-worker.toml",".codex/agents/forge-reviewer.toml",".codex/agents/forge-security.toml"],"formatVersion":"2026-06","name":"codex","optional":true},{"adapterVersion":"agent-adapter-0.1.0","files":[".cursor/rules/forge-runtime.mdc",".cursor/rules/forge-frontend.mdc",".cursor/rules/forge-security.mdc",".cursor/rules/forge-workflow.mdc"],"formatVersion":"2026-06","name":"cursor","optional":true},{"adapterVersion":"agent-adapter-0.1.0","files":["CLAUDE.md",".claude/forge-runtime.md",".claude/forge-playbooks.md",".claude/forge-security.md"],"formatVersion":"2026-06","name":"claude","optional":true}]}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// @forge-generated generator=0.0.0 input=6b855b87f2f57fce3e0939076b81cc0263cccfeae7bb969d2662613867b1c8ee content=f171fc557de10137021c564e631f2cd7e3a38bf599bd6f9a884ac1091559a1b5
|
|
2
|
+
export const agentAdapterManifest = {
|
|
3
|
+
"generatorVersion": "0.0.0",
|
|
4
|
+
"schemaVersion": "0.1.0",
|
|
5
|
+
"sourceHash": "sha256:837cea11273ca7d9149ffc0f3e6f52b1f754f498b6ab4604e8090b8ed59ade89",
|
|
6
|
+
"targets": [
|
|
7
|
+
{
|
|
8
|
+
"adapterVersion": "agent-adapter-0.1.0",
|
|
9
|
+
"default": true,
|
|
10
|
+
"files": [
|
|
11
|
+
"AGENTS.md",
|
|
12
|
+
".forge/agent/context.json",
|
|
13
|
+
".forge/agent/commands.json",
|
|
14
|
+
".forge/agent/done-criteria.json",
|
|
15
|
+
".forge/agent/playbooks/add-command.md",
|
|
16
|
+
".forge/agent/playbooks/add-query.md",
|
|
17
|
+
".forge/agent/playbooks/add-livequery.md",
|
|
18
|
+
".forge/agent/playbooks/add-resource.md",
|
|
19
|
+
".forge/agent/playbooks/refactor-field.md",
|
|
20
|
+
".forge/agent/playbooks/fix-policy-denied.md",
|
|
21
|
+
".forge/agent/playbooks/fix-guard-violation.md",
|
|
22
|
+
".forge/agent/playbooks/upgrade-package.md",
|
|
23
|
+
".forge/agent/playbooks/debug-trace.md",
|
|
24
|
+
".forge/agent/playbooks/frontend-change.md",
|
|
25
|
+
".forge/agent/playbooks/self-host-check.md"
|
|
26
|
+
],
|
|
27
|
+
"formatVersion": "2026-06",
|
|
28
|
+
"name": "generic"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"adapterVersion": "agent-adapter-0.1.0",
|
|
32
|
+
"files": [
|
|
33
|
+
".codex/skills/forge-add-command/SKILL.md",
|
|
34
|
+
".codex/skills/forge-add-resource/SKILL.md",
|
|
35
|
+
".codex/skills/forge-fix-guard-violation/SKILL.md",
|
|
36
|
+
".codex/skills/forge-fix-policy-denied/SKILL.md",
|
|
37
|
+
".codex/skills/forge-upgrade-package/SKILL.md",
|
|
38
|
+
".codex/skills/forge-debug-trace/SKILL.md",
|
|
39
|
+
".codex/agents/forge-explorer.toml",
|
|
40
|
+
".codex/agents/forge-worker.toml",
|
|
41
|
+
".codex/agents/forge-reviewer.toml",
|
|
42
|
+
".codex/agents/forge-security.toml"
|
|
43
|
+
],
|
|
44
|
+
"formatVersion": "2026-06",
|
|
45
|
+
"name": "codex",
|
|
46
|
+
"optional": true
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"adapterVersion": "agent-adapter-0.1.0",
|
|
50
|
+
"files": [
|
|
51
|
+
".cursor/rules/forge-runtime.mdc",
|
|
52
|
+
".cursor/rules/forge-frontend.mdc",
|
|
53
|
+
".cursor/rules/forge-security.mdc",
|
|
54
|
+
".cursor/rules/forge-workflow.mdc"
|
|
55
|
+
],
|
|
56
|
+
"formatVersion": "2026-06",
|
|
57
|
+
"name": "cursor",
|
|
58
|
+
"optional": true
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"adapterVersion": "agent-adapter-0.1.0",
|
|
62
|
+
"files": [
|
|
63
|
+
"CLAUDE.md",
|
|
64
|
+
".claude/forge-runtime.md",
|
|
65
|
+
".claude/forge-playbooks.md",
|
|
66
|
+
".claude/forge-security.md"
|
|
67
|
+
],
|
|
68
|
+
"formatVersion": "2026-06",
|
|
69
|
+
"name": "claude",
|
|
70
|
+
"optional": true
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
} as const;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @forge-generated generator=0.0.0 input=6b855b87f2f57fce3e0939076b81cc0263cccfeae7bb969d2662613867b1c8ee content=837cea11273ca7d9149ffc0f3e6f52b1f754f498b6ab4604e8090b8ed59ade89
|
|
2
|
+
{"actions":[],"ai":{"generations":[],"providers":["anthropic","gateway","openai"]},"auth":{"bearerTokenHeader":"Authorization","claims":{"email":"email","name":"name","permissions":"permissions","role":"role","roles":"roles","tenantId":"tenant_id","userId":"sub"},"defaultMode":"dev-headers","env":{"algorithms":"FORGE_AUTH_ALGORITHMS","audience":"FORGE_AUTH_AUDIENCE","issuer":"FORGE_AUTH_ISSUER","jwksUri":"FORGE_AUTH_JWKS_URI","mode":"FORGE_AUTH_MODE"},"modes":["dev-headers","jwt","oidc","disabled"],"productionDefaultAllowed":false,"requiresTenant":false},"client":{"commands":[],"liveQueries":[],"queries":[],"reactHooks":["ForgeProvider","useForgeClient","useAuth","useQuery","useCommand","useLiveQuery"],"transport":{"commands":"POST /commands/:name","liveQueries":"GET /live/:name","queries":"POST /queries/:name"}},"commands":[],"commandsToRun":{"afterEditing":["forge generate","forge check","forge verify --standard","forge verify --strict"],"beforeEditing":["forge do inspect --json","forge dev --once --json","forge inspect all --json","forge check --json"],"dev":["forge dev","forge dev --once --json","forge do fix --json","forge do verify --json","forge dev --api-only","forge dev --web-only"]},"data":{"tables":[]},"deploy":{"files":["deploy/docker-compose.yml","deploy/.env.example","deploy/deployManifest.json"],"selfHost":true},"frontend":{"bridgeFiles":[],"clientBindings":[],"componentBindings":[],"components":[],"diagnostics":[],"framework":"none","present":false,"providers":[],"routeBindings":[],"routes":[],"runtimeEndpoints":[],"webManifest":{"bridge":{"files":[],"valid":false},"env":{"apiUrl":"NEXT_PUBLIC_FORGE_URL"},"framework":"none","present":false,"scripts":{},"urls":{"api":"http://127.0.0.1:3765"}}},"generatorVersion":"0.0.0","integrations":[{"alias":"ai-gateway","allowedContexts":["server","action","workflow","endpoint","test","build"],"deniedContexts":["shared","client","query","liveQuery","command","edge"],"packages":["ai"],"secrets":["AI_GATEWAY_API_KEY"]},{"alias":"ai-provider-anthropic","allowedContexts":["server","action","workflow","endpoint","test","build"],"deniedContexts":["shared","client","query","liveQuery","command","edge"],"packages":["@ai-sdk/anthropic"],"secrets":["ANTHROPIC_API_KEY"]},{"alias":"ai-provider-openai","allowedContexts":["server","action","workflow","endpoint","test","build"],"deniedContexts":["shared","client","query","liveQuery","command","edge"],"packages":["@ai-sdk/openai"],"secrets":["OPENAI_API_KEY"]},{"alias":"zod","allowedContexts":["shared","client","server","query","liveQuery","command","action","workflow","endpoint","edge","test","build"],"deniedContexts":[],"packages":["zod"],"secrets":[]}],"liveQueries":[],"packages":[{"allowedContexts":["server","action","workflow","endpoint","test","build"],"deniedContexts":["shared","client","query","liveQuery","command","edge"],"name":"@ai-sdk/anthropic","version":"2.0.81"},{"allowedContexts":["server","action","workflow","endpoint","test","build"],"deniedContexts":["shared","client","query","liveQuery","command","edge"],"name":"@ai-sdk/openai","version":"2.0.106"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"@changesets/changelog-github","version":"0.7.0"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"@changesets/cli","version":"2.31.0"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"@electric-sql/pglite","version":"0.2.17"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"@types/bun","version":"1.3.14"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"@types/react","version":"19.2.17"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"@types/react-test-renderer","version":"19.1.0"},{"allowedContexts":["server","action","workflow","endpoint","test","build"],"deniedContexts":["shared","client","query","liveQuery","command","edge"],"name":"ai","version":"5.0.197"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"fast-check","version":"3.23.2"},{"allowedContexts":["client","server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","query","liveQuery","command"],"name":"jose","version":"6.2.3"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"postgres","version":"3.4.9"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"react","version":"19.2.7"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"react-test-renderer","version":"19.2.7"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"tree-sitter","version":"0.22.4"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"tree-sitter-typescript","version":"0.23.2"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"tsx","version":"4.22.4"},{"allowedContexts":["server","action","workflow","endpoint","edge","test","build"],"deniedContexts":["shared","client","query","liveQuery","command"],"name":"typescript","version":"5.9.3"},{"allowedContexts":["shared","client","server","query","liveQuery","command","action","workflow","endpoint","edge","test","build"],"deniedContexts":[],"name":"zod","version":"3.25.76"}],"playbooks":[{"steps":["Run forge do \"<objective>\" --json when the next command is not obvious.","Use forge do fix --json for failures, forge do verify --json before handoff, and forge do connect-ui --json for frontend wiring.","Follow the returned plan, filesToInspect, risks, and nextAction before using lower-level commands directly."],"title":"Choose the right workflow"},{"steps":["Add a file under src/commands.","Declare auth with can(\"policy.name\") unless intentionally public/system.","Use ctx.db for transactional writes.","Use ctx.emit for side effects.","Run forge generate.","Run forge verify --strict."],"title":"Add a command"},{"steps":["Add a file under src/queries.","Keep it read-only.","Declare auth explicitly.","Run forge generate.","Run forge check."],"title":"Add a query"},{"steps":["Add a liveQuery under src/queries.","Keep it read-only and tenant-scoped when reading tenant tables.","Run forge generate.","Use forge inspect client --json to confirm client exposure."],"title":"Add a liveQuery"},{"steps":["Run forge live status --json.","Run forge live invalidations list --json and confirm the table and tenant changed.","Run forge live debug <subscriptionId> --json when a subscription id is available.","Check that _forge_live_invalidations has revisions newer than the last sent snapshot.","Reconnect with Last-Event-ID or ?lastRevision=<revision> to verify resume behavior."],"title":"Debug a stale liveQuery"},{"steps":["Edit src/forge/schema.ts.","Include tenantId for tenant-scoped data.","Run forge generate.","Run forge db diff.","Run forge verify --strict."],"title":"Add a table"},{"steps":["Run forge make resource <name> --fields name:type,status:enum(open,closed) --dry-run --json.","Review the plan and diagnostics.","Run forge make resource <name> --fields name:type --with-ui --yes when the resource should be visible in the web app.","Run forge generate.","Run forge verify --strict."],"title":"Scaffold a resource"},{"steps":["Write a JSON blueprint under .forge/blueprints.","Run forge feature validate <blueprint> --json.","Run forge feature plan <blueprint>.","Review the plan, impact, and risk.","Run forge feature apply <blueprint> --yes.","Run forge verify --strict."],"title":"Apply a feature blueprint"},{"steps":["Run forge refactor rename field <table.field> <table.field> --dry-run --json.","Rename codemods are AST-aware for extract-action, rename field, and rename table.","Field renames are scoped to the target table, so tickets.priority only rewrites references linked to tickets.","Review filesToModify, migrationPlan, diagnostics, and risk.","Use --allow-high-risk only for intentional high-risk refactors.","Apply with forge refactor rename field <table.field> <table.field> --yes.","Run forge generate.","Run forge verify --strict."],"title":"Safely refactor a feature"},{"steps":["Run forge impact --changed --json.","Run forge test plan --changed --json.","Run forge test run --changed --timeout-ms 120000 --json for targeted checks.","Use forge verify --changed for the fast impact gate.","Run forge verify --strict before final handoff."],"title":"Plan impact-based tests"},{"steps":["Run forge test run --changed --json.","Run forge repair diagnose --from-last-test-run --json.","Review the failureKind, likelyCause, suggestedRepairs, and confidence.","Apply only high-confidence repairs automatically.","Run forge verify --changed.","Run forge verify --strict before final handoff."],"title":"Repair a failing check"},{"steps":["Use forge add <alias>.","Do not install packages manually unless the architecture exception is intentional.","Run forge generate.","Run forge check."],"title":"Add a package"},{"steps":["Run forge deps upgrade-plan <package> --to latest.","Read .forge/upgrades/.../plan.md.","If risk is high, inspect affected files and generated adapters before applying.","Apply with forge deps upgrade-apply <plan>.","Finish with forge verify --strict."],"title":"Upgrade a package"},{"steps":["Capture the traceId from the response or frontend.","Run forge telemetry inspect <traceId>.","Run forge policy simulate <policy> --role <role>."],"title":"Debug a policy error"},{"steps":["Run forge dev for the full local loop: generated checks, API runtime, web app, DB, worker, watch, and startup URLs.","Run forge dev --once --json for a one-shot diagnostic cycle.","Use --api-only, --web-only, --no-watch, or --no-worker only when narrowing the loop intentionally.","When a web app exists, forge dev starts the API runtime and the web dev server together and prints both URLs.","Use generated client and React hooks through web/lib/forge.ts."],"title":"Run dev"},{"steps":["Run forge make ui --framework vite --dry-run --json when the app does not have a web root.","Use web/lib/forge.ts as the generated client bridge.","Mount ForgeProvider once in the web app provider/layout layer; use devAuth for local development.","Use useQuery, useCommand, and useLiveQuery instead of raw /commands or /queries fetches.","Run forge generate so frontendGraph and agentContract include routes and bindings.","Run forge inspect capabilities --json to confirm UI actions map to runtime capabilities.","Run forge dev --once --json and forge doctor --json."],"title":"Add or update frontend"},{"steps":["Run forge self-host compose.","Review deploy/.env.example.","Run forge self-host check."],"title":"Self-host"},{"steps":["Run forge release inspect <releaseId> --json.","Run forge release sourcemaps symbolicate --input stacktrace.json --json.","Open the original source file and line from the symbolicated frame.","Use forge telemetry inspect <traceId> --with-release --json when a trace id is available."],"title":"Debug a production stack trace"}],"policies":[],"project":{"name":"forgeos","type":"forgeos-app"},"queries":[],"rules":[{"allowed":["ctx.db writes","ctx.emit","ctx.telemetry buffered events"],"context":"command","forbidden":["network packages","ctx.secrets","ctx.ai","process.env","filesystem access"]},{"allowed":["ctx.db reads","ctx.telemetry buffered events"],"context":"query","forbidden":["insert/update/delete","ctx.emit","ctx.secrets","ctx.ai","network integrations"]},{"allowed":["ctx.db reads","tenant-scoped subscriptions"],"context":"liveQuery","forbidden":["insert/update/delete","ctx.emit","ctx.secrets","ctx.ai","network integrations"]},{"allowed":["ctx.secrets","integrations","ctx.ai","ctx.db reads/writes","network packages"],"context":"action","forbidden":["uncommitted transactional side effects"]},{"allowed":["durable steps","ctx.secrets","integrations","ctx.ai","retries"],"context":"workflow","forbidden":["non-idempotent step behavior without guards"]}],"schemaVersion":"0.1.0","secrets":[{"allowedContexts":["server","action","workflow","endpoint","test","build"],"integration":"ai-gateway","name":"AI_GATEWAY_API_KEY","public":false,"required":true},{"allowedContexts":["server","action","workflow","endpoint","test","build"],"integration":"ai-provider-anthropic","name":"ANTHROPIC_API_KEY","public":false,"required":true},{"allowedContexts":["server","action","workflow","endpoint","test","build"],"integration":"ai-provider-openai","name":"OPENAI_API_KEY","public":false,"required":true}],"telemetry":{"events":[],"sinks":["local"]},"workflows":[]}
|