forgeos 0.1.0-alpha.2 → 0.1.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.npmignore +4 -0
- package/AGENTS.md +168 -81
- package/CHANGELOG.md +211 -0
- package/README.md +88 -14
- 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/target/classes/dev/forgeos/adapter/Auth.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Diagnostic.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Entry.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/EntryKind.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ErrorInfo.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Forge.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeCall.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeContext.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeHandler.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeHttpHandler.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry$EntryOption.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry$RegisteredEntry.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry$RegistryOption.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ForgeRegistry.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Json.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Manifest.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/RequestEnvelope.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/ResponseEnvelope.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Risk.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Schemas.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/Service.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/TransactionMode.class +0 -0
- package/adapters/java/target/classes/dev/forgeos/adapter/TypedForgeHandler.class +0 -0
- package/adapters/java/target/forge-java-adapter-0.1.0-alpha.11.jar +0 -0
- package/adapters/java/target/maven-archiver/pom.properties +3 -0
- package/adapters/java/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +23 -0
- package/adapters/java/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +20 -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/adapters/java-spring-boot-starter/target/classes/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +1 -0
- package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeCommand.class +0 -0
- package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeExternalService.class +0 -0
- package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeQuery.class +0 -0
- package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeServiceBeanCondition.class +0 -0
- package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeSpringAutoConfiguration.class +0 -0
- package/adapters/java-spring-boot-starter/target/classes/dev/forgeos/adapter/spring/ForgeSpringRuntime.class +0 -0
- package/adapters/java-spring-boot-starter/target/forge-java-spring-boot-starter-0.1.0-alpha.11.jar +0 -0
- package/adapters/java-spring-boot-starter/target/maven-archiver/pom.properties +3 -0
- package/adapters/java-spring-boot-starter/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +6 -0
- package/adapters/java-spring-boot-starter/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +6 -0
- package/bin/forge.mjs +18 -0
- package/docs/changelog.md +242 -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/examples/java-billing/target/classes/dev/forgeos/examples/billing/CreateInvoiceInput.class +0 -0
- package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Invoice.class +0 -0
- package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Main$EmptyInput.class +0 -0
- package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Main$Options.class +0 -0
- package/examples/java-billing/target/classes/dev/forgeos/examples/billing/Main.class +0 -0
- package/examples/java-billing/target/java-billing-0.1.0-alpha.11-all.jar +0 -0
- package/examples/java-billing/target/java-billing-0.1.0-alpha.11.jar +0 -0
- package/examples/java-billing/target/maven-archiver/pom.properties +3 -0
- package/examples/java-billing/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +5 -0
- package/examples/java-billing/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +3 -0
- package/package.json +29 -7
- 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 +1511 -123
- package/src/forge/agent-adapters/types.ts +216 -1
- package/src/forge/agent-memory/bridge.ts +1245 -0
- package/src/forge/agent-memory/context-pack.ts +151 -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 +191 -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 +671 -3
- package/src/forge/cli/auth.ts +36 -1
- package/src/forge/cli/build.ts +20 -4
- package/src/forge/cli/changed.ts +300 -0
- package/src/forge/cli/codex-app-server.ts +877 -0
- package/src/forge/cli/commands.ts +1285 -7
- package/src/forge/cli/db.ts +121 -2
- package/src/forge/cli/deps.ts +79 -12
- package/src/forge/cli/dev.ts +502 -38
- package/src/forge/cli/docs.ts +265 -0
- package/src/forge/cli/handoff.ts +250 -0
- package/src/forge/cli/index.ts +1 -0
- package/src/forge/cli/main.ts +49 -3
- package/src/forge/cli/new.ts +3 -1
- package/src/forge/cli/next-actions.ts +23 -0
- package/src/forge/cli/output.ts +290 -1
- package/src/forge/cli/parse.ts +770 -36
- package/src/forge/cli/query.ts +32 -0
- package/src/forge/cli/release.ts +35 -11
- package/src/forge/cli/rls.ts +568 -17
- package/src/forge/cli/run.ts +41 -0
- package/src/forge/cli/secrets.ts +46 -1
- package/src/forge/cli/security.ts +381 -0
- package/src/forge/cli/self-host.ts +56 -14
- package/src/forge/cli/studio.ts +2163 -0
- package/src/forge/cli/verify.ts +1422 -32
- package/src/forge/compiler/agent-contract/build.ts +725 -41
- package/src/forge/compiler/agent-contract/types.ts +85 -0
- package/src/forge/compiler/ai-registry/build.ts +62 -1
- package/src/forge/compiler/ai-registry/constants.ts +1 -1
- package/src/forge/compiler/ai-registry/parse.ts +168 -5
- package/src/forge/compiler/api-surface/build.ts +47 -0
- package/src/forge/compiler/app-graph/build.ts +68 -8
- package/src/forge/compiler/app-graph/extract.ts +107 -0
- package/src/forge/compiler/app-graph/forge-apis.ts +1 -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 +188 -13
- package/src/forge/compiler/data-graph/parse.ts +3 -3
- package/src/forge/compiler/data-graph/sql/ddl.ts +60 -2
- 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/dev-manifest/build.ts +3 -0
- package/src/forge/compiler/diagnostics/codes.ts +35 -0
- package/src/forge/compiler/diagnostics/create.ts +8 -3
- 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 +5 -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 +85 -13
- package/src/forge/compiler/integration/add.ts +498 -22
- package/src/forge/compiler/integration/snapshot.ts +2 -0
- package/src/forge/compiler/make-registry/build.ts +19 -7
- package/src/forge/compiler/orchestrator/plan-profile.ts +23 -0
- package/src/forge/compiler/orchestrator/plan.ts +78 -7
- 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 +101 -8
- package/src/forge/compiler/package-graph/compiler.ts +13 -3
- 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/policy-registry/build.ts +44 -1
- package/src/forge/compiler/test-graph/build.ts +11 -3
- package/src/forge/compiler/types/ai-registry.ts +25 -1
- package/src/forge/compiler/types/app-graph.ts +9 -2
- package/src/forge/compiler/types/cli.ts +76 -1
- package/src/forge/compiler/types/dev-manifest.ts +3 -0
- package/src/forge/compiler/types/frontend-graph.ts +2 -2
- package/src/forge/delta/classifier.ts +52 -0
- package/src/forge/delta/explain.ts +126 -0
- package/src/forge/delta/git-observer.ts +43 -0
- package/src/forge/delta/ids.ts +44 -0
- package/src/forge/delta/index.ts +13 -0
- package/src/forge/delta/recorder.ts +402 -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 +489 -0
- package/src/forge/delta/store.ts +2975 -0
- package/src/forge/delta/timeline.ts +104 -0
- package/src/forge/dev/server.ts +768 -15
- package/src/forge/dev/types.ts +15 -1
- package/src/forge/dev/watch.ts +17 -7
- package/src/forge/dev-console/cycle.ts +233 -21
- package/src/forge/dev-console/types.ts +46 -1
- package/src/forge/impact/index.ts +46 -8
- package/src/forge/impact/types.ts +6 -0
- package/src/forge/intent/index.ts +35 -16
- package/src/forge/make/index.ts +149 -6
- package/src/forge/make/templates.ts +343 -2
- package/src/forge/make/types.ts +3 -1
- 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/ai/context.ts +210 -5
- package/src/forge/runtime/ai/types.ts +70 -0
- package/src/forge/runtime/auth/claims.ts +32 -0
- package/src/forge/runtime/auth/errors.ts +2 -0
- package/src/forge/runtime/context/create-context.ts +30 -6
- package/src/forge/runtime/db/generated-client.ts +13 -2
- package/src/forge/runtime/db/memory-adapter.ts +2 -2
- package/src/forge/runtime/db/pglite-adapter.ts +77 -2
- package/src/forge/runtime/db/postgres-adapter.ts +6 -3
- package/src/forge/runtime/executor.ts +112 -2
- package/src/forge/runtime/external/bridge.ts +649 -0
- package/src/forge/runtime/runner/run-entry.ts +16 -7
- package/src/forge/runtime/telemetry/scrubber.ts +91 -10
- package/src/forge/runtime/webhooks/security.ts +184 -0
- package/src/forge/server.ts +100 -2
- package/src/forge/version.ts +1 -1
- package/src/forge/vue/index.ts +407 -0
- package/src/forge/workspace/change-summary.ts +209 -0
- package/src/forge/workspace/forge-cli.ts +14 -0
- package/src/forge/workspace/git-summary.ts +279 -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 +2 -0
- package/templates/b2b-support-web/tsconfig.json +4 -1
- package/templates/b2b-support-web/web/package.json +1 -1
- package/templates/minimal-web/package.json +2 -1
- package/templates/minimal-web/tsconfig.json +3 -1
- package/templates/minimal-web/web/package.json +2 -2
- 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 -7696
- package/src/forge/_generated/agentQuickstart.md +0 -32
- package/src/forge/_generated/aiContext.ts +0 -59
- package/src/forge/_generated/aiModels.json +0 -2
- package/src/forge/_generated/aiModels.ts +0 -35
- 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 -29
- 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 -14667
- package/src/forge/_generated/appMap.md +0 -35
- 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 -47
- 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 -67
- 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 -163
- package/src/forge/_generated/makeTemplates.json +0 -2
- package/src/forge/_generated/makeTemplates.ts +0 -61
- package/src/forge/_generated/mockMap.json +0 -2
- package/src/forge/_generated/mockMap.ts +0 -7
- package/src/forge/_generated/operationPlaybooks.md +0 -147
- package/src/forge/_generated/packageGraph.json +0 -2
- package/src/forge/_generated/packageGraph.ts +0 -245249
- 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 -327385
- package/src/forge/_generated/runtimeRegistry.ts +0 -2
- package/src/forge/_generated/runtimeRules.md +0 -79
- 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 -3108
- 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,50 @@
|
|
|
1
|
+
import { scrubEnvelopePayload } from "../runtime/telemetry/scrubber.ts";
|
|
2
|
+
|
|
3
|
+
const SECRET_KEY_PATTERN = /password|secret|token|apikey|apiKey|api_key|authorization|cookie/i;
|
|
4
|
+
|
|
5
|
+
export interface DeltaRedactionResult<T> {
|
|
6
|
+
value: T;
|
|
7
|
+
redaction: {
|
|
8
|
+
diagnostics: string[];
|
|
9
|
+
redacted: boolean;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function collectSecretLikeKeys(value: unknown, path: string[] = [], keys: string[] = []): string[] {
|
|
14
|
+
if (!value || typeof value !== "object") {
|
|
15
|
+
return keys;
|
|
16
|
+
}
|
|
17
|
+
if (Array.isArray(value)) {
|
|
18
|
+
value.forEach((item, index) => collectSecretLikeKeys(item, [...path, String(index)], keys));
|
|
19
|
+
return keys;
|
|
20
|
+
}
|
|
21
|
+
for (const [key, child] of Object.entries(value as Record<string, unknown>)) {
|
|
22
|
+
const next = [...path, key];
|
|
23
|
+
if (SECRET_KEY_PATTERN.test(key)) {
|
|
24
|
+
keys.push(next.join("."));
|
|
25
|
+
}
|
|
26
|
+
collectSecretLikeKeys(child, next, keys);
|
|
27
|
+
}
|
|
28
|
+
return keys;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function redactDeltaPayload<T extends Record<string, unknown>>(
|
|
32
|
+
value: T,
|
|
33
|
+
options: { secretValues?: string[] } = {},
|
|
34
|
+
): DeltaRedactionResult<T> {
|
|
35
|
+
const secretKeys = collectSecretLikeKeys(value);
|
|
36
|
+
const scrubbed = scrubEnvelopePayload(value, {
|
|
37
|
+
secretValues: options.secretValues,
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
value: scrubbed.value,
|
|
41
|
+
redaction: {
|
|
42
|
+
diagnostics: [
|
|
43
|
+
...secretKeys.map((key) => `redacted secret-like key ${key}`),
|
|
44
|
+
...scrubbed.diagnostics.map((diagnostic) => diagnostic.message),
|
|
45
|
+
],
|
|
46
|
+
redacted: secretKeys.length > 0 || scrubbed.diagnostics.length > 0,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
export const DELTA_SCHEMA_VERSION = "0.3.1";
|
|
2
|
+
|
|
3
|
+
export const DELTA_SCHEMA_SQL = [
|
|
4
|
+
`CREATE TABLE IF NOT EXISTS delta_meta (
|
|
5
|
+
key text PRIMARY KEY,
|
|
6
|
+
value text NOT NULL,
|
|
7
|
+
updated_at text NOT NULL
|
|
8
|
+
)`,
|
|
9
|
+
`CREATE TABLE IF NOT EXISTS actors (
|
|
10
|
+
id text PRIMARY KEY,
|
|
11
|
+
kind text NOT NULL,
|
|
12
|
+
name text,
|
|
13
|
+
metadata_json text,
|
|
14
|
+
created_at text NOT NULL
|
|
15
|
+
)`,
|
|
16
|
+
`CREATE TABLE IF NOT EXISTS sessions (
|
|
17
|
+
id text PRIMARY KEY,
|
|
18
|
+
workspace_root text NOT NULL,
|
|
19
|
+
source text NOT NULL,
|
|
20
|
+
branch text,
|
|
21
|
+
started_at text NOT NULL,
|
|
22
|
+
ended_at text,
|
|
23
|
+
summary text,
|
|
24
|
+
metadata_json text
|
|
25
|
+
)`,
|
|
26
|
+
`CREATE TABLE IF NOT EXISTS operations (
|
|
27
|
+
id text PRIMARY KEY,
|
|
28
|
+
session_id text,
|
|
29
|
+
txn_id text,
|
|
30
|
+
kind text NOT NULL,
|
|
31
|
+
timestamp text NOT NULL,
|
|
32
|
+
actor_id text,
|
|
33
|
+
summary text,
|
|
34
|
+
data_json text NOT NULL,
|
|
35
|
+
redaction_json text,
|
|
36
|
+
hash text,
|
|
37
|
+
prev_hash text
|
|
38
|
+
)`,
|
|
39
|
+
`CREATE TABLE IF NOT EXISTS file_changes (
|
|
40
|
+
id text PRIMARY KEY,
|
|
41
|
+
operation_id text NOT NULL,
|
|
42
|
+
path text NOT NULL,
|
|
43
|
+
change_type text NOT NULL,
|
|
44
|
+
hash_before text,
|
|
45
|
+
hash_after text,
|
|
46
|
+
diff_summary text,
|
|
47
|
+
semantic_hints_json text
|
|
48
|
+
)`,
|
|
49
|
+
`CREATE TABLE IF NOT EXISTS command_runs (
|
|
50
|
+
id text PRIMARY KEY,
|
|
51
|
+
operation_id text NOT NULL,
|
|
52
|
+
command_name text NOT NULL,
|
|
53
|
+
argv_redacted_json text,
|
|
54
|
+
exit_code integer,
|
|
55
|
+
duration_ms integer,
|
|
56
|
+
diagnostics_json text
|
|
57
|
+
)`,
|
|
58
|
+
`CREATE TABLE IF NOT EXISTS proofs (
|
|
59
|
+
id text PRIMARY KEY,
|
|
60
|
+
operation_id text NOT NULL,
|
|
61
|
+
proof_kind text NOT NULL,
|
|
62
|
+
command text,
|
|
63
|
+
result text NOT NULL,
|
|
64
|
+
assurance text,
|
|
65
|
+
diagnostics_json text,
|
|
66
|
+
artifact_paths_json text
|
|
67
|
+
)`,
|
|
68
|
+
`CREATE TABLE IF NOT EXISTS runtime_calls (
|
|
69
|
+
id text PRIMARY KEY,
|
|
70
|
+
operation_id text NOT NULL,
|
|
71
|
+
entry_name text NOT NULL,
|
|
72
|
+
entry_kind text,
|
|
73
|
+
risk text,
|
|
74
|
+
policy text,
|
|
75
|
+
tenant_scoped integer,
|
|
76
|
+
result text,
|
|
77
|
+
diagnostic_code text,
|
|
78
|
+
trace_id text,
|
|
79
|
+
service text,
|
|
80
|
+
language text,
|
|
81
|
+
needs_approval integer
|
|
82
|
+
)`,
|
|
83
|
+
`ALTER TABLE runtime_calls ADD COLUMN IF NOT EXISTS needs_approval integer`,
|
|
84
|
+
`CREATE TABLE IF NOT EXISTS artifacts (
|
|
85
|
+
id text PRIMARY KEY,
|
|
86
|
+
operation_id text NOT NULL,
|
|
87
|
+
path text NOT NULL,
|
|
88
|
+
artifact_kind text,
|
|
89
|
+
hash text,
|
|
90
|
+
generated integer
|
|
91
|
+
)`,
|
|
92
|
+
`CREATE TABLE IF NOT EXISTS git_mappings (
|
|
93
|
+
id text PRIMARY KEY,
|
|
94
|
+
operation_id text,
|
|
95
|
+
commit_sha text,
|
|
96
|
+
branch text,
|
|
97
|
+
detected_at text,
|
|
98
|
+
confidence real,
|
|
99
|
+
metadata_json text
|
|
100
|
+
)`,
|
|
101
|
+
`CREATE TABLE IF NOT EXISTS work_sessions (
|
|
102
|
+
id text PRIMARY KEY,
|
|
103
|
+
workspace_root text NOT NULL,
|
|
104
|
+
kind text NOT NULL,
|
|
105
|
+
status text NOT NULL,
|
|
106
|
+
title text,
|
|
107
|
+
inferred_intent text,
|
|
108
|
+
confidence real NOT NULL,
|
|
109
|
+
started_at text NOT NULL,
|
|
110
|
+
ended_at text,
|
|
111
|
+
actor_ids_json text,
|
|
112
|
+
git_branch text,
|
|
113
|
+
git_head_start text,
|
|
114
|
+
git_head_end text,
|
|
115
|
+
summary text,
|
|
116
|
+
metadata_json text,
|
|
117
|
+
created_at text NOT NULL,
|
|
118
|
+
updated_at text NOT NULL
|
|
119
|
+
)`,
|
|
120
|
+
`CREATE TABLE IF NOT EXISTS work_session_operations (
|
|
121
|
+
work_session_id text NOT NULL,
|
|
122
|
+
operation_id text NOT NULL,
|
|
123
|
+
link_type text NOT NULL,
|
|
124
|
+
confidence real NOT NULL,
|
|
125
|
+
reason_json text,
|
|
126
|
+
created_at text NOT NULL,
|
|
127
|
+
PRIMARY KEY (work_session_id, operation_id)
|
|
128
|
+
)`,
|
|
129
|
+
`CREATE TABLE IF NOT EXISTS work_session_signals (
|
|
130
|
+
id text PRIMARY KEY,
|
|
131
|
+
work_session_id text,
|
|
132
|
+
operation_id text,
|
|
133
|
+
signal_type text NOT NULL,
|
|
134
|
+
weight real NOT NULL,
|
|
135
|
+
value text,
|
|
136
|
+
metadata_json text,
|
|
137
|
+
created_at text NOT NULL
|
|
138
|
+
)`,
|
|
139
|
+
`CREATE TABLE IF NOT EXISTS work_session_summaries (
|
|
140
|
+
id text PRIMARY KEY,
|
|
141
|
+
work_session_id text NOT NULL,
|
|
142
|
+
summary_type text NOT NULL,
|
|
143
|
+
content text NOT NULL,
|
|
144
|
+
generated_by text,
|
|
145
|
+
created_at text NOT NULL,
|
|
146
|
+
redaction_json text
|
|
147
|
+
)`,
|
|
148
|
+
`CREATE TABLE IF NOT EXISTS timeline_events (
|
|
149
|
+
id text PRIMARY KEY,
|
|
150
|
+
operation_id text,
|
|
151
|
+
session_id text,
|
|
152
|
+
change_id text,
|
|
153
|
+
timestamp text NOT NULL,
|
|
154
|
+
event_kind text NOT NULL,
|
|
155
|
+
title text NOT NULL,
|
|
156
|
+
summary text,
|
|
157
|
+
severity text,
|
|
158
|
+
confidence real NOT NULL,
|
|
159
|
+
data_json text NOT NULL
|
|
160
|
+
)`,
|
|
161
|
+
`CREATE TABLE IF NOT EXISTS timeline_entities (
|
|
162
|
+
id text PRIMARY KEY,
|
|
163
|
+
timeline_event_id text NOT NULL,
|
|
164
|
+
entity_kind text NOT NULL,
|
|
165
|
+
entity_name text NOT NULL,
|
|
166
|
+
role text NOT NULL,
|
|
167
|
+
confidence real NOT NULL
|
|
168
|
+
)`,
|
|
169
|
+
`CREATE TABLE IF NOT EXISTS timeline_edges (
|
|
170
|
+
id text PRIMARY KEY,
|
|
171
|
+
from_event_id text NOT NULL,
|
|
172
|
+
to_event_id text NOT NULL,
|
|
173
|
+
edge_kind text NOT NULL,
|
|
174
|
+
confidence real NOT NULL,
|
|
175
|
+
reason_json text
|
|
176
|
+
)`,
|
|
177
|
+
`CREATE TABLE IF NOT EXISTS timeline_projection_state (
|
|
178
|
+
id text PRIMARY KEY,
|
|
179
|
+
last_operation_id text,
|
|
180
|
+
last_rebuild_at text,
|
|
181
|
+
projection_version text,
|
|
182
|
+
graph_hash text
|
|
183
|
+
)`,
|
|
184
|
+
`CREATE TABLE IF NOT EXISTS agent_event_sources (
|
|
185
|
+
id text PRIMARY KEY,
|
|
186
|
+
source_name text NOT NULL,
|
|
187
|
+
source_kind text NOT NULL,
|
|
188
|
+
integration_kind text NOT NULL,
|
|
189
|
+
trust_level text NOT NULL,
|
|
190
|
+
config_json text,
|
|
191
|
+
created_at text NOT NULL
|
|
192
|
+
)`,
|
|
193
|
+
`CREATE TABLE IF NOT EXISTS external_agent_events (
|
|
194
|
+
id text PRIMARY KEY,
|
|
195
|
+
source_id text NOT NULL,
|
|
196
|
+
external_session_id text,
|
|
197
|
+
external_turn_id text,
|
|
198
|
+
event_kind text NOT NULL,
|
|
199
|
+
captured_at text NOT NULL,
|
|
200
|
+
payload_redacted_json text NOT NULL,
|
|
201
|
+
payload_hash text,
|
|
202
|
+
raw_stored integer DEFAULT 0,
|
|
203
|
+
normalization_status text NOT NULL
|
|
204
|
+
)`,
|
|
205
|
+
`CREATE TABLE IF NOT EXISTS agent_memory_events (
|
|
206
|
+
id text PRIMARY KEY,
|
|
207
|
+
external_event_id text,
|
|
208
|
+
forge_session_id text,
|
|
209
|
+
forge_change_id text,
|
|
210
|
+
operation_id text,
|
|
211
|
+
normalized_kind text NOT NULL,
|
|
212
|
+
summary text,
|
|
213
|
+
confidence real NOT NULL,
|
|
214
|
+
data_json text NOT NULL
|
|
215
|
+
)`,
|
|
216
|
+
`CREATE INDEX IF NOT EXISTS operations_timestamp_idx ON operations(timestamp)`,
|
|
217
|
+
`CREATE INDEX IF NOT EXISTS operations_kind_idx ON operations(kind)`,
|
|
218
|
+
`CREATE INDEX IF NOT EXISTS operations_session_idx ON operations(session_id)`,
|
|
219
|
+
`CREATE INDEX IF NOT EXISTS file_changes_path_idx ON file_changes(path)`,
|
|
220
|
+
`CREATE INDEX IF NOT EXISTS runtime_calls_entry_idx ON runtime_calls(entry_name)`,
|
|
221
|
+
`CREATE INDEX IF NOT EXISTS artifacts_path_idx ON artifacts(path)`,
|
|
222
|
+
`CREATE INDEX IF NOT EXISTS work_sessions_status_idx ON work_sessions(status, updated_at)`,
|
|
223
|
+
`CREATE INDEX IF NOT EXISTS work_sessions_branch_idx ON work_sessions(git_branch)`,
|
|
224
|
+
`CREATE INDEX IF NOT EXISTS work_session_operations_operation_idx ON work_session_operations(operation_id)`,
|
|
225
|
+
`CREATE INDEX IF NOT EXISTS work_session_signals_session_idx ON work_session_signals(work_session_id)`,
|
|
226
|
+
`CREATE INDEX IF NOT EXISTS timeline_events_time_idx ON timeline_events(timestamp)`,
|
|
227
|
+
`CREATE INDEX IF NOT EXISTS timeline_events_kind_idx ON timeline_events(event_kind)`,
|
|
228
|
+
`CREATE INDEX IF NOT EXISTS timeline_events_operation_idx ON timeline_events(operation_id)`,
|
|
229
|
+
`CREATE INDEX IF NOT EXISTS timeline_events_change_idx ON timeline_events(change_id)`,
|
|
230
|
+
`CREATE INDEX IF NOT EXISTS timeline_events_session_idx ON timeline_events(session_id)`,
|
|
231
|
+
`CREATE INDEX IF NOT EXISTS timeline_entities_entity_idx ON timeline_entities(entity_kind, entity_name)`,
|
|
232
|
+
`CREATE INDEX IF NOT EXISTS timeline_entities_event_idx ON timeline_entities(timeline_event_id)`,
|
|
233
|
+
`CREATE INDEX IF NOT EXISTS timeline_edges_from_idx ON timeline_edges(from_event_id)`,
|
|
234
|
+
`CREATE INDEX IF NOT EXISTS timeline_edges_to_idx ON timeline_edges(to_event_id)`,
|
|
235
|
+
`CREATE INDEX IF NOT EXISTS agent_event_sources_name_idx ON agent_event_sources(source_name, integration_kind)`,
|
|
236
|
+
`CREATE INDEX IF NOT EXISTS external_agent_events_source_idx ON external_agent_events(source_id, captured_at)`,
|
|
237
|
+
`CREATE INDEX IF NOT EXISTS external_agent_events_kind_idx ON external_agent_events(event_kind)`,
|
|
238
|
+
`CREATE INDEX IF NOT EXISTS agent_memory_events_kind_idx ON agent_memory_events(normalized_kind)`,
|
|
239
|
+
`CREATE INDEX IF NOT EXISTS agent_memory_events_operation_idx ON agent_memory_events(operation_id)`,
|
|
240
|
+
];
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { DeltaStore, type DeltaWorkSessionDetails, type DeltaWorkSessionSummary } from "./store.ts";
|
|
2
|
+
|
|
3
|
+
export type DeltaSessionSubcommand = "list" | "show" | "rename" | "merge" | "split" | "detach";
|
|
4
|
+
|
|
5
|
+
export interface DeltaSessionCommandInput {
|
|
6
|
+
workspaceRoot: string;
|
|
7
|
+
subcommand: DeltaSessionSubcommand;
|
|
8
|
+
sessionId?: string;
|
|
9
|
+
title?: string;
|
|
10
|
+
sourceSessionId?: string;
|
|
11
|
+
operationId?: string;
|
|
12
|
+
limit?: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface DeltaSessionCommandResult {
|
|
16
|
+
ok: boolean;
|
|
17
|
+
subcommand: DeltaSessionSubcommand;
|
|
18
|
+
sessions?: DeltaWorkSessionSummary[];
|
|
19
|
+
session?: DeltaWorkSessionDetails;
|
|
20
|
+
detached?: boolean;
|
|
21
|
+
message?: string;
|
|
22
|
+
exitCode: number;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export async function runDeltaSessionCommand(input: DeltaSessionCommandInput): Promise<DeltaSessionCommandResult> {
|
|
26
|
+
const readOnly = input.subcommand === "list" || input.subcommand === "show";
|
|
27
|
+
const store = await DeltaStore.open(input.workspaceRoot, { access: readOnly ? "read" : "write" });
|
|
28
|
+
try {
|
|
29
|
+
switch (input.subcommand) {
|
|
30
|
+
case "list":
|
|
31
|
+
return {
|
|
32
|
+
ok: true,
|
|
33
|
+
subcommand: input.subcommand,
|
|
34
|
+
sessions: await store.listWorkSessions(input.limit),
|
|
35
|
+
exitCode: 0,
|
|
36
|
+
};
|
|
37
|
+
case "show": {
|
|
38
|
+
const session = await store.getWorkSessionDetails(input.sessionId ?? "current");
|
|
39
|
+
return session
|
|
40
|
+
? { ok: true, subcommand: input.subcommand, session, exitCode: 0 }
|
|
41
|
+
: { ok: false, subcommand: input.subcommand, message: "work session not found", exitCode: 1 };
|
|
42
|
+
}
|
|
43
|
+
case "rename": {
|
|
44
|
+
if (!input.title) {
|
|
45
|
+
return { ok: false, subcommand: input.subcommand, message: "forge session rename requires a title", exitCode: 1 };
|
|
46
|
+
}
|
|
47
|
+
const session = await store.renameWorkSession(input.sessionId ?? "current", input.title);
|
|
48
|
+
return session
|
|
49
|
+
? { ok: true, subcommand: input.subcommand, session, exitCode: 0 }
|
|
50
|
+
: { ok: false, subcommand: input.subcommand, message: "work session not found", exitCode: 1 };
|
|
51
|
+
}
|
|
52
|
+
case "merge": {
|
|
53
|
+
if (!input.sourceSessionId) {
|
|
54
|
+
return { ok: false, subcommand: input.subcommand, message: "forge session merge requires a source session", exitCode: 1 };
|
|
55
|
+
}
|
|
56
|
+
const session = await store.mergeWorkSessions(input.sessionId ?? "current", input.sourceSessionId);
|
|
57
|
+
return session
|
|
58
|
+
? { ok: true, subcommand: input.subcommand, session, exitCode: 0 }
|
|
59
|
+
: { ok: false, subcommand: input.subcommand, message: "work session merge failed", exitCode: 1 };
|
|
60
|
+
}
|
|
61
|
+
case "split": {
|
|
62
|
+
if (!input.operationId) {
|
|
63
|
+
return { ok: false, subcommand: input.subcommand, message: "forge session split requires an operation id", exitCode: 1 };
|
|
64
|
+
}
|
|
65
|
+
const session = await store.splitWorkSession(input.sessionId ?? "current", input.operationId);
|
|
66
|
+
return session
|
|
67
|
+
? { ok: true, subcommand: input.subcommand, session, exitCode: 0 }
|
|
68
|
+
: { ok: false, subcommand: input.subcommand, message: "work session split failed", exitCode: 1 };
|
|
69
|
+
}
|
|
70
|
+
case "detach": {
|
|
71
|
+
if (!input.operationId) {
|
|
72
|
+
return { ok: false, subcommand: input.subcommand, message: "forge session detach requires an operation id", exitCode: 1 };
|
|
73
|
+
}
|
|
74
|
+
const detached = await store.detachWorkSessionOperation(input.operationId);
|
|
75
|
+
return { ok: detached, subcommand: input.subcommand, detached, exitCode: detached ? 0 : 1 };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
} finally {
|
|
79
|
+
await store.close();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function formatDeltaSessionHuman(result: DeltaSessionCommandResult): string {
|
|
84
|
+
if (!result.ok) {
|
|
85
|
+
return `${result.message ?? "session command failed"}\n`;
|
|
86
|
+
}
|
|
87
|
+
if (result.sessions) {
|
|
88
|
+
const lines = ["Work Sessions", ""];
|
|
89
|
+
if (result.sessions.length === 0) {
|
|
90
|
+
lines.push("none");
|
|
91
|
+
} else {
|
|
92
|
+
for (const session of result.sessions) {
|
|
93
|
+
lines.push(`${session.id} ${session.status} ${session.confidence.toFixed(2)} ${session.title}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return `${lines.join("\n")}\n`;
|
|
97
|
+
}
|
|
98
|
+
if (result.session) {
|
|
99
|
+
return formatWorkSessionDetails(result.session);
|
|
100
|
+
}
|
|
101
|
+
if (result.detached !== undefined) {
|
|
102
|
+
return result.detached ? "operation detached\n" : "operation was not linked\n";
|
|
103
|
+
}
|
|
104
|
+
return "session ok\n";
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function formatDeltaSessionJson(result: DeltaSessionCommandResult): string {
|
|
108
|
+
return `${JSON.stringify(result, null, 2)}\n`;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function formatWorkSessionDetails(session: DeltaWorkSessionDetails): string {
|
|
112
|
+
const lines = ["Work Session", ""];
|
|
113
|
+
lines.push(`id: ${session.id}`);
|
|
114
|
+
lines.push(`title: ${session.title}`);
|
|
115
|
+
lines.push(`status: ${session.status}`);
|
|
116
|
+
lines.push(`confidence: ${session.confidence.toFixed(2)}`);
|
|
117
|
+
if (session.gitBranch) {
|
|
118
|
+
lines.push(`branch: ${session.gitBranch}`);
|
|
119
|
+
}
|
|
120
|
+
if (session.summary) {
|
|
121
|
+
lines.push(`summary: ${session.summary}`);
|
|
122
|
+
}
|
|
123
|
+
lines.push("");
|
|
124
|
+
lines.push("Why:");
|
|
125
|
+
if (session.reasons.length === 0) {
|
|
126
|
+
lines.push(" no stored signals");
|
|
127
|
+
} else {
|
|
128
|
+
for (const reason of session.reasons.slice(0, 8)) {
|
|
129
|
+
lines.push(` - ${reason.signal}${reason.value ? `: ${reason.value}` : ""} (${reason.weight})`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
lines.push("");
|
|
133
|
+
lines.push("Operations:");
|
|
134
|
+
if (session.operations.length === 0) {
|
|
135
|
+
lines.push(" none");
|
|
136
|
+
} else {
|
|
137
|
+
for (const operation of session.operations.slice(-12)) {
|
|
138
|
+
lines.push(` ${operation.timestamp.slice(11, 16)} ${operation.kind}${operation.summary ? ` ${operation.summary}` : ""}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return `${lines.join("\n")}\n`;
|
|
142
|
+
}
|