forgeos 0.1.0-alpha.4 → 0.1.0-alpha.40
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 +10 -0
- package/AGENTS.md +142 -90
- package/CHANGELOG.md +418 -0
- package/LICENSE +21 -0
- package/README.md +67 -8
- package/adapters/go/README.md +23 -0
- package/adapters/go/go.mod +3 -0
- package/adapters/go/http.go +149 -0
- package/adapters/go/registry.go +234 -0
- package/adapters/go/types.go +136 -0
- package/adapters/java/README.md +68 -0
- package/adapters/java/pom.xml +34 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Auth.java +20 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Diagnostic.java +16 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Entry.java +38 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/EntryKind.java +16 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ErrorInfo.java +4 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Forge.java +94 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeCall.java +12 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeContext.java +11 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHandler.java +8 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeHttpHandler.java +179 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ForgeRegistry.java +121 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Json.java +14 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Manifest.java +14 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/RequestEnvelope.java +6 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/ResponseEnvelope.java +25 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Risk.java +18 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Schemas.java +36 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/Service.java +65 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/TransactionMode.java +18 -0
- package/adapters/java/src/main/java/dev/forgeos/adapter/TypedForgeHandler.java +6 -0
- package/adapters/java-spring-boot-starter/README.md +32 -0
- package/adapters/java-spring-boot-starter/pom.xml +36 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeCommand.java +22 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeExternalService.java +15 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeQuery.java +16 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.java +18 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.java +16 -0
- package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeSpringRuntime.java +104 -0
- package/adapters/java-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
- package/bin/forge.mjs +18 -0
- package/docs/cair-protocol.md +103 -0
- package/docs/changelog.md +534 -0
- package/docs/forge-protocol.md +189 -0
- package/examples/go-billing/go.mod +7 -0
- package/examples/go-billing/main.go +120 -0
- package/examples/java-billing/pom.xml +52 -0
- package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/CreateInvoiceInput.java +4 -0
- package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Invoice.java +11 -0
- package/examples/java-billing/src/main/java/dev/forgeos/examples/billing/Main.java +127 -0
- package/package.json +31 -3
- package/schemas/forge-manifest.schema.json +57 -0
- package/src/forge/_generated/releaseManifest.json +1 -2
- package/src/forge/_generated/releaseManifest.ts +3 -3
- package/src/forge/agent-adapters/index.ts +1584 -125
- package/src/forge/agent-adapters/types.ts +224 -1
- package/src/forge/agent-memory/bridge.ts +1333 -0
- package/src/forge/agent-memory/context-pack.ts +277 -0
- package/src/forge/agent-memory/hook-runner.ts +312 -0
- package/src/forge/agent-memory/mcp.ts +224 -0
- package/src/forge/agent-memory/normalize.ts +498 -0
- package/src/forge/agent-memory/redaction.ts +103 -0
- package/src/forge/agent-memory/sources/claude-code.ts +51 -0
- package/src/forge/agent-memory/sources/codex-hook-runner.mjs +273 -0
- package/src/forge/agent-memory/sources/codex.ts +119 -0
- package/src/forge/agent-memory/sources/cursor.ts +35 -0
- package/src/forge/agent-memory/types.ts +204 -0
- package/src/forge/bench.ts +248 -0
- package/src/forge/brownfield-import/index.ts +801 -0
- package/src/forge/brownfield-import/types.ts +127 -0
- package/src/forge/cair/action-journal.ts +61 -0
- package/src/forge/cair/action-parser.ts +314 -0
- package/src/forge/cair/action-validator.ts +40 -0
- package/src/forge/cair/actions.ts +1818 -0
- package/src/forge/cair/format.ts +77 -0
- package/src/forge/cair/index.ts +106 -0
- package/src/forge/cair/query.ts +478 -0
- package/src/forge/cair/snapshot.ts +315 -0
- package/src/forge/cair/types.ts +248 -0
- package/src/forge/cli/ai.ts +339 -21
- package/src/forge/cli/auth.ts +348 -10
- package/src/forge/cli/authmd.ts +441 -0
- package/src/forge/cli/baseline.ts +112 -0
- package/src/forge/cli/build.ts +20 -4
- package/src/forge/cli/changed.ts +437 -0
- package/src/forge/cli/codex-app-server.ts +877 -0
- package/src/forge/cli/commands.ts +1620 -20
- package/src/forge/cli/db.ts +209 -2
- package/src/forge/cli/deploy.ts +887 -0
- package/src/forge/cli/deps.ts +82 -13
- package/src/forge/cli/dev.ts +961 -46
- package/src/forge/cli/docs.ts +265 -0
- package/src/forge/cli/doctor.ts +297 -0
- package/src/forge/cli/field-test.ts +329 -0
- package/src/forge/cli/handoff.ts +336 -0
- package/src/forge/cli/index.ts +1 -0
- package/src/forge/cli/last-run.ts +84 -0
- package/src/forge/cli/main.ts +107 -3
- package/src/forge/cli/new.ts +152 -13
- package/src/forge/cli/next-actions.ts +23 -0
- package/src/forge/cli/output.ts +389 -6
- package/src/forge/cli/parse.ts +1050 -34
- package/src/forge/cli/progress.ts +51 -0
- package/src/forge/cli/query.ts +32 -0
- package/src/forge/cli/release.ts +35 -11
- package/src/forge/cli/rls.ts +43 -4
- package/src/forge/cli/run.ts +41 -0
- package/src/forge/cli/security.ts +112 -0
- package/src/forge/cli/self-host.ts +56 -14
- package/src/forge/cli/studio.ts +2218 -0
- package/src/forge/cli/verify.ts +1455 -32
- package/src/forge/cli/windows.ts +23 -0
- package/src/forge/cli/workos.ts +1020 -0
- package/src/forge/compiler/agent-contract/build.ts +670 -64
- package/src/forge/compiler/agent-contract/types.ts +45 -2
- package/src/forge/compiler/ai-registry/parse.ts +71 -2
- package/src/forge/compiler/api-surface/build.ts +47 -0
- package/src/forge/compiler/app-graph/build.ts +112 -9
- package/src/forge/compiler/app-graph/extract.ts +107 -0
- package/src/forge/compiler/app-graph/module-graph.ts +73 -78
- package/src/forge/compiler/app-graph/parser.ts +24 -24
- package/src/forge/compiler/app-graph/profile.ts +26 -0
- package/src/forge/compiler/app-graph/versions.ts +1 -1
- package/src/forge/compiler/classifier/capabilities.ts +3 -2
- package/src/forge/compiler/classifier/classify.ts +32 -8
- package/src/forge/compiler/classifier/secrets.ts +3 -2
- package/src/forge/compiler/classifier/signals.ts +91 -1
- package/src/forge/compiler/client-sdk/build-manifest.ts +59 -0
- package/src/forge/compiler/client-sdk/render-client.ts +295 -13
- package/src/forge/compiler/data-graph/parse.ts +20 -4
- package/src/forge/compiler/data-graph/sql/ddl.ts +144 -31
- package/src/forge/compiler/data-graph/sql/serialize.ts +4 -0
- package/src/forge/compiler/data-graph/sql/types.ts +1 -0
- package/src/forge/compiler/diagnostics/codes.ts +30 -0
- package/src/forge/compiler/diagnostics/create.ts +21 -2
- package/src/forge/compiler/diagnostics/index.ts +2 -0
- package/src/forge/compiler/emitter/barrel.ts +3 -0
- package/src/forge/compiler/emitter/render.ts +9 -0
- package/src/forge/compiler/external-manifest/registry.ts +205 -0
- package/src/forge/compiler/external-manifest/types.ts +91 -0
- package/src/forge/compiler/external-manifest/validate.ts +373 -0
- package/src/forge/compiler/frontend-graph/build.ts +142 -14
- package/src/forge/compiler/integration/add.ts +618 -24
- package/src/forge/compiler/integration/plan.ts +43 -12
- package/src/forge/compiler/integration/render.ts +29 -0
- package/src/forge/compiler/integration/snapshot.ts +2 -0
- package/src/forge/compiler/integration/templates/convex.ts +70 -0
- package/src/forge/compiler/integration/templates/index.ts +1 -0
- package/src/forge/compiler/integration/templates/render.ts +38 -0
- package/src/forge/compiler/integration/templates/types.ts +3 -0
- package/src/forge/compiler/integration/templates/workos.ts +1219 -0
- package/src/forge/compiler/make-registry/build.ts +8 -9
- package/src/forge/compiler/orchestrator/fast-check.ts +4 -0
- package/src/forge/compiler/orchestrator/generate-lock.ts +14 -3
- package/src/forge/compiler/orchestrator/manifest.ts +1 -1
- package/src/forge/compiler/orchestrator/plan-profile.ts +23 -0
- package/src/forge/compiler/orchestrator/plan.ts +247 -10
- package/src/forge/compiler/orchestrator/profile.ts +65 -0
- package/src/forge/compiler/orchestrator/run.ts +97 -31
- package/src/forge/compiler/orchestrator/serialize.ts +33 -8
- package/src/forge/compiler/orchestrator/types.ts +1 -1
- package/src/forge/compiler/package-graph/compiler.ts +3 -1
- package/src/forge/compiler/package-graph/constants.ts +1 -1
- package/src/forge/compiler/package-manager/adapter.ts +4 -1
- package/src/forge/compiler/package-manager/commands.ts +4 -0
- package/src/forge/compiler/package-manager/executor.ts +30 -1
- package/src/forge/compiler/package-upgrades/planner.ts +155 -18
- package/src/forge/compiler/package-upgrades/types.ts +2 -0
- package/src/forge/compiler/policy-registry/build.ts +47 -2
- package/src/forge/compiler/policy-registry/parse.ts +32 -2
- package/src/forge/compiler/recipes/definitions.ts +63 -0
- package/src/forge/compiler/recipes/index.ts +2 -0
- package/src/forge/compiler/recipes/registry.ts +6 -0
- package/src/forge/compiler/test-graph/build.ts +11 -3
- package/src/forge/compiler/types/app-graph.ts +8 -2
- package/src/forge/compiler/types/cli.ts +75 -1
- package/src/forge/compiler/types/dev-manifest.ts +4 -0
- package/src/forge/compiler/types/emit.ts +2 -0
- package/src/forge/compiler/types/frontend-graph.ts +2 -2
- package/src/forge/compiler/types/integration.ts +1 -0
- package/src/forge/compiler/types/package-graph.ts +6 -0
- package/src/forge/compiler/types/policy-registry.ts +3 -1
- package/src/forge/delta/classifier.ts +52 -0
- package/src/forge/delta/explain.ts +238 -0
- package/src/forge/delta/git-observer.ts +43 -0
- package/src/forge/delta/ids.ts +44 -0
- package/src/forge/delta/index.ts +25 -0
- package/src/forge/delta/recorder.ts +540 -0
- package/src/forge/delta/redaction.ts +50 -0
- package/src/forge/delta/schema.ts +240 -0
- package/src/forge/delta/session.ts +142 -0
- package/src/forge/delta/status.ts +1202 -0
- package/src/forge/delta/store.ts +3284 -0
- package/src/forge/delta/timeline.ts +178 -0
- package/src/forge/dev/server.ts +808 -17
- package/src/forge/dev/types.ts +15 -1
- package/src/forge/dev/watch.ts +17 -7
- package/src/forge/dev-console/cycle.ts +280 -33
- package/src/forge/dev-console/types.ts +47 -1
- package/src/forge/impact/index.ts +204 -9
- package/src/forge/impact/types.ts +33 -1
- package/src/forge/intent/index.ts +35 -16
- package/src/forge/make/fields.ts +26 -0
- package/src/forge/make/index.ts +40 -6
- package/src/forge/make/templates.ts +155 -2
- package/src/forge/make/types.ts +2 -1
- package/src/forge/policy.ts +1 -1
- package/src/forge/react/index.ts +160 -2
- package/src/forge/refactor/index.ts +1 -0
- package/src/forge/repair/rules/index.ts +2 -2
- package/src/forge/review/index.ts +158 -12
- package/src/forge/review/types.ts +15 -0
- package/src/forge/runtime/auth/config.ts +17 -0
- package/src/forge/runtime/auth/evaluate.ts +15 -2
- package/src/forge/runtime/auth/resolve.ts +61 -6
- package/src/forge/runtime/auth/types.ts +1 -0
- package/src/forge/runtime/db/factory.ts +1 -3
- package/src/forge/runtime/db/generated-client.ts +13 -2
- package/src/forge/runtime/db/memory-adapter.ts +139 -32
- package/src/forge/runtime/db/pglite-adapter.ts +263 -2
- package/src/forge/runtime/db/postgres-adapter.ts +6 -3
- package/src/forge/runtime/executor.ts +129 -16
- package/src/forge/runtime/external/bridge.ts +649 -0
- package/src/forge/runtime/runner/run-entry.ts +16 -7
- package/src/forge/runtime/telemetry/buffer.ts +4 -1
- package/src/forge/runtime/telemetry/scrubber.ts +35 -5
- package/src/forge/runtime/webhooks/security.ts +12 -7
- package/src/forge/server.ts +17 -3
- package/src/forge/ui/index.ts +209 -0
- package/src/forge/ui/types.ts +1 -0
- package/src/forge/version.ts +1 -1
- package/src/forge/vue/index.ts +422 -0
- package/src/forge/workspace/baseline.ts +112 -0
- package/src/forge/workspace/change-summary.ts +250 -0
- package/src/forge/workspace/forge-cli.ts +42 -0
- package/src/forge/workspace/git-summary.ts +391 -0
- package/templates/agent-workroom/AGENTS.md +29 -0
- package/templates/agent-workroom/README.md +34 -0
- package/templates/agent-workroom/forge.config.ts +3 -0
- package/templates/agent-workroom/package.json +33 -0
- package/templates/agent-workroom/src/actions/indexAgentSignal.ts +10 -0
- package/templates/agent-workroom/src/commands/openWorkroom.ts +61 -0
- package/templates/agent-workroom/src/commands/recordAgentSignal.ts +119 -0
- package/templates/agent-workroom/src/commands/recordCheckRun.ts +52 -0
- package/templates/agent-workroom/src/forge/schema.ts +54 -0
- package/templates/agent-workroom/src/policies.ts +6 -0
- package/templates/agent-workroom/src/queries/listWorkrooms.ts +11 -0
- package/templates/agent-workroom/src/queries/liveWorkroom.ts +63 -0
- package/templates/agent-workroom/tsconfig.json +16 -0
- package/templates/agent-workroom/web/index.html +12 -0
- package/templates/agent-workroom/web/package.json +21 -0
- package/templates/agent-workroom/web/src/App.tsx +345 -0
- package/templates/agent-workroom/web/src/lib/forge.ts +13 -0
- package/templates/agent-workroom/web/src/main.tsx +13 -0
- package/templates/agent-workroom/web/src/styles.css +545 -0
- package/templates/agent-workroom/web/tsconfig.json +27 -0
- package/templates/b2b-support-web/package.json +1 -0
- package/templates/b2b-support-web/web/package.json +1 -1
- package/templates/minimal-web/package.json +1 -1
- package/templates/minimal-web/web/package.json +2 -2
- package/templates/nuxt-web/.vscode/settings.json +14 -0
- package/templates/nuxt-web/README.md +30 -0
- package/templates/nuxt-web/forge.config.ts +3 -0
- package/templates/nuxt-web/package.json +33 -0
- package/templates/nuxt-web/src/actions/logNoteCreated.ts +11 -0
- package/templates/nuxt-web/src/commands/createNote.ts +26 -0
- package/templates/nuxt-web/src/forge/schema.ts +12 -0
- package/templates/nuxt-web/src/policies.ts +6 -0
- package/templates/nuxt-web/src/queries/listNotes.ts +8 -0
- package/templates/nuxt-web/src/queries/liveNotes.ts +8 -0
- package/templates/nuxt-web/tsconfig.json +17 -0
- package/templates/nuxt-web/web/app.vue +67 -0
- package/templates/nuxt-web/web/components/LiveNotes.vue +89 -0
- package/templates/nuxt-web/web/components/NoteComposer.vue +100 -0
- package/templates/nuxt-web/web/composables/forge.ts +13 -0
- package/templates/nuxt-web/web/composables/useNotes.ts +24 -0
- package/templates/nuxt-web/web/nuxt.config.ts +11 -0
- package/templates/nuxt-web/web/package.json +18 -0
- package/templates/nuxt-web/web/plugins/forge.client.ts +10 -0
- package/templates/nuxt-web/web/plugins/forge.server.ts +10 -0
- package/templates/nuxt-web/web/server/api/forge-health.get.ts +7 -0
- package/templates/nuxt-web/web/tsconfig.json +6 -0
- package/src/forge/_generated/actionSubscriptions.json +0 -2
- package/src/forge/_generated/actionSubscriptions.ts +0 -10
- package/src/forge/_generated/agentAdapterManifest.json +0 -2
- package/src/forge/_generated/agentAdapterManifest.ts +0 -73
- package/src/forge/_generated/agentContract.json +0 -2
- package/src/forge/_generated/agentContract.ts +0 -7829
- package/src/forge/_generated/agentQuickstart.md +0 -34
- package/src/forge/_generated/agentTools.json +0 -2
- package/src/forge/_generated/agentTools.md +0 -16
- package/src/forge/_generated/agentTools.ts +0 -12
- package/src/forge/_generated/aiContext.ts +0 -125
- package/src/forge/_generated/aiModels.json +0 -2
- package/src/forge/_generated/aiModels.ts +0 -51
- package/src/forge/_generated/aiProviders.json +0 -2
- package/src/forge/_generated/aiProviders.ts +0 -23
- package/src/forge/_generated/aiRegistry.json +0 -2
- package/src/forge/_generated/aiRegistry.ts +0 -31
- package/src/forge/_generated/api.json +0 -2
- package/src/forge/_generated/api.ts +0 -8
- package/src/forge/_generated/appGraph.json +0 -2
- package/src/forge/_generated/appGraph.ts +0 -14919
- package/src/forge/_generated/appMap.md +0 -55
- package/src/forge/_generated/artifactManifest.json +0 -2
- package/src/forge/_generated/artifactManifest.ts +0 -7
- package/src/forge/_generated/authClaims.json +0 -2
- package/src/forge/_generated/authClaims.ts +0 -13
- package/src/forge/_generated/authConfig.json +0 -2
- package/src/forge/_generated/authConfig.ts +0 -17
- package/src/forge/_generated/authContext.ts +0 -23
- package/src/forge/_generated/authRegistry.json +0 -2
- package/src/forge/_generated/authRegistry.ts +0 -25
- package/src/forge/_generated/buildInfo.json +0 -2
- package/src/forge/_generated/buildInfo.ts +0 -9
- package/src/forge/_generated/capabilityMap.json +0 -2
- package/src/forge/_generated/capabilityMap.md +0 -15
- package/src/forge/_generated/capabilityMap.ts +0 -17
- package/src/forge/_generated/client.ts +0 -282
- package/src/forge/_generated/clientApi.ts +0 -9
- package/src/forge/_generated/clientManifest.json +0 -2
- package/src/forge/_generated/clientManifest.ts +0 -39
- package/src/forge/_generated/clientTypes.ts +0 -78
- package/src/forge/_generated/configRegistry.json +0 -2
- package/src/forge/_generated/configRegistry.ts +0 -4
- package/src/forge/_generated/dataGraph.json +0 -2
- package/src/forge/_generated/dataGraph.ts +0 -8
- package/src/forge/_generated/db.json +0 -2
- package/src/forge/_generated/db.ts +0 -2
- package/src/forge/_generated/dbSecurityManifest.json +0 -2
- package/src/forge/_generated/dbSecurityManifest.ts +0 -15
- package/src/forge/_generated/dbSessionContext.json +0 -2
- package/src/forge/_generated/dbSessionContext.ts +0 -39
- package/src/forge/_generated/deployManifest.json +0 -2
- package/src/forge/_generated/deployManifest.ts +0 -14
- package/src/forge/_generated/devManifest.json +0 -2
- package/src/forge/_generated/devManifest.ts +0 -62
- package/src/forge/_generated/envSchema.json +0 -2
- package/src/forge/_generated/envSchema.ts +0 -59
- package/src/forge/_generated/frontendGraph.json +0 -2
- package/src/forge/_generated/frontendGraph.ts +0 -27
- package/src/forge/_generated/importGuards.json +0 -2
- package/src/forge/_generated/importGuards.ts +0 -686
- package/src/forge/_generated/index.ts +0 -68
- package/src/forge/_generated/liveProductionManifest.json +0 -2
- package/src/forge/_generated/liveProductionManifest.ts +0 -23
- package/src/forge/_generated/liveProtocol.json +0 -2
- package/src/forge/_generated/liveProtocol.ts +0 -21
- package/src/forge/_generated/liveQueryRegistry.json +0 -2
- package/src/forge/_generated/liveQueryRegistry.ts +0 -9
- package/src/forge/_generated/liveTransportConfig.json +0 -2
- package/src/forge/_generated/liveTransportConfig.ts +0 -19
- package/src/forge/_generated/makeRegistry.json +0 -2
- package/src/forge/_generated/makeRegistry.ts +0 -177
- package/src/forge/_generated/makeTemplates.json +0 -2
- package/src/forge/_generated/makeTemplates.ts +0 -66
- package/src/forge/_generated/mockMap.json +0 -2
- package/src/forge/_generated/mockMap.ts +0 -7
- package/src/forge/_generated/operationPlaybooks.md +0 -167
- package/src/forge/_generated/packageGraph.json +0 -2
- package/src/forge/_generated/packageGraph.ts +0 -249334
- package/src/forge/_generated/packageUpgradeRegistry.json +0 -2
- package/src/forge/_generated/packageUpgradeRegistry.ts +0 -15
- package/src/forge/_generated/permissionMatrix.json +0 -2
- package/src/forge/_generated/permissionMatrix.ts +0 -7
- package/src/forge/_generated/policyRegistry.json +0 -2
- package/src/forge/_generated/policyRegistry.ts +0 -11
- package/src/forge/_generated/queryRegistry.json +0 -2
- package/src/forge/_generated/queryRegistry.ts +0 -9
- package/src/forge/_generated/react.d.ts +0 -22
- package/src/forge/_generated/react.ts +0 -29
- package/src/forge/_generated/reactManifest.json +0 -2
- package/src/forge/_generated/reactManifest.ts +0 -19
- package/src/forge/_generated/rlsPolicies.json +0 -2
- package/src/forge/_generated/rlsPolicies.sql +0 -34
- package/src/forge/_generated/rlsPolicies.ts +0 -6
- package/src/forge/_generated/runtimeGraph.json +0 -2
- package/src/forge/_generated/runtimeGraph.ts +0 -8
- package/src/forge/_generated/runtimeMatrix.json +0 -2
- package/src/forge/_generated/runtimeMatrix.ts +0 -334130
- package/src/forge/_generated/runtimeRegistry.ts +0 -2
- package/src/forge/_generated/runtimeRules.md +0 -91
- package/src/forge/_generated/secretRegistry.json +0 -2
- package/src/forge/_generated/secretRegistry.ts +0 -50
- package/src/forge/_generated/secretsContext.ts +0 -11
- package/src/forge/_generated/serverApi.ts +0 -10
- package/src/forge/_generated/sourceMapManifest.json +0 -2
- package/src/forge/_generated/sourceMapManifest.ts +0 -7
- package/src/forge/_generated/sqlPlan.json +0 -2
- package/src/forge/_generated/sqlPlan.ts +0 -88
- package/src/forge/_generated/subscriptionManifest.json +0 -2
- package/src/forge/_generated/subscriptionManifest.ts +0 -7
- package/src/forge/_generated/symbolicationManifest.json +0 -2
- package/src/forge/_generated/symbolicationManifest.ts +0 -17
- package/src/forge/_generated/telemetryRegistry.json +0 -2
- package/src/forge/_generated/telemetryRegistry.ts +0 -9
- package/src/forge/_generated/telemetrySinks.json +0 -2
- package/src/forge/_generated/telemetrySinks.ts +0 -11
- package/src/forge/_generated/tenantScope.json +0 -2
- package/src/forge/_generated/tenantScope.ts +0 -8
- package/src/forge/_generated/testGraph.json +0 -2
- package/src/forge/_generated/testGraph.ts +0 -3430
- package/src/forge/_generated/testPlanRegistry.json +0 -2
- package/src/forge/_generated/testPlanRegistry.ts +0 -33
- package/src/forge/_generated/uiRoutes.json +0 -2
- package/src/forge/_generated/uiRoutes.ts +0 -16
- package/src/forge/_generated/uiScenarios.json +0 -2
- package/src/forge/_generated/uiScenarios.ts +0 -30
- package/src/forge/_generated/uiTestManifest.json +0 -2
- package/src/forge/_generated/uiTestManifest.ts +0 -27
- package/src/forge/_generated/workflowRegistry.json +0 -2
- package/src/forge/_generated/workflowRegistry.ts +0 -9
- package/src/forge/_generated/workflowSubscriptions.json +0 -2
- package/src/forge/_generated/workflowSubscriptions.ts +0 -10
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Forge Java Spring Boot Starter
|
|
2
|
+
|
|
3
|
+
`adapters/java-spring-boot-starter` is the first Spring integration layer for
|
|
4
|
+
Forge external runtimes. It discovers a bean annotated with
|
|
5
|
+
`@ForgeExternalService`, registers methods annotated with `@ForgeCommand` and
|
|
6
|
+
`@ForgeQuery`, and exposes a `ForgeRegistry` bean.
|
|
7
|
+
|
|
8
|
+
```java
|
|
9
|
+
@Service
|
|
10
|
+
@ForgeExternalService(name = "billing", baseUrl = "http://127.0.0.1:8080")
|
|
11
|
+
public class BillingService {
|
|
12
|
+
@ForgeCommand(
|
|
13
|
+
name = "createInvoice",
|
|
14
|
+
policy = "billing.manage",
|
|
15
|
+
tenantScoped = true,
|
|
16
|
+
needsApproval = true,
|
|
17
|
+
effects = {"invoice.created"})
|
|
18
|
+
public Invoice createInvoice(ForgeContext context, CreateInvoiceInput input) {
|
|
19
|
+
return new Invoice("inv_java_1", input.title(), context.auth().tenantId());
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@ForgeQuery(name = "listInvoices", policy = "billing.manage", tenantScoped = true)
|
|
23
|
+
public List<Invoice> listInvoices(ForgeContext context) {
|
|
24
|
+
return List.of(new Invoice("inv_java_1", "Spring invoice", context.auth().tenantId()));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The starter intentionally keeps HTTP endpoint wiring thin in this first version.
|
|
30
|
+
Applications can inject the generated `ForgeRegistry` and serve it with the core
|
|
31
|
+
adapter, or add their own Spring MVC bridge. Full MVC/Actuator auto-endpoints
|
|
32
|
+
are a follow-up layer.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
4
|
+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
5
|
+
<modelVersion>4.0.0</modelVersion>
|
|
6
|
+
|
|
7
|
+
<groupId>dev.forgeos</groupId>
|
|
8
|
+
<artifactId>forge-java-spring-boot-starter</artifactId>
|
|
9
|
+
<version>0.1.0-alpha.11</version>
|
|
10
|
+
<name>Forge Java Spring Boot Starter</name>
|
|
11
|
+
<description>Spring Boot integration for Forge external runtimes.</description>
|
|
12
|
+
|
|
13
|
+
<properties>
|
|
14
|
+
<maven.compiler.release>17</maven.compiler.release>
|
|
15
|
+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
16
|
+
<spring.boot.version>3.3.5</spring.boot.version>
|
|
17
|
+
</properties>
|
|
18
|
+
|
|
19
|
+
<dependencies>
|
|
20
|
+
<dependency>
|
|
21
|
+
<groupId>dev.forgeos</groupId>
|
|
22
|
+
<artifactId>forge-java-adapter</artifactId>
|
|
23
|
+
<version>0.1.0-alpha.11</version>
|
|
24
|
+
</dependency>
|
|
25
|
+
<dependency>
|
|
26
|
+
<groupId>org.springframework.boot</groupId>
|
|
27
|
+
<artifactId>spring-boot-autoconfigure</artifactId>
|
|
28
|
+
<version>${spring.boot.version}</version>
|
|
29
|
+
</dependency>
|
|
30
|
+
<dependency>
|
|
31
|
+
<groupId>org.springframework</groupId>
|
|
32
|
+
<artifactId>spring-context</artifactId>
|
|
33
|
+
<version>6.1.14</version>
|
|
34
|
+
</dependency>
|
|
35
|
+
</dependencies>
|
|
36
|
+
</project>
|
package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeCommand.java
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
package dev.forgeos.adapter.spring;
|
|
2
|
+
|
|
3
|
+
import dev.forgeos.adapter.Risk;
|
|
4
|
+
import dev.forgeos.adapter.TransactionMode;
|
|
5
|
+
import java.lang.annotation.ElementType;
|
|
6
|
+
import java.lang.annotation.Retention;
|
|
7
|
+
import java.lang.annotation.RetentionPolicy;
|
|
8
|
+
import java.lang.annotation.Target;
|
|
9
|
+
|
|
10
|
+
@Target(ElementType.METHOD)
|
|
11
|
+
@Retention(RetentionPolicy.RUNTIME)
|
|
12
|
+
public @interface ForgeCommand {
|
|
13
|
+
String name();
|
|
14
|
+
String description() default "";
|
|
15
|
+
String path() default "";
|
|
16
|
+
String policy() default "";
|
|
17
|
+
boolean tenantScoped() default false;
|
|
18
|
+
TransactionMode transaction() default TransactionMode.EXTERNAL_MANAGED;
|
|
19
|
+
Risk risk() default Risk.WRITE;
|
|
20
|
+
boolean needsApproval() default false;
|
|
21
|
+
String[] effects() default {};
|
|
22
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
package dev.forgeos.adapter.spring;
|
|
2
|
+
|
|
3
|
+
import java.lang.annotation.ElementType;
|
|
4
|
+
import java.lang.annotation.Retention;
|
|
5
|
+
import java.lang.annotation.RetentionPolicy;
|
|
6
|
+
import java.lang.annotation.Target;
|
|
7
|
+
|
|
8
|
+
@Target(ElementType.TYPE)
|
|
9
|
+
@Retention(RetentionPolicy.RUNTIME)
|
|
10
|
+
public @interface ForgeExternalService {
|
|
11
|
+
String name();
|
|
12
|
+
String baseUrl() default "";
|
|
13
|
+
String framework() default "spring-boot";
|
|
14
|
+
String health() default "/health";
|
|
15
|
+
}
|
package/adapters/java-spring-boot-starter/src/main/java/dev/forgeos/adapter/spring/ForgeQuery.java
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
package dev.forgeos.adapter.spring;
|
|
2
|
+
|
|
3
|
+
import java.lang.annotation.ElementType;
|
|
4
|
+
import java.lang.annotation.Retention;
|
|
5
|
+
import java.lang.annotation.RetentionPolicy;
|
|
6
|
+
import java.lang.annotation.Target;
|
|
7
|
+
|
|
8
|
+
@Target(ElementType.METHOD)
|
|
9
|
+
@Retention(RetentionPolicy.RUNTIME)
|
|
10
|
+
public @interface ForgeQuery {
|
|
11
|
+
String name();
|
|
12
|
+
String description() default "";
|
|
13
|
+
String path() default "";
|
|
14
|
+
String policy() default "";
|
|
15
|
+
boolean tenantScoped() default false;
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
package dev.forgeos.adapter.spring;
|
|
2
|
+
|
|
3
|
+
import org.springframework.beans.factory.BeanFactory;
|
|
4
|
+
import org.springframework.beans.factory.ListableBeanFactory;
|
|
5
|
+
import org.springframework.context.annotation.Condition;
|
|
6
|
+
import org.springframework.context.annotation.ConditionContext;
|
|
7
|
+
import org.springframework.core.type.AnnotatedTypeMetadata;
|
|
8
|
+
|
|
9
|
+
public final class ForgeServiceBeanCondition implements Condition {
|
|
10
|
+
@Override
|
|
11
|
+
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
|
12
|
+
BeanFactory beanFactory = context.getBeanFactory();
|
|
13
|
+
if (!(beanFactory instanceof ListableBeanFactory listable)) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return !listable.getBeansWithAnnotation(ForgeExternalService.class).isEmpty();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
package dev.forgeos.adapter.spring;
|
|
2
|
+
|
|
3
|
+
import dev.forgeos.adapter.ForgeRegistry;
|
|
4
|
+
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
|
5
|
+
import org.springframework.context.ApplicationContext;
|
|
6
|
+
import org.springframework.context.annotation.Bean;
|
|
7
|
+
import org.springframework.context.annotation.Conditional;
|
|
8
|
+
|
|
9
|
+
@AutoConfiguration
|
|
10
|
+
public class ForgeSpringAutoConfiguration {
|
|
11
|
+
@Bean
|
|
12
|
+
@Conditional(ForgeServiceBeanCondition.class)
|
|
13
|
+
public ForgeRegistry forgeRegistry(ApplicationContext context) {
|
|
14
|
+
return ForgeSpringRuntime.buildRegistry(context);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
package dev.forgeos.adapter.spring;
|
|
2
|
+
|
|
3
|
+
import com.fasterxml.jackson.databind.JsonNode;
|
|
4
|
+
import dev.forgeos.adapter.Forge;
|
|
5
|
+
import dev.forgeos.adapter.ForgeContext;
|
|
6
|
+
import dev.forgeos.adapter.ForgeHandler;
|
|
7
|
+
import dev.forgeos.adapter.ForgeRegistry;
|
|
8
|
+
import java.lang.reflect.InvocationTargetException;
|
|
9
|
+
import java.lang.reflect.Method;
|
|
10
|
+
import java.lang.reflect.Parameter;
|
|
11
|
+
import org.springframework.aop.support.AopUtils;
|
|
12
|
+
import org.springframework.context.ApplicationContext;
|
|
13
|
+
import org.springframework.core.annotation.AnnotatedElementUtils;
|
|
14
|
+
import org.springframework.util.ReflectionUtils;
|
|
15
|
+
|
|
16
|
+
public final class ForgeSpringRuntime {
|
|
17
|
+
private ForgeSpringRuntime() {
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public static ForgeRegistry buildRegistry(ApplicationContext context) {
|
|
21
|
+
String[] serviceBeanNames = context.getBeanNamesForAnnotation(ForgeExternalService.class);
|
|
22
|
+
if (serviceBeanNames.length == 0) {
|
|
23
|
+
throw new IllegalStateException("no @ForgeExternalService bean found");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
Object serviceBean = context.getBean(serviceBeanNames[0]);
|
|
27
|
+
Class<?> serviceClass = AopUtils.getTargetClass(serviceBean);
|
|
28
|
+
ForgeExternalService service = AnnotatedElementUtils.findMergedAnnotation(
|
|
29
|
+
serviceClass,
|
|
30
|
+
ForgeExternalService.class
|
|
31
|
+
);
|
|
32
|
+
if (service == null) {
|
|
33
|
+
throw new IllegalStateException("selected bean is missing @ForgeExternalService");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
ForgeRegistry registry = Forge.service(service.name(),
|
|
37
|
+
Forge.framework(service.framework()),
|
|
38
|
+
Forge.baseUrl(service.baseUrl()),
|
|
39
|
+
Forge.health(service.health())
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
ReflectionUtils.doWithMethods(serviceClass, method -> registerMethod(registry, serviceBean, method));
|
|
43
|
+
return registry;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
private static void registerMethod(ForgeRegistry registry, Object bean, Method method) {
|
|
47
|
+
ForgeCommand command = AnnotatedElementUtils.findMergedAnnotation(method, ForgeCommand.class);
|
|
48
|
+
if (command != null) {
|
|
49
|
+
registry.command(command.name(), handlerFor(bean, method),
|
|
50
|
+
command.description().isBlank() ? entry -> { } : Forge.description(command.description()),
|
|
51
|
+
command.path().isBlank() ? entry -> { } : Forge.path(command.path()),
|
|
52
|
+
command.policy().isBlank() ? entry -> { } : Forge.policy(command.policy()),
|
|
53
|
+
Forge.tenantScoped(command.tenantScoped()),
|
|
54
|
+
Forge.transaction(command.transaction()),
|
|
55
|
+
Forge.risk(command.risk()),
|
|
56
|
+
Forge.needsApproval(command.needsApproval()),
|
|
57
|
+
Forge.effects(command.effects())
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
ForgeQuery query = AnnotatedElementUtils.findMergedAnnotation(method, ForgeQuery.class);
|
|
62
|
+
if (query != null) {
|
|
63
|
+
registry.query(query.name(), handlerFor(bean, method),
|
|
64
|
+
query.description().isBlank() ? entry -> { } : Forge.description(query.description()),
|
|
65
|
+
query.path().isBlank() ? entry -> { } : Forge.path(query.path()),
|
|
66
|
+
query.policy().isBlank() ? entry -> { } : Forge.policy(query.policy()),
|
|
67
|
+
Forge.tenantScoped(query.tenantScoped()),
|
|
68
|
+
Forge.readOnly()
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
private static ForgeHandler handlerFor(Object bean, Method method) {
|
|
74
|
+
ReflectionUtils.makeAccessible(method);
|
|
75
|
+
return (context, args) -> {
|
|
76
|
+
try {
|
|
77
|
+
return method.invoke(bean, argumentsFor(method, context, args));
|
|
78
|
+
} catch (InvocationTargetException error) {
|
|
79
|
+
Throwable target = error.getTargetException();
|
|
80
|
+
if (target instanceof Exception exception) {
|
|
81
|
+
throw exception;
|
|
82
|
+
}
|
|
83
|
+
throw new RuntimeException(target);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
private static Object[] argumentsFor(Method method, ForgeContext context, JsonNode args) throws Exception {
|
|
89
|
+
Parameter[] parameters = method.getParameters();
|
|
90
|
+
Object[] values = new Object[parameters.length];
|
|
91
|
+
for (int index = 0; index < parameters.length; index += 1) {
|
|
92
|
+
Class<?> type = parameters[index].getType();
|
|
93
|
+
if (type.equals(ForgeContext.class)) {
|
|
94
|
+
values[index] = context;
|
|
95
|
+
} else {
|
|
96
|
+
JsonNode safeArgs = args == null || args.isNull()
|
|
97
|
+
? dev.forgeos.adapter.Json.MAPPER.createObjectNode()
|
|
98
|
+
: args;
|
|
99
|
+
values[index] = dev.forgeos.adapter.Json.MAPPER.treeToValue(safeArgs, type);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return values;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
dev.forgeos.adapter.spring.ForgeSpringAutoConfiguration
|
package/bin/forge.mjs
CHANGED
|
@@ -1,8 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
3
4
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
4
5
|
|
|
5
6
|
const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
7
|
+
const args = process.argv.slice(2);
|
|
8
|
+
|
|
9
|
+
if (args.includes("--version") || args.includes("-v")) {
|
|
10
|
+
const pkg = JSON.parse(readFileSync(join(root, "package.json"), "utf8"));
|
|
11
|
+
const version = typeof pkg.version === "string" ? pkg.version : "unknown";
|
|
12
|
+
if (args.includes("--json")) {
|
|
13
|
+
console.log(JSON.stringify({
|
|
14
|
+
version,
|
|
15
|
+
cliVersion: version,
|
|
16
|
+
forgeosVersion: version,
|
|
17
|
+
}, null, 2));
|
|
18
|
+
} else {
|
|
19
|
+
console.log(version);
|
|
20
|
+
}
|
|
21
|
+
process.exit(0);
|
|
22
|
+
}
|
|
23
|
+
|
|
6
24
|
const entrypoint = join(root, "src", "forge", "cli", "main.ts");
|
|
7
25
|
|
|
8
26
|
let register;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# CAIR Protocol
|
|
2
|
+
|
|
3
|
+
CAIR is ForgeOS' compact agent interface for reading code structure, querying symbols, and planning safe edits without loading the whole repository into an agent context window.
|
|
4
|
+
|
|
5
|
+
CAIR is intentionally CLI-first. It does not add a second mutating tool surface. Agents should use CAIR to inspect structure and create reviewable plans, then apply those plans through the ForgeOS CLI with hash checks and rollback journals.
|
|
6
|
+
|
|
7
|
+
## Read Workflow
|
|
8
|
+
|
|
9
|
+
Start with a compact snapshot:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
forge cair snapshot
|
|
13
|
+
forge cair query "Q STATUS"
|
|
14
|
+
forge cair query "Q ST"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Use symbol, definition, reference, impact, and dependency API queries before opening large files:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
forge cair query "Q S name=createTicket"
|
|
21
|
+
forge cair query "Q D S#1"
|
|
22
|
+
forge cair query "Q R S#1"
|
|
23
|
+
forge cair query "Q I S#1"
|
|
24
|
+
forge cair query "Q DEP.API package=zod symbol=object"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The goal is to make agent navigation evidence-backed: CAIR gives stable ids for modules, symbols, packages, APIs, and tests so an agent can select a small file set instead of scanning the whole project.
|
|
28
|
+
|
|
29
|
+
## Action Safety
|
|
30
|
+
|
|
31
|
+
Mutating CAIR actions should be planned first:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
forge cair action --plan "A RN t=S#1 nn=openTicket"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The plan lives under `.forge/cair/plans/` and records the target files and expected hashes. Applying a plan checks those hashes before editing:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
forge cair action "A APPLY plan=<P#|.forge/cair/plans/...json>"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Applied plans write rollback journals under `.forge/cair/journal/`:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
forge cair action "A ROLLBACK journal=.forge/cair/journal/<journal>.json"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Use `--dry-run` when exploring an action shape without creating a plan:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
forge cair action --dry-run "A CREATE.SYMBOL path=src/example.ts kind=function name=example export=true createFile=true"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Generated files stay protected by default. Use `--include-generated` only when the edit is intentionally about generated artifacts.
|
|
56
|
+
|
|
57
|
+
## DeltaDB Evidence
|
|
58
|
+
|
|
59
|
+
Successful CAIR CLI runs are recorded in DeltaDB as sanitized operational events:
|
|
60
|
+
|
|
61
|
+
| CAIR command | Delta event |
|
|
62
|
+
|--------------|-------------|
|
|
63
|
+
| `forge cair snapshot` | `cair.snapshot.created` |
|
|
64
|
+
| `forge cair query ...` | `cair.query.run` |
|
|
65
|
+
| `forge cair action --plan ...` | `cair.plan.created` |
|
|
66
|
+
| `forge cair action "A APPLY ..."` | `cair.plan.applied` |
|
|
67
|
+
| `forge cair action --dry-run ...` | `cair.action.previewed` |
|
|
68
|
+
|
|
69
|
+
The recorder stores compact verbs such as `Q ST` or `A APPLY`; it does not need to store full action bodies as first-class timeline data. Use:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
forge timeline cair:protocol --json
|
|
73
|
+
forge timeline --kind cair.plan.applied --json
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
This makes CAIR navigation and guarded edits visible beside file changes, proofs, and agent activity.
|
|
77
|
+
|
|
78
|
+
## Compact Aliases
|
|
79
|
+
|
|
80
|
+
| Long form | Compact |
|
|
81
|
+
|-----------|---------|
|
|
82
|
+
| `Q STATUS` | `Q ST` |
|
|
83
|
+
| `Q SYMBOL` | `Q S` |
|
|
84
|
+
| `Q DEF` | `Q D` |
|
|
85
|
+
| `Q REFS` | `Q R` |
|
|
86
|
+
| `Q IMPACT` | `Q I` |
|
|
87
|
+
| `A RENAME.SYMBOL target=S#1 newName=x` | `A RN t=S#1 nn=x` |
|
|
88
|
+
|
|
89
|
+
## Agent Posture
|
|
90
|
+
|
|
91
|
+
Use this loop for code work:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
forge cair snapshot
|
|
95
|
+
forge cair query "Q ST"
|
|
96
|
+
forge cair query "Q S name=<symbol>"
|
|
97
|
+
forge cair query "Q I S#1"
|
|
98
|
+
forge cair action --plan "A RN t=S#1 nn=<newName>"
|
|
99
|
+
forge cair action "A APPLY plan=<P#|path>"
|
|
100
|
+
forge check --json
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Do not use CAIR as a bypass around ForgeOS rules. Commands remain transactional writes, queries and liveQueries remain read-only, side effects still belong in actions and workflows, and generated artifacts remain derived.
|