@interf/compiler 0.22.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +268 -0
- package/dist/bin-mcp.d.ts +2 -0
- package/dist/bin-mcp.js +63 -0
- package/dist/bin-runtime.d.ts +2 -0
- package/dist/bin-runtime.js +111 -0
- package/dist/cli/commands/agents.js +4 -4
- package/dist/cli/commands/auth.d.ts +20 -0
- package/dist/cli/commands/auth.js +161 -0
- package/dist/cli/commands/benchmark.d.ts +10 -0
- package/dist/cli/commands/benchmark.js +88 -0
- package/dist/cli/commands/build-plan.js +95 -103
- package/dist/cli/commands/build.d.ts +1 -1
- package/dist/cli/commands/build.js +16 -15
- package/dist/cli/commands/doctor.js +3 -3
- package/dist/cli/commands/graphs.d.ts +2 -0
- package/dist/cli/commands/graphs.js +199 -0
- package/dist/cli/commands/login.js +4 -6
- package/dist/cli/commands/logout.js +1 -1
- package/dist/cli/commands/mcp.d.ts +3 -2
- package/dist/cli/commands/mcp.js +721 -204
- package/dist/cli/commands/project.d.ts +2 -0
- package/dist/cli/commands/project.js +202 -0
- package/dist/cli/commands/reset.d.ts +1 -1
- package/dist/cli/commands/reset.js +10 -10
- package/dist/cli/commands/runs.js +52 -26
- package/dist/cli/commands/runtime.d.ts +24 -0
- package/dist/cli/commands/runtime.js +373 -0
- package/dist/cli/commands/status.d.ts +1 -0
- package/dist/cli/commands/status.js +33 -22
- package/dist/cli/commands/traces.d.ts +2 -0
- package/dist/cli/commands/traces.js +125 -0
- package/dist/cli/commands/wizard.js +155 -150
- package/dist/cli/index.d.ts +7 -4
- package/dist/cli/index.js +13 -7
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/packages/build-plans/authoring/brief.d.ts +517 -0
- package/dist/packages/build-plans/authoring/brief.js +89 -0
- package/dist/packages/build-plans/authoring/build-plan-authoring.d.ts +10 -10
- package/dist/packages/build-plans/authoring/build-plan-authoring.js +66 -26
- package/dist/packages/build-plans/authoring/build-plan-edit-session.d.ts +1 -1
- package/dist/packages/build-plans/authoring/build-plan-edit-session.js +8 -2
- package/dist/packages/build-plans/authoring/build-plan-improvement.d.ts +9 -6
- package/dist/packages/build-plans/authoring/build-plan-improvement.js +39 -42
- package/dist/packages/build-plans/authoring/lib/build-plan-edit-utils.js +7 -7
- package/dist/packages/build-plans/build-plan-resolution.d.ts +1 -1
- package/dist/packages/build-plans/build-plan-resolution.js +3 -3
- package/dist/packages/build-plans/index.d.ts +1 -1
- package/dist/packages/build-plans/index.js +1 -1
- package/dist/packages/build-plans/package/build-plan-definitions.d.ts +14 -12
- package/dist/packages/build-plans/package/build-plan-definitions.js +40 -39
- package/dist/packages/build-plans/package/build-plan-helpers.d.ts +3 -2
- package/dist/packages/build-plans/package/build-plan-helpers.js +27 -13
- package/dist/packages/build-plans/package/build-plan-review-paths.d.ts +5 -5
- package/dist/packages/build-plans/package/build-plan-review-paths.js +15 -15
- package/dist/packages/build-plans/package/build-plan-stage-runner.d.ts +4 -4
- package/dist/packages/build-plans/package/build-plan-stage-runner.js +22 -11
- package/dist/packages/build-plans/package/builtin-build-plan.d.ts +5 -6
- package/dist/packages/build-plans/package/builtin-build-plan.js +7 -8
- package/dist/packages/build-plans/package/context-interface.d.ts +11 -9
- package/dist/packages/build-plans/package/context-interface.js +14 -33
- package/dist/packages/build-plans/package/interf-build-plan-package.d.ts +6 -17
- package/dist/packages/build-plans/package/interf-build-plan-package.js +56 -52
- package/dist/packages/build-plans/package/local-build-plans.d.ts +12 -10
- package/dist/packages/build-plans/package/local-build-plans.js +56 -31
- package/dist/packages/build-plans/package/user-build-plans.js +1 -1
- package/dist/packages/contracts/index.d.ts +4 -2
- package/dist/packages/contracts/index.js +2 -1
- package/dist/packages/contracts/lib/project-paths.d.ts +137 -0
- package/dist/packages/contracts/lib/project-paths.js +211 -0
- package/dist/packages/contracts/lib/project-schema.d.ts +160 -0
- package/dist/packages/contracts/lib/project-schema.js +113 -0
- package/dist/packages/contracts/lib/schema.d.ts +739 -80
- package/dist/packages/contracts/lib/schema.js +410 -75
- package/dist/packages/contracts/utils/parse.js +67 -0
- package/dist/packages/projects/index.d.ts +6 -0
- package/dist/packages/{project → projects}/index.js +0 -3
- package/dist/packages/{project → projects}/interf-detect.d.ts +12 -12
- package/dist/packages/{project → projects}/interf-detect.js +56 -50
- package/dist/packages/projects/interf.d.ts +2 -0
- package/dist/packages/projects/interf.js +1 -0
- package/dist/packages/projects/lib/schema.d.ts +79 -0
- package/dist/packages/projects/lib/schema.js +89 -0
- package/dist/packages/projects/source-config.d.ts +58 -0
- package/dist/packages/projects/source-config.js +352 -0
- package/dist/packages/projects/source-folders.d.ts +11 -0
- package/dist/packages/{project → projects}/source-folders.js +26 -26
- package/dist/packages/{engine → runtime}/action-planner.d.ts +1 -1
- package/dist/packages/{engine → runtime}/action-planner.js +20 -22
- package/dist/packages/runtime/action-values.d.ts +1 -0
- package/dist/packages/runtime/action-values.js +1 -0
- package/dist/packages/runtime/actions/errors.d.ts +2 -0
- package/dist/packages/runtime/actions/errors.js +12 -0
- package/dist/packages/runtime/actions/fields.d.ts +82 -0
- package/dist/packages/runtime/actions/form-builders.d.ts +14 -0
- package/dist/packages/runtime/actions/form-builders.js +619 -0
- package/dist/packages/runtime/actions/form-validators.d.ts +8 -0
- package/dist/packages/runtime/actions/form-validators.js +128 -0
- package/dist/packages/runtime/actions/helpers.d.ts +11 -0
- package/dist/packages/runtime/actions/helpers.js +80 -0
- package/dist/packages/runtime/actions/index.d.ts +8 -0
- package/dist/packages/runtime/actions/index.js +11 -0
- package/dist/packages/runtime/actions/registry.d.ts +64 -0
- package/dist/packages/runtime/actions/registry.js +62 -0
- package/dist/packages/runtime/actions/requests.d.ts +45 -0
- package/dist/packages/runtime/actions/requests.js +158 -0
- package/dist/packages/runtime/actions/schemas.d.ts +154 -0
- package/dist/packages/runtime/actions/schemas.js +36 -0
- package/dist/packages/runtime/agent-handoff.d.ts +11 -0
- package/dist/packages/runtime/agent-handoff.js +101 -0
- package/dist/packages/{engine → runtime}/agents/index.d.ts +1 -2
- package/dist/packages/{engine → runtime}/agents/index.js +1 -2
- package/dist/packages/runtime/agents/lib/args.d.ts +14 -0
- package/dist/packages/runtime/agents/lib/args.js +24 -0
- package/dist/packages/{engine → runtime}/agents/lib/constants.d.ts +4 -1
- package/dist/packages/runtime/agents/lib/constants.js +13 -0
- package/dist/packages/runtime/agents/lib/context-graph-bootstrap.d.ts +3 -0
- package/dist/packages/{engine/agents/lib/verifiable-context-bootstrap.js → runtime/agents/lib/context-graph-bootstrap.js} +5 -6
- package/dist/packages/{engine → runtime}/agents/lib/detection.d.ts +5 -0
- package/dist/packages/{engine → runtime}/agents/lib/detection.js +16 -7
- package/dist/packages/{engine → runtime}/agents/lib/execution-profile.js +8 -14
- package/dist/packages/{engine → runtime}/agents/lib/execution.js +14 -4
- package/dist/packages/{engine → runtime}/agents/lib/preflight.js +15 -13
- package/dist/packages/{engine → runtime}/agents/lib/render.js +4 -4
- package/dist/packages/runtime/agents/lib/shell-fs.d.ts +18 -0
- package/dist/packages/runtime/agents/lib/shell-fs.js +190 -0
- package/dist/packages/runtime/agents/lib/shell-paths.d.ts +16 -0
- package/dist/packages/runtime/agents/lib/shell-paths.js +63 -0
- package/dist/packages/runtime/agents/lib/shell-projection.d.ts +25 -0
- package/dist/packages/runtime/agents/lib/shell-projection.js +314 -0
- package/dist/packages/runtime/agents/lib/shell-templates.d.ts +30 -0
- package/dist/packages/runtime/agents/lib/shell-templates.js +452 -0
- package/dist/packages/runtime/agents/lib/shell-workspace.d.ts +17 -0
- package/dist/packages/runtime/agents/lib/shell-workspace.js +70 -0
- package/dist/packages/runtime/agents/lib/shells.d.ts +63 -0
- package/dist/packages/runtime/agents/lib/shells.js +383 -0
- package/dist/packages/{engine → runtime}/agents/lib/user-config.d.ts +8 -2
- package/dist/packages/{engine → runtime}/agents/lib/user-config.js +8 -2
- package/dist/packages/runtime/agents/providers/claude-code.d.ts +13 -0
- package/dist/packages/runtime/agents/providers/claude-code.js +45 -0
- package/dist/packages/runtime/agents/providers/codex.d.ts +17 -0
- package/dist/packages/runtime/agents/providers/codex.js +64 -0
- package/dist/packages/runtime/agents/providers/cursor.d.ts +9 -0
- package/dist/packages/runtime/agents/providers/cursor.js +24 -0
- package/dist/packages/runtime/agents/providers/index.d.ts +9 -0
- package/dist/packages/runtime/agents/providers/index.js +31 -0
- package/dist/packages/runtime/agents/providers/types.d.ts +50 -0
- package/dist/packages/{engine → runtime}/agents/registry.d.ts +13 -2
- package/dist/packages/{engine → runtime}/agents/registry.js +48 -10
- package/dist/packages/{engine → runtime}/agents/role-executors.d.ts +1 -1
- package/dist/packages/{engine → runtime}/agents/role-executors.js +7 -6
- package/dist/packages/{engine → runtime}/agents/role-router.js +7 -5
- package/dist/packages/runtime/auth/account-context.d.ts +52 -0
- package/dist/packages/runtime/auth/account-context.js +68 -0
- package/dist/packages/runtime/auth/auth-flow.d.ts +73 -0
- package/dist/packages/runtime/auth/auth-flow.js +189 -0
- package/dist/packages/runtime/auth/jwt-validator.d.ts +58 -0
- package/dist/packages/runtime/auth/jwt-validator.js +86 -0
- package/dist/packages/runtime/auth/keychain.d.ts +35 -0
- package/dist/packages/runtime/auth/keychain.js +85 -0
- package/dist/packages/runtime/auth/session-store.d.ts +38 -0
- package/dist/packages/runtime/auth/session-store.js +88 -0
- package/dist/packages/runtime/auth/workos-client.d.ts +58 -0
- package/dist/packages/runtime/auth/workos-client.js +87 -0
- package/dist/packages/runtime/benchmark-question-draft.d.ts +20 -0
- package/dist/packages/runtime/benchmark-question-draft.js +124 -0
- package/dist/packages/runtime/build/artifact-counts.d.ts +1 -0
- package/dist/packages/{engine → runtime}/build/artifact-counts.js +5 -9
- package/dist/packages/{engine → runtime}/build/artifact-status.d.ts +5 -5
- package/dist/packages/{engine → runtime}/build/artifact-status.js +25 -23
- package/dist/packages/runtime/build/atomic-fs.d.ts +3 -0
- package/dist/packages/runtime/build/atomic-fs.js +95 -0
- package/dist/packages/runtime/build/billing-events.d.ts +78 -0
- package/dist/packages/{engine → runtime}/build/billing-events.js +17 -19
- package/dist/packages/runtime/build/build-evidence.d.ts +15 -0
- package/dist/packages/runtime/build/build-evidence.js +173 -0
- package/dist/packages/{engine → runtime}/build/build-pipeline.d.ts +12 -8
- package/dist/packages/runtime/build/build-pipeline.js +304 -0
- package/dist/packages/{engine → runtime}/build/build-plan-primitives.d.ts +1 -1
- package/dist/packages/{engine → runtime}/build/build-plan-primitives.js +0 -1
- package/dist/packages/runtime/build/build-plan-runs.d.ts +14 -0
- package/dist/packages/runtime/build/build-plan-runs.js +31 -0
- package/dist/packages/runtime/build/build-stage-plan.d.ts +16 -0
- package/dist/packages/{engine → runtime}/build/build-stage-plan.js +28 -29
- package/dist/packages/{engine → runtime}/build/build-stage-runner.d.ts +2 -1
- package/dist/packages/runtime/build/build-stage-runner.js +165 -0
- package/dist/packages/{engine → runtime}/build/build-target.d.ts +4 -4
- package/dist/packages/runtime/build/build-target.js +16 -0
- package/dist/packages/{engine → runtime}/build/check-evaluator.d.ts +14 -16
- package/dist/packages/runtime/build/check-evaluator.js +575 -0
- package/dist/packages/runtime/build/context-graph-paths.d.ts +51 -0
- package/dist/packages/runtime/build/context-graph-paths.js +133 -0
- package/dist/packages/runtime/build/context-graph-schema.d.ts +19 -0
- package/dist/packages/runtime/build/context-graph-schema.js +39 -0
- package/dist/packages/{engine → runtime}/build/discovery.d.ts +2 -2
- package/dist/packages/{engine → runtime}/build/discovery.js +4 -4
- package/dist/packages/{engine → runtime}/build/index.d.ts +5 -3
- package/dist/packages/{engine → runtime}/build/index.js +5 -3
- package/dist/packages/{engine → runtime}/build/lib/schema.d.ts +221 -88
- package/dist/packages/{engine → runtime}/build/lib/schema.js +61 -41
- package/dist/packages/runtime/build/reset.d.ts +2 -0
- package/dist/packages/runtime/build/reset.js +62 -0
- package/dist/packages/{engine → runtime}/build/runtime-contracts.js +5 -5
- package/dist/packages/runtime/build/runtime-inventory.d.ts +7 -0
- package/dist/packages/{engine → runtime}/build/runtime-inventory.js +3 -3
- package/dist/packages/{engine → runtime}/build/runtime-paths.js +6 -6
- package/dist/packages/{engine → runtime}/build/runtime-prompt.js +7 -6
- package/dist/packages/{engine → runtime}/build/runtime-reconcile.d.ts +1 -1
- package/dist/packages/{engine → runtime}/build/runtime-reconcile.js +25 -21
- package/dist/packages/runtime/build/runtime-runs.d.ts +10 -0
- package/dist/packages/runtime/build/runtime-runs.js +265 -0
- package/dist/packages/{engine → runtime}/build/runtime-types.d.ts +6 -6
- package/dist/packages/runtime/build/runtime-types.js +1 -0
- package/dist/packages/runtime/build/runtime.d.ts +6 -0
- package/dist/packages/runtime/build/runtime.js +5 -0
- package/dist/packages/runtime/build/source-files.d.ts +58 -0
- package/dist/packages/runtime/build/source-files.js +184 -0
- package/dist/packages/runtime/build/source-inventory.d.ts +27 -0
- package/dist/packages/runtime/build/source-inventory.js +273 -0
- package/dist/packages/runtime/build/source-manifest.d.ts +52 -0
- package/dist/packages/runtime/build/source-manifest.js +192 -0
- package/dist/packages/runtime/build/stage-evidence.d.ts +22 -0
- package/dist/packages/runtime/build/stage-evidence.js +317 -0
- package/dist/packages/runtime/build/stage-reuse.d.ts +11 -0
- package/dist/packages/runtime/build/stage-reuse.js +142 -0
- package/dist/packages/runtime/build/state-artifacts.d.ts +9 -0
- package/dist/packages/runtime/build/state-artifacts.js +14 -0
- package/dist/packages/runtime/build/state-health.d.ts +4 -0
- package/dist/packages/{engine → runtime}/build/state-health.js +21 -26
- package/dist/packages/runtime/build/state-io.d.ts +12 -0
- package/dist/packages/runtime/build/state-io.js +119 -0
- package/dist/packages/{engine → runtime}/build/state-paths.d.ts +3 -1
- package/dist/packages/runtime/build/state-paths.js +22 -0
- package/dist/packages/runtime/build/state-view.d.ts +5 -0
- package/dist/packages/{engine → runtime}/build/state-view.js +60 -33
- package/dist/packages/runtime/build/state.d.ts +7 -0
- package/dist/packages/runtime/build/state.js +12 -0
- package/dist/packages/runtime/build/traces.d.ts +30 -0
- package/dist/packages/runtime/build/traces.js +133 -0
- package/dist/packages/{engine/build/validate-verifiable-context.d.ts → runtime/build/validate-context-graph.d.ts} +6 -6
- package/dist/packages/{engine/build/validate-verifiable-context.js → runtime/build/validate-context-graph.js} +48 -35
- package/dist/packages/{engine → runtime}/build/validate.d.ts +5 -5
- package/dist/packages/{engine → runtime}/build/validate.js +26 -26
- package/dist/packages/{engine → runtime}/client.d.ts +15 -15
- package/dist/packages/{engine → runtime}/client.js +41 -24
- package/dist/packages/{engine → runtime}/connection-config.d.ts +3 -2
- package/dist/packages/{engine → runtime}/connection-config.js +9 -8
- package/dist/packages/runtime/context-checks.d.ts +10 -0
- package/dist/packages/runtime/context-checks.js +114 -0
- package/dist/packages/runtime/context-graph-scaffold.d.ts +9 -0
- package/dist/packages/runtime/context-graph-scaffold.js +134 -0
- package/dist/packages/runtime/entitlement-guard.d.ts +43 -0
- package/dist/packages/runtime/entitlement-guard.js +70 -0
- package/dist/packages/{engine → runtime}/execution/index.d.ts +2 -2
- package/dist/packages/{engine → runtime}/execution/index.js +1 -1
- package/dist/packages/{engine → runtime}/execution/lib/schema.d.ts +270 -192
- package/dist/packages/{engine → runtime}/execution/lib/schema.js +35 -32
- package/dist/packages/runtime/index.d.ts +29 -0
- package/dist/packages/runtime/index.js +21 -0
- package/dist/packages/runtime/instance-paths.d.ts +30 -0
- package/dist/packages/runtime/instance-paths.js +29 -0
- package/dist/packages/{engine → runtime}/native-run-handlers.d.ts +4 -4
- package/dist/packages/{engine → runtime}/native-run-handlers.js +184 -152
- package/dist/packages/runtime/plan-artifact-contract.d.ts +17 -0
- package/dist/packages/runtime/plan-artifact-contract.js +42 -0
- package/dist/packages/runtime/project-entries.d.ts +11 -0
- package/dist/packages/runtime/project-entries.js +49 -0
- package/dist/packages/runtime/project-source-state.d.ts +26 -0
- package/dist/packages/runtime/project-source-state.js +53 -0
- package/dist/packages/runtime/project-store.d.ts +85 -0
- package/dist/packages/runtime/project-store.js +168 -0
- package/dist/packages/runtime/requested-artifacts.d.ts +7 -0
- package/dist/packages/{engine → runtime}/requested-artifacts.js +23 -1
- package/dist/packages/{engine → runtime}/run-observability.d.ts +2 -1
- package/dist/packages/{engine → runtime}/run-observability.js +166 -84
- package/dist/packages/runtime/runtime-action-proposals.d.ts +7 -0
- package/dist/packages/runtime/runtime-action-proposals.js +542 -0
- package/dist/packages/runtime/runtime-build-plans.d.ts +5 -0
- package/dist/packages/runtime/runtime-build-plans.js +131 -0
- package/dist/packages/runtime/runtime-build-runs.d.ts +47 -0
- package/dist/packages/runtime/runtime-build-runs.js +562 -0
- package/dist/packages/runtime/runtime-caches.d.ts +91 -0
- package/dist/packages/{engine → runtime}/runtime-caches.js +77 -49
- package/dist/packages/{engine → runtime}/runtime-event-applier.d.ts +3 -1
- package/dist/packages/{engine → runtime}/runtime-event-applier.js +53 -17
- package/dist/packages/runtime/runtime-executor.d.ts +22 -0
- package/dist/packages/runtime/runtime-executor.js +131 -0
- package/dist/packages/runtime/runtime-jobs.d.ts +13 -0
- package/dist/packages/runtime/runtime-jobs.js +463 -0
- package/dist/packages/runtime/runtime-observability.d.ts +11 -0
- package/dist/packages/runtime/runtime-observability.js +39 -0
- package/dist/packages/{engine → runtime}/runtime-persistence.d.ts +9 -18
- package/dist/packages/{engine → runtime}/runtime-persistence.js +25 -25
- package/dist/packages/runtime/runtime-project-mutations.d.ts +7 -0
- package/dist/packages/runtime/runtime-project-mutations.js +64 -0
- package/dist/packages/runtime/runtime-project-reads.d.ts +15 -0
- package/dist/packages/runtime/runtime-project-reads.js +381 -0
- package/dist/packages/runtime/runtime-proposal-helpers.d.ts +22 -0
- package/dist/packages/runtime/runtime-proposal-helpers.js +223 -0
- package/dist/packages/{engine → runtime}/runtime-resource-builders.d.ts +21 -16
- package/dist/packages/{engine → runtime}/runtime-resource-builders.js +48 -38
- package/dist/packages/runtime/runtime-verify-runs.d.ts +84 -0
- package/dist/packages/runtime/runtime-verify-runs.js +295 -0
- package/dist/packages/runtime/runtime.d.ts +1165 -0
- package/dist/packages/runtime/runtime.js +417 -0
- package/dist/packages/runtime/schemas/actions.d.ts +1182 -0
- package/dist/packages/runtime/schemas/actions.js +117 -0
- package/dist/packages/runtime/schemas/agents.d.ts +76 -0
- package/dist/packages/runtime/schemas/agents.js +41 -0
- package/dist/packages/runtime/schemas/build-plans.d.ts +959 -0
- package/dist/packages/runtime/schemas/build-plans.js +107 -0
- package/dist/packages/runtime/schemas/files.d.ts +567 -0
- package/dist/packages/runtime/schemas/files.js +51 -0
- package/dist/packages/runtime/schemas/index.d.ts +8 -0
- package/dist/packages/runtime/schemas/index.js +12 -0
- package/dist/packages/runtime/schemas/instance.d.ts +141 -0
- package/dist/packages/runtime/schemas/instance.js +143 -0
- package/dist/packages/runtime/schemas/jobs.d.ts +339 -0
- package/dist/packages/runtime/schemas/jobs.js +103 -0
- package/dist/packages/runtime/schemas/projects.d.ts +339 -0
- package/dist/packages/runtime/schemas/projects.js +136 -0
- package/dist/packages/runtime/schemas/runs.d.ts +2676 -0
- package/dist/packages/runtime/schemas/runs.js +98 -0
- package/dist/packages/runtime/service/index.d.ts +3 -0
- package/dist/packages/runtime/service/index.js +3 -0
- package/dist/packages/runtime/service/openapi.d.ts +7 -0
- package/dist/packages/runtime/service/openapi.js +117 -0
- package/dist/packages/runtime/service/operations.d.ts +1490 -0
- package/dist/packages/runtime/service/operations.js +245 -0
- package/dist/packages/runtime/service/routes.d.ts +106 -0
- package/dist/packages/runtime/service/routes.js +120 -0
- package/dist/packages/runtime/service/server-api-files.d.ts +10 -0
- package/dist/packages/runtime/service/server-api-files.js +85 -0
- package/dist/packages/runtime/service/server-app-boot.d.ts +4 -0
- package/dist/packages/runtime/service/server-app-boot.js +46 -0
- package/dist/packages/runtime/service/server-guards.d.ts +63 -0
- package/dist/packages/runtime/service/server-guards.js +181 -0
- package/dist/packages/runtime/service/server-helpers.d.ts +27 -0
- package/dist/packages/runtime/service/server-helpers.js +89 -0
- package/dist/packages/runtime/service/server-instance-helpers.d.ts +30 -0
- package/dist/packages/runtime/service/server-instance-helpers.js +114 -0
- package/dist/packages/runtime/service/server-routes-action-proposals.d.ts +3 -0
- package/dist/packages/runtime/service/server-routes-action-proposals.js +43 -0
- package/dist/packages/runtime/service/server-routes-agents.d.ts +4 -0
- package/dist/packages/runtime/service/server-routes-agents.js +198 -0
- package/dist/packages/runtime/service/server-routes-auth.d.ts +33 -0
- package/dist/packages/runtime/service/server-routes-auth.js +138 -0
- package/dist/packages/runtime/service/server-routes-build-plans.d.ts +3 -0
- package/dist/packages/runtime/service/server-routes-build-plans.js +83 -0
- package/dist/packages/runtime/service/server-routes-discovery.d.ts +4 -0
- package/dist/packages/runtime/service/server-routes-discovery.js +196 -0
- package/dist/packages/runtime/service/server-routes-events.d.ts +5 -0
- package/dist/packages/runtime/service/server-routes-events.js +99 -0
- package/dist/packages/runtime/service/server-routes-project-context.d.ts +9 -0
- package/dist/packages/runtime/service/server-routes-project-context.js +192 -0
- package/dist/packages/runtime/service/server-routes-project-jobs.d.ts +9 -0
- package/dist/packages/runtime/service/server-routes-project-jobs.js +130 -0
- package/dist/packages/runtime/service/server-routes-project-runs.d.ts +14 -0
- package/dist/packages/runtime/service/server-routes-project-runs.js +85 -0
- package/dist/packages/runtime/service/server-routes-projects.d.ts +4 -0
- package/dist/packages/runtime/service/server-routes-projects.js +92 -0
- package/dist/packages/runtime/service/server-routes-runs.d.ts +3 -0
- package/dist/packages/runtime/service/server-routes-runs.js +112 -0
- package/dist/packages/runtime/service/server.d.ts +37 -0
- package/dist/packages/runtime/service/server.js +300 -0
- package/dist/packages/{engine → runtime/service}/service-registry.d.ts +5 -5
- package/dist/packages/{engine → runtime/service}/service-registry.js +7 -7
- package/dist/packages/runtime/verify/benchmark-run.d.ts +81 -0
- package/dist/packages/runtime/verify/benchmark-run.js +303 -0
- package/dist/packages/{engine → runtime}/verify/index.d.ts +2 -2
- package/dist/packages/{engine → runtime}/verify/index.js +1 -1
- package/dist/packages/{engine → runtime}/verify/lib/schema.d.ts +83 -16
- package/dist/packages/{engine → runtime}/verify/lib/schema.js +26 -18
- package/dist/packages/{engine → runtime}/verify/verify-execution.js +11 -11
- package/dist/packages/{engine → runtime}/verify/verify-paths.d.ts +4 -4
- package/dist/packages/runtime/verify/verify-paths.js +61 -0
- package/dist/packages/{engine → runtime}/verify/verify-sandbox.d.ts +1 -1
- package/dist/packages/runtime/verify/verify-sandbox.js +88 -0
- package/dist/packages/{engine → runtime}/verify/verify-specs.d.ts +2 -0
- package/dist/packages/{engine → runtime}/verify/verify-specs.js +5 -3
- package/dist/packages/runtime/verify/verify-targets.d.ts +5 -0
- package/dist/packages/{engine → runtime}/verify/verify-targets.js +12 -12
- package/dist/packages/runtime/verify/verify-types.js +1 -0
- package/dist/packages/{engine → runtime}/verify/verify.d.ts +1 -1
- package/dist/packages/{engine → runtime}/verify/verify.js +1 -1
- package/dist/packages/runtime/wire-schemas.d.ts +18 -0
- package/dist/packages/runtime/wire-schemas.js +27 -0
- package/package.json +40 -30
- package/public-repo/CONTRIBUTING.md +7 -16
- package/public-repo/README.md +175 -234
- package/public-repo/SECURITY.md +3 -4
- package/public-repo/build-plans/interf-default/README.md +19 -14
- package/public-repo/build-plans/interf-default/build/stages/shape/SKILL.md +18 -11
- package/public-repo/build-plans/interf-default/build/stages/structure/SKILL.md +12 -5
- package/public-repo/build-plans/interf-default/build/stages/summarize/SKILL.md +16 -4
- package/public-repo/build-plans/interf-default/build-plan.json +34 -28
- package/public-repo/build-plans/interf-default/build-plan.schema.json +54 -32
- package/public-repo/build-plans/interf-default/improve/SKILL.md +3 -3
- package/public-repo/build-plans/interf-default/use/query/SKILL.md +17 -11
- package/public-repo/openapi/local-service.openapi.json +6803 -0
- package/public-repo/skills/interf/SKILL.md +460 -179
- package/dist/cli/commands/prep.d.ts +0 -2
- package/dist/cli/commands/prep.js +0 -240
- package/dist/cli/commands/test.d.ts +0 -10
- package/dist/cli/commands/test.js +0 -85
- package/dist/cli/commands/web.d.ts +0 -2
- package/dist/cli/commands/web.js +0 -286
- package/dist/interf-ui/404.html +0 -1
- package/dist/interf-ui/__next.__PAGE__.txt +0 -10
- package/dist/interf-ui/__next._full.txt +0 -20
- package/dist/interf-ui/__next._head.txt +0 -5
- package/dist/interf-ui/__next._index.txt +0 -5
- package/dist/interf-ui/__next._tree.txt +0 -5
- package/dist/interf-ui/_next/static/_qJKnA0dammQ306MG_zMq/_buildManifest.js +0 -11
- package/dist/interf-ui/_next/static/_qJKnA0dammQ306MG_zMq/_clientMiddlewareManifest.js +0 -1
- package/dist/interf-ui/_next/static/_qJKnA0dammQ306MG_zMq/_ssgManifest.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0.tjb6f4golw..css +0 -3
- package/dist/interf-ui/_next/static/chunks/03~yq9q893hmn.js +0 -1
- package/dist/interf-ui/_next/static/chunks/085-n_jv2ng_q.css +0 -1
- package/dist/interf-ui/_next/static/chunks/0dn41fa_zvgsl.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0g-ea0zj5d-0k.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0gwqglc4iz583.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0haldgm65ve6l.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0nv3am99vjzn4.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0s77gt_o4jwtx.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0y5z3t-z1c8ks.js.map +0 -5
- package/dist/interf-ui/_next/static/chunks/0~a36ujuzpaz..js +0 -116
- package/dist/interf-ui/_next/static/chunks/10jeodxe4nkgj.js +0 -31
- package/dist/interf-ui/_next/static/chunks/119h2rouych2t.js +0 -1
- package/dist/interf-ui/_next/static/chunks/13c8b~m8knjsf.js +0 -1
- package/dist/interf-ui/_next/static/chunks/14dznb2qpt-ho.js +0 -91
- package/dist/interf-ui/_next/static/chunks/15z_en80lrq-3.js +0 -5
- package/dist/interf-ui/_next/static/chunks/turbopack-0p.pvcjrtq-jh.js +0 -1
- package/dist/interf-ui/_next/static/chunks/turbopack-0usj_75.8frlw.js +0 -1
- package/dist/interf-ui/_next/static/chunks/turbopack-worker-0sjn--fhq~1cg.js +0 -1
- package/dist/interf-ui/_next/static/media/GeistMono_Variable.p.17jn9btb_52pq.woff2 +0 -0
- package/dist/interf-ui/_next/static/media/Geist_Variable-s.p.0-te~ja_gpvcf.woff2 +0 -0
- package/dist/interf-ui/_next/static/media/worker.102zas1s52_pf.js +0 -109
- package/dist/interf-ui/_not-found/__next._full.txt +0 -15
- package/dist/interf-ui/_not-found/__next._head.txt +0 -5
- package/dist/interf-ui/_not-found/__next._index.txt +0 -5
- package/dist/interf-ui/_not-found/__next._not-found.__PAGE__.txt +0 -5
- package/dist/interf-ui/_not-found/__next._not-found.txt +0 -5
- package/dist/interf-ui/_not-found/__next._tree.txt +0 -2
- package/dist/interf-ui/_not-found.html +0 -1
- package/dist/interf-ui/_not-found.txt +0 -15
- package/dist/interf-ui/index.html +0 -1
- package/dist/interf-ui/index.txt +0 -20
- package/dist/packages/contracts/lib/preparation-paths.d.ts +0 -117
- package/dist/packages/contracts/lib/preparation-paths.js +0 -177
- package/dist/packages/engine/action-definitions.d.ts +0 -407
- package/dist/packages/engine/action-definitions.js +0 -1158
- package/dist/packages/engine/action-values.d.ts +0 -1
- package/dist/packages/engine/action-values.js +0 -1
- package/dist/packages/engine/agents/lib/args.d.ts +0 -4
- package/dist/packages/engine/agents/lib/args.js +0 -52
- package/dist/packages/engine/agents/lib/chart-guidance.d.ts +0 -1
- package/dist/packages/engine/agents/lib/chart-guidance.js +0 -8
- package/dist/packages/engine/agents/lib/constants.js +0 -28
- package/dist/packages/engine/agents/lib/schema.d.ts +0 -8
- package/dist/packages/engine/agents/lib/schema.js +0 -7
- package/dist/packages/engine/agents/lib/shells.d.ts +0 -74
- package/dist/packages/engine/agents/lib/shells.js +0 -1052
- package/dist/packages/engine/agents/lib/verifiable-context-bootstrap.d.ts +0 -3
- package/dist/packages/engine/build/artifact-counts.d.ts +0 -1
- package/dist/packages/engine/build/billing-events.d.ts +0 -89
- package/dist/packages/engine/build/build-pipeline.js +0 -175
- package/dist/packages/engine/build/build-plan-runs.d.ts +0 -14
- package/dist/packages/engine/build/build-plan-runs.js +0 -31
- package/dist/packages/engine/build/build-stage-plan.d.ts +0 -16
- package/dist/packages/engine/build/build-stage-runner.js +0 -94
- package/dist/packages/engine/build/build-target.js +0 -16
- package/dist/packages/engine/build/check-evaluator.js +0 -298
- package/dist/packages/engine/build/reset.d.ts +0 -2
- package/dist/packages/engine/build/reset.js +0 -74
- package/dist/packages/engine/build/runtime-inventory.d.ts +0 -7
- package/dist/packages/engine/build/runtime-runs.d.ts +0 -10
- package/dist/packages/engine/build/runtime-runs.js +0 -224
- package/dist/packages/engine/build/runtime.d.ts +0 -5
- package/dist/packages/engine/build/runtime.js +0 -4
- package/dist/packages/engine/build/source-files.d.ts +0 -46
- package/dist/packages/engine/build/source-files.js +0 -149
- package/dist/packages/engine/build/state-artifacts.d.ts +0 -9
- package/dist/packages/engine/build/state-artifacts.js +0 -14
- package/dist/packages/engine/build/state-health.d.ts +0 -4
- package/dist/packages/engine/build/state-io.d.ts +0 -11
- package/dist/packages/engine/build/state-io.js +0 -82
- package/dist/packages/engine/build/state-paths.js +0 -16
- package/dist/packages/engine/build/state-view.d.ts +0 -5
- package/dist/packages/engine/build/state.d.ts +0 -7
- package/dist/packages/engine/build/state.js +0 -12
- package/dist/packages/engine/build/validate-helpers.d.ts +0 -12
- package/dist/packages/engine/build/validate-helpers.js +0 -41
- package/dist/packages/engine/build/verifiable-context-paths.d.ts +0 -47
- package/dist/packages/engine/build/verifiable-context-paths.js +0 -121
- package/dist/packages/engine/build/verifiable-context-schema.d.ts +0 -21
- package/dist/packages/engine/build/verifiable-context-schema.js +0 -126
- package/dist/packages/engine/cloud-seams.d.ts +0 -115
- package/dist/packages/engine/cloud-seams.js +0 -84
- package/dist/packages/engine/index.d.ts +0 -22
- package/dist/packages/engine/index.js +0 -15
- package/dist/packages/engine/instance-paths.d.ts +0 -106
- package/dist/packages/engine/instance-paths.js +0 -171
- package/dist/packages/engine/lib/schema.d.ts +0 -6304
- package/dist/packages/engine/lib/schema.js +0 -730
- package/dist/packages/engine/preparation-store.d.ts +0 -105
- package/dist/packages/engine/preparation-store.js +0 -213
- package/dist/packages/engine/readiness-check-draft.d.ts +0 -20
- package/dist/packages/engine/readiness-check-draft.js +0 -111
- package/dist/packages/engine/requested-artifacts.d.ts +0 -5
- package/dist/packages/engine/routes.d.ts +0 -85
- package/dist/packages/engine/routes.js +0 -99
- package/dist/packages/engine/runtime-caches.d.ts +0 -76
- package/dist/packages/engine/runtime-proposal-helpers.d.ts +0 -35
- package/dist/packages/engine/runtime-proposal-helpers.js +0 -247
- package/dist/packages/engine/runtime.d.ts +0 -371
- package/dist/packages/engine/runtime.js +0 -2463
- package/dist/packages/engine/server.d.ts +0 -58
- package/dist/packages/engine/server.js +0 -1399
- package/dist/packages/engine/verify/readiness-check-run.d.ts +0 -82
- package/dist/packages/engine/verify/readiness-check-run.js +0 -265
- package/dist/packages/engine/verify/verify-paths.js +0 -61
- package/dist/packages/engine/verify/verify-sandbox.js +0 -88
- package/dist/packages/engine/verify/verify-targets.d.ts +0 -5
- package/dist/packages/engine/wire-schemas.d.ts +0 -547
- package/dist/packages/engine/wire-schemas.js +0 -59
- package/dist/packages/project/index.d.ts +0 -9
- package/dist/packages/project/interf-bootstrap.d.ts +0 -1
- package/dist/packages/project/interf-bootstrap.js +0 -1
- package/dist/packages/project/interf-scaffold.d.ts +0 -3
- package/dist/packages/project/interf-scaffold.js +0 -136
- package/dist/packages/project/interf.d.ts +0 -4
- package/dist/packages/project/interf.js +0 -3
- package/dist/packages/project/lib/schema.d.ts +0 -328
- package/dist/packages/project/lib/schema.js +0 -136
- package/dist/packages/project/preparation-entries.d.ts +0 -11
- package/dist/packages/project/preparation-entries.js +0 -49
- package/dist/packages/project/source-config.d.ts +0 -46
- package/dist/packages/project/source-config.js +0 -394
- package/dist/packages/project/source-folders.d.ts +0 -11
- package/public-repo/plugins/README.md +0 -9
- package/public-repo/plugins/interf/.claude-plugin/plugin.json +0 -21
- package/public-repo/plugins/interf/.mcp.json +0 -12
- package/public-repo/plugins/interf/README.md +0 -32
- package/public-repo/plugins/interf/skills/interf/SKILL.md +0 -376
- /package/dist/packages/{engine/agents/lib/types.js → runtime/actions/fields.js} +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/agents.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/agents.js +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/execution-profile.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/execution.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/executors.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/executors.js +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/logs.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/logs.js +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/preflight.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/render.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/status.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/status.js +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/types.d.ts +0 -0
- /package/dist/packages/{engine/build/runtime-types.js → runtime/agents/lib/types.js} +0 -0
- /package/dist/packages/{engine/verify/verify-types.js → runtime/agents/providers/types.js} +0 -0
- /package/dist/packages/{engine → runtime}/agents/role-router.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/build/build-execution.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/build/build-execution.js +0 -0
- /package/dist/packages/{engine → runtime}/build/runtime-contracts.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/build/runtime-paths.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/build/runtime-prompt.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/execution/adapters.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/execution/adapters.js +0 -0
- /package/dist/packages/{engine → runtime}/execution/events.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/execution/events.js +0 -0
- /package/dist/packages/{engine → runtime}/verify/verify-execution.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/verify/verify-profile-presets.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/verify/verify-profile-presets.js +0 -0
- /package/dist/packages/{engine → runtime}/verify/verify-types.d.ts +0 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
4
|
+
import { refreshContextGraphBootstrapGuidance } from "../runtime/agents/lib/context-graph-bootstrap.js";
|
|
5
|
+
import { readInterfConfig, } from "./interf.js";
|
|
6
|
+
import { seedContextGraphBuildPlanPackage } from "../build-plans/package/interf-build-plan-package.js";
|
|
7
|
+
import { readJsonFileWithSchema } from "../contracts/utils/parse.js";
|
|
8
|
+
import { getBuildPlan } from "../build-plans/package/build-plan-definitions.js";
|
|
9
|
+
import { DEFAULT_BUILD_PLAN_ID, buildPlanIdForProjectConfig, } from "../build-plans/build-plan-resolution.js";
|
|
10
|
+
import { SourceFolderConfigSchema, } from "./lib/schema.js";
|
|
11
|
+
import { listTestSpecs, writeTestSpec, } from "../runtime/verify/verify-specs.js";
|
|
12
|
+
import { slugify } from "../contracts/utils/naming.js";
|
|
13
|
+
import { assertPathWithinRoot, isPathWithinRoot } from "../contracts/utils/path-guards.js";
|
|
14
|
+
import { defaultControlPathForContextGraph, resolveSourceControlPathForContextGraph, contextGraphInterfConfigPath, contextGraphInterfRoot, } from "../runtime/build/context-graph-paths.js";
|
|
15
|
+
import { asProjectDataDir, projectConfigPath, PROJECT_CONFIG_FILENAME, } from "../contracts/lib/project-paths.js";
|
|
16
|
+
export const SOURCE_FOLDER_CONFIG_PATH = PROJECT_CONFIG_FILENAME;
|
|
17
|
+
export function sourceFolderConfigPath(projectDataDir) {
|
|
18
|
+
return projectConfigPath(asProjectDataDir(projectDataDir));
|
|
19
|
+
}
|
|
20
|
+
function readSourceFolderConfigFile(filePath) {
|
|
21
|
+
return readJsonFileWithSchema(filePath, "Source folder config", SourceFolderConfigSchema);
|
|
22
|
+
}
|
|
23
|
+
function normalizeBenchmarkChecks(cases) {
|
|
24
|
+
const seen = new Set();
|
|
25
|
+
return cases.map((caseSpec, index) => {
|
|
26
|
+
const baseId = slugify(caseSpec.id ?? caseSpec.question) || `check-${index + 1}`;
|
|
27
|
+
let id = baseId;
|
|
28
|
+
let suffix = 2;
|
|
29
|
+
while (seen.has(id)) {
|
|
30
|
+
id = `${baseId}-${suffix}`;
|
|
31
|
+
suffix += 1;
|
|
32
|
+
}
|
|
33
|
+
seen.add(id);
|
|
34
|
+
return {
|
|
35
|
+
id,
|
|
36
|
+
question: caseSpec.question.trim(),
|
|
37
|
+
...(caseSpec.answer ? { answer: caseSpec.answer.trim() } : {}),
|
|
38
|
+
...(caseSpec.strictness ? { strictness: caseSpec.strictness.trim() } : {}),
|
|
39
|
+
...(caseSpec.expect ? { expect: caseSpec.expect } : {}),
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export function fingerprintBenchmarkChecks(checks) {
|
|
44
|
+
const normalized = checks.map((check) => ({
|
|
45
|
+
question: check.question.trim(),
|
|
46
|
+
...(check.answer ? { answer: check.answer.trim() } : {}),
|
|
47
|
+
...(check.strictness ? { strictness: check.strictness.trim() } : {}),
|
|
48
|
+
...(check.expect ? { expect: check.expect } : {}),
|
|
49
|
+
}));
|
|
50
|
+
return createHash("sha256")
|
|
51
|
+
.update(JSON.stringify(normalized))
|
|
52
|
+
.digest("hex")
|
|
53
|
+
.slice(0, 16);
|
|
54
|
+
}
|
|
55
|
+
export function loadSourceFolderConfig(projectDataDir) {
|
|
56
|
+
const filePath = sourceFolderConfigPath(projectDataDir);
|
|
57
|
+
if (!existsSync(filePath))
|
|
58
|
+
return null;
|
|
59
|
+
return readSourceFolderConfigFile(filePath);
|
|
60
|
+
}
|
|
61
|
+
export { DEFAULT_BUILD_PLAN_ID, buildPlanIdForProjectConfig } from "../build-plans/build-plan-resolution.js";
|
|
62
|
+
function normalizeProjectConfig(projectConfig) {
|
|
63
|
+
const buildPlan = buildPlanIdForProjectConfig(projectConfig);
|
|
64
|
+
return {
|
|
65
|
+
...projectConfig,
|
|
66
|
+
...(buildPlan ? { build_plan: buildPlan } : {}),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export function listProjectConfigs(config) {
|
|
70
|
+
return (config?.projects ?? []).map((project) => normalizeProjectConfig(project));
|
|
71
|
+
}
|
|
72
|
+
export function resolveBuildMaxAttempts(override = null) {
|
|
73
|
+
if (override == null)
|
|
74
|
+
return null;
|
|
75
|
+
const normalized = Math.trunc(override);
|
|
76
|
+
if (!Number.isFinite(normalized) || normalized < 1)
|
|
77
|
+
return 1;
|
|
78
|
+
return Math.min(5, normalized);
|
|
79
|
+
}
|
|
80
|
+
export function resolveBuildMaxLoops(override = null) {
|
|
81
|
+
if (override == null)
|
|
82
|
+
return null;
|
|
83
|
+
const normalized = Math.trunc(override);
|
|
84
|
+
if (!Number.isFinite(normalized) || normalized < 1)
|
|
85
|
+
return 1;
|
|
86
|
+
return Math.min(3, normalized);
|
|
87
|
+
}
|
|
88
|
+
export function getDefaultProjectConfig(config) {
|
|
89
|
+
const projects = listProjectConfigs(config);
|
|
90
|
+
return projects[0] ?? null;
|
|
91
|
+
}
|
|
92
|
+
export function findProjectConfig(config, projectId) {
|
|
93
|
+
return listProjectConfigs(config).find((project) => project.name === projectId) ?? null;
|
|
94
|
+
}
|
|
95
|
+
export function configuredSourceFolderPath(config) {
|
|
96
|
+
return config?.source_folder?.path ?? null;
|
|
97
|
+
}
|
|
98
|
+
export function resolveConfiguredSourceFolderPath(projectDataDir, config = loadSourceFolderConfig(projectDataDir)) {
|
|
99
|
+
const configuredPath = configuredSourceFolderPath(config);
|
|
100
|
+
return configuredPath ? resolve(projectDataDir, configuredPath) : null;
|
|
101
|
+
}
|
|
102
|
+
function toWritableSourceFolderConfig(config) {
|
|
103
|
+
const projects = config?.projects ?? [];
|
|
104
|
+
const sourceFolder = config?.source_folder;
|
|
105
|
+
if (projects.length > 0) {
|
|
106
|
+
return {
|
|
107
|
+
...(sourceFolder ? { source_folder: sourceFolder } : {}),
|
|
108
|
+
projects: projects.map((project) => toWritableProjectConfig(project)),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
...(sourceFolder ? { source_folder: sourceFolder } : {}),
|
|
113
|
+
projects: [],
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function toWritableProjectConfig(project) {
|
|
117
|
+
const buildPlan = buildPlanIdForProjectConfig(project);
|
|
118
|
+
return {
|
|
119
|
+
name: project.name,
|
|
120
|
+
path: project.path,
|
|
121
|
+
...(buildPlan ? { build_plan: buildPlan } : {}),
|
|
122
|
+
...(project.latest_context_graph_run_id ? { latest_context_graph_run_id: project.latest_context_graph_run_id } : {}),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
export function saveSourceFolderConfig(projectDataDir, config) {
|
|
126
|
+
const existing = loadSourceFolderConfig(projectDataDir);
|
|
127
|
+
const mergedConfig = {
|
|
128
|
+
...(existing?.source_folder && !config.source_folder ? { source_folder: existing.source_folder } : {}),
|
|
129
|
+
...config,
|
|
130
|
+
};
|
|
131
|
+
mkdirSync(projectDataDir, { recursive: true });
|
|
132
|
+
writeFileSync(sourceFolderConfigPath(projectDataDir), JSON.stringify(toWritableSourceFolderConfig(mergedConfig), null, 2) + "\n");
|
|
133
|
+
}
|
|
134
|
+
export function upsertProjectConfig(projectDataDir, projectConfig, options = {}) {
|
|
135
|
+
const existing = loadSourceFolderConfig(projectDataDir);
|
|
136
|
+
const projects = listProjectConfigs(existing);
|
|
137
|
+
const candidateNames = Array.from(new Set([projectConfig.name, options.matchName].filter((value) => Boolean(value))));
|
|
138
|
+
const existingIndex = projects.findIndex((entry) => candidateNames.includes(entry.name));
|
|
139
|
+
if (existingIndex >= 0) {
|
|
140
|
+
projects[existingIndex] = normalizeProjectConfig(projectConfig);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
projects.push(normalizeProjectConfig(projectConfig));
|
|
144
|
+
}
|
|
145
|
+
saveSourceFolderConfig(projectDataDir, {
|
|
146
|
+
projects: projects,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
export function markProjectLatestContextGraphRun(projectDataDir, projectName, runId) {
|
|
150
|
+
const project = findProjectConfig(loadSourceFolderConfig(projectDataDir), projectName);
|
|
151
|
+
if (!project) {
|
|
152
|
+
throw new Error(`Project "${projectName}" is not saved in this control plane folder.`);
|
|
153
|
+
}
|
|
154
|
+
const next = {
|
|
155
|
+
...project,
|
|
156
|
+
latest_context_graph_run_id: runId,
|
|
157
|
+
};
|
|
158
|
+
upsertProjectConfig(projectDataDir, next);
|
|
159
|
+
return next;
|
|
160
|
+
}
|
|
161
|
+
export function removeProjectConfig(projectDataDir, projectId) {
|
|
162
|
+
const existing = loadSourceFolderConfig(projectDataDir);
|
|
163
|
+
const projects = listProjectConfigs(existing);
|
|
164
|
+
const nextProjects = projects.filter((entry) => entry.name !== projectId);
|
|
165
|
+
if (nextProjects.length === projects.length)
|
|
166
|
+
return false;
|
|
167
|
+
saveSourceFolderConfig(projectDataDir, {
|
|
168
|
+
projects: nextProjects,
|
|
169
|
+
});
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
export function projectConfigFromInterfConfig(config, projectPath = `./${config.name}`) {
|
|
173
|
+
return {
|
|
174
|
+
name: config.name,
|
|
175
|
+
path: projectPath,
|
|
176
|
+
build_plan: config.build_plan,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
export function loadContextGraphProjectConfig(contextGraphPath) {
|
|
180
|
+
const config = readInterfConfig(contextGraphPath);
|
|
181
|
+
if (!config)
|
|
182
|
+
return null;
|
|
183
|
+
const projectDataDir = resolveSourceControlPathForContextGraph(contextGraphPath);
|
|
184
|
+
const configuredProjects = listProjectConfigs(loadSourceFolderConfig(projectDataDir));
|
|
185
|
+
const defaultProjectPath = configuredProjects.length === 1
|
|
186
|
+
? configuredProjects[0].path
|
|
187
|
+
: `./${config.name}`;
|
|
188
|
+
const sourceBinding = typeof config.source?.project_path === "string" && config.source.project_path.length > 0
|
|
189
|
+
? config.source.project_path
|
|
190
|
+
: null;
|
|
191
|
+
const projectPath = sourceBinding
|
|
192
|
+
? (() => {
|
|
193
|
+
const sourceAbsolutePath = resolve(contextGraphPath, sourceBinding);
|
|
194
|
+
if (!isPathWithinRoot(projectDataDir, sourceAbsolutePath)) {
|
|
195
|
+
return sourceAbsolutePath;
|
|
196
|
+
}
|
|
197
|
+
return relative(projectDataDir, sourceAbsolutePath).split(sep).join("/") || defaultProjectPath;
|
|
198
|
+
})()
|
|
199
|
+
: defaultProjectPath;
|
|
200
|
+
return projectConfigFromInterfConfig(config, projectPath);
|
|
201
|
+
}
|
|
202
|
+
export function saveContextGraphInterfConfig(contextGraphPath, config) {
|
|
203
|
+
mkdirSync(contextGraphInterfRoot(contextGraphPath), { recursive: true });
|
|
204
|
+
writeFileSync(contextGraphInterfConfigPath(contextGraphPath), JSON.stringify(config, null, 2) + "\n");
|
|
205
|
+
return config;
|
|
206
|
+
}
|
|
207
|
+
export function syncContextGraphInterfConfigFromProjectConfig(contextGraphPath, projectConfig) {
|
|
208
|
+
const current = readInterfConfig(contextGraphPath);
|
|
209
|
+
const projectDataDir = resolveSourceControlPathForContextGraph(contextGraphPath);
|
|
210
|
+
const projectSourceAbsolutePath = resolveProjectSourceBindingPath(projectDataDir, projectConfig);
|
|
211
|
+
const projectSourceRelativePath = relative(contextGraphPath, projectSourceAbsolutePath).split(sep).join("/") || ".";
|
|
212
|
+
const buildPlanId = buildPlanIdForProjectConfig(projectConfig)
|
|
213
|
+
?? buildPlanIdForProjectConfig(current)
|
|
214
|
+
?? DEFAULT_BUILD_PLAN_ID;
|
|
215
|
+
const buildPlanChanged = current?.build_plan !== undefined && current.build_plan !== buildPlanId;
|
|
216
|
+
const buildPlanOrigin = buildPlanChanged || !current?.build_plan_origin
|
|
217
|
+
? {
|
|
218
|
+
selected: buildPlanId,
|
|
219
|
+
local_draft: false,
|
|
220
|
+
}
|
|
221
|
+
: current.build_plan_origin;
|
|
222
|
+
const nextConfig = {
|
|
223
|
+
...(!current ? {
|
|
224
|
+
type: "context-graph",
|
|
225
|
+
source: {
|
|
226
|
+
path: projectSourceRelativePath,
|
|
227
|
+
},
|
|
228
|
+
} : {}),
|
|
229
|
+
type: "context-graph",
|
|
230
|
+
name: projectConfig.name,
|
|
231
|
+
build_plan: buildPlanId,
|
|
232
|
+
build_plan_origin: buildPlanOrigin,
|
|
233
|
+
source: {
|
|
234
|
+
path: projectSourceRelativePath,
|
|
235
|
+
control_path: defaultControlPathForContextGraph(contextGraphPath),
|
|
236
|
+
project_path: projectSourceRelativePath,
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
const saved = saveContextGraphInterfConfig(contextGraphPath, nextConfig);
|
|
240
|
+
if (buildPlanChanged) {
|
|
241
|
+
const selectedBuildPlan = getBuildPlan(buildPlanId, { projectDataDir });
|
|
242
|
+
seedContextGraphBuildPlanPackage({
|
|
243
|
+
contextGraphPath,
|
|
244
|
+
projectDataDir,
|
|
245
|
+
buildPlanId: selectedBuildPlan.id,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
refreshContextGraphBootstrapGuidance(contextGraphPath);
|
|
249
|
+
return saved;
|
|
250
|
+
}
|
|
251
|
+
function selectSavedBenchmarkSpec(options) {
|
|
252
|
+
const specs = listTestSpecs(options.projectDataDir, options.targetType);
|
|
253
|
+
if (specs.length === 0)
|
|
254
|
+
return null;
|
|
255
|
+
if (options.targetName) {
|
|
256
|
+
return specs.find((spec) => spec.id === options.targetName ||
|
|
257
|
+
spec.name === options.targetName ||
|
|
258
|
+
spec.name === `${options.targetName} benchmark`) ?? null;
|
|
259
|
+
}
|
|
260
|
+
return specs.length === 1 ? specs[0] : null;
|
|
261
|
+
}
|
|
262
|
+
export function buildTestSpecFromSourceFolderConfig(options) {
|
|
263
|
+
const { projectDataDir, targetName, targetType = "context-graph" } = options;
|
|
264
|
+
return selectSavedBenchmarkSpec({ projectDataDir, targetName, targetType });
|
|
265
|
+
}
|
|
266
|
+
export function buildTestSpecFromProjectConfig(options) {
|
|
267
|
+
const { contextGraphPath, targetType = "context-graph" } = options;
|
|
268
|
+
const config = readInterfConfig(contextGraphPath);
|
|
269
|
+
if (!config)
|
|
270
|
+
return null;
|
|
271
|
+
return buildTestSpecFromSourceFolderConfig({
|
|
272
|
+
projectDataDir: resolveSourceControlPathForContextGraph(contextGraphPath),
|
|
273
|
+
targetName: config.name,
|
|
274
|
+
targetType,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
export function writeBenchmarkSpecsForProject(options) {
|
|
278
|
+
if (options.checks.length === 0)
|
|
279
|
+
return {};
|
|
280
|
+
const baseSpec = {
|
|
281
|
+
id: options.projectName,
|
|
282
|
+
name: options.projectName,
|
|
283
|
+
description: options.description ?? `Saved benchmark checks for Project ${options.projectName}.`,
|
|
284
|
+
cases: normalizeBenchmarkChecks(options.checks),
|
|
285
|
+
};
|
|
286
|
+
return {
|
|
287
|
+
source_files: writeTestSpec(options.projectDataDir, { ...baseSpec, type: "source-files" }, { overwrite: true }),
|
|
288
|
+
context_graph: writeTestSpec(options.projectDataDir, { ...baseSpec, type: "context-graph" }, { overwrite: true }),
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
export function fingerprintTestSpec(spec) {
|
|
292
|
+
const normalized = spec.cases.map((testCase) => ({
|
|
293
|
+
question: testCase.question.trim(),
|
|
294
|
+
...(testCase.file ? { file: testCase.file.trim() } : {}),
|
|
295
|
+
...(testCase.answer ? { answer: testCase.answer.trim() } : {}),
|
|
296
|
+
...(testCase.strictness ? { strictness: testCase.strictness.trim() } : {}),
|
|
297
|
+
...(testCase.expect ? { expect: testCase.expect } : {}),
|
|
298
|
+
}));
|
|
299
|
+
return createHash("sha256")
|
|
300
|
+
.update(JSON.stringify(normalized))
|
|
301
|
+
.digest("hex")
|
|
302
|
+
.slice(0, 16);
|
|
303
|
+
}
|
|
304
|
+
export function fingerprintSavedBenchmarkSpec(options) {
|
|
305
|
+
const spec = buildTestSpecFromSourceFolderConfig({
|
|
306
|
+
projectDataDir: options.projectDataDir,
|
|
307
|
+
targetName: options.projectName,
|
|
308
|
+
targetType: options.targetType ?? "context-graph",
|
|
309
|
+
});
|
|
310
|
+
return spec ? fingerprintTestSpec(spec) : null;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* System path prefixes the runtime must never operate on, even when an
|
|
314
|
+
* absolute `project.path` was authored by hand. The schema-level
|
|
315
|
+
* refinement in `ProjectConfigSchema` is the primary line of
|
|
316
|
+
* defense; this is the in-process backstop for callers that hand-craft a
|
|
317
|
+
* ProjectConfig at runtime (e.g. Build Plan authoring helpers that
|
|
318
|
+
* construct a config from an InterfConfig).
|
|
319
|
+
*/
|
|
320
|
+
const FORBIDDEN_PROJECT_SOURCE_PATH_PREFIXES = [
|
|
321
|
+
"/etc",
|
|
322
|
+
"/sys",
|
|
323
|
+
"/proc",
|
|
324
|
+
"/dev",
|
|
325
|
+
"/var/run",
|
|
326
|
+
"/var/lib",
|
|
327
|
+
"/usr",
|
|
328
|
+
"/bin",
|
|
329
|
+
"/sbin",
|
|
330
|
+
"/boot",
|
|
331
|
+
];
|
|
332
|
+
function rejectForbiddenProjectSourcePath(absolutePath) {
|
|
333
|
+
for (const prefix of FORBIDDEN_PROJECT_SOURCE_PATH_PREFIXES) {
|
|
334
|
+
if (absolutePath === prefix || absolutePath.startsWith(`${prefix}/`)) {
|
|
335
|
+
throw new Error(`Project Source path may not target system directory ${prefix}: ${absolutePath}`);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
export function resolveProjectSourcePath(projectDataDir, projectConfig) {
|
|
340
|
+
const configuredPath = projectConfig.path.trim();
|
|
341
|
+
const resolvedPath = resolve(projectDataDir, configuredPath);
|
|
342
|
+
if (isAbsolute(configuredPath)) {
|
|
343
|
+
rejectForbiddenProjectSourcePath(resolvedPath);
|
|
344
|
+
return resolvedPath;
|
|
345
|
+
}
|
|
346
|
+
rejectForbiddenProjectSourcePath(resolvedPath);
|
|
347
|
+
return assertPathWithinRoot(projectDataDir, resolvedPath, "Source locator path");
|
|
348
|
+
}
|
|
349
|
+
export function resolveProjectSourceBindingPath(projectDataDir, projectConfig, config = loadSourceFolderConfig(projectDataDir)) {
|
|
350
|
+
return resolveConfiguredSourceFolderPath(projectDataDir, config)
|
|
351
|
+
?? resolveProjectSourcePath(projectDataDir, projectConfig);
|
|
352
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function listVisibleSourceFolders(projectDataDir: string): string[];
|
|
2
|
+
export declare function isReservedProjectSourcePath(relativePath: string): boolean;
|
|
3
|
+
export declare function normalizeProjectSourcePathForConfig(projectDataDir: string, value: string): string;
|
|
4
|
+
export declare function defaultProjectIdForPath(sourceFolderPath: string): string;
|
|
5
|
+
export declare function findSingleSourceFolderCandidate(projectDataDir: string): string | null;
|
|
6
|
+
export declare function listSourceFolderChoices(projectDataDir?: string): Array<{
|
|
7
|
+
value: string;
|
|
8
|
+
label: string;
|
|
9
|
+
hint: string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare function defaultProjectSourcePathForPrompt(name: string, introStyle: "first" | "additional" | "edit", projectDataDir?: string): string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
2
2
|
import { isAbsolute, join, relative, sep } from "node:path";
|
|
3
3
|
import { slugify } from "../contracts/utils/naming.js";
|
|
4
|
-
import {
|
|
4
|
+
import { resolveProjectSourcePath } from "./source-config.js";
|
|
5
5
|
import { isPathWithinRoot } from "../contracts/utils/path-guards.js";
|
|
6
|
-
const
|
|
6
|
+
const DEFAULT_PROJECT_ID = "default";
|
|
7
7
|
const IGNORED_SOURCE_FOLDER_ENTRIES = new Set([
|
|
8
8
|
".DS_Store",
|
|
9
9
|
".git",
|
|
@@ -12,10 +12,10 @@ const IGNORED_SOURCE_FOLDER_ENTRIES = new Set([
|
|
|
12
12
|
"interf.json",
|
|
13
13
|
"node_modules",
|
|
14
14
|
]);
|
|
15
|
-
export function listVisibleSourceFolders(
|
|
15
|
+
export function listVisibleSourceFolders(projectDataDir) {
|
|
16
16
|
let rootEntries = [];
|
|
17
17
|
try {
|
|
18
|
-
rootEntries = readdirSync(
|
|
18
|
+
rootEntries = readdirSync(projectDataDir);
|
|
19
19
|
}
|
|
20
20
|
catch {
|
|
21
21
|
return [];
|
|
@@ -24,7 +24,7 @@ export function listVisibleSourceFolders(prepDataDir) {
|
|
|
24
24
|
const visibleDirectories = [];
|
|
25
25
|
for (const entry of visibleEntries) {
|
|
26
26
|
try {
|
|
27
|
-
const entryPath = join(
|
|
27
|
+
const entryPath = join(projectDataDir, entry);
|
|
28
28
|
if (statSync(entryPath).isDirectory()) {
|
|
29
29
|
visibleDirectories.push(entry);
|
|
30
30
|
}
|
|
@@ -35,64 +35,64 @@ export function listVisibleSourceFolders(prepDataDir) {
|
|
|
35
35
|
}
|
|
36
36
|
return visibleDirectories.sort((left, right) => left.localeCompare(right));
|
|
37
37
|
}
|
|
38
|
-
export function
|
|
38
|
+
export function isReservedProjectSourcePath(relativePath) {
|
|
39
39
|
const normalized = relativePath.replace(/\\/g, "/").replace(/^\.\/+/, "");
|
|
40
40
|
return normalized === "interf" ||
|
|
41
41
|
normalized.startsWith("interf/") ||
|
|
42
42
|
normalized === ".interf" ||
|
|
43
43
|
normalized.startsWith(".interf/");
|
|
44
44
|
}
|
|
45
|
-
export function
|
|
45
|
+
export function normalizeProjectSourcePathForConfig(projectDataDir, value) {
|
|
46
46
|
const trimmedValue = value.trim();
|
|
47
|
-
const resolvedPath =
|
|
48
|
-
const relativePath = relative(
|
|
47
|
+
const resolvedPath = resolveProjectSourcePath(projectDataDir, { path: trimmedValue });
|
|
48
|
+
const relativePath = relative(projectDataDir, resolvedPath).split(sep).join("/") || ".";
|
|
49
49
|
if (relativePath === ".") {
|
|
50
|
-
throw new Error("Pick a Source Folder, not the Interf
|
|
50
|
+
throw new Error("Pick a Source Folder, not the Interf Project data folder itself.");
|
|
51
51
|
}
|
|
52
|
-
if (isAbsolute(trimmedValue) && !isPathWithinRoot(
|
|
52
|
+
if (isAbsolute(trimmedValue) && !isPathWithinRoot(projectDataDir, resolvedPath)) {
|
|
53
53
|
if (!existsSync(resolvedPath)) {
|
|
54
|
-
throw new Error("Pick an existing
|
|
54
|
+
throw new Error("Pick an existing local Source folder.");
|
|
55
55
|
}
|
|
56
56
|
if (!statSync(resolvedPath).isDirectory()) {
|
|
57
|
-
throw new Error("Source folder must be a directory.");
|
|
57
|
+
throw new Error("Local Source folder must be a directory.");
|
|
58
58
|
}
|
|
59
59
|
return resolvedPath;
|
|
60
60
|
}
|
|
61
|
-
if (
|
|
62
|
-
throw new Error("Pick an existing
|
|
61
|
+
if (isReservedProjectSourcePath(relativePath)) {
|
|
62
|
+
throw new Error("Pick an existing local Source folder, not `interf/` or `.interf/`.");
|
|
63
63
|
}
|
|
64
64
|
if (!existsSync(resolvedPath)) {
|
|
65
|
-
throw new Error("Pick an existing
|
|
65
|
+
throw new Error("Pick an existing local Source folder.");
|
|
66
66
|
}
|
|
67
67
|
if (!statSync(resolvedPath).isDirectory()) {
|
|
68
|
-
throw new Error("Source folder must be a directory.");
|
|
68
|
+
throw new Error("Local Source folder must be a directory.");
|
|
69
69
|
}
|
|
70
70
|
return relativePath.startsWith("./") ? relativePath : `./${relativePath}`;
|
|
71
71
|
}
|
|
72
|
-
export function
|
|
72
|
+
export function defaultProjectIdForPath(sourceFolderPath) {
|
|
73
73
|
const segments = sourceFolderPath
|
|
74
74
|
.replace(/\\/g, "/")
|
|
75
75
|
.replace(/\/+$/g, "")
|
|
76
76
|
.split("/")
|
|
77
77
|
.filter((segment) => segment.length > 0 && segment !== ".");
|
|
78
|
-
return slugify(segments[segments.length - 1] ?? "") ||
|
|
78
|
+
return slugify(segments[segments.length - 1] ?? "") || DEFAULT_PROJECT_ID;
|
|
79
79
|
}
|
|
80
|
-
export function findSingleSourceFolderCandidate(
|
|
81
|
-
const visibleDirectories = listVisibleSourceFolders(
|
|
80
|
+
export function findSingleSourceFolderCandidate(projectDataDir) {
|
|
81
|
+
const visibleDirectories = listVisibleSourceFolders(projectDataDir);
|
|
82
82
|
if (visibleDirectories.length !== 1) {
|
|
83
83
|
return null;
|
|
84
84
|
}
|
|
85
85
|
return `./${visibleDirectories[0]}`;
|
|
86
86
|
}
|
|
87
|
-
export function listSourceFolderChoices(
|
|
88
|
-
return listVisibleSourceFolders(
|
|
87
|
+
export function listSourceFolderChoices(projectDataDir = process.cwd()) {
|
|
88
|
+
return listVisibleSourceFolders(projectDataDir).map((entry) => ({
|
|
89
89
|
value: `./${entry}`,
|
|
90
90
|
label: entry,
|
|
91
91
|
hint: `Use ./${entry} as the source folder`,
|
|
92
92
|
}));
|
|
93
93
|
}
|
|
94
|
-
export function
|
|
95
|
-
const namedFolderPath = join(
|
|
94
|
+
export function defaultProjectSourcePathForPrompt(name, introStyle, projectDataDir = process.cwd()) {
|
|
95
|
+
const namedFolderPath = join(projectDataDir, name);
|
|
96
96
|
if (existsSync(namedFolderPath)) {
|
|
97
97
|
try {
|
|
98
98
|
if (statSync(namedFolderPath).isDirectory()) {
|
|
@@ -104,7 +104,7 @@ export function defaultSourcePreparationPathForPrompt(name, introStyle, prepData
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
if (introStyle === "first") {
|
|
107
|
-
return findSingleSourceFolderCandidate(
|
|
107
|
+
return findSingleSourceFolderCandidate(projectDataDir) ?? `./${name}`;
|
|
108
108
|
}
|
|
109
109
|
return `./${name}`;
|
|
110
110
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AgentExecutor } from "./agents/lib/executors.js";
|
|
2
2
|
import type { LocalServiceActionPlanningContext } from "./runtime.js";
|
|
3
|
-
import { type ActionProposalCreateRequest, type ActionProposalPlan } from "./
|
|
3
|
+
import { type ActionProposalCreateRequest, type ActionProposalPlan } from "./schemas/index.js";
|
|
4
4
|
export declare function buildActionPlannerPrompt(request: ActionProposalCreateRequest, context: LocalServiceActionPlanningContext, outputPath: string): string;
|
|
5
5
|
export declare function planActionProposalWithExecutor(options: {
|
|
6
6
|
request: ActionProposalCreateRequest;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { buildPlanIdForProjectConfig, } from "../build-plans/build-plan-resolution.js";
|
|
4
4
|
import { PACKAGE_ROOT } from "../build-plans/package/lib/package-root.js";
|
|
5
|
-
import {
|
|
6
|
-
import { ActionProposalPlanSchema, } from "./
|
|
5
|
+
import { asProjectDataDir, projectServiceActionPlansRoot, } from "../contracts/lib/project-paths.js";
|
|
6
|
+
import { ActionProposalPlanSchema, } from "./schemas/index.js";
|
|
7
7
|
function extractJsonObject(text) {
|
|
8
8
|
try {
|
|
9
9
|
return JSON.parse(text);
|
|
@@ -31,18 +31,16 @@ function readActionSkill() {
|
|
|
31
31
|
}
|
|
32
32
|
export function buildActionPlannerPrompt(request, context, outputPath) {
|
|
33
33
|
const actionSkill = readActionSkill();
|
|
34
|
-
const
|
|
35
|
-
name:
|
|
36
|
-
path:
|
|
37
|
-
|
|
38
|
-
build_plan: buildPlanIdForSourcePreparationConfig(preparation),
|
|
39
|
-
checks: preparation.checks?.length ?? 0,
|
|
34
|
+
const projects = context.projects.map((project) => ({
|
|
35
|
+
name: project.name,
|
|
36
|
+
path: project.path,
|
|
37
|
+
build_plan: buildPlanIdForProjectConfig(project),
|
|
40
38
|
}));
|
|
41
39
|
const recentProposals = context.recentProposals.map((proposal) => ({
|
|
42
40
|
status: proposal.status,
|
|
43
41
|
action_type: proposal.action_type,
|
|
44
42
|
title: proposal.title,
|
|
45
|
-
|
|
43
|
+
project: proposal.project ?? null,
|
|
46
44
|
request: proposal.request,
|
|
47
45
|
command_preview: proposal.command_preview ?? null,
|
|
48
46
|
}));
|
|
@@ -56,19 +54,19 @@ export function buildActionPlannerPrompt(request, context, outputPath) {
|
|
|
56
54
|
User request:
|
|
57
55
|
${request.message}
|
|
58
56
|
|
|
59
|
-
Selected
|
|
57
|
+
Selected Project hint: ${request.project ?? "(none)"}
|
|
60
58
|
|
|
61
59
|
Structured request values:
|
|
62
60
|
${JSON.stringify(request.values ?? {}, null, 2)}
|
|
63
61
|
|
|
64
|
-
Available
|
|
65
|
-
${JSON.stringify(
|
|
62
|
+
Available Projects:
|
|
63
|
+
${JSON.stringify(projects, null, 2)}
|
|
66
64
|
|
|
67
|
-
Visible
|
|
65
|
+
Visible Sources:
|
|
68
66
|
${JSON.stringify(sourceFolders, null, 2)}
|
|
69
67
|
|
|
70
68
|
Action health:
|
|
71
|
-
${JSON.stringify(context.
|
|
69
|
+
${JSON.stringify(context.projectHealth, null, 2)}
|
|
72
70
|
|
|
73
71
|
Recent proposals, newest first. A short follow-up like "target source only" may be correcting the latest pending proposal:
|
|
74
72
|
${JSON.stringify(recentProposals, null, 2)}
|
|
@@ -77,7 +75,7 @@ Interf action skill source:
|
|
|
77
75
|
${actionSkill}
|
|
78
76
|
|
|
79
77
|
Use the Interf action skill source as the authority for CLI semantics and Interf proposal mode. Preserve user intent over defaults.
|
|
80
|
-
Use Action health to avoid proposing work that cannot run yet. If
|
|
78
|
+
Use Action health to avoid proposing work that cannot run yet. If can_run_benchmark is false, prefer the recommended next actions; benchmark targets need a built Context Graph with a recorded Source Manifest.
|
|
81
79
|
If the user is asking a question or making casual conversation, return "clarification" with a helpful assistant_message. Do not invent a CLI command for non-action chat.
|
|
82
80
|
If a field does not apply, omit it instead of writing null or an empty string.
|
|
83
81
|
Do not run any CLI command. Do not edit files except the output JSON file.
|
|
@@ -87,8 +85,8 @@ ${outputPath}
|
|
|
87
85
|
|
|
88
86
|
JSON schema:
|
|
89
87
|
{
|
|
90
|
-
"action_type": "
|
|
91
|
-
"
|
|
88
|
+
"action_type": "project-setup" | "project-change" | "build" | "benchmark" | "benchmark-question-draft" | "build-plan-draft" | "build-plan-change" | "build-plan-improvement" | "clarification",
|
|
89
|
+
"project": "Project id if applicable",
|
|
92
90
|
"build_plan": "Build Plan id if applicable",
|
|
93
91
|
"values": {},
|
|
94
92
|
"title": "short approval card title",
|
|
@@ -99,7 +97,7 @@ JSON schema:
|
|
|
99
97
|
`;
|
|
100
98
|
}
|
|
101
99
|
export async function planActionProposalWithExecutor(options) {
|
|
102
|
-
const planRoot = join(
|
|
100
|
+
const planRoot = join(projectServiceActionPlansRoot(asProjectDataDir(options.context.sourcePath)), Date.now().toString(36));
|
|
103
101
|
mkdirSync(planRoot, { recursive: true });
|
|
104
102
|
const outputPath = join(planRoot, "proposal.json");
|
|
105
103
|
const prompt = buildActionPlannerPrompt(options.request, options.context, outputPath);
|
|
@@ -111,7 +109,7 @@ export async function planActionProposalWithExecutor(options) {
|
|
|
111
109
|
if (exitCode !== 0 && !existsSync(outputPath)) {
|
|
112
110
|
return ActionProposalPlanSchema.parse({
|
|
113
111
|
action_type: "clarification",
|
|
114
|
-
|
|
112
|
+
project: options.request.project,
|
|
115
113
|
assistant_message: `${options.executor.displayName} could not create a safe Interf proposal.`,
|
|
116
114
|
});
|
|
117
115
|
}
|
|
@@ -121,8 +119,8 @@ export async function planActionProposalWithExecutor(options) {
|
|
|
121
119
|
catch {
|
|
122
120
|
return ActionProposalPlanSchema.parse({
|
|
123
121
|
action_type: "clarification",
|
|
124
|
-
|
|
125
|
-
assistant_message: "I can help with this Interf instance. Ask a question about Interf, or ask me to create a
|
|
122
|
+
project: options.request.project,
|
|
123
|
+
assistant_message: "I can help with this Interf instance. Ask a question about Interf, or ask me to create a Project, build a Context Graph, benchmark, improve, or draft a Build Plan and I will prepare an approval proposal.",
|
|
126
124
|
});
|
|
127
125
|
}
|
|
128
126
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ActionValueIdPattern, ActionValueIdSchema, BuildPlanAuthoringActionValuesSchema, OptionalActionValueIdSchema, ProjectSetupActionValuesSchema, buildPlanAuthoringRequestFromActionValues, buildPlanAuthoringIntentBrief, projectSetupRequestFromActionValues, type BuildPlanAuthoringActionValues, type ProjectSetupActionValues, } from "./actions/index.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ActionValueIdPattern, ActionValueIdSchema, BuildPlanAuthoringActionValuesSchema, OptionalActionValueIdSchema, ProjectSetupActionValuesSchema, buildPlanAuthoringRequestFromActionValues, buildPlanAuthoringIntentBrief, projectSetupRequestFromActionValues, } from "./actions/index.js";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function packageSchemaFieldErrors(result, pathMap) {
|
|
2
|
+
if (result.success)
|
|
3
|
+
return {};
|
|
4
|
+
const errors = {};
|
|
5
|
+
for (const issue of result.error.issues) {
|
|
6
|
+
const path = issue.path.join(".");
|
|
7
|
+
const key = pathMap[path] ?? pathMap[issue.path.at(-1)?.toString() ?? ""] ?? "";
|
|
8
|
+
if (key && !errors[key])
|
|
9
|
+
errors[key] = issue.message;
|
|
10
|
+
}
|
|
11
|
+
return errors;
|
|
12
|
+
}
|