@interf/compiler 0.22.2 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -282
- package/dist/bin-mcp.d.ts +2 -0
- package/dist/bin-mcp.js +63 -0
- package/dist/bin-runtime.d.ts +2 -0
- package/dist/bin-runtime.js +111 -0
- package/dist/cli/commands/agents.js +4 -35
- package/dist/cli/commands/auth.d.ts +20 -0
- package/dist/cli/commands/auth.js +161 -0
- package/dist/cli/commands/benchmark.d.ts +9 -0
- package/dist/cli/commands/benchmark.js +58 -0
- package/dist/cli/commands/build-plan.js +107 -139
- package/dist/cli/commands/build.d.ts +3 -4
- package/dist/cli/commands/build.js +16 -45
- package/dist/cli/commands/doctor.js +3 -3
- package/dist/cli/commands/graphs.d.ts +2 -0
- package/dist/cli/commands/graphs.js +344 -0
- package/dist/cli/commands/login.js +4 -6
- package/dist/cli/commands/logout.js +1 -1
- package/dist/cli/commands/mcp.d.ts +4 -2
- package/dist/cli/commands/mcp.js +846 -232
- package/dist/cli/commands/project.d.ts +2 -0
- package/dist/cli/commands/project.js +176 -0
- package/dist/cli/commands/reset.d.ts +3 -4
- package/dist/cli/commands/reset.js +10 -31
- package/dist/cli/commands/runs.js +136 -57
- package/dist/cli/commands/runtime.d.ts +24 -0
- package/dist/cli/commands/runtime.js +373 -0
- package/dist/cli/commands/status.d.ts +1 -0
- package/dist/cli/commands/status.js +35 -45
- package/dist/cli/commands/traces.d.ts +2 -0
- package/dist/cli/commands/traces.js +97 -0
- package/dist/cli/commands/wizard.js +171 -178
- package/dist/cli/index.d.ts +7 -4
- package/dist/cli/index.js +13 -7
- package/dist/cli/lib/http-client.d.ts +39 -0
- package/dist/cli/lib/http-client.js +73 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/packages/build-plans/authoring/brief.d.ts +538 -0
- package/dist/packages/build-plans/authoring/brief.js +89 -0
- package/dist/packages/build-plans/authoring/build-plan-authoring.d.ts +52 -11
- package/dist/packages/build-plans/authoring/build-plan-authoring.js +493 -46
- package/dist/packages/build-plans/authoring/build-plan-edit-session.d.ts +10 -1
- package/dist/packages/build-plans/authoring/build-plan-edit-session.js +27 -4
- package/dist/packages/build-plans/authoring/build-plan-improvement.d.ts +9 -6
- package/dist/packages/build-plans/authoring/build-plan-improvement.js +97 -46
- package/dist/packages/build-plans/authoring/lib/build-plan-edit-utils.d.ts +1 -0
- package/dist/packages/build-plans/authoring/lib/build-plan-edit-utils.js +7 -7
- package/dist/packages/build-plans/build-plan-resolution.d.ts +1 -1
- package/dist/packages/build-plans/build-plan-resolution.js +3 -3
- package/dist/packages/build-plans/index.d.ts +1 -1
- package/dist/packages/build-plans/index.js +1 -1
- package/dist/packages/build-plans/package/build-plan-definitions.d.ts +14 -13
- package/dist/packages/build-plans/package/build-plan-definitions.js +45 -42
- package/dist/packages/build-plans/package/build-plan-helpers.d.ts +3 -2
- package/dist/packages/build-plans/package/build-plan-helpers.js +27 -13
- package/dist/packages/build-plans/package/build-plan-review-paths.d.ts +5 -5
- package/dist/packages/build-plans/package/build-plan-review-paths.js +15 -15
- package/dist/packages/build-plans/package/build-plan-stage-runner.d.ts +5 -4
- package/dist/packages/build-plans/package/build-plan-stage-runner.js +23 -11
- package/dist/packages/build-plans/package/builtin-build-plan.d.ts +7 -8
- package/dist/packages/build-plans/package/builtin-build-plan.js +10 -11
- package/dist/packages/build-plans/package/context-interface.d.ts +14 -9
- package/dist/packages/build-plans/package/context-interface.js +14 -33
- package/dist/packages/build-plans/package/interf-build-plan-package.d.ts +6 -17
- package/dist/packages/build-plans/package/interf-build-plan-package.js +68 -64
- package/dist/packages/build-plans/package/local-build-plans.d.ts +21 -14
- package/dist/packages/build-plans/package/local-build-plans.js +105 -55
- package/dist/packages/build-plans/package/user-build-plans.js +1 -1
- package/dist/packages/contracts/index.d.ts +5 -2
- package/dist/packages/contracts/index.js +3 -1
- package/dist/packages/contracts/lib/context-graph-layer.d.ts +161 -0
- package/dist/packages/contracts/lib/context-graph-layer.js +216 -0
- package/dist/packages/contracts/lib/project-paths.d.ts +144 -0
- package/dist/packages/contracts/lib/project-paths.js +220 -0
- package/dist/packages/contracts/lib/project-schema.d.ts +423 -0
- package/dist/packages/contracts/lib/project-schema.js +138 -0
- package/dist/packages/contracts/lib/schema.d.ts +1273 -81
- package/dist/packages/contracts/lib/schema.js +675 -79
- package/dist/packages/contracts/utils/filesystem.d.ts +1 -0
- package/dist/packages/contracts/utils/filesystem.js +29 -1
- package/dist/packages/contracts/utils/parse.js +67 -0
- package/dist/packages/projects/index.d.ts +6 -0
- package/dist/packages/{project → projects}/index.js +0 -3
- package/dist/packages/{project → projects}/interf-detect.d.ts +12 -12
- package/dist/packages/{project → projects}/interf-detect.js +56 -50
- package/dist/packages/projects/interf.d.ts +2 -0
- package/dist/packages/projects/interf.js +1 -0
- package/dist/packages/projects/lib/schema.d.ts +77 -0
- package/dist/packages/projects/lib/schema.js +91 -0
- package/dist/packages/projects/source-config.d.ts +53 -0
- package/dist/packages/projects/source-config.js +339 -0
- package/dist/packages/projects/source-folders.d.ts +11 -0
- package/dist/packages/{project → projects}/source-folders.js +26 -26
- package/dist/packages/{engine → runtime}/action-planner.d.ts +1 -1
- package/dist/packages/{engine → runtime}/action-planner.js +20 -22
- package/dist/packages/runtime/action-values.d.ts +1 -0
- package/dist/packages/runtime/action-values.js +1 -0
- package/dist/packages/runtime/actions/errors.d.ts +2 -0
- package/dist/packages/runtime/actions/errors.js +12 -0
- package/dist/packages/runtime/actions/fields.d.ts +86 -0
- package/dist/packages/runtime/actions/form-builders.d.ts +14 -0
- package/dist/packages/runtime/actions/form-builders.js +667 -0
- package/dist/packages/runtime/actions/form-validators.d.ts +8 -0
- package/dist/packages/runtime/actions/form-validators.js +134 -0
- package/dist/packages/runtime/actions/helpers.d.ts +11 -0
- package/dist/packages/runtime/actions/helpers.js +80 -0
- package/dist/packages/runtime/actions/index.d.ts +8 -0
- package/dist/packages/runtime/actions/index.js +11 -0
- package/dist/packages/runtime/actions/registry.d.ts +64 -0
- package/dist/packages/runtime/actions/registry.js +62 -0
- package/dist/packages/runtime/actions/requests.d.ts +45 -0
- package/dist/packages/runtime/actions/requests.js +164 -0
- package/dist/packages/runtime/actions/schemas.d.ts +161 -0
- package/dist/packages/runtime/actions/schemas.js +37 -0
- package/dist/packages/runtime/agent-handoff.d.ts +11 -0
- package/dist/packages/runtime/agent-handoff.js +102 -0
- package/dist/packages/{engine → runtime}/agents/index.d.ts +1 -2
- package/dist/packages/{engine → runtime}/agents/index.js +1 -2
- package/dist/packages/runtime/agents/lib/args.d.ts +14 -0
- package/dist/packages/runtime/agents/lib/args.js +24 -0
- package/dist/packages/{engine → runtime}/agents/lib/constants.d.ts +4 -1
- package/dist/packages/runtime/agents/lib/constants.js +13 -0
- package/dist/packages/runtime/agents/lib/context-graph-bootstrap.d.ts +3 -0
- package/dist/packages/{engine/agents/lib/verifiable-context-bootstrap.js → runtime/agents/lib/context-graph-bootstrap.js} +5 -6
- package/dist/packages/{engine → runtime}/agents/lib/detection.d.ts +5 -0
- package/dist/packages/{engine → runtime}/agents/lib/detection.js +16 -7
- package/dist/packages/{engine → runtime}/agents/lib/execution-profile.d.ts +14 -0
- package/dist/packages/{engine → runtime}/agents/lib/execution-profile.js +31 -14
- package/dist/packages/{engine → runtime}/agents/lib/execution.js +22 -6
- package/dist/packages/{engine → runtime}/agents/lib/executors.d.ts +1 -0
- package/dist/packages/{engine → runtime}/agents/lib/executors.js +11 -2
- package/dist/packages/runtime/agents/lib/logs.d.ts +12 -0
- package/dist/packages/runtime/agents/lib/logs.js +41 -0
- package/dist/packages/{engine → runtime}/agents/lib/preflight.js +19 -14
- package/dist/packages/runtime/agents/lib/render.d.ts +26 -0
- package/dist/packages/{engine → runtime}/agents/lib/render.js +48 -22
- package/dist/packages/runtime/agents/lib/shell-fs.d.ts +18 -0
- package/dist/packages/runtime/agents/lib/shell-fs.js +190 -0
- package/dist/packages/runtime/agents/lib/shell-paths.d.ts +16 -0
- package/dist/packages/runtime/agents/lib/shell-paths.js +63 -0
- package/dist/packages/runtime/agents/lib/shell-projection.d.ts +25 -0
- package/dist/packages/runtime/agents/lib/shell-projection.js +314 -0
- package/dist/packages/runtime/agents/lib/shell-templates.d.ts +30 -0
- package/dist/packages/runtime/agents/lib/shell-templates.js +494 -0
- package/dist/packages/runtime/agents/lib/shell-workspace.d.ts +17 -0
- package/dist/packages/runtime/agents/lib/shell-workspace.js +70 -0
- package/dist/packages/runtime/agents/lib/shells.d.ts +92 -0
- package/dist/packages/runtime/agents/lib/shells.js +509 -0
- package/dist/packages/runtime/agents/lib/source-context-scan.d.ts +10 -0
- package/dist/packages/runtime/agents/lib/source-context-scan.js +388 -0
- package/dist/packages/{engine → runtime}/agents/lib/status.js +1 -14
- package/dist/packages/runtime/agents/lib/string-utils.d.ts +16 -0
- package/dist/packages/runtime/agents/lib/string-utils.js +36 -0
- package/dist/packages/{engine → runtime}/agents/lib/types.d.ts +1 -0
- package/dist/packages/{engine → runtime}/agents/lib/user-config.d.ts +8 -2
- package/dist/packages/{engine → runtime}/agents/lib/user-config.js +8 -2
- package/dist/packages/runtime/agents/providers/claude-code.d.ts +13 -0
- package/dist/packages/runtime/agents/providers/claude-code.js +45 -0
- package/dist/packages/runtime/agents/providers/codex.d.ts +17 -0
- package/dist/packages/runtime/agents/providers/codex.js +66 -0
- package/dist/packages/runtime/agents/providers/cursor.d.ts +9 -0
- package/dist/packages/runtime/agents/providers/cursor.js +24 -0
- package/dist/packages/runtime/agents/providers/index.d.ts +9 -0
- package/dist/packages/runtime/agents/providers/index.js +31 -0
- package/dist/packages/runtime/agents/providers/types.d.ts +50 -0
- package/dist/packages/{engine → runtime}/agents/registry.d.ts +13 -2
- package/dist/packages/{engine → runtime}/agents/registry.js +48 -10
- package/dist/packages/{engine → runtime}/agents/role-executors.d.ts +1 -1
- package/dist/packages/{engine → runtime}/agents/role-executors.js +9 -7
- package/dist/packages/{engine → runtime}/agents/role-router.js +7 -5
- package/dist/packages/runtime/auth/account-context.d.ts +52 -0
- package/dist/packages/runtime/auth/account-context.js +68 -0
- package/dist/packages/runtime/auth/auth-flow.d.ts +73 -0
- package/dist/packages/runtime/auth/auth-flow.js +189 -0
- package/dist/packages/runtime/auth/jwt-validator.d.ts +58 -0
- package/dist/packages/runtime/auth/jwt-validator.js +86 -0
- package/dist/packages/runtime/auth/keychain.d.ts +35 -0
- package/dist/packages/runtime/auth/keychain.js +85 -0
- package/dist/packages/runtime/auth/session-store.d.ts +38 -0
- package/dist/packages/runtime/auth/session-store.js +96 -0
- package/dist/packages/runtime/auth/workos-client.d.ts +58 -0
- package/dist/packages/runtime/auth/workos-client.js +87 -0
- package/dist/packages/runtime/benchmark-question-draft.d.ts +23 -0
- package/dist/packages/runtime/benchmark-question-draft.js +153 -0
- package/dist/packages/runtime/build/artifact-counts.d.ts +1 -0
- package/dist/packages/{engine → runtime}/build/artifact-counts.js +5 -9
- package/dist/packages/{engine → runtime}/build/artifact-status.d.ts +6 -6
- package/dist/packages/{engine → runtime}/build/artifact-status.js +26 -24
- package/dist/packages/runtime/build/atomic-fs.d.ts +3 -0
- package/dist/packages/runtime/build/atomic-fs.js +95 -0
- package/dist/packages/runtime/build/billing-events.d.ts +78 -0
- package/dist/packages/{engine → runtime}/build/billing-events.js +17 -19
- package/dist/packages/runtime/build/build-evidence.d.ts +16 -0
- package/dist/packages/runtime/build/build-evidence.js +179 -0
- package/dist/packages/{engine → runtime}/build/build-pipeline.d.ts +12 -8
- package/dist/packages/runtime/build/build-pipeline.js +388 -0
- package/dist/packages/{engine → runtime}/build/build-plan-primitives.d.ts +1 -1
- package/dist/packages/{engine → runtime}/build/build-plan-primitives.js +0 -1
- package/dist/packages/runtime/build/build-plan-runs.d.ts +14 -0
- package/dist/packages/runtime/build/build-plan-runs.js +31 -0
- package/dist/packages/runtime/build/build-stage-plan.d.ts +16 -0
- package/dist/packages/runtime/build/build-stage-plan.js +101 -0
- package/dist/packages/{engine → runtime}/build/build-stage-runner.d.ts +2 -1
- package/dist/packages/runtime/build/build-stage-runner.js +302 -0
- package/dist/packages/{engine → runtime}/build/build-target.d.ts +7 -4
- package/dist/packages/runtime/build/build-target.js +40 -0
- package/dist/packages/{engine → runtime}/build/check-evaluator.d.ts +14 -16
- package/dist/packages/runtime/build/check-evaluator.js +1226 -0
- package/dist/packages/runtime/build/context-graph-paths.d.ts +64 -0
- package/dist/packages/runtime/build/context-graph-paths.js +160 -0
- package/dist/packages/runtime/build/context-graph-schema.d.ts +19 -0
- package/dist/packages/runtime/build/context-graph-schema.js +39 -0
- package/dist/packages/{engine → runtime}/build/discovery.d.ts +2 -2
- package/dist/packages/{engine → runtime}/build/discovery.js +4 -4
- package/dist/packages/{engine → runtime}/build/index.d.ts +7 -5
- package/dist/packages/{engine → runtime}/build/index.js +7 -5
- package/dist/packages/runtime/build/inspect-map.d.ts +10 -0
- package/dist/packages/runtime/build/inspect-map.js +270 -0
- package/dist/packages/{engine → runtime}/build/lib/schema.d.ts +449 -123
- package/dist/packages/runtime/build/lib/schema.js +494 -0
- package/dist/packages/runtime/build/native-entrypoint.d.ts +2 -0
- package/dist/packages/runtime/build/native-entrypoint.js +286 -0
- package/dist/packages/runtime/build/reset.d.ts +2 -0
- package/dist/packages/runtime/build/reset.js +62 -0
- package/dist/packages/{engine → runtime}/build/runtime-contracts.js +13 -7
- package/dist/packages/runtime/build/runtime-inventory.d.ts +7 -0
- package/dist/packages/{engine → runtime}/build/runtime-inventory.js +3 -3
- package/dist/packages/runtime/build/runtime-log-paths.d.ts +3 -0
- package/dist/packages/runtime/build/runtime-log-paths.js +16 -0
- package/dist/packages/{engine → runtime}/build/runtime-prompt.js +12 -9
- package/dist/packages/{engine → runtime}/build/runtime-reconcile.d.ts +1 -1
- package/dist/packages/{engine → runtime}/build/runtime-reconcile.js +25 -21
- package/dist/packages/runtime/build/runtime-runs.d.ts +10 -0
- package/dist/packages/runtime/build/runtime-runs.js +318 -0
- package/dist/packages/{engine → runtime}/build/runtime-types.d.ts +9 -6
- package/dist/packages/runtime/build/runtime-types.js +1 -0
- package/dist/packages/runtime/build/runtime.d.ts +8 -0
- package/dist/packages/runtime/build/runtime.js +7 -0
- package/dist/packages/runtime/build/source-files.d.ts +58 -0
- package/dist/packages/runtime/build/source-files.js +193 -0
- package/dist/packages/runtime/build/source-inventory.d.ts +28 -0
- package/dist/packages/runtime/build/source-inventory.js +512 -0
- package/dist/packages/runtime/build/source-manifest.d.ts +63 -0
- package/dist/packages/runtime/build/source-manifest.js +220 -0
- package/dist/packages/runtime/build/stage-evidence.d.ts +22 -0
- package/dist/packages/runtime/build/stage-evidence.js +386 -0
- package/dist/packages/runtime/build/stage-manifest.d.ts +45 -0
- package/dist/packages/runtime/build/stage-manifest.js +1125 -0
- package/dist/packages/runtime/build/stage-reuse.d.ts +11 -0
- package/dist/packages/runtime/build/stage-reuse.js +154 -0
- package/dist/packages/runtime/build/stage-session.d.ts +81 -0
- package/dist/packages/runtime/build/stage-session.js +308 -0
- package/dist/packages/runtime/build/state-artifacts.d.ts +9 -0
- package/dist/packages/runtime/build/state-artifacts.js +14 -0
- package/dist/packages/runtime/build/state-health.d.ts +4 -0
- package/dist/packages/{engine → runtime}/build/state-health.js +21 -26
- package/dist/packages/runtime/build/state-io.d.ts +12 -0
- package/dist/packages/runtime/build/state-io.js +118 -0
- package/dist/packages/runtime/build/state-view.d.ts +5 -0
- package/dist/packages/runtime/build/state-view.js +121 -0
- package/dist/packages/runtime/build/state.d.ts +7 -0
- package/dist/packages/runtime/build/state.js +12 -0
- package/dist/packages/runtime/build/summary-coverage-index.d.ts +21 -0
- package/dist/packages/runtime/build/summary-coverage-index.js +189 -0
- package/dist/packages/runtime/build/traces.d.ts +30 -0
- package/dist/packages/runtime/build/traces.js +133 -0
- package/dist/packages/{engine/build/validate-verifiable-context.d.ts → runtime/build/validate-context-graph.d.ts} +6 -6
- package/dist/packages/{engine/build/validate-verifiable-context.js → runtime/build/validate-context-graph.js} +49 -36
- package/dist/packages/{engine → runtime}/build/validate.d.ts +5 -5
- package/dist/packages/{engine → runtime}/build/validate.js +26 -26
- package/dist/packages/{engine → runtime}/client.d.ts +18 -18
- package/dist/packages/{engine → runtime}/client.js +48 -36
- package/dist/packages/{engine → runtime}/connection-config.d.ts +3 -2
- package/dist/packages/{engine → runtime}/connection-config.js +9 -8
- package/dist/packages/runtime/context-checks.d.ts +10 -0
- package/dist/packages/runtime/context-checks.js +127 -0
- package/dist/packages/runtime/context-graph-scaffold.d.ts +9 -0
- package/dist/packages/runtime/context-graph-scaffold.js +135 -0
- package/dist/packages/runtime/context-graph-semantic-graph.d.ts +9 -0
- package/dist/packages/runtime/context-graph-semantic-graph.js +416 -0
- package/dist/packages/runtime/entitlement-guard.d.ts +43 -0
- package/dist/packages/runtime/entitlement-guard.js +70 -0
- package/dist/packages/{engine → runtime}/execution/index.d.ts +2 -2
- package/dist/packages/{engine → runtime}/execution/index.js +1 -1
- package/dist/packages/{engine → runtime}/execution/lib/schema.d.ts +272 -191
- package/dist/packages/{engine → runtime}/execution/lib/schema.js +35 -32
- package/dist/packages/runtime/index.d.ts +29 -0
- package/dist/packages/runtime/index.js +21 -0
- package/dist/packages/runtime/instance-paths.d.ts +30 -0
- package/dist/packages/runtime/instance-paths.js +29 -0
- package/dist/packages/runtime/native-run-handlers.d.ts +63 -0
- package/dist/packages/{engine → runtime}/native-run-handlers.js +217 -166
- package/dist/packages/runtime/plan-artifact-contract.d.ts +17 -0
- package/dist/packages/runtime/plan-artifact-contract.js +42 -0
- package/dist/packages/runtime/project-entries.d.ts +11 -0
- package/dist/packages/runtime/project-entries.js +49 -0
- package/dist/packages/runtime/project-source-state.d.ts +26 -0
- package/dist/packages/runtime/project-source-state.js +56 -0
- package/dist/packages/runtime/project-store.d.ts +90 -0
- package/dist/packages/runtime/project-store.js +195 -0
- package/dist/packages/runtime/requested-artifacts.d.ts +7 -0
- package/dist/packages/{engine → runtime}/requested-artifacts.js +23 -1
- package/dist/packages/{engine → runtime}/run-observability.d.ts +2 -1
- package/dist/packages/{engine → runtime}/run-observability.js +174 -87
- package/dist/packages/runtime/runtime-action-proposals.d.ts +7 -0
- package/dist/packages/runtime/runtime-action-proposals.js +542 -0
- package/dist/packages/runtime/runtime-build-plans.d.ts +5 -0
- package/dist/packages/runtime/runtime-build-plans.js +175 -0
- package/dist/packages/runtime/runtime-build-runs.d.ts +47 -0
- package/dist/packages/runtime/runtime-build-runs.js +555 -0
- package/dist/packages/runtime/runtime-caches.d.ts +117 -0
- package/dist/packages/runtime/runtime-caches.js +266 -0
- package/dist/packages/{engine → runtime}/runtime-event-applier.d.ts +3 -1
- package/dist/packages/{engine → runtime}/runtime-event-applier.js +53 -17
- package/dist/packages/runtime/runtime-executor.d.ts +22 -0
- package/dist/packages/runtime/runtime-executor.js +131 -0
- package/dist/packages/runtime/runtime-jobs.d.ts +13 -0
- package/dist/packages/runtime/runtime-jobs.js +463 -0
- package/dist/packages/runtime/runtime-observability.d.ts +11 -0
- package/dist/packages/runtime/runtime-observability.js +39 -0
- package/dist/packages/{engine → runtime}/runtime-persistence.d.ts +9 -18
- package/dist/packages/{engine → runtime}/runtime-persistence.js +25 -25
- package/dist/packages/runtime/runtime-project-mutations.d.ts +7 -0
- package/dist/packages/runtime/runtime-project-mutations.js +65 -0
- package/dist/packages/runtime/runtime-project-reads.d.ts +18 -0
- package/dist/packages/runtime/runtime-project-reads.js +574 -0
- package/dist/packages/runtime/runtime-proposal-helpers.d.ts +22 -0
- package/dist/packages/runtime/runtime-proposal-helpers.js +223 -0
- package/dist/packages/{engine → runtime}/runtime-resource-builders.d.ts +23 -16
- package/dist/packages/{engine → runtime}/runtime-resource-builders.js +58 -46
- package/dist/packages/runtime/runtime-status.d.ts +14 -0
- package/dist/packages/runtime/runtime-status.js +15 -0
- package/dist/packages/runtime/runtime-verify-runs.d.ts +84 -0
- package/dist/packages/runtime/runtime-verify-runs.js +296 -0
- package/dist/packages/runtime/runtime.d.ts +1582 -0
- package/dist/packages/runtime/runtime.js +431 -0
- package/dist/packages/runtime/schemas/actions.d.ts +1206 -0
- package/dist/packages/runtime/schemas/actions.js +117 -0
- package/dist/packages/runtime/schemas/agents.d.ts +104 -0
- package/dist/packages/runtime/schemas/agents.js +74 -0
- package/dist/packages/runtime/schemas/build-plans.d.ts +1132 -0
- package/dist/packages/runtime/schemas/build-plans.js +141 -0
- package/dist/packages/runtime/schemas/context-graphs.d.ts +1522 -0
- package/dist/packages/runtime/schemas/context-graphs.js +110 -0
- package/dist/packages/runtime/schemas/files.d.ts +227 -0
- package/dist/packages/runtime/schemas/files.js +28 -0
- package/dist/packages/runtime/schemas/index.d.ts +9 -0
- package/dist/packages/runtime/schemas/index.js +13 -0
- package/dist/packages/runtime/schemas/instance.d.ts +141 -0
- package/dist/packages/runtime/schemas/instance.js +143 -0
- package/dist/packages/runtime/schemas/jobs.d.ts +339 -0
- package/dist/packages/runtime/schemas/jobs.js +107 -0
- package/dist/packages/runtime/schemas/projects.d.ts +366 -0
- package/dist/packages/runtime/schemas/projects.js +160 -0
- package/dist/packages/runtime/schemas/runs.d.ts +3445 -0
- package/dist/packages/runtime/schemas/runs.js +115 -0
- package/dist/packages/runtime/service/index.d.ts +3 -0
- package/dist/packages/runtime/service/index.js +3 -0
- package/dist/packages/runtime/service/openapi.d.ts +7 -0
- package/dist/packages/runtime/service/openapi.js +118 -0
- package/dist/packages/runtime/service/operations.d.ts +3011 -0
- package/dist/packages/runtime/service/operations.js +375 -0
- package/dist/packages/runtime/service/routes.d.ts +114 -0
- package/dist/packages/runtime/service/routes.js +128 -0
- package/dist/packages/runtime/service/server-api-files.d.ts +10 -0
- package/dist/packages/runtime/service/server-api-files.js +85 -0
- package/dist/packages/runtime/service/server-app-boot.d.ts +4 -0
- package/dist/packages/runtime/service/server-app-boot.js +46 -0
- package/dist/packages/runtime/service/server-guards.d.ts +63 -0
- package/dist/packages/runtime/service/server-guards.js +181 -0
- package/dist/packages/runtime/service/server-helpers.d.ts +38 -0
- package/dist/packages/runtime/service/server-helpers.js +108 -0
- package/dist/packages/runtime/service/server-instance-helpers.d.ts +30 -0
- package/dist/packages/runtime/service/server-instance-helpers.js +114 -0
- package/dist/packages/runtime/service/server-routes-action-proposals.d.ts +3 -0
- package/dist/packages/runtime/service/server-routes-action-proposals.js +45 -0
- package/dist/packages/runtime/service/server-routes-agents.d.ts +4 -0
- package/dist/packages/runtime/service/server-routes-agents.js +132 -0
- package/dist/packages/runtime/service/server-routes-auth.d.ts +33 -0
- package/dist/packages/runtime/service/server-routes-auth.js +138 -0
- package/dist/packages/runtime/service/server-routes-build-plans.d.ts +3 -0
- package/dist/packages/runtime/service/server-routes-build-plans.js +86 -0
- package/dist/packages/runtime/service/server-routes-discovery.d.ts +4 -0
- package/dist/packages/runtime/service/server-routes-discovery.js +196 -0
- package/dist/packages/runtime/service/server-routes-events.d.ts +5 -0
- package/dist/packages/runtime/service/server-routes-events.js +99 -0
- package/dist/packages/runtime/service/server-routes-project-context.d.ts +9 -0
- package/dist/packages/runtime/service/server-routes-project-context.js +287 -0
- package/dist/packages/runtime/service/server-routes-project-jobs.d.ts +9 -0
- package/dist/packages/runtime/service/server-routes-project-jobs.js +137 -0
- package/dist/packages/runtime/service/server-routes-project-runs.d.ts +14 -0
- package/dist/packages/runtime/service/server-routes-project-runs.js +88 -0
- package/dist/packages/runtime/service/server-routes-projects.d.ts +4 -0
- package/dist/packages/runtime/service/server-routes-projects.js +96 -0
- package/dist/packages/runtime/service/server-routes-runs.d.ts +3 -0
- package/dist/packages/runtime/service/server-routes-runs.js +119 -0
- package/dist/packages/runtime/service/server.d.ts +37 -0
- package/dist/packages/runtime/service/server.js +300 -0
- package/dist/packages/{engine → runtime/service}/service-registry.d.ts +5 -5
- package/dist/packages/{engine → runtime/service}/service-registry.js +7 -7
- package/dist/packages/runtime/verify/benchmark-run.d.ts +81 -0
- package/dist/packages/runtime/verify/benchmark-run.js +303 -0
- package/dist/packages/{engine → runtime}/verify/index.d.ts +2 -2
- package/dist/packages/{engine → runtime}/verify/index.js +1 -1
- package/dist/packages/{engine → runtime}/verify/lib/schema.d.ts +83 -16
- package/dist/packages/{engine → runtime}/verify/lib/schema.js +38 -18
- package/dist/packages/runtime/verify/test-file-guard.d.ts +2 -0
- package/dist/packages/runtime/verify/test-file-guard.js +29 -0
- package/dist/packages/{engine → runtime}/verify/verify-execution.d.ts +7 -0
- package/dist/packages/{engine → runtime}/verify/verify-execution.js +119 -45
- package/dist/packages/{engine → runtime}/verify/verify-paths.d.ts +5 -4
- package/dist/packages/runtime/verify/verify-paths.js +65 -0
- package/dist/packages/{engine → runtime}/verify/verify-sandbox.d.ts +1 -1
- package/dist/packages/runtime/verify/verify-sandbox.js +88 -0
- package/dist/packages/{engine → runtime}/verify/verify-specs.d.ts +2 -0
- package/dist/packages/runtime/verify/verify-specs.js +126 -0
- package/dist/packages/runtime/verify/verify-targets.d.ts +5 -0
- package/dist/packages/{engine → runtime}/verify/verify-targets.js +12 -12
- package/dist/packages/runtime/verify/verify-types.js +1 -0
- package/dist/packages/{engine → runtime}/verify/verify.d.ts +1 -1
- package/dist/packages/{engine → runtime}/verify/verify.js +1 -1
- package/dist/packages/runtime/wire-schemas.d.ts +18 -0
- package/dist/packages/runtime/wire-schemas.js +27 -0
- package/package.json +32 -30
- package/public-repo/CONTRIBUTING.md +16 -18
- package/public-repo/README.md +119 -282
- package/public-repo/SECURITY.md +3 -4
- package/public-repo/build-plans/interf-default/README.md +24 -16
- package/public-repo/build-plans/interf-default/build/stages/entrypoint/SKILL.md +74 -0
- package/public-repo/build-plans/interf-default/build/stages/knowledge/SKILL.md +95 -0
- package/public-repo/build-plans/interf-default/build/stages/summarize/SKILL.md +49 -4
- package/public-repo/build-plans/interf-default/build-plan.json +49 -39
- package/public-repo/build-plans/interf-default/build-plan.schema.json +59 -33
- package/public-repo/build-plans/interf-default/improve/SKILL.md +3 -3
- package/public-repo/build-plans/interf-default/use/query/SKILL.md +18 -11
- package/public-repo/openapi/local-service.openapi.json +14227 -0
- package/public-repo/skills/interf/SKILL.md +508 -187
- package/dist/cli/commands/prep.d.ts +0 -2
- package/dist/cli/commands/prep.js +0 -240
- package/dist/cli/commands/test.d.ts +0 -10
- package/dist/cli/commands/test.js +0 -85
- package/dist/cli/commands/web.d.ts +0 -2
- package/dist/cli/commands/web.js +0 -286
- package/dist/interf-ui/404.html +0 -1
- package/dist/interf-ui/__next.__PAGE__.txt +0 -10
- package/dist/interf-ui/__next._full.txt +0 -20
- package/dist/interf-ui/__next._head.txt +0 -5
- package/dist/interf-ui/__next._index.txt +0 -5
- package/dist/interf-ui/__next._tree.txt +0 -5
- package/dist/interf-ui/_next/static/--reS3xBzM5zc6QxNjZd6/_buildManifest.js +0 -11
- package/dist/interf-ui/_next/static/--reS3xBzM5zc6QxNjZd6/_clientMiddlewareManifest.js +0 -1
- package/dist/interf-ui/_next/static/--reS3xBzM5zc6QxNjZd6/_ssgManifest.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0.tjb6f4golw..css +0 -3
- package/dist/interf-ui/_next/static/chunks/03~yq9q893hmn.js +0 -1
- package/dist/interf-ui/_next/static/chunks/085-n_jv2ng_q.css +0 -1
- package/dist/interf-ui/_next/static/chunks/0dn41fa_zvgsl.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0g-ea0zj5d-0k.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0gwqglc4iz583.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0haldgm65ve6l.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0nv3am99vjzn4.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0s77gt_o4jwtx.js +0 -1
- package/dist/interf-ui/_next/static/chunks/0y5z3t-z1c8ks.js.map +0 -5
- package/dist/interf-ui/_next/static/chunks/0~a36ujuzpaz..js +0 -116
- package/dist/interf-ui/_next/static/chunks/10jeodxe4nkgj.js +0 -31
- package/dist/interf-ui/_next/static/chunks/119h2rouych2t.js +0 -1
- package/dist/interf-ui/_next/static/chunks/13c8b~m8knjsf.js +0 -1
- package/dist/interf-ui/_next/static/chunks/14dznb2qpt-ho.js +0 -91
- package/dist/interf-ui/_next/static/chunks/15z_en80lrq-3.js +0 -5
- package/dist/interf-ui/_next/static/chunks/turbopack-0p.pvcjrtq-jh.js +0 -1
- package/dist/interf-ui/_next/static/chunks/turbopack-0usj_75.8frlw.js +0 -1
- package/dist/interf-ui/_next/static/chunks/turbopack-worker-0sjn--fhq~1cg.js +0 -1
- package/dist/interf-ui/_next/static/media/GeistMono_Variable.p.17jn9btb_52pq.woff2 +0 -0
- package/dist/interf-ui/_next/static/media/Geist_Variable-s.p.0-te~ja_gpvcf.woff2 +0 -0
- package/dist/interf-ui/_next/static/media/worker.102zas1s52_pf.js +0 -109
- package/dist/interf-ui/_not-found/__next._full.txt +0 -15
- package/dist/interf-ui/_not-found/__next._head.txt +0 -5
- package/dist/interf-ui/_not-found/__next._index.txt +0 -5
- package/dist/interf-ui/_not-found/__next._not-found.__PAGE__.txt +0 -5
- package/dist/interf-ui/_not-found/__next._not-found.txt +0 -5
- package/dist/interf-ui/_not-found/__next._tree.txt +0 -2
- package/dist/interf-ui/_not-found.html +0 -1
- package/dist/interf-ui/_not-found.txt +0 -15
- package/dist/interf-ui/index.html +0 -1
- package/dist/interf-ui/index.txt +0 -20
- package/dist/packages/contracts/lib/preparation-paths.d.ts +0 -117
- package/dist/packages/contracts/lib/preparation-paths.js +0 -177
- package/dist/packages/engine/action-definitions.d.ts +0 -407
- package/dist/packages/engine/action-definitions.js +0 -1158
- package/dist/packages/engine/action-values.d.ts +0 -1
- package/dist/packages/engine/action-values.js +0 -1
- package/dist/packages/engine/agents/lib/args.d.ts +0 -4
- package/dist/packages/engine/agents/lib/args.js +0 -52
- package/dist/packages/engine/agents/lib/chart-guidance.d.ts +0 -1
- package/dist/packages/engine/agents/lib/chart-guidance.js +0 -8
- package/dist/packages/engine/agents/lib/constants.js +0 -28
- package/dist/packages/engine/agents/lib/logs.d.ts +0 -2
- package/dist/packages/engine/agents/lib/logs.js +0 -17
- package/dist/packages/engine/agents/lib/render.d.ts +0 -8
- package/dist/packages/engine/agents/lib/schema.d.ts +0 -8
- package/dist/packages/engine/agents/lib/schema.js +0 -7
- package/dist/packages/engine/agents/lib/shells.d.ts +0 -74
- package/dist/packages/engine/agents/lib/shells.js +0 -1052
- package/dist/packages/engine/agents/lib/verifiable-context-bootstrap.d.ts +0 -3
- package/dist/packages/engine/build/artifact-counts.d.ts +0 -1
- package/dist/packages/engine/build/billing-events.d.ts +0 -89
- package/dist/packages/engine/build/build-pipeline.js +0 -175
- package/dist/packages/engine/build/build-plan-runs.d.ts +0 -14
- package/dist/packages/engine/build/build-plan-runs.js +0 -31
- package/dist/packages/engine/build/build-stage-plan.d.ts +0 -16
- package/dist/packages/engine/build/build-stage-plan.js +0 -100
- package/dist/packages/engine/build/build-stage-runner.js +0 -94
- package/dist/packages/engine/build/build-target.js +0 -16
- package/dist/packages/engine/build/check-evaluator.js +0 -298
- package/dist/packages/engine/build/lib/schema.js +0 -316
- package/dist/packages/engine/build/reset.d.ts +0 -2
- package/dist/packages/engine/build/reset.js +0 -74
- package/dist/packages/engine/build/runtime-inventory.d.ts +0 -7
- package/dist/packages/engine/build/runtime-paths.d.ts +0 -8
- package/dist/packages/engine/build/runtime-paths.js +0 -26
- package/dist/packages/engine/build/runtime-runs.d.ts +0 -10
- package/dist/packages/engine/build/runtime-runs.js +0 -224
- package/dist/packages/engine/build/runtime.d.ts +0 -5
- package/dist/packages/engine/build/runtime.js +0 -4
- package/dist/packages/engine/build/source-files.d.ts +0 -46
- package/dist/packages/engine/build/source-files.js +0 -149
- package/dist/packages/engine/build/state-artifacts.d.ts +0 -9
- package/dist/packages/engine/build/state-artifacts.js +0 -14
- package/dist/packages/engine/build/state-health.d.ts +0 -4
- package/dist/packages/engine/build/state-io.d.ts +0 -11
- package/dist/packages/engine/build/state-io.js +0 -82
- package/dist/packages/engine/build/state-paths.d.ts +0 -5
- package/dist/packages/engine/build/state-paths.js +0 -16
- package/dist/packages/engine/build/state-view.d.ts +0 -5
- package/dist/packages/engine/build/state-view.js +0 -94
- package/dist/packages/engine/build/state.d.ts +0 -7
- package/dist/packages/engine/build/state.js +0 -12
- package/dist/packages/engine/build/validate-helpers.d.ts +0 -12
- package/dist/packages/engine/build/validate-helpers.js +0 -41
- package/dist/packages/engine/build/verifiable-context-paths.d.ts +0 -47
- package/dist/packages/engine/build/verifiable-context-paths.js +0 -121
- package/dist/packages/engine/build/verifiable-context-schema.d.ts +0 -21
- package/dist/packages/engine/build/verifiable-context-schema.js +0 -126
- package/dist/packages/engine/cloud-seams.d.ts +0 -115
- package/dist/packages/engine/cloud-seams.js +0 -84
- package/dist/packages/engine/index.d.ts +0 -22
- package/dist/packages/engine/index.js +0 -15
- package/dist/packages/engine/instance-paths.d.ts +0 -106
- package/dist/packages/engine/instance-paths.js +0 -171
- package/dist/packages/engine/lib/schema.d.ts +0 -6304
- package/dist/packages/engine/lib/schema.js +0 -730
- package/dist/packages/engine/native-run-handlers.d.ts +0 -25
- package/dist/packages/engine/preparation-store.d.ts +0 -105
- package/dist/packages/engine/preparation-store.js +0 -213
- package/dist/packages/engine/readiness-check-draft.d.ts +0 -20
- package/dist/packages/engine/readiness-check-draft.js +0 -111
- package/dist/packages/engine/requested-artifacts.d.ts +0 -5
- package/dist/packages/engine/routes.d.ts +0 -85
- package/dist/packages/engine/routes.js +0 -99
- package/dist/packages/engine/runtime-caches.d.ts +0 -76
- package/dist/packages/engine/runtime-caches.js +0 -191
- package/dist/packages/engine/runtime-proposal-helpers.d.ts +0 -35
- package/dist/packages/engine/runtime-proposal-helpers.js +0 -247
- package/dist/packages/engine/runtime.d.ts +0 -371
- package/dist/packages/engine/runtime.js +0 -2463
- package/dist/packages/engine/server.d.ts +0 -58
- package/dist/packages/engine/server.js +0 -1399
- package/dist/packages/engine/verify/readiness-check-run.d.ts +0 -82
- package/dist/packages/engine/verify/readiness-check-run.js +0 -265
- package/dist/packages/engine/verify/verify-paths.js +0 -61
- package/dist/packages/engine/verify/verify-sandbox.js +0 -88
- package/dist/packages/engine/verify/verify-specs.js +0 -114
- package/dist/packages/engine/verify/verify-targets.d.ts +0 -5
- package/dist/packages/engine/wire-schemas.d.ts +0 -547
- package/dist/packages/engine/wire-schemas.js +0 -59
- package/dist/packages/project/index.d.ts +0 -9
- package/dist/packages/project/interf-bootstrap.d.ts +0 -1
- package/dist/packages/project/interf-bootstrap.js +0 -1
- package/dist/packages/project/interf-scaffold.d.ts +0 -3
- package/dist/packages/project/interf-scaffold.js +0 -136
- package/dist/packages/project/interf.d.ts +0 -4
- package/dist/packages/project/interf.js +0 -3
- package/dist/packages/project/lib/schema.d.ts +0 -328
- package/dist/packages/project/lib/schema.js +0 -136
- package/dist/packages/project/preparation-entries.d.ts +0 -11
- package/dist/packages/project/preparation-entries.js +0 -49
- package/dist/packages/project/source-config.d.ts +0 -46
- package/dist/packages/project/source-config.js +0 -394
- package/dist/packages/project/source-folders.d.ts +0 -11
- package/public-repo/build-plans/interf-default/build/stages/shape/SKILL.md +0 -27
- package/public-repo/build-plans/interf-default/build/stages/structure/SKILL.md +0 -21
- package/public-repo/plugins/README.md +0 -9
- package/public-repo/plugins/interf/.claude-plugin/plugin.json +0 -21
- package/public-repo/plugins/interf/.mcp.json +0 -12
- package/public-repo/plugins/interf/README.md +0 -32
- package/public-repo/plugins/interf/skills/interf/SKILL.md +0 -376
- /package/dist/packages/{engine/agents/lib/types.js → runtime/actions/fields.js} +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/agents.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/agents.js +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/execution.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/preflight.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/agents/lib/status.d.ts +0 -0
- /package/dist/packages/{engine/build/runtime-types.js → runtime/agents/lib/types.js} +0 -0
- /package/dist/packages/{engine/verify/verify-types.js → runtime/agents/providers/types.js} +0 -0
- /package/dist/packages/{engine → runtime}/agents/role-router.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/build/build-execution.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/build/build-execution.js +0 -0
- /package/dist/packages/{engine → runtime}/build/runtime-contracts.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/build/runtime-prompt.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/execution/adapters.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/execution/adapters.js +0 -0
- /package/dist/packages/{engine → runtime}/execution/events.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/execution/events.js +0 -0
- /package/dist/packages/{engine → runtime}/verify/verify-profile-presets.d.ts +0 -0
- /package/dist/packages/{engine → runtime}/verify/verify-profile-presets.js +0 -0
- /package/dist/packages/{engine → runtime}/verify/verify-types.d.ts +0 -0
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import { opendirSync, realpathSync, statSync } from "node:fs";
|
|
2
|
+
import { extname, join } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Cheap, contents-free Source scan for Build Plan authoring.
|
|
5
|
+
*
|
|
6
|
+
* The Build Plan authoring agent locks a plan skeleton before reading any
|
|
7
|
+
* Source file. Without an inventory it defaults to a generic 4-stage plan
|
|
8
|
+
* for every Source. This scan gives the draft agent a real, task-agnostic
|
|
9
|
+
* map of the Source up front so it can shape stages to what is actually
|
|
10
|
+
* there.
|
|
11
|
+
*
|
|
12
|
+
* Guarantees:
|
|
13
|
+
* - Never opens or reads file contents. It only lists directory entries and
|
|
14
|
+
* parses names/extensions. Source files stay read-only and unread.
|
|
15
|
+
* - Generic: no intent keywords, no task taxonomy, no per-Project answers.
|
|
16
|
+
* It works for a folder of calls, PDFs, a codebase, or anything else.
|
|
17
|
+
* - O(file-listing) with hard caps so a pathological tree (deep nesting,
|
|
18
|
+
* huge fan-out) can never turn the scan into a recursion or time bomb.
|
|
19
|
+
*/
|
|
20
|
+
const MAX_ENTRIES = 20000;
|
|
21
|
+
const MAX_DEPTH = 6;
|
|
22
|
+
const MAX_FOLDER_ITEMS = 40;
|
|
23
|
+
const MAX_SAMPLE_NAMES = 6;
|
|
24
|
+
const MAX_OBSERVATIONS = 24;
|
|
25
|
+
const IGNORED_ENTRY_NAMES = new Set([
|
|
26
|
+
".git",
|
|
27
|
+
".interf",
|
|
28
|
+
"node_modules",
|
|
29
|
+
".DS_Store",
|
|
30
|
+
".cache",
|
|
31
|
+
"__pycache__",
|
|
32
|
+
".venv",
|
|
33
|
+
".svn",
|
|
34
|
+
".hg",
|
|
35
|
+
]);
|
|
36
|
+
// Canonical, task-agnostic file kinds. Mirrors the Source Manifest kind
|
|
37
|
+
// vocabulary (pdf, document, spreadsheet, presentation, image, text, other)
|
|
38
|
+
// plus coarse buckets that are useful for plan shaping (code, data, audio,
|
|
39
|
+
// video, archive). No kind is intent-specific.
|
|
40
|
+
function classifyKind(extension) {
|
|
41
|
+
const ext = extension.replace(/^\./, "").toLowerCase();
|
|
42
|
+
if (!ext)
|
|
43
|
+
return "no-extension";
|
|
44
|
+
if (ext === "pdf")
|
|
45
|
+
return "pdf";
|
|
46
|
+
if (["doc", "docx", "rtf", "odt", "pages"].includes(ext))
|
|
47
|
+
return "document";
|
|
48
|
+
if (["csv", "tsv", "xls", "xlsx", "ods", "numbers", "parquet"].includes(ext)) {
|
|
49
|
+
return "spreadsheet";
|
|
50
|
+
}
|
|
51
|
+
if (["ppt", "pptx", "odp", "key"].includes(ext))
|
|
52
|
+
return "presentation";
|
|
53
|
+
if (["jpg", "jpeg", "png", "gif", "webp", "svg", "heic", "tiff", "bmp"].includes(ext)) {
|
|
54
|
+
return "image";
|
|
55
|
+
}
|
|
56
|
+
if (["mp3", "wav", "m4a", "aac", "flac", "ogg", "aiff"].includes(ext))
|
|
57
|
+
return "audio";
|
|
58
|
+
if (["mp4", "mov", "avi", "mkv", "webm", "m4v"].includes(ext))
|
|
59
|
+
return "video";
|
|
60
|
+
if (["zip", "tar", "gz", "tgz", "bz2", "7z", "rar"].includes(ext))
|
|
61
|
+
return "archive";
|
|
62
|
+
if (["md", "markdown", "txt", "text"].includes(ext))
|
|
63
|
+
return "text";
|
|
64
|
+
if (["json", "ndjson", "yaml", "yml", "xml", "toml", "ini"].includes(ext))
|
|
65
|
+
return "data";
|
|
66
|
+
if ([
|
|
67
|
+
"ts", "tsx", "js", "jsx", "mjs", "cjs", "py", "rb", "go", "rs", "java",
|
|
68
|
+
"kt", "c", "h", "cpp", "hpp", "cs", "php", "swift", "sh", "sql", "html",
|
|
69
|
+
"css", "scss", "vue", "svelte",
|
|
70
|
+
].includes(ext)) {
|
|
71
|
+
return "code";
|
|
72
|
+
}
|
|
73
|
+
return "other";
|
|
74
|
+
}
|
|
75
|
+
// Bare year (2019), year-month (2024-03, 2024_03), or full date
|
|
76
|
+
// (2024-03-15, 20240315) appearing in a filename. Filename-only; we never
|
|
77
|
+
// read file contents to find dates.
|
|
78
|
+
const DATE_TOKEN = /\b(19|20)\d{2}([-_./]?(0[1-9]|1[0-2]))?([-_./]?(0[1-9]|[12]\d|3[01]))?\b/g;
|
|
79
|
+
function extractDateTokens(name) {
|
|
80
|
+
const matches = name.match(DATE_TOKEN);
|
|
81
|
+
if (!matches)
|
|
82
|
+
return [];
|
|
83
|
+
return matches.filter((token) => /^(19|20)\d{2}/.test(token));
|
|
84
|
+
}
|
|
85
|
+
function makeFolder() {
|
|
86
|
+
return { fileCount: 0, kinds: new Map(), sampleNames: [] };
|
|
87
|
+
}
|
|
88
|
+
function recordFile(folder, name) {
|
|
89
|
+
folder.fileCount += 1;
|
|
90
|
+
const kind = classifyKind(extname(name));
|
|
91
|
+
folder.kinds.set(kind, (folder.kinds.get(kind) ?? 0) + 1);
|
|
92
|
+
if (folder.sampleNames.length < MAX_SAMPLE_NAMES) {
|
|
93
|
+
folder.sampleNames.push(name);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function kindSummary(kinds) {
|
|
97
|
+
return [...kinds.entries()]
|
|
98
|
+
.sort((a, b) => b[1] - a[1])
|
|
99
|
+
.map(([kind, count]) => `${count} ${kind}`)
|
|
100
|
+
.join(", ");
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Resolve a directory entry to a coarse type, following symlinks.
|
|
104
|
+
*
|
|
105
|
+
* `Dirent` reports the type of the entry itself, so a symlink is neither a
|
|
106
|
+
* file nor a directory and would be dropped. The Source can legitimately be
|
|
107
|
+
* (or contain) symlinked files and dirs — mirroring the repo walker in
|
|
108
|
+
* contracts/utils/filesystem.ts, we stat the link target and classify the
|
|
109
|
+
* entry as the target's type. Broken or inaccessible links resolve to
|
|
110
|
+
* "other" and are skipped. We never read file contents here.
|
|
111
|
+
*/
|
|
112
|
+
function resolveEntryType(fullPath, isSymlink, isDir, isFile) {
|
|
113
|
+
if (isDir)
|
|
114
|
+
return { type: "dir", realDir: null };
|
|
115
|
+
if (isFile)
|
|
116
|
+
return { type: "file", realDir: null };
|
|
117
|
+
if (!isSymlink)
|
|
118
|
+
return { type: "other", realDir: null };
|
|
119
|
+
// Symlink: stat (follows the link) to learn the target's real type.
|
|
120
|
+
try {
|
|
121
|
+
const target = statSync(fullPath);
|
|
122
|
+
if (target.isDirectory()) {
|
|
123
|
+
// Need the canonical target path to guard against symlink cycles.
|
|
124
|
+
let realDir = null;
|
|
125
|
+
try {
|
|
126
|
+
realDir = realpathSync(fullPath);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
realDir = null;
|
|
130
|
+
}
|
|
131
|
+
return { type: "dir", realDir };
|
|
132
|
+
}
|
|
133
|
+
if (target.isFile())
|
|
134
|
+
return { type: "file", realDir: null };
|
|
135
|
+
return { type: "other", realDir: null };
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Broken or inaccessible link.
|
|
139
|
+
return { type: "other", realDir: null };
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Walk the Source tree shallowly and group counts by the top-level folder
|
|
144
|
+
* (files directly under the root group under "."). Bounded by MAX_ENTRIES
|
|
145
|
+
* and MAX_DEPTH so the cost is always O(file-listing) with a ceiling.
|
|
146
|
+
*
|
|
147
|
+
* Directories are streamed via `opendirSync` and read one entry at a time so
|
|
148
|
+
* a pathological directory with hundreds of thousands of entries can never be
|
|
149
|
+
* materialized into a single array — the MAX_ENTRIES ceiling is enforced
|
|
150
|
+
* while iterating, and iteration stops the moment it is hit. Symlinked files
|
|
151
|
+
* and directories are followed (with cycle protection) so a Source built from
|
|
152
|
+
* symlinks is counted instead of silently yielding an empty inventory.
|
|
153
|
+
*/
|
|
154
|
+
function scan(sourceFolderPath) {
|
|
155
|
+
const folders = new Map();
|
|
156
|
+
const totalKinds = new Map();
|
|
157
|
+
const dateTokens = [];
|
|
158
|
+
let totalFiles = 0;
|
|
159
|
+
let visited = 0;
|
|
160
|
+
let truncated = false;
|
|
161
|
+
// A read failure on the Source root itself (permission denied, path is a
|
|
162
|
+
// file, etc.) means a real Source may exist but Interf could not enumerate
|
|
163
|
+
// it. That is distinct from an empty-but-readable Source and must not be
|
|
164
|
+
// silently flattened into the same "no inventory" result. ENOENT (the root
|
|
165
|
+
// is simply not there) is treated as empty, not as a read failure.
|
|
166
|
+
let rootReadError = null;
|
|
167
|
+
// Canonical paths of directories already walked. Following symlinked dirs
|
|
168
|
+
// can introduce cycles; this set keeps the walk finite. Seeded lazily with
|
|
169
|
+
// each directory's realpath as it is opened.
|
|
170
|
+
const visitedDirs = new Set();
|
|
171
|
+
// Stack-based shallow walk. Each entry carries the absolute dir path, its
|
|
172
|
+
// depth, and the top-level group it rolls up into.
|
|
173
|
+
const stack = [
|
|
174
|
+
{ dir: sourceFolderPath, depth: 0, group: "." },
|
|
175
|
+
];
|
|
176
|
+
while (stack.length > 0) {
|
|
177
|
+
if (visited >= MAX_ENTRIES) {
|
|
178
|
+
truncated = true;
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
const { dir, depth, group } = stack.pop();
|
|
182
|
+
// Cycle guard: skip a directory whose canonical path we have already
|
|
183
|
+
// walked (reached again through a symlink).
|
|
184
|
+
let canonicalDir;
|
|
185
|
+
try {
|
|
186
|
+
canonicalDir = realpathSync(dir);
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
canonicalDir = dir;
|
|
190
|
+
}
|
|
191
|
+
if (visitedDirs.has(canonicalDir))
|
|
192
|
+
continue;
|
|
193
|
+
visitedDirs.add(canonicalDir);
|
|
194
|
+
// Stream the directory: opendirSync yields one Dirent at a time so a
|
|
195
|
+
// directory with 100k+ entries is never materialized as an array. We
|
|
196
|
+
// stop reading as soon as the MAX_ENTRIES budget is exhausted.
|
|
197
|
+
let handle;
|
|
198
|
+
try {
|
|
199
|
+
handle = opendirSync(dir);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
// A failure to open the Source root is a read failure we must surface,
|
|
203
|
+
// not swallow — otherwise an unreadable Source produces the same empty
|
|
204
|
+
// inventory as a genuinely empty one and the draft silently goes
|
|
205
|
+
// generic. ENOENT (root absent) is left as the empty/null case so an
|
|
206
|
+
// unbound or missing Source still degrades quietly. Failures on nested
|
|
207
|
+
// directories during the walk stay tolerated: they yield a partial
|
|
208
|
+
// inventory, which the truncation note already covers.
|
|
209
|
+
if (depth === 0) {
|
|
210
|
+
const errno = error;
|
|
211
|
+
if (errno?.code !== "ENOENT")
|
|
212
|
+
rootReadError = errno;
|
|
213
|
+
}
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
try {
|
|
217
|
+
let entry = handle.readSync();
|
|
218
|
+
while (entry !== null) {
|
|
219
|
+
if (visited >= MAX_ENTRIES) {
|
|
220
|
+
truncated = true;
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
const name = entry.name;
|
|
224
|
+
if (IGNORED_ENTRY_NAMES.has(name) || name.startsWith(".")) {
|
|
225
|
+
entry = handle.readSync();
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
visited += 1;
|
|
229
|
+
const resolved = resolveEntryType(join(dir, name), entry.isSymbolicLink(), entry.isDirectory(), entry.isFile());
|
|
230
|
+
if (resolved.type === "dir") {
|
|
231
|
+
// At the root, each subfolder becomes its own top-level group.
|
|
232
|
+
const childGroup = depth === 0 ? name : group;
|
|
233
|
+
if (!folders.has(childGroup))
|
|
234
|
+
folders.set(childGroup, makeFolder());
|
|
235
|
+
if (depth + 1 <= MAX_DEPTH) {
|
|
236
|
+
if (!(resolved.realDir !== null && visitedDirs.has(resolved.realDir))) {
|
|
237
|
+
stack.push({ dir: join(dir, name), depth: depth + 1, group: childGroup });
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
truncated = true;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
else if (resolved.type === "file") {
|
|
245
|
+
const folder = folders.get(group) ?? makeFolder();
|
|
246
|
+
if (!folders.has(group))
|
|
247
|
+
folders.set(group, folder);
|
|
248
|
+
recordFile(folder, name);
|
|
249
|
+
totalFiles += 1;
|
|
250
|
+
const kind = classifyKind(extname(name));
|
|
251
|
+
totalKinds.set(kind, (totalKinds.get(kind) ?? 0) + 1);
|
|
252
|
+
for (const token of extractDateTokens(name))
|
|
253
|
+
dateTokens.push(token);
|
|
254
|
+
}
|
|
255
|
+
entry = handle.readSync();
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
finally {
|
|
259
|
+
handle.closeSync();
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return { folders, totalFiles, totalKinds, dateTokens, truncated, rootReadError };
|
|
263
|
+
}
|
|
264
|
+
function dateRange(tokens) {
|
|
265
|
+
if (tokens.length === 0)
|
|
266
|
+
return null;
|
|
267
|
+
// Compare on a normalized digits-only key so 2024-03 sorts against
|
|
268
|
+
// 20240315 consistently; report the original tokens for the bounds.
|
|
269
|
+
// Drop any token whose normalized key is not a YYYY[MMDD] digit key — a
|
|
270
|
+
// malformed or separator-only token must never become a reported date
|
|
271
|
+
// bound, which would feed the draft a misleading "Filenames span X to Y".
|
|
272
|
+
const keyed = tokens
|
|
273
|
+
.map((token) => ({
|
|
274
|
+
token,
|
|
275
|
+
key: token.replace(/[-_./]/g, "").padEnd(8, "0"),
|
|
276
|
+
}))
|
|
277
|
+
.filter(({ key }) => /^(19|20)\d{6}$/.test(key));
|
|
278
|
+
if (keyed.length === 0)
|
|
279
|
+
return null;
|
|
280
|
+
keyed.sort((a, b) => a.key.localeCompare(b.key));
|
|
281
|
+
return { min: keyed[0].token, max: keyed[keyed.length - 1].token };
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Build the SourceContext returned when the Source root could not be read.
|
|
285
|
+
*
|
|
286
|
+
* A read failure is NOT the empty/null case: returning null here would let the
|
|
287
|
+
* draft go generic as if the Source had no files, hiding a real Source that
|
|
288
|
+
* Interf simply could not enumerate (permission denied, path is a file, etc.).
|
|
289
|
+
* Instead we surface a populated SourceContext whose limitations make the
|
|
290
|
+
* failure explicit, so the authoring agent sees it and does not lock a generic
|
|
291
|
+
* plan on a false "empty Source" reading. No file is ever opened or read.
|
|
292
|
+
*/
|
|
293
|
+
function readErrorContext(sourceFolderPath, error) {
|
|
294
|
+
const code = error?.code ? ` (${error.code})` : "";
|
|
295
|
+
return {
|
|
296
|
+
summary: "Contents-free Source scan could not read the Source root" +
|
|
297
|
+
`${code}; no inventory was produced.`,
|
|
298
|
+
items: [],
|
|
299
|
+
observations: [
|
|
300
|
+
`Interf could not enumerate the Source at ${sourceFolderPath}${code}.`,
|
|
301
|
+
],
|
|
302
|
+
limitations: [
|
|
303
|
+
"Interf could not read the Source root, so this is NOT an empty Source. " +
|
|
304
|
+
"Do not lock a generic plan: inspect the Source through your own tools " +
|
|
305
|
+
"and confirm access before shaping stages.",
|
|
306
|
+
],
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Produce a populated SourceContext for the authoring agent from a cheap,
|
|
311
|
+
* contents-free scan. Returns null when the Source has no readable files so
|
|
312
|
+
* callers can fall back to the existing null (no fabricated inventory). A
|
|
313
|
+
* genuine read failure on the Source root returns an explicit read-error
|
|
314
|
+
* SourceContext instead, so an unreadable Source never silently degrades into
|
|
315
|
+
* a generic plan.
|
|
316
|
+
*/
|
|
317
|
+
export function scanSourceContext(sourceFolderPath) {
|
|
318
|
+
let result;
|
|
319
|
+
try {
|
|
320
|
+
result = scan(sourceFolderPath);
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
// scan() handles its own root-open failure, so a throw here is unexpected.
|
|
324
|
+
// Classify it the same way: a non-ENOENT errno is a read failure that must
|
|
325
|
+
// be surfaced, not flattened into the empty/null result; ENOENT (or a
|
|
326
|
+
// non-errno) stays the quiet empty case.
|
|
327
|
+
const errno = error;
|
|
328
|
+
if (errno?.code && errno.code !== "ENOENT") {
|
|
329
|
+
return readErrorContext(sourceFolderPath, errno);
|
|
330
|
+
}
|
|
331
|
+
return null;
|
|
332
|
+
}
|
|
333
|
+
// A read failure on the Source root with nothing enumerated is distinct from
|
|
334
|
+
// a genuinely empty Source: surface it loudly so the draft never goes generic
|
|
335
|
+
// on a false "empty" reading.
|
|
336
|
+
if (result.totalFiles === 0 && result.rootReadError) {
|
|
337
|
+
return readErrorContext(sourceFolderPath, result.rootReadError);
|
|
338
|
+
}
|
|
339
|
+
if (result.totalFiles === 0)
|
|
340
|
+
return null;
|
|
341
|
+
const items = [];
|
|
342
|
+
const sortedFolders = [...result.folders.entries()]
|
|
343
|
+
.filter(([, folder]) => folder.fileCount > 0)
|
|
344
|
+
.sort((a, b) => b[1].fileCount - a[1].fileCount)
|
|
345
|
+
.slice(0, MAX_FOLDER_ITEMS);
|
|
346
|
+
for (const [folderName, folder] of sortedFolders) {
|
|
347
|
+
const sample = folder.sampleNames.join(", ");
|
|
348
|
+
const noteParts = [
|
|
349
|
+
`${folder.fileCount} file(s)`,
|
|
350
|
+
kindSummary(folder.kinds),
|
|
351
|
+
].filter((part) => part.length > 0);
|
|
352
|
+
if (sample)
|
|
353
|
+
noteParts.push(`e.g. ${sample}`);
|
|
354
|
+
items.push({
|
|
355
|
+
name: folderName === "." ? "(root)" : folderName,
|
|
356
|
+
path: folderName === "." ? "." : folderName,
|
|
357
|
+
kind: "folder",
|
|
358
|
+
note: noteParts.join(" — "),
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
const observations = [];
|
|
362
|
+
observations.push(`${result.totalFiles} file(s) across ${result.folders.size} top-level group(s).`);
|
|
363
|
+
const totalKindSummary = kindSummary(result.totalKinds);
|
|
364
|
+
if (totalKindSummary) {
|
|
365
|
+
observations.push(`File kinds by extension: ${totalKindSummary}.`);
|
|
366
|
+
}
|
|
367
|
+
const range = dateRange(result.dateTokens);
|
|
368
|
+
if (range) {
|
|
369
|
+
observations.push(range.min === range.max
|
|
370
|
+
? `Filenames reference the period ${range.min}.`
|
|
371
|
+
: `Filenames span ${range.min} to ${range.max} (parsed from names, not contents).`);
|
|
372
|
+
}
|
|
373
|
+
const limitations = [
|
|
374
|
+
"Inventory is filename- and extension-only; Interf did not open or read any Source file. Inspect the Source through your own tools before locking stages.",
|
|
375
|
+
];
|
|
376
|
+
if (result.truncated) {
|
|
377
|
+
limitations.push("Scan was capped for cost; some files or deep folders were not enumerated. Treat counts as a lower bound.");
|
|
378
|
+
}
|
|
379
|
+
return {
|
|
380
|
+
summary: `Contents-free Source scan: ${result.totalFiles} file(s) in ` +
|
|
381
|
+
`${result.folders.size} top-level group(s)` +
|
|
382
|
+
(totalKindSummary ? ` (${totalKindSummary})` : "") +
|
|
383
|
+
".",
|
|
384
|
+
items,
|
|
385
|
+
observations: observations.slice(0, MAX_OBSERVATIONS),
|
|
386
|
+
limitations,
|
|
387
|
+
};
|
|
388
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { pickString } from "./string-utils.js";
|
|
1
2
|
export function extractAgentFailureStatus(event) {
|
|
2
3
|
const candidates = [];
|
|
3
4
|
const directMessage = pickString(event.message) ??
|
|
@@ -42,17 +43,3 @@ export function classifyTerminalVisibleStatus(text) {
|
|
|
42
43
|
export function hasAgentStalled(lastActivityAt, now, stallTimeoutMs) {
|
|
43
44
|
return typeof stallTimeoutMs === "number" && stallTimeoutMs > 0 && now - lastActivityAt >= stallTimeoutMs;
|
|
44
45
|
}
|
|
45
|
-
function pickString(value) {
|
|
46
|
-
if (typeof value === "string")
|
|
47
|
-
return value;
|
|
48
|
-
if (!Array.isArray(value))
|
|
49
|
-
return null;
|
|
50
|
-
for (const entry of value) {
|
|
51
|
-
if (typeof entry === "string")
|
|
52
|
-
return entry;
|
|
53
|
-
if (entry && typeof entry === "object" && "text" in entry && typeof entry.text === "string") {
|
|
54
|
-
return entry.text;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pick the first usable string out of a value that may be a bare string or an
|
|
3
|
+
* array of strings / `{ text }` content blocks. Agent event payloads carry
|
|
4
|
+
* message/text/content/output/summary fields in either shape across executors,
|
|
5
|
+
* so status-determination and render paths both reach for this.
|
|
6
|
+
*/
|
|
7
|
+
export declare function pickString(value: unknown): string | null;
|
|
8
|
+
/**
|
|
9
|
+
* Pull the primary path-like field out of a tool-use `input` record for display
|
|
10
|
+
* summaries. Tools name the same concept differently — `file_path` (Read/Write/
|
|
11
|
+
* Edit), `path`, `pattern` (Glob/Grep), `command` (Bash), `notebook_path`
|
|
12
|
+
* (notebook tools) — so every render site collapses them with the same
|
|
13
|
+
* precedence. Returns an empty string when no field is present, matching the
|
|
14
|
+
* `?? ""` default the call sites relied on.
|
|
15
|
+
*/
|
|
16
|
+
export declare function extractInputPath(input: Record<string, unknown>): string;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pick the first usable string out of a value that may be a bare string or an
|
|
3
|
+
* array of strings / `{ text }` content blocks. Agent event payloads carry
|
|
4
|
+
* message/text/content/output/summary fields in either shape across executors,
|
|
5
|
+
* so status-determination and render paths both reach for this.
|
|
6
|
+
*/
|
|
7
|
+
export function pickString(value) {
|
|
8
|
+
if (typeof value === "string")
|
|
9
|
+
return value;
|
|
10
|
+
if (!Array.isArray(value))
|
|
11
|
+
return null;
|
|
12
|
+
for (const entry of value) {
|
|
13
|
+
if (typeof entry === "string")
|
|
14
|
+
return entry;
|
|
15
|
+
if (entry && typeof entry === "object" && "text" in entry && typeof entry.text === "string") {
|
|
16
|
+
return entry.text;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Pull the primary path-like field out of a tool-use `input` record for display
|
|
23
|
+
* summaries. Tools name the same concept differently — `file_path` (Read/Write/
|
|
24
|
+
* Edit), `path`, `pattern` (Glob/Grep), `command` (Bash), `notebook_path`
|
|
25
|
+
* (notebook tools) — so every render site collapses them with the same
|
|
26
|
+
* precedence. Returns an empty string when no field is present, matching the
|
|
27
|
+
* `?? ""` default the call sites relied on.
|
|
28
|
+
*/
|
|
29
|
+
export function extractInputPath(input) {
|
|
30
|
+
return (input.file_path ??
|
|
31
|
+
input.path ??
|
|
32
|
+
input.pattern ??
|
|
33
|
+
input.command ??
|
|
34
|
+
input.notebook_path ??
|
|
35
|
+
"");
|
|
36
|
+
}
|
|
@@ -25,6 +25,7 @@ export interface AgentAutomationReadiness {
|
|
|
25
25
|
export interface SpawnAgentOptions {
|
|
26
26
|
eventLogPath?: string | null;
|
|
27
27
|
statusLogPath?: string | null;
|
|
28
|
+
reasoningLogPath?: string | null;
|
|
28
29
|
executionProfile?: AgentExecutionProfile;
|
|
29
30
|
completionCheck?: (() => boolean) | null;
|
|
30
31
|
onStatus?: (line: string) => void;
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const InterfUserConfigSchema: z.ZodObject<{
|
|
3
|
+
agent: z.ZodString;
|
|
4
|
+
agentCommand: z.ZodString;
|
|
5
|
+
skillsInstalled: z.ZodBoolean;
|
|
6
|
+
initialized: z.ZodString;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
export type InterfUserConfig = z.infer<typeof InterfUserConfigSchema>;
|
|
3
9
|
/** `~/.interf/` (overridable via `INTERF_USER_HOME`). */
|
|
4
10
|
export declare function interfHome(): string;
|
|
5
11
|
/** `~/.interf/config.json` — local executor preferences. */
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
3
4
|
import { readJsonFileWithSchema } from "../../../contracts/utils/parse.js";
|
|
4
|
-
import { interfHomeRoot } from "../../../contracts/lib/
|
|
5
|
-
|
|
5
|
+
import { interfHomeRoot } from "../../../contracts/lib/project-paths.js";
|
|
6
|
+
export const InterfUserConfigSchema = z.object({
|
|
7
|
+
agent: z.string(),
|
|
8
|
+
agentCommand: z.string(),
|
|
9
|
+
skillsInstalled: z.boolean(),
|
|
10
|
+
initialized: z.string(),
|
|
11
|
+
});
|
|
6
12
|
/** `~/.interf/` (overridable via `INTERF_USER_HOME`). */
|
|
7
13
|
export function interfHome() {
|
|
8
14
|
return interfHomeRoot();
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AgentProvider } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Claude Code provider.
|
|
4
|
+
*
|
|
5
|
+
* Configuration follows Anthropic's third-party integration spec:
|
|
6
|
+
* https://code.claude.com/docs/en/third-party-integrations
|
|
7
|
+
*
|
|
8
|
+
* The user-facing model knob is the alias (`opus`, `sonnet`, `haiku`)
|
|
9
|
+
* which Anthropic resolves server-side to the current pinned version.
|
|
10
|
+
* Hosts that need to pin a specific version do it via the
|
|
11
|
+
* `ANTHROPIC_DEFAULT_*_MODEL` env vars supplied by the user.
|
|
12
|
+
*/
|
|
13
|
+
export declare const claudeCodeProvider: AgentProvider;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Claude Code provider.
|
|
5
|
+
*
|
|
6
|
+
* Configuration follows Anthropic's third-party integration spec:
|
|
7
|
+
* https://code.claude.com/docs/en/third-party-integrations
|
|
8
|
+
*
|
|
9
|
+
* The user-facing model knob is the alias (`opus`, `sonnet`, `haiku`)
|
|
10
|
+
* which Anthropic resolves server-side to the current pinned version.
|
|
11
|
+
* Hosts that need to pin a specific version do it via the
|
|
12
|
+
* `ANTHROPIC_DEFAULT_*_MODEL` env vars supplied by the user.
|
|
13
|
+
*/
|
|
14
|
+
export const claudeCodeProvider = {
|
|
15
|
+
name: "claude-code",
|
|
16
|
+
displayName: "Claude Code",
|
|
17
|
+
command: "claude",
|
|
18
|
+
homeDir: join(homedir(), ".claude"),
|
|
19
|
+
skillsDir: join(homedir(), ".claude", "skills"),
|
|
20
|
+
supportsAutomatedRuns: true,
|
|
21
|
+
defaultModel: "claude-sonnet-4-6",
|
|
22
|
+
defaultEffort: "low",
|
|
23
|
+
noiseFilters: [],
|
|
24
|
+
buildArgs(prompt, profile) {
|
|
25
|
+
const args = [
|
|
26
|
+
"-p",
|
|
27
|
+
prompt,
|
|
28
|
+
"--output-format",
|
|
29
|
+
"stream-json",
|
|
30
|
+
"--verbose",
|
|
31
|
+
"--allowedTools",
|
|
32
|
+
"Read,Write,Edit,Bash,Grep,Glob,Agent",
|
|
33
|
+
];
|
|
34
|
+
if (profile.model) {
|
|
35
|
+
args.push("--model", profile.model);
|
|
36
|
+
}
|
|
37
|
+
if (profile.effort) {
|
|
38
|
+
args.push("--effort", profile.effort);
|
|
39
|
+
}
|
|
40
|
+
return args;
|
|
41
|
+
},
|
|
42
|
+
buildEnv(baseEnv) {
|
|
43
|
+
return { ...baseEnv };
|
|
44
|
+
},
|
|
45
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AgentProvider } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Codex provider.
|
|
4
|
+
*
|
|
5
|
+
* Reasoning effort is passed via the documented config override
|
|
6
|
+
* (`-c model_reasoning_effort=...`) rather than a flag.
|
|
7
|
+
*
|
|
8
|
+
* The `SHELL` env var is stripped from the spawn so Codex picks a
|
|
9
|
+
* sandbox-safe default shell instead of inheriting the host login shell.
|
|
10
|
+
*
|
|
11
|
+
* Two stderr noise lines are expected on every run and must not be
|
|
12
|
+
* treated as preflight failures.
|
|
13
|
+
*
|
|
14
|
+
* Codex preflight is retried when it reports transient session-record
|
|
15
|
+
* errors that resolve on a second attempt.
|
|
16
|
+
*/
|
|
17
|
+
export declare const codexProvider: AgentProvider;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
const SANDBOX_MODE = `work${"space-write"}`;
|
|
4
|
+
/**
|
|
5
|
+
* Codex provider.
|
|
6
|
+
*
|
|
7
|
+
* Reasoning effort is passed via the documented config override
|
|
8
|
+
* (`-c model_reasoning_effort=...`) rather than a flag.
|
|
9
|
+
*
|
|
10
|
+
* The `SHELL` env var is stripped from the spawn so Codex picks a
|
|
11
|
+
* sandbox-safe default shell instead of inheriting the host login shell.
|
|
12
|
+
*
|
|
13
|
+
* Two stderr noise lines are expected on every run and must not be
|
|
14
|
+
* treated as preflight failures.
|
|
15
|
+
*
|
|
16
|
+
* Codex preflight is retried when it reports transient session-record
|
|
17
|
+
* errors that resolve on a second attempt.
|
|
18
|
+
*/
|
|
19
|
+
export const codexProvider = {
|
|
20
|
+
name: "codex",
|
|
21
|
+
displayName: "Codex",
|
|
22
|
+
command: "codex",
|
|
23
|
+
homeDir: join(homedir(), ".codex"),
|
|
24
|
+
skillsDir: join(homedir(), ".codex", "skills"),
|
|
25
|
+
supportsAutomatedRuns: true,
|
|
26
|
+
defaultModel: "gpt-5.3-codex",
|
|
27
|
+
defaultEffort: "high",
|
|
28
|
+
noiseFilters: [
|
|
29
|
+
/codex_core_skills::loader: failed to stat skills entry .*\/interf-[^ ]+ \(symlink\): No such file or directory/,
|
|
30
|
+
/codex_core::codex: failed to load skill .*\/gstack\/SKILL\.md: invalid description: exceeds maximum length of 1024 characters/,
|
|
31
|
+
],
|
|
32
|
+
buildArgs(prompt, profile) {
|
|
33
|
+
const args = [
|
|
34
|
+
"exec",
|
|
35
|
+
"--json",
|
|
36
|
+
"-s",
|
|
37
|
+
SANDBOX_MODE,
|
|
38
|
+
"--skip-git-repo-check",
|
|
39
|
+
"-c",
|
|
40
|
+
'service_tier="fast"',
|
|
41
|
+
];
|
|
42
|
+
if (profile.model) {
|
|
43
|
+
args.push("--model", profile.model);
|
|
44
|
+
}
|
|
45
|
+
if (profile.profile) {
|
|
46
|
+
args.push("--profile", profile.profile);
|
|
47
|
+
}
|
|
48
|
+
if (profile.effort) {
|
|
49
|
+
args.push("-c", `model_reasoning_effort=${JSON.stringify(profile.effort)}`);
|
|
50
|
+
}
|
|
51
|
+
args.push(prompt);
|
|
52
|
+
return args;
|
|
53
|
+
},
|
|
54
|
+
buildEnv(baseEnv) {
|
|
55
|
+
const env = { ...baseEnv };
|
|
56
|
+
delete env.SHELL;
|
|
57
|
+
return env;
|
|
58
|
+
},
|
|
59
|
+
isTransientPreflightFailure(stderr, errorMessage) {
|
|
60
|
+
const text = `${errorMessage}\n${stderr}`;
|
|
61
|
+
if (/usage limit/i.test(text))
|
|
62
|
+
return false;
|
|
63
|
+
return /failed to record rollout items/i.test(text)
|
|
64
|
+
|| /thread\s+[0-9a-f-]+\s+not found/i.test(text);
|
|
65
|
+
},
|
|
66
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AgentProvider } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Cursor provider.
|
|
4
|
+
*
|
|
5
|
+
* Cursor is detected for `interf init` so the listing shows it, but
|
|
6
|
+
* Interf cannot drive automated Build runs through Cursor today.
|
|
7
|
+
* `buildArgs` therefore throws.
|
|
8
|
+
*/
|
|
9
|
+
export declare const cursorProvider: AgentProvider;
|