@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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { resolveAgent } from "./detection.js";
|
|
2
|
+
import { resolveEffectiveAgentExecutionProfile } from "./execution-profile.js";
|
|
2
3
|
import { spawnAgent } from "./execution.js";
|
|
3
4
|
import { ensureAgentAutomatedRunReady } from "./preflight.js";
|
|
4
5
|
export function buildRuntimeExecutorInfo(executor) {
|
|
@@ -14,17 +15,25 @@ export function buildRuntimeExecutorInfo(executor) {
|
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
17
|
export function createLocalAgentExecutor(agent, executionProfile = {}) {
|
|
18
|
+
// Resolve the EFFECTIVE profile (per-run override ∨ saved agent prefs) ONCE,
|
|
19
|
+
// here, at construction. The executor then carries this single resolved value
|
|
20
|
+
// as `executionProfile`, so the model `buildRuntimeExecutorInfo` records and
|
|
21
|
+
// the model `buildAgentArgs` runs are sourced from the same object and can
|
|
22
|
+
// never disagree (F1). `spawnAgent` no longer re-merges prefs — it consumes
|
|
23
|
+
// this resolved profile as-is.
|
|
24
|
+
const effectiveProfile = resolveEffectiveAgentExecutionProfile(agent, executionProfile);
|
|
17
25
|
return {
|
|
18
26
|
kind: "local-agent",
|
|
19
27
|
name: agent.name,
|
|
20
28
|
displayName: agent.displayName,
|
|
21
29
|
command: agent.command,
|
|
22
|
-
executionProfile,
|
|
30
|
+
executionProfile: effectiveProfile,
|
|
23
31
|
execute(rootPath, prompt, options) {
|
|
24
32
|
return spawnAgent(agent, rootPath, prompt, {
|
|
25
33
|
eventLogPath: options?.eventLogPath,
|
|
26
34
|
statusLogPath: options?.statusLogPath,
|
|
27
|
-
|
|
35
|
+
reasoningLogPath: options?.reasoningLogPath,
|
|
36
|
+
executionProfile: effectiveProfile,
|
|
28
37
|
completionCheck: options?.completionCheck,
|
|
29
38
|
onStatus: options?.onStatus,
|
|
30
39
|
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function appendAgentEventLog(eventLogPath: string | null | undefined, event: Record<string, unknown>): void;
|
|
2
|
+
export declare function appendAgentStatusLog(statusLogPath: string | null | undefined, text: string): void;
|
|
3
|
+
/**
|
|
4
|
+
* Append one reasoning/thinking span to the best-effort reasoning transcript
|
|
5
|
+
* (one JSON object per line). Reasoning capture must never block or fail a run,
|
|
6
|
+
* so any write error is swallowed — a missing reasoning line is acceptable, a
|
|
7
|
+
* crashed Build is not.
|
|
8
|
+
*/
|
|
9
|
+
export declare function appendAgentReasoningLog(reasoningLogPath: string | null | undefined, span: {
|
|
10
|
+
kind: string;
|
|
11
|
+
text: string;
|
|
12
|
+
}): void;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { appendFileSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Append one line to a run log file, creating its directory on demand.
|
|
5
|
+
*
|
|
6
|
+
* Run log writes are observability, never run control: a mid-run disk hiccup
|
|
7
|
+
* (mkdir/append failure) must record a recoverable session, not throw an
|
|
8
|
+
* unhandled rejection that crashes the Build and dangles the session's
|
|
9
|
+
* `logs.event_stream_path`/`logs.status_path`. The single explicit policy for
|
|
10
|
+
* every agent run log is therefore best-effort — a missing log line is
|
|
11
|
+
* acceptable, a crashed run is not. A null/empty path is a no-op.
|
|
12
|
+
*/
|
|
13
|
+
function ensureLogFile(path, content) {
|
|
14
|
+
if (!path)
|
|
15
|
+
return;
|
|
16
|
+
try {
|
|
17
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
18
|
+
appendFileSync(path, content);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// Best-effort only: log writes must never block or fail a run.
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function appendAgentEventLog(eventLogPath, event) {
|
|
25
|
+
ensureLogFile(eventLogPath, `${JSON.stringify({
|
|
26
|
+
timestamp: new Date().toISOString(),
|
|
27
|
+
...event,
|
|
28
|
+
})}\n`);
|
|
29
|
+
}
|
|
30
|
+
export function appendAgentStatusLog(statusLogPath, text) {
|
|
31
|
+
ensureLogFile(statusLogPath, `${new Date().toISOString()} ${text}\n`);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Append one reasoning/thinking span to the best-effort reasoning transcript
|
|
35
|
+
* (one JSON object per line). Reasoning capture must never block or fail a run,
|
|
36
|
+
* so any write error is swallowed — a missing reasoning line is acceptable, a
|
|
37
|
+
* crashed Build is not.
|
|
38
|
+
*/
|
|
39
|
+
export function appendAgentReasoningLog(reasoningLogPath, span) {
|
|
40
|
+
ensureLogFile(reasoningLogPath, `${JSON.stringify({ timestamp: new Date().toISOString(), ...span })}\n`);
|
|
41
|
+
}
|
|
@@ -2,7 +2,8 @@ import { mkdtempSync, rmSync } from "node:fs";
|
|
|
2
2
|
import { spawnSync } from "node:child_process";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { join } from "node:path";
|
|
5
|
-
import {
|
|
5
|
+
import { getBuiltInProvider } from "../providers/index.js";
|
|
6
|
+
import { loadAgentPrefs } from "../registry.js";
|
|
6
7
|
import { buildAgentArgs, buildAgentEnv } from "./args.js";
|
|
7
8
|
const successfulPreflightAgents = new Set();
|
|
8
9
|
export function buildAgentPreflightPrompt() {
|
|
@@ -19,15 +20,18 @@ export function runAgentPreflight(agent, options = {}) {
|
|
|
19
20
|
const spawnSyncImpl = options.spawnSyncImpl ?? spawnSync;
|
|
20
21
|
const dirPath = mkdtempSync(join(tmpdir(), "interf-doctor-"));
|
|
21
22
|
try {
|
|
23
|
+
const prefs = loadAgentPrefs()[agent.name];
|
|
24
|
+
const baseEnv = buildAgentEnv(agent);
|
|
25
|
+
const env = prefs?.env_vars ? { ...baseEnv, ...prefs.env_vars } : baseEnv;
|
|
22
26
|
const result = spawnSyncImpl(agent.command, buildAgentArgs(agent, buildAgentPreflightPrompt()), {
|
|
23
27
|
cwd: dirPath,
|
|
24
28
|
encoding: "utf8",
|
|
25
|
-
env
|
|
29
|
+
env,
|
|
26
30
|
input: "",
|
|
27
31
|
timeout: timeoutMs,
|
|
28
32
|
});
|
|
29
33
|
const stdout = typeof result.stdout === "string" ? result.stdout.trim() : "";
|
|
30
|
-
const stderr = sanitizeAgentStderr(typeof result.stderr === "string" ? result.stderr : "");
|
|
34
|
+
const stderr = sanitizeAgentStderr(agent, typeof result.stderr === "string" ? result.stderr : "");
|
|
31
35
|
const timedOut = result.error?.name === "Error" && result.error.message.includes("timed out");
|
|
32
36
|
if (result.error) {
|
|
33
37
|
return {
|
|
@@ -65,7 +69,7 @@ export function ensureAgentAutomatedRunReady(agent, options = {}) {
|
|
|
65
69
|
successfulPreflightAgents.add(agent.name);
|
|
66
70
|
return { ok: true };
|
|
67
71
|
}
|
|
68
|
-
if (!
|
|
72
|
+
if (!isTransientPreflightFailure(agent, result) || attempt === 3) {
|
|
69
73
|
break;
|
|
70
74
|
}
|
|
71
75
|
sleepSync(retryDelayMs * attempt);
|
|
@@ -73,25 +77,26 @@ export function ensureAgentAutomatedRunReady(agent, options = {}) {
|
|
|
73
77
|
const details = result ? [result.error, result.stderr].filter(Boolean).join(" ") : "";
|
|
74
78
|
return {
|
|
75
79
|
ok: false,
|
|
76
|
-
error: `${agent.displayName} failed Interf executor preflight.
|
|
80
|
+
error: `${agent.displayName} failed Interf executor preflight. ` +
|
|
81
|
+
`Run \`interf doctor --live\` for details, or switch active agent with \`interf agents use <name>\` ` +
|
|
82
|
+
`(e.g. \`interf agents use claude-code\`).` +
|
|
83
|
+
(details ? ` ${details}` : ""),
|
|
77
84
|
};
|
|
78
85
|
}
|
|
79
|
-
function sanitizeAgentStderr(stderr) {
|
|
86
|
+
function sanitizeAgentStderr(agent, stderr) {
|
|
87
|
+
const filters = getBuiltInProvider(agent.name)?.noiseFilters ?? [];
|
|
80
88
|
return stderr
|
|
81
89
|
.split("\n")
|
|
82
90
|
.filter((line) => line.trim().length > 0)
|
|
83
|
-
.filter((line) => !
|
|
91
|
+
.filter((line) => !filters.some((pattern) => pattern.test(line)))
|
|
84
92
|
.join("\n")
|
|
85
93
|
.trim();
|
|
86
94
|
}
|
|
87
|
-
function
|
|
88
|
-
|
|
95
|
+
function isTransientPreflightFailure(agent, result) {
|
|
96
|
+
const provider = getBuiltInProvider(agent.name);
|
|
97
|
+
if (!provider?.isTransientPreflightFailure)
|
|
89
98
|
return false;
|
|
90
|
-
|
|
91
|
-
if (/usage limit/i.test(text))
|
|
92
|
-
return false;
|
|
93
|
-
return /failed to record rollout items/i.test(text) ||
|
|
94
|
-
/thread\s+[0-9a-f-]+\s+not found/i.test(text);
|
|
99
|
+
return provider.isTransientPreflightFailure(result.stderr ?? "", result.error ?? "");
|
|
95
100
|
}
|
|
96
101
|
function sleepSync(ms) {
|
|
97
102
|
if (ms <= 0)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface VisibleTextState {
|
|
2
|
+
current: string | null;
|
|
3
|
+
terminated?: boolean;
|
|
4
|
+
terminalStatus?: string | null;
|
|
5
|
+
}
|
|
6
|
+
export declare function emitVisibleAgentText(text: string, statusLogPath: string | null | undefined, lastVisibleText?: VisibleTextState, onStatus?: (line: string) => void): boolean;
|
|
7
|
+
export declare function displayAgentEvent(event: Record<string, unknown>, statusLogPath: string | null | undefined, lastVisibleText: VisibleTextState, onStatus?: (line: string) => void): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* One reasoning/thinking span lifted from an agent event, for the best-effort
|
|
10
|
+
* reasoning transcript. `kind` records where it came from so the transcript
|
|
11
|
+
* stays inspectable across executors.
|
|
12
|
+
*/
|
|
13
|
+
export interface AgentReasoningSpan {
|
|
14
|
+
kind: "thinking" | "reasoning";
|
|
15
|
+
text: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Extract any reasoning/thinking spans from a single parsed agent event. The
|
|
19
|
+
* event stream is already parsed for display; this lifts the reasoning the
|
|
20
|
+
* display path discards (it never renders thinking) so it can be teed to a
|
|
21
|
+
* runtime file. Covers Claude Code `assistant` messages carrying `thinking`
|
|
22
|
+
* content blocks and Codex `item.*` reasoning items. Returns `[]` for events
|
|
23
|
+
* with no reasoning — callers must treat reasoning capture as best-effort.
|
|
24
|
+
*/
|
|
25
|
+
export declare function extractAgentReasoning(event: Record<string, unknown>): AgentReasoningSpan[];
|
|
26
|
+
export declare function summarizeAgentToolActivity(event: Record<string, unknown>): string | null;
|
|
@@ -2,6 +2,7 @@ import { basename } from "node:path";
|
|
|
2
2
|
import chalk from "chalk";
|
|
3
3
|
import { SHOW_AGENT_TOOL_EVENTS, VISIBLE_STATUS_PREFIXES, } from "./constants.js";
|
|
4
4
|
import { appendAgentStatusLog } from "./logs.js";
|
|
5
|
+
import { extractInputPath, pickString } from "./string-utils.js";
|
|
5
6
|
export function emitVisibleAgentText(text, statusLogPath, lastVisibleText, onStatus) {
|
|
6
7
|
if (lastVisibleText?.terminated) {
|
|
7
8
|
return false;
|
|
@@ -37,7 +38,7 @@ export function displayAgentEvent(event, statusLogPath, lastVisibleText, onStatu
|
|
|
37
38
|
const input = event.input;
|
|
38
39
|
let detail = "";
|
|
39
40
|
if (input) {
|
|
40
|
-
const path = (input
|
|
41
|
+
const path = extractInputPath(input);
|
|
41
42
|
if (path)
|
|
42
43
|
detail = chalk.dim(` ${path.slice(0, 80)}`);
|
|
43
44
|
}
|
|
@@ -58,7 +59,7 @@ export function displayAgentEvent(event, statusLogPath, lastVisibleText, onStatu
|
|
|
58
59
|
const input = block.input;
|
|
59
60
|
let detail = "";
|
|
60
61
|
if (input) {
|
|
61
|
-
const path = (input
|
|
62
|
+
const path = extractInputPath(input);
|
|
62
63
|
if (path)
|
|
63
64
|
detail = chalk.dim(` ${path.slice(0, 80)}`);
|
|
64
65
|
}
|
|
@@ -95,6 +96,45 @@ export function displayAgentEvent(event, statusLogPath, lastVisibleText, onStatu
|
|
|
95
96
|
}
|
|
96
97
|
return displayed;
|
|
97
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Extract any reasoning/thinking spans from a single parsed agent event. The
|
|
101
|
+
* event stream is already parsed for display; this lifts the reasoning the
|
|
102
|
+
* display path discards (it never renders thinking) so it can be teed to a
|
|
103
|
+
* runtime file. Covers Claude Code `assistant` messages carrying `thinking`
|
|
104
|
+
* content blocks and Codex `item.*` reasoning items. Returns `[]` for events
|
|
105
|
+
* with no reasoning — callers must treat reasoning capture as best-effort.
|
|
106
|
+
*/
|
|
107
|
+
export function extractAgentReasoning(event) {
|
|
108
|
+
const type = event.type;
|
|
109
|
+
const spans = [];
|
|
110
|
+
if (type === "assistant") {
|
|
111
|
+
const message = event.message;
|
|
112
|
+
const content = message?.content;
|
|
113
|
+
if (Array.isArray(content)) {
|
|
114
|
+
for (const block of content) {
|
|
115
|
+
if (block.type === "thinking" || block.type === "redacted_thinking") {
|
|
116
|
+
const text = pickString(block.thinking) ?? pickString(block.text);
|
|
117
|
+
if (text)
|
|
118
|
+
spans.push({ kind: "thinking", text });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (type === "item.started" || type === "item.completed") {
|
|
124
|
+
const item = event.item;
|
|
125
|
+
if (item?.type === "reasoning") {
|
|
126
|
+
const text = pickString(item.text) ?? pickString(item.summary) ?? pickString(item.content);
|
|
127
|
+
if (text)
|
|
128
|
+
spans.push({ kind: "reasoning", text });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (type === "reasoning") {
|
|
132
|
+
const text = pickString(event.text) ?? pickString(event.summary) ?? pickString(event.content);
|
|
133
|
+
if (text)
|
|
134
|
+
spans.push({ kind: "reasoning", text });
|
|
135
|
+
}
|
|
136
|
+
return spans;
|
|
137
|
+
}
|
|
98
138
|
export function summarizeAgentToolActivity(event) {
|
|
99
139
|
const type = event.type;
|
|
100
140
|
if (type === "assistant") {
|
|
@@ -116,20 +156,6 @@ export function summarizeAgentToolActivity(event) {
|
|
|
116
156
|
}
|
|
117
157
|
return null;
|
|
118
158
|
}
|
|
119
|
-
function pickString(value) {
|
|
120
|
-
if (typeof value === "string")
|
|
121
|
-
return value;
|
|
122
|
-
if (!Array.isArray(value))
|
|
123
|
-
return null;
|
|
124
|
-
for (const entry of value) {
|
|
125
|
-
if (typeof entry === "string")
|
|
126
|
-
return entry;
|
|
127
|
-
if (entry && typeof entry === "object" && "text" in entry && typeof entry.text === "string") {
|
|
128
|
-
return entry.text;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
159
|
function displayItemEvent(type, item, statusLogPath, lastVisibleText, onStatus) {
|
|
134
160
|
const itemType = item.type;
|
|
135
161
|
if (itemType === "agent_message") {
|
|
@@ -159,7 +185,7 @@ function displayItemEvent(type, item, statusLogPath, lastVisibleText, onStatus)
|
|
|
159
185
|
return false;
|
|
160
186
|
}
|
|
161
187
|
function describeInput(input) {
|
|
162
|
-
const path = (input
|
|
188
|
+
const path = extractInputPath(input);
|
|
163
189
|
return path ? chalk.dim(` ${path.slice(0, 80)}`) : "";
|
|
164
190
|
}
|
|
165
191
|
function summarizeToolUse(name, input) {
|
|
@@ -168,14 +194,14 @@ function summarizeToolUse(name, input) {
|
|
|
168
194
|
const target = summarizeToolTarget(input);
|
|
169
195
|
switch (name) {
|
|
170
196
|
case "Read":
|
|
171
|
-
return target ? `reading ${target}` : "reading
|
|
197
|
+
return target ? `reading ${target}` : "reading context graph files";
|
|
172
198
|
case "Write":
|
|
173
|
-
return target ? `writing ${target}` : "writing
|
|
199
|
+
return target ? `writing ${target}` : "writing context graph files";
|
|
174
200
|
case "Edit":
|
|
175
|
-
return target ? `editing ${target}` : "editing
|
|
201
|
+
return target ? `editing ${target}` : "editing context graph files";
|
|
176
202
|
case "Glob":
|
|
177
203
|
case "Grep":
|
|
178
|
-
return target ? `${name.toLowerCase()} on ${target}` : `${name.toLowerCase()}ing
|
|
204
|
+
return target ? `${name.toLowerCase()} on ${target}` : `${name.toLowerCase()}ing context graph files`;
|
|
179
205
|
case "Bash":
|
|
180
206
|
return target ? `running ${target}` : "running a local helper";
|
|
181
207
|
default:
|
|
@@ -185,7 +211,7 @@ function summarizeToolUse(name, input) {
|
|
|
185
211
|
function summarizeToolTarget(input) {
|
|
186
212
|
if (!input)
|
|
187
213
|
return null;
|
|
188
|
-
const raw = (input
|
|
214
|
+
const raw = extractInputPath(input);
|
|
189
215
|
if (!raw || raw.length === 0)
|
|
190
216
|
return null;
|
|
191
217
|
if (raw.includes("\n")) {
|
|
@@ -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;
|