@interf/compiler 0.6.1 → 0.6.3
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 +94 -74
- 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 +12 -12
- package/dist/{commands → cli/commands}/compile-controller.d.ts +3 -3
- package/dist/{commands → cli/commands}/compile-controller.js +36 -34
- 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 +61 -34
- 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 +157 -72
- package/dist/{commands → cli/commands}/list.js +5 -5
- package/dist/{commands → cli/commands}/reset.js +4 -4
- package/dist/{commands → cli/commands}/source-config-wizard.d.ts +8 -3
- package/dist/{commands → cli/commands}/source-config-wizard.js +161 -87
- 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 +30 -26
- package/dist/cli/commands/test.d.ts +14 -0
- package/dist/{commands → cli/commands}/test.js +39 -23
- 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/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/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/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/package-root.d.ts +1 -0
- package/dist/lib/package-root.js +1 -0
- 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/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 +17 -0
- package/dist/packages/agents/index.js +15 -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/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 +69 -0
- package/dist/packages/agents/lib/shells.js +1021 -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 +48 -0
- package/dist/packages/compiler/compiled-compile.js +256 -0
- package/dist/packages/compiler/compiled-schema.d.ts +31 -0
- package/dist/packages/compiler/compiled-schema.js +141 -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 +361 -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 +40 -0
- package/dist/packages/project-model/compiled-paths.js +106 -0
- package/dist/packages/project-model/compiled-raw.d.ts +49 -0
- package/dist/packages/project-model/compiled-raw.js +102 -0
- package/dist/packages/project-model/compiled-reset.d.ts +2 -0
- package/dist/packages/project-model/compiled-reset.js +72 -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 +3 -0
- package/dist/packages/project-model/interf-bootstrap.js +18 -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 +297 -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 +120 -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 +209 -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/index.d.ts +9 -0
- package/dist/packages/workflow-package/index.js +9 -0
- package/dist/packages/workflow-package/interf-workflow-package.d.ts +25 -0
- package/dist/packages/workflow-package/interf-workflow-package.js +342 -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 +54 -0
- package/dist/packages/workflow-package/local-workflows.js +422 -0
- package/dist/packages/workflow-package/workflow-definitions.d.ts +78 -0
- package/dist/packages/workflow-package/workflow-definitions.js +203 -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,6 +1,5 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
import {
|
|
3
|
-
import { loadUserConfig } from "../lib/user-config.js";
|
|
2
|
+
import { agents, userConfig } from "../../packages/agents/index.js";
|
|
4
3
|
function iconFor(status) {
|
|
5
4
|
if (status === "pass")
|
|
6
5
|
return chalk.green("✓");
|
|
@@ -26,8 +25,8 @@ export const doctorCommand = {
|
|
|
26
25
|
}),
|
|
27
26
|
handler: async (argv) => {
|
|
28
27
|
const checks = [];
|
|
29
|
-
const config = loadUserConfig();
|
|
30
|
-
const { agent, error } = resolveAgent();
|
|
28
|
+
const config = userConfig.loadUserConfig();
|
|
29
|
+
const { agent, error } = agents.resolveAgent();
|
|
31
30
|
if (config) {
|
|
32
31
|
checks.push({
|
|
33
32
|
id: "config",
|
|
@@ -73,7 +72,7 @@ export const doctorCommand = {
|
|
|
73
72
|
message: `${agent.displayName} is configured and available as \`${agent.command}\``,
|
|
74
73
|
});
|
|
75
74
|
if (argv.live) {
|
|
76
|
-
const preflight = runAgentPreflight(agent);
|
|
75
|
+
const preflight = agents.runAgentPreflight(agent);
|
|
77
76
|
checks.push({
|
|
78
77
|
id: "live",
|
|
79
78
|
label: "Live executor preflight",
|
|
@@ -98,7 +97,7 @@ export const doctorCommand = {
|
|
|
98
97
|
id: "live",
|
|
99
98
|
label: "Live executor preflight",
|
|
100
99
|
status: "skipped",
|
|
101
|
-
message: "Skipped. Run `interf doctor --live` to exercise the real local agent before a
|
|
100
|
+
message: "Skipped. Run `interf doctor --live` to exercise the real local agent before a check draft, workflow authoring run, test, or compile.",
|
|
102
101
|
});
|
|
103
102
|
}
|
|
104
103
|
const ok = checks.every((check) => check.status !== "fail");
|
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
import * as p from "@clack/prompts";
|
|
2
|
-
import {
|
|
3
|
-
import { detectAgents, ensureAgentAutomatedRunReady, supportsAutomatedRuns } from "../lib/agents.js";
|
|
4
|
-
import { createLocalAgentExecutor, resolveLocalExecutor, } from "../lib/executors.js";
|
|
5
|
-
import { loadUserConfig, saveUserConfig } from "../lib/user-config.js";
|
|
2
|
+
import { constants, agents, executors, userConfig } from "../../packages/agents/index.js";
|
|
6
3
|
const promptedPurposes = new Set();
|
|
7
4
|
function supportedDetectedAgents() {
|
|
8
|
-
return detectAgents().filter((agent) => AGENTS.some((candidate) => candidate.name === agent.name) && supportsAutomatedRuns(agent));
|
|
5
|
+
return agents.detectAgents().filter((agent) => constants.AGENTS.some((candidate) => candidate.name === agent.name) && agents.supportsAutomatedRuns(agent));
|
|
9
6
|
}
|
|
10
7
|
export function resolvedConfiguredAgentName() {
|
|
11
|
-
const current = loadUserConfig();
|
|
8
|
+
const current = userConfig.loadUserConfig();
|
|
12
9
|
if (!current)
|
|
13
10
|
return null;
|
|
14
|
-
const configured = AGENTS.find((agent) => agent.command === current.agentCommand) ??
|
|
15
|
-
AGENTS.find((agent) => agent.name === current.agent) ??
|
|
16
|
-
AGENTS.find((agent) => agent.displayName === current.agent);
|
|
11
|
+
const configured = constants.AGENTS.find((agent) => agent.command === current.agentCommand) ??
|
|
12
|
+
constants.AGENTS.find((agent) => agent.name === current.agent) ??
|
|
13
|
+
constants.AGENTS.find((agent) => agent.displayName === current.agent);
|
|
17
14
|
return configured?.name ?? null;
|
|
18
15
|
}
|
|
19
16
|
function persistSelectedAgent(selectedName) {
|
|
20
17
|
const selected = supportedDetectedAgents().find((agent) => agent.name === selectedName);
|
|
21
18
|
if (!selected)
|
|
22
19
|
return;
|
|
23
|
-
const current = loadUserConfig();
|
|
24
|
-
saveUserConfig({
|
|
20
|
+
const current = userConfig.loadUserConfig();
|
|
21
|
+
userConfig.saveUserConfig({
|
|
25
22
|
agent: selected.name,
|
|
26
23
|
agentCommand: selected.command,
|
|
27
24
|
skillsInstalled: current?.skillsInstalled ?? false,
|
|
@@ -43,13 +40,13 @@ export function resolveNamedLocalExecutor(agentName, options = {}) {
|
|
|
43
40
|
return { executor: null, error: `Local agent \"${agentName}\" is not detected.` };
|
|
44
41
|
}
|
|
45
42
|
if (options.preflight !== false) {
|
|
46
|
-
const readiness = ensureAgentAutomatedRunReady(agent);
|
|
43
|
+
const readiness = agents.ensureAgentAutomatedRunReady(agent);
|
|
47
44
|
if (!readiness.ok) {
|
|
48
45
|
return { executor: null, error: readiness.error };
|
|
49
46
|
}
|
|
50
47
|
}
|
|
51
48
|
return {
|
|
52
|
-
executor: createLocalAgentExecutor(agent, options.executionProfile),
|
|
49
|
+
executor: executors.createLocalAgentExecutor(agent, options.executionProfile),
|
|
53
50
|
};
|
|
54
51
|
}
|
|
55
52
|
export async function promptForTestAgents() {
|
|
@@ -89,7 +86,7 @@ export async function promptForTestAgents() {
|
|
|
89
86
|
}
|
|
90
87
|
async function promptForRunAgent(purpose) {
|
|
91
88
|
const purposeLabel = purpose === "draft"
|
|
92
|
-
? "
|
|
89
|
+
? "check draft"
|
|
93
90
|
: purpose === "workflow"
|
|
94
91
|
? "workflow authoring"
|
|
95
92
|
: purpose;
|
|
@@ -147,7 +144,7 @@ export async function resolveOrConfigureLocalExecutor(options = {}) {
|
|
|
147
144
|
return { executor: null, error: "No local agent detected." };
|
|
148
145
|
}
|
|
149
146
|
}
|
|
150
|
-
const resolved = resolveLocalExecutor(options);
|
|
147
|
+
const resolved = executors.resolveLocalExecutor(options);
|
|
151
148
|
if (resolved.executor)
|
|
152
149
|
return resolved;
|
|
153
150
|
const needsChoice = typeof resolved.error === "string" &&
|
|
@@ -162,5 +159,5 @@ export async function resolveOrConfigureLocalExecutor(options = {}) {
|
|
|
162
159
|
if (!configured.selected) {
|
|
163
160
|
return resolved;
|
|
164
161
|
}
|
|
165
|
-
return resolveLocalExecutor(options);
|
|
162
|
+
return executors.resolveLocalExecutor(options);
|
|
166
163
|
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { CommandModule } from "yargs";
|
|
2
|
-
import type { SourceDatasetConfig } from "
|
|
2
|
+
import type { SourceDatasetConfig } from "../../packages/project-model/lib/schema.js";
|
|
3
|
+
import { type AgentTestMatrixRow } from "./test-flow.js";
|
|
3
4
|
import { runCompileCommand } from "./compile.js";
|
|
5
|
+
export type CurrentRunTargetStatus = "pass" | "mixed" | "fail" | "missing";
|
|
6
|
+
export declare function currentRunTargetStatus(rows: AgentTestMatrixRow[], target: "raw" | "compiled"): CurrentRunTargetStatus;
|
|
4
7
|
export declare function compileSelectedCompiled(sourcePath: string, compiledConfig: SourceDatasetConfig, deps?: {
|
|
5
8
|
runCompileCommand?: typeof runCompileCommand;
|
|
6
9
|
}): Promise<import("./compile.js").CompileCommandResult | null>;
|
|
@@ -1,19 +1,32 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import * as p from "@clack/prompts";
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
|
-
import { detectInterf, readInterfConfig, resolveSourceControlPath, } from "
|
|
5
|
-
import { SOURCE_FOLDER_CONFIG_FILE, syncCompiledInterfConfigFromSourceDatasetConfig, upsertSourceDatasetConfig, } from "
|
|
4
|
+
import { detectInterf, readInterfConfig, resolveSourceControlPath, } from "../../packages/project-model/interf.js";
|
|
5
|
+
import { SOURCE_FOLDER_CONFIG_FILE, syncCompiledInterfConfigFromSourceDatasetConfig, upsertSourceDatasetConfig, } from "../../packages/project-model/source-config.js";
|
|
6
6
|
import { DEFAULT_COMPILED_NAME, describeCompileLoopSelection, promptSingleCompiledConfig, } from "./source-config-wizard.js";
|
|
7
7
|
import { buildCompiledWorkflowOptions, chooseCompiledWorkflow, createWorkflowWizard, } from "./create-workflow-wizard.js";
|
|
8
8
|
import { findBuiltCompiledPath, findSavedCompiledConfig, listSavedCompiledEntries, } from "./compiled-flow.js";
|
|
9
|
-
import {
|
|
9
|
+
import { readCurrentSavedTestComparison, } from "./test-flow.js";
|
|
10
10
|
import { runCompileCommand } from "./compile.js";
|
|
11
11
|
import { runTestCommand } from "./test.js";
|
|
12
|
+
export function currentRunTargetStatus(rows, target) {
|
|
13
|
+
const outcomes = rows
|
|
14
|
+
.map((row) => (target === "raw" ? row.rawOutcome : row.compiledOutcome))
|
|
15
|
+
.filter((outcome) => Boolean(outcome));
|
|
16
|
+
if (outcomes.length === 0)
|
|
17
|
+
return "missing";
|
|
18
|
+
const passFlags = outcomes.map((outcome) => outcome.result.totalCases > 0 && outcome.result.passedCases === outcome.result.totalCases);
|
|
19
|
+
if (passFlags.every(Boolean))
|
|
20
|
+
return "pass";
|
|
21
|
+
if (passFlags.some(Boolean))
|
|
22
|
+
return "mixed";
|
|
23
|
+
return "fail";
|
|
24
|
+
}
|
|
12
25
|
function describeSavedQuestions(dataset) {
|
|
13
26
|
const count = dataset.checks.length;
|
|
14
27
|
if (count === 0)
|
|
15
|
-
return "No
|
|
16
|
-
return `${count}
|
|
28
|
+
return "No checks yet";
|
|
29
|
+
return `${count} check${count === 1 ? "" : "s"}`;
|
|
17
30
|
}
|
|
18
31
|
function printDatasetSummary(options) {
|
|
19
32
|
const compiledConfig = options.builtCompiledPath
|
|
@@ -21,7 +34,7 @@ function printDatasetSummary(options) {
|
|
|
21
34
|
: null;
|
|
22
35
|
const workflowLabel = `${options.dataset.workflow ?? "interf"}${compiledConfig?.workflow_origin?.local_draft === true ? " (local draft)" : ""}`;
|
|
23
36
|
p.log.info(`Dataset: ${options.dataset.name}`);
|
|
24
|
-
p.log.info(`
|
|
37
|
+
p.log.info(`Source folder: ${options.dataset.path}`);
|
|
25
38
|
if (options.dataset.about) {
|
|
26
39
|
p.log.info(`About: ${options.dataset.about}`);
|
|
27
40
|
}
|
|
@@ -31,57 +44,62 @@ function printDatasetSummary(options) {
|
|
|
31
44
|
maxLoops: options.dataset.max_loops,
|
|
32
45
|
}));
|
|
33
46
|
p.log.info(describeSavedQuestions(options.dataset));
|
|
34
|
-
p.log.info(options.built ? "Compiled
|
|
47
|
+
p.log.info(options.built ? "Compiled context is available." : "Compiled context has not been built yet.");
|
|
35
48
|
if (options.latestComparison?.raw && options.latestComparison?.compiled) {
|
|
36
|
-
p.log.info(`Latest saved comparison: files-as-is ${options.latestComparison.raw.passed_cases}/${options.latestComparison.raw.total_cases}, compiled ${options.latestComparison.compiled.passed_cases}/${options.latestComparison.compiled.total_cases}.`);
|
|
49
|
+
p.log.info(`Latest saved comparison: files-as-is ${options.latestComparison.raw.passed_cases}/${options.latestComparison.raw.total_cases}, compiled context ${options.latestComparison.compiled.passed_cases}/${options.latestComparison.compiled.total_cases}.`);
|
|
37
50
|
}
|
|
38
51
|
else if (options.latestComparison?.raw) {
|
|
39
|
-
p.log.info(`Latest files-as-is
|
|
52
|
+
p.log.info(`Latest saved files-as-is run: ${options.latestComparison.raw.passed_cases}/${options.latestComparison.raw.total_cases}.`);
|
|
40
53
|
}
|
|
41
54
|
else if (options.latestComparison?.compiled) {
|
|
42
|
-
p.log.info(`Latest compiled run: ${options.latestComparison.compiled.passed_cases}/${options.latestComparison.compiled.total_cases}.`);
|
|
55
|
+
p.log.info(`Latest compiled-context run: ${options.latestComparison.compiled.passed_cases}/${options.latestComparison.compiled.total_cases}.`);
|
|
56
|
+
}
|
|
57
|
+
else if (options.latestComparisonStale) {
|
|
58
|
+
p.log.info("Saved test results are stale for the current checks.");
|
|
43
59
|
}
|
|
44
60
|
if (options.sourcePath !== process.cwd()) {
|
|
45
|
-
p.log.info(`
|
|
61
|
+
p.log.info(`Project folder: ${options.sourcePath}`);
|
|
46
62
|
}
|
|
47
63
|
}
|
|
48
64
|
async function promptDatasetAction(dataset, built, latestComparison) {
|
|
49
65
|
const options = [];
|
|
50
66
|
const hasSavedRawBaseline = Boolean(latestComparison?.raw);
|
|
51
|
-
const
|
|
67
|
+
const latestRawPasses = latestComparison?.raw &&
|
|
52
68
|
latestComparison.raw.passed_cases === latestComparison.raw.total_cases;
|
|
53
69
|
if (dataset.checks.length > 0) {
|
|
54
70
|
options.push({
|
|
55
71
|
value: "test",
|
|
56
72
|
label: built
|
|
57
|
-
? "Compare files-as-is and compiled
|
|
73
|
+
? "Compare files-as-is and compiled context (Recommended)"
|
|
58
74
|
: hasSavedRawBaseline
|
|
59
75
|
? "Rerun the files-as-is baseline"
|
|
60
76
|
: "Measure the files-as-is baseline (Recommended)",
|
|
61
77
|
hint: built
|
|
62
|
-
? "See whether
|
|
78
|
+
? "See whether the compiled context helps on the checks"
|
|
63
79
|
: hasSavedRawBaseline
|
|
64
80
|
? "Refresh the saved raw baseline on the current checks"
|
|
65
|
-
: "See whether the
|
|
81
|
+
: "See whether the source files are already good enough before compiling",
|
|
66
82
|
});
|
|
67
83
|
}
|
|
68
84
|
options.push({
|
|
69
85
|
value: "compile",
|
|
70
|
-
label: built ? "Rebuild the compiled
|
|
86
|
+
label: built ? "Rebuild the compiled context" : "Build the compiled context",
|
|
71
87
|
hint: built
|
|
72
|
-
? "Refresh it from the current
|
|
88
|
+
? "Refresh it from the current source files"
|
|
73
89
|
: dataset.checks.length > 0
|
|
74
|
-
?
|
|
75
|
-
? "Optional:
|
|
76
|
-
:
|
|
90
|
+
? latestRawPasses
|
|
91
|
+
? "Optional: build the compiled context for a side-by-side comparison with the latest saved raw run"
|
|
92
|
+
: hasSavedRawBaseline
|
|
93
|
+
? "Some checks still fail on the source files. Build a context folder and compare it on the same checks"
|
|
94
|
+
: "Build a context folder and compare it on the same checks"
|
|
77
95
|
: "Build it first, then measure it later",
|
|
78
96
|
}, {
|
|
79
97
|
value: "dataset",
|
|
80
|
-
label: "Add another
|
|
98
|
+
label: "Add another setup",
|
|
81
99
|
hint: "Add a separate folder, focus, or question set",
|
|
82
100
|
}, {
|
|
83
101
|
value: "edit",
|
|
84
|
-
label: "Edit
|
|
102
|
+
label: "Edit checks and settings",
|
|
85
103
|
hint: "Update checks, focus, workflow, or compile mode",
|
|
86
104
|
}, {
|
|
87
105
|
value: "workflow",
|
|
@@ -102,22 +120,68 @@ async function promptDatasetAction(dataset, built, latestComparison) {
|
|
|
102
120
|
}
|
|
103
121
|
function printDatasetRecommendation(dataset, built, latestComparison) {
|
|
104
122
|
if (dataset.checks.length === 0) {
|
|
105
|
-
p.log.info("Recommended first step: save a few
|
|
123
|
+
p.log.info("Recommended first step: save a few checks for this dataset.");
|
|
106
124
|
return;
|
|
107
125
|
}
|
|
108
126
|
if (!built) {
|
|
109
127
|
if (latestComparison?.raw) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
p.log.info(`Latest files-as-is baseline: ${latestComparison.raw.passed_cases}/${latestComparison.raw.total_cases}. Compile if you want to improve it.`);
|
|
128
|
+
p.log.info(latestComparison.raw.passed_cases === latestComparison.raw.total_cases
|
|
129
|
+
? `Latest files-as-is run: ${latestComparison.raw.passed_cases}/${latestComparison.raw.total_cases}. Rerun the baseline if you want current numbers for a different agent set, or build the context folder if you want a side-by-side comparison.`
|
|
130
|
+
: `Latest files-as-is run: ${latestComparison.raw.passed_cases}/${latestComparison.raw.total_cases}. Some checks still fail on the source files. Build the context folder if you want Interf to prepare the task context and compare it on the same checks.`);
|
|
115
131
|
return;
|
|
116
132
|
}
|
|
117
133
|
p.log.info("Recommended first step: measure the files-as-is baseline before compiling.");
|
|
118
134
|
return;
|
|
119
135
|
}
|
|
120
|
-
p.log.info("Recommended first step: compare the files-as-is baseline and the compiled
|
|
136
|
+
p.log.info("Recommended first step: compare the files-as-is baseline and the compiled context.");
|
|
137
|
+
}
|
|
138
|
+
async function promptPostBaselineAction(rows) {
|
|
139
|
+
const status = currentRunTargetStatus(rows, "raw");
|
|
140
|
+
const subject = rows.length === 1 ? "selected agent" : "selected agents";
|
|
141
|
+
if (status === "pass") {
|
|
142
|
+
p.log.info(`Files-as-is passed on all ${subject} in this run.`);
|
|
143
|
+
}
|
|
144
|
+
else if (status === "mixed") {
|
|
145
|
+
p.log.info(`Files-as-is was mixed across the ${subject} in this run.`);
|
|
146
|
+
}
|
|
147
|
+
else if (status === "fail") {
|
|
148
|
+
p.log.info(`Files-as-is did not pass on the ${subject} in this run.`);
|
|
149
|
+
}
|
|
150
|
+
const compileRecommended = status !== "pass";
|
|
151
|
+
const selected = await p.select({
|
|
152
|
+
message: "What do you want to do next?",
|
|
153
|
+
options: [
|
|
154
|
+
{
|
|
155
|
+
value: "compile",
|
|
156
|
+
label: compileRecommended
|
|
157
|
+
? "Build the compiled context (Recommended)"
|
|
158
|
+
: "Build the compiled context",
|
|
159
|
+
hint: compileRecommended
|
|
160
|
+
? status === "mixed"
|
|
161
|
+
? "Some selected agents still failed on the raw files. Build the compiled context and compare it on the same checks"
|
|
162
|
+
: "Build a compiled context and compare it on the same checks"
|
|
163
|
+
: "Build a compiled context and compare it on the same checks",
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
value: "edit",
|
|
167
|
+
label: "Change checks and settings",
|
|
168
|
+
hint: "Revise the checks or setup settings before the next run",
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
value: "rerun",
|
|
172
|
+
label: "Rerun the files-as-is baseline",
|
|
173
|
+
hint: "Run the same checks again, including different local agents if you want",
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
value: "done",
|
|
177
|
+
label: "Stop here",
|
|
178
|
+
hint: "Leave the dataset as-is for now",
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
});
|
|
182
|
+
if (p.isCancel(selected))
|
|
183
|
+
return null;
|
|
184
|
+
return selected;
|
|
121
185
|
}
|
|
122
186
|
async function chooseCompiledForWizard(options) {
|
|
123
187
|
if (options.fixedCompiledName) {
|
|
@@ -129,7 +193,7 @@ async function chooseCompiledForWizard(options) {
|
|
|
129
193
|
if (savedEntries.length === 1)
|
|
130
194
|
return savedEntries[0]?.config ?? null;
|
|
131
195
|
const selected = await p.select({
|
|
132
|
-
message: "Which
|
|
196
|
+
message: "Which source folder setup do you want to work with?",
|
|
133
197
|
options: [
|
|
134
198
|
...savedEntries.map((entry) => ({
|
|
135
199
|
value: entry.config.name,
|
|
@@ -143,7 +207,7 @@ async function chooseCompiledForWizard(options) {
|
|
|
143
207
|
})),
|
|
144
208
|
{
|
|
145
209
|
value: "__new__",
|
|
146
|
-
label: "Add another
|
|
210
|
+
label: "Add another setup",
|
|
147
211
|
hint: "Add a separate folder, focus, or question set",
|
|
148
212
|
},
|
|
149
213
|
],
|
|
@@ -173,7 +237,6 @@ async function promptCompiledSetup(options) {
|
|
|
173
237
|
projectPath: options.sourcePath,
|
|
174
238
|
initial: options.initial,
|
|
175
239
|
...(options.fixedName ? { fixedName: options.fixedName } : {}),
|
|
176
|
-
skipNamePrompt: !options.fixedName && options.introStyle === "first",
|
|
177
240
|
introStyle: options.introStyle,
|
|
178
241
|
selectedWorkflowLabel: workflowLabel,
|
|
179
242
|
});
|
|
@@ -191,10 +254,10 @@ async function promptCompiledSetup(options) {
|
|
|
191
254
|
syncCompiledInterfConfigFromSourceDatasetConfig(builtCompiledPath, compiledConfigWithWorkflow);
|
|
192
255
|
}
|
|
193
256
|
console.log();
|
|
194
|
-
console.log(chalk.green(` ✓ Saved
|
|
195
|
-
console.log(chalk.dim(`
|
|
196
|
-
console.log(chalk.dim(`
|
|
197
|
-
console.log(chalk.dim(`
|
|
257
|
+
console.log(chalk.green(` ✓ Saved setup in ${SOURCE_FOLDER_CONFIG_FILE}`));
|
|
258
|
+
console.log(chalk.dim(` Project folder: ${options.sourcePath}`));
|
|
259
|
+
console.log(chalk.dim(` Setup: ${compiledConfigWithWorkflow.name}`));
|
|
260
|
+
console.log(chalk.dim(` Source folder: ${compiledConfigWithWorkflow.path}`));
|
|
198
261
|
console.log(chalk.dim(` Workflow: ${workflowLabel}`));
|
|
199
262
|
console.log(chalk.dim(` Compile mode: ${describeCompileLoopSelection({
|
|
200
263
|
maxAttempts: compiledConfigWithWorkflow.max_attempts,
|
|
@@ -213,13 +276,18 @@ export async function compileSelectedCompiled(sourcePath, compiledConfig, deps =
|
|
|
213
276
|
}
|
|
214
277
|
async function runCompiledActionMenu(sourcePath, compiledConfig, options = {}) {
|
|
215
278
|
const builtCompiledPath = findBuiltCompiledPath(sourcePath, compiledConfig.name);
|
|
216
|
-
const latestComparison =
|
|
279
|
+
const { comparison: latestComparison, stale: latestComparisonStale, } = readCurrentSavedTestComparison({
|
|
280
|
+
projectPath: sourcePath,
|
|
281
|
+
datasetName: compiledConfig.name,
|
|
282
|
+
checks: compiledConfig.checks,
|
|
283
|
+
});
|
|
217
284
|
printDatasetSummary({
|
|
218
285
|
sourcePath,
|
|
219
286
|
dataset: compiledConfig,
|
|
220
287
|
built: Boolean(builtCompiledPath),
|
|
221
288
|
builtCompiledPath,
|
|
222
289
|
latestComparison,
|
|
290
|
+
latestComparisonStale,
|
|
223
291
|
});
|
|
224
292
|
printDatasetRecommendation(compiledConfig, Boolean(builtCompiledPath), latestComparison);
|
|
225
293
|
const action = await promptDatasetAction(compiledConfig, Boolean(builtCompiledPath), latestComparison);
|
|
@@ -234,9 +302,7 @@ async function runCompiledActionMenu(sourcePath, compiledConfig, options = {}) {
|
|
|
234
302
|
sourcePath,
|
|
235
303
|
datasetContext: {
|
|
236
304
|
config: compiledConfig,
|
|
237
|
-
datasetPath: compiledConfig.path
|
|
238
|
-
? sourcePath
|
|
239
|
-
: resolve(sourcePath, compiledConfig.path),
|
|
305
|
+
datasetPath: resolve(sourcePath, compiledConfig.path),
|
|
240
306
|
},
|
|
241
307
|
});
|
|
242
308
|
if (typeof workflowId === "string") {
|
|
@@ -282,48 +348,66 @@ async function runCompiledActionMenu(sourcePath, compiledConfig, options = {}) {
|
|
|
282
348
|
if (action === "test") {
|
|
283
349
|
if (compiledConfig.checks.length === 0) {
|
|
284
350
|
process.exitCode = 1;
|
|
285
|
-
console.log(chalk.red(`
|
|
286
|
-
console.log(chalk.dim(" Run `interf`, edit this
|
|
351
|
+
console.log(chalk.red(` Setup "${compiledConfig.name}" does not have any checks yet.`));
|
|
352
|
+
console.log(chalk.dim(" Run `interf`, edit this setup, and add a few checks first."));
|
|
287
353
|
console.log(chalk.dim(" Then rerun `interf test`."));
|
|
288
354
|
return;
|
|
289
355
|
}
|
|
290
|
-
const baselineRan = await runTestCommand({
|
|
291
|
-
sourcePath,
|
|
292
|
-
dataset: compiledConfig.name,
|
|
293
|
-
datasetConfig: compiledConfig,
|
|
294
|
-
...(builtCompiledPath ? {} : { target: "raw" }),
|
|
295
|
-
});
|
|
296
|
-
if (!baselineRan) {
|
|
297
|
-
return;
|
|
298
|
-
}
|
|
299
356
|
if (builtCompiledPath) {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
message: "The files-as-is baseline already passed. Compile this dataset anyway?",
|
|
306
|
-
initialValue: false,
|
|
357
|
+
const baselineRan = await runTestCommand({
|
|
358
|
+
sourcePath,
|
|
359
|
+
dataset: compiledConfig.name,
|
|
360
|
+
datasetConfig: compiledConfig,
|
|
361
|
+
target: "both",
|
|
307
362
|
});
|
|
308
|
-
if (
|
|
363
|
+
if (!baselineRan) {
|
|
309
364
|
return;
|
|
310
365
|
}
|
|
366
|
+
return;
|
|
311
367
|
}
|
|
312
|
-
|
|
313
|
-
const
|
|
314
|
-
|
|
315
|
-
|
|
368
|
+
while (true) {
|
|
369
|
+
const baselineCapture = { result: null };
|
|
370
|
+
const baselineRan = await runTestCommand({
|
|
371
|
+
sourcePath,
|
|
372
|
+
dataset: compiledConfig.name,
|
|
373
|
+
datasetConfig: compiledConfig,
|
|
374
|
+
target: "raw",
|
|
375
|
+
onComplete(result) {
|
|
376
|
+
baselineCapture.result = result;
|
|
377
|
+
},
|
|
316
378
|
});
|
|
317
|
-
|
|
379
|
+
const baselineResult = baselineCapture.result;
|
|
380
|
+
if (!baselineRan || !baselineResult) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
const nextAction = await promptPostBaselineAction(baselineResult.rows);
|
|
384
|
+
if (!nextAction || nextAction === "done") {
|
|
318
385
|
return;
|
|
319
386
|
}
|
|
387
|
+
if (nextAction === "rerun") {
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
if (nextAction === "edit") {
|
|
391
|
+
const nextCompiled = await promptCompiledSetup({
|
|
392
|
+
sourcePath,
|
|
393
|
+
initial: compiledConfig,
|
|
394
|
+
fixedName: compiledConfig.name,
|
|
395
|
+
introStyle: "edit",
|
|
396
|
+
});
|
|
397
|
+
if (!nextCompiled) {
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
await runCompiledActionMenu(sourcePath, nextCompiled, { justConfigured: true });
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
break;
|
|
320
404
|
}
|
|
321
405
|
const compileResult = await compileSelectedCompiled(sourcePath, compiledConfig);
|
|
322
406
|
if (!compileResult) {
|
|
323
407
|
return;
|
|
324
408
|
}
|
|
325
409
|
if (compileResult.testedDuringCompile) {
|
|
326
|
-
p.log.info("This compile run already tested the compiled
|
|
410
|
+
p.log.info("This compile run already tested the compiled context on the checks.");
|
|
327
411
|
p.log.info("Run `interf test` later if you want a fresh side-by-side comparison summary.");
|
|
328
412
|
return;
|
|
329
413
|
}
|
|
@@ -342,13 +426,14 @@ async function runCompiledActionMenu(sourcePath, compiledConfig, options = {}) {
|
|
|
342
426
|
if (compiledConfig.checks.length === 0)
|
|
343
427
|
return;
|
|
344
428
|
if (compileResult.testedDuringCompile) {
|
|
345
|
-
p.log.info("This compile run already
|
|
346
|
-
return;
|
|
429
|
+
p.log.info("This compile run already tested the compiled context on the compile agent.");
|
|
347
430
|
}
|
|
348
431
|
const runCompiledTest = await p.confirm({
|
|
349
|
-
message:
|
|
350
|
-
? "Run files-as-is
|
|
351
|
-
:
|
|
432
|
+
message: compileResult.testedDuringCompile
|
|
433
|
+
? "Run a fresh files-as-is versus compiled-context comparison now?"
|
|
434
|
+
: builtCompiledPath
|
|
435
|
+
? "Run files-as-is and the compiled context on the checks now?"
|
|
436
|
+
: "Compare files-as-is and the compiled context on the checks now?",
|
|
352
437
|
initialValue: true,
|
|
353
438
|
});
|
|
354
439
|
if (p.isCancel(runCompiledTest) || !runCompiledTest)
|
|
@@ -371,12 +456,12 @@ export const initCommand = {
|
|
|
371
456
|
};
|
|
372
457
|
export async function runInitCommand() {
|
|
373
458
|
p.intro(chalk.bold("Interf"));
|
|
374
|
-
p.log.info("
|
|
459
|
+
p.log.info("Interf prepares task context for your agents from the source folder you choose. Start with the task and a few checks, test the source files first, and compile a context folder when the current context is not good enough.");
|
|
375
460
|
const cwd = process.cwd();
|
|
376
461
|
const detected = detectInterf(cwd);
|
|
377
462
|
const sourcePath = detected ? resolveSourceControlPath(detected.path) : cwd;
|
|
378
463
|
if (detected) {
|
|
379
|
-
p.log.info(`Working from the
|
|
464
|
+
p.log.info(`Working from the project folder: ${sourcePath}`);
|
|
380
465
|
}
|
|
381
466
|
const savedEntries = listSavedCompiledEntries(sourcePath);
|
|
382
467
|
if (savedEntries.length === 0) {
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
import { detectInterf, resolveSourceControlPath, } from "
|
|
2
|
+
import { detectInterf, resolveSourceControlPath, } from "../../packages/project-model/interf.js";
|
|
3
3
|
import { listSavedCompiledEntries } from "./compiled-flow.js";
|
|
4
4
|
export const listCommand = {
|
|
5
5
|
command: "list",
|
|
6
|
-
describe: "List
|
|
6
|
+
describe: "List saved setups in this project",
|
|
7
7
|
handler: async () => {
|
|
8
8
|
const detected = detectInterf(process.cwd());
|
|
9
9
|
const sourcePath = detected ? resolveSourceControlPath(detected.path) : process.cwd();
|
|
10
10
|
const datasets = listSavedCompiledEntries(sourcePath);
|
|
11
11
|
if (datasets.length === 0) {
|
|
12
|
-
console.log(chalk.dim(" Nothing found. Start with `interf` or `interf init` to define a
|
|
12
|
+
console.log(chalk.dim(" Nothing found. Start with `interf` or `interf init` to define a setup and save checks."));
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
15
|
console.log();
|
|
16
|
-
console.log(chalk.bold("
|
|
16
|
+
console.log(chalk.bold(" Saved setups"));
|
|
17
17
|
console.log();
|
|
18
18
|
for (const dataset of datasets) {
|
|
19
19
|
console.log(` ${dataset.config.name}`);
|
|
20
20
|
if (dataset.config.about) {
|
|
21
21
|
console.log(chalk.dim(` task: ${dataset.config.about}`));
|
|
22
22
|
}
|
|
23
|
-
console.log(chalk.dim(` ${dataset.path ? "built" : "not built yet"} ·
|
|
23
|
+
console.log(chalk.dim(` ${dataset.path ? "built" : "not built yet"} · source folder: ${dataset.config.path}`));
|
|
24
24
|
console.log(chalk.dim(` workflow: ${dataset.config.workflow ?? "interf"}${dataset.localDraft ? " (local draft)" : ""}`));
|
|
25
25
|
console.log(chalk.dim(` checks: ${dataset.config.checks.length}`));
|
|
26
26
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
import { detectInterf } from "
|
|
3
|
-
import { resetCompiledGeneratedState } from "
|
|
2
|
+
import { detectInterf } from "../../packages/project-model/interf.js";
|
|
3
|
+
import { resetCompiledGeneratedState } from "../../packages/project-model/compiled-reset.js";
|
|
4
4
|
export const resetCommand = {
|
|
5
5
|
command: "reset <scope>",
|
|
6
6
|
describe: "Reset generated compiled state while keeping `raw/` and the local workflow package",
|
|
@@ -12,11 +12,11 @@ export const resetCommand = {
|
|
|
12
12
|
const detected = detectInterf(process.cwd());
|
|
13
13
|
if (!detected) {
|
|
14
14
|
process.exitCode = 1;
|
|
15
|
-
console.log(chalk.red("Run this from inside a compiled
|
|
15
|
+
console.log(chalk.red("Run this from inside a compiled context."));
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
18
|
const compiledPath = detected.path;
|
|
19
19
|
resetCompiledGeneratedState(compiledPath, argv.scope);
|
|
20
|
-
console.log(chalk.green(" Compiled reset complete."));
|
|
20
|
+
console.log(chalk.green(" Compiled-context reset complete."));
|
|
21
21
|
},
|
|
22
22
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type SourceDatasetConfig, type SourceTruthCheck } from "../../packages/project-model/index.js";
|
|
2
2
|
export declare const DEFAULT_COMPILED_NAME = "dataset1";
|
|
3
|
-
export declare const DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER = "A question you can already verify from this
|
|
3
|
+
export declare const DEFAULT_COMPILED_CHECK_QUESTION_PLACEHOLDER = "A question you can already verify from this source folder";
|
|
4
4
|
export declare const DEFAULT_COMPILED_CHECK_ANSWER_PLACEHOLDER = "The expected answer in plain English";
|
|
5
5
|
export declare const DEFAULT_COMPILED_ABOUT_PLACEHOLDER = "Example: board-prep questions from these files, chart reads from this report, or tax review from these exports.";
|
|
6
6
|
export declare const DEFAULT_DATASET_PATH_PLACEHOLDER = "./dataset1";
|
|
@@ -11,6 +11,12 @@ export interface CompileLoopSelection {
|
|
|
11
11
|
max_attempts?: number;
|
|
12
12
|
max_loops?: number;
|
|
13
13
|
}
|
|
14
|
+
export declare function normalizeDatasetPathForConfig(projectPath: string, value: string): string;
|
|
15
|
+
export declare function listDatasetFolderChoices(cwd?: string): Array<{
|
|
16
|
+
value: string;
|
|
17
|
+
label: string;
|
|
18
|
+
hint: string;
|
|
19
|
+
}>;
|
|
14
20
|
export declare function defaultDatasetPathForPrompt(name: string, introStyle: "first" | "additional" | "edit", cwd?: string): string;
|
|
15
21
|
export declare function datasetAboutPromptMessage(introStyle: "first" | "additional" | "edit"): string;
|
|
16
22
|
export declare function resolveCompileLoopMode(maxAttempts?: number | null, maxLoops?: number | null): CompileLoopMode;
|
|
@@ -41,7 +47,6 @@ export declare function promptSingleCompiledConfig(options?: {
|
|
|
41
47
|
initial?: Partial<Pick<SourceDatasetConfig, "name" | "path" | "about" | "checks" | "max_attempts" | "max_loops">>;
|
|
42
48
|
fixedName?: string;
|
|
43
49
|
skipAboutPrompt?: boolean;
|
|
44
|
-
skipNamePrompt?: boolean;
|
|
45
50
|
introStyle?: "first" | "additional" | "edit";
|
|
46
51
|
selectedWorkflowLabel?: string;
|
|
47
52
|
}): Promise<SourceDatasetConfig | null>;
|