@interf/compiler 0.22.2 → 0.33.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/README.md +175 -234
- package/dist/bin-mcp.d.ts +2 -0
- package/dist/bin-mcp.js +63 -0
- package/dist/bin-runtime.d.ts +2 -0
- package/dist/bin-runtime.js +111 -0
- package/dist/cli/commands/agents.js +4 -4
- package/dist/cli/commands/auth.d.ts +20 -0
- package/dist/cli/commands/auth.js +161 -0
- package/dist/cli/commands/benchmark.d.ts +10 -0
- package/dist/cli/commands/benchmark.js +88 -0
- package/dist/cli/commands/build-plan.js +95 -103
- package/dist/cli/commands/build.d.ts +1 -1
- package/dist/cli/commands/build.js +16 -15
- package/dist/cli/commands/doctor.js +3 -3
- package/dist/cli/commands/graphs.d.ts +2 -0
- package/dist/cli/commands/graphs.js +199 -0
- package/dist/cli/commands/login.js +4 -6
- package/dist/cli/commands/logout.js +1 -1
- package/dist/cli/commands/mcp.d.ts +3 -2
- package/dist/cli/commands/mcp.js +721 -204
- package/dist/cli/commands/project.d.ts +2 -0
- package/dist/cli/commands/project.js +202 -0
- package/dist/cli/commands/reset.d.ts +1 -1
- package/dist/cli/commands/reset.js +10 -10
- package/dist/cli/commands/runs.js +52 -26
- package/dist/cli/commands/runtime.d.ts +24 -0
- package/dist/cli/commands/runtime.js +373 -0
- package/dist/cli/commands/status.d.ts +1 -0
- package/dist/cli/commands/status.js +33 -22
- package/dist/cli/commands/traces.d.ts +2 -0
- package/dist/cli/commands/traces.js +125 -0
- package/dist/cli/commands/wizard.js +155 -150
- package/dist/cli/index.d.ts +7 -4
- package/dist/cli/index.js +13 -7
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/packages/build-plans/authoring/brief.d.ts +517 -0
- package/dist/packages/build-plans/authoring/brief.js +89 -0
- package/dist/packages/build-plans/authoring/build-plan-authoring.d.ts +10 -10
- package/dist/packages/build-plans/authoring/build-plan-authoring.js +66 -26
- package/dist/packages/build-plans/authoring/build-plan-edit-session.d.ts +1 -1
- package/dist/packages/build-plans/authoring/build-plan-edit-session.js +8 -2
- package/dist/packages/build-plans/authoring/build-plan-improvement.d.ts +9 -6
- package/dist/packages/build-plans/authoring/build-plan-improvement.js +39 -42
- package/dist/packages/build-plans/authoring/lib/build-plan-edit-utils.js +7 -7
- package/dist/packages/build-plans/build-plan-resolution.d.ts +1 -1
- package/dist/packages/build-plans/build-plan-resolution.js +3 -3
- package/dist/packages/build-plans/index.d.ts +1 -1
- package/dist/packages/build-plans/index.js +1 -1
- package/dist/packages/build-plans/package/build-plan-definitions.d.ts +14 -12
- package/dist/packages/build-plans/package/build-plan-definitions.js +40 -39
- package/dist/packages/build-plans/package/build-plan-helpers.d.ts +3 -2
- package/dist/packages/build-plans/package/build-plan-helpers.js +27 -13
- package/dist/packages/build-plans/package/build-plan-review-paths.d.ts +5 -5
- package/dist/packages/build-plans/package/build-plan-review-paths.js +15 -15
- package/dist/packages/build-plans/package/build-plan-stage-runner.d.ts +4 -4
- package/dist/packages/build-plans/package/build-plan-stage-runner.js +22 -11
- package/dist/packages/build-plans/package/builtin-build-plan.d.ts +5 -6
- package/dist/packages/build-plans/package/builtin-build-plan.js +7 -8
- package/dist/packages/build-plans/package/context-interface.d.ts +11 -9
- package/dist/packages/build-plans/package/context-interface.js +14 -33
- package/dist/packages/build-plans/package/interf-build-plan-package.d.ts +6 -17
- package/dist/packages/build-plans/package/interf-build-plan-package.js +56 -52
- package/dist/packages/build-plans/package/local-build-plans.d.ts +12 -10
- package/dist/packages/build-plans/package/local-build-plans.js +56 -31
- package/dist/packages/build-plans/package/user-build-plans.js +1 -1
- package/dist/packages/contracts/index.d.ts +4 -2
- package/dist/packages/contracts/index.js +2 -1
- package/dist/packages/contracts/lib/project-paths.d.ts +137 -0
- package/dist/packages/contracts/lib/project-paths.js +211 -0
- package/dist/packages/contracts/lib/project-schema.d.ts +160 -0
- package/dist/packages/contracts/lib/project-schema.js +113 -0
- package/dist/packages/contracts/lib/schema.d.ts +739 -80
- package/dist/packages/contracts/lib/schema.js +410 -75
- package/dist/packages/contracts/utils/parse.js +67 -0
- package/dist/packages/projects/index.d.ts +6 -0
- package/dist/packages/{project → projects}/index.js +0 -3
- package/dist/packages/{project → projects}/interf-detect.d.ts +12 -12
- package/dist/packages/{project → projects}/interf-detect.js +56 -50
- package/dist/packages/projects/interf.d.ts +2 -0
- package/dist/packages/projects/interf.js +1 -0
- package/dist/packages/projects/lib/schema.d.ts +79 -0
- package/dist/packages/projects/lib/schema.js +89 -0
- package/dist/packages/projects/source-config.d.ts +58 -0
- package/dist/packages/projects/source-config.js +352 -0
- package/dist/packages/projects/source-folders.d.ts +11 -0
- package/dist/packages/{project → projects}/source-folders.js +26 -26
- package/dist/packages/{engine → runtime}/action-planner.d.ts +1 -1
- package/dist/packages/{engine → runtime}/action-planner.js +20 -22
- package/dist/packages/runtime/action-values.d.ts +1 -0
- package/dist/packages/runtime/action-values.js +1 -0
- package/dist/packages/runtime/actions/errors.d.ts +2 -0
- package/dist/packages/runtime/actions/errors.js +12 -0
- package/dist/packages/runtime/actions/fields.d.ts +82 -0
- package/dist/packages/runtime/actions/form-builders.d.ts +14 -0
- package/dist/packages/runtime/actions/form-builders.js +619 -0
- package/dist/packages/runtime/actions/form-validators.d.ts +8 -0
- package/dist/packages/runtime/actions/form-validators.js +128 -0
- package/dist/packages/runtime/actions/helpers.d.ts +11 -0
- package/dist/packages/runtime/actions/helpers.js +80 -0
- package/dist/packages/runtime/actions/index.d.ts +8 -0
- package/dist/packages/runtime/actions/index.js +11 -0
- package/dist/packages/runtime/actions/registry.d.ts +64 -0
- package/dist/packages/runtime/actions/registry.js +62 -0
- package/dist/packages/runtime/actions/requests.d.ts +45 -0
- package/dist/packages/runtime/actions/requests.js +158 -0
- package/dist/packages/runtime/actions/schemas.d.ts +154 -0
- package/dist/packages/runtime/actions/schemas.js +36 -0
- package/dist/packages/runtime/agent-handoff.d.ts +11 -0
- package/dist/packages/runtime/agent-handoff.js +101 -0
- package/dist/packages/{engine → runtime}/agents/index.d.ts +1 -2
- package/dist/packages/{engine → runtime}/agents/index.js +1 -2
- package/dist/packages/runtime/agents/lib/args.d.ts +14 -0
- package/dist/packages/runtime/agents/lib/args.js +24 -0
- package/dist/packages/{engine → runtime}/agents/lib/constants.d.ts +4 -1
- package/dist/packages/runtime/agents/lib/constants.js +13 -0
- package/dist/packages/runtime/agents/lib/context-graph-bootstrap.d.ts +3 -0
- package/dist/packages/{engine/agents/lib/verifiable-context-bootstrap.js → runtime/agents/lib/context-graph-bootstrap.js} +5 -6
- package/dist/packages/{engine → runtime}/agents/lib/detection.d.ts +5 -0
- package/dist/packages/{engine → runtime}/agents/lib/detection.js +16 -7
- package/dist/packages/{engine → runtime}/agents/lib/execution-profile.js +8 -14
- package/dist/packages/{engine → runtime}/agents/lib/execution.js +14 -4
- package/dist/packages/{engine → runtime}/agents/lib/preflight.js +15 -13
- package/dist/packages/{engine → runtime}/agents/lib/render.js +4 -4
- package/dist/packages/runtime/agents/lib/shell-fs.d.ts +18 -0
- package/dist/packages/runtime/agents/lib/shell-fs.js +190 -0
- package/dist/packages/runtime/agents/lib/shell-paths.d.ts +16 -0
- package/dist/packages/runtime/agents/lib/shell-paths.js +63 -0
- package/dist/packages/runtime/agents/lib/shell-projection.d.ts +25 -0
- package/dist/packages/runtime/agents/lib/shell-projection.js +314 -0
- package/dist/packages/runtime/agents/lib/shell-templates.d.ts +30 -0
- package/dist/packages/runtime/agents/lib/shell-templates.js +452 -0
- package/dist/packages/runtime/agents/lib/shell-workspace.d.ts +17 -0
- package/dist/packages/runtime/agents/lib/shell-workspace.js +70 -0
- package/dist/packages/runtime/agents/lib/shells.d.ts +63 -0
- package/dist/packages/runtime/agents/lib/shells.js +383 -0
- package/dist/packages/{engine → runtime}/agents/lib/user-config.d.ts +8 -2
- package/dist/packages/{engine → runtime}/agents/lib/user-config.js +8 -2
- package/dist/packages/runtime/agents/providers/claude-code.d.ts +13 -0
- package/dist/packages/runtime/agents/providers/claude-code.js +45 -0
- package/dist/packages/runtime/agents/providers/codex.d.ts +17 -0
- package/dist/packages/runtime/agents/providers/codex.js +64 -0
- package/dist/packages/runtime/agents/providers/cursor.d.ts +9 -0
- package/dist/packages/runtime/agents/providers/cursor.js +24 -0
- package/dist/packages/runtime/agents/providers/index.d.ts +9 -0
- package/dist/packages/runtime/agents/providers/index.js +31 -0
- package/dist/packages/runtime/agents/providers/types.d.ts +50 -0
- package/dist/packages/{engine → runtime}/agents/registry.d.ts +13 -2
- package/dist/packages/{engine → runtime}/agents/registry.js +48 -10
- package/dist/packages/{engine → runtime}/agents/role-executors.d.ts +1 -1
- package/dist/packages/{engine → runtime}/agents/role-executors.js +7 -6
- package/dist/packages/{engine → runtime}/agents/role-router.js +7 -5
- package/dist/packages/runtime/auth/account-context.d.ts +52 -0
- package/dist/packages/runtime/auth/account-context.js +68 -0
- package/dist/packages/runtime/auth/auth-flow.d.ts +73 -0
- package/dist/packages/runtime/auth/auth-flow.js +189 -0
- package/dist/packages/runtime/auth/jwt-validator.d.ts +58 -0
- package/dist/packages/runtime/auth/jwt-validator.js +86 -0
- package/dist/packages/runtime/auth/keychain.d.ts +35 -0
- package/dist/packages/runtime/auth/keychain.js +85 -0
- package/dist/packages/runtime/auth/session-store.d.ts +38 -0
- package/dist/packages/runtime/auth/session-store.js +88 -0
- package/dist/packages/runtime/auth/workos-client.d.ts +58 -0
- package/dist/packages/runtime/auth/workos-client.js +87 -0
- package/dist/packages/runtime/benchmark-question-draft.d.ts +20 -0
- package/dist/packages/runtime/benchmark-question-draft.js +124 -0
- package/dist/packages/runtime/build/artifact-counts.d.ts +1 -0
- package/dist/packages/{engine → runtime}/build/artifact-counts.js +5 -9
- package/dist/packages/{engine → runtime}/build/artifact-status.d.ts +5 -5
- package/dist/packages/{engine → runtime}/build/artifact-status.js +25 -23
- package/dist/packages/runtime/build/atomic-fs.d.ts +3 -0
- package/dist/packages/runtime/build/atomic-fs.js +95 -0
- package/dist/packages/runtime/build/billing-events.d.ts +78 -0
- package/dist/packages/{engine → runtime}/build/billing-events.js +17 -19
- package/dist/packages/runtime/build/build-evidence.d.ts +15 -0
- package/dist/packages/runtime/build/build-evidence.js +173 -0
- package/dist/packages/{engine → runtime}/build/build-pipeline.d.ts +12 -8
- package/dist/packages/runtime/build/build-pipeline.js +304 -0
- package/dist/packages/{engine → runtime}/build/build-plan-primitives.d.ts +1 -1
- package/dist/packages/{engine → runtime}/build/build-plan-primitives.js +0 -1
- package/dist/packages/runtime/build/build-plan-runs.d.ts +14 -0
- package/dist/packages/runtime/build/build-plan-runs.js +31 -0
- package/dist/packages/runtime/build/build-stage-plan.d.ts +16 -0
- package/dist/packages/{engine → runtime}/build/build-stage-plan.js +28 -29
- package/dist/packages/{engine → runtime}/build/build-stage-runner.d.ts +2 -1
- package/dist/packages/runtime/build/build-stage-runner.js +165 -0
- package/dist/packages/{engine → runtime}/build/build-target.d.ts +4 -4
- package/dist/packages/runtime/build/build-target.js +16 -0
- package/dist/packages/{engine → runtime}/build/check-evaluator.d.ts +14 -16
- package/dist/packages/runtime/build/check-evaluator.js +575 -0
- package/dist/packages/runtime/build/context-graph-paths.d.ts +51 -0
- package/dist/packages/runtime/build/context-graph-paths.js +133 -0
- package/dist/packages/runtime/build/context-graph-schema.d.ts +19 -0
- package/dist/packages/runtime/build/context-graph-schema.js +39 -0
- package/dist/packages/{engine → runtime}/build/discovery.d.ts +2 -2
- package/dist/packages/{engine → runtime}/build/discovery.js +4 -4
- package/dist/packages/{engine → runtime}/build/index.d.ts +5 -3
- package/dist/packages/{engine → runtime}/build/index.js +5 -3
- package/dist/packages/{engine → runtime}/build/lib/schema.d.ts +221 -88
- package/dist/packages/{engine → runtime}/build/lib/schema.js +61 -41
- package/dist/packages/runtime/build/reset.d.ts +2 -0
- package/dist/packages/runtime/build/reset.js +62 -0
- package/dist/packages/{engine → runtime}/build/runtime-contracts.js +5 -5
- package/dist/packages/runtime/build/runtime-inventory.d.ts +7 -0
- package/dist/packages/{engine → runtime}/build/runtime-inventory.js +3 -3
- package/dist/packages/{engine → runtime}/build/runtime-paths.js +6 -6
- package/dist/packages/{engine → runtime}/build/runtime-prompt.js +7 -6
- package/dist/packages/{engine → runtime}/build/runtime-reconcile.d.ts +1 -1
- package/dist/packages/{engine → runtime}/build/runtime-reconcile.js +25 -21
- package/dist/packages/runtime/build/runtime-runs.d.ts +10 -0
- package/dist/packages/runtime/build/runtime-runs.js +265 -0
- package/dist/packages/{engine → runtime}/build/runtime-types.d.ts +6 -6
- package/dist/packages/runtime/build/runtime-types.js +1 -0
- package/dist/packages/runtime/build/runtime.d.ts +6 -0
- package/dist/packages/runtime/build/runtime.js +5 -0
- package/dist/packages/runtime/build/source-files.d.ts +58 -0
- package/dist/packages/runtime/build/source-files.js +184 -0
- package/dist/packages/runtime/build/source-inventory.d.ts +27 -0
- package/dist/packages/runtime/build/source-inventory.js +273 -0
- package/dist/packages/runtime/build/source-manifest.d.ts +52 -0
- package/dist/packages/runtime/build/source-manifest.js +192 -0
- package/dist/packages/runtime/build/stage-evidence.d.ts +22 -0
- package/dist/packages/runtime/build/stage-evidence.js +317 -0
- package/dist/packages/runtime/build/stage-reuse.d.ts +11 -0
- package/dist/packages/runtime/build/stage-reuse.js +142 -0
- package/dist/packages/runtime/build/state-artifacts.d.ts +9 -0
- package/dist/packages/runtime/build/state-artifacts.js +14 -0
- package/dist/packages/runtime/build/state-health.d.ts +4 -0
- package/dist/packages/{engine → runtime}/build/state-health.js +21 -26
- package/dist/packages/runtime/build/state-io.d.ts +12 -0
- package/dist/packages/runtime/build/state-io.js +119 -0
- package/dist/packages/{engine → runtime}/build/state-paths.d.ts +3 -1
- package/dist/packages/runtime/build/state-paths.js +22 -0
- package/dist/packages/runtime/build/state-view.d.ts +5 -0
- package/dist/packages/{engine → runtime}/build/state-view.js +60 -33
- package/dist/packages/runtime/build/state.d.ts +7 -0
- package/dist/packages/runtime/build/state.js +12 -0
- package/dist/packages/runtime/build/traces.d.ts +30 -0
- package/dist/packages/runtime/build/traces.js +133 -0
- package/dist/packages/{engine/build/validate-verifiable-context.d.ts → runtime/build/validate-context-graph.d.ts} +6 -6
- package/dist/packages/{engine/build/validate-verifiable-context.js → runtime/build/validate-context-graph.js} +48 -35
- package/dist/packages/{engine → runtime}/build/validate.d.ts +5 -5
- package/dist/packages/{engine → runtime}/build/validate.js +26 -26
- package/dist/packages/{engine → runtime}/client.d.ts +15 -15
- package/dist/packages/{engine → runtime}/client.js +41 -24
- package/dist/packages/{engine → runtime}/connection-config.d.ts +3 -2
- package/dist/packages/{engine → runtime}/connection-config.js +9 -8
- package/dist/packages/runtime/context-checks.d.ts +10 -0
- package/dist/packages/runtime/context-checks.js +114 -0
- package/dist/packages/runtime/context-graph-scaffold.d.ts +9 -0
- package/dist/packages/runtime/context-graph-scaffold.js +134 -0
- package/dist/packages/runtime/entitlement-guard.d.ts +43 -0
- package/dist/packages/runtime/entitlement-guard.js +70 -0
- package/dist/packages/{engine → runtime}/execution/index.d.ts +2 -2
- package/dist/packages/{engine → runtime}/execution/index.js +1 -1
- package/dist/packages/{engine → runtime}/execution/lib/schema.d.ts +270 -192
- package/dist/packages/{engine → runtime}/execution/lib/schema.js +35 -32
- package/dist/packages/runtime/index.d.ts +29 -0
- package/dist/packages/runtime/index.js +21 -0
- package/dist/packages/runtime/instance-paths.d.ts +30 -0
- package/dist/packages/runtime/instance-paths.js +29 -0
- package/dist/packages/{engine → runtime}/native-run-handlers.d.ts +4 -4
- package/dist/packages/{engine → runtime}/native-run-handlers.js +184 -152
- package/dist/packages/runtime/plan-artifact-contract.d.ts +17 -0
- package/dist/packages/runtime/plan-artifact-contract.js +42 -0
- package/dist/packages/runtime/project-entries.d.ts +11 -0
- package/dist/packages/runtime/project-entries.js +49 -0
- package/dist/packages/runtime/project-source-state.d.ts +26 -0
- package/dist/packages/runtime/project-source-state.js +53 -0
- package/dist/packages/runtime/project-store.d.ts +85 -0
- package/dist/packages/runtime/project-store.js +168 -0
- package/dist/packages/runtime/requested-artifacts.d.ts +7 -0
- package/dist/packages/{engine → runtime}/requested-artifacts.js +23 -1
- package/dist/packages/{engine → runtime}/run-observability.d.ts +2 -1
- package/dist/packages/{engine → runtime}/run-observability.js +166 -84
- package/dist/packages/runtime/runtime-action-proposals.d.ts +7 -0
- package/dist/packages/runtime/runtime-action-proposals.js +542 -0
- package/dist/packages/runtime/runtime-build-plans.d.ts +5 -0
- package/dist/packages/runtime/runtime-build-plans.js +131 -0
- package/dist/packages/runtime/runtime-build-runs.d.ts +47 -0
- package/dist/packages/runtime/runtime-build-runs.js +562 -0
- package/dist/packages/runtime/runtime-caches.d.ts +91 -0
- package/dist/packages/{engine → runtime}/runtime-caches.js +77 -49
- package/dist/packages/{engine → runtime}/runtime-event-applier.d.ts +3 -1
- package/dist/packages/{engine → runtime}/runtime-event-applier.js +53 -17
- package/dist/packages/runtime/runtime-executor.d.ts +22 -0
- package/dist/packages/runtime/runtime-executor.js +131 -0
- package/dist/packages/runtime/runtime-jobs.d.ts +13 -0
- package/dist/packages/runtime/runtime-jobs.js +463 -0
- package/dist/packages/runtime/runtime-observability.d.ts +11 -0
- package/dist/packages/runtime/runtime-observability.js +39 -0
- package/dist/packages/{engine → runtime}/runtime-persistence.d.ts +9 -18
- package/dist/packages/{engine → runtime}/runtime-persistence.js +25 -25
- package/dist/packages/runtime/runtime-project-mutations.d.ts +7 -0
- package/dist/packages/runtime/runtime-project-mutations.js +64 -0
- package/dist/packages/runtime/runtime-project-reads.d.ts +15 -0
- package/dist/packages/runtime/runtime-project-reads.js +381 -0
- package/dist/packages/runtime/runtime-proposal-helpers.d.ts +22 -0
- package/dist/packages/runtime/runtime-proposal-helpers.js +223 -0
- package/dist/packages/{engine → runtime}/runtime-resource-builders.d.ts +21 -16
- package/dist/packages/{engine → runtime}/runtime-resource-builders.js +48 -38
- package/dist/packages/runtime/runtime-verify-runs.d.ts +84 -0
- package/dist/packages/runtime/runtime-verify-runs.js +295 -0
- package/dist/packages/runtime/runtime.d.ts +1165 -0
- package/dist/packages/runtime/runtime.js +417 -0
- package/dist/packages/runtime/schemas/actions.d.ts +1182 -0
- package/dist/packages/runtime/schemas/actions.js +117 -0
- package/dist/packages/runtime/schemas/agents.d.ts +76 -0
- package/dist/packages/runtime/schemas/agents.js +41 -0
- package/dist/packages/runtime/schemas/build-plans.d.ts +959 -0
- package/dist/packages/runtime/schemas/build-plans.js +107 -0
- package/dist/packages/runtime/schemas/files.d.ts +567 -0
- package/dist/packages/runtime/schemas/files.js +51 -0
- package/dist/packages/runtime/schemas/index.d.ts +8 -0
- package/dist/packages/runtime/schemas/index.js +12 -0
- package/dist/packages/runtime/schemas/instance.d.ts +141 -0
- package/dist/packages/runtime/schemas/instance.js +143 -0
- package/dist/packages/runtime/schemas/jobs.d.ts +339 -0
- package/dist/packages/runtime/schemas/jobs.js +103 -0
- package/dist/packages/runtime/schemas/projects.d.ts +339 -0
- package/dist/packages/runtime/schemas/projects.js +136 -0
- package/dist/packages/runtime/schemas/runs.d.ts +2676 -0
- package/dist/packages/runtime/schemas/runs.js +98 -0
- package/dist/packages/runtime/service/index.d.ts +3 -0
- package/dist/packages/runtime/service/index.js +3 -0
- package/dist/packages/runtime/service/openapi.d.ts +7 -0
- package/dist/packages/runtime/service/openapi.js +117 -0
- package/dist/packages/runtime/service/operations.d.ts +1490 -0
- package/dist/packages/runtime/service/operations.js +245 -0
- package/dist/packages/runtime/service/routes.d.ts +106 -0
- package/dist/packages/runtime/service/routes.js +120 -0
- package/dist/packages/runtime/service/server-api-files.d.ts +10 -0
- package/dist/packages/runtime/service/server-api-files.js +85 -0
- package/dist/packages/runtime/service/server-app-boot.d.ts +4 -0
- package/dist/packages/runtime/service/server-app-boot.js +46 -0
- package/dist/packages/runtime/service/server-guards.d.ts +63 -0
- package/dist/packages/runtime/service/server-guards.js +181 -0
- package/dist/packages/runtime/service/server-helpers.d.ts +27 -0
- package/dist/packages/runtime/service/server-helpers.js +89 -0
- package/dist/packages/runtime/service/server-instance-helpers.d.ts +30 -0
- package/dist/packages/runtime/service/server-instance-helpers.js +114 -0
- package/dist/packages/runtime/service/server-routes-action-proposals.d.ts +3 -0
- package/dist/packages/runtime/service/server-routes-action-proposals.js +43 -0
- package/dist/packages/runtime/service/server-routes-agents.d.ts +4 -0
- package/dist/packages/runtime/service/server-routes-agents.js +198 -0
- package/dist/packages/runtime/service/server-routes-auth.d.ts +33 -0
- package/dist/packages/runtime/service/server-routes-auth.js +138 -0
- package/dist/packages/runtime/service/server-routes-build-plans.d.ts +3 -0
- package/dist/packages/runtime/service/server-routes-build-plans.js +83 -0
- package/dist/packages/runtime/service/server-routes-discovery.d.ts +4 -0
- package/dist/packages/runtime/service/server-routes-discovery.js +196 -0
- package/dist/packages/runtime/service/server-routes-events.d.ts +5 -0
- package/dist/packages/runtime/service/server-routes-events.js +99 -0
- package/dist/packages/runtime/service/server-routes-project-context.d.ts +9 -0
- package/dist/packages/runtime/service/server-routes-project-context.js +192 -0
- package/dist/packages/runtime/service/server-routes-project-jobs.d.ts +9 -0
- package/dist/packages/runtime/service/server-routes-project-jobs.js +130 -0
- package/dist/packages/runtime/service/server-routes-project-runs.d.ts +14 -0
- package/dist/packages/runtime/service/server-routes-project-runs.js +85 -0
- package/dist/packages/runtime/service/server-routes-projects.d.ts +4 -0
- package/dist/packages/runtime/service/server-routes-projects.js +92 -0
- package/dist/packages/runtime/service/server-routes-runs.d.ts +3 -0
- package/dist/packages/runtime/service/server-routes-runs.js +112 -0
- package/dist/packages/runtime/service/server.d.ts +37 -0
- package/dist/packages/runtime/service/server.js +300 -0
- package/dist/packages/{engine → runtime/service}/service-registry.d.ts +5 -5
- package/dist/packages/{engine → runtime/service}/service-registry.js +7 -7
- package/dist/packages/runtime/verify/benchmark-run.d.ts +81 -0
- package/dist/packages/runtime/verify/benchmark-run.js +303 -0
- package/dist/packages/{engine → runtime}/verify/index.d.ts +2 -2
- package/dist/packages/{engine → runtime}/verify/index.js +1 -1
- package/dist/packages/{engine → runtime}/verify/lib/schema.d.ts +83 -16
- package/dist/packages/{engine → runtime}/verify/lib/schema.js +26 -18
- package/dist/packages/{engine → runtime}/verify/verify-execution.js +11 -11
- package/dist/packages/{engine → runtime}/verify/verify-paths.d.ts +4 -4
- package/dist/packages/runtime/verify/verify-paths.js +61 -0
- package/dist/packages/{engine → runtime}/verify/verify-sandbox.d.ts +1 -1
- package/dist/packages/runtime/verify/verify-sandbox.js +88 -0
- package/dist/packages/{engine → runtime}/verify/verify-specs.d.ts +2 -0
- package/dist/packages/{engine → runtime}/verify/verify-specs.js +5 -3
- package/dist/packages/runtime/verify/verify-targets.d.ts +5 -0
- package/dist/packages/{engine → runtime}/verify/verify-targets.js +12 -12
- package/dist/packages/runtime/verify/verify-types.js +1 -0
- package/dist/packages/{engine → runtime}/verify/verify.d.ts +1 -1
- package/dist/packages/{engine → runtime}/verify/verify.js +1 -1
- package/dist/packages/runtime/wire-schemas.d.ts +18 -0
- package/dist/packages/runtime/wire-schemas.js +27 -0
- package/package.json +39 -31
- package/public-repo/CONTRIBUTING.md +7 -16
- package/public-repo/README.md +175 -234
- package/public-repo/SECURITY.md +3 -4
- package/public-repo/build-plans/interf-default/README.md +19 -14
- package/public-repo/build-plans/interf-default/build/stages/shape/SKILL.md +18 -11
- package/public-repo/build-plans/interf-default/build/stages/structure/SKILL.md +12 -5
- package/public-repo/build-plans/interf-default/build/stages/summarize/SKILL.md +16 -4
- package/public-repo/build-plans/interf-default/build-plan.json +34 -28
- package/public-repo/build-plans/interf-default/build-plan.schema.json +54 -32
- package/public-repo/build-plans/interf-default/improve/SKILL.md +3 -3
- package/public-repo/build-plans/interf-default/use/query/SKILL.md +17 -11
- package/public-repo/openapi/local-service.openapi.json +6803 -0
- package/public-repo/skills/interf/SKILL.md +460 -179
- package/dist/cli/commands/prep.d.ts +0 -2
- package/dist/cli/commands/prep.js +0 -240
- package/dist/cli/commands/test.d.ts +0 -10
- package/dist/cli/commands/test.js +0 -85
- package/dist/cli/commands/web.d.ts +0 -2
- package/dist/cli/commands/web.js +0 -286
- package/dist/interf-ui/404.html +0 -1
- package/dist/interf-ui/__next.__PAGE__.txt +0 -10
- package/dist/interf-ui/__next._full.txt +0 -20
- package/dist/interf-ui/__next._head.txt +0 -5
- package/dist/interf-ui/__next._index.txt +0 -5
- package/dist/interf-ui/__next._tree.txt +0 -5
- package/dist/interf-ui/_next/static/--reS3xBzM5zc6QxNjZd6/_buildManifest.js +0 -11
- package/dist/interf-ui/_next/static/--reS3xBzM5zc6QxNjZd6/_clientMiddlewareManifest.js +0 -1
- package/dist/interf-ui/_next/static/--reS3xBzM5zc6QxNjZd6/_ssgManifest.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0.tjb6f4golw..css +0 -3
- package/dist/interf-ui/_next/static/chunks/03~yq9q893hmn.js +0 -1
- package/dist/interf-ui/_next/static/chunks/085-n_jv2ng_q.css +0 -1
- package/dist/interf-ui/_next/static/chunks/0dn41fa_zvgsl.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0g-ea0zj5d-0k.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0gwqglc4iz583.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0haldgm65ve6l.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0nv3am99vjzn4.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0s77gt_o4jwtx.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0y5z3t-z1c8ks.js.map +0 -5
- package/dist/interf-ui/_next/static/chunks/0~a36ujuzpaz..js +0 -116
- package/dist/interf-ui/_next/static/chunks/10jeodxe4nkgj.js +0 -31
- package/dist/interf-ui/_next/static/chunks/119h2rouych2t.js +0 -1
- package/dist/interf-ui/_next/static/chunks/13c8b~m8knjsf.js +0 -1
- package/dist/interf-ui/_next/static/chunks/14dznb2qpt-ho.js +0 -91
- package/dist/interf-ui/_next/static/chunks/15z_en80lrq-3.js +0 -5
- package/dist/interf-ui/_next/static/chunks/turbopack-0p.pvcjrtq-jh.js +0 -1
- package/dist/interf-ui/_next/static/chunks/turbopack-0usj_75.8frlw.js +0 -1
- package/dist/interf-ui/_next/static/chunks/turbopack-worker-0sjn--fhq~1cg.js +0 -1
- package/dist/interf-ui/_next/static/media/GeistMono_Variable.p.17jn9btb_52pq.woff2 +0 -0
- package/dist/interf-ui/_next/static/media/Geist_Variable-s.p.0-te~ja_gpvcf.woff2 +0 -0
- package/dist/interf-ui/_next/static/media/worker.102zas1s52_pf.js +0 -109
- package/dist/interf-ui/_not-found/__next._full.txt +0 -15
- package/dist/interf-ui/_not-found/__next._head.txt +0 -5
- package/dist/interf-ui/_not-found/__next._index.txt +0 -5
- package/dist/interf-ui/_not-found/__next._not-found.__PAGE__.txt +0 -5
- package/dist/interf-ui/_not-found/__next._not-found.txt +0 -5
- package/dist/interf-ui/_not-found/__next._tree.txt +0 -2
- package/dist/interf-ui/_not-found.html +0 -1
- package/dist/interf-ui/_not-found.txt +0 -15
- package/dist/interf-ui/index.html +0 -1
- package/dist/interf-ui/index.txt +0 -20
- package/dist/packages/contracts/lib/preparation-paths.d.ts +0 -117
- package/dist/packages/contracts/lib/preparation-paths.js +0 -177
- package/dist/packages/engine/action-definitions.d.ts +0 -407
- package/dist/packages/engine/action-definitions.js +0 -1158
- package/dist/packages/engine/action-values.d.ts +0 -1
- package/dist/packages/engine/action-values.js +0 -1
- package/dist/packages/engine/agents/lib/args.d.ts +0 -4
- package/dist/packages/engine/agents/lib/args.js +0 -52
- package/dist/packages/engine/agents/lib/chart-guidance.d.ts +0 -1
- package/dist/packages/engine/agents/lib/chart-guidance.js +0 -8
- package/dist/packages/engine/agents/lib/constants.js +0 -28
- package/dist/packages/engine/agents/lib/schema.d.ts +0 -8
- package/dist/packages/engine/agents/lib/schema.js +0 -7
- package/dist/packages/engine/agents/lib/shells.d.ts +0 -74
- package/dist/packages/engine/agents/lib/shells.js +0 -1052
- package/dist/packages/engine/agents/lib/verifiable-context-bootstrap.d.ts +0 -3
- package/dist/packages/engine/build/artifact-counts.d.ts +0 -1
- package/dist/packages/engine/build/billing-events.d.ts +0 -89
- package/dist/packages/engine/build/build-pipeline.js +0 -175
- package/dist/packages/engine/build/build-plan-runs.d.ts +0 -14
- package/dist/packages/engine/build/build-plan-runs.js +0 -31
- package/dist/packages/engine/build/build-stage-plan.d.ts +0 -16
- package/dist/packages/engine/build/build-stage-runner.js +0 -94
- package/dist/packages/engine/build/build-target.js +0 -16
- package/dist/packages/engine/build/check-evaluator.js +0 -298
- package/dist/packages/engine/build/reset.d.ts +0 -2
- package/dist/packages/engine/build/reset.js +0 -74
- package/dist/packages/engine/build/runtime-inventory.d.ts +0 -7
- package/dist/packages/engine/build/runtime-runs.d.ts +0 -10
- package/dist/packages/engine/build/runtime-runs.js +0 -224
- package/dist/packages/engine/build/runtime.d.ts +0 -5
- package/dist/packages/engine/build/runtime.js +0 -4
- package/dist/packages/engine/build/source-files.d.ts +0 -46
- package/dist/packages/engine/build/source-files.js +0 -149
- package/dist/packages/engine/build/state-artifacts.d.ts +0 -9
- package/dist/packages/engine/build/state-artifacts.js +0 -14
- package/dist/packages/engine/build/state-health.d.ts +0 -4
- package/dist/packages/engine/build/state-io.d.ts +0 -11
- package/dist/packages/engine/build/state-io.js +0 -82
- package/dist/packages/engine/build/state-paths.js +0 -16
- package/dist/packages/engine/build/state-view.d.ts +0 -5
- package/dist/packages/engine/build/state.d.ts +0 -7
- package/dist/packages/engine/build/state.js +0 -12
- package/dist/packages/engine/build/validate-helpers.d.ts +0 -12
- package/dist/packages/engine/build/validate-helpers.js +0 -41
- package/dist/packages/engine/build/verifiable-context-paths.d.ts +0 -47
- package/dist/packages/engine/build/verifiable-context-paths.js +0 -121
- package/dist/packages/engine/build/verifiable-context-schema.d.ts +0 -21
- package/dist/packages/engine/build/verifiable-context-schema.js +0 -126
- package/dist/packages/engine/cloud-seams.d.ts +0 -115
- package/dist/packages/engine/cloud-seams.js +0 -84
- package/dist/packages/engine/index.d.ts +0 -22
- package/dist/packages/engine/index.js +0 -15
- package/dist/packages/engine/instance-paths.d.ts +0 -106
- package/dist/packages/engine/instance-paths.js +0 -171
- package/dist/packages/engine/lib/schema.d.ts +0 -6304
- package/dist/packages/engine/lib/schema.js +0 -730
- package/dist/packages/engine/preparation-store.d.ts +0 -105
- package/dist/packages/engine/preparation-store.js +0 -213
- package/dist/packages/engine/readiness-check-draft.d.ts +0 -20
- package/dist/packages/engine/readiness-check-draft.js +0 -111
- package/dist/packages/engine/requested-artifacts.d.ts +0 -5
- package/dist/packages/engine/routes.d.ts +0 -85
- package/dist/packages/engine/routes.js +0 -99
- package/dist/packages/engine/runtime-caches.d.ts +0 -76
- package/dist/packages/engine/runtime-proposal-helpers.d.ts +0 -35
- package/dist/packages/engine/runtime-proposal-helpers.js +0 -247
- package/dist/packages/engine/runtime.d.ts +0 -371
- package/dist/packages/engine/runtime.js +0 -2463
- package/dist/packages/engine/server.d.ts +0 -58
- package/dist/packages/engine/server.js +0 -1399
- package/dist/packages/engine/verify/readiness-check-run.d.ts +0 -82
- package/dist/packages/engine/verify/readiness-check-run.js +0 -265
- package/dist/packages/engine/verify/verify-paths.js +0 -61
- package/dist/packages/engine/verify/verify-sandbox.js +0 -88
- package/dist/packages/engine/verify/verify-targets.d.ts +0 -5
- package/dist/packages/engine/wire-schemas.d.ts +0 -547
- package/dist/packages/engine/wire-schemas.js +0 -59
- package/dist/packages/project/index.d.ts +0 -9
- package/dist/packages/project/interf-bootstrap.d.ts +0 -1
- package/dist/packages/project/interf-bootstrap.js +0 -1
- package/dist/packages/project/interf-scaffold.d.ts +0 -3
- package/dist/packages/project/interf-scaffold.js +0 -136
- package/dist/packages/project/interf.d.ts +0 -4
- package/dist/packages/project/interf.js +0 -3
- package/dist/packages/project/lib/schema.d.ts +0 -328
- package/dist/packages/project/lib/schema.js +0 -136
- package/dist/packages/project/preparation-entries.d.ts +0 -11
- package/dist/packages/project/preparation-entries.js +0 -49
- package/dist/packages/project/source-config.d.ts +0 -46
- package/dist/packages/project/source-config.js +0 -394
- package/dist/packages/project/source-folders.d.ts +0 -11
- package/public-repo/plugins/README.md +0 -9
- package/public-repo/plugins/interf/.claude-plugin/plugin.json +0 -21
- package/public-repo/plugins/interf/.mcp.json +0 -12
- package/public-repo/plugins/interf/README.md +0 -32
- package/public-repo/plugins/interf/skills/interf/SKILL.md +0 -376
- /package/dist/packages/{engine/agents/lib/types.js → runtime/actions/fields.js} +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/agents.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/agents.js +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/execution-profile.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/execution.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/executors.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/executors.js +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/logs.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/logs.js +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/preflight.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/render.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/status.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/status.js +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/types.d.ts +0 -0
- /package/dist/packages/{engine/build/runtime-types.js → runtime/agents/lib/types.js} +0 -0
- /package/dist/packages/{engine/verify/verify-types.js → runtime/agents/providers/types.js} +0 -0
- /package/dist/packages/{engine → runtime}/agents/role-router.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/build/build-execution.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/build/build-execution.js +0 -0
- /package/dist/packages/{engine → runtime}/build/runtime-contracts.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/build/runtime-paths.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/build/runtime-prompt.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/execution/adapters.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/execution/adapters.js +0 -0
- /package/dist/packages/{engine → runtime}/execution/events.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/execution/events.js +0 -0
- /package/dist/packages/{engine → runtime}/verify/verify-execution.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/verify/verify-profile-presets.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/verify/verify-profile-presets.js +0 -0
- /package/dist/packages/{engine → runtime}/verify/verify-types.d.ts +0 -0
|
@@ -168,14 +168,14 @@ function summarizeToolUse(name, input) {
|
|
|
168
168
|
const target = summarizeToolTarget(input);
|
|
169
169
|
switch (name) {
|
|
170
170
|
case "Read":
|
|
171
|
-
return target ? `reading ${target}` : "reading
|
|
171
|
+
return target ? `reading ${target}` : "reading context graph files";
|
|
172
172
|
case "Write":
|
|
173
|
-
return target ? `writing ${target}` : "writing
|
|
173
|
+
return target ? `writing ${target}` : "writing context graph files";
|
|
174
174
|
case "Edit":
|
|
175
|
-
return target ? `editing ${target}` : "editing
|
|
175
|
+
return target ? `editing ${target}` : "editing context graph files";
|
|
176
176
|
case "Glob":
|
|
177
177
|
case "Grep":
|
|
178
|
-
return target ? `${name.toLowerCase()} on ${target}` : `${name.toLowerCase()}ing
|
|
178
|
+
return target ? `${name.toLowerCase()} on ${target}` : `${name.toLowerCase()}ing context graph files`;
|
|
179
179
|
case "Bash":
|
|
180
180
|
return target ? `running ${target}` : "running a local helper";
|
|
181
181
|
default:
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PreservedShellType } from "../../build/lib/schema.js";
|
|
2
|
+
export declare function writeIfChanged(path: string, content: string): boolean;
|
|
3
|
+
export declare function writeNativeSkillCopies(rootPath: string, skillName: string, content: string): boolean;
|
|
4
|
+
export declare function linkPath(targetPath: string, linkPathname: string): void;
|
|
5
|
+
export declare function linkIfExists(targetPath: string, linkPathname: string): void;
|
|
6
|
+
export declare function linkRelativePath(targetPath: string, linkPathname: string): void;
|
|
7
|
+
export declare function copyResolvedTree(options: {
|
|
8
|
+
sourcePath: string;
|
|
9
|
+
targetPath: string;
|
|
10
|
+
shellType: PreservedShellType;
|
|
11
|
+
relativePath?: string;
|
|
12
|
+
activeRealPaths?: Set<string>;
|
|
13
|
+
materializedRealPaths?: Map<string, string>;
|
|
14
|
+
}): {
|
|
15
|
+
materializedSymlinks: number;
|
|
16
|
+
};
|
|
17
|
+
export declare function copyIfExists(sourcePath: string, targetPath: string, shellType: PreservedShellType): void;
|
|
18
|
+
export declare function freezePreservedShell(rootPath: string, shellType: PreservedShellType): string | null;
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, symlinkSync, writeFileSync, lstatSync, } from "node:fs";
|
|
2
|
+
import { dirname, join, relative, sep as pathSep } from "node:path";
|
|
3
|
+
import { LOCAL_SKILL_ROOTS, preservedShellManifestPath, } from "./shell-paths.js";
|
|
4
|
+
export function writeIfChanged(path, content) {
|
|
5
|
+
if (existsSync(path) && readFileSync(path, "utf8") === content) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
9
|
+
writeFileSync(path, content);
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
export function writeNativeSkillCopies(rootPath, skillName, content) {
|
|
13
|
+
let changed = false;
|
|
14
|
+
for (const skillsRoot of LOCAL_SKILL_ROOTS) {
|
|
15
|
+
const skillPath = join(rootPath, skillsRoot, skillName, "SKILL.md");
|
|
16
|
+
changed = writeIfChanged(skillPath, content) || changed;
|
|
17
|
+
}
|
|
18
|
+
return changed;
|
|
19
|
+
}
|
|
20
|
+
export function linkPath(targetPath, linkPathname) {
|
|
21
|
+
mkdirSync(dirname(linkPathname), { recursive: true });
|
|
22
|
+
symlinkSync(targetPath, linkPathname);
|
|
23
|
+
}
|
|
24
|
+
export function linkIfExists(targetPath, linkPathname) {
|
|
25
|
+
if (!existsSync(targetPath))
|
|
26
|
+
return;
|
|
27
|
+
linkPath(targetPath, linkPathname);
|
|
28
|
+
}
|
|
29
|
+
export function linkRelativePath(targetPath, linkPathname) {
|
|
30
|
+
mkdirSync(dirname(linkPathname), { recursive: true });
|
|
31
|
+
symlinkSync(relative(dirname(linkPathname), targetPath), linkPathname);
|
|
32
|
+
}
|
|
33
|
+
function shouldSkipFrozenStageShellRelativePath(relativePath) {
|
|
34
|
+
const normalized = relativePath.replaceAll("\\", "/");
|
|
35
|
+
return normalized === "execution-shells" ||
|
|
36
|
+
normalized.endsWith("/execution-shells") ||
|
|
37
|
+
normalized.includes("/execution-shells/") ||
|
|
38
|
+
normalized === "improvement-loops" ||
|
|
39
|
+
normalized.endsWith("/improvement-loops") ||
|
|
40
|
+
normalized.includes("/improvement-loops/");
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* System path prefixes a malicious symlink in a Build Plan package must
|
|
44
|
+
* never reach. Without this, the preserved-shell logic could be
|
|
45
|
+
* tricked into copying anything the running user has access to —
|
|
46
|
+
* `/etc/passwd`, `~/.ssh/id_rsa`, etc. (CSO finding).
|
|
47
|
+
*
|
|
48
|
+
* We deliberately allow targets that escape the immediate freeze
|
|
49
|
+
* root: legitimate execution shells contain symlinks pointing back
|
|
50
|
+
* to the parent Project's `interf.json`. The threat is only links
|
|
51
|
+
* that resolve into truly system-level paths.
|
|
52
|
+
*/
|
|
53
|
+
const FORBIDDEN_SYMLINK_TARGET_PREFIXES = [
|
|
54
|
+
"/etc",
|
|
55
|
+
"/sys",
|
|
56
|
+
"/proc",
|
|
57
|
+
"/dev",
|
|
58
|
+
"/var/run",
|
|
59
|
+
"/var/lib",
|
|
60
|
+
"/usr",
|
|
61
|
+
"/bin",
|
|
62
|
+
"/sbin",
|
|
63
|
+
"/boot",
|
|
64
|
+
"/root",
|
|
65
|
+
];
|
|
66
|
+
function ensureSymlinkTargetSafe(realTarget, symlinkPath) {
|
|
67
|
+
for (const prefix of FORBIDDEN_SYMLINK_TARGET_PREFIXES) {
|
|
68
|
+
if (realTarget === prefix || realTarget.startsWith(`${prefix}${pathSep}`)) {
|
|
69
|
+
throw new Error(`Refusing to follow symlink ${symlinkPath} → ${realTarget}: ` +
|
|
70
|
+
`resolves into system directory ${prefix}.`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Also refuse links that escape into another user's SSH directory
|
|
74
|
+
// even if the path is not on the literal forbidden list.
|
|
75
|
+
if (/\/\.ssh(\/|$)/.test(realTarget)) {
|
|
76
|
+
throw new Error(`Refusing to follow symlink ${symlinkPath} → ${realTarget}: ` +
|
|
77
|
+
`targets a .ssh directory.`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export function copyResolvedTree(options) {
|
|
81
|
+
const relativePath = options.relativePath ?? "";
|
|
82
|
+
if (options.shellType === "stage-execution" && shouldSkipFrozenStageShellRelativePath(relativePath)) {
|
|
83
|
+
return { materializedSymlinks: 0 };
|
|
84
|
+
}
|
|
85
|
+
const stat = lstatSync(options.sourcePath);
|
|
86
|
+
if (stat.isSymbolicLink()) {
|
|
87
|
+
// existsSync follows symlinks, so a dangling link (target absent)
|
|
88
|
+
// returns false. Skip those entries: realpathSync would throw
|
|
89
|
+
// ENOENT, and the freeze step is best-effort review material —
|
|
90
|
+
// losing one unresolvable link is better than aborting the whole
|
|
91
|
+
// preserved shell. Production trigger: createStageExecutionShell links
|
|
92
|
+
// runtime/stage-contract.json before writeStageContract runs, so
|
|
93
|
+
// any failure between those two points leaves a dangling link
|
|
94
|
+
// that the per-stage finally-block freeze would otherwise hit.
|
|
95
|
+
if (!existsSync(options.sourcePath)) {
|
|
96
|
+
return { materializedSymlinks: 0 };
|
|
97
|
+
}
|
|
98
|
+
const realTarget = realpathSync(options.sourcePath);
|
|
99
|
+
// Refuse symlinks resolving into system paths (CSO finding). We
|
|
100
|
+
// deliberately allow links that escape the immediate freeze root
|
|
101
|
+
// because legitimate execution shells contain links back to the
|
|
102
|
+
// parent Project's interf.json — the only thing we care about
|
|
103
|
+
// is that the realpath does not land in /etc, /sys, /proc, etc.
|
|
104
|
+
ensureSymlinkTargetSafe(realTarget, options.sourcePath);
|
|
105
|
+
const realStat = statSync(realTarget);
|
|
106
|
+
if (realStat.isDirectory()) {
|
|
107
|
+
const mappedTarget = options.materializedRealPaths?.get(realTarget);
|
|
108
|
+
if (mappedTarget) {
|
|
109
|
+
linkRelativePath(mappedTarget, options.targetPath);
|
|
110
|
+
return { materializedSymlinks: 1 };
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
materializedSymlinks: 1 + copyResolvedTree({
|
|
114
|
+
sourcePath: realTarget,
|
|
115
|
+
targetPath: options.targetPath,
|
|
116
|
+
shellType: options.shellType,
|
|
117
|
+
relativePath,
|
|
118
|
+
activeRealPaths: options.activeRealPaths,
|
|
119
|
+
materializedRealPaths: options.materializedRealPaths,
|
|
120
|
+
}).materializedSymlinks,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
mkdirSync(dirname(options.targetPath), { recursive: true });
|
|
124
|
+
copyFileSync(realTarget, options.targetPath);
|
|
125
|
+
return { materializedSymlinks: 1 };
|
|
126
|
+
}
|
|
127
|
+
if (stat.isDirectory()) {
|
|
128
|
+
const realSource = realpathSync(options.sourcePath);
|
|
129
|
+
const mappedTarget = options.materializedRealPaths?.get(realSource);
|
|
130
|
+
if (mappedTarget && mappedTarget !== options.targetPath) {
|
|
131
|
+
linkRelativePath(mappedTarget, options.targetPath);
|
|
132
|
+
return { materializedSymlinks: 0 };
|
|
133
|
+
}
|
|
134
|
+
const nextRealPaths = new Set([...(options.activeRealPaths ?? []), realSource]);
|
|
135
|
+
const nextMaterializedRealPaths = new Map(options.materializedRealPaths ?? []);
|
|
136
|
+
nextMaterializedRealPaths.set(realSource, options.targetPath);
|
|
137
|
+
mkdirSync(options.targetPath, { recursive: true });
|
|
138
|
+
let materializedSymlinks = 0;
|
|
139
|
+
for (const entry of readdirSync(options.sourcePath)) {
|
|
140
|
+
const childRelativePath = relativePath.length > 0 ? `${relativePath}/${entry}` : entry;
|
|
141
|
+
const copied = copyResolvedTree({
|
|
142
|
+
sourcePath: join(options.sourcePath, entry),
|
|
143
|
+
targetPath: join(options.targetPath, entry),
|
|
144
|
+
shellType: options.shellType,
|
|
145
|
+
relativePath: childRelativePath,
|
|
146
|
+
activeRealPaths: nextRealPaths,
|
|
147
|
+
materializedRealPaths: nextMaterializedRealPaths,
|
|
148
|
+
});
|
|
149
|
+
materializedSymlinks += copied.materializedSymlinks;
|
|
150
|
+
}
|
|
151
|
+
return { materializedSymlinks };
|
|
152
|
+
}
|
|
153
|
+
mkdirSync(dirname(options.targetPath), { recursive: true });
|
|
154
|
+
copyFileSync(options.sourcePath, options.targetPath);
|
|
155
|
+
return { materializedSymlinks: 0 };
|
|
156
|
+
}
|
|
157
|
+
export function copyIfExists(sourcePath, targetPath, shellType) {
|
|
158
|
+
if (!existsSync(sourcePath))
|
|
159
|
+
return;
|
|
160
|
+
copyResolvedTree({
|
|
161
|
+
sourcePath,
|
|
162
|
+
targetPath,
|
|
163
|
+
shellType,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
export function freezePreservedShell(rootPath, shellType) {
|
|
167
|
+
if (!existsSync(rootPath))
|
|
168
|
+
return null;
|
|
169
|
+
const manifestPath = preservedShellManifestPath(rootPath);
|
|
170
|
+
if (existsSync(manifestPath))
|
|
171
|
+
return manifestPath;
|
|
172
|
+
const tempRoot = `${rootPath}.frozen-${Date.now().toString(36)}`;
|
|
173
|
+
const copied = copyResolvedTree({
|
|
174
|
+
sourcePath: rootPath,
|
|
175
|
+
targetPath: tempRoot,
|
|
176
|
+
shellType,
|
|
177
|
+
});
|
|
178
|
+
const manifest = {
|
|
179
|
+
kind: "interf-preserved-shell",
|
|
180
|
+
version: 1,
|
|
181
|
+
shell_type: shellType,
|
|
182
|
+
generated_at: new Date().toISOString(),
|
|
183
|
+
root_path: rootPath,
|
|
184
|
+
materialized_symlinks: copied.materializedSymlinks,
|
|
185
|
+
};
|
|
186
|
+
writeFileSync(preservedShellManifestPath(tempRoot), `${JSON.stringify(manifest, null, 2)}\n`);
|
|
187
|
+
rmSync(rootPath, { recursive: true, force: true });
|
|
188
|
+
renameSync(tempRoot, rootPath);
|
|
189
|
+
return manifestPath;
|
|
190
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ContextInterfaceArtifact as BuildPlanArtifact } from "../../../build-plans/package/context-interface.js";
|
|
2
|
+
export declare const LOCAL_SKILL_ROOTS: readonly [".claude/skills", ".codex/skills", ".agents/skills", ".cursor/skills"];
|
|
3
|
+
export declare function contextGraphQuerySkillSourcePath(contextGraphPath: string): string;
|
|
4
|
+
export declare function stageShellBuildPlanRoot(shellRoot: string): string;
|
|
5
|
+
export declare function shellArtifactAliasMountPath(shellRoot: string, artifact: BuildPlanArtifact, mountKind: "inputs" | "outputs"): string;
|
|
6
|
+
export declare function describeShellArtifactAliasMountPath(artifact: BuildPlanArtifact, mountKind: "inputs" | "outputs"): string;
|
|
7
|
+
export declare function shellRuntimePath(shellRoot: string, relativePath: string): string;
|
|
8
|
+
export declare function shellLogsPath(shellRoot: string, relativePath?: string): string;
|
|
9
|
+
export declare function shellPromptLogPath(shellRoot: string, runId: string): string;
|
|
10
|
+
export declare function shellEventLogPath(shellRoot: string, runId: string): string;
|
|
11
|
+
export declare function shellStatusLogPath(shellRoot: string, runId: string): string;
|
|
12
|
+
export declare function shellWorkspaceManifestPath(shellRoot: string): string;
|
|
13
|
+
export declare function preservedShellManifestPath(rootPath: string): string;
|
|
14
|
+
export declare function improvementBuildPlanDocsPath(contextGraphPath: string): string;
|
|
15
|
+
export declare function normalizeArtifactRelativePath(path: string): string;
|
|
16
|
+
export declare function relativePathEqualsOrWithin(basePath: string, candidatePath: string): boolean;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { basename, join } from "node:path";
|
|
2
|
+
import { BUILD_PLAN_PACKAGE_DIR } from "../../../projects/interf-detect.js";
|
|
3
|
+
import { buildPlanPackagePathForContextGraph } from "../../build/context-graph-paths.js";
|
|
4
|
+
export const LOCAL_SKILL_ROOTS = [
|
|
5
|
+
".claude/skills",
|
|
6
|
+
".codex/skills",
|
|
7
|
+
".agents/skills",
|
|
8
|
+
".cursor/skills",
|
|
9
|
+
];
|
|
10
|
+
export function contextGraphQuerySkillSourcePath(contextGraphPath) {
|
|
11
|
+
return join(buildPlanPackagePathForContextGraph(contextGraphPath), "use", "query", "SKILL.md");
|
|
12
|
+
}
|
|
13
|
+
export function stageShellBuildPlanRoot(shellRoot) {
|
|
14
|
+
return join(shellRoot, BUILD_PLAN_PACKAGE_DIR);
|
|
15
|
+
}
|
|
16
|
+
export function shellArtifactAliasMountPath(shellRoot, artifact, mountKind) {
|
|
17
|
+
const mountRoot = join(shellRoot, mountKind, artifact.id);
|
|
18
|
+
return artifact.kind === "file"
|
|
19
|
+
? join(mountRoot, basename(artifact.path))
|
|
20
|
+
: mountRoot;
|
|
21
|
+
}
|
|
22
|
+
export function describeShellArtifactAliasMountPath(artifact, mountKind) {
|
|
23
|
+
return artifact.kind === "file"
|
|
24
|
+
? `${mountKind}/${artifact.id}/${basename(artifact.path)}`
|
|
25
|
+
: `${mountKind}/${artifact.id}`;
|
|
26
|
+
}
|
|
27
|
+
export function shellRuntimePath(shellRoot, relativePath) {
|
|
28
|
+
return join(shellRoot, "runtime", relativePath);
|
|
29
|
+
}
|
|
30
|
+
export function shellLogsPath(shellRoot, relativePath = "") {
|
|
31
|
+
return relativePath ? join(shellRoot, "logs", relativePath) : join(shellRoot, "logs");
|
|
32
|
+
}
|
|
33
|
+
export function shellPromptLogPath(shellRoot, runId) {
|
|
34
|
+
return shellLogsPath(shellRoot, `${runId}.prompt.txt`);
|
|
35
|
+
}
|
|
36
|
+
export function shellEventLogPath(shellRoot, runId) {
|
|
37
|
+
return shellLogsPath(shellRoot, `${runId}.events.ndjson`);
|
|
38
|
+
}
|
|
39
|
+
export function shellStatusLogPath(shellRoot, runId) {
|
|
40
|
+
return shellLogsPath(shellRoot, `${runId}.status.log`);
|
|
41
|
+
}
|
|
42
|
+
export function shellWorkspaceManifestPath(shellRoot) {
|
|
43
|
+
return shellRuntimePath(shellRoot, "workspace.json");
|
|
44
|
+
}
|
|
45
|
+
export function preservedShellManifestPath(rootPath) {
|
|
46
|
+
return shellRuntimePath(rootPath, "preserved-shell.json");
|
|
47
|
+
}
|
|
48
|
+
export function improvementBuildPlanDocsPath(contextGraphPath) {
|
|
49
|
+
return join(buildPlanPackagePathForContextGraph(contextGraphPath), "improve");
|
|
50
|
+
}
|
|
51
|
+
export function normalizeArtifactRelativePath(path) {
|
|
52
|
+
return path
|
|
53
|
+
.replaceAll("\\", "/")
|
|
54
|
+
.replace(/^\.?\//, "")
|
|
55
|
+
.replace(/\/+$/g, "");
|
|
56
|
+
}
|
|
57
|
+
export function relativePathEqualsOrWithin(basePath, candidatePath) {
|
|
58
|
+
const base = normalizeArtifactRelativePath(basePath);
|
|
59
|
+
const candidate = normalizeArtifactRelativePath(candidatePath);
|
|
60
|
+
if (base.length === 0 || candidate.length === 0)
|
|
61
|
+
return false;
|
|
62
|
+
return candidate === base || candidate.startsWith(`${base}/`);
|
|
63
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type ContextInterface as BuildPlanContextSchema, type ContextInterfaceArtifact as BuildPlanArtifact, type ContextInterfaceArtifactId as BuildPlanArtifactId } from "../../../build-plans/package/context-interface.js";
|
|
2
|
+
import type { ExecutionShellArtifactMount } from "../../build/lib/schema.js";
|
|
3
|
+
import type { NativeStageDefinition } from "./shell-templates.js";
|
|
4
|
+
export declare function loadContextGraphSchema(contextGraphPath: string): BuildPlanContextSchema;
|
|
5
|
+
export declare function artifactMap(schema: BuildPlanContextSchema): Map<BuildPlanArtifactId, BuildPlanArtifact>;
|
|
6
|
+
export declare function artifactOrThrow(artifacts: Map<BuildPlanArtifactId, BuildPlanArtifact>, artifactId: BuildPlanArtifactId): BuildPlanArtifact;
|
|
7
|
+
export declare function stageWriteArtifactSet(schema: BuildPlanContextSchema, stage: NativeStageDefinition): Set<BuildPlanArtifactId>;
|
|
8
|
+
export declare function stageMaterializedArtifactSet(schema: BuildPlanContextSchema, stage: NativeStageDefinition, writeArtifacts?: readonly string[]): Set<BuildPlanArtifactId>;
|
|
9
|
+
export declare function ensureBuildExecutionSurface(contextGraphPath: string): BuildPlanContextSchema;
|
|
10
|
+
export declare function readStageBuildPlanDoc(contextGraphPath: string, stage: NativeStageDefinition): string | null;
|
|
11
|
+
export declare function stageBuildPlanDocsPath(contextGraphPath: string, stage: NativeStageDefinition): string;
|
|
12
|
+
export declare function projectBuildPlanMetadata(contextGraphPath: string, shellRoot: string, stage: NativeStageDefinition): void;
|
|
13
|
+
export declare function projectContextGraphSchemaArtifacts(contextGraphPath: string, shellRoot: string, schema: BuildPlanContextSchema, artifactIds?: Iterable<BuildPlanArtifactId>, materializedArtifactIds?: ReadonlySet<BuildPlanArtifactId>, cleanMaterializedArtifactIds?: ReadonlySet<BuildPlanArtifactId>): void;
|
|
14
|
+
export declare function buildStageArtifactMounts(_contextGraphPath: string, _shellRoot: string, stage: NativeStageDefinition, schema: BuildPlanContextSchema): {
|
|
15
|
+
reads: ExecutionShellArtifactMount[];
|
|
16
|
+
writes: ExecutionShellArtifactMount[];
|
|
17
|
+
};
|
|
18
|
+
export declare function projectStageArtifactMountAliases(shellRoot: string, stage: NativeStageDefinition, schema: BuildPlanContextSchema): void;
|
|
19
|
+
export declare function writeExecutionShellPathsFile(shellRoot: string, buildPlanId: string, stage: NativeStageDefinition, mounts: {
|
|
20
|
+
reads: ExecutionShellArtifactMount[];
|
|
21
|
+
writes: ExecutionShellArtifactMount[];
|
|
22
|
+
}): void;
|
|
23
|
+
export declare function syncStageExecutionShellWrites(contextGraphPath: string, shellRoot: string, stage: NativeStageDefinition, writeArtifacts?: readonly string[]): void;
|
|
24
|
+
export declare function projectContextGraphReviewArtifactsState(contextGraphPath: string, shellRoot: string, schema: BuildPlanContextSchema): void;
|
|
25
|
+
export declare function projectContextGraphRuntimeArtifacts(contextGraphPath: string, shellRoot: string): void;
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { copyFileSync, cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { dirname, join, sep } from "node:path";
|
|
3
|
+
import { buildPlanPackagePathForContextGraph, contextGraphRuntimeRoot, } from "../../build/context-graph-paths.js";
|
|
4
|
+
import { ensureBuildPlanArtifactTargets } from "../../build/context-graph-schema.js";
|
|
5
|
+
import { listFilesRecursive } from "../../../contracts/utils/filesystem.js";
|
|
6
|
+
import { CONTEXT_INTERFACE_FILE as BUILD_PLAN_SCHEMA_FILE, contextInterfaceArtifactAbsolutePath as contextGraphArtifactAbsolutePath, listContextInterfaceArtifacts, readContextInterface as readBuildPlanContextFile, resolveContextInterfacePath as resolveBuildPlanSchemaPath, } from "../../../build-plans/package/context-interface.js";
|
|
7
|
+
import { copyResolvedTree, linkPath, linkRelativePath, } from "./shell-fs.js";
|
|
8
|
+
import { describeShellArtifactAliasMountPath, normalizeArtifactRelativePath, relativePathEqualsOrWithin, shellArtifactAliasMountPath, shellRuntimePath, stageShellBuildPlanRoot, } from "./shell-paths.js";
|
|
9
|
+
export function loadContextGraphSchema(contextGraphPath) {
|
|
10
|
+
const buildPlanRoot = buildPlanPackagePathForContextGraph(contextGraphPath);
|
|
11
|
+
const schema = readBuildPlanContextFile(buildPlanRoot);
|
|
12
|
+
if (!schema) {
|
|
13
|
+
throw new Error(`Missing Build Plan schema at ${join(buildPlanRoot, BUILD_PLAN_SCHEMA_FILE)}`);
|
|
14
|
+
}
|
|
15
|
+
return schema;
|
|
16
|
+
}
|
|
17
|
+
export function artifactMap(schema) {
|
|
18
|
+
return new Map(listContextInterfaceArtifacts(schema).map((artifact) => [artifact.id, artifact]));
|
|
19
|
+
}
|
|
20
|
+
export function artifactOrThrow(artifacts, artifactId) {
|
|
21
|
+
const artifact = artifacts.get(artifactId);
|
|
22
|
+
if (!artifact) {
|
|
23
|
+
throw new Error(`Missing Build Plan schema Artifact "${artifactId}" for stage shell projection.`);
|
|
24
|
+
}
|
|
25
|
+
return artifact;
|
|
26
|
+
}
|
|
27
|
+
export function stageWriteArtifactSet(schema, stage) {
|
|
28
|
+
const artifacts = listContextInterfaceArtifacts(schema);
|
|
29
|
+
return new Set(stage.writes.filter((artifactId) => artifacts.some((artifact) => artifact.id === artifactId)));
|
|
30
|
+
}
|
|
31
|
+
export function stageMaterializedArtifactSet(schema, stage, writeArtifacts = []) {
|
|
32
|
+
const materialized = stageWriteArtifactSet(schema, stage);
|
|
33
|
+
for (const artifact of listContextInterfaceArtifacts(schema)) {
|
|
34
|
+
if (stage.reads.includes(artifact.id)) {
|
|
35
|
+
materialized.add(artifact.id);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
for (const artifactPath of writeArtifacts) {
|
|
39
|
+
const normalizedArtifactPath = normalizeArtifactRelativePath(artifactPath);
|
|
40
|
+
if (normalizedArtifactPath.length === 0)
|
|
41
|
+
continue;
|
|
42
|
+
const owner = listContextInterfaceArtifacts(schema).find((artifact) => relativePathEqualsOrWithin(artifact.path, normalizedArtifactPath));
|
|
43
|
+
if (owner) {
|
|
44
|
+
materialized.add(owner.id);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return materialized;
|
|
48
|
+
}
|
|
49
|
+
function ensureShellLocalProjection(sourcePath, targetPath, artifact) {
|
|
50
|
+
if (existsSync(sourcePath)) {
|
|
51
|
+
copyResolvedTree({
|
|
52
|
+
sourcePath,
|
|
53
|
+
targetPath,
|
|
54
|
+
shellType: "stage-execution",
|
|
55
|
+
});
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (artifact.kind === "file") {
|
|
59
|
+
mkdirSync(dirname(targetPath), { recursive: true });
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
mkdirSync(targetPath, { recursive: true });
|
|
63
|
+
}
|
|
64
|
+
export function ensureBuildExecutionSurface(contextGraphPath) {
|
|
65
|
+
mkdirSync(contextGraphRuntimeRoot(contextGraphPath), { recursive: true });
|
|
66
|
+
mkdirSync(buildPlanPackagePathForContextGraph(contextGraphPath), { recursive: true });
|
|
67
|
+
const schema = loadContextGraphSchema(contextGraphPath);
|
|
68
|
+
ensureBuildPlanArtifactTargets(contextGraphPath, schema);
|
|
69
|
+
return schema;
|
|
70
|
+
}
|
|
71
|
+
export function readStageBuildPlanDoc(contextGraphPath, stage) {
|
|
72
|
+
const buildPlanRoot = buildPlanPackagePathForContextGraph(contextGraphPath);
|
|
73
|
+
const path = join(buildPlanRoot, "build", "stages", stage.skillDir, "SKILL.md");
|
|
74
|
+
if (!isRegularBuildPlanFile(buildPlanRoot, path))
|
|
75
|
+
return null;
|
|
76
|
+
return readFileSync(path, "utf8").trim();
|
|
77
|
+
}
|
|
78
|
+
export function stageBuildPlanDocsPath(contextGraphPath, stage) {
|
|
79
|
+
return join(buildPlanPackagePathForContextGraph(contextGraphPath), "build", "stages", stage.skillDir);
|
|
80
|
+
}
|
|
81
|
+
function isInsideRealRoot(realRoot, path) {
|
|
82
|
+
try {
|
|
83
|
+
const realPath = realpathSync(path);
|
|
84
|
+
return realPath === realRoot || realPath.startsWith(`${realRoot}${sep}`);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function isRegularBuildPlanFile(buildPlanRoot, path) {
|
|
91
|
+
if (!existsSync(path))
|
|
92
|
+
return false;
|
|
93
|
+
try {
|
|
94
|
+
return lstatSync(path).isFile() && isInsideRealRoot(realpathSync(buildPlanRoot), path);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function copyBuildPlanPath(buildPlanRoot, sourcePath, targetPath) {
|
|
101
|
+
if (!existsSync(sourcePath))
|
|
102
|
+
return;
|
|
103
|
+
const realRoot = realpathSync(buildPlanRoot);
|
|
104
|
+
if (!isInsideRealRoot(realRoot, sourcePath))
|
|
105
|
+
return;
|
|
106
|
+
const stat = lstatSync(sourcePath);
|
|
107
|
+
if (stat.isSymbolicLink())
|
|
108
|
+
return;
|
|
109
|
+
if (stat.isDirectory()) {
|
|
110
|
+
mkdirSync(targetPath, { recursive: true });
|
|
111
|
+
for (const entry of readdirSync(sourcePath)) {
|
|
112
|
+
copyBuildPlanPath(buildPlanRoot, join(sourcePath, entry), join(targetPath, entry));
|
|
113
|
+
}
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (!stat.isFile())
|
|
117
|
+
return;
|
|
118
|
+
mkdirSync(dirname(targetPath), { recursive: true });
|
|
119
|
+
copyFileSync(sourcePath, targetPath);
|
|
120
|
+
}
|
|
121
|
+
export function projectBuildPlanMetadata(contextGraphPath, shellRoot, stage) {
|
|
122
|
+
const shellBuildPlanRoot = stageShellBuildPlanRoot(shellRoot);
|
|
123
|
+
mkdirSync(join(shellBuildPlanRoot, "build", "stages"), { recursive: true });
|
|
124
|
+
const contextGraphBuildPlanRoot = buildPlanPackagePathForContextGraph(contextGraphPath);
|
|
125
|
+
const buildPlanJsonPath = join(contextGraphBuildPlanRoot, "build-plan.json");
|
|
126
|
+
copyBuildPlanPath(contextGraphBuildPlanRoot, buildPlanJsonPath, join(shellBuildPlanRoot, "build-plan.json"));
|
|
127
|
+
const buildPlanSchemaPath = resolveBuildPlanSchemaPath(contextGraphBuildPlanRoot);
|
|
128
|
+
if (buildPlanSchemaPath) {
|
|
129
|
+
copyBuildPlanPath(contextGraphBuildPlanRoot, buildPlanSchemaPath, join(shellBuildPlanRoot, BUILD_PLAN_SCHEMA_FILE));
|
|
130
|
+
}
|
|
131
|
+
const readmePath = join(contextGraphBuildPlanRoot, "README.md");
|
|
132
|
+
copyBuildPlanPath(contextGraphBuildPlanRoot, readmePath, join(shellBuildPlanRoot, "README.md"));
|
|
133
|
+
const stageDocsPath = stageBuildPlanDocsPath(contextGraphPath, stage);
|
|
134
|
+
copyBuildPlanPath(contextGraphBuildPlanRoot, stageDocsPath, join(shellBuildPlanRoot, "build", "stages", stage.skillDir));
|
|
135
|
+
}
|
|
136
|
+
export function projectContextGraphSchemaArtifacts(contextGraphPath, shellRoot, schema, artifactIds, materializedArtifactIds, cleanMaterializedArtifactIds) {
|
|
137
|
+
const allowedArtifactIds = artifactIds ? new Set(artifactIds) : null;
|
|
138
|
+
for (const artifact of listContextInterfaceArtifacts(schema)) {
|
|
139
|
+
if (allowedArtifactIds && !allowedArtifactIds.has(artifact.id))
|
|
140
|
+
continue;
|
|
141
|
+
const sourcePath = contextGraphArtifactAbsolutePath(contextGraphPath, artifact);
|
|
142
|
+
const targetPath = join(shellRoot, artifact.path);
|
|
143
|
+
if (cleanMaterializedArtifactIds?.has(artifact.id)) {
|
|
144
|
+
rmSync(targetPath, { recursive: true, force: true });
|
|
145
|
+
if (artifact.kind === "file") {
|
|
146
|
+
mkdirSync(dirname(targetPath), { recursive: true });
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
mkdirSync(targetPath, { recursive: true });
|
|
150
|
+
}
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (materializedArtifactIds?.has(artifact.id)) {
|
|
154
|
+
ensureShellLocalProjection(sourcePath, targetPath, artifact);
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
linkPath(sourcePath, targetPath);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
export function buildStageArtifactMounts(_contextGraphPath, _shellRoot, stage, schema) {
|
|
161
|
+
const artifacts = artifactMap(schema);
|
|
162
|
+
const mountFor = (artifactId) => {
|
|
163
|
+
const artifact = artifactOrThrow(artifacts, artifactId);
|
|
164
|
+
return {
|
|
165
|
+
artifact_id: artifact.id,
|
|
166
|
+
artifact_path: artifact.path,
|
|
167
|
+
shell_root_path: artifact.path,
|
|
168
|
+
input_mount_path: stage.reads.includes(artifactId)
|
|
169
|
+
? describeShellArtifactAliasMountPath(artifact, "inputs")
|
|
170
|
+
: null,
|
|
171
|
+
output_mount_path: stage.writes.includes(artifactId)
|
|
172
|
+
? describeShellArtifactAliasMountPath(artifact, "outputs")
|
|
173
|
+
: null,
|
|
174
|
+
};
|
|
175
|
+
};
|
|
176
|
+
return {
|
|
177
|
+
reads: stage.reads.map(mountFor),
|
|
178
|
+
writes: stage.writes.map(mountFor),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
export function projectStageArtifactMountAliases(shellRoot, stage, schema) {
|
|
182
|
+
const artifacts = artifactMap(schema);
|
|
183
|
+
for (const artifactId of new Set([...stage.reads, ...stage.writes])) {
|
|
184
|
+
const artifact = artifactOrThrow(artifacts, artifactId);
|
|
185
|
+
const targetPath = join(shellRoot, artifact.path);
|
|
186
|
+
if (stage.reads.includes(artifactId)) {
|
|
187
|
+
linkRelativePath(targetPath, shellArtifactAliasMountPath(shellRoot, artifact, "inputs"));
|
|
188
|
+
}
|
|
189
|
+
if (stage.writes.includes(artifactId)) {
|
|
190
|
+
linkRelativePath(targetPath, shellArtifactAliasMountPath(shellRoot, artifact, "outputs"));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
export function writeExecutionShellPathsFile(shellRoot, buildPlanId, stage, mounts) {
|
|
195
|
+
const paths = {
|
|
196
|
+
kind: "interf-execution-shell",
|
|
197
|
+
version: 1,
|
|
198
|
+
build_plan: buildPlanId,
|
|
199
|
+
stage: stage.id,
|
|
200
|
+
reads: mounts.reads,
|
|
201
|
+
writes: mounts.writes,
|
|
202
|
+
};
|
|
203
|
+
writeFileSync(shellRuntimePath(shellRoot, "paths.json"), `${JSON.stringify(paths, null, 2)}\n`);
|
|
204
|
+
}
|
|
205
|
+
export function syncStageExecutionShellWrites(contextGraphPath, shellRoot, stage, writeArtifacts = []) {
|
|
206
|
+
const schema = ensureBuildExecutionSurface(contextGraphPath);
|
|
207
|
+
const artifacts = artifactMap(schema);
|
|
208
|
+
const stageWriteArtifacts = Array.from(stageWriteArtifactSet(schema, stage))
|
|
209
|
+
.map((artifactId) => artifactOrThrow(artifacts, artifactId));
|
|
210
|
+
for (const artifact of stageWriteArtifacts) {
|
|
211
|
+
const canonicalShellArtifactPath = join(shellRoot, artifact.path);
|
|
212
|
+
const outputAliasPath = shellArtifactAliasMountPath(shellRoot, artifact, "outputs");
|
|
213
|
+
const shellArtifactPath = artifact.kind === "file" &&
|
|
214
|
+
existsSync(outputAliasPath) &&
|
|
215
|
+
!lstatSync(outputAliasPath).isSymbolicLink()
|
|
216
|
+
? outputAliasPath
|
|
217
|
+
: canonicalShellArtifactPath;
|
|
218
|
+
if (!existsSync(shellArtifactPath))
|
|
219
|
+
continue;
|
|
220
|
+
const shellArtifactStat = lstatSync(shellArtifactPath);
|
|
221
|
+
if (shellArtifactStat.isSymbolicLink())
|
|
222
|
+
continue;
|
|
223
|
+
const contextGraphArtifactPath = contextGraphArtifactAbsolutePath(contextGraphPath, artifact);
|
|
224
|
+
if (shellArtifactStat.isDirectory()) {
|
|
225
|
+
const shellArtifactFiles = listFilesRecursive(shellArtifactPath);
|
|
226
|
+
const contextGraphArtifactFiles = existsSync(contextGraphArtifactPath)
|
|
227
|
+
? listFilesRecursive(contextGraphArtifactPath)
|
|
228
|
+
: [];
|
|
229
|
+
if (shellArtifactFiles.length === 0 && contextGraphArtifactFiles.length > 0) {
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
rmSync(contextGraphArtifactPath, { recursive: true, force: true });
|
|
233
|
+
mkdirSync(dirname(contextGraphArtifactPath), { recursive: true });
|
|
234
|
+
cpSync(shellArtifactPath, contextGraphArtifactPath, {
|
|
235
|
+
recursive: true,
|
|
236
|
+
force: true,
|
|
237
|
+
});
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
mkdirSync(dirname(contextGraphArtifactPath), { recursive: true });
|
|
241
|
+
copyFileSync(shellArtifactPath, contextGraphArtifactPath);
|
|
242
|
+
}
|
|
243
|
+
for (const artifactPath of writeArtifacts) {
|
|
244
|
+
const normalizedArtifactPath = normalizeArtifactRelativePath(artifactPath);
|
|
245
|
+
if (normalizedArtifactPath.length === 0 ||
|
|
246
|
+
stageWriteArtifacts.some((artifact) => relativePathEqualsOrWithin(artifact.path, normalizedArtifactPath))) {
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
const shellArtifactPath = join(shellRoot, normalizedArtifactPath);
|
|
250
|
+
if (!existsSync(shellArtifactPath))
|
|
251
|
+
continue;
|
|
252
|
+
const contextGraphArtifactPath = join(contextGraphPath, normalizedArtifactPath);
|
|
253
|
+
const shellArtifactStat = lstatSync(shellArtifactPath);
|
|
254
|
+
if (shellArtifactStat.isSymbolicLink())
|
|
255
|
+
continue;
|
|
256
|
+
if (shellArtifactStat.isDirectory()) {
|
|
257
|
+
rmSync(contextGraphArtifactPath, { recursive: true, force: true });
|
|
258
|
+
mkdirSync(dirname(contextGraphArtifactPath), { recursive: true });
|
|
259
|
+
cpSync(shellArtifactPath, contextGraphArtifactPath, {
|
|
260
|
+
recursive: true,
|
|
261
|
+
force: true,
|
|
262
|
+
});
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
mkdirSync(dirname(contextGraphArtifactPath), { recursive: true });
|
|
266
|
+
copyFileSync(shellArtifactPath, contextGraphArtifactPath);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
export function projectContextGraphReviewArtifactsState(contextGraphPath, shellRoot, schema) {
|
|
270
|
+
const contextGraphViewRoot = join(shellRoot, "artifacts", "context-graph-view");
|
|
271
|
+
mkdirSync(contextGraphViewRoot, { recursive: true });
|
|
272
|
+
for (const artifact of listContextInterfaceArtifacts(schema)) {
|
|
273
|
+
if (artifact.path === "source-files")
|
|
274
|
+
continue;
|
|
275
|
+
const sourcePath = contextGraphArtifactAbsolutePath(contextGraphPath, artifact);
|
|
276
|
+
if (!existsSync(sourcePath))
|
|
277
|
+
continue;
|
|
278
|
+
copyResolvedTree({
|
|
279
|
+
sourcePath,
|
|
280
|
+
targetPath: join(contextGraphViewRoot, artifact.path),
|
|
281
|
+
shellType: "build-plan-improvement",
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
export function projectContextGraphRuntimeArtifacts(contextGraphPath, shellRoot) {
|
|
286
|
+
const runtimeTarget = join(shellRoot, "artifacts", "context-graph-runtime");
|
|
287
|
+
mkdirSync(runtimeTarget, { recursive: true });
|
|
288
|
+
const runtimeRoot = contextGraphRuntimeRoot(contextGraphPath);
|
|
289
|
+
const artifactNames = [
|
|
290
|
+
"run.json",
|
|
291
|
+
"run-history.jsonl",
|
|
292
|
+
"state.json",
|
|
293
|
+
"health.json",
|
|
294
|
+
"view-spec.json",
|
|
295
|
+
"source-manifest.json",
|
|
296
|
+
"source-manifest.audit.json",
|
|
297
|
+
"source-files.json",
|
|
298
|
+
"source-state.json",
|
|
299
|
+
"stages",
|
|
300
|
+
"logs",
|
|
301
|
+
];
|
|
302
|
+
for (const artifactName of artifactNames) {
|
|
303
|
+
copyIfExistsLocal(join(runtimeRoot, artifactName), join(runtimeTarget, artifactName));
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
function copyIfExistsLocal(sourcePath, targetPath) {
|
|
307
|
+
if (!existsSync(sourcePath))
|
|
308
|
+
return;
|
|
309
|
+
copyResolvedTree({
|
|
310
|
+
sourcePath,
|
|
311
|
+
targetPath,
|
|
312
|
+
shellType: "build-plan-improvement",
|
|
313
|
+
});
|
|
314
|
+
}
|