@interf/compiler 0.6.1 → 0.6.4
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 +106 -80
- package/builtin-workflows/interf/README.md +5 -5
- package/builtin-workflows/interf/compile/stages/shape/SKILL.md +4 -4
- package/builtin-workflows/interf/improve/SKILL.md +2 -2
- package/builtin-workflows/interf/use/query/SKILL.md +1 -1
- package/builtin-workflows/interf/workflow.json +6 -6
- package/builtin-workflows/interf/workflow.schema.json +1 -1
- package/dist/bin.js +2 -28
- package/dist/{commands → cli/commands}/check-draft.d.ts +2 -2
- package/dist/{commands → cli/commands}/check-draft.js +16 -16
- package/dist/{commands → cli/commands}/compile-controller.d.ts +3 -3
- package/dist/{commands → cli/commands}/compile-controller.js +37 -35
- package/dist/{commands → cli/commands}/compile.d.ts +2 -2
- package/dist/{commands → cli/commands}/compile.js +15 -11
- package/dist/{commands → cli/commands}/compiled-flow.d.ts +3 -4
- package/dist/{commands → cli/commands}/compiled-flow.js +9 -14
- package/dist/{commands → cli/commands}/create-workflow-wizard.d.ts +3 -3
- package/dist/{commands → cli/commands}/create-workflow-wizard.js +64 -37
- package/dist/{commands → cli/commands}/create.d.ts +1 -1
- package/dist/{commands → cli/commands}/create.js +15 -18
- package/dist/{commands → cli/commands}/dataset-selection.d.ts +1 -1
- package/dist/{commands → cli/commands}/default.js +3 -3
- package/dist/{commands → cli/commands}/doctor.js +5 -6
- package/dist/{commands → cli/commands}/executor-flow.d.ts +1 -1
- package/dist/{commands → cli/commands}/executor-flow.js +13 -16
- package/dist/{commands → cli/commands}/init.d.ts +4 -1
- package/dist/{commands → cli/commands}/init.js +162 -77
- package/dist/{commands → cli/commands}/list.js +6 -6
- package/dist/{commands → cli/commands}/reset.js +4 -4
- package/dist/{commands → cli/commands}/source-config-wizard.d.ts +9 -4
- package/dist/{commands → cli/commands}/source-config-wizard.js +168 -94
- package/dist/{commands → cli/commands}/status.js +20 -11
- package/dist/{commands → cli/commands}/test-flow.d.ts +13 -4
- package/dist/{commands → cli/commands}/test-flow.js +52 -48
- package/dist/cli/commands/test.d.ts +14 -0
- package/dist/{commands → cli/commands}/test.js +40 -24
- package/dist/{commands → cli/commands}/verify.js +4 -4
- package/dist/cli/index.d.ts +21 -0
- package/dist/cli/index.js +33 -0
- package/dist/index.d.ts +22 -11
- package/dist/index.js +15 -6
- package/dist/lib/agent-args.d.ts +1 -4
- package/dist/lib/agent-args.js +1 -52
- package/dist/lib/agent-constants.d.ts +1 -5
- package/dist/lib/agent-constants.js +1 -28
- package/dist/lib/agent-detection.d.ts +1 -7
- package/dist/lib/agent-detection.js +1 -65
- package/dist/lib/agent-execution.d.ts +1 -2
- package/dist/lib/agent-execution.js +1 -243
- package/dist/lib/agent-logs.d.ts +1 -2
- package/dist/lib/agent-logs.js +1 -17
- package/dist/lib/agent-preflight.d.ts +1 -7
- package/dist/lib/agent-preflight.js +1 -77
- package/dist/lib/agent-render.d.ts +1 -8
- package/dist/lib/agent-render.js +1 -218
- package/dist/lib/agent-shells.d.ts +1 -69
- package/dist/lib/agent-shells.js +1 -1021
- package/dist/lib/agent-status.d.ts +1 -3
- package/dist/lib/agent-status.js +1 -58
- package/dist/lib/agent-types.d.ts +1 -30
- package/dist/lib/agent-types.js +1 -1
- package/dist/lib/agents.d.ts +1 -6
- package/dist/lib/agents.js +1 -5
- package/dist/lib/builtin-compiled-workflow.d.ts +1 -38
- package/dist/lib/builtin-compiled-workflow.js +1 -94
- package/dist/lib/chart-guidance.d.ts +1 -1
- package/dist/lib/chart-guidance.js +1 -8
- package/dist/lib/compiled-compile.d.ts +1 -48
- package/dist/lib/compiled-compile.js +1 -255
- package/dist/lib/compiled-paths.d.ts +1 -40
- package/dist/lib/compiled-paths.js +3 -106
- package/dist/lib/compiled-raw.d.ts +1 -49
- package/dist/lib/compiled-raw.js +3 -102
- package/dist/lib/compiled-reset.d.ts +1 -2
- package/dist/lib/compiled-reset.js +3 -72
- package/dist/lib/compiled-schema.d.ts +1 -31
- package/dist/lib/compiled-schema.js +1 -141
- package/dist/lib/discovery.d.ts +1 -7
- package/dist/lib/discovery.js +1 -84
- package/dist/lib/execution-profile.d.ts +1 -17
- package/dist/lib/execution-profile.js +1 -84
- package/dist/lib/executors.d.ts +1 -32
- package/dist/lib/executors.js +1 -43
- package/dist/lib/filesystem.d.ts +1 -2
- package/dist/lib/filesystem.js +1 -55
- package/dist/lib/interf-bootstrap.d.ts +1 -3
- package/dist/lib/interf-bootstrap.js +3 -18
- package/dist/lib/interf-detect.d.ts +1 -33
- package/dist/lib/interf-detect.js +3 -176
- package/dist/lib/interf-scaffold.d.ts +1 -2
- package/dist/lib/interf-scaffold.js +3 -114
- package/dist/lib/interf-workflow-package.d.ts +1 -25
- package/dist/lib/interf-workflow-package.js +1 -342
- package/dist/lib/interf.d.ts +1 -5
- package/dist/lib/interf.js +3 -4
- package/dist/lib/local-workflows.d.ts +1 -54
- package/dist/lib/local-workflows.js +1 -422
- package/dist/lib/logger.d.ts +1 -3
- package/dist/lib/logger.js +1 -10
- package/dist/lib/package-root.d.ts +1 -0
- package/dist/lib/package-root.js +1 -0
- package/dist/lib/parse.d.ts +1 -8
- package/dist/lib/parse.js +1 -145
- package/dist/lib/project-paths.d.ts +1 -11
- package/dist/lib/project-paths.js +3 -32
- package/dist/lib/runtime-acceptance.d.ts +1 -9
- package/dist/lib/runtime-acceptance.js +1 -269
- package/dist/lib/runtime-contracts.d.ts +1 -2
- package/dist/lib/runtime-contracts.js +1 -48
- package/dist/lib/runtime-inventory.d.ts +1 -7
- package/dist/lib/runtime-inventory.js +1 -29
- package/dist/lib/runtime-paths.d.ts +1 -8
- package/dist/lib/runtime-paths.js +1 -26
- package/dist/lib/runtime-prompt.d.ts +1 -2
- package/dist/lib/runtime-prompt.js +1 -48
- package/dist/lib/runtime-reconcile.d.ts +1 -2
- package/dist/lib/runtime-reconcile.js +1 -193
- package/dist/lib/runtime-runs.d.ts +1 -11
- package/dist/lib/runtime-runs.js +1 -262
- package/dist/lib/runtime-types.d.ts +1 -43
- package/dist/lib/runtime-types.js +1 -1
- package/dist/lib/runtime.d.ts +1 -6
- package/dist/lib/runtime.js +1 -5
- package/dist/lib/schema.d.ts +4 -1073
- package/dist/lib/schema.js +6 -542
- package/dist/lib/source-config.d.ts +1 -39
- package/dist/lib/source-config.js +3 -293
- package/dist/lib/state-artifacts.d.ts +1 -8
- package/dist/lib/state-artifacts.js +1 -13
- package/dist/lib/state-health.d.ts +1 -4
- package/dist/lib/state-health.js +1 -132
- package/dist/lib/state-io.d.ts +1 -10
- package/dist/lib/state-io.js +1 -76
- package/dist/lib/state-paths.d.ts +1 -4
- package/dist/lib/state-paths.js +1 -13
- package/dist/lib/state-view.d.ts +1 -4
- package/dist/lib/state-view.js +1 -103
- package/dist/lib/state.d.ts +1 -7
- package/dist/lib/state.js +1 -12
- package/dist/lib/test-execution.d.ts +1 -14
- package/dist/lib/test-execution.js +3 -525
- package/dist/lib/test-matrices.d.ts +1 -90
- package/dist/lib/test-matrices.js +3 -96
- package/dist/lib/test-paths.d.ts +1 -12
- package/dist/lib/test-paths.js +3 -59
- package/dist/lib/test-profile-presets.d.ts +1 -57
- package/dist/lib/test-profile-presets.js +3 -50
- package/dist/lib/test-sandbox.d.ts +1 -11
- package/dist/lib/test-sandbox.js +3 -105
- package/dist/lib/test-specs.d.ts +1 -7
- package/dist/lib/test-specs.js +3 -114
- package/dist/lib/test-targets.d.ts +1 -5
- package/dist/lib/test-targets.js +3 -38
- package/dist/lib/test-types.d.ts +1 -17
- package/dist/lib/test-types.js +3 -1
- package/dist/lib/test.d.ts +1 -4
- package/dist/lib/test.js +3 -3
- package/dist/lib/util.d.ts +1 -4
- package/dist/lib/util.js +1 -25
- package/dist/lib/validate-compiled.d.ts +1 -27
- package/dist/lib/validate-compiled.js +1 -241
- package/dist/lib/validate-helpers.d.ts +1 -12
- package/dist/lib/validate-helpers.js +1 -41
- package/dist/lib/validate.d.ts +1 -21
- package/dist/lib/validate.js +1 -249
- package/dist/lib/workflow-authoring.d.ts +1 -26
- package/dist/lib/workflow-authoring.js +1 -119
- package/dist/lib/workflow-definitions.d.ts +1 -78
- package/dist/lib/workflow-definitions.js +1 -203
- package/dist/lib/workflow-edit-session.d.ts +1 -16
- package/dist/lib/workflow-edit-session.js +1 -57
- package/dist/lib/workflow-edit-utils.d.ts +1 -10
- package/dist/lib/workflow-edit-utils.js +1 -39
- package/dist/lib/workflow-helpers.d.ts +1 -38
- package/dist/lib/workflow-helpers.js +1 -167
- package/dist/lib/workflow-improvement.d.ts +1 -22
- package/dist/lib/workflow-improvement.js +1 -209
- package/dist/lib/workflow-primitives.d.ts +1 -2
- package/dist/lib/workflow-primitives.js +1 -5
- package/dist/lib/workflow-review-paths.d.ts +1 -10
- package/dist/lib/workflow-review-paths.js +1 -27
- package/dist/lib/workflow-stage-policy.d.ts +1 -5
- package/dist/lib/workflow-stage-policy.js +1 -31
- package/dist/lib/workflow-stage-runner.d.ts +1 -41
- package/dist/lib/workflow-stage-runner.js +1 -109
- package/dist/lib/workflows.d.ts +1 -15
- package/dist/lib/workflows.js +1 -31
- package/dist/packages/agents/index.d.ts +18 -0
- package/dist/packages/agents/index.js +16 -0
- package/dist/packages/agents/lib/agents.d.ts +6 -0
- package/dist/packages/agents/lib/agents.js +5 -0
- package/dist/packages/agents/lib/args.d.ts +4 -0
- package/dist/packages/agents/lib/args.js +52 -0
- package/dist/packages/agents/lib/chart-guidance.d.ts +1 -0
- package/dist/packages/agents/lib/chart-guidance.js +8 -0
- package/dist/packages/agents/lib/compiled-bootstrap.d.ts +3 -0
- package/dist/packages/agents/lib/compiled-bootstrap.js +18 -0
- package/dist/packages/agents/lib/constants.d.ts +5 -0
- package/dist/packages/agents/lib/constants.js +28 -0
- package/dist/packages/agents/lib/detection.d.ts +7 -0
- package/dist/packages/agents/lib/detection.js +65 -0
- package/dist/packages/agents/lib/execution-profile.d.ts +17 -0
- package/dist/packages/agents/lib/execution-profile.js +84 -0
- package/dist/packages/agents/lib/execution.d.ts +2 -0
- package/dist/packages/agents/lib/execution.js +243 -0
- package/dist/packages/agents/lib/executors.d.ts +32 -0
- package/dist/packages/agents/lib/executors.js +45 -0
- package/dist/packages/agents/lib/logs.d.ts +2 -0
- package/dist/packages/agents/lib/logs.js +17 -0
- package/dist/packages/agents/lib/preflight.d.ts +7 -0
- package/dist/packages/agents/lib/preflight.js +77 -0
- package/dist/packages/agents/lib/render.d.ts +8 -0
- package/dist/packages/agents/lib/render.js +218 -0
- package/dist/packages/agents/lib/schema.d.ts +8 -0
- package/dist/packages/agents/lib/schema.js +7 -0
- package/dist/packages/agents/lib/shells.d.ts +71 -0
- package/dist/packages/agents/lib/shells.js +1023 -0
- package/dist/packages/agents/lib/status.d.ts +3 -0
- package/dist/packages/agents/lib/status.js +58 -0
- package/dist/packages/agents/lib/types.d.ts +30 -0
- package/dist/packages/agents/lib/types.js +1 -0
- package/dist/{lib → packages/agents/lib}/user-config.d.ts +1 -0
- package/dist/{lib → packages/agents/lib}/user-config.js +3 -2
- package/dist/packages/compiler/compiled-compile.d.ts +4 -0
- package/dist/packages/compiler/compiled-compile.js +4 -0
- package/dist/packages/compiler/compiled-paths.d.ts +40 -0
- package/dist/packages/compiler/compiled-paths.js +106 -0
- package/dist/packages/compiler/compiled-pipeline.d.ts +39 -0
- package/dist/packages/compiler/compiled-pipeline.js +134 -0
- package/dist/packages/compiler/compiled-schema.d.ts +31 -0
- package/dist/packages/compiler/compiled-schema.js +141 -0
- package/dist/packages/compiler/compiled-stage-plan.d.ts +15 -0
- package/dist/packages/compiler/compiled-stage-plan.js +79 -0
- package/dist/packages/compiler/compiled-stage-runner.d.ts +10 -0
- package/dist/packages/compiler/compiled-stage-runner.js +46 -0
- package/dist/packages/compiler/compiled-target.d.ts +11 -0
- package/dist/packages/compiler/compiled-target.js +16 -0
- package/dist/packages/compiler/discovery.d.ts +7 -0
- package/dist/packages/compiler/discovery.js +80 -0
- package/dist/packages/compiler/index.d.ts +24 -0
- package/dist/packages/compiler/index.js +23 -0
- package/dist/packages/compiler/lib/schema.d.ts +684 -0
- package/dist/packages/compiler/lib/schema.js +363 -0
- package/dist/packages/compiler/raw-snapshot.d.ts +49 -0
- package/dist/packages/compiler/raw-snapshot.js +102 -0
- package/dist/packages/compiler/reset.d.ts +2 -0
- package/dist/packages/compiler/reset.js +72 -0
- package/dist/packages/compiler/runtime-acceptance.d.ts +9 -0
- package/dist/packages/compiler/runtime-acceptance.js +269 -0
- package/dist/packages/compiler/runtime-contracts.d.ts +2 -0
- package/dist/packages/compiler/runtime-contracts.js +48 -0
- package/dist/packages/compiler/runtime-inventory.d.ts +7 -0
- package/dist/packages/compiler/runtime-inventory.js +29 -0
- package/dist/packages/compiler/runtime-paths.d.ts +8 -0
- package/dist/packages/compiler/runtime-paths.js +26 -0
- package/dist/packages/compiler/runtime-prompt.d.ts +2 -0
- package/dist/packages/compiler/runtime-prompt.js +48 -0
- package/dist/packages/compiler/runtime-reconcile.d.ts +2 -0
- package/dist/packages/compiler/runtime-reconcile.js +193 -0
- package/dist/packages/compiler/runtime-runs.d.ts +11 -0
- package/dist/packages/compiler/runtime-runs.js +262 -0
- package/dist/packages/compiler/runtime-types.d.ts +43 -0
- package/dist/packages/compiler/runtime-types.js +1 -0
- package/dist/packages/compiler/runtime.d.ts +6 -0
- package/dist/packages/compiler/runtime.js +5 -0
- package/dist/packages/compiler/state-artifacts.d.ts +8 -0
- package/dist/packages/compiler/state-artifacts.js +13 -0
- package/dist/packages/compiler/state-health.d.ts +4 -0
- package/dist/packages/compiler/state-health.js +132 -0
- package/dist/packages/compiler/state-io.d.ts +10 -0
- package/dist/packages/compiler/state-io.js +76 -0
- package/dist/packages/compiler/state-paths.d.ts +4 -0
- package/dist/packages/compiler/state-paths.js +13 -0
- package/dist/packages/compiler/state-view.d.ts +4 -0
- package/dist/packages/compiler/state-view.js +103 -0
- package/dist/packages/compiler/state.d.ts +7 -0
- package/dist/packages/compiler/state.js +12 -0
- package/dist/packages/compiler/validate-compiled.d.ts +27 -0
- package/dist/packages/compiler/validate-compiled.js +241 -0
- package/dist/packages/compiler/validate-helpers.d.ts +12 -0
- package/dist/packages/compiler/validate-helpers.js +41 -0
- package/dist/packages/compiler/validate.d.ts +21 -0
- package/dist/packages/compiler/validate.js +249 -0
- package/dist/packages/compiler/workflow-primitives.d.ts +2 -0
- package/dist/packages/compiler/workflow-primitives.js +5 -0
- package/dist/packages/compiler/workflows.d.ts +15 -0
- package/dist/packages/compiler/workflows.js +31 -0
- package/dist/packages/project-model/compiled-paths.d.ts +1 -0
- package/dist/packages/project-model/compiled-paths.js +1 -0
- package/dist/packages/project-model/compiled-raw.d.ts +1 -0
- package/dist/packages/project-model/compiled-raw.js +1 -0
- package/dist/packages/project-model/compiled-reset.d.ts +1 -0
- package/dist/packages/project-model/compiled-reset.js +1 -0
- package/dist/packages/project-model/index.d.ts +11 -0
- package/dist/packages/project-model/index.js +10 -0
- package/dist/packages/project-model/interf-bootstrap.d.ts +1 -0
- package/dist/packages/project-model/interf-bootstrap.js +1 -0
- package/dist/packages/project-model/interf-detect.d.ts +33 -0
- package/dist/packages/project-model/interf-detect.js +176 -0
- package/dist/packages/project-model/interf-scaffold.d.ts +2 -0
- package/dist/packages/project-model/interf-scaffold.js +124 -0
- package/dist/packages/project-model/interf.d.ts +5 -0
- package/dist/packages/project-model/interf.js +4 -0
- package/dist/packages/project-model/lib/schema.d.ts +125 -0
- package/dist/packages/project-model/lib/schema.js +62 -0
- package/dist/packages/project-model/project-paths.d.ts +11 -0
- package/dist/packages/project-model/project-paths.js +32 -0
- package/dist/packages/project-model/source-config.d.ts +38 -0
- package/dist/packages/project-model/source-config.js +298 -0
- package/dist/packages/shared/file-types.d.ts +1 -0
- package/dist/packages/shared/file-types.js +4 -0
- package/dist/packages/shared/filesystem.d.ts +2 -0
- package/dist/packages/shared/filesystem.js +55 -0
- package/dist/packages/shared/index.d.ts +7 -0
- package/dist/packages/shared/index.js +7 -0
- package/dist/packages/shared/logger.d.ts +3 -0
- package/dist/packages/shared/logger.js +10 -0
- package/dist/packages/shared/naming.d.ts +1 -0
- package/dist/packages/shared/naming.js +8 -0
- package/dist/packages/shared/parse.d.ts +8 -0
- package/dist/packages/shared/parse.js +145 -0
- package/dist/packages/shared/path-guards.d.ts +2 -0
- package/dist/packages/shared/path-guards.js +14 -0
- package/dist/packages/shared/util.d.ts +3 -0
- package/dist/packages/shared/util.js +3 -0
- package/dist/packages/testing/index.d.ts +13 -0
- package/dist/packages/testing/index.js +10 -0
- package/dist/packages/testing/lib/schema.d.ts +261 -0
- package/dist/packages/testing/lib/schema.js +119 -0
- package/dist/packages/testing/test-execution.d.ts +14 -0
- package/dist/packages/testing/test-execution.js +525 -0
- package/dist/packages/testing/test-matrices.d.ts +90 -0
- package/dist/packages/testing/test-matrices.js +96 -0
- package/dist/packages/testing/test-paths.d.ts +12 -0
- package/dist/packages/testing/test-paths.js +59 -0
- package/dist/packages/testing/test-profile-presets.d.ts +57 -0
- package/dist/packages/testing/test-profile-presets.js +50 -0
- package/dist/packages/testing/test-sandbox.d.ts +11 -0
- package/dist/packages/testing/test-sandbox.js +105 -0
- package/dist/packages/testing/test-specs.d.ts +7 -0
- package/dist/packages/testing/test-specs.js +114 -0
- package/dist/packages/testing/test-targets.d.ts +5 -0
- package/dist/packages/testing/test-targets.js +38 -0
- package/dist/packages/testing/test-types.d.ts +16 -0
- package/dist/packages/testing/test-types.js +1 -0
- package/dist/packages/testing/test.d.ts +4 -0
- package/dist/packages/testing/test.js +3 -0
- package/dist/packages/workflow-authoring/index.d.ts +4 -0
- package/dist/packages/workflow-authoring/index.js +4 -0
- package/dist/packages/workflow-authoring/lib/workflow-edit-utils.d.ts +10 -0
- package/dist/packages/workflow-authoring/lib/workflow-edit-utils.js +39 -0
- package/dist/packages/workflow-authoring/workflow-authoring.d.ts +26 -0
- package/dist/packages/workflow-authoring/workflow-authoring.js +121 -0
- package/dist/packages/workflow-authoring/workflow-edit-session.d.ts +16 -0
- package/dist/packages/workflow-authoring/workflow-edit-session.js +57 -0
- package/dist/packages/workflow-authoring/workflow-improvement.d.ts +23 -0
- package/dist/packages/workflow-authoring/workflow-improvement.js +210 -0
- package/dist/packages/workflow-package/builtin-compiled-workflow.d.ts +38 -0
- package/dist/packages/workflow-package/builtin-compiled-workflow.js +94 -0
- package/dist/packages/workflow-package/context-interface.d.ts +96 -0
- package/dist/packages/workflow-package/context-interface.js +146 -0
- package/dist/packages/workflow-package/index.d.ts +11 -0
- package/dist/packages/workflow-package/index.js +11 -0
- package/dist/packages/workflow-package/interf-workflow-package.d.ts +25 -0
- package/dist/packages/workflow-package/interf-workflow-package.js +389 -0
- package/dist/{lib/config.d.ts → packages/workflow-package/lib/package-root.d.ts} +0 -1
- package/dist/packages/workflow-package/lib/package-root.js +6 -0
- package/dist/packages/workflow-package/local-workflows.d.ts +57 -0
- package/dist/packages/workflow-package/local-workflows.js +424 -0
- package/dist/packages/workflow-package/workflow-definitions.d.ts +82 -0
- package/dist/packages/workflow-package/workflow-definitions.js +210 -0
- package/dist/packages/workflow-package/workflow-helpers.d.ts +38 -0
- package/dist/packages/workflow-package/workflow-helpers.js +167 -0
- package/dist/packages/workflow-package/workflow-review-paths.d.ts +10 -0
- package/dist/packages/workflow-package/workflow-review-paths.js +27 -0
- package/dist/packages/workflow-package/workflow-stage-policy.d.ts +5 -0
- package/dist/packages/workflow-package/workflow-stage-policy.js +31 -0
- package/dist/packages/workflow-package/workflow-stage-runner.d.ts +41 -0
- package/dist/packages/workflow-package/workflow-stage-runner.js +109 -0
- package/package.json +43 -19
- package/dist/commands/test.d.ts +0 -3
- package/dist/lib/compiled-home.d.ts +0 -5
- package/dist/lib/compiled-home.js +0 -32
- package/dist/lib/config.js +0 -9
- /package/dist/{commands → cli/commands}/dataset-selection.js +0 -0
- /package/dist/{commands → cli/commands}/default.d.ts +0 -0
- /package/dist/{commands → cli/commands}/doctor.d.ts +0 -0
- /package/dist/{commands → cli/commands}/list.d.ts +0 -0
- /package/dist/{commands → cli/commands}/reset.d.ts +0 -0
- /package/dist/{commands → cli/commands}/status.d.ts +0 -0
- /package/dist/{commands → cli/commands}/verify.d.ts +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
2
|
+
import { join, relative, sep } from "node:path";
|
|
3
3
|
import * as p from "@clack/prompts";
|
|
4
|
-
import {
|
|
5
|
-
import { slugify } from "
|
|
4
|
+
import { sourceConfig as projectSourceConfig, } from "../../packages/project-model/index.js";
|
|
5
|
+
import { slugify } from "../../packages/shared/naming.js";
|
|
6
6
|
import { resolveOrConfigureLocalExecutor } from "./executor-flow.js";
|
|
7
7
|
import { draftTruthChecks } from "./check-draft.js";
|
|
8
8
|
export const DEFAULT_COMPILED_NAME = "dataset1";
|
|
9
|
-
export const DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER = "A question you can already verify from this
|
|
9
|
+
export const DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER = "A question you can already verify from this source folder";
|
|
10
10
|
export const DEFAULT_COMPILED_CHECK_ANSWER_PLACEHOLDER = "The expected answer in plain English";
|
|
11
|
-
export const DEFAULT_COMPILED_ABOUT_PLACEHOLDER = "Example: board
|
|
11
|
+
export const DEFAULT_COMPILED_ABOUT_PLACEHOLDER = "Example: board prep from these files, chart reads from this report, or tax review from these exports.";
|
|
12
12
|
export const DEFAULT_DATASET_PATH_PLACEHOLDER = "./dataset1";
|
|
13
13
|
export const DEFAULT_COMPILE_RETRY_ATTEMPTS = 3;
|
|
14
14
|
export const DEFAULT_SELF_IMPROVING_LOOPS = 3;
|
|
@@ -19,7 +19,7 @@ function normalizeOptionalPromptText(value) {
|
|
|
19
19
|
const normalized = value.trim();
|
|
20
20
|
return normalized.length > 0 ? normalized : undefined;
|
|
21
21
|
}
|
|
22
|
-
function
|
|
22
|
+
function listVisibleDatasetFolders(cwd) {
|
|
23
23
|
const ignoredEntries = new Set([
|
|
24
24
|
".DS_Store",
|
|
25
25
|
".git",
|
|
@@ -33,10 +33,9 @@ function findSingleDatasetFolderCandidate(cwd) {
|
|
|
33
33
|
rootEntries = readdirSync(cwd);
|
|
34
34
|
}
|
|
35
35
|
catch {
|
|
36
|
-
return
|
|
36
|
+
return [];
|
|
37
37
|
}
|
|
38
|
-
const visibleEntries = rootEntries.filter((entry) => !ignoredEntries.has(entry));
|
|
39
|
-
const visibleFiles = [];
|
|
38
|
+
const visibleEntries = rootEntries.filter((entry) => !ignoredEntries.has(entry) && !entry.startsWith("."));
|
|
40
39
|
const visibleDirectories = [];
|
|
41
40
|
for (const entry of visibleEntries) {
|
|
42
41
|
try {
|
|
@@ -44,19 +43,56 @@ function findSingleDatasetFolderCandidate(cwd) {
|
|
|
44
43
|
if (statSync(entryPath).isDirectory()) {
|
|
45
44
|
visibleDirectories.push(entry);
|
|
46
45
|
}
|
|
47
|
-
else {
|
|
48
|
-
visibleFiles.push(entry);
|
|
49
|
-
}
|
|
50
46
|
}
|
|
51
47
|
catch {
|
|
52
48
|
// ignore unreadable entries
|
|
53
49
|
}
|
|
54
50
|
}
|
|
55
|
-
|
|
51
|
+
return visibleDirectories.sort((left, right) => left.localeCompare(right));
|
|
52
|
+
}
|
|
53
|
+
function isReservedDatasetPath(relativePath) {
|
|
54
|
+
const normalized = relativePath.replace(/\\/g, "/").replace(/^\.\/+/, "");
|
|
55
|
+
return normalized === "interf" || normalized.startsWith("interf/") || normalized === ".interf" || normalized.startsWith(".interf/");
|
|
56
|
+
}
|
|
57
|
+
export function normalizeDatasetPathForConfig(projectPath, value) {
|
|
58
|
+
const resolvedPath = projectSourceConfig.resolveSourceDatasetPath(projectPath, { path: value.trim() });
|
|
59
|
+
const relativePath = relative(projectPath, resolvedPath).split(sep).join("/") || ".";
|
|
60
|
+
if (relativePath === ".") {
|
|
61
|
+
throw new Error("Pick a source folder inside this project, not the project root.");
|
|
62
|
+
}
|
|
63
|
+
if (isReservedDatasetPath(relativePath)) {
|
|
64
|
+
throw new Error("Pick an existing source folder under the project root, not `interf/` or `.interf/`.");
|
|
65
|
+
}
|
|
66
|
+
if (!existsSync(resolvedPath)) {
|
|
67
|
+
throw new Error("Pick an existing source folder under the project root.");
|
|
68
|
+
}
|
|
69
|
+
if (!statSync(resolvedPath).isDirectory()) {
|
|
70
|
+
throw new Error("Source folder must be a directory.");
|
|
71
|
+
}
|
|
72
|
+
return relativePath.startsWith("./") ? relativePath : `./${relativePath}`;
|
|
73
|
+
}
|
|
74
|
+
function defaultDatasetNameForPath(datasetPath) {
|
|
75
|
+
const segments = datasetPath
|
|
76
|
+
.replace(/\\/g, "/")
|
|
77
|
+
.replace(/\/+$/g, "")
|
|
78
|
+
.split("/")
|
|
79
|
+
.filter((segment) => segment.length > 0 && segment !== ".");
|
|
80
|
+
return slugify(segments[segments.length - 1] ?? "") || DEFAULT_COMPILED_NAME;
|
|
81
|
+
}
|
|
82
|
+
function findSingleDatasetFolderCandidate(cwd) {
|
|
83
|
+
const visibleDirectories = listVisibleDatasetFolders(cwd);
|
|
84
|
+
if (visibleDirectories.length !== 1) {
|
|
56
85
|
return null;
|
|
57
86
|
}
|
|
58
87
|
return `./${visibleDirectories[0]}`;
|
|
59
88
|
}
|
|
89
|
+
export function listDatasetFolderChoices(cwd = process.cwd()) {
|
|
90
|
+
return listVisibleDatasetFolders(cwd).map((entry) => ({
|
|
91
|
+
value: `./${entry}`,
|
|
92
|
+
label: entry,
|
|
93
|
+
hint: `Use ./${entry} as the source folder`,
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
60
96
|
export function defaultDatasetPathForPrompt(name, introStyle, cwd = process.cwd()) {
|
|
61
97
|
const namedFolderPath = join(cwd, name);
|
|
62
98
|
if (existsSync(namedFolderPath)) {
|
|
@@ -70,15 +106,65 @@ export function defaultDatasetPathForPrompt(name, introStyle, cwd = process.cwd(
|
|
|
70
106
|
}
|
|
71
107
|
}
|
|
72
108
|
if (introStyle === "first") {
|
|
73
|
-
return findSingleDatasetFolderCandidate(cwd) ??
|
|
109
|
+
return findSingleDatasetFolderCandidate(cwd) ?? `./${name}`;
|
|
74
110
|
}
|
|
75
111
|
return `./${name}`;
|
|
76
112
|
}
|
|
113
|
+
async function promptDatasetFolderPath(options) {
|
|
114
|
+
const folderChoices = listDatasetFolderChoices(options.projectPath);
|
|
115
|
+
if (folderChoices.length > 0) {
|
|
116
|
+
const selected = await p.select({
|
|
117
|
+
message: "Which source folder should Interf use?",
|
|
118
|
+
options: [
|
|
119
|
+
...folderChoices,
|
|
120
|
+
{
|
|
121
|
+
value: "__manual__",
|
|
122
|
+
label: "Enter a different path",
|
|
123
|
+
hint: "Use a relative path if the source folder is not listed here",
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
initialValue: folderChoices.some((choice) => choice.value === options.initialPath)
|
|
127
|
+
? options.initialPath
|
|
128
|
+
: undefined,
|
|
129
|
+
});
|
|
130
|
+
if (p.isCancel(selected))
|
|
131
|
+
return null;
|
|
132
|
+
if (selected !== "__manual__") {
|
|
133
|
+
try {
|
|
134
|
+
return normalizeDatasetPathForConfig(options.projectPath, String(selected));
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
p.log.error(error instanceof Error ? error.message : String(error));
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const datasetPath = await p.text({
|
|
143
|
+
message: "Which source folder should Interf use?",
|
|
144
|
+
placeholder: DEFAULT_DATASET_PATH_PLACEHOLDER,
|
|
145
|
+
initialValue: options.initialPath,
|
|
146
|
+
validate: (value) => {
|
|
147
|
+
const normalized = value.trim();
|
|
148
|
+
if (normalized.length === 0)
|
|
149
|
+
return "Source folder is required";
|
|
150
|
+
try {
|
|
151
|
+
normalizeDatasetPathForConfig(options.projectPath, normalized);
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
return error instanceof Error ? error.message : String(error);
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
if (p.isCancel(datasetPath))
|
|
160
|
+
return null;
|
|
161
|
+
return normalizeDatasetPathForConfig(options.projectPath, String(datasetPath));
|
|
162
|
+
}
|
|
77
163
|
export function datasetAboutPromptMessage(introStyle) {
|
|
78
164
|
if (introStyle === "edit") {
|
|
79
|
-
return "What
|
|
165
|
+
return "What work should this source folder stay focused on?";
|
|
80
166
|
}
|
|
81
|
-
return "What
|
|
167
|
+
return "What work should this source folder help with?";
|
|
82
168
|
}
|
|
83
169
|
function formatAttemptLabel(count, noun) {
|
|
84
170
|
return `${count} ${noun}${count === 1 ? "" : "s"}`;
|
|
@@ -97,11 +183,11 @@ export function describeCompileLoopSelection(options) {
|
|
|
97
183
|
}
|
|
98
184
|
if (mode === "retry") {
|
|
99
185
|
const attempts = options.maxAttempts ?? DEFAULT_COMPILE_RETRY_ATTEMPTS;
|
|
100
|
-
return `Compile retries are enabled
|
|
186
|
+
return `Compile retries are enabled here (${formatAttemptLabel(attempts, "total attempt")}).`;
|
|
101
187
|
}
|
|
102
188
|
const loops = options.maxLoops ?? DEFAULT_SELF_IMPROVING_LOOPS;
|
|
103
189
|
const attempts = options.maxAttempts ?? DEFAULT_SELF_IMPROVING_ATTEMPTS;
|
|
104
|
-
return `Self-improving loops are enabled
|
|
190
|
+
return `Self-improving loops are enabled here (${formatAttemptLabel(attempts, "attempt")} per variation, ${formatAttemptLabel(loops, "workflow revision")}).`;
|
|
105
191
|
}
|
|
106
192
|
async function promptCompileRetryAttempts(options) {
|
|
107
193
|
const maxAttempts = await p.text({
|
|
@@ -118,7 +204,8 @@ async function promptCompileRetryAttempts(options) {
|
|
|
118
204
|
});
|
|
119
205
|
if (p.isCancel(maxAttempts))
|
|
120
206
|
return null;
|
|
121
|
-
return compiledMaxAttempts(Number.parseInt(String(maxAttempts).trim(), 10))
|
|
207
|
+
return projectSourceConfig.compiledMaxAttempts(Number.parseInt(String(maxAttempts).trim(), 10))
|
|
208
|
+
?? DEFAULT_COMPILE_RETRY_ATTEMPTS;
|
|
122
209
|
}
|
|
123
210
|
export async function promptCheckCases(options) {
|
|
124
211
|
p.log.info(options.heading);
|
|
@@ -159,7 +246,7 @@ export async function promptCheckCases(options) {
|
|
|
159
246
|
}
|
|
160
247
|
function printDraftTruthChecks(checks) {
|
|
161
248
|
console.log();
|
|
162
|
-
p.log.info(`Draft
|
|
249
|
+
p.log.info(`Draft tests: ${checks.length}`);
|
|
163
250
|
for (const [index, check] of checks.entries()) {
|
|
164
251
|
console.log(` ${index + 1}. ${check.question}`);
|
|
165
252
|
console.log(` Expected: ${check.answer ?? ""}`);
|
|
@@ -171,7 +258,7 @@ async function promptDraftTruthChecks(options) {
|
|
|
171
258
|
const datasetConfig = {
|
|
172
259
|
path: options.datasetPath,
|
|
173
260
|
};
|
|
174
|
-
resolvedDatasetPath = resolveSourceDatasetPath(options.projectPath, datasetConfig);
|
|
261
|
+
resolvedDatasetPath = projectSourceConfig.resolveSourceDatasetPath(options.projectPath, datasetConfig);
|
|
175
262
|
}
|
|
176
263
|
catch (error) {
|
|
177
264
|
p.log.error(error instanceof Error ? error.message : String(error));
|
|
@@ -184,19 +271,19 @@ async function promptDraftTruthChecks(options) {
|
|
|
184
271
|
if (!resolved.executor) {
|
|
185
272
|
if (resolved.cancelled)
|
|
186
273
|
return null;
|
|
187
|
-
p.log.error(resolved.error ?? "No local agent detected for
|
|
274
|
+
p.log.error(resolved.error ?? "No local agent detected for question drafting.");
|
|
188
275
|
const fallback = await p.select({
|
|
189
276
|
message: "How do you want to continue?",
|
|
190
277
|
options: [
|
|
191
278
|
{
|
|
192
279
|
value: "manual",
|
|
193
|
-
label: "Add
|
|
280
|
+
label: "Add questions manually",
|
|
194
281
|
hint: "Write the questions and expected answers yourself",
|
|
195
282
|
},
|
|
196
283
|
{
|
|
197
284
|
value: "skip",
|
|
198
285
|
label: "Skip for now",
|
|
199
|
-
hint: "Save this dataset without
|
|
286
|
+
hint: "Save this dataset without questions",
|
|
200
287
|
},
|
|
201
288
|
],
|
|
202
289
|
});
|
|
@@ -205,7 +292,7 @@ async function promptDraftTruthChecks(options) {
|
|
|
205
292
|
return fallback === "manual" ? "manual" : [];
|
|
206
293
|
}
|
|
207
294
|
while (true) {
|
|
208
|
-
p.log.info("Drafting
|
|
295
|
+
p.log.info("Drafting questions from the source files.");
|
|
209
296
|
const drafted = await draftTruthChecks({
|
|
210
297
|
datasetName: options.datasetName,
|
|
211
298
|
datasetPath: resolvedDatasetPath,
|
|
@@ -214,24 +301,24 @@ async function promptDraftTruthChecks(options) {
|
|
|
214
301
|
targetCount: 4,
|
|
215
302
|
});
|
|
216
303
|
if (!drafted.checks) {
|
|
217
|
-
p.log.error(drafted.error ?? "Could not draft
|
|
304
|
+
p.log.error(drafted.error ?? "Could not draft questions from this source folder.");
|
|
218
305
|
const retryMode = await p.select({
|
|
219
306
|
message: "How do you want to continue?",
|
|
220
307
|
options: [
|
|
221
308
|
{
|
|
222
309
|
value: "retry",
|
|
223
310
|
label: "Try auto-create again",
|
|
224
|
-
hint: "Run the same local agent again on the
|
|
311
|
+
hint: "Run the same local agent again on the source folder",
|
|
225
312
|
},
|
|
226
313
|
{
|
|
227
314
|
value: "manual",
|
|
228
|
-
label: "Add
|
|
229
|
-
hint: "Write the
|
|
315
|
+
label: "Add questions manually",
|
|
316
|
+
hint: "Write the questions yourself instead",
|
|
230
317
|
},
|
|
231
318
|
{
|
|
232
319
|
value: "skip",
|
|
233
320
|
label: "Skip for now",
|
|
234
|
-
hint: "Save this dataset without
|
|
321
|
+
hint: "Save this dataset without questions",
|
|
235
322
|
},
|
|
236
323
|
],
|
|
237
324
|
});
|
|
@@ -243,27 +330,27 @@ async function promptDraftTruthChecks(options) {
|
|
|
243
330
|
}
|
|
244
331
|
printDraftTruthChecks(drafted.checks);
|
|
245
332
|
const nextStep = await p.select({
|
|
246
|
-
message: "Use these
|
|
333
|
+
message: "Use these questions?",
|
|
247
334
|
options: [
|
|
248
335
|
{
|
|
249
336
|
value: "use",
|
|
250
337
|
label: "Use this draft (Recommended)",
|
|
251
|
-
hint: "Save these
|
|
338
|
+
hint: "Save these questions and edit them later if needed",
|
|
252
339
|
},
|
|
253
340
|
{
|
|
254
341
|
value: "retry",
|
|
255
342
|
label: "Draft again",
|
|
256
|
-
hint: "Run the same local agent again on the
|
|
343
|
+
hint: "Run the same local agent again on the source folder",
|
|
257
344
|
},
|
|
258
345
|
{
|
|
259
346
|
value: "manual",
|
|
260
|
-
label: "Add
|
|
261
|
-
hint: "Discard this draft and write the
|
|
347
|
+
label: "Add questions manually instead",
|
|
348
|
+
hint: "Discard this draft and write the questions yourself",
|
|
262
349
|
},
|
|
263
350
|
{
|
|
264
351
|
value: "skip",
|
|
265
352
|
label: "Skip for now",
|
|
266
|
-
hint: "Save this dataset without
|
|
353
|
+
hint: "Save this dataset without questions",
|
|
267
354
|
},
|
|
268
355
|
],
|
|
269
356
|
});
|
|
@@ -283,24 +370,24 @@ async function promptCompiledChecks(options) {
|
|
|
283
370
|
if (options.initialAbout) {
|
|
284
371
|
p.log.info(`About: ${options.initialAbout}`);
|
|
285
372
|
}
|
|
286
|
-
p.log.info("
|
|
373
|
+
p.log.info("Questions are simple question-and-answer pairs Interf uses to check accuracy later, so you can decide whether to trust the portable context.");
|
|
287
374
|
const mode = await p.select({
|
|
288
|
-
message: "How
|
|
375
|
+
message: "How should Interf create them?",
|
|
289
376
|
options: [
|
|
290
377
|
{
|
|
291
378
|
value: "draft",
|
|
292
|
-
label: "Auto-create a draft (Recommended)",
|
|
293
|
-
hint: "Let
|
|
379
|
+
label: "Auto-create a question draft (Recommended)",
|
|
380
|
+
hint: "Let your chosen local agent recommend a few clear, verifiable questions from this source folder",
|
|
294
381
|
},
|
|
295
382
|
{
|
|
296
383
|
value: "manual",
|
|
297
|
-
label: "Add
|
|
384
|
+
label: "Add questions manually",
|
|
298
385
|
hint: "Write the questions and expected answers yourself",
|
|
299
386
|
},
|
|
300
387
|
{
|
|
301
388
|
value: "skip",
|
|
302
389
|
label: "Skip for now",
|
|
303
|
-
hint: "You can save the dataset first and add
|
|
390
|
+
hint: "You can save the dataset first and add questions later",
|
|
304
391
|
},
|
|
305
392
|
],
|
|
306
393
|
});
|
|
@@ -319,7 +406,7 @@ async function promptCompiledChecks(options) {
|
|
|
319
406
|
return null;
|
|
320
407
|
if (drafted === "manual") {
|
|
321
408
|
return promptCheckCases({
|
|
322
|
-
heading: "
|
|
409
|
+
heading: "Questions",
|
|
323
410
|
questionMessage: "Question 1?",
|
|
324
411
|
questionPlaceholder: DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER,
|
|
325
412
|
answerMessage: "Expected answer 1?",
|
|
@@ -330,7 +417,7 @@ async function promptCompiledChecks(options) {
|
|
|
330
417
|
return drafted;
|
|
331
418
|
}
|
|
332
419
|
return promptCheckCases({
|
|
333
|
-
heading: "
|
|
420
|
+
heading: "Questions",
|
|
334
421
|
questionMessage: "Question 1?",
|
|
335
422
|
questionPlaceholder: DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER,
|
|
336
423
|
answerMessage: "Expected answer 1?",
|
|
@@ -341,34 +428,34 @@ async function promptCompiledChecks(options) {
|
|
|
341
428
|
if (options.initialAbout) {
|
|
342
429
|
p.log.info(`About: ${options.initialAbout}`);
|
|
343
430
|
}
|
|
344
|
-
p.log.info(`Current
|
|
431
|
+
p.log.info(`Current questions: ${options.initialChecks.length}`);
|
|
345
432
|
const mode = await p.select({
|
|
346
433
|
message: "What do you want to do with them?",
|
|
347
434
|
options: [
|
|
348
435
|
{
|
|
349
436
|
value: "keep",
|
|
350
437
|
label: "Keep them",
|
|
351
|
-
hint: "Leave the current
|
|
438
|
+
hint: "Leave the current questions as-is",
|
|
352
439
|
},
|
|
353
440
|
{
|
|
354
441
|
value: "add",
|
|
355
442
|
label: "Add more",
|
|
356
|
-
hint: "Append more
|
|
443
|
+
hint: "Append more questions",
|
|
357
444
|
},
|
|
358
445
|
{
|
|
359
446
|
value: "replace",
|
|
360
447
|
label: "Replace all",
|
|
361
|
-
hint: "Rewrite the
|
|
448
|
+
hint: "Rewrite the questions from scratch",
|
|
362
449
|
},
|
|
363
450
|
{
|
|
364
451
|
value: "redraft",
|
|
365
452
|
label: "Replace with auto-created draft",
|
|
366
|
-
hint: "Let a local agent rewrite the
|
|
453
|
+
hint: "Let a local agent rewrite the questions from the dataset files",
|
|
367
454
|
},
|
|
368
455
|
{
|
|
369
456
|
value: "clear",
|
|
370
457
|
label: "Clear them for now",
|
|
371
|
-
hint: "Keep this
|
|
458
|
+
hint: "Keep this setup without questions",
|
|
372
459
|
},
|
|
373
460
|
],
|
|
374
461
|
});
|
|
@@ -391,7 +478,7 @@ async function promptCompiledChecks(options) {
|
|
|
391
478
|
return null;
|
|
392
479
|
if (drafted === "manual") {
|
|
393
480
|
return promptCheckCases({
|
|
394
|
-
heading: "Replace
|
|
481
|
+
heading: "Replace questions",
|
|
395
482
|
questionMessage: "Question 1?",
|
|
396
483
|
questionPlaceholder: DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER,
|
|
397
484
|
answerMessage: "Expected answer 1?",
|
|
@@ -402,7 +489,7 @@ async function promptCompiledChecks(options) {
|
|
|
402
489
|
return drafted;
|
|
403
490
|
}
|
|
404
491
|
const nextChecks = await promptCheckCases({
|
|
405
|
-
heading: mode === "add" ? "Add more
|
|
492
|
+
heading: mode === "add" ? "Add more questions" : "Replace questions",
|
|
406
493
|
questionMessage: mode === "add"
|
|
407
494
|
? `Question ${options.initialChecks.length + 1}?`
|
|
408
495
|
: "Question 1?",
|
|
@@ -433,7 +520,8 @@ async function promptSelfImprovingLoops(options) {
|
|
|
433
520
|
});
|
|
434
521
|
if (p.isCancel(maxLoops))
|
|
435
522
|
return null;
|
|
436
|
-
return compiledMaxLoops(Number.parseInt(String(maxLoops).trim(), 10))
|
|
523
|
+
return projectSourceConfig.compiledMaxLoops(Number.parseInt(String(maxLoops).trim(), 10))
|
|
524
|
+
?? DEFAULT_SELF_IMPROVING_LOOPS;
|
|
437
525
|
}
|
|
438
526
|
export async function promptCompileLoopSelection(options) {
|
|
439
527
|
if (!options.hasChecks) {
|
|
@@ -456,7 +544,7 @@ export async function promptCompileLoopSelection(options) {
|
|
|
456
544
|
once: {
|
|
457
545
|
value: "once",
|
|
458
546
|
label: "Compile once",
|
|
459
|
-
hint: "Build
|
|
547
|
+
hint: "Build portable context once with the selected workflow",
|
|
460
548
|
},
|
|
461
549
|
"self-improving": {
|
|
462
550
|
value: "self-improving",
|
|
@@ -468,7 +556,7 @@ export async function promptCompileLoopSelection(options) {
|
|
|
468
556
|
retry: {
|
|
469
557
|
value: "retry",
|
|
470
558
|
label: "Retry same workflow",
|
|
471
|
-
hint: `Retry compile and
|
|
559
|
+
hint: `Retry compile and portable-context checks up to ${options.initialMaxAttempts ?? DEFAULT_COMPILE_RETRY_ATTEMPTS} total time${(options.initialMaxAttempts ?? DEFAULT_COMPILE_RETRY_ATTEMPTS) === 1 ? "" : "s"} without editing the workflow`,
|
|
472
560
|
},
|
|
473
561
|
};
|
|
474
562
|
const orderedModes = (hasSavedPolicy
|
|
@@ -485,7 +573,7 @@ export async function promptCompileLoopSelection(options) {
|
|
|
485
573
|
]).filter((mode, index, list) => list.indexOf(mode) === index)
|
|
486
574
|
.filter((mode) => includeCompileOnce || mode !== "once");
|
|
487
575
|
const selectedMode = await p.select({
|
|
488
|
-
message: options.message ?? "How should this
|
|
576
|
+
message: options.message ?? "How should this compile run work?",
|
|
489
577
|
options: orderedModes.map((mode) => optionsByMode[mode]),
|
|
490
578
|
});
|
|
491
579
|
if (p.isCancel(selectedMode))
|
|
@@ -519,64 +607,50 @@ export async function promptSingleCompiledConfig(options = {}) {
|
|
|
519
607
|
const initial = options.initial;
|
|
520
608
|
const introStyle = options.introStyle ?? "first";
|
|
521
609
|
if (introStyle === "first") {
|
|
522
|
-
p.log.info("Pick the
|
|
523
|
-
p.log.info("Then say what
|
|
610
|
+
p.log.info("Pick the source folder for this work.");
|
|
611
|
+
p.log.info("Then say what work this source folder should help with and review the recommended questions.");
|
|
524
612
|
}
|
|
525
613
|
else if (introStyle === "additional") {
|
|
526
|
-
p.log.info("Add another
|
|
614
|
+
p.log.info("Add another setup only if this project needs a separate folder or set of questions.");
|
|
527
615
|
}
|
|
528
616
|
const fixedName = options.fixedName ? slugify(String(options.fixedName)) : undefined;
|
|
529
617
|
if (options.fixedName && !fixedName) {
|
|
530
|
-
p.log.error("Current dataset
|
|
618
|
+
p.log.error("Current dataset name needs letters, numbers, or dashes.");
|
|
531
619
|
return null;
|
|
532
620
|
}
|
|
533
|
-
let name = fixedName
|
|
534
|
-
if (name) {
|
|
535
|
-
|
|
536
|
-
p.log.info(`Editing truth checks for dataset "${name}".`);
|
|
537
|
-
}
|
|
621
|
+
let name = fixedName;
|
|
622
|
+
if (name && options.fixedName) {
|
|
623
|
+
p.log.info(`Editing questions for dataset "${name}".`);
|
|
538
624
|
}
|
|
539
|
-
|
|
540
|
-
|
|
625
|
+
let about = normalizeOptionalPromptText(initial?.about);
|
|
626
|
+
const projectPath = options.projectPath ?? process.cwd();
|
|
627
|
+
const defaultNameSeed = slugify(String(initial?.name ?? DEFAULT_COMPILED_NAME)) || DEFAULT_COMPILED_NAME;
|
|
628
|
+
const defaultDatasetPath = initial?.path ?? defaultDatasetPathForPrompt(defaultNameSeed, introStyle, projectPath);
|
|
629
|
+
const normalizedDatasetPath = await promptDatasetFolderPath({
|
|
630
|
+
projectPath,
|
|
631
|
+
initialPath: defaultDatasetPath,
|
|
632
|
+
});
|
|
633
|
+
if (!normalizedDatasetPath)
|
|
634
|
+
return null;
|
|
635
|
+
if (!name) {
|
|
636
|
+
const suggestedName = defaultDatasetNameForPath(normalizedDatasetPath);
|
|
541
637
|
const rawName = await p.text({
|
|
542
|
-
message: "Dataset
|
|
638
|
+
message: "Dataset name?",
|
|
543
639
|
placeholder: suggestedName,
|
|
544
640
|
initialValue: suggestedName,
|
|
545
|
-
validate: (value) => (value.trim().length === 0 ? "
|
|
641
|
+
validate: (value) => (value.trim().length === 0 ? "Dataset name is required" : undefined),
|
|
546
642
|
});
|
|
547
643
|
if (p.isCancel(rawName))
|
|
548
644
|
return null;
|
|
549
645
|
name = slugify(String(rawName));
|
|
550
646
|
if (!name) {
|
|
551
|
-
p.log.error("Dataset
|
|
647
|
+
p.log.error("Dataset name needs letters, numbers, or dashes.");
|
|
552
648
|
return null;
|
|
553
649
|
}
|
|
554
650
|
if (name !== rawName) {
|
|
555
|
-
p.log.info(`Dataset
|
|
651
|
+
p.log.info(`Dataset name: ${name}`);
|
|
556
652
|
}
|
|
557
653
|
}
|
|
558
|
-
let about = normalizeOptionalPromptText(initial?.about);
|
|
559
|
-
const defaultDatasetPath = initial?.path ?? defaultDatasetPathForPrompt(name, introStyle, options.projectPath ?? process.cwd());
|
|
560
|
-
const datasetPath = await p.text({
|
|
561
|
-
message: "Dataset folder?",
|
|
562
|
-
placeholder: DEFAULT_DATASET_PATH_PLACEHOLDER,
|
|
563
|
-
initialValue: defaultDatasetPath,
|
|
564
|
-
validate: (value) => {
|
|
565
|
-
const normalized = value.trim();
|
|
566
|
-
if (normalized.length === 0)
|
|
567
|
-
return "Dataset folder is required";
|
|
568
|
-
try {
|
|
569
|
-
resolveSourceDatasetPath(options.projectPath ?? process.cwd(), { path: normalized });
|
|
570
|
-
return undefined;
|
|
571
|
-
}
|
|
572
|
-
catch (error) {
|
|
573
|
-
return error instanceof Error ? error.message : String(error);
|
|
574
|
-
}
|
|
575
|
-
},
|
|
576
|
-
});
|
|
577
|
-
if (p.isCancel(datasetPath))
|
|
578
|
-
return null;
|
|
579
|
-
const normalizedDatasetPath = String(datasetPath).trim();
|
|
580
654
|
if (options.selectedWorkflowLabel) {
|
|
581
655
|
p.log.info(`Workflow: ${options.selectedWorkflowLabel}`);
|
|
582
656
|
}
|
|
@@ -610,7 +684,7 @@ export async function promptSingleCompiledConfig(options = {}) {
|
|
|
610
684
|
hasChecks: checks.length > 0,
|
|
611
685
|
intro: [
|
|
612
686
|
"Compile mode",
|
|
613
|
-
"Choose whether
|
|
687
|
+
"Choose whether Interf should compile once, retry the same workflow, or try self-improving workflow variations on the same questions.",
|
|
614
688
|
],
|
|
615
689
|
});
|
|
616
690
|
if (compileLoopSelection === null)
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import * as p from "@clack/prompts";
|
|
3
|
-
import { detectInterf, listCompiledDatasetsForSourceFolder, readInterfConfig, resolveSourceControlPath, } from "
|
|
4
|
-
import { computeCompiledHealth } from "
|
|
5
|
-
import {
|
|
3
|
+
import { detectInterf, listCompiledDatasetsForSourceFolder, readInterfConfig, resolveSourceControlPath, } from "../../packages/project-model/interf.js";
|
|
4
|
+
import { computeCompiledHealth } from "../../packages/compiler/state.js";
|
|
5
|
+
import { sourceDatasetConfigFromInterfConfig, loadCompiledDatasetConfig, } from "../../packages/project-model/source-config.js";
|
|
6
|
+
import { printSavedTestComparisonState, readCurrentSavedTestComparison } from "./test-flow.js";
|
|
6
7
|
function statusColor(status) {
|
|
7
8
|
switch (status) {
|
|
8
9
|
case "compiled":
|
|
@@ -17,7 +18,7 @@ function statusColor(status) {
|
|
|
17
18
|
}
|
|
18
19
|
export const statusCommand = {
|
|
19
20
|
command: "status",
|
|
20
|
-
describe: "Show deterministic health for
|
|
21
|
+
describe: "Show deterministic health for portable context",
|
|
21
22
|
handler: async () => {
|
|
22
23
|
let compiledPath = null;
|
|
23
24
|
const detected = detectInterf(process.cwd());
|
|
@@ -32,8 +33,8 @@ export const statusCommand = {
|
|
|
32
33
|
}));
|
|
33
34
|
if (local.length === 0) {
|
|
34
35
|
process.exitCode = 1;
|
|
35
|
-
console.log(chalk.red(" No
|
|
36
|
-
console.log(chalk.dim(" Run `interf`, save
|
|
36
|
+
console.log(chalk.red(" No portable contexts found."));
|
|
37
|
+
console.log(chalk.dim(" Run `interf`, save questions, and compile portable context first."));
|
|
37
38
|
return;
|
|
38
39
|
}
|
|
39
40
|
if (local.length === 1) {
|
|
@@ -41,7 +42,7 @@ export const statusCommand = {
|
|
|
41
42
|
}
|
|
42
43
|
else {
|
|
43
44
|
const selected = await p.select({
|
|
44
|
-
message: "Which
|
|
45
|
+
message: "Which setup?",
|
|
45
46
|
options: local.map((entry) => ({ value: entry.path, label: entry.name })),
|
|
46
47
|
});
|
|
47
48
|
if (p.isCancel(selected))
|
|
@@ -58,15 +59,23 @@ export const statusCommand = {
|
|
|
58
59
|
console.log(chalk.dim(` ${health.summary}`));
|
|
59
60
|
const compiledConfig = readInterfConfig(compiledPath);
|
|
60
61
|
const sourcePath = resolveSourceControlPath(compiledPath);
|
|
61
|
-
const
|
|
62
|
-
?
|
|
63
|
-
|
|
62
|
+
const latestComparisonState = compiledConfig
|
|
63
|
+
? readCurrentSavedTestComparison({
|
|
64
|
+
projectPath: sourcePath,
|
|
65
|
+
datasetName: compiledConfig.name,
|
|
66
|
+
checks: (loadCompiledDatasetConfig(compiledPath)
|
|
67
|
+
?? sourceDatasetConfigFromInterfConfig(compiledConfig)).checks,
|
|
68
|
+
})
|
|
69
|
+
: { comparison: null, stale: false };
|
|
70
|
+
const latestComparison = latestComparisonState.comparison;
|
|
64
71
|
if (latestComparison) {
|
|
65
72
|
printSavedTestComparisonState(latestComparison);
|
|
66
73
|
}
|
|
67
74
|
else {
|
|
68
75
|
console.log();
|
|
69
|
-
console.log(chalk.dim(
|
|
76
|
+
console.log(chalk.dim(latestComparisonState.stale
|
|
77
|
+
? " Saved test results are stale for the current questions. Run `interf test` again."
|
|
78
|
+
: " No saved comparison yet. Run `interf test` to measure source files and the portable context."));
|
|
70
79
|
}
|
|
71
80
|
console.log();
|
|
72
81
|
const metricOrder = [
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { type TestTargetCandidate, type TestTargetResult } from "
|
|
2
|
-
import type { WorkflowExecutionProfile, WorkflowExecutor } from "
|
|
3
|
-
import type { TestSandboxRetentionMode } from "
|
|
4
|
-
import type { SourceDatasetConfig
|
|
1
|
+
import { type TestTargetCandidate, type TestTargetResult } from "../../packages/testing/test.js";
|
|
2
|
+
import type { WorkflowExecutionProfile, WorkflowExecutor } from "../../packages/agents/lib/executors.js";
|
|
3
|
+
import type { TestSandboxRetentionMode } from "../../packages/testing/test-sandbox.js";
|
|
4
|
+
import type { SourceDatasetConfig } from "../../packages/project-model/lib/schema.js";
|
|
5
|
+
import type { TestRunComparison, TestRunMode } from "../../packages/testing/lib/schema.js";
|
|
5
6
|
export interface SavedTestOutcome {
|
|
6
7
|
runPath: string;
|
|
7
8
|
displayRunPath?: string;
|
|
@@ -15,6 +16,14 @@ export interface AgentTestMatrixRow {
|
|
|
15
16
|
}
|
|
16
17
|
export declare function questionPassRate(outcome: SavedTestOutcome): number;
|
|
17
18
|
export declare function readSavedTestComparison(projectPath: string, datasetName: string): TestRunComparison | null;
|
|
19
|
+
export declare function readCurrentSavedTestComparison(options: {
|
|
20
|
+
projectPath: string;
|
|
21
|
+
datasetName: string;
|
|
22
|
+
checks: SourceDatasetConfig["checks"];
|
|
23
|
+
}): {
|
|
24
|
+
comparison: TestRunComparison | null;
|
|
25
|
+
stale: boolean;
|
|
26
|
+
};
|
|
18
27
|
export declare function printSavedTestComparisonState(payload: TestRunComparison, comparisonRunPath?: string | null): void;
|
|
19
28
|
export declare function printAgentTestMatrix(rows: AgentTestMatrixRow[]): void;
|
|
20
29
|
export declare function printAgentTestFailures(rows: AgentTestMatrixRow[]): void;
|