@interf/compiler 0.3.1 → 0.3.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 +124 -54
- package/dist/commands/compile.d.ts +12 -0
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +233 -29
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +22 -13
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/default.js +1 -1
- package/dist/commands/default.js.map +1 -1
- package/dist/commands/executor-flow.d.ts +2 -0
- package/dist/commands/executor-flow.d.ts.map +1 -1
- package/dist/commands/executor-flow.js +71 -22
- package/dist/commands/executor-flow.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +60 -22
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/reset.d.ts.map +1 -1
- package/dist/commands/reset.js +2 -18
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/source-config-wizard.d.ts +2 -1
- package/dist/commands/source-config-wizard.d.ts.map +1 -1
- package/dist/commands/source-config-wizard.js +87 -16
- package/dist/commands/source-config-wizard.js.map +1 -1
- package/dist/commands/test-flow.d.ts +5 -0
- package/dist/commands/test-flow.d.ts.map +1 -1
- package/dist/commands/test-flow.js +48 -14
- package/dist/commands/test-flow.js.map +1 -1
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +18 -5
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/workspace-flow.d.ts +3 -1
- package/dist/commands/workspace-flow.d.ts.map +1 -1
- package/dist/commands/workspace-flow.js +4 -3
- package/dist/commands/workspace-flow.js.map +1 -1
- package/dist/lib/agent-shells.d.ts +17 -0
- package/dist/lib/agent-shells.d.ts.map +1 -0
- package/dist/lib/agent-shells.js +294 -0
- package/dist/lib/agent-shells.js.map +1 -0
- package/dist/lib/benchmark-execution.d.ts +5 -1
- package/dist/lib/benchmark-execution.d.ts.map +1 -1
- package/dist/lib/benchmark-execution.js +34 -12
- package/dist/lib/benchmark-execution.js.map +1 -1
- package/dist/lib/benchmark-paths.d.ts +2 -0
- package/dist/lib/benchmark-paths.d.ts.map +1 -1
- package/dist/lib/benchmark-paths.js +6 -0
- package/dist/lib/benchmark-paths.js.map +1 -1
- package/dist/lib/benchmark-sandbox.d.ts +2 -0
- package/dist/lib/benchmark-sandbox.d.ts.map +1 -1
- package/dist/lib/benchmark-sandbox.js +68 -37
- package/dist/lib/benchmark-sandbox.js.map +1 -1
- package/dist/lib/benchmark-targets.js +1 -1
- package/dist/lib/benchmark-targets.js.map +1 -1
- package/dist/lib/interf-bootstrap.d.ts +2 -13
- package/dist/lib/interf-bootstrap.d.ts.map +1 -1
- package/dist/lib/interf-bootstrap.js +7 -164
- package/dist/lib/interf-bootstrap.js.map +1 -1
- package/dist/lib/interf-detect.d.ts +1 -0
- package/dist/lib/interf-detect.d.ts.map +1 -1
- package/dist/lib/interf-detect.js +5 -18
- package/dist/lib/interf-detect.js.map +1 -1
- package/dist/lib/interf-scaffold.d.ts.map +1 -1
- package/dist/lib/interf-scaffold.js +7 -71
- package/dist/lib/interf-scaffold.js.map +1 -1
- package/dist/lib/interf-workflow-package.d.ts.map +1 -1
- package/dist/lib/interf-workflow-package.js +20 -25
- package/dist/lib/interf-workflow-package.js.map +1 -1
- package/dist/lib/interf.d.ts +3 -2
- package/dist/lib/interf.d.ts.map +1 -1
- package/dist/lib/interf.js +3 -2
- package/dist/lib/interf.js.map +1 -1
- package/dist/lib/local-workflows.d.ts +6 -1
- package/dist/lib/local-workflows.d.ts.map +1 -1
- package/dist/lib/local-workflows.js +143 -2
- package/dist/lib/local-workflows.js.map +1 -1
- package/dist/lib/runtime-contracts.d.ts.map +1 -1
- package/dist/lib/runtime-contracts.js +10 -4
- package/dist/lib/runtime-contracts.js.map +1 -1
- package/dist/lib/runtime-prompt.d.ts.map +1 -1
- package/dist/lib/runtime-prompt.js +1 -0
- package/dist/lib/runtime-prompt.js.map +1 -1
- package/dist/lib/runtime-runs.d.ts.map +1 -1
- package/dist/lib/runtime-runs.js +6 -2
- package/dist/lib/runtime-runs.js.map +1 -1
- package/dist/lib/runtime-types.d.ts +1 -0
- package/dist/lib/runtime-types.d.ts.map +1 -1
- package/dist/lib/schema.d.ts +88 -13
- package/dist/lib/schema.d.ts.map +1 -1
- package/dist/lib/schema.js +66 -21
- package/dist/lib/schema.js.map +1 -1
- package/dist/lib/source-config.d.ts +2 -0
- package/dist/lib/source-config.d.ts.map +1 -1
- package/dist/lib/source-config.js +19 -1
- package/dist/lib/source-config.js.map +1 -1
- package/dist/lib/state-artifacts.d.ts +2 -2
- package/dist/lib/state-artifacts.d.ts.map +1 -1
- package/dist/lib/state-artifacts.js +3 -3
- package/dist/lib/state-artifacts.js.map +1 -1
- package/dist/lib/state-io.d.ts +2 -2
- package/dist/lib/state-io.d.ts.map +1 -1
- package/dist/lib/state-io.js +5 -5
- package/dist/lib/state-io.js.map +1 -1
- package/dist/lib/state-paths.d.ts +1 -1
- package/dist/lib/state-paths.d.ts.map +1 -1
- package/dist/lib/state-paths.js +3 -3
- package/dist/lib/state-paths.js.map +1 -1
- package/dist/lib/state-view.d.ts +2 -2
- package/dist/lib/state-view.d.ts.map +1 -1
- package/dist/lib/state-view.js +6 -7
- package/dist/lib/state-view.js.map +1 -1
- package/dist/lib/state.d.ts +4 -4
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +3 -3
- package/dist/lib/state.js.map +1 -1
- package/dist/lib/workflow-definitions.d.ts +4 -1
- package/dist/lib/workflow-definitions.d.ts.map +1 -1
- package/dist/lib/workflow-definitions.js +38 -3
- package/dist/lib/workflow-definitions.js.map +1 -1
- package/dist/lib/workflow-stage-runner.d.ts +1 -0
- package/dist/lib/workflow-stage-runner.d.ts.map +1 -1
- package/dist/lib/workflow-stage-runner.js +2 -0
- package/dist/lib/workflow-stage-runner.js.map +1 -1
- package/dist/lib/workflows.d.ts +1 -1
- package/dist/lib/workflows.d.ts.map +1 -1
- package/dist/lib/workspace-compile.d.ts +4 -0
- package/dist/lib/workspace-compile.d.ts.map +1 -1
- package/dist/lib/workspace-compile.js +108 -66
- package/dist/lib/workspace-compile.js.map +1 -1
- package/dist/lib/workspace-docs.d.ts +3 -0
- package/dist/lib/workspace-docs.d.ts.map +1 -0
- package/dist/lib/workspace-docs.js +82 -0
- package/dist/lib/workspace-docs.js.map +1 -0
- package/dist/lib/workspace-raw.d.ts +30 -0
- package/dist/lib/workspace-raw.d.ts.map +1 -0
- package/dist/lib/workspace-raw.js +102 -0
- package/dist/lib/workspace-raw.js.map +1 -0
- package/dist/lib/workspace-reset.d.ts +2 -0
- package/dist/lib/workspace-reset.d.ts.map +1 -0
- package/dist/lib/workspace-reset.js +21 -0
- package/dist/lib/workspace-reset.js.map +1 -0
- package/dist/lib/workspace-schema.d.ts +26 -0
- package/dist/lib/workspace-schema.d.ts.map +1 -0
- package/dist/lib/workspace-schema.js +132 -0
- package/dist/lib/workspace-schema.js.map +1 -0
- package/package.json +1 -1
- package/skills/workflow/create/SKILL.md +19 -0
- package/skills/workspace/shape/SKILL.md +1 -1
- package/templates/workspace/README.md +2 -1
|
@@ -3,6 +3,11 @@ import { createRawBenchmarkTarget, listBenchmarkTargets, runBenchmarkAuto, saveB
|
|
|
3
3
|
import { buildBenchmarkSpecFromSourceFolderConfig } from "../lib/source-config.js";
|
|
4
4
|
import { resolveOrConfigureLocalExecutor } from "./executor-flow.js";
|
|
5
5
|
import { findBuiltWorkspacePath } from "./workspace-flow.js";
|
|
6
|
+
export function questionPassRate(outcome) {
|
|
7
|
+
return outcome.result.totalCases > 0
|
|
8
|
+
? Math.round((outcome.result.passedCases / outcome.result.totalCases) * 100)
|
|
9
|
+
: 0;
|
|
10
|
+
}
|
|
6
11
|
function specNeedsExecutor(spec) {
|
|
7
12
|
return spec.cases.some((entry) => !entry.file || Boolean(entry.answer));
|
|
8
13
|
}
|
|
@@ -13,11 +18,30 @@ async function resolveExecutorForSpec(spec, executionProfile) {
|
|
|
13
18
|
return resolveOrConfigureLocalExecutor({
|
|
14
19
|
preflight: true,
|
|
15
20
|
executionProfile,
|
|
21
|
+
purpose: "test",
|
|
16
22
|
});
|
|
17
23
|
}
|
|
18
|
-
function
|
|
24
|
+
export function printSavedTestOutcome(prefix, outcome) {
|
|
19
25
|
const color = outcome.result.ok ? chalk.green : chalk.red;
|
|
20
|
-
|
|
26
|
+
const status = outcome.result.ok ? chalk.green("PASS") : chalk.red("FAIL");
|
|
27
|
+
console.log(chalk.bold(` ${prefix}`));
|
|
28
|
+
console.log();
|
|
29
|
+
console.log(color(` ${status} ${outcome.result.passedCases}/${outcome.result.totalCases} questions`));
|
|
30
|
+
console.log();
|
|
31
|
+
for (const [index, caseResult] of outcome.result.caseResults.entries()) {
|
|
32
|
+
const caseStatus = caseResult.ok ? chalk.green("PASS") : chalk.red("FAIL");
|
|
33
|
+
console.log(` ${caseStatus} Truth Check ${index + 1}`);
|
|
34
|
+
console.log(chalk.dim(` ${caseResult.question}`));
|
|
35
|
+
const failedChecks = caseResult.checks.filter((entry) => !entry.ok).slice(0, 3);
|
|
36
|
+
for (const failedCheck of failedChecks) {
|
|
37
|
+
console.log(chalk.dim(` Failed criterion: ${failedCheck.label}: ${failedCheck.detail}`));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
console.log();
|
|
41
|
+
if (outcome.result.sandbox_path) {
|
|
42
|
+
console.log(chalk.dim(` Preserved sandbox: ${outcome.result.sandbox_path}`));
|
|
43
|
+
console.log();
|
|
44
|
+
}
|
|
21
45
|
console.log(chalk.dim(` Saved run: ${outcome.runPath}`));
|
|
22
46
|
}
|
|
23
47
|
export function printSavedTestComparison(rawOutcome, workspaceOutcome) {
|
|
@@ -25,23 +49,21 @@ export function printSavedTestComparison(rawOutcome, workspaceOutcome) {
|
|
|
25
49
|
return;
|
|
26
50
|
console.log();
|
|
27
51
|
if (rawOutcome) {
|
|
28
|
-
|
|
52
|
+
printSavedTestOutcome("Raw files", rawOutcome);
|
|
29
53
|
}
|
|
30
54
|
if (workspaceOutcome) {
|
|
31
|
-
|
|
55
|
+
if (rawOutcome)
|
|
56
|
+
console.log();
|
|
57
|
+
printSavedTestOutcome("Compiled workspace", workspaceOutcome);
|
|
32
58
|
}
|
|
33
59
|
if (rawOutcome && workspaceOutcome) {
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const workspaceChecks = workspaceOutcome.result.totalChecks > 0
|
|
38
|
-
? Math.round((workspaceOutcome.result.passedChecks / workspaceOutcome.result.totalChecks) * 100)
|
|
39
|
-
: 0;
|
|
40
|
-
const delta = workspaceChecks - rawChecks;
|
|
60
|
+
const rawQuestions = questionPassRate(rawOutcome);
|
|
61
|
+
const workspaceQuestions = questionPassRate(workspaceOutcome);
|
|
62
|
+
const delta = workspaceQuestions - rawQuestions;
|
|
41
63
|
const color = delta >= 0 ? chalk.green : chalk.red;
|
|
42
64
|
const direction = delta >= 0 ? "improved" : "decreased";
|
|
43
65
|
console.log();
|
|
44
|
-
console.log(color(`
|
|
66
|
+
console.log(color(` Truth-check pass rate ${direction} from ${rawQuestions}% to ${workspaceQuestions}%.`));
|
|
45
67
|
}
|
|
46
68
|
}
|
|
47
69
|
export async function runSavedRawTest(options) {
|
|
@@ -54,13 +76,19 @@ export async function runSavedRawTest(options) {
|
|
|
54
76
|
return null;
|
|
55
77
|
}
|
|
56
78
|
const { executor, error } = await resolveExecutorForSpec(spec, options.executionProfile);
|
|
79
|
+
if (!executor && !error) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
57
82
|
if (!executor && error) {
|
|
58
83
|
process.exitCode = 1;
|
|
59
84
|
console.log(chalk.red(error));
|
|
60
85
|
return null;
|
|
61
86
|
}
|
|
62
87
|
const target = createRawBenchmarkTarget(options.sourcePath);
|
|
63
|
-
const run = await runBenchmarkAuto(options.sourcePath, spec, [target], {
|
|
88
|
+
const run = await runBenchmarkAuto(options.sourcePath, spec, [target], {
|
|
89
|
+
executor,
|
|
90
|
+
preserveSandboxes: options.preserveSandboxes ?? "on-failure",
|
|
91
|
+
});
|
|
64
92
|
const result = run.results[0];
|
|
65
93
|
if (!result)
|
|
66
94
|
return null;
|
|
@@ -88,12 +116,18 @@ export async function runSavedWorkspaceTest(options) {
|
|
|
88
116
|
return null;
|
|
89
117
|
}
|
|
90
118
|
const { executor, error } = await resolveExecutorForSpec(spec, options.executionProfile);
|
|
119
|
+
if (!executor && !error) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
91
122
|
if (!executor && error) {
|
|
92
123
|
process.exitCode = 1;
|
|
93
124
|
console.log(chalk.red(error));
|
|
94
125
|
return null;
|
|
95
126
|
}
|
|
96
|
-
const run = await runBenchmarkAuto(options.sourcePath, spec, [target], {
|
|
127
|
+
const run = await runBenchmarkAuto(options.sourcePath, spec, [target], {
|
|
128
|
+
executor,
|
|
129
|
+
preserveSandboxes: options.preserveSandboxes ?? "on-failure",
|
|
130
|
+
});
|
|
97
131
|
const result = run.results[0];
|
|
98
132
|
if (!result)
|
|
99
133
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-flow.js","sourceRoot":"","sources":["../../src/commands/test-flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GAGjB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"test-flow.js","sourceRoot":"","sources":["../../src/commands/test-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAwB3C,eAAO,MAAM,WAAW,EAAE,aAczB,CAAC;AAuDF,wBAAsB,cAAc,CAAC,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFtF"}
|
package/dist/commands/test.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import * as p from "@clack/prompts";
|
|
3
|
-
import { detectInterf,
|
|
3
|
+
import { detectInterf, resolveSourceControlPath, } from "../lib/interf.js";
|
|
4
4
|
import { loadSourceFolderConfig } from "../lib/source-config.js";
|
|
5
5
|
import { addExecutionProfileOptions, executionProfileFromArgv, } from "../lib/execution-profile.js";
|
|
6
6
|
import { chooseWorkspaceConfigToBuild, findBuiltWorkspacePath, findSavedWorkspaceConfig, } from "./workspace-flow.js";
|
|
@@ -8,12 +8,20 @@ import { printSavedTestComparison, runSavedRawTest, runSavedWorkspaceTest, } fro
|
|
|
8
8
|
export const testCommand = {
|
|
9
9
|
command: "test",
|
|
10
10
|
aliases: ["benchmark"],
|
|
11
|
-
describe: "Run
|
|
12
|
-
builder: (yargs) => addExecutionProfileOptions(yargs),
|
|
11
|
+
describe: "Run saved truth checks on raw data or a workspace",
|
|
12
|
+
builder: (yargs) => addExecutionProfileOptions(yargs).option("keep-sandboxes", {
|
|
13
|
+
type: "boolean",
|
|
14
|
+
default: false,
|
|
15
|
+
describe: "Keep every raw or workspace test sandbox under interf/benchmarks/sandboxes for review instead of pruning successful runs",
|
|
16
|
+
}),
|
|
13
17
|
handler: async (argv) => {
|
|
14
18
|
await runTestCommand(argv);
|
|
15
19
|
},
|
|
16
20
|
};
|
|
21
|
+
function readSandboxRetentionMode(argv) {
|
|
22
|
+
const enabled = argv["keep-sandboxes"] ?? argv.keepSandboxes ?? false;
|
|
23
|
+
return enabled ? "always" : "on-failure";
|
|
24
|
+
}
|
|
17
25
|
async function chooseTestMode(options) {
|
|
18
26
|
if (!options.hasBuiltWorkspace) {
|
|
19
27
|
const selected = await p.select({
|
|
@@ -62,7 +70,7 @@ async function chooseTestMode(options) {
|
|
|
62
70
|
export async function runTestCommand(argv = {}) {
|
|
63
71
|
const cwd = process.cwd();
|
|
64
72
|
const detected = detectInterf(cwd);
|
|
65
|
-
const sourcePath = detected ?
|
|
73
|
+
const sourcePath = detected ? resolveSourceControlPath(detected.path) : cwd;
|
|
66
74
|
const config = loadSourceFolderConfig(sourcePath);
|
|
67
75
|
if (!config) {
|
|
68
76
|
process.exitCode = 1;
|
|
@@ -76,6 +84,8 @@ export async function runTestCommand(argv = {}) {
|
|
|
76
84
|
sourcePath,
|
|
77
85
|
selectMessage: "Which workspace do you want to test?",
|
|
78
86
|
});
|
|
87
|
+
if (selectedWorkspace === undefined)
|
|
88
|
+
return;
|
|
79
89
|
if (!selectedWorkspace) {
|
|
80
90
|
process.exitCode = 1;
|
|
81
91
|
console.log(chalk.red(" No workspaces are set up for this folder yet."));
|
|
@@ -84,11 +94,12 @@ export async function runTestCommand(argv = {}) {
|
|
|
84
94
|
}
|
|
85
95
|
if (selectedWorkspace.checks.length === 0) {
|
|
86
96
|
process.exitCode = 1;
|
|
87
|
-
console.log(chalk.red(` Workspace "${selectedWorkspace.name}" does not have any saved
|
|
97
|
+
console.log(chalk.red(` Workspace "${selectedWorkspace.name}" does not have any saved truth checks yet.`));
|
|
88
98
|
console.log(chalk.dim(" Run `interf` or `interf init` to add a few first."));
|
|
89
99
|
return;
|
|
90
100
|
}
|
|
91
101
|
const executionProfile = executionProfileFromArgv(argv);
|
|
102
|
+
const preserveSandboxes = readSandboxRetentionMode(argv);
|
|
92
103
|
const builtWorkspacePath = detected?.path ?? findBuiltWorkspacePath(sourcePath, selectedWorkspace.name);
|
|
93
104
|
const hasBuiltWorkspace = Boolean(builtWorkspacePath);
|
|
94
105
|
const mode = detected
|
|
@@ -110,6 +121,7 @@ export async function runTestCommand(argv = {}) {
|
|
|
110
121
|
sourcePath,
|
|
111
122
|
workspaceConfig: selectedWorkspace,
|
|
112
123
|
executionProfile,
|
|
124
|
+
preserveSandboxes,
|
|
113
125
|
})
|
|
114
126
|
: null;
|
|
115
127
|
const workspaceOutcome = mode === "workspace" || mode === "both"
|
|
@@ -118,6 +130,7 @@ export async function runTestCommand(argv = {}) {
|
|
|
118
130
|
workspaceConfig: selectedWorkspace,
|
|
119
131
|
executionProfile,
|
|
120
132
|
workspacePath: builtWorkspacePath,
|
|
133
|
+
preserveSandboxes,
|
|
121
134
|
})
|
|
122
135
|
: null;
|
|
123
136
|
if ((mode === "workspace" || mode === "both") && !workspaceOutcome) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EACL,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { SourceWorkspaceConfig } from "../lib/schema.js";
|
|
2
|
+
import { type StageShellRetentionMode } from "../lib/workflows.js";
|
|
2
3
|
import type { WorkflowExecutor } from "../lib/executors.js";
|
|
3
4
|
import type { WorkspaceCompileResult } from "../lib/workflows.js";
|
|
4
5
|
export interface SavedWorkspaceEntry {
|
|
@@ -11,11 +12,12 @@ export declare function findSavedWorkspaceConfig(sourcePath: string, workspaceNa
|
|
|
11
12
|
export declare function chooseWorkspaceConfigToBuild(options: {
|
|
12
13
|
sourcePath: string;
|
|
13
14
|
selectMessage: string;
|
|
14
|
-
}): Promise<SourceWorkspaceConfig | null>;
|
|
15
|
+
}): Promise<SourceWorkspaceConfig | null | undefined>;
|
|
15
16
|
export declare function createWorkspaceFromConfig(sourcePath: string, workspaceConfig: Pick<SourceWorkspaceConfig, "name" | "about" | "workflow">): string;
|
|
16
17
|
export declare function ensureWorkspaceFromConfig(sourcePath: string, workspaceConfig: Pick<SourceWorkspaceConfig, "name" | "about" | "workflow">): string;
|
|
17
18
|
export declare function compileWorkspaceWithReporter(executor: WorkflowExecutor, workspacePath: string, options?: {
|
|
18
19
|
heading?: string;
|
|
19
20
|
successMessage?: string;
|
|
21
|
+
preserveStageShells?: StageShellRetentionMode;
|
|
20
22
|
}): Promise<WorkspaceCompileResult>;
|
|
21
23
|
//# sourceMappingURL=workspace-flow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-flow.d.ts","sourceRoot":"","sources":["../../src/commands/workspace-flow.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace-flow.d.ts","sourceRoot":"","sources":["../../src/commands/workspace-flow.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAGL,KAAK,uBAAuB,EAE7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AASD,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,EAAE,CASnF;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,MAAM,GAAG,IAAI,CAEf;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,qBAAqB,GAAG,IAAI,CAE9B;AAED,wBAAsB,4BAA4B,CAAC,OAAO,EAAE;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,GAAG,SAAS,CAAC,CAyBpD;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC,GAC1E,MAAM,CAUR;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC,GAC1E,MAAM,CAQR;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;CAC1C,GACL,OAAO,CAAC,sBAAsB,CAAC,CA4BjC"}
|
|
@@ -10,8 +10,8 @@ function formatSavedWorkspaceHint(config) {
|
|
|
10
10
|
if (config.about)
|
|
11
11
|
return config.about;
|
|
12
12
|
if (checkCount === 0)
|
|
13
|
-
return "No saved
|
|
14
|
-
return `${checkCount} saved
|
|
13
|
+
return "No saved truth checks yet";
|
|
14
|
+
return `${checkCount} saved truth check${checkCount === 1 ? "" : "s"}`;
|
|
15
15
|
}
|
|
16
16
|
export function listSavedWorkspaceEntries(sourcePath) {
|
|
17
17
|
const builtByName = new Map(listWorkspacesForSourceFolder(sourcePath).map((entry) => [entry.config.name, entry.path]));
|
|
@@ -46,7 +46,7 @@ export async function chooseWorkspaceConfigToBuild(options) {
|
|
|
46
46
|
})),
|
|
47
47
|
});
|
|
48
48
|
if (p.isCancel(selected))
|
|
49
|
-
return
|
|
49
|
+
return undefined;
|
|
50
50
|
return savedEntries.find((entry) => entry.config.name === selected)?.config ?? null;
|
|
51
51
|
}
|
|
52
52
|
export function createWorkspaceFromConfig(sourcePath, workspaceConfig) {
|
|
@@ -79,6 +79,7 @@ export async function compileWorkspaceWithReporter(executor, workspacePath, opti
|
|
|
79
79
|
executor,
|
|
80
80
|
workspacePath,
|
|
81
81
|
reporter,
|
|
82
|
+
preserveStageShells: options.preserveStageShells,
|
|
82
83
|
});
|
|
83
84
|
if (!result.ok) {
|
|
84
85
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-flow.js","sourceRoot":"","sources":["../../src/commands/workspace-flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,gBAAgB,EAChB,eAAe,
|
|
1
|
+
{"version":3,"file":"workspace-flow.js","sourceRoot":"","sources":["../../src/commands/workspace-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { RuntimeContractType, WorkflowZoneId } from "./schema.js";
|
|
2
|
+
export interface NativeStageDefinition {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
description: string;
|
|
6
|
+
contractType: RuntimeContractType;
|
|
7
|
+
skillDir: string;
|
|
8
|
+
reads: WorkflowZoneId[];
|
|
9
|
+
writes: WorkflowZoneId[];
|
|
10
|
+
}
|
|
11
|
+
export declare function renderClaudeBootstrap(content: string): string;
|
|
12
|
+
export declare function pruneStageExecutionShells(workspacePath: string): void;
|
|
13
|
+
export declare function projectWorkspaceQueryShell(workspacePath: string, workspaceName: string, workflowId: string, about?: string): boolean;
|
|
14
|
+
export declare function createStageExecutionShell(workspacePath: string, workspaceName: string, workflowId: string, stage: NativeStageDefinition): {
|
|
15
|
+
rootPath: string;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=agent-shells.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-shells.d.ts","sourceRoot":"","sources":["../../src/lib/agent-shells.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAGV,mBAAmB,EAGnB,cAAc,EACf,MAAM,aAAa,CAAC;AAWrB,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,mBAAmB,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B;AA4UD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAO7D;AAED,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAErE;AAED,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAeT;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,qBAAqB,GAC3B;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAoCtB"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, symlinkSync, } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { WORKFLOW_PACKAGE_DIR } from "./interf-detect.js";
|
|
4
|
+
import { renderWorkspaceAgents, renderWorkspaceQuerySkill, } from "./workspace-docs.js";
|
|
5
|
+
import { ensureWorkspaceZoneTargets, readWorkspaceSchemaFile, workspaceZoneAbsolutePath, } from "./workspace-schema.js";
|
|
6
|
+
const LOCAL_SKILL_ROOTS = [
|
|
7
|
+
".claude/skills",
|
|
8
|
+
".codex/skills",
|
|
9
|
+
".agents/skills",
|
|
10
|
+
".cursor/skills",
|
|
11
|
+
];
|
|
12
|
+
function stageShellsRoot(workspacePath) {
|
|
13
|
+
return join(workspacePath, ".interf", "execution-shells");
|
|
14
|
+
}
|
|
15
|
+
function stageShellWorkflowRoot(shellRoot) {
|
|
16
|
+
return join(shellRoot, WORKFLOW_PACKAGE_DIR);
|
|
17
|
+
}
|
|
18
|
+
function shellInputZonePath(shellRoot, zoneId) {
|
|
19
|
+
return join(shellRoot, "inputs", zoneId);
|
|
20
|
+
}
|
|
21
|
+
function shellOutputZonePath(shellRoot, zoneId) {
|
|
22
|
+
return join(shellRoot, "outputs", zoneId);
|
|
23
|
+
}
|
|
24
|
+
function shellRuntimePath(shellRoot, relativePath) {
|
|
25
|
+
return join(shellRoot, "runtime", relativePath);
|
|
26
|
+
}
|
|
27
|
+
function writeIfChanged(path, content) {
|
|
28
|
+
if (existsSync(path) && readFileSync(path, "utf8") === content) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
32
|
+
writeFileSync(path, content);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
function writeNativeSkillCopies(rootPath, skillName, content) {
|
|
36
|
+
let changed = false;
|
|
37
|
+
for (const skillsRoot of LOCAL_SKILL_ROOTS) {
|
|
38
|
+
const skillPath = join(rootPath, skillsRoot, skillName, "SKILL.md");
|
|
39
|
+
changed = writeIfChanged(skillPath, content) || changed;
|
|
40
|
+
}
|
|
41
|
+
return changed;
|
|
42
|
+
}
|
|
43
|
+
function linkPath(targetPath, linkPathname) {
|
|
44
|
+
mkdirSync(dirname(linkPathname), { recursive: true });
|
|
45
|
+
symlinkSync(targetPath, linkPathname);
|
|
46
|
+
}
|
|
47
|
+
function loadWorkspaceSchema(workspacePath) {
|
|
48
|
+
const schema = readWorkspaceSchemaFile(join(workspacePath, WORKFLOW_PACKAGE_DIR));
|
|
49
|
+
if (!schema) {
|
|
50
|
+
throw new Error(`Missing workflow workspace schema at ${join(workspacePath, WORKFLOW_PACKAGE_DIR, "workspace.schema.json")}`);
|
|
51
|
+
}
|
|
52
|
+
return schema;
|
|
53
|
+
}
|
|
54
|
+
function zoneMap(schema) {
|
|
55
|
+
return new Map(schema.zones.map((zone) => [zone.id, zone]));
|
|
56
|
+
}
|
|
57
|
+
function zoneOrThrow(zones, zoneId) {
|
|
58
|
+
const zone = zones.get(zoneId);
|
|
59
|
+
if (!zone) {
|
|
60
|
+
throw new Error(`Missing workspace schema zone "${zoneId}" for stage shell projection.`);
|
|
61
|
+
}
|
|
62
|
+
return zone;
|
|
63
|
+
}
|
|
64
|
+
function ensureWorkspaceExecutionSurface(workspacePath) {
|
|
65
|
+
mkdirSync(join(workspacePath, ".interf"), { recursive: true });
|
|
66
|
+
mkdirSync(join(workspacePath, WORKFLOW_PACKAGE_DIR), { recursive: true });
|
|
67
|
+
const schema = loadWorkspaceSchema(workspacePath);
|
|
68
|
+
ensureWorkspaceZoneTargets(workspacePath, schema);
|
|
69
|
+
return schema;
|
|
70
|
+
}
|
|
71
|
+
function readStageMethodDoc(workspacePath, stage) {
|
|
72
|
+
const path = join(workspacePath, WORKFLOW_PACKAGE_DIR, "compile", "stages", stage.skillDir, "SKILL.md");
|
|
73
|
+
if (!existsSync(path))
|
|
74
|
+
return null;
|
|
75
|
+
return readFileSync(path, "utf8").trim();
|
|
76
|
+
}
|
|
77
|
+
function stageWorkflowDocsPath(workspacePath, stage) {
|
|
78
|
+
return join(workspacePath, WORKFLOW_PACKAGE_DIR, "compile", "stages", stage.skillDir);
|
|
79
|
+
}
|
|
80
|
+
function renderStageExecutionAgents(workspaceName, workflowId, stage) {
|
|
81
|
+
return [
|
|
82
|
+
`# ${workspaceName} — ${stage.label} Execution Shell`,
|
|
83
|
+
"",
|
|
84
|
+
"This is an ephemeral Interf stage-execution shell.",
|
|
85
|
+
"It is for automated pipeline execution only, not for manual querying.",
|
|
86
|
+
"",
|
|
87
|
+
"## Start Here",
|
|
88
|
+
"",
|
|
89
|
+
"1. Read `runtime/stage-contract.json` now.",
|
|
90
|
+
"2. Read `runtime/paths.json` now.",
|
|
91
|
+
"3. Use the local native `interf-stage` skill now.",
|
|
92
|
+
`4. Execute only the current stage: \`${stage.id}\` (${stage.label}).`,
|
|
93
|
+
"",
|
|
94
|
+
"## Shell ABI",
|
|
95
|
+
"",
|
|
96
|
+
"- `inputs/<zone-id>/` = read mounts for the current stage.",
|
|
97
|
+
"- `outputs/<zone-id>/` = write mounts for the current stage.",
|
|
98
|
+
"- schema-declared workspace paths are also projected at the shell root so workflow-relative contract paths stay valid.",
|
|
99
|
+
"- `runtime/` = stage contract and machine-readable path map for this shell.",
|
|
100
|
+
"- `workflow/` = workflow metadata, workspace schema, and docs for the current stage only.",
|
|
101
|
+
"",
|
|
102
|
+
"## Boundaries",
|
|
103
|
+
"",
|
|
104
|
+
`- Workflow: \`${workflowId}\`.`,
|
|
105
|
+
`- Contract type: \`${stage.contractType}\`.`,
|
|
106
|
+
"- This shell has its own AGENTS/CLAUDE/native skills. It does not inherit the compiled workspace query shell.",
|
|
107
|
+
"- The compiled workspace root itself is not linked into this shell.",
|
|
108
|
+
"- Do not switch into query mode or act like a user-facing assistant.",
|
|
109
|
+
"- Do not modify files under `inputs/` unless the same zone is also mounted under `outputs/`.",
|
|
110
|
+
"",
|
|
111
|
+
"## Current Stage Zones",
|
|
112
|
+
"",
|
|
113
|
+
`- reads: ${stage.reads.join(", ")}`,
|
|
114
|
+
`- writes: ${stage.writes.join(", ")}`,
|
|
115
|
+
"",
|
|
116
|
+
"## Goal",
|
|
117
|
+
"",
|
|
118
|
+
"- complete the current stage",
|
|
119
|
+
"- honor the deterministic contract",
|
|
120
|
+
"- write outputs through the declared zone mounts",
|
|
121
|
+
"- stop when the stage is complete",
|
|
122
|
+
"",
|
|
123
|
+
].join("\n");
|
|
124
|
+
}
|
|
125
|
+
function renderStageExecutionSkill(stage, stageMethodDoc) {
|
|
126
|
+
return [
|
|
127
|
+
"---",
|
|
128
|
+
"name: interf-stage",
|
|
129
|
+
"description: >",
|
|
130
|
+
` Native local execution skill for the ${stage.label} stage in this Interf`,
|
|
131
|
+
" compile run. Use it only inside an automated stage execution shell.",
|
|
132
|
+
"---",
|
|
133
|
+
"",
|
|
134
|
+
`# Interf Stage Execution — ${stage.label}`,
|
|
135
|
+
"",
|
|
136
|
+
"This local native skill exists for automated Interf stage execution.",
|
|
137
|
+
"Read `runtime/stage-contract.json` first.",
|
|
138
|
+
"Then read `runtime/paths.json` and use the mounted `inputs/` and `outputs/` zones for this stage.",
|
|
139
|
+
"Do not switch into manual query mode.",
|
|
140
|
+
"",
|
|
141
|
+
"## Current Stage",
|
|
142
|
+
"",
|
|
143
|
+
`- id: \`${stage.id}\``,
|
|
144
|
+
`- label: ${stage.label}`,
|
|
145
|
+
`- contract type: \`${stage.contractType}\``,
|
|
146
|
+
`- reads: ${stage.reads.join(", ")}`,
|
|
147
|
+
`- writes: ${stage.writes.join(", ")}`,
|
|
148
|
+
`- editable source: \`workflow/compile/stages/${stage.skillDir}/SKILL.md\``,
|
|
149
|
+
"",
|
|
150
|
+
...(stageMethodDoc
|
|
151
|
+
? [
|
|
152
|
+
"## Stage Method",
|
|
153
|
+
"",
|
|
154
|
+
stageMethodDoc,
|
|
155
|
+
"",
|
|
156
|
+
]
|
|
157
|
+
: []),
|
|
158
|
+
].join("\n");
|
|
159
|
+
}
|
|
160
|
+
function renderWorkspaceQueryNativeSkill() {
|
|
161
|
+
return [
|
|
162
|
+
"---",
|
|
163
|
+
"name: interf-query",
|
|
164
|
+
"description: >",
|
|
165
|
+
" Native local query skill for this Interf compiled workspace. Use it for",
|
|
166
|
+
" manual questions against the compiled workspace and its raw fallback.",
|
|
167
|
+
"---",
|
|
168
|
+
"",
|
|
169
|
+
"# Interf Query",
|
|
170
|
+
"",
|
|
171
|
+
"This is the native local query skill for an Interf compiled workspace.",
|
|
172
|
+
"Use it when reading this workspace manually.",
|
|
173
|
+
"Editable source: `workflow/use/query/SKILL.md`.",
|
|
174
|
+
"",
|
|
175
|
+
renderWorkspaceQuerySkill().trim(),
|
|
176
|
+
"",
|
|
177
|
+
].join("\n");
|
|
178
|
+
}
|
|
179
|
+
function syncWorkspaceNativeQuerySkillCopies(workspacePath) {
|
|
180
|
+
return writeNativeSkillCopies(workspacePath, "interf-query", renderWorkspaceQueryNativeSkill());
|
|
181
|
+
}
|
|
182
|
+
function projectWorkflowMetadata(workspacePath, shellRoot, stage) {
|
|
183
|
+
const workflowRoot = stageShellWorkflowRoot(shellRoot);
|
|
184
|
+
mkdirSync(join(workflowRoot, "compile", "stages"), { recursive: true });
|
|
185
|
+
const workflowJsonPath = join(workspacePath, WORKFLOW_PACKAGE_DIR, "workflow.json");
|
|
186
|
+
if (existsSync(workflowJsonPath)) {
|
|
187
|
+
linkPath(workflowJsonPath, join(workflowRoot, "workflow.json"));
|
|
188
|
+
}
|
|
189
|
+
const workspaceSchemaPath = join(workspacePath, WORKFLOW_PACKAGE_DIR, "workspace.schema.json");
|
|
190
|
+
if (existsSync(workspaceSchemaPath)) {
|
|
191
|
+
linkPath(workspaceSchemaPath, join(workflowRoot, "workspace.schema.json"));
|
|
192
|
+
}
|
|
193
|
+
const readmePath = join(workspacePath, WORKFLOW_PACKAGE_DIR, "README.md");
|
|
194
|
+
if (existsSync(readmePath)) {
|
|
195
|
+
linkPath(readmePath, join(workflowRoot, "README.md"));
|
|
196
|
+
}
|
|
197
|
+
const stageDocsPath = stageWorkflowDocsPath(workspacePath, stage);
|
|
198
|
+
if (existsSync(stageDocsPath)) {
|
|
199
|
+
linkPath(stageDocsPath, join(workflowRoot, "compile", "stages", stage.skillDir));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function projectWorkspaceSchemaZones(workspacePath, shellRoot, schema) {
|
|
203
|
+
for (const zone of schema.zones) {
|
|
204
|
+
linkPath(workspaceZoneAbsolutePath(workspacePath, zone), join(shellRoot, zone.path));
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
function buildStageZoneMounts(workspacePath, shellRoot, stage, schema) {
|
|
208
|
+
const zones = zoneMap(schema);
|
|
209
|
+
const mountFor = (zoneId) => {
|
|
210
|
+
const zone = zoneOrThrow(zones, zoneId);
|
|
211
|
+
return {
|
|
212
|
+
zone_id: zone.id,
|
|
213
|
+
workspace_path: zone.path,
|
|
214
|
+
shell_root_path: zone.path,
|
|
215
|
+
input_mount_path: stage.reads.includes(zoneId) ? `inputs/${zone.id}` : null,
|
|
216
|
+
output_mount_path: stage.writes.includes(zoneId) ? `outputs/${zone.id}` : null,
|
|
217
|
+
};
|
|
218
|
+
};
|
|
219
|
+
return {
|
|
220
|
+
reads: stage.reads.map(mountFor),
|
|
221
|
+
writes: stage.writes.map(mountFor),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
function projectStageZoneMountAliases(workspacePath, shellRoot, stage, schema) {
|
|
225
|
+
const zones = zoneMap(schema);
|
|
226
|
+
for (const zoneId of new Set([...stage.reads, ...stage.writes])) {
|
|
227
|
+
const zone = zoneOrThrow(zones, zoneId);
|
|
228
|
+
const targetPath = workspaceZoneAbsolutePath(workspacePath, zone);
|
|
229
|
+
if (stage.reads.includes(zoneId)) {
|
|
230
|
+
linkPath(targetPath, shellInputZonePath(shellRoot, zoneId));
|
|
231
|
+
}
|
|
232
|
+
if (stage.writes.includes(zoneId)) {
|
|
233
|
+
linkPath(targetPath, shellOutputZonePath(shellRoot, zoneId));
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function writeExecutionShellPathsFile(shellRoot, workflowId, stage, mounts) {
|
|
238
|
+
const paths = {
|
|
239
|
+
kind: "interf-execution-shell",
|
|
240
|
+
version: 1,
|
|
241
|
+
workflow: workflowId,
|
|
242
|
+
stage: stage.id,
|
|
243
|
+
reads: mounts.reads,
|
|
244
|
+
writes: mounts.writes,
|
|
245
|
+
};
|
|
246
|
+
writeFileSync(shellRuntimePath(shellRoot, "paths.json"), `${JSON.stringify(paths, null, 2)}\n`);
|
|
247
|
+
}
|
|
248
|
+
export function renderClaudeBootstrap(content) {
|
|
249
|
+
return [
|
|
250
|
+
"<!-- Generated from AGENTS.md. Edit AGENTS.md; Interf will rewrite this file. -->",
|
|
251
|
+
"",
|
|
252
|
+
content.trimEnd(),
|
|
253
|
+
"",
|
|
254
|
+
].join("\n");
|
|
255
|
+
}
|
|
256
|
+
export function pruneStageExecutionShells(workspacePath) {
|
|
257
|
+
rmSync(stageShellsRoot(workspacePath), { recursive: true, force: true });
|
|
258
|
+
}
|
|
259
|
+
export function projectWorkspaceQueryShell(workspacePath, workspaceName, workflowId, about) {
|
|
260
|
+
const agentsContent = renderWorkspaceAgents(workspaceName, workflowId, about);
|
|
261
|
+
const querySkillContent = renderWorkspaceQuerySkill();
|
|
262
|
+
let changed = false;
|
|
263
|
+
changed = writeIfChanged(join(workspacePath, "AGENTS.md"), agentsContent) || changed;
|
|
264
|
+
changed =
|
|
265
|
+
writeIfChanged(join(workspacePath, "CLAUDE.md"), renderClaudeBootstrap(agentsContent)) || changed;
|
|
266
|
+
const querySkillPath = join(workspacePath, WORKFLOW_PACKAGE_DIR, "use", "query", "SKILL.md");
|
|
267
|
+
mkdirSync(dirname(querySkillPath), { recursive: true });
|
|
268
|
+
changed = writeIfChanged(querySkillPath, querySkillContent) || changed;
|
|
269
|
+
changed = syncWorkspaceNativeQuerySkillCopies(workspacePath) || changed;
|
|
270
|
+
return changed;
|
|
271
|
+
}
|
|
272
|
+
export function createStageExecutionShell(workspacePath, workspaceName, workflowId, stage) {
|
|
273
|
+
const schema = ensureWorkspaceExecutionSurface(workspacePath);
|
|
274
|
+
const shellsRoot = stageShellsRoot(workspacePath);
|
|
275
|
+
const shellRoot = join(shellsRoot, `${stage.id}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`);
|
|
276
|
+
mkdirSync(shellRoot, { recursive: true });
|
|
277
|
+
mkdirSync(join(shellRoot, "runtime"), { recursive: true });
|
|
278
|
+
mkdirSync(join(shellRoot, "inputs"), { recursive: true });
|
|
279
|
+
mkdirSync(join(shellRoot, "outputs"), { recursive: true });
|
|
280
|
+
linkPath(join(workspacePath, "interf.json"), join(shellRoot, "interf.json"));
|
|
281
|
+
linkPath(join(workspacePath, ".interf", "stage-contract.json"), shellRuntimePath(shellRoot, "stage-contract.json"));
|
|
282
|
+
projectWorkspaceSchemaZones(workspacePath, shellRoot, schema);
|
|
283
|
+
projectWorkflowMetadata(workspacePath, shellRoot, stage);
|
|
284
|
+
projectStageZoneMountAliases(workspacePath, shellRoot, stage, schema);
|
|
285
|
+
writeExecutionShellPathsFile(shellRoot, workflowId, stage, buildStageZoneMounts(workspacePath, shellRoot, stage, schema));
|
|
286
|
+
const agentsContent = renderStageExecutionAgents(workspaceName, workflowId, stage);
|
|
287
|
+
writeFileSync(join(shellRoot, "AGENTS.md"), `${agentsContent}\n`);
|
|
288
|
+
writeFileSync(join(shellRoot, "CLAUDE.md"), renderClaudeBootstrap(agentsContent));
|
|
289
|
+
writeNativeSkillCopies(shellRoot, "interf-stage", renderStageExecutionSkill(stage, readStageMethodDoc(workspacePath, stage)));
|
|
290
|
+
return {
|
|
291
|
+
rootPath: shellRoot,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=agent-shells.js.map
|