@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,5 +1,5 @@
|
|
|
1
1
|
import { existsSync, readdirSync, statSync, } from "node:fs";
|
|
2
|
-
import {
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
3
|
import { warnInterf } from "./logger.js";
|
|
4
4
|
import { readJsonFileWithSchema } from "./parse.js";
|
|
5
5
|
import { InterfConfigSchema, } from "./schema.js";
|
|
@@ -22,22 +22,6 @@ export function detectInterf(cwd) {
|
|
|
22
22
|
const config = readInterfConfig(cwd);
|
|
23
23
|
if (config)
|
|
24
24
|
return { path: cwd, config };
|
|
25
|
-
const directChildren = listWorkspaceEntries(join(cwd, INTERF_CONTAINER_NAME, WORKSPACE_CONTAINER_NAME));
|
|
26
|
-
if (directChildren.length === 1) {
|
|
27
|
-
return directChildren[0];
|
|
28
|
-
}
|
|
29
|
-
if (basename(cwd) === INTERF_CONTAINER_NAME) {
|
|
30
|
-
const nestedChildren = listWorkspaceEntries(join(cwd, WORKSPACE_CONTAINER_NAME));
|
|
31
|
-
if (nestedChildren.length === 1) {
|
|
32
|
-
return nestedChildren[0];
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
if (basename(cwd) === WORKSPACE_CONTAINER_NAME) {
|
|
36
|
-
const nestedChildren = listWorkspaceEntries(cwd);
|
|
37
|
-
if (nestedChildren.length === 1) {
|
|
38
|
-
return nestedChildren[0];
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
25
|
return null;
|
|
42
26
|
}
|
|
43
27
|
export function resolveWorkspace(cwd) {
|
|
@@ -45,7 +29,7 @@ export function resolveWorkspace(cwd) {
|
|
|
45
29
|
if (!detected)
|
|
46
30
|
return null;
|
|
47
31
|
return {
|
|
48
|
-
sourcePath:
|
|
32
|
+
sourcePath: resolveSourceControlPath(detected.path),
|
|
49
33
|
workspacePath: detected.path,
|
|
50
34
|
config: detected.config,
|
|
51
35
|
};
|
|
@@ -54,6 +38,9 @@ export function resolveSourceFolderPath(workspacePath, config = readInterfConfig
|
|
|
54
38
|
if (hasSourceFolderInput(config)) {
|
|
55
39
|
return resolve(workspacePath, config.source.path);
|
|
56
40
|
}
|
|
41
|
+
return resolve(workspacePath, "raw");
|
|
42
|
+
}
|
|
43
|
+
export function resolveSourceControlPath(workspacePath) {
|
|
57
44
|
return resolve(workspacePath, "..", "..", "..");
|
|
58
45
|
}
|
|
59
46
|
function listWorkspaceEntries(containerPath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interf-detect.js","sourceRoot":"","sources":["../../src/lib/interf-detect.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,QAAQ,GACT,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"interf-detect.js","sourceRoot":"","sources":["../../src/lib/interf-detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interf-scaffold.d.ts","sourceRoot":"","sources":["../../src/lib/interf-scaffold.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interf-scaffold.d.ts","sourceRoot":"","sources":["../../src/lib/interf-scaffold.ts"],"names":[],"mappings":"AAiCA,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,UAAU,SAAW,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAwDR;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAExE"}
|
|
@@ -5,78 +5,12 @@ import { getWorkspaceWorkflow } from "./workflow-definitions.js";
|
|
|
5
5
|
import { refreshWorkspaceArtifacts, saveState, initWorkspaceState, } from "./state.js";
|
|
6
6
|
import { writeObsidianDefaults } from "./obsidian.js";
|
|
7
7
|
import { assertWorkspaceContainer, assertWritableTargetDir, assertWorkspaceName, INTERF_CONFIG_FILE, } from "./interf-detect.js";
|
|
8
|
-
import {
|
|
8
|
+
import { refreshWorkspaceBootstrapGuidance } from "./interf-bootstrap.js";
|
|
9
9
|
import { writeWorkspaceWorkflowPackage } from "./interf-workflow-package.js";
|
|
10
|
+
import { syncWorkspaceRawSnapshot } from "./workspace-raw.js";
|
|
10
11
|
function writeInterfConfigFile(dirPath, config) {
|
|
11
12
|
writeFileSync(join(dirPath, INTERF_CONFIG_FILE), `${JSON.stringify(config, null, 2)}\n`);
|
|
12
13
|
}
|
|
13
|
-
function writeAgentBootstrapFiles(dirPath, content) {
|
|
14
|
-
writeFileSync(join(dirPath, "AGENTS.md"), content);
|
|
15
|
-
writeFileSync(join(dirPath, "CLAUDE.md"), renderClaudeBootstrap(content));
|
|
16
|
-
}
|
|
17
|
-
function renderWorkspaceAgents(name, workflowId, about) {
|
|
18
|
-
return [
|
|
19
|
-
`# ${name}`,
|
|
20
|
-
"",
|
|
21
|
-
"This is an Interf compiled workspace.",
|
|
22
|
-
"It is a file-based layer on top of the raw files, built for agents to navigate, retrieve evidence, and answer more accurately.",
|
|
23
|
-
"",
|
|
24
|
-
...(about
|
|
25
|
-
? [
|
|
26
|
-
`About: ${about}`,
|
|
27
|
-
"",
|
|
28
|
-
]
|
|
29
|
-
: []),
|
|
30
|
-
"## First question: required preflight",
|
|
31
|
-
"",
|
|
32
|
-
"Before describing this workspace or answering from compiled notes:",
|
|
33
|
-
"",
|
|
34
|
-
"1. Read `workflow/use/query/SKILL.md` now.",
|
|
35
|
-
"2. Confirm `home.md`, `knowledge/`, and `summaries/` are reachable.",
|
|
36
|
-
"3. Inspect `.interf/source-access.json` and open one `suggested_checks` path immediately.",
|
|
37
|
-
"4. If the environment asks for permission, request it right away instead of guessing.",
|
|
38
|
-
"5. `Raw access: confirmed` is allowed only after you actually open and inspect that raw file. A plain existence check is not enough.",
|
|
39
|
-
"6. Start the answer with exactly `Raw access: confirmed` or `Raw access: unavailable`.",
|
|
40
|
-
"",
|
|
41
|
-
"## How this workspace works",
|
|
42
|
-
"",
|
|
43
|
-
"- `interf.json` points back to the source folder via `source.path`.",
|
|
44
|
-
`- Workflow: \`${workflowId}\`.`,
|
|
45
|
-
"- `workflow/` is the local editable method package for this workspace.",
|
|
46
|
-
"- `workflow/use/query/` defines how agents should use this workspace manually.",
|
|
47
|
-
"- `workflow/compile/stages/` defines stage-specific local docs for automated runs.",
|
|
48
|
-
"- `summaries/` contains per-file evidence objects.",
|
|
49
|
-
"- `knowledge/` contains the cross-file knowledge layer and navigation structure.",
|
|
50
|
-
"- `home.md` is the starting note.",
|
|
51
|
-
"- `.interf/run.json`, `.interf/health.json`, `.interf/view-spec.json`, and `.interf/source-access.json` are CLI-owned runtime artifacts.",
|
|
52
|
-
"",
|
|
53
|
-
"## Manual query rules",
|
|
54
|
-
"",
|
|
55
|
-
"- Prefer `home.md`, `knowledge/`, and `summaries/` before raw files.",
|
|
56
|
-
"- Read `workflow/use/query/SKILL.md` before answering substantive questions.",
|
|
57
|
-
"- Use raw files for quotes, verification, ambiguity, or evidence the compiled layer does not expose well.",
|
|
58
|
-
"- If exact chart, table, or image-derived evidence matters, inspect the raw source and say whether the answer was text-derived, table-derived, or chart-derived.",
|
|
59
|
-
"- Do not claim raw verification after only checking that a file exists.",
|
|
60
|
-
"",
|
|
61
|
-
"## Commands",
|
|
62
|
-
"",
|
|
63
|
-
"```",
|
|
64
|
-
"interf compile build this compiled workspace",
|
|
65
|
-
"interf test run saved questions against this workspace",
|
|
66
|
-
"interf verify summarize verify summary coverage",
|
|
67
|
-
"interf verify structure verify cross-file structure outputs",
|
|
68
|
-
"interf verify compile verify compile outputs",
|
|
69
|
-
"interf status show deterministic health",
|
|
70
|
-
"```",
|
|
71
|
-
"",
|
|
72
|
-
"## Rules",
|
|
73
|
-
"",
|
|
74
|
-
"- Do not modify raw source files.",
|
|
75
|
-
"- Treat compiled notes as working retrieval artifacts, not final truth.",
|
|
76
|
-
"- When confidence is low, follow links outward or verify against raw files before answering strongly.",
|
|
77
|
-
"",
|
|
78
|
-
].join("\n");
|
|
79
|
-
}
|
|
80
14
|
export function createWorkspace(name, sourcePath, workflowId = "interf", about) {
|
|
81
15
|
assertWorkspaceName(name, "Workspace");
|
|
82
16
|
const containerPath = assertWorkspaceContainer(sourcePath);
|
|
@@ -91,14 +25,16 @@ export function createWorkspace(name, sourcePath, workflowId = "interf", about)
|
|
|
91
25
|
...(about ? { about } : {}),
|
|
92
26
|
workflow: selectedWorkflow.id,
|
|
93
27
|
source: {
|
|
94
|
-
path: "
|
|
28
|
+
path: "./raw",
|
|
95
29
|
},
|
|
96
30
|
});
|
|
31
|
+
mkdirSync(join(workspacePath, "raw"), { recursive: true });
|
|
32
|
+
syncWorkspaceRawSnapshot(workspacePath, sourcePath);
|
|
97
33
|
if (existsSync(WORKSPACE_INTERFIGNORE)) {
|
|
98
34
|
copyFileSync(WORKSPACE_INTERFIGNORE, join(workspacePath, ".interfignore"));
|
|
99
35
|
}
|
|
100
36
|
writeWorkspaceWorkflowPackage(workspacePath, selectedWorkflow);
|
|
101
|
-
|
|
37
|
+
refreshWorkspaceBootstrapGuidance(workspacePath);
|
|
102
38
|
writeFileSync(join(workspacePath, "home.md"), [
|
|
103
39
|
`# ${name} — Home`,
|
|
104
40
|
"",
|
|
@@ -106,7 +42,7 @@ export function createWorkspace(name, sourcePath, workflowId = "interf", about)
|
|
|
106
42
|
...(about ? ["", `About: ${about}`] : []),
|
|
107
43
|
"",
|
|
108
44
|
].join("\n"));
|
|
109
|
-
writeFileSync(join(workspacePath, ".gitignore"), "
|
|
45
|
+
writeFileSync(join(workspacePath, ".gitignore"), "raw/\nsummaries/\nknowledge/\n.interf/\n.obsidian/\n");
|
|
110
46
|
saveState(workspacePath, initWorkspaceState());
|
|
111
47
|
writeFileSync(join(workspacePath, ".interf", "inventory.json"), JSON.stringify({ total: 0, files: [] }, null, 2) + "\n");
|
|
112
48
|
refreshWorkspaceArtifacts(workspacePath, { ensureViewSpec: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interf-scaffold.js","sourceRoot":"","sources":["../../src/lib/interf-scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,UAAU,EACV,SAAS,EACT,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,SAAS,EACT,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"interf-scaffold.js","sourceRoot":"","sources":["../../src/lib/interf-scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interf-workflow-package.d.ts","sourceRoot":"","sources":["../../src/lib/interf-workflow-package.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"interf-workflow-package.d.ts","sourceRoot":"","sources":["../../src/lib/interf-workflow-package.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,2BAA2B,CAAC;AAyInC,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,GACnC,IAAI,CAwBN"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { WORKFLOW_PACKAGE_DIR } from "./interf-detect.js";
|
|
4
|
+
import { renderWorkspaceQuerySkill } from "./workspace-docs.js";
|
|
5
|
+
import { writeWorkspaceSchemaFile } from "./workspace-schema.js";
|
|
4
6
|
function workflowPackagePath(dirPath) {
|
|
5
7
|
return join(dirPath, WORKFLOW_PACKAGE_DIR);
|
|
6
8
|
}
|
|
@@ -15,6 +17,10 @@ function writeWorkflowPackageJson(rootPath, workflow) {
|
|
|
15
17
|
writeFileSync(join(rootPath, "workflow.json"), `${JSON.stringify({
|
|
16
18
|
id: workflow.id,
|
|
17
19
|
type: "workspace",
|
|
20
|
+
compiler_api: workflow.compilerApi ?? {
|
|
21
|
+
kind: "workspace",
|
|
22
|
+
version: 1,
|
|
23
|
+
},
|
|
18
24
|
label: workflow.label,
|
|
19
25
|
hint: workflow.hint,
|
|
20
26
|
stages: workflow.stages.map((stage) => ({
|
|
@@ -23,6 +29,8 @@ function writeWorkflowPackageJson(rootPath, workflow) {
|
|
|
23
29
|
description: stage.description,
|
|
24
30
|
contract_type: stage.contractType,
|
|
25
31
|
skill_dir: stage.skillDir,
|
|
32
|
+
reads: stage.reads,
|
|
33
|
+
writes: stage.writes,
|
|
26
34
|
...(stage.acceptance ? { acceptance: stage.acceptance } : {}),
|
|
27
35
|
})),
|
|
28
36
|
...(workflow.stagePolicyNotes ? { stage_policy_notes: workflow.stagePolicyNotes } : {}),
|
|
@@ -30,18 +38,25 @@ function writeWorkflowPackageJson(rootPath, workflow) {
|
|
|
30
38
|
}
|
|
31
39
|
function renderWorkflowReadme(workflow) {
|
|
32
40
|
const stageLines = workflow.stages
|
|
33
|
-
.map((stage) => `- \`${stage.id}\` — ${stage.description} (${stage.contractType})`)
|
|
41
|
+
.map((stage) => `- \`${stage.id}\` — ${stage.description} (${stage.contractType}; reads: ${stage.reads.join(", ")}; writes: ${stage.writes.join(", ")})`)
|
|
34
42
|
.join("\n");
|
|
35
43
|
return [
|
|
36
44
|
`# ${workflow.label}`,
|
|
37
45
|
"",
|
|
38
46
|
workflow.hint,
|
|
39
47
|
"",
|
|
48
|
+
"## Package",
|
|
49
|
+
"",
|
|
50
|
+
"- `workflow.json` = stage graph, compiler API target, and compile contract mapping",
|
|
51
|
+
"- `workspace.schema.json` = deterministic workspace output shape",
|
|
52
|
+
"- `create/`, `compile/stages/`, and `use/query/` = human-readable authoring docs",
|
|
53
|
+
"- Interf projects native agent shells from these docs for query use and stage execution",
|
|
54
|
+
"",
|
|
40
55
|
"## Stages",
|
|
41
56
|
"",
|
|
42
57
|
stageLines,
|
|
43
58
|
"",
|
|
44
|
-
"This workflow package lives under `workflow/` and controls how Interf builds this compiled workspace.",
|
|
59
|
+
"This workflow package lives under `workflow/` and is the reusable artifact that controls how Interf builds this compiled workspace.",
|
|
45
60
|
"",
|
|
46
61
|
].join("\n");
|
|
47
62
|
}
|
|
@@ -55,27 +70,6 @@ function renderCreateSkill(workflow) {
|
|
|
55
70
|
"",
|
|
56
71
|
].join("\n");
|
|
57
72
|
}
|
|
58
|
-
function renderQuerySkill() {
|
|
59
|
-
return [
|
|
60
|
-
"# Manual Query Loop",
|
|
61
|
-
"",
|
|
62
|
-
"Default loop:",
|
|
63
|
-
"1. Read `home.md` first.",
|
|
64
|
-
"2. Browse `knowledge/` before raw files.",
|
|
65
|
-
"3. Use `summaries/` for source-grounded evidence.",
|
|
66
|
-
"4. Inspect `.interf/source-access.json` before claiming raw verification.",
|
|
67
|
-
"",
|
|
68
|
-
"First-reply rule:",
|
|
69
|
-
"- on the first substantive manual question, inspect `.interf/source-access.json` immediately and open one `suggested_checks` path",
|
|
70
|
-
"- if the environment asks for permission, request it immediately instead of guessing",
|
|
71
|
-
"- the first line of the answer must be exactly `Raw access: confirmed` or `Raw access: unavailable`",
|
|
72
|
-
"- use `Raw access: confirmed` only after you actually open and inspect a suggested raw path from this session; a plain existence check is not enough",
|
|
73
|
-
"- use `Raw access: unavailable` only after a raw check fails or permission is denied",
|
|
74
|
-
"",
|
|
75
|
-
"You can edit this file to bias manual question-answering behavior for this workspace.",
|
|
76
|
-
"",
|
|
77
|
-
].join("\n");
|
|
78
|
-
}
|
|
79
73
|
function renderStageSkill(workflow, stage) {
|
|
80
74
|
const notes = workflow.stagePolicyNotes?.[stage.id] ?? [];
|
|
81
75
|
const stageSpecificNotes = stage.contractType === "workspace-file-evidence"
|
|
@@ -91,7 +85,7 @@ function renderStageSkill(workflow, stage) {
|
|
|
91
85
|
]
|
|
92
86
|
: stage.contractType === "workspace-query-shape"
|
|
93
87
|
? [
|
|
94
|
-
"Use the workspace focus plus saved question text to shape `home.md` and retrieval routes.",
|
|
88
|
+
"Use the workspace focus plus saved truth-check question text to shape `home.md` and retrieval routes.",
|
|
95
89
|
"Do not copy expected answers into the workspace.",
|
|
96
90
|
]
|
|
97
91
|
: [];
|
|
@@ -129,9 +123,10 @@ export function writeWorkspaceWorkflowPackage(workspacePath, workflow) {
|
|
|
129
123
|
mkdirSync(join(workflowDir, "compile", "stages", stage.skillDir), { recursive: true });
|
|
130
124
|
}
|
|
131
125
|
writeWorkflowPackageJson(workflowDir, workflow);
|
|
126
|
+
writeWorkspaceSchemaFile(workflowDir, workflow.stages, `${workflow.label} workspace schema`);
|
|
132
127
|
writeFileSync(join(workflowDir, "README.md"), renderWorkflowReadme(workflow));
|
|
133
128
|
writeFileSync(join(workflowDir, "create", "SKILL.md"), renderCreateSkill(workflow));
|
|
134
|
-
writeFileSync(join(workflowDir, "use", "query", "SKILL.md"),
|
|
129
|
+
writeFileSync(join(workflowDir, "use", "query", "SKILL.md"), renderWorkspaceQuerySkill());
|
|
135
130
|
for (const stage of workflow.stages) {
|
|
136
131
|
writeFileSync(join(workflowDir, "compile", "stages", stage.skillDir, "SKILL.md"), renderStageSkill(workflow, stage));
|
|
137
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interf-workflow-package.js","sourceRoot":"","sources":["../../src/lib/interf-workflow-package.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAK1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"interf-workflow-package.js","sourceRoot":"","sources":["../../src/lib/interf-workflow-package.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/interf.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export { INTERF_CONTAINER_NAME, WORKSPACE_CONTAINER_NAME, WORKFLOW_CONTAINER_NAME, BENCHMARK_CONTAINER_NAME, INTERF_CONFIG_FILE, WORKFLOW_PACKAGE_DIR, readInterfConfig, detectInterf, resolveWorkspace, resolveSourceFolderPath, listWorkspacesForSourceFolder, hasSourceFolderInput, assertWorkspaceContainer, assertWritableTargetDir, assertWorkspaceName, } from "./interf-detect.js";
|
|
1
|
+
export { INTERF_CONTAINER_NAME, WORKSPACE_CONTAINER_NAME, WORKFLOW_CONTAINER_NAME, BENCHMARK_CONTAINER_NAME, INTERF_CONFIG_FILE, WORKFLOW_PACKAGE_DIR, readInterfConfig, detectInterf, resolveWorkspace, resolveSourceFolderPath, resolveSourceControlPath, listWorkspacesForSourceFolder, hasSourceFolderInput, assertWorkspaceContainer, assertWritableTargetDir, assertWorkspaceName, } from "./interf-detect.js";
|
|
2
2
|
export type { InterfConfig, ResolvedWorkspace } from "./interf-detect.js";
|
|
3
|
-
export {
|
|
3
|
+
export { ensureWorkspaceRawBinding, resolveWorkspaceRawPath, syncWorkspaceRawSnapshot, } from "./workspace-raw.js";
|
|
4
|
+
export { refreshWorkspaceBootstrapGuidance, renderClaudeBootstrap, } from "./interf-bootstrap.js";
|
|
4
5
|
export { createWorkspace, defaultWorkspaceNameForSource, } from "./interf-scaffold.js";
|
|
5
6
|
//# sourceMappingURL=interf.d.ts.map
|
package/dist/lib/interf.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interf.d.ts","sourceRoot":"","sources":["../../src/lib/interf.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"interf.d.ts","sourceRoot":"","sources":["../../src/lib/interf.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,6BAA6B,EAC7B,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,iCAAiC,EACjC,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC"}
|
package/dist/lib/interf.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { INTERF_CONTAINER_NAME, WORKSPACE_CONTAINER_NAME, WORKFLOW_CONTAINER_NAME, BENCHMARK_CONTAINER_NAME, INTERF_CONFIG_FILE, WORKFLOW_PACKAGE_DIR, readInterfConfig, detectInterf, resolveWorkspace, resolveSourceFolderPath, listWorkspacesForSourceFolder, hasSourceFolderInput, assertWorkspaceContainer, assertWritableTargetDir, assertWorkspaceName, } from "./interf-detect.js";
|
|
2
|
-
export {
|
|
1
|
+
export { INTERF_CONTAINER_NAME, WORKSPACE_CONTAINER_NAME, WORKFLOW_CONTAINER_NAME, BENCHMARK_CONTAINER_NAME, INTERF_CONFIG_FILE, WORKFLOW_PACKAGE_DIR, readInterfConfig, detectInterf, resolveWorkspace, resolveSourceFolderPath, resolveSourceControlPath, listWorkspacesForSourceFolder, hasSourceFolderInput, assertWorkspaceContainer, assertWritableTargetDir, assertWorkspaceName, } from "./interf-detect.js";
|
|
2
|
+
export { ensureWorkspaceRawBinding, resolveWorkspaceRawPath, syncWorkspaceRawSnapshot, } from "./workspace-raw.js";
|
|
3
|
+
export { refreshWorkspaceBootstrapGuidance, renderClaudeBootstrap, } from "./interf-bootstrap.js";
|
|
3
4
|
export { createWorkspace, defaultWorkspaceNameForSource, } from "./interf-scaffold.js";
|
|
4
5
|
//# sourceMappingURL=interf.js.map
|
package/dist/lib/interf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interf.js","sourceRoot":"","sources":["../../src/lib/interf.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"interf.js","sourceRoot":"","sources":["../../src/lib/interf.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,6BAA6B,EAC7B,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,iCAAiC,EACjC,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { RuntimeContractTypeSchema, RuntimeStageAcceptanceSchema } from "./schema.js";
|
|
2
|
+
import { WorkflowCompilerApiSchema, RuntimeContractTypeSchema, RuntimeStageAcceptanceSchema, WorkflowStageZoneAccessSchema, type WorkflowWorkspaceSchema } from "./schema.js";
|
|
3
3
|
export interface LocalWorkflowStarterDoc {
|
|
4
4
|
relativePath: string;
|
|
5
5
|
content: string;
|
|
@@ -10,19 +10,24 @@ export interface LocalWorkflowStageDefinition {
|
|
|
10
10
|
contract_type: z.infer<typeof RuntimeContractTypeSchema>;
|
|
11
11
|
skill_dir?: string;
|
|
12
12
|
description?: string;
|
|
13
|
+
reads: z.infer<typeof WorkflowStageZoneAccessSchema>;
|
|
14
|
+
writes: z.infer<typeof WorkflowStageZoneAccessSchema>;
|
|
13
15
|
acceptance?: z.infer<typeof RuntimeStageAcceptanceSchema>;
|
|
14
16
|
}
|
|
15
17
|
export interface LocalWorkflowDefinition {
|
|
16
18
|
id: string;
|
|
17
19
|
type: "workspace";
|
|
20
|
+
compiler_api?: z.infer<typeof WorkflowCompilerApiSchema>;
|
|
18
21
|
label: string;
|
|
19
22
|
hint: string;
|
|
20
23
|
extends?: string;
|
|
21
24
|
stages?: LocalWorkflowStageDefinition[];
|
|
22
25
|
stage_policy_notes?: Record<string, string[]>;
|
|
26
|
+
workspace_schema: WorkflowWorkspaceSchema;
|
|
23
27
|
starter_docs: LocalWorkflowStarterDoc[];
|
|
24
28
|
directoryPath: string;
|
|
25
29
|
workflowPath: string;
|
|
30
|
+
workspaceSchemaPath: string;
|
|
26
31
|
}
|
|
27
32
|
export declare function workflowDefinitionPath(sourcePath: string, id: string): string;
|
|
28
33
|
export declare function loadWorkflowDefinitionFromDir(dirPath: string): LocalWorkflowDefinition | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-workflows.d.ts","sourceRoot":"","sources":["../../src/lib/local-workflows.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EACL,yBAAyB,EACzB,4BAA4B,
|
|
1
|
+
{"version":3,"file":"local-workflows.d.ts","sourceRoot":"","sources":["../../src/lib/local-workflows.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAG7B,KAAK,uBAAuB,EAC7B,MAAM,aAAa,CAAC;AAOrB,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;IACtD,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,4BAA4B,EAAE,CAAC;IACxC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,YAAY,EAAE,uBAAuB,EAAE,CAAC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AA4CD,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,GACT,MAAM,CAER;AAYD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,GACd,uBAAuB,GAAG,IAAI,CAkChC;AAED,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,GACjB,uBAAuB,EAAE,CAgB3B;AAED,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,GACT,uBAAuB,GAAG,IAAI,CAEhC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB,CAsMjF;AAED,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,IAAI,EAAE,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACrD,MAAM,CA2BR"}
|
|
@@ -5,18 +5,22 @@ import { isMarkdownFile } from "./util.js";
|
|
|
5
5
|
import { listFilesRecursive } from "./filesystem.js";
|
|
6
6
|
import { warnInterf } from "./logger.js";
|
|
7
7
|
import { readJsonFileUnchecked, readJsonFileWithSchema } from "./parse.js";
|
|
8
|
-
import { RuntimeContractTypeSchema, RuntimeStageAcceptanceSchema, WorkflowIdPattern, } from "./schema.js";
|
|
8
|
+
import { WorkflowCompilerApiSchema, RuntimeContractTypeSchema, RuntimeStageAcceptanceSchema, WorkflowStageZoneAccessSchema, WorkflowWorkspaceSchemaSchema, WorkflowIdPattern, } from "./schema.js";
|
|
9
|
+
import { BUILTIN_WORKSPACE_ZONE_IDS, writeWorkspaceSchemaFile, workspaceSchemaFilePath, } from "./workspace-schema.js";
|
|
9
10
|
const LocalWorkflowStageDefinitionSchema = z.object({
|
|
10
11
|
id: z.string().regex(WorkflowIdPattern),
|
|
11
12
|
label: z.string().min(1),
|
|
12
13
|
contract_type: RuntimeContractTypeSchema,
|
|
13
14
|
skill_dir: z.string().regex(WorkflowIdPattern).optional(),
|
|
14
15
|
description: z.string().min(1).optional(),
|
|
16
|
+
reads: WorkflowStageZoneAccessSchema,
|
|
17
|
+
writes: WorkflowStageZoneAccessSchema,
|
|
15
18
|
acceptance: RuntimeStageAcceptanceSchema.optional(),
|
|
16
19
|
});
|
|
17
20
|
const LocalWorkflowDefinitionSchema = z.object({
|
|
18
21
|
id: z.string().regex(WorkflowIdPattern),
|
|
19
22
|
type: z.literal("workspace"),
|
|
23
|
+
compiler_api: WorkflowCompilerApiSchema.optional(),
|
|
20
24
|
label: z.string().min(1),
|
|
21
25
|
hint: z.string().min(1),
|
|
22
26
|
extends: z.string().regex(WorkflowIdPattern).optional(),
|
|
@@ -62,15 +66,21 @@ export function loadWorkflowDefinitionFromDir(dirPath) {
|
|
|
62
66
|
const definition = readJsonFileWithSchema(workflowPath, "local workflow definition", LocalWorkflowDefinitionSchema);
|
|
63
67
|
if (!definition)
|
|
64
68
|
return null;
|
|
69
|
+
const schemaPath = workspaceSchemaFilePath(dirPath);
|
|
70
|
+
const workspaceSchema = readJsonFileWithSchema(schemaPath, "workspace schema", WorkflowWorkspaceSchemaSchema);
|
|
71
|
+
if (!workspaceSchema)
|
|
72
|
+
return null;
|
|
65
73
|
if (definition.type !== "workspace") {
|
|
66
74
|
warnInterf(`Warning: local workflow definition at ${workflowPath} has unexpected type "${definition.type}".`);
|
|
67
75
|
return null;
|
|
68
76
|
}
|
|
69
77
|
return {
|
|
70
78
|
...definition,
|
|
79
|
+
workspace_schema: workspaceSchema,
|
|
71
80
|
starter_docs: collectStarterDocs(dirPath),
|
|
72
81
|
directoryPath: dirPath,
|
|
73
82
|
workflowPath,
|
|
83
|
+
workspaceSchemaPath: schemaPath,
|
|
74
84
|
};
|
|
75
85
|
}
|
|
76
86
|
export function listLocalWorkflowDefinitions(sourcePath) {
|
|
@@ -99,6 +109,7 @@ export function isWorkflowId(value) {
|
|
|
99
109
|
}
|
|
100
110
|
export function validateWorkflowPackage(dirPath) {
|
|
101
111
|
const workflowPath = join(dirPath, "workflow.json");
|
|
112
|
+
const schemaPath = workspaceSchemaFilePath(dirPath);
|
|
102
113
|
if (!existsSync(workflowPath)) {
|
|
103
114
|
return {
|
|
104
115
|
ok: false,
|
|
@@ -128,6 +139,13 @@ export function validateWorkflowPackage(dirPath) {
|
|
|
128
139
|
}
|
|
129
140
|
const def = parsed.data;
|
|
130
141
|
const errors = [];
|
|
142
|
+
if (!existsSync(schemaPath)) {
|
|
143
|
+
errors.push("Missing workspace.schema.json.");
|
|
144
|
+
}
|
|
145
|
+
const workspaceSchema = readJsonFileWithSchema(schemaPath, "workspace schema", WorkflowWorkspaceSchemaSchema);
|
|
146
|
+
if (!workspaceSchema) {
|
|
147
|
+
errors.push("workspace.schema.json is missing or invalid.");
|
|
148
|
+
}
|
|
131
149
|
if (def.stages && def.stages.length > 0) {
|
|
132
150
|
const order = new Map([
|
|
133
151
|
["workspace-file-evidence", 0],
|
|
@@ -153,10 +171,118 @@ export function validateWorkflowPackage(dirPath) {
|
|
|
153
171
|
}
|
|
154
172
|
}
|
|
155
173
|
}
|
|
174
|
+
if (workspaceSchema) {
|
|
175
|
+
const fallbackStages = [
|
|
176
|
+
{
|
|
177
|
+
id: "summarize",
|
|
178
|
+
reads: [BUILTIN_WORKSPACE_ZONE_IDS.RAW, BUILTIN_WORKSPACE_ZONE_IDS.RUNTIME],
|
|
179
|
+
writes: [BUILTIN_WORKSPACE_ZONE_IDS.SUMMARIES],
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
id: "structure",
|
|
183
|
+
reads: [BUILTIN_WORKSPACE_ZONE_IDS.SUMMARIES, BUILTIN_WORKSPACE_ZONE_IDS.RUNTIME],
|
|
184
|
+
writes: [
|
|
185
|
+
BUILTIN_WORKSPACE_ZONE_IDS.KNOWLEDGE_ENTITIES,
|
|
186
|
+
BUILTIN_WORKSPACE_ZONE_IDS.KNOWLEDGE_CLAIMS,
|
|
187
|
+
BUILTIN_WORKSPACE_ZONE_IDS.KNOWLEDGE_INDEXES,
|
|
188
|
+
],
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
id: "shape",
|
|
192
|
+
reads: [
|
|
193
|
+
BUILTIN_WORKSPACE_ZONE_IDS.SUMMARIES,
|
|
194
|
+
BUILTIN_WORKSPACE_ZONE_IDS.KNOWLEDGE_ENTITIES,
|
|
195
|
+
BUILTIN_WORKSPACE_ZONE_IDS.KNOWLEDGE_CLAIMS,
|
|
196
|
+
BUILTIN_WORKSPACE_ZONE_IDS.KNOWLEDGE_INDEXES,
|
|
197
|
+
BUILTIN_WORKSPACE_ZONE_IDS.RUNTIME,
|
|
198
|
+
],
|
|
199
|
+
writes: [
|
|
200
|
+
BUILTIN_WORKSPACE_ZONE_IDS.KNOWLEDGE_INDEXES,
|
|
201
|
+
BUILTIN_WORKSPACE_ZONE_IDS.HOME,
|
|
202
|
+
],
|
|
203
|
+
},
|
|
204
|
+
];
|
|
205
|
+
const stages = def.stages ?? fallbackStages;
|
|
206
|
+
const stageIds = new Set(stages.map((stage) => stage.id));
|
|
207
|
+
const seenPaths = new Map();
|
|
208
|
+
const seenZoneIds = new Set();
|
|
209
|
+
const zoneById = new Map(workspaceSchema.zones.map((zone) => [zone.id, zone]));
|
|
210
|
+
const normalizedParts = (value) => value.replaceAll("\\", "/").split("/").filter(Boolean);
|
|
211
|
+
const hasOverlappingPath = (value, other) => {
|
|
212
|
+
const a = normalizedParts(value);
|
|
213
|
+
const b = normalizedParts(other);
|
|
214
|
+
const shorter = a.length <= b.length ? a : b;
|
|
215
|
+
const longer = a.length <= b.length ? b : a;
|
|
216
|
+
return shorter.every((part, index) => longer[index] === part);
|
|
217
|
+
};
|
|
218
|
+
for (const zone of workspaceSchema.zones) {
|
|
219
|
+
if (seenZoneIds.has(zone.id)) {
|
|
220
|
+
errors.push(`workspace.schema.json repeats zone id "${zone.id}".`);
|
|
221
|
+
}
|
|
222
|
+
seenZoneIds.add(zone.id);
|
|
223
|
+
const existingPathOwner = seenPaths.get(zone.path);
|
|
224
|
+
if (existingPathOwner) {
|
|
225
|
+
errors.push(`workspace.schema.json repeats zone path "${zone.path}".`);
|
|
226
|
+
}
|
|
227
|
+
for (const [existingPath, existingZoneId] of seenPaths.entries()) {
|
|
228
|
+
if (existingPath === zone.path)
|
|
229
|
+
continue;
|
|
230
|
+
if (hasOverlappingPath(zone.path, existingPath)) {
|
|
231
|
+
errors.push(`workspace.schema.json zones "${zone.id}" and "${existingZoneId}" overlap on path "${zone.path}" / "${existingPath}".`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
seenPaths.set(zone.path, zone.id);
|
|
235
|
+
for (const owner of zone.owned_by) {
|
|
236
|
+
if (!stageIds.has(owner)) {
|
|
237
|
+
errors.push(`workspace.schema.json references unknown stage "${owner}" for zone "${zone.path}".`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
for (const stage of stages) {
|
|
242
|
+
for (const zoneId of stage.reads) {
|
|
243
|
+
if (!zoneById.has(zoneId)) {
|
|
244
|
+
errors.push(`Stage "${stage.id}" reads unknown zone "${zoneId}".`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
for (const zoneId of stage.writes) {
|
|
248
|
+
const zone = zoneById.get(zoneId);
|
|
249
|
+
if (!zone) {
|
|
250
|
+
errors.push(`Stage "${stage.id}" writes unknown zone "${zoneId}".`);
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
if (!zone.owned_by.includes(stage.id)) {
|
|
254
|
+
errors.push(`Stage "${stage.id}" writes zone "${zoneId}" but that zone is not owned by the stage in workspace.schema.json.`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
const requiredZones = [
|
|
259
|
+
{ id: BUILTIN_WORKSPACE_ZONE_IDS.RAW, path: "raw", kind: "directory" },
|
|
260
|
+
{ id: BUILTIN_WORKSPACE_ZONE_IDS.SUMMARIES, path: "summaries", kind: "directory" },
|
|
261
|
+
{ id: BUILTIN_WORKSPACE_ZONE_IDS.KNOWLEDGE_ENTITIES, path: "knowledge/entities", kind: "directory" },
|
|
262
|
+
{ id: BUILTIN_WORKSPACE_ZONE_IDS.KNOWLEDGE_CLAIMS, path: "knowledge/claims", kind: "directory" },
|
|
263
|
+
{ id: BUILTIN_WORKSPACE_ZONE_IDS.KNOWLEDGE_INDEXES, path: "knowledge/indexes", kind: "directory" },
|
|
264
|
+
{ id: BUILTIN_WORKSPACE_ZONE_IDS.HOME, path: "home.md", kind: "file" },
|
|
265
|
+
{ id: BUILTIN_WORKSPACE_ZONE_IDS.RUNTIME, path: ".interf", kind: "runtime" },
|
|
266
|
+
];
|
|
267
|
+
for (const requiredZone of requiredZones) {
|
|
268
|
+
const match = zoneById.get(requiredZone.id);
|
|
269
|
+
if (!match) {
|
|
270
|
+
errors.push(`workspace.schema.json is missing required zone "${requiredZone.id}".`);
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
if (match.path !== requiredZone.path) {
|
|
274
|
+
errors.push(`workspace.schema.json zone "${requiredZone.id}" should point at "${requiredZone.path}".`);
|
|
275
|
+
}
|
|
276
|
+
if (match.kind !== requiredZone.kind) {
|
|
277
|
+
errors.push(`workspace.schema.json zone "${requiredZone.path}" should be kind "${requiredZone.kind}".`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
156
281
|
const stageDirs = listFilesRecursive(join(dirPath, "compile", "stages"), (filePath) => basename(filePath) === "SKILL.md");
|
|
157
282
|
const counts = {
|
|
158
283
|
starter_docs: collectStarterDocs(dirPath).length,
|
|
159
284
|
compile_stage_docs: stageDirs.length,
|
|
285
|
+
workspace_zones: workspaceSchema?.zones.length ?? 0,
|
|
160
286
|
};
|
|
161
287
|
return {
|
|
162
288
|
ok: errors.length === 0,
|
|
@@ -168,7 +294,22 @@ export function validateWorkflowPackage(dirPath) {
|
|
|
168
294
|
export function writeLocalWorkflowDefinition(sourcePath, id, workflowJson, docs) {
|
|
169
295
|
const root = workflowDefinitionPath(sourcePath, id);
|
|
170
296
|
mkdirSync(root, { recursive: true });
|
|
171
|
-
|
|
297
|
+
const normalizedWorkflowJson = {
|
|
298
|
+
compiler_api: {
|
|
299
|
+
kind: "workspace",
|
|
300
|
+
version: 1,
|
|
301
|
+
},
|
|
302
|
+
...workflowJson,
|
|
303
|
+
};
|
|
304
|
+
writeFileSync(join(root, "workflow.json"), JSON.stringify(normalizedWorkflowJson, null, 2) + "\n");
|
|
305
|
+
const stages = Array.isArray(normalizedWorkflowJson.stages)
|
|
306
|
+
? (normalizedWorkflowJson.stages)
|
|
307
|
+
: [
|
|
308
|
+
{ id: "summarize", contract_type: "workspace-file-evidence" },
|
|
309
|
+
{ id: "structure", contract_type: "workspace-knowledge-structure" },
|
|
310
|
+
{ id: "shape", contract_type: "workspace-query-shape" },
|
|
311
|
+
];
|
|
312
|
+
writeWorkspaceSchemaFile(root, stages, `${String(normalizedWorkflowJson.label ?? id)} workspace schema`);
|
|
172
313
|
for (const doc of docs) {
|
|
173
314
|
const targetPath = join(root, doc.relativePath);
|
|
174
315
|
mkdirSync(dirname(targetPath), { recursive: true });
|