@interf/compiler 0.3.2 → 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 +96 -57
- package/dist/commands/compile.d.ts +2 -0
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +42 -10
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +5 -5
- 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/init.js +18 -22
- package/dist/commands/init.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 +29 -27
- package/dist/commands/source-config-wizard.js.map +1 -1
- package/dist/commands/test-flow.d.ts +4 -0
- package/dist/commands/test-flow.d.ts.map +1 -1
- package/dist/commands/test-flow.js +24 -13
- package/dist/commands/test-flow.js.map +1 -1
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +16 -5
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/workspace-flow.d.ts +2 -0
- package/dist/commands/workspace-flow.d.ts.map +1 -1
- package/dist/commands/workspace-flow.js +3 -2
- 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 -23
- package/dist/lib/schema.d.ts.map +1 -1
- package/dist/lib/schema.js +66 -37
- package/dist/lib/schema.js.map +1 -1
- package/dist/lib/source-config.d.ts +3 -3
- package/dist/lib/source-config.d.ts.map +1 -1
- package/dist/lib/source-config.js +8 -6
- 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-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
|
@@ -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;
|
|
@@ -86,11 +94,12 @@ export async function runTestCommand(argv = {}) {
|
|
|
86
94
|
}
|
|
87
95
|
if (selectedWorkspace.checks.length === 0) {
|
|
88
96
|
process.exitCode = 1;
|
|
89
|
-
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.`));
|
|
90
98
|
console.log(chalk.dim(" Run `interf` or `interf init` to add a few first."));
|
|
91
99
|
return;
|
|
92
100
|
}
|
|
93
101
|
const executionProfile = executionProfileFromArgv(argv);
|
|
102
|
+
const preserveSandboxes = readSandboxRetentionMode(argv);
|
|
94
103
|
const builtWorkspacePath = detected?.path ?? findBuiltWorkspacePath(sourcePath, selectedWorkspace.name);
|
|
95
104
|
const hasBuiltWorkspace = Boolean(builtWorkspacePath);
|
|
96
105
|
const mode = detected
|
|
@@ -112,6 +121,7 @@ export async function runTestCommand(argv = {}) {
|
|
|
112
121
|
sourcePath,
|
|
113
122
|
workspaceConfig: selectedWorkspace,
|
|
114
123
|
executionProfile,
|
|
124
|
+
preserveSandboxes,
|
|
115
125
|
})
|
|
116
126
|
: null;
|
|
117
127
|
const workspaceOutcome = mode === "workspace" || mode === "both"
|
|
@@ -120,6 +130,7 @@ export async function runTestCommand(argv = {}) {
|
|
|
120
130
|
workspaceConfig: selectedWorkspace,
|
|
121
131
|
executionProfile,
|
|
122
132
|
workspacePath: builtWorkspacePath,
|
|
133
|
+
preserveSandboxes,
|
|
123
134
|
})
|
|
124
135
|
: null;
|
|
125
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":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EACL,YAAY,EACZ,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAKxB,MAAM,CAAC,MAAM,WAAW,GAAkB;IACxC,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,CAAC,WAAW,CAAC;IACtB,QAAQ,EAAE,mDAAmD;IAC7D,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,0BAA0B,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE;QACzD,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,QAAQ,EACN,0HAA0H;KAC7H,CAAC;IACJ,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,cAAc,CAAC,IAA+B,CAAC,CAAC;IACxD,CAAC;CACF,CAAC;AAEF,SAAS,wBAAwB,CAAC,IAA6B;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC;IACtE,OAAO,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAG7B;IACC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,SAAS,OAAO,CAAC,aAAa,iBAAiB;YACxD,OAAO,EAAE;gBACP;oBACE,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,WAAW;oBAClB,IAAI,EAAE,2CAA2C;iBAClD;gBACD;oBACE,KAAK,EAAE,WAAW;oBAClB,KAAK,EAAE,oBAAoB;oBAC3B,IAAI,EAAE,sCAAsC;iBAC7C;aACF;SACF,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,OAAO,QAAoB,CAAC;IAC9B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC;QAC9B,OAAO,EAAE,SAAS,OAAO,CAAC,aAAa,iBAAiB;QACxD,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,gDAAgD;gBACvD,IAAI,EAAE,iDAAiD;aACxD;YACD;gBACE,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,uBAAuB;aAC9B;YACD;gBACE,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,+CAA+C;aACtD;SACF;KACF,CAAC,CAAC;IACH,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,QAAoB,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAgC,EAAE;IACrE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5E,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAElD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,MAAM,iBAAiB,GAAG,QAAQ;QAChC,CAAC,CAAC,CAAC,wBAAwB,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QACtE,CAAC,CAAC,MAAM,4BAA4B,CAAC;YACjC,UAAU;YACV,aAAa,EAAE,sCAAsC;SACtD,CAAC,CAAC;IACP,IAAI,iBAAiB,KAAK,SAAS;QAAE,OAAO;IAC5C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,iBAAiB,CAAC,IAAI,6CAA6C,CAAC,CAAC,CAAC;QAC5G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,kBAAkB,GAAG,QAAQ,EAAE,IAAI,IAAI,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxG,MAAM,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEtD,MAAM,IAAI,GAAG,QAAQ;QACnB,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,MAAM,cAAc,CAAC;YACnB,aAAa,EAAE,iBAAiB,CAAC,IAAI;YACrC,iBAAiB;SAClB,CAAC,CAAC;IACP,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,IAAI,IAAI,KAAK,WAAW,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,iBAAiB,CAAC,IAAI,wBAAwB,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GACd,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,MAAM;QAC/B,CAAC,CAAC,MAAM,eAAe,CAAC;YACpB,UAAU;YACV,eAAe,EAAE,iBAAiB;YAClC,gBAAgB;YAChB,iBAAiB;SAClB,CAAC;QACJ,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,gBAAgB,GACpB,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,MAAM;QACrC,CAAC,CAAC,MAAM,qBAAqB,CAAC;YAC1B,UAAU;YACV,eAAe,EAAE,iBAAiB;YAClC,gBAAgB;YAChB,aAAa,EAAE,kBAAkB;YACjC,iBAAiB;SAClB,CAAC;QACJ,CAAC,CAAC,IAAI,CAAC;IAEX,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,iBAAiB,CAAC,IAAI,wBAAwB,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,wBAAwB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -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 {
|
|
@@ -17,5 +18,6 @@ export declare function ensureWorkspaceFromConfig(sourcePath: string, workspaceC
|
|
|
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]));
|
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-shells.js","sourceRoot":"","sources":["../../src/lib/agent-shells.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { type WorkflowExecutor } from "./executors.js";
|
|
2
2
|
import type { BenchmarkRunResult, BenchmarkTargetCandidate, LoadedBenchmarkSpec } from "./benchmark-types.js";
|
|
3
|
+
import { type BenchmarkSandboxRetentionMode } from "./benchmark-sandbox.js";
|
|
3
4
|
export declare function runBenchmark(sourcePath: string, spec: LoadedBenchmarkSpec, targets: BenchmarkTargetCandidate[]): BenchmarkRunResult;
|
|
4
|
-
export declare function runBenchmarkWithJudge(sourcePath: string, spec: LoadedBenchmarkSpec, targets: BenchmarkTargetCandidate[], executor: WorkflowExecutor
|
|
5
|
+
export declare function runBenchmarkWithJudge(sourcePath: string, spec: LoadedBenchmarkSpec, targets: BenchmarkTargetCandidate[], executor: WorkflowExecutor, options?: {
|
|
6
|
+
preserveSandboxes?: BenchmarkSandboxRetentionMode;
|
|
7
|
+
}): Promise<BenchmarkRunResult>;
|
|
5
8
|
export declare function runBenchmarkAuto(sourcePath: string, spec: LoadedBenchmarkSpec, targets: BenchmarkTargetCandidate[], options?: {
|
|
6
9
|
executor?: WorkflowExecutor | null;
|
|
10
|
+
preserveSandboxes?: BenchmarkSandboxRetentionMode;
|
|
7
11
|
}): Promise<BenchmarkRunResult>;
|
|
8
12
|
export declare function saveBenchmarkRun(sourcePath: string, result: BenchmarkRunResult): string;
|
|
9
13
|
//# sourceMappingURL=benchmark-execution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark-execution.d.ts","sourceRoot":"","sources":["../../src/lib/benchmark-execution.ts"],"names":[],"mappings":"AAUA,OAAO,EAA4B,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAIV,kBAAkB,EAClB,wBAAwB,EAExB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"benchmark-execution.d.ts","sourceRoot":"","sources":["../../src/lib/benchmark-execution.ts"],"names":[],"mappings":"AAUA,OAAO,EAA4B,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAIV,kBAAkB,EAClB,wBAAwB,EAExB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,wBAAwB,CAAC;AAigBhC,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,wBAAwB,EAAE,GAClC,kBAAkB,CAmBpB;AAED,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,wBAAwB,EAAE,EACnC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,GAAE;IACP,iBAAiB,CAAC,EAAE,6BAA6B,CAAC;CAC9C,GACL,OAAO,CAAC,kBAAkB,CAAC,CAgD7B;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,wBAAwB,EAAE,EACnC,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,iBAAiB,CAAC,EAAE,6BAA6B,CAAC;CACnD,GACA,OAAO,CAAC,kBAAkB,CAAC,CAW7B;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,kBAAkB,GACzB,MAAM,CAkCR"}
|
|
@@ -2,8 +2,8 @@ import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { buildRuntimeExecutorInfo } from "./executors.js";
|
|
5
|
-
import { benchmarkRunGitignorePath, benchmarkRunsPath, } from "./benchmark-paths.js";
|
|
6
|
-
import { createBenchmarkSandbox } from "./benchmark-sandbox.js";
|
|
5
|
+
import { benchmarkRunGitignorePath, benchmarkRunsPath, benchmarkSandboxGitignorePath, benchmarkSandboxesPath, normalizeBenchmarkId, } from "./benchmark-paths.js";
|
|
6
|
+
import { createBenchmarkSandbox, } from "./benchmark-sandbox.js";
|
|
7
7
|
function parseWords(content) {
|
|
8
8
|
return content.trim().split(/\s+/).filter(Boolean).length;
|
|
9
9
|
}
|
|
@@ -199,10 +199,12 @@ function buildBenchmarkQueryPrompt(target, benchmarkCase, answerPath, tracePath)
|
|
|
199
199
|
? [
|
|
200
200
|
"You are running an Interf benchmark inside an isolated sandboxed compiled workspace.",
|
|
201
201
|
"Read `AGENTS.md` first.",
|
|
202
|
-
"
|
|
202
|
+
"Use the local native `interf-query` skill available in this workspace.",
|
|
203
|
+
"If you need the editable method source, read `workflow/use/query/SKILL.md`.",
|
|
203
204
|
"Answer the benchmark question the same way you would answer a real user inside this compiled workspace.",
|
|
204
205
|
"Prefer `home.md`, `knowledge/`, and `summaries/` before raw fallback.",
|
|
205
|
-
"
|
|
206
|
+
"This sandbox is self-contained: the copied workspace has its own sanitized `raw/` fallback via `interf.json` `source.path`.",
|
|
207
|
+
"The source-folder control plane is intentionally absent from this sandbox. Work only from this sandboxed workspace and its embedded raw files.",
|
|
206
208
|
]
|
|
207
209
|
: [
|
|
208
210
|
"You are running an Interf baseline test inside an isolated sandbox of the raw files for this folder.",
|
|
@@ -371,7 +373,7 @@ async function runBenchmarkCaseWithJudge(target, benchmarkCase, executor) {
|
|
|
371
373
|
checks,
|
|
372
374
|
};
|
|
373
375
|
}
|
|
374
|
-
function buildBenchmarkTargetResult(target, caseResults) {
|
|
376
|
+
function buildBenchmarkTargetResult(target, caseResults, options = {}) {
|
|
375
377
|
const passedCases = caseResults.filter((result) => result.ok).length;
|
|
376
378
|
const passedChecks = caseResults.reduce((total, result) => total + result.passedChecks, 0);
|
|
377
379
|
const totalChecks = caseResults.reduce((total, result) => total + result.totalChecks, 0);
|
|
@@ -382,6 +384,7 @@ function buildBenchmarkTargetResult(target, caseResults) {
|
|
|
382
384
|
path: target.path,
|
|
383
385
|
workflow: target.workflow,
|
|
384
386
|
},
|
|
387
|
+
...(options.sandboxPath ? { sandbox_path: options.sandboxPath } : {}),
|
|
385
388
|
ok: passedCases === caseResults.length,
|
|
386
389
|
passedCases,
|
|
387
390
|
totalCases: caseResults.length,
|
|
@@ -390,11 +393,11 @@ function buildBenchmarkTargetResult(target, caseResults) {
|
|
|
390
393
|
caseResults,
|
|
391
394
|
};
|
|
392
395
|
}
|
|
393
|
-
function buildBenchmarkRunResult(sourcePath, spec, results, executor) {
|
|
396
|
+
function buildBenchmarkRunResult(sourcePath, spec, results, executor, generatedAt) {
|
|
394
397
|
return {
|
|
395
398
|
kind: "interf-benchmark-run",
|
|
396
399
|
version: 1,
|
|
397
|
-
generated_at: new Date().toISOString(),
|
|
400
|
+
generated_at: generatedAt ?? new Date().toISOString(),
|
|
398
401
|
benchmark: {
|
|
399
402
|
id: spec.id,
|
|
400
403
|
name: spec.name,
|
|
@@ -429,14 +432,17 @@ export function runBenchmark(sourcePath, spec, targets) {
|
|
|
429
432
|
const results = targets.map((target) => buildBenchmarkTargetResult(target, spec.cases.map((benchmarkCase) => runBenchmarkCase(target, benchmarkCase))));
|
|
430
433
|
return buildBenchmarkRunResult(sourcePath, spec, results);
|
|
431
434
|
}
|
|
432
|
-
export async function runBenchmarkWithJudge(sourcePath, spec, targets, executor) {
|
|
435
|
+
export async function runBenchmarkWithJudge(sourcePath, spec, targets, executor, options = {}) {
|
|
436
|
+
const preserveMode = options.preserveSandboxes ?? "on-failure";
|
|
437
|
+
const generatedAt = new Date().toISOString();
|
|
438
|
+
const sandboxRunId = `${generatedAt.replace(/[:.]/g, "-")}-${spec.id}`;
|
|
433
439
|
for (const target of targets) {
|
|
434
440
|
if (target.type !== spec.type) {
|
|
435
441
|
throw new Error(`Benchmark target type mismatch: expected ${spec.type}, got ${target.type}`);
|
|
436
442
|
}
|
|
437
443
|
}
|
|
438
444
|
const results = [];
|
|
439
|
-
for (const target of targets) {
|
|
445
|
+
for (const [index, target] of targets.entries()) {
|
|
440
446
|
const sandbox = createBenchmarkSandbox(target);
|
|
441
447
|
try {
|
|
442
448
|
const sandboxTarget = {
|
|
@@ -452,20 +458,36 @@ export async function runBenchmarkWithJudge(sourcePath, spec, targets, executor)
|
|
|
452
458
|
caseResults.push(await runBenchmarkCaseWithJudge(sandboxTarget, benchmarkCase, executor));
|
|
453
459
|
}
|
|
454
460
|
}
|
|
455
|
-
|
|
461
|
+
let sandboxPath;
|
|
462
|
+
const targetResult = buildBenchmarkTargetResult(target, caseResults);
|
|
463
|
+
const shouldPreserveSandbox = preserveMode === "always" || !targetResult.ok;
|
|
464
|
+
if (shouldPreserveSandbox) {
|
|
465
|
+
const sandboxRoot = benchmarkSandboxesPath(sourcePath, target.type);
|
|
466
|
+
mkdirSync(sandboxRoot, { recursive: true });
|
|
467
|
+
const gitignorePath = benchmarkSandboxGitignorePath(sourcePath, target.type);
|
|
468
|
+
if (!existsSync(gitignorePath)) {
|
|
469
|
+
writeFileSync(gitignorePath, "*\n!.gitignore\n");
|
|
470
|
+
}
|
|
471
|
+
const sandboxPathName = `${String(index + 1).padStart(2, "0")}-${normalizeBenchmarkId(target.name) || target.type}`;
|
|
472
|
+
sandbox.preserve(join(sandboxRoot, sandboxRunId, sandboxPathName));
|
|
473
|
+
sandboxPath = sandbox.targetPath;
|
|
474
|
+
}
|
|
475
|
+
results.push(buildBenchmarkTargetResult(target, caseResults, { sandboxPath }));
|
|
456
476
|
}
|
|
457
477
|
finally {
|
|
458
478
|
sandbox.cleanup();
|
|
459
479
|
}
|
|
460
480
|
}
|
|
461
|
-
return buildBenchmarkRunResult(sourcePath, spec, results, executor);
|
|
481
|
+
return buildBenchmarkRunResult(sourcePath, spec, results, executor, generatedAt);
|
|
462
482
|
}
|
|
463
483
|
export async function runBenchmarkAuto(sourcePath, spec, targets, options) {
|
|
464
484
|
if (spec.cases.some((benchmarkCase) => benchmarkCaseNeedsExecutor(benchmarkCase))) {
|
|
465
485
|
if (!options?.executor) {
|
|
466
486
|
throw new Error("This benchmark needs a live local executor, but no executor was provided.");
|
|
467
487
|
}
|
|
468
|
-
return runBenchmarkWithJudge(sourcePath, spec, targets, options.executor
|
|
488
|
+
return runBenchmarkWithJudge(sourcePath, spec, targets, options.executor, {
|
|
489
|
+
preserveSandboxes: options.preserveSandboxes,
|
|
490
|
+
});
|
|
469
491
|
}
|
|
470
492
|
return runBenchmark(sourcePath, spec, targets);
|
|
471
493
|
}
|