@interf/compiler 0.22.2 → 0.50.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 +119 -282
- 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 -35
- package/dist/cli/commands/auth.d.ts +20 -0
- package/dist/cli/commands/auth.js +161 -0
- package/dist/cli/commands/benchmark.d.ts +9 -0
- package/dist/cli/commands/benchmark.js +58 -0
- package/dist/cli/commands/build-plan.js +107 -139
- package/dist/cli/commands/build.d.ts +3 -4
- package/dist/cli/commands/build.js +16 -45
- package/dist/cli/commands/doctor.js +3 -3
- package/dist/cli/commands/graphs.d.ts +2 -0
- package/dist/cli/commands/graphs.js +344 -0
- package/dist/cli/commands/login.js +4 -6
- package/dist/cli/commands/logout.js +1 -1
- package/dist/cli/commands/mcp.d.ts +4 -2
- package/dist/cli/commands/mcp.js +846 -232
- package/dist/cli/commands/project.d.ts +2 -0
- package/dist/cli/commands/project.js +176 -0
- package/dist/cli/commands/reset.d.ts +3 -4
- package/dist/cli/commands/reset.js +10 -31
- package/dist/cli/commands/runs.js +136 -57
- 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 +35 -45
- package/dist/cli/commands/traces.d.ts +2 -0
- package/dist/cli/commands/traces.js +97 -0
- package/dist/cli/commands/wizard.js +171 -178
- package/dist/cli/index.d.ts +7 -4
- package/dist/cli/index.js +13 -7
- package/dist/cli/lib/http-client.d.ts +39 -0
- package/dist/cli/lib/http-client.js +73 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/packages/build-plans/authoring/brief.d.ts +538 -0
- package/dist/packages/build-plans/authoring/brief.js +89 -0
- package/dist/packages/build-plans/authoring/build-plan-authoring.d.ts +52 -11
- package/dist/packages/build-plans/authoring/build-plan-authoring.js +493 -46
- package/dist/packages/build-plans/authoring/build-plan-edit-session.d.ts +10 -1
- package/dist/packages/build-plans/authoring/build-plan-edit-session.js +27 -4
- package/dist/packages/build-plans/authoring/build-plan-improvement.d.ts +9 -6
- package/dist/packages/build-plans/authoring/build-plan-improvement.js +97 -46
- package/dist/packages/build-plans/authoring/lib/build-plan-edit-utils.d.ts +1 -0
- 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 -13
- package/dist/packages/build-plans/package/build-plan-definitions.js +45 -42
- 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 +5 -4
- package/dist/packages/build-plans/package/build-plan-stage-runner.js +23 -11
- package/dist/packages/build-plans/package/builtin-build-plan.d.ts +7 -8
- package/dist/packages/build-plans/package/builtin-build-plan.js +10 -11
- package/dist/packages/build-plans/package/context-interface.d.ts +14 -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 +68 -64
- package/dist/packages/build-plans/package/local-build-plans.d.ts +21 -14
- package/dist/packages/build-plans/package/local-build-plans.js +105 -55
- package/dist/packages/build-plans/package/user-build-plans.js +1 -1
- package/dist/packages/contracts/index.d.ts +5 -2
- package/dist/packages/contracts/index.js +3 -1
- package/dist/packages/contracts/lib/context-graph-layer.d.ts +161 -0
- package/dist/packages/contracts/lib/context-graph-layer.js +216 -0
- package/dist/packages/contracts/lib/project-paths.d.ts +144 -0
- package/dist/packages/contracts/lib/project-paths.js +220 -0
- package/dist/packages/contracts/lib/project-schema.d.ts +423 -0
- package/dist/packages/contracts/lib/project-schema.js +138 -0
- package/dist/packages/contracts/lib/schema.d.ts +1273 -81
- package/dist/packages/contracts/lib/schema.js +675 -79
- package/dist/packages/contracts/utils/filesystem.d.ts +1 -0
- package/dist/packages/contracts/utils/filesystem.js +29 -1
- 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 +77 -0
- package/dist/packages/projects/lib/schema.js +91 -0
- package/dist/packages/projects/source-config.d.ts +53 -0
- package/dist/packages/projects/source-config.js +339 -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 +86 -0
- package/dist/packages/runtime/actions/form-builders.d.ts +14 -0
- package/dist/packages/runtime/actions/form-builders.js +667 -0
- package/dist/packages/runtime/actions/form-validators.d.ts +8 -0
- package/dist/packages/runtime/actions/form-validators.js +134 -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 +164 -0
- package/dist/packages/runtime/actions/schemas.d.ts +161 -0
- package/dist/packages/runtime/actions/schemas.js +37 -0
- package/dist/packages/runtime/agent-handoff.d.ts +11 -0
- package/dist/packages/runtime/agent-handoff.js +102 -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.d.ts +14 -0
- package/dist/packages/{engine → runtime}/agents/lib/execution-profile.js +31 -14
- package/dist/packages/{engine → runtime}/agents/lib/execution.js +22 -6
- package/dist/packages/{engine → runtime}/agents/lib/executors.d.ts +1 -0
- package/dist/packages/{engine → runtime}/agents/lib/executors.js +11 -2
- package/dist/packages/runtime/agents/lib/logs.d.ts +12 -0
- package/dist/packages/runtime/agents/lib/logs.js +41 -0
- package/dist/packages/{engine → runtime}/agents/lib/preflight.js +19 -14
- package/dist/packages/runtime/agents/lib/render.d.ts +26 -0
- package/dist/packages/{engine → runtime}/agents/lib/render.js +48 -22
- 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 +494 -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 +92 -0
- package/dist/packages/runtime/agents/lib/shells.js +509 -0
- package/dist/packages/runtime/agents/lib/source-context-scan.d.ts +10 -0
- package/dist/packages/runtime/agents/lib/source-context-scan.js +388 -0
- package/dist/packages/{engine → runtime}/agents/lib/status.js +1 -14
- package/dist/packages/runtime/agents/lib/string-utils.d.ts +16 -0
- package/dist/packages/runtime/agents/lib/string-utils.js +36 -0
- package/dist/packages/{engine → runtime}/agents/lib/types.d.ts +1 -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 +66 -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 +9 -7
- 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 +96 -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 +23 -0
- package/dist/packages/runtime/benchmark-question-draft.js +153 -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 +6 -6
- package/dist/packages/{engine → runtime}/build/artifact-status.js +26 -24
- 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 +16 -0
- package/dist/packages/runtime/build/build-evidence.js +179 -0
- package/dist/packages/{engine → runtime}/build/build-pipeline.d.ts +12 -8
- package/dist/packages/runtime/build/build-pipeline.js +388 -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/runtime/build/build-stage-plan.js +101 -0
- package/dist/packages/{engine → runtime}/build/build-stage-runner.d.ts +2 -1
- package/dist/packages/runtime/build/build-stage-runner.js +302 -0
- package/dist/packages/{engine → runtime}/build/build-target.d.ts +7 -4
- package/dist/packages/runtime/build/build-target.js +40 -0
- package/dist/packages/{engine → runtime}/build/check-evaluator.d.ts +14 -16
- package/dist/packages/runtime/build/check-evaluator.js +1226 -0
- package/dist/packages/runtime/build/context-graph-paths.d.ts +64 -0
- package/dist/packages/runtime/build/context-graph-paths.js +160 -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 +7 -5
- package/dist/packages/{engine → runtime}/build/index.js +7 -5
- package/dist/packages/runtime/build/inspect-map.d.ts +10 -0
- package/dist/packages/runtime/build/inspect-map.js +270 -0
- package/dist/packages/{engine → runtime}/build/lib/schema.d.ts +449 -123
- package/dist/packages/runtime/build/lib/schema.js +494 -0
- package/dist/packages/runtime/build/native-entrypoint.d.ts +2 -0
- package/dist/packages/runtime/build/native-entrypoint.js +286 -0
- 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 +13 -7
- 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/runtime/build/runtime-log-paths.d.ts +3 -0
- package/dist/packages/runtime/build/runtime-log-paths.js +16 -0
- package/dist/packages/{engine → runtime}/build/runtime-prompt.js +12 -9
- 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 +318 -0
- package/dist/packages/{engine → runtime}/build/runtime-types.d.ts +9 -6
- package/dist/packages/runtime/build/runtime-types.js +1 -0
- package/dist/packages/runtime/build/runtime.d.ts +8 -0
- package/dist/packages/runtime/build/runtime.js +7 -0
- package/dist/packages/runtime/build/source-files.d.ts +58 -0
- package/dist/packages/runtime/build/source-files.js +193 -0
- package/dist/packages/runtime/build/source-inventory.d.ts +28 -0
- package/dist/packages/runtime/build/source-inventory.js +512 -0
- package/dist/packages/runtime/build/source-manifest.d.ts +63 -0
- package/dist/packages/runtime/build/source-manifest.js +220 -0
- package/dist/packages/runtime/build/stage-evidence.d.ts +22 -0
- package/dist/packages/runtime/build/stage-evidence.js +386 -0
- package/dist/packages/runtime/build/stage-manifest.d.ts +45 -0
- package/dist/packages/runtime/build/stage-manifest.js +1125 -0
- package/dist/packages/runtime/build/stage-reuse.d.ts +11 -0
- package/dist/packages/runtime/build/stage-reuse.js +154 -0
- package/dist/packages/runtime/build/stage-session.d.ts +81 -0
- package/dist/packages/runtime/build/stage-session.js +308 -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 +118 -0
- package/dist/packages/runtime/build/state-view.d.ts +5 -0
- package/dist/packages/runtime/build/state-view.js +121 -0
- package/dist/packages/runtime/build/state.d.ts +7 -0
- package/dist/packages/runtime/build/state.js +12 -0
- package/dist/packages/runtime/build/summary-coverage-index.d.ts +21 -0
- package/dist/packages/runtime/build/summary-coverage-index.js +189 -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} +49 -36
- 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 +18 -18
- package/dist/packages/{engine → runtime}/client.js +48 -36
- 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 +127 -0
- package/dist/packages/runtime/context-graph-scaffold.d.ts +9 -0
- package/dist/packages/runtime/context-graph-scaffold.js +135 -0
- package/dist/packages/runtime/context-graph-semantic-graph.d.ts +9 -0
- package/dist/packages/runtime/context-graph-semantic-graph.js +416 -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 +272 -191
- 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/runtime/native-run-handlers.d.ts +63 -0
- package/dist/packages/{engine → runtime}/native-run-handlers.js +217 -166
- 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 +56 -0
- package/dist/packages/runtime/project-store.d.ts +90 -0
- package/dist/packages/runtime/project-store.js +195 -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 +174 -87
- 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 +175 -0
- package/dist/packages/runtime/runtime-build-runs.d.ts +47 -0
- package/dist/packages/runtime/runtime-build-runs.js +555 -0
- package/dist/packages/runtime/runtime-caches.d.ts +117 -0
- package/dist/packages/runtime/runtime-caches.js +266 -0
- 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 +65 -0
- package/dist/packages/runtime/runtime-project-reads.d.ts +18 -0
- package/dist/packages/runtime/runtime-project-reads.js +574 -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 +23 -16
- package/dist/packages/{engine → runtime}/runtime-resource-builders.js +58 -46
- package/dist/packages/runtime/runtime-status.d.ts +14 -0
- package/dist/packages/runtime/runtime-status.js +15 -0
- package/dist/packages/runtime/runtime-verify-runs.d.ts +84 -0
- package/dist/packages/runtime/runtime-verify-runs.js +296 -0
- package/dist/packages/runtime/runtime.d.ts +1582 -0
- package/dist/packages/runtime/runtime.js +431 -0
- package/dist/packages/runtime/schemas/actions.d.ts +1206 -0
- package/dist/packages/runtime/schemas/actions.js +117 -0
- package/dist/packages/runtime/schemas/agents.d.ts +104 -0
- package/dist/packages/runtime/schemas/agents.js +74 -0
- package/dist/packages/runtime/schemas/build-plans.d.ts +1132 -0
- package/dist/packages/runtime/schemas/build-plans.js +141 -0
- package/dist/packages/runtime/schemas/context-graphs.d.ts +1522 -0
- package/dist/packages/runtime/schemas/context-graphs.js +110 -0
- package/dist/packages/runtime/schemas/files.d.ts +227 -0
- package/dist/packages/runtime/schemas/files.js +28 -0
- package/dist/packages/runtime/schemas/index.d.ts +9 -0
- package/dist/packages/runtime/schemas/index.js +13 -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 +107 -0
- package/dist/packages/runtime/schemas/projects.d.ts +366 -0
- package/dist/packages/runtime/schemas/projects.js +160 -0
- package/dist/packages/runtime/schemas/runs.d.ts +3445 -0
- package/dist/packages/runtime/schemas/runs.js +115 -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 +118 -0
- package/dist/packages/runtime/service/operations.d.ts +3011 -0
- package/dist/packages/runtime/service/operations.js +375 -0
- package/dist/packages/runtime/service/routes.d.ts +114 -0
- package/dist/packages/runtime/service/routes.js +128 -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 +38 -0
- package/dist/packages/runtime/service/server-helpers.js +108 -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 +45 -0
- package/dist/packages/runtime/service/server-routes-agents.d.ts +4 -0
- package/dist/packages/runtime/service/server-routes-agents.js +132 -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 +86 -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 +287 -0
- package/dist/packages/runtime/service/server-routes-project-jobs.d.ts +9 -0
- package/dist/packages/runtime/service/server-routes-project-jobs.js +137 -0
- package/dist/packages/runtime/service/server-routes-project-runs.d.ts +14 -0
- package/dist/packages/runtime/service/server-routes-project-runs.js +88 -0
- package/dist/packages/runtime/service/server-routes-projects.d.ts +4 -0
- package/dist/packages/runtime/service/server-routes-projects.js +96 -0
- package/dist/packages/runtime/service/server-routes-runs.d.ts +3 -0
- package/dist/packages/runtime/service/server-routes-runs.js +119 -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 +38 -18
- package/dist/packages/runtime/verify/test-file-guard.d.ts +2 -0
- package/dist/packages/runtime/verify/test-file-guard.js +29 -0
- package/dist/packages/{engine → runtime}/verify/verify-execution.d.ts +7 -0
- package/dist/packages/{engine → runtime}/verify/verify-execution.js +119 -45
- package/dist/packages/{engine → runtime}/verify/verify-paths.d.ts +5 -4
- package/dist/packages/runtime/verify/verify-paths.js +65 -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/runtime/verify/verify-specs.js +126 -0
- 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 +32 -30
- package/public-repo/CONTRIBUTING.md +16 -18
- package/public-repo/README.md +119 -282
- package/public-repo/SECURITY.md +3 -4
- package/public-repo/build-plans/interf-default/README.md +24 -16
- package/public-repo/build-plans/interf-default/build/stages/entrypoint/SKILL.md +74 -0
- package/public-repo/build-plans/interf-default/build/stages/knowledge/SKILL.md +95 -0
- package/public-repo/build-plans/interf-default/build/stages/summarize/SKILL.md +49 -4
- package/public-repo/build-plans/interf-default/build-plan.json +49 -39
- package/public-repo/build-plans/interf-default/build-plan.schema.json +59 -33
- package/public-repo/build-plans/interf-default/improve/SKILL.md +3 -3
- package/public-repo/build-plans/interf-default/use/query/SKILL.md +18 -11
- package/public-repo/openapi/local-service.openapi.json +14227 -0
- package/public-repo/skills/interf/SKILL.md +508 -187
- 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/logs.d.ts +0 -2
- package/dist/packages/engine/agents/lib/logs.js +0 -17
- package/dist/packages/engine/agents/lib/render.d.ts +0 -8
- 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-plan.js +0 -100
- 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/lib/schema.js +0 -316
- 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-paths.d.ts +0 -8
- package/dist/packages/engine/build/runtime-paths.js +0 -26
- 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.d.ts +0 -5
- 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-view.js +0 -94
- 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/native-run-handlers.d.ts +0 -25
- 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-caches.js +0 -191
- 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-specs.js +0 -114
- 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/build-plans/interf-default/build/stages/shape/SKILL.md +0 -27
- package/public-repo/build-plans/interf-default/build/stages/structure/SKILL.md +0 -21
- 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.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/preflight.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/status.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-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-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
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { SourceFilesSchema, SourceManifestSchema, SourceStateSchema, StageInputsSchema, } from "../../contracts/lib/schema.js";
|
|
4
|
+
import { readJsonFileWithSchema } from "../../contracts/utils/parse.js";
|
|
5
|
+
import { isFilesystemArtifact } from "../../contracts/utils/filesystem.js";
|
|
6
|
+
import { contextGraphRuntimeSourceManifestPath, contextGraphRuntimeSourceFilesPath, contextGraphRuntimeSourceStatePath, contextGraphRuntimeStageInputsPath, } from "./context-graph-paths.js";
|
|
7
|
+
import { writeJsonAtomic } from "./atomic-fs.js";
|
|
8
|
+
function shortHash(value, length = 16) {
|
|
9
|
+
return createHash("sha256")
|
|
10
|
+
.update(value)
|
|
11
|
+
.digest("hex")
|
|
12
|
+
.slice(0, length);
|
|
13
|
+
}
|
|
14
|
+
function stageReadsSource(stage, _schema) {
|
|
15
|
+
if (stage.contractType === "build-file-evidence")
|
|
16
|
+
return true;
|
|
17
|
+
return stage.reads.includes("source");
|
|
18
|
+
}
|
|
19
|
+
export function selectStageSourceSlice(sourceState, stage, schema) {
|
|
20
|
+
if (!stageReadsSource(stage, schema))
|
|
21
|
+
return [];
|
|
22
|
+
return [...sourceState.files];
|
|
23
|
+
}
|
|
24
|
+
export function materializeStageSourceSlice(options) {
|
|
25
|
+
return StageInputsSchema.parse({
|
|
26
|
+
...options.stageInputs,
|
|
27
|
+
input_total: options.stageInputs.inputs.length,
|
|
28
|
+
inputs: options.stageInputs.inputs,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
export function buildShellSourceState(sourceState, stageInputs) {
|
|
32
|
+
const byId = new Map(sourceState.files.map((file) => [file.id, file]));
|
|
33
|
+
return SourceStateSchema.parse({
|
|
34
|
+
...sourceState,
|
|
35
|
+
source: {
|
|
36
|
+
...sourceState.source,
|
|
37
|
+
locator: sourceState.source.locator,
|
|
38
|
+
},
|
|
39
|
+
source_total: stageInputs.inputs.length,
|
|
40
|
+
files: stageInputs.inputs.map((input) => ({
|
|
41
|
+
...(byId.get(input.source_file_id) ?? {
|
|
42
|
+
id: input.source_file_id,
|
|
43
|
+
path: input.path,
|
|
44
|
+
locator: input.locator,
|
|
45
|
+
}),
|
|
46
|
+
path: input.path,
|
|
47
|
+
locator: input.locator,
|
|
48
|
+
})),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Drop OS-generated filesystem junk (`.DS_Store`, AppleDouble forks, `Thumbs.db`,
|
|
53
|
+
* etc.) from the Source Manifest before it is materialized into runtime coverage
|
|
54
|
+
* inputs. These are not Source content, so they must never become required
|
|
55
|
+
* `expected` inputs — otherwise a Source folder shows "not ready" purely because
|
|
56
|
+
* Finder/Explorer left a sidecar behind. Matched by filename only (provable),
|
|
57
|
+
* never by an agent's `not-relevant` label, so a genuinely skipped content file
|
|
58
|
+
* still counts toward readiness. `source_total` is recomputed to stay equal to
|
|
59
|
+
* the filtered file count.
|
|
60
|
+
*/
|
|
61
|
+
export function dropFilesystemArtifacts(manifest) {
|
|
62
|
+
const files = manifest.files.filter((file) => !isFilesystemArtifact(file.path));
|
|
63
|
+
if (files.length === manifest.files.length)
|
|
64
|
+
return manifest;
|
|
65
|
+
return SourceManifestSchema.parse({
|
|
66
|
+
...manifest,
|
|
67
|
+
source_total: files.length,
|
|
68
|
+
files,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
export function sourceManifestToSourceFiles(manifest) {
|
|
72
|
+
return SourceFilesSchema.parse({
|
|
73
|
+
kind: "interf-source-files",
|
|
74
|
+
version: 1,
|
|
75
|
+
generated_at: manifest.generated_at,
|
|
76
|
+
source: manifest.source,
|
|
77
|
+
source_total: manifest.source_total,
|
|
78
|
+
files: manifest.files.map((file) => ({
|
|
79
|
+
id: file.id,
|
|
80
|
+
path: file.path,
|
|
81
|
+
locator: file.locator,
|
|
82
|
+
...(typeof file.size_bytes === "number" ? { size_bytes: file.size_bytes } : {}),
|
|
83
|
+
})),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
export function sourceManifestToSourceState(manifest) {
|
|
87
|
+
const sourceFiles = sourceManifestToSourceFiles(manifest);
|
|
88
|
+
return SourceStateSchema.parse({
|
|
89
|
+
kind: "interf-source-state",
|
|
90
|
+
version: 1,
|
|
91
|
+
graph_id: manifest.manifest_id,
|
|
92
|
+
generated_at: manifest.generated_at,
|
|
93
|
+
run_id: manifest.run_id,
|
|
94
|
+
source: manifest.source,
|
|
95
|
+
source_total: manifest.source_total,
|
|
96
|
+
files: sourceFiles.files,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Pure file-index hash. Excludes generated_at and run_id so the same source
|
|
101
|
+
* file index has a stable fingerprint across observations.
|
|
102
|
+
*/
|
|
103
|
+
export function computeFileIndexHash(sourceFiles) {
|
|
104
|
+
const fingerprint = {
|
|
105
|
+
source: sourceFiles.source,
|
|
106
|
+
files: sourceFiles.files.map((file) => [file.id, file.path, file.locator, file.size_bytes]),
|
|
107
|
+
};
|
|
108
|
+
return shortHash(JSON.stringify(fingerprint));
|
|
109
|
+
}
|
|
110
|
+
function writeJson(filePath, value) {
|
|
111
|
+
writeJsonAtomic(filePath, value);
|
|
112
|
+
}
|
|
113
|
+
export function buildBuildStageInputs(options) {
|
|
114
|
+
const generatedAt = options.generatedAt ?? new Date().toISOString();
|
|
115
|
+
const sourceFiles = options.sourceFiles ?? options.sourceState.files;
|
|
116
|
+
return {
|
|
117
|
+
kind: "interf-stage-inputs",
|
|
118
|
+
version: 3,
|
|
119
|
+
generated_at: generatedAt,
|
|
120
|
+
run_id: options.runId ?? options.sourceState.run_id ?? null,
|
|
121
|
+
build_plan: options.buildPlanId,
|
|
122
|
+
stage: options.stageId,
|
|
123
|
+
source_state_id: options.sourceState.graph_id,
|
|
124
|
+
source_manifest_id: options.sourceManifestId ?? options.sourceState.graph_id,
|
|
125
|
+
input_total: sourceFiles.length,
|
|
126
|
+
inputs: sourceFiles.map((file) => {
|
|
127
|
+
const input = {
|
|
128
|
+
source_file_id: file.id,
|
|
129
|
+
path: file.path,
|
|
130
|
+
locator: file.locator,
|
|
131
|
+
};
|
|
132
|
+
const manifestFile = file;
|
|
133
|
+
if (typeof manifestFile.kind === "string")
|
|
134
|
+
input.kind = manifestFile.kind;
|
|
135
|
+
if (typeof manifestFile.size_bytes === "number")
|
|
136
|
+
input.size_bytes = manifestFile.size_bytes;
|
|
137
|
+
if (typeof manifestFile.page_count === "number")
|
|
138
|
+
input.page_count = manifestFile.page_count;
|
|
139
|
+
if (Array.isArray(manifestFile.inspectable_units))
|
|
140
|
+
input.inspectable_units = manifestFile.inspectable_units;
|
|
141
|
+
if (typeof manifestFile.content_hash === "string")
|
|
142
|
+
input.content_hash = manifestFile.content_hash;
|
|
143
|
+
return input;
|
|
144
|
+
}),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
export function writeBuildStageInputs(options) {
|
|
148
|
+
const stageInputs = StageInputsSchema.parse(buildBuildStageInputs(options));
|
|
149
|
+
writeJson(contextGraphRuntimeStageInputsPath(options.contextGraphPath, options.stageId), stageInputs);
|
|
150
|
+
return stageInputs;
|
|
151
|
+
}
|
|
152
|
+
export function writeBuildSourceRuntimeFromManifest(options) {
|
|
153
|
+
const sourceManifest = dropFilesystemArtifacts(SourceManifestSchema.parse({
|
|
154
|
+
...options.sourceManifest,
|
|
155
|
+
run_id: options.runId ?? options.sourceManifest.run_id,
|
|
156
|
+
}));
|
|
157
|
+
writeJson(contextGraphRuntimeSourceManifestPath(options.contextGraphPath), sourceManifest);
|
|
158
|
+
const sourceFiles = sourceManifestToSourceFiles(sourceManifest);
|
|
159
|
+
writeJson(contextGraphRuntimeSourceFilesPath(options.contextGraphPath), sourceFiles);
|
|
160
|
+
const sourceState = SourceStateSchema.parse(sourceManifestToSourceState(sourceManifest));
|
|
161
|
+
writeJson(contextGraphRuntimeSourceStatePath(options.contextGraphPath), sourceState);
|
|
162
|
+
const manifestFilesById = new Map(sourceManifest.files.map((file) => [file.id, file]));
|
|
163
|
+
const stagesById = new Map((options.stages ?? []).map((stage) => [stage.id, stage]));
|
|
164
|
+
const stageInputs = options.stageIds.map((stageId) => {
|
|
165
|
+
const stage = stagesById.get(stageId);
|
|
166
|
+
const stateSlice = stage
|
|
167
|
+
? selectStageSourceSlice(sourceState, stage, options.schema)
|
|
168
|
+
: sourceState.files;
|
|
169
|
+
const sourceFilesForStage = stateSlice
|
|
170
|
+
.map((file) => manifestFilesById.get(file.id) ?? file);
|
|
171
|
+
return writeBuildStageInputs({
|
|
172
|
+
contextGraphPath: options.contextGraphPath,
|
|
173
|
+
buildPlanId: options.buildPlanId,
|
|
174
|
+
stageId,
|
|
175
|
+
sourceState,
|
|
176
|
+
sourceFiles: sourceFilesForStage,
|
|
177
|
+
sourceManifestId: sourceManifest.manifest_id,
|
|
178
|
+
runId: options.runId ?? null,
|
|
179
|
+
generatedAt: sourceManifest.generated_at,
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
return { sourceFiles, sourceState, stageInputs };
|
|
183
|
+
}
|
|
184
|
+
export function loadContextGraphSourceManifest(contextGraphPath) {
|
|
185
|
+
const filePath = contextGraphRuntimeSourceManifestPath(contextGraphPath);
|
|
186
|
+
if (!existsSync(filePath))
|
|
187
|
+
return null;
|
|
188
|
+
return readJsonFileWithSchema(filePath, "context-graph source manifest", SourceManifestSchema);
|
|
189
|
+
}
|
|
190
|
+
// COMPAT — source-files.json / source-state.json file fallbacks are read by
|
|
191
|
+
// loaders only when no Source Manifest exists (pre-refactor builds). Every
|
|
192
|
+
// current Build writes the Source Manifest first via
|
|
193
|
+
// writeBuildSourceRuntimeFromManifest; the manifest is the authority. Removal
|
|
194
|
+
// path: once no live Context Graph predates Source Manifest, drop the file
|
|
195
|
+
// fallbacks and have these loaders return null whenever the manifest is
|
|
196
|
+
// missing.
|
|
197
|
+
export function loadContextGraphSourceFiles(contextGraphPath) {
|
|
198
|
+
const manifest = loadContextGraphSourceManifest(contextGraphPath);
|
|
199
|
+
if (manifest)
|
|
200
|
+
return sourceManifestToSourceFiles(manifest);
|
|
201
|
+
const filePath = contextGraphRuntimeSourceFilesPath(contextGraphPath);
|
|
202
|
+
if (!existsSync(filePath))
|
|
203
|
+
return null;
|
|
204
|
+
return readJsonFileWithSchema(filePath, "context-graph source files", SourceFilesSchema);
|
|
205
|
+
}
|
|
206
|
+
export function loadContextGraphSourceState(contextGraphPath) {
|
|
207
|
+
const manifest = loadContextGraphSourceManifest(contextGraphPath);
|
|
208
|
+
if (manifest)
|
|
209
|
+
return sourceManifestToSourceState(manifest);
|
|
210
|
+
const filePath = contextGraphRuntimeSourceStatePath(contextGraphPath);
|
|
211
|
+
if (!existsSync(filePath))
|
|
212
|
+
return null;
|
|
213
|
+
return readJsonFileWithSchema(filePath, "context-graph source state", SourceStateSchema);
|
|
214
|
+
}
|
|
215
|
+
export function loadBuildStageInputs(contextGraphPath, stageId) {
|
|
216
|
+
const filePath = contextGraphRuntimeStageInputsPath(contextGraphPath, stageId);
|
|
217
|
+
if (!existsSync(filePath))
|
|
218
|
+
return null;
|
|
219
|
+
return readJsonFileWithSchema(filePath, "context-graph stage inputs", StageInputsSchema);
|
|
220
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type RuntimeStageContract, type StageEvidenceReconciliation } from "./lib/schema.js";
|
|
2
|
+
interface StageEvidenceStageLike {
|
|
3
|
+
id: string;
|
|
4
|
+
contractType: string;
|
|
5
|
+
writes: readonly string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function supportsStageEvidenceHarness(stage: {
|
|
8
|
+
contractType: string;
|
|
9
|
+
}): boolean;
|
|
10
|
+
export declare function shellStageEvidencePath(executionPath: string): string;
|
|
11
|
+
export declare function shellStageHarnessPath(executionPath: string): string;
|
|
12
|
+
export declare function writeStageHarnessProjection(options: {
|
|
13
|
+
executionPath: string;
|
|
14
|
+
contract: RuntimeStageContract;
|
|
15
|
+
}): void;
|
|
16
|
+
export declare function reconcileStageEvidence(options: {
|
|
17
|
+
contextGraphPath: string;
|
|
18
|
+
shellRoot: string;
|
|
19
|
+
stage: StageEvidenceStageLike;
|
|
20
|
+
}): StageEvidenceReconciliation | null;
|
|
21
|
+
export declare function stageEvidenceAcceptanceFailure(reconciliation: StageEvidenceReconciliation | null): string | null;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { dirname, join, relative } from "node:path";
|
|
3
|
+
import { StageEvidenceSchema, } from "../../contracts/lib/schema.js";
|
|
4
|
+
import { buildPlanPackagePathForContextGraph, contextGraphRuntimeLogsRoot, } from "./context-graph-paths.js";
|
|
5
|
+
import { relativePathEqualsOrWithin } from "../agents/lib/shell-paths.js";
|
|
6
|
+
import { findBuildPlanContextArtifact, readBuildPlanContextFile, } from "./context-graph-schema.js";
|
|
7
|
+
import { StageEvidenceReconciliationSchema, } from "./lib/schema.js";
|
|
8
|
+
import { loadBuildStageInputs } from "./source-manifest.js";
|
|
9
|
+
import { loadExecutionStageLedger, updateExecutionStageLedger, } from "./runtime-runs.js";
|
|
10
|
+
/**
|
|
11
|
+
* Relativize a stage evidence/output-ref path so it is always graph-relative.
|
|
12
|
+
*
|
|
13
|
+
* This is intentionally MORE permissive than the canonical `normalizeLayerPath`
|
|
14
|
+
* (`contracts/lib/context-graph-layer.ts`): its leading regex is `/^\.?\//`, so
|
|
15
|
+
* it strips a bare leading `/` as well as a leading `./`. An agent-reported
|
|
16
|
+
* output ref may arrive as `/outputs/...` or `/runtime/...`; this strips the
|
|
17
|
+
* absolute-looking prefix so the downstream `runtime/`/`outputs/` membership
|
|
18
|
+
* tests compare graph-relative paths. It is NOT the canonical layer-path
|
|
19
|
+
* normalization and must not be swapped for it.
|
|
20
|
+
*/
|
|
21
|
+
function normalizeGraphRelativeRefPath(path) {
|
|
22
|
+
return path.replaceAll("\\", "/").replace(/^\.?\//, "").replace(/\/+$/g, "");
|
|
23
|
+
}
|
|
24
|
+
export function supportsStageEvidenceHarness(stage) {
|
|
25
|
+
return stage.contractType === "build-file-evidence";
|
|
26
|
+
}
|
|
27
|
+
export function shellStageEvidencePath(executionPath) {
|
|
28
|
+
return join(executionPath, "runtime", "stage-evidence.json");
|
|
29
|
+
}
|
|
30
|
+
export function shellStageHarnessPath(executionPath) {
|
|
31
|
+
return join(executionPath, "runtime", "stage.md");
|
|
32
|
+
}
|
|
33
|
+
export function writeStageHarnessProjection(options) {
|
|
34
|
+
if (!supportsStageEvidenceHarness({ contractType: options.contract.contract_type }))
|
|
35
|
+
return;
|
|
36
|
+
const runtimeRoot = join(options.executionPath, "runtime");
|
|
37
|
+
mkdirSync(runtimeRoot, { recursive: true });
|
|
38
|
+
const evidencePath = shellStageEvidencePath(options.executionPath);
|
|
39
|
+
if (!existsSync(evidencePath)) {
|
|
40
|
+
const starterEvidence = {
|
|
41
|
+
kind: "interf-stage-evidence",
|
|
42
|
+
version: 1,
|
|
43
|
+
run_id: options.contract.run_id,
|
|
44
|
+
stage: options.contract.stage,
|
|
45
|
+
counts: [],
|
|
46
|
+
items: [],
|
|
47
|
+
edges: [],
|
|
48
|
+
};
|
|
49
|
+
writeFileSync(evidencePath, `${JSON.stringify(starterEvidence, null, 2)}\n`);
|
|
50
|
+
}
|
|
51
|
+
writeFileSync(shellStageHarnessPath(options.executionPath), renderStageHarnessMarkdown(options.contract));
|
|
52
|
+
}
|
|
53
|
+
function renderStageHarnessMarkdown(contract) {
|
|
54
|
+
return [
|
|
55
|
+
"---",
|
|
56
|
+
"kind: interf-stage-harness",
|
|
57
|
+
"version: 1",
|
|
58
|
+
`run_id: ${contract.run_id}`,
|
|
59
|
+
`project_id: ${contract.target_name}`,
|
|
60
|
+
`build_plan: ${contract.build_plan.id}`,
|
|
61
|
+
`stage: ${contract.stage}`,
|
|
62
|
+
"contract_path: runtime/stage-contract.json",
|
|
63
|
+
"paths_path: runtime/paths.json",
|
|
64
|
+
"source_manifest_path: runtime/source-manifest.json",
|
|
65
|
+
"stage_inputs_path: runtime/stage-inputs.json",
|
|
66
|
+
"evidence_output_path: runtime/stage-evidence.json",
|
|
67
|
+
"---",
|
|
68
|
+
"",
|
|
69
|
+
"# Stage Harness",
|
|
70
|
+
"",
|
|
71
|
+
"Read the JSON contract first. This markdown file is a generated projection for the current stage only.",
|
|
72
|
+
"",
|
|
73
|
+
"## Evidence",
|
|
74
|
+
"",
|
|
75
|
+
"Write `runtime/stage-evidence.json` before you emit DONE.",
|
|
76
|
+
"Each evidence item must reference real assigned Source paths or declared output paths.",
|
|
77
|
+
"Do NOT list `runtime/reviewed-inputs.json` or any other `runtime/*` path in `output_refs`. Those files are runtime control surfaces, not stage outputs; the runner records them separately. Evidence outputs must live under a declared artifact path.",
|
|
78
|
+
"Agent status lines and self-reported completion do not count as accepted evidence.",
|
|
79
|
+
"",
|
|
80
|
+
"Minimum shape:",
|
|
81
|
+
"",
|
|
82
|
+
"```json",
|
|
83
|
+
JSON.stringify({
|
|
84
|
+
kind: "interf-stage-evidence",
|
|
85
|
+
version: 1,
|
|
86
|
+
run_id: contract.run_id,
|
|
87
|
+
stage: contract.stage,
|
|
88
|
+
counts: [
|
|
89
|
+
{
|
|
90
|
+
key: "files_processed",
|
|
91
|
+
label: "Files processed",
|
|
92
|
+
value: 0,
|
|
93
|
+
total: contract.counts.source_total ?? 0,
|
|
94
|
+
unit: "files",
|
|
95
|
+
source: "stage",
|
|
96
|
+
stage_id: contract.stage,
|
|
97
|
+
primary: true,
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
items: [],
|
|
101
|
+
edges: [],
|
|
102
|
+
}, null, 2),
|
|
103
|
+
"```",
|
|
104
|
+
"",
|
|
105
|
+
].join("\n");
|
|
106
|
+
}
|
|
107
|
+
export function reconcileStageEvidence(options) {
|
|
108
|
+
if (!supportsStageEvidenceHarness(options.stage))
|
|
109
|
+
return null;
|
|
110
|
+
const run = loadExecutionStageLedger(options.contextGraphPath);
|
|
111
|
+
if (!run)
|
|
112
|
+
return null;
|
|
113
|
+
const evidenceFilePath = shellStageEvidencePath(options.shellRoot);
|
|
114
|
+
const persistedEvidencePath = persistRawStageEvidence({
|
|
115
|
+
contextGraphPath: options.contextGraphPath,
|
|
116
|
+
evidenceFilePath,
|
|
117
|
+
run,
|
|
118
|
+
});
|
|
119
|
+
let parsed;
|
|
120
|
+
try {
|
|
121
|
+
parsed = StageEvidenceSchema.parse(JSON.parse(readFileSync(evidenceFilePath, "utf8")));
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
const reconciliation = makeReconciliation({
|
|
125
|
+
evidencePath: persistedEvidencePath,
|
|
126
|
+
rejected: [{
|
|
127
|
+
kind: "file",
|
|
128
|
+
id: "stage-evidence-json",
|
|
129
|
+
reason: `Invalid stage evidence JSON: ${error instanceof Error ? error.message : String(error)}`,
|
|
130
|
+
}],
|
|
131
|
+
});
|
|
132
|
+
updateExecutionStageLedger(options.contextGraphPath, {
|
|
133
|
+
evidence_path: persistedEvidencePath ?? undefined,
|
|
134
|
+
evidence: reconciliation,
|
|
135
|
+
});
|
|
136
|
+
return reconciliation;
|
|
137
|
+
}
|
|
138
|
+
const reconciliation = reconcileParsedStageEvidence({
|
|
139
|
+
contextGraphPath: options.contextGraphPath,
|
|
140
|
+
evidence: parsed,
|
|
141
|
+
evidencePath: persistedEvidencePath,
|
|
142
|
+
run,
|
|
143
|
+
stage: options.stage,
|
|
144
|
+
});
|
|
145
|
+
updateExecutionStageLedger(options.contextGraphPath, {
|
|
146
|
+
evidence_path: persistedEvidencePath ?? undefined,
|
|
147
|
+
evidence: reconciliation,
|
|
148
|
+
});
|
|
149
|
+
return reconciliation;
|
|
150
|
+
}
|
|
151
|
+
export function stageEvidenceAcceptanceFailure(reconciliation) {
|
|
152
|
+
if (!reconciliation) {
|
|
153
|
+
return "Stage evidence was not reconciled.";
|
|
154
|
+
}
|
|
155
|
+
if (reconciliation.rejected.length > 0) {
|
|
156
|
+
const first = reconciliation.rejected[0];
|
|
157
|
+
return `Stage evidence was rejected: ${first.id}: ${first.reason}`;
|
|
158
|
+
}
|
|
159
|
+
const acceptedItems = reconciliation.accepted.items;
|
|
160
|
+
if (acceptedItems.length === 0) {
|
|
161
|
+
return "Stage evidence needs at least one accepted source/output evidence item.";
|
|
162
|
+
}
|
|
163
|
+
const hasAcceptedRef = acceptedItems.some((item) => item.source_refs.length > 0 || item.output_refs.length > 0);
|
|
164
|
+
if (!hasAcceptedRef) {
|
|
165
|
+
return "Stage evidence items need accepted source or output refs.";
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
function persistRawStageEvidence(options) {
|
|
170
|
+
if (!existsSync(options.evidenceFilePath))
|
|
171
|
+
return null;
|
|
172
|
+
const targetPath = join(contextGraphRuntimeLogsRoot(options.contextGraphPath), `${options.run.run_id}.stage-evidence.json`);
|
|
173
|
+
mkdirSync(dirname(targetPath), { recursive: true });
|
|
174
|
+
copyFileSync(options.evidenceFilePath, targetPath);
|
|
175
|
+
return relative(options.contextGraphPath, targetPath).replaceAll("\\", "/");
|
|
176
|
+
}
|
|
177
|
+
function reconcileParsedStageEvidence(options) {
|
|
178
|
+
const rejected = [];
|
|
179
|
+
if (options.evidence.run_id !== options.run.run_id) {
|
|
180
|
+
rejected.push({
|
|
181
|
+
kind: "file",
|
|
182
|
+
id: "run-id",
|
|
183
|
+
reason: `Evidence run_id "${options.evidence.run_id}" does not match active run "${options.run.run_id}".`,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
if (options.evidence.stage !== options.stage.id || options.evidence.stage !== options.run.stage) {
|
|
187
|
+
rejected.push({
|
|
188
|
+
kind: "file",
|
|
189
|
+
id: "stage",
|
|
190
|
+
reason: `Evidence stage "${options.evidence.stage}" does not match active stage "${options.run.stage}".`,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
if (rejected.length > 0) {
|
|
194
|
+
return makeReconciliation({ evidencePath: options.evidencePath, rejected });
|
|
195
|
+
}
|
|
196
|
+
const stageInputs = loadBuildStageInputs(options.contextGraphPath, options.stage.id);
|
|
197
|
+
const allowedSourcePaths = new Set((stageInputs?.inputs ?? []).map((input) => input.path));
|
|
198
|
+
const allowedSourceIds = new Set((stageInputs?.inputs ?? []).map((input) => input.source_file_id));
|
|
199
|
+
const acceptedItems = [];
|
|
200
|
+
const droppedRuntimeRefs = [];
|
|
201
|
+
for (const rawItem of options.evidence.items) {
|
|
202
|
+
const { item, droppedRuntimeRefs: itemDropped } = normalizeEvidenceItem({
|
|
203
|
+
contextGraphPath: options.contextGraphPath,
|
|
204
|
+
item: rawItem,
|
|
205
|
+
});
|
|
206
|
+
if (itemDropped.length > 0)
|
|
207
|
+
droppedRuntimeRefs.push(...itemDropped.map((p) => `${item.id}: ${p}`));
|
|
208
|
+
// If an item was entirely composed of runtime/* output refs (with no source refs),
|
|
209
|
+
// dropping those refs leaves nothing to validate. Skip with a warning instead of
|
|
210
|
+
// rejecting — the agent already records that coverage via runtime/reviewed-inputs.json.
|
|
211
|
+
const itemWasPurelyRuntime = itemDropped.length > 0 &&
|
|
212
|
+
item.output_refs.length === 0 &&
|
|
213
|
+
item.source_refs.length === 0;
|
|
214
|
+
if (itemWasPurelyRuntime)
|
|
215
|
+
continue;
|
|
216
|
+
const reason = invalidItemReason({
|
|
217
|
+
contextGraphPath: options.contextGraphPath,
|
|
218
|
+
item,
|
|
219
|
+
allowedSourceIds,
|
|
220
|
+
allowedSourcePaths,
|
|
221
|
+
stage: options.stage,
|
|
222
|
+
});
|
|
223
|
+
if (reason) {
|
|
224
|
+
rejected.push({ kind: "item", id: item.id, reason });
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
acceptedItems.push(item);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
const acceptedSourceRefCount = new Set(acceptedItems.flatMap((item) => item.source_refs.map((ref) => ref.path))).size;
|
|
231
|
+
const acceptedCounts = [];
|
|
232
|
+
for (const count of options.evidence.counts) {
|
|
233
|
+
const reason = invalidCountReason({
|
|
234
|
+
count,
|
|
235
|
+
acceptedItems,
|
|
236
|
+
acceptedSourceRefCount,
|
|
237
|
+
stage: options.stage,
|
|
238
|
+
});
|
|
239
|
+
if (reason) {
|
|
240
|
+
rejected.push({ kind: "count", id: count.key, reason });
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
acceptedCounts.push(count);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
const acceptedItemIds = new Set(acceptedItems.map((item) => item.id));
|
|
247
|
+
const acceptedEdges = [];
|
|
248
|
+
const warnings = [...(options.evidence.warnings ?? [])];
|
|
249
|
+
for (const dropped of droppedRuntimeRefs) {
|
|
250
|
+
warnings.push(`Dropped output ref ${dropped}; runtime/* paths are control surfaces, not stage outputs.`);
|
|
251
|
+
}
|
|
252
|
+
for (const edge of options.evidence.edges) {
|
|
253
|
+
if (edge.stage_id !== options.stage.id) {
|
|
254
|
+
rejected.push({ kind: "edge", id: `${edge.from}:${edge.to}`, reason: "Edge stage does not match the active stage." });
|
|
255
|
+
}
|
|
256
|
+
else if (!acceptedItemIds.has(edge.from) || !acceptedItemIds.has(edge.to)) {
|
|
257
|
+
warnings.push(`Dropped evidence edge ${edge.from}:${edge.to}; endpoints were not both accepted evidence items.`);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
acceptedEdges.push(edge);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return makeReconciliation({
|
|
264
|
+
evidencePath: options.evidencePath,
|
|
265
|
+
accepted: {
|
|
266
|
+
counts: acceptedCounts,
|
|
267
|
+
items: acceptedItems,
|
|
268
|
+
edges: acceptedEdges,
|
|
269
|
+
},
|
|
270
|
+
rejected,
|
|
271
|
+
warnings,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
function normalizeEvidenceItem(options) {
|
|
275
|
+
const droppedRuntimeRefs = [];
|
|
276
|
+
const output_refs = [];
|
|
277
|
+
for (const outputRef of options.item.output_refs) {
|
|
278
|
+
const normalized = normalizeEvidenceOutputRef({
|
|
279
|
+
contextGraphPath: options.contextGraphPath,
|
|
280
|
+
outputRef,
|
|
281
|
+
});
|
|
282
|
+
if (normalizeGraphRelativeRefPath(normalized.path).startsWith("runtime/")) {
|
|
283
|
+
droppedRuntimeRefs.push(normalized.path);
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
output_refs.push(normalized);
|
|
287
|
+
}
|
|
288
|
+
return {
|
|
289
|
+
item: { ...options.item, output_refs },
|
|
290
|
+
droppedRuntimeRefs,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
function normalizeEvidenceOutputRef(options) {
|
|
294
|
+
const schema = readBuildPlanContextFile(buildPlanPackagePathForContextGraph(options.contextGraphPath));
|
|
295
|
+
const artifact = schema ? findBuildPlanContextArtifact(schema, options.outputRef.artifact_id) : null;
|
|
296
|
+
if (!artifact)
|
|
297
|
+
return options.outputRef;
|
|
298
|
+
const path = normalizeGraphRelativeRefPath(options.outputRef.path);
|
|
299
|
+
const artifactRoot = normalizeGraphRelativeRefPath(artifact.path);
|
|
300
|
+
const outputMount = `outputs/${options.outputRef.artifact_id}`;
|
|
301
|
+
if (path === outputMount) {
|
|
302
|
+
return { ...options.outputRef, path: artifactRoot };
|
|
303
|
+
}
|
|
304
|
+
if (path.startsWith(`${outputMount}/`)) {
|
|
305
|
+
return {
|
|
306
|
+
...options.outputRef,
|
|
307
|
+
path: normalizeGraphRelativeRefPath(`${artifactRoot}/${path.slice(outputMount.length + 1)}`),
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
if (path.startsWith("outputs/")) {
|
|
311
|
+
const stripped = normalizeGraphRelativeRefPath(path.slice("outputs/".length));
|
|
312
|
+
if (relativePathEqualsOrWithin(artifactRoot, stripped)) {
|
|
313
|
+
return { ...options.outputRef, path: stripped };
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return options.outputRef;
|
|
317
|
+
}
|
|
318
|
+
function invalidItemReason(options) {
|
|
319
|
+
if (options.item.stage_id !== options.stage.id)
|
|
320
|
+
return "Item stage does not match the active stage.";
|
|
321
|
+
if (options.item.source_refs.length === 0 && options.item.output_refs.length === 0) {
|
|
322
|
+
return "Evidence items need at least one source or output ref.";
|
|
323
|
+
}
|
|
324
|
+
for (const sourceRef of options.item.source_refs) {
|
|
325
|
+
if (!options.allowedSourcePaths.has(sourceRef.path)) {
|
|
326
|
+
return `Source ref "${sourceRef.path}" is not assigned to this stage.`;
|
|
327
|
+
}
|
|
328
|
+
if (sourceRef.source_file_id && !options.allowedSourceIds.has(sourceRef.source_file_id)) {
|
|
329
|
+
return `Source file id "${sourceRef.source_file_id}" is not assigned to this stage.`;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
for (const outputRef of options.item.output_refs) {
|
|
333
|
+
const reason = invalidOutputRefReason(options.contextGraphPath, outputRef, options.stage);
|
|
334
|
+
if (reason)
|
|
335
|
+
return reason;
|
|
336
|
+
}
|
|
337
|
+
return null;
|
|
338
|
+
}
|
|
339
|
+
function invalidOutputRefReason(contextGraphPath, outputRef, stage) {
|
|
340
|
+
if (!stage.writes.includes(outputRef.artifact_id)) {
|
|
341
|
+
return `Output ref artifact "${outputRef.artifact_id}" is not declared as a stage write.`;
|
|
342
|
+
}
|
|
343
|
+
const schema = readBuildPlanContextFile(buildPlanPackagePathForContextGraph(contextGraphPath));
|
|
344
|
+
const artifact = schema ? findBuildPlanContextArtifact(schema, outputRef.artifact_id) : null;
|
|
345
|
+
if (!artifact)
|
|
346
|
+
return `Output ref artifact "${outputRef.artifact_id}" is not in the Build Plan schema.`;
|
|
347
|
+
if (!relativePathEqualsOrWithin(artifact.path, outputRef.path)) {
|
|
348
|
+
return `Output ref path "${outputRef.path}" is outside artifact "${artifact.id}".`;
|
|
349
|
+
}
|
|
350
|
+
if (!existsSync(join(contextGraphPath, outputRef.path))) {
|
|
351
|
+
return `Output ref path "${outputRef.path}" does not exist in the Context Graph.`;
|
|
352
|
+
}
|
|
353
|
+
return null;
|
|
354
|
+
}
|
|
355
|
+
function invalidCountReason(options) {
|
|
356
|
+
if (options.count.source === "engine")
|
|
357
|
+
return "Stage evidence cannot claim engine-owned counts.";
|
|
358
|
+
if (options.count.stage_id && options.count.stage_id !== options.stage.id) {
|
|
359
|
+
return "Count stage does not match the active stage.";
|
|
360
|
+
}
|
|
361
|
+
if (options.count.artifact_id && !options.stage.writes.includes(options.count.artifact_id)) {
|
|
362
|
+
return `Count artifact "${options.count.artifact_id}" is not declared as a stage write.`;
|
|
363
|
+
}
|
|
364
|
+
if (options.count.key === "files_processed" && options.count.value > options.acceptedSourceRefCount) {
|
|
365
|
+
return "files_processed cannot exceed accepted source refs.";
|
|
366
|
+
}
|
|
367
|
+
if (options.count.value > 0 && options.acceptedItems.length === 0) {
|
|
368
|
+
return "Positive stage counts need at least one accepted evidence item.";
|
|
369
|
+
}
|
|
370
|
+
return null;
|
|
371
|
+
}
|
|
372
|
+
function makeReconciliation(options) {
|
|
373
|
+
return StageEvidenceReconciliationSchema.parse({
|
|
374
|
+
kind: "interf-stage-evidence-reconciliation",
|
|
375
|
+
version: 1,
|
|
376
|
+
generated_at: new Date().toISOString(),
|
|
377
|
+
evidence_path: options.evidencePath,
|
|
378
|
+
accepted: options.accepted ?? {
|
|
379
|
+
counts: [],
|
|
380
|
+
items: [],
|
|
381
|
+
edges: [],
|
|
382
|
+
},
|
|
383
|
+
rejected: options.rejected ?? [],
|
|
384
|
+
warnings: options.warnings ?? [],
|
|
385
|
+
});
|
|
386
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type ExpectedInputsFile, type GraphManifest, type SourceManifest, type StageManifest, type StageInputs } from "../../contracts/lib/schema.js";
|
|
2
|
+
import type { BuildPlanStageDefinition } from "../../build-plans/package/build-plan-definitions.js";
|
|
3
|
+
export declare function persistStageReviewedInputsFromShell(options: {
|
|
4
|
+
contextGraphPath: string;
|
|
5
|
+
shellRoot: string;
|
|
6
|
+
stageId: string;
|
|
7
|
+
}): {
|
|
8
|
+
ok: boolean;
|
|
9
|
+
summary: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function writeStageExpectedInputs(options: {
|
|
12
|
+
contextGraphPath: string;
|
|
13
|
+
stage: Pick<BuildPlanStageDefinition, "id" | "reads" | "writes" | "contractType">;
|
|
14
|
+
generatedAt?: string;
|
|
15
|
+
}): ExpectedInputsFile | null;
|
|
16
|
+
export declare function writeSourceStageManifest(options: {
|
|
17
|
+
contextGraphPath: string;
|
|
18
|
+
buildPlanId: string;
|
|
19
|
+
sourceManifest: SourceManifest;
|
|
20
|
+
runId?: string | null;
|
|
21
|
+
generatedAt?: string;
|
|
22
|
+
}): StageManifest;
|
|
23
|
+
export declare function loadStageManifest(contextGraphPath: string, stageId: string): StageManifest | null;
|
|
24
|
+
export declare function listStageManifests(contextGraphPath: string): StageManifest[];
|
|
25
|
+
export declare function writeStageManifestFromOutputs(options: {
|
|
26
|
+
contextGraphPath: string;
|
|
27
|
+
buildPlanId: string;
|
|
28
|
+
projectId: string;
|
|
29
|
+
runId?: string | null;
|
|
30
|
+
stage: BuildPlanStageDefinition;
|
|
31
|
+
generatedAt?: string;
|
|
32
|
+
}): StageManifest | null;
|
|
33
|
+
export declare function loadGraphManifest(contextGraphPath: string): GraphManifest | null;
|
|
34
|
+
export declare function writeGraphManifest(options: {
|
|
35
|
+
contextGraphPath: string;
|
|
36
|
+
projectId: string;
|
|
37
|
+
buildPlanId: string;
|
|
38
|
+
intent?: string | null;
|
|
39
|
+
runId?: string | null;
|
|
40
|
+
graphId?: string | null;
|
|
41
|
+
generatedAt?: string;
|
|
42
|
+
}): GraphManifest;
|
|
43
|
+
export declare function reviewedInputsFilePath(contextGraphPath: string, stageId: string): string;
|
|
44
|
+
export declare function expectedInputsFilePath(contextGraphPath: string, stageId: string): string;
|
|
45
|
+
export declare function loadStageInputsForManifest(contextGraphPath: string, stageId: string): StageInputs | null;
|