@interf/compiler 0.2.5 → 0.3.1
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 +192 -187
- package/dist/bin.js +3 -3
- package/dist/bin.js.map +1 -1
- package/dist/commands/compile.d.ts +1 -0
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +45 -138
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/create-workflow-wizard.d.ts +4 -25
- package/dist/commands/create-workflow-wizard.d.ts.map +1 -1
- package/dist/commands/create-workflow-wizard.js +46 -222
- package/dist/commands/create-workflow-wizard.js.map +1 -1
- package/dist/commands/create.d.ts +2 -11
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +78 -477
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/default.d.ts.map +1 -1
- package/dist/commands/default.js +27 -43
- package/dist/commands/default.js.map +1 -1
- package/dist/commands/doctor.js +2 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/executor-flow.d.ts +9 -0
- package/dist/commands/executor-flow.d.ts.map +1 -0
- package/dist/commands/executor-flow.js +55 -0
- package/dist/commands/executor-flow.js.map +1 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +320 -321
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +12 -22
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/reset.d.ts.map +1 -1
- package/dist/commands/reset.js +27 -124
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/source-config-wizard.d.ts +10 -11
- package/dist/commands/source-config-wizard.d.ts.map +1 -1
- package/dist/commands/source-config-wizard.js +100 -97
- package/dist/commands/source-config-wizard.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +60 -56
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/test-flow.d.ts +21 -0
- package/dist/commands/test-flow.d.ts.map +1 -0
- package/dist/commands/test-flow.js +106 -0
- package/dist/commands/test-flow.js.map +1 -0
- package/dist/commands/test.d.ts +4 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +131 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +63 -98
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/workspace-flow.d.ts +21 -0
- package/dist/commands/workspace-flow.d.ts.map +1 -0
- package/dist/commands/workspace-flow.js +90 -0
- package/dist/commands/workspace-flow.js.map +1 -0
- package/dist/index.d.ts +8 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -7
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-constants.js +1 -1
- package/dist/lib/agent-constants.js.map +1 -1
- package/dist/lib/agent-detection.js +4 -4
- package/dist/lib/agent-detection.js.map +1 -1
- package/dist/lib/agent-skills.js +6 -6
- package/dist/lib/agent-skills.js.map +1 -1
- package/dist/lib/benchmark-execution.d.ts.map +1 -1
- package/dist/lib/benchmark-execution.js +32 -19
- package/dist/lib/benchmark-execution.js.map +1 -1
- package/dist/lib/benchmark-sandbox.d.ts +10 -0
- package/dist/lib/benchmark-sandbox.d.ts.map +1 -0
- package/dist/lib/benchmark-sandbox.js +75 -0
- package/dist/lib/benchmark-sandbox.js.map +1 -0
- package/dist/lib/benchmark-targets.d.ts +4 -4
- package/dist/lib/benchmark-targets.d.ts.map +1 -1
- package/dist/lib/benchmark-targets.js +20 -54
- package/dist/lib/benchmark-targets.js.map +1 -1
- package/dist/lib/benchmark-types.d.ts +2 -3
- package/dist/lib/benchmark-types.d.ts.map +1 -1
- package/dist/lib/benchmark.d.ts +1 -1
- package/dist/lib/benchmark.d.ts.map +1 -1
- package/dist/lib/benchmark.js +1 -1
- package/dist/lib/benchmark.js.map +1 -1
- package/dist/lib/config.d.ts +1 -2
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +2 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/discovery.d.ts +1 -1
- package/dist/lib/discovery.d.ts.map +1 -1
- package/dist/lib/discovery.js +7 -2
- package/dist/lib/discovery.js.map +1 -1
- package/dist/lib/eval-packs.d.ts +6 -52
- package/dist/lib/eval-packs.d.ts.map +1 -1
- package/dist/lib/eval-packs.js +11 -39
- package/dist/lib/eval-packs.js.map +1 -1
- package/dist/lib/interf-bootstrap.d.ts +3 -5
- package/dist/lib/interf-bootstrap.d.ts.map +1 -1
- package/dist/lib/interf-bootstrap.js +10 -57
- package/dist/lib/interf-bootstrap.js.map +1 -1
- package/dist/lib/interf-detect.d.ts +13 -11
- package/dist/lib/interf-detect.d.ts.map +1 -1
- package/dist/lib/interf-detect.js +59 -45
- package/dist/lib/interf-detect.js.map +1 -1
- package/dist/lib/interf-scaffold.d.ts +2 -5
- package/dist/lib/interf-scaffold.d.ts.map +1 -1
- package/dist/lib/interf-scaffold.js +99 -235
- package/dist/lib/interf-scaffold.js.map +1 -1
- package/dist/lib/interf-workflow-package.d.ts +1 -2
- package/dist/lib/interf-workflow-package.d.ts.map +1 -1
- package/dist/lib/interf-workflow-package.js +99 -90
- package/dist/lib/interf-workflow-package.js.map +1 -1
- package/dist/lib/interf.d.ts +4 -5
- package/dist/lib/interf.d.ts.map +1 -1
- package/dist/lib/interf.js +3 -6
- package/dist/lib/interf.js.map +1 -1
- package/dist/lib/local-workflows.d.ts +9 -8
- package/dist/lib/local-workflows.d.ts.map +1 -1
- package/dist/lib/local-workflows.js +56 -92
- package/dist/lib/local-workflows.js.map +1 -1
- package/dist/lib/obsidian.d.ts +1 -3
- package/dist/lib/obsidian.d.ts.map +1 -1
- package/dist/lib/obsidian.js +10 -81
- package/dist/lib/obsidian.js.map +1 -1
- package/dist/lib/registry.d.ts +6 -17
- package/dist/lib/registry.d.ts.map +1 -1
- package/dist/lib/registry.js +36 -50
- package/dist/lib/registry.js.map +1 -1
- package/dist/lib/runtime-contracts.d.ts +4 -3
- package/dist/lib/runtime-contracts.d.ts.map +1 -1
- package/dist/lib/runtime-contracts.js +125 -9
- package/dist/lib/runtime-contracts.js.map +1 -1
- package/dist/lib/runtime-reconcile.d.ts +3 -5
- package/dist/lib/runtime-reconcile.d.ts.map +1 -1
- package/dist/lib/runtime-reconcile.js +70 -167
- package/dist/lib/runtime-reconcile.js.map +1 -1
- package/dist/lib/runtime-runs.d.ts.map +1 -1
- package/dist/lib/runtime-runs.js +61 -57
- package/dist/lib/runtime-runs.js.map +1 -1
- package/dist/lib/runtime-types.d.ts +16 -6
- package/dist/lib/runtime-types.d.ts.map +1 -1
- package/dist/lib/runtime.d.ts +2 -2
- package/dist/lib/runtime.d.ts.map +1 -1
- package/dist/lib/runtime.js +1 -1
- package/dist/lib/runtime.js.map +1 -1
- package/dist/lib/schema.d.ts +69 -311
- package/dist/lib/schema.d.ts.map +1 -1
- package/dist/lib/schema.js +49 -210
- package/dist/lib/schema.js.map +1 -1
- package/dist/lib/source-config.d.ts +8 -7
- package/dist/lib/source-config.d.ts.map +1 -1
- package/dist/lib/source-config.js +59 -63
- package/dist/lib/source-config.js.map +1 -1
- package/dist/lib/state-artifacts.d.ts +5 -11
- package/dist/lib/state-artifacts.d.ts.map +1 -1
- package/dist/lib/state-artifacts.js +8 -18
- package/dist/lib/state-artifacts.js.map +1 -1
- package/dist/lib/state-health.d.ts +4 -8
- package/dist/lib/state-health.d.ts.map +1 -1
- package/dist/lib/state-health.js +52 -233
- package/dist/lib/state-health.js.map +1 -1
- package/dist/lib/state-io.d.ts +7 -12
- package/dist/lib/state-io.d.ts.map +1 -1
- package/dist/lib/state-io.js +32 -93
- package/dist/lib/state-io.js.map +1 -1
- package/dist/lib/state-view.d.ts +4 -6
- package/dist/lib/state-view.d.ts.map +1 -1
- package/dist/lib/state-view.js +62 -101
- package/dist/lib/state-view.js.map +1 -1
- package/dist/lib/state.d.ts +5 -5
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +4 -4
- package/dist/lib/state.js.map +1 -1
- package/dist/lib/summarize-plan.d.ts +2 -2
- package/dist/lib/summarize-plan.d.ts.map +1 -1
- package/dist/lib/summarize-plan.js +13 -13
- package/dist/lib/summarize-plan.js.map +1 -1
- package/dist/lib/{validate-kb.d.ts → validate-workspace.d.ts} +49 -8
- package/dist/lib/validate-workspace.d.ts.map +1 -0
- package/dist/lib/validate-workspace.js +398 -0
- package/dist/lib/validate-workspace.js.map +1 -0
- package/dist/lib/validate.d.ts +5 -7
- package/dist/lib/validate.d.ts.map +1 -1
- package/dist/lib/validate.js +22 -20
- package/dist/lib/validate.js.map +1 -1
- package/dist/lib/workflow-definitions.d.ts +14 -50
- package/dist/lib/workflow-definitions.d.ts.map +1 -1
- package/dist/lib/workflow-definitions.js +100 -353
- package/dist/lib/workflow-definitions.js.map +1 -1
- package/dist/lib/workflow-helpers.d.ts +3 -4
- package/dist/lib/workflow-helpers.d.ts.map +1 -1
- package/dist/lib/workflow-helpers.js +17 -49
- package/dist/lib/workflow-helpers.js.map +1 -1
- package/dist/lib/workflow-stage-runner.d.ts +1 -2
- package/dist/lib/workflow-stage-runner.d.ts.map +1 -1
- package/dist/lib/workflow-stage-runner.js +4 -6
- package/dist/lib/workflow-stage-runner.js.map +1 -1
- package/dist/lib/workflow-starter-docs.d.ts +3 -5
- package/dist/lib/workflow-starter-docs.d.ts.map +1 -1
- package/dist/lib/workflow-starter-docs.js +2 -17
- package/dist/lib/workflow-starter-docs.js.map +1 -1
- package/dist/lib/workflows.d.ts +9 -14
- package/dist/lib/workflows.d.ts.map +1 -1
- package/dist/lib/workflows.js +15 -30
- package/dist/lib/workflows.js.map +1 -1
- package/dist/lib/workspace-compile.d.ts +51 -0
- package/dist/lib/workspace-compile.d.ts.map +1 -0
- package/dist/lib/workspace-compile.js +397 -0
- package/dist/lib/workspace-compile.js.map +1 -0
- package/package.json +9 -9
- package/skills/benchmark/SKILL.md +20 -27
- package/skills/workflow/create/SKILL.md +10 -14
- package/skills/workspace/shape/SKILL.md +15 -0
- package/skills/workspace/structure/SKILL.md +15 -0
- package/skills/workspace/summarize/SKILL.md +15 -0
- package/templates/workspace/README.md +23 -0
- package/templates/workspace/interfignore +2 -0
- package/dist/commands/benchmark.d.ts +0 -3
- package/dist/commands/benchmark.d.ts.map +0 -1
- package/dist/commands/benchmark.js +0 -374
- package/dist/commands/benchmark.js.map +0 -1
- package/dist/lib/bundled-templates.d.ts +0 -5
- package/dist/lib/bundled-templates.d.ts.map +0 -1
- package/dist/lib/bundled-templates.js +0 -23
- package/dist/lib/bundled-templates.js.map +0 -1
- package/dist/lib/interf-compile-plan.d.ts +0 -12
- package/dist/lib/interf-compile-plan.d.ts.map +0 -1
- package/dist/lib/interf-compile-plan.js +0 -143
- package/dist/lib/interf-compile-plan.js.map +0 -1
- package/dist/lib/validate-interface.d.ts +0 -79
- package/dist/lib/validate-interface.d.ts.map +0 -1
- package/dist/lib/validate-interface.js +0 -535
- package/dist/lib/validate-interface.js.map +0 -1
- package/dist/lib/validate-kb.d.ts.map +0 -1
- package/dist/lib/validate-kb.js +0 -252
- package/dist/lib/validate-kb.js.map +0 -1
- package/dist/lib/workflows-interface-contracts.d.ts +0 -24
- package/dist/lib/workflows-interface-contracts.d.ts.map +0 -1
- package/dist/lib/workflows-interface-contracts.js +0 -304
- package/dist/lib/workflows-interface-contracts.js.map +0 -1
- package/dist/lib/workflows-interface.d.ts +0 -72
- package/dist/lib/workflows-interface.d.ts.map +0 -1
- package/dist/lib/workflows-interface.js +0 -377
- package/dist/lib/workflows-interface.js.map +0 -1
- package/dist/lib/workflows-kb.d.ts +0 -50
- package/dist/lib/workflows-kb.d.ts.map +0 -1
- package/dist/lib/workflows-kb.js +0 -306
- package/dist/lib/workflows-kb.js.map +0 -1
- package/skills/interface/analyze/SKILL.md +0 -191
- package/skills/interface/compile/SKILL.md +0 -152
- package/skills/interface/compile/references/output-format.md +0 -48
- package/skills/interface/create/SKILL.md +0 -87
- package/skills/interface/create/references/compile-plan-format.md +0 -109
- package/skills/interface/create/references/workflows.md +0 -35
- package/skills/interface/query/SKILL.md +0 -48
- package/skills/interface/retrieve/SKILL.md +0 -133
- package/skills/knowledge-base/compile/SKILL.md +0 -196
- package/skills/knowledge-base/compile/references/output-format.md +0 -48
- package/skills/knowledge-base/compile/references/stage-claims.md +0 -60
- package/skills/knowledge-base/compile/references/stage-entities.md +0 -46
- package/skills/knowledge-base/query/SKILL.md +0 -45
- package/skills/knowledge-base/summarize/SKILL.md +0 -152
- package/templates/interface/README.md +0 -159
- package/templates/interface/interfaces.md +0 -102
- package/templates/knowledge-base/README.md +0 -137
- package/templates/knowledge-base/interfignore +0 -19
- package/templates/knowledge-base/registry.md +0 -118
- package/templates/workflow-package/README.md +0 -16
- package/templates/workflow-package/create/SKILL.md +0 -8
- package/templates/workflow-package/interface-query/SKILL.md +0 -29
- package/templates/workflow-package/interface-stage/SKILL.md +0 -13
- package/templates/workflow-package/knowledge-base-query/SKILL.md +0 -36
- package/templates/workflow-package/knowledge-base-stage/SKILL.md +0 -13
- package/templates/workflow-starters/interface/interf/README.md +0 -13
- package/templates/workflow-starters/interface/interf/create/SKILL.md +0 -15
- package/templates/workflow-starters/knowledge-base/interf/README.md +0 -13
- package/templates/workflow-starters/knowledge-base/karpathy/README.md +0 -13
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { countFilesRecursive } from "./filesystem.js";
|
|
4
|
+
import { readInterfConfig, refreshWorkspaceBootstrapGuidance, resolveSourceFolderPath, } from "./interf.js";
|
|
5
|
+
import { findSourceWorkspaceConfig, loadSourceFolderConfig } from "./source-config.js";
|
|
6
|
+
import { buildSummarizePlan, writeSummarizePlan } from "./summarize-plan.js";
|
|
7
|
+
import { reconcileWorkspaceShapeRun, reconcileWorkspaceStructureRun, reconcileWorkspaceSummarizeRun, } from "./runtime-reconcile.js";
|
|
8
|
+
import { loadState, refreshWorkspaceArtifacts, } from "./state.js";
|
|
9
|
+
import { buildWorkspaceShapeContract, buildWorkspaceStructureContract, buildWorkspaceSummarizeContract, validateStageContractAcceptance, } from "./runtime.js";
|
|
10
|
+
import { readJsonFileUnchecked } from "./parse.js";
|
|
11
|
+
import { formatWorkspaceWorkflowStageStep, getWorkflowStagePolicyNotes, getWorkspaceWorkflow, resolveWorkspaceWorkflowFromConfig, } from "./workflow-definitions.js";
|
|
12
|
+
import { validateWorkspaceCompile, validateWorkspaceStructure, validateWorkspaceSummarize, } from "./validate.js";
|
|
13
|
+
import { buildLocalSkillContractExtension, buildStageInstructions, bundledSkillForContractType, reportBlankLine, reportLine, reportValidationFailure, resolveStageAcceptance, workflowCompileStageDirectory, } from "./workflow-helpers.js";
|
|
14
|
+
import { executeValidatedStage, executeValidatedSummarizeStage, findStageByContractType, } from "./workflow-stage-runner.js";
|
|
15
|
+
const SHAPE_INPUT_RELATIVE_PATH = ".interf/shape-input.json";
|
|
16
|
+
export function resolveWorkspaceContext(workspacePath) {
|
|
17
|
+
const config = readInterfConfig(workspacePath);
|
|
18
|
+
const workflowId = resolveWorkspaceWorkflowFromConfig(config);
|
|
19
|
+
return {
|
|
20
|
+
workspaceName: config?.name ?? "workspace",
|
|
21
|
+
sourcePath: resolveSourceFolderPath(workspacePath, config),
|
|
22
|
+
workflowId,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function workspaceExecutionStages(workflowId, workspacePath) {
|
|
26
|
+
return getWorkspaceWorkflow(workflowId, { sourcePath: resolveSourceFolderPath(workspacePath) })
|
|
27
|
+
.stages;
|
|
28
|
+
}
|
|
29
|
+
function readWorkspaceInventoryTotal(workspacePath) {
|
|
30
|
+
const inventory = readJsonFileUnchecked(join(workspacePath, ".interf", "inventory.json"), "workspace inventory");
|
|
31
|
+
if (!inventory)
|
|
32
|
+
return 0;
|
|
33
|
+
if (typeof inventory.total === "number")
|
|
34
|
+
return inventory.total;
|
|
35
|
+
if (typeof inventory.summary_total === "number")
|
|
36
|
+
return inventory.summary_total;
|
|
37
|
+
if (Array.isArray(inventory.entries))
|
|
38
|
+
return inventory.entries.length;
|
|
39
|
+
if (Array.isArray(inventory.summaries))
|
|
40
|
+
return inventory.summaries.length;
|
|
41
|
+
if (Array.isArray(inventory.files))
|
|
42
|
+
return inventory.files.length;
|
|
43
|
+
if (Array.isArray(inventory.items))
|
|
44
|
+
return inventory.items.length;
|
|
45
|
+
return 0;
|
|
46
|
+
}
|
|
47
|
+
function isWorkspaceSummarizeStageComplete(workspacePath, expectedSummaryTotal) {
|
|
48
|
+
const validation = validateWorkspaceSummarize(workspacePath);
|
|
49
|
+
const acceptance = validateStageContractAcceptance(workspacePath);
|
|
50
|
+
const state = loadState(workspacePath);
|
|
51
|
+
const inventoryTotal = readWorkspaceInventoryTotal(workspacePath);
|
|
52
|
+
return Boolean(validation.ok &&
|
|
53
|
+
acceptance.ok &&
|
|
54
|
+
state?.inventory_complete === true &&
|
|
55
|
+
typeof state.last_summarize === "string" &&
|
|
56
|
+
state.last_summarize.length > 0 &&
|
|
57
|
+
(state.summarized ?? 0) >= expectedSummaryTotal &&
|
|
58
|
+
inventoryTotal >= expectedSummaryTotal);
|
|
59
|
+
}
|
|
60
|
+
function isWorkspaceStructureStageComplete(workspacePath, summaryCount) {
|
|
61
|
+
const validation = validateWorkspaceStructure(workspacePath);
|
|
62
|
+
const acceptance = validateStageContractAcceptance(workspacePath);
|
|
63
|
+
const state = loadState(workspacePath);
|
|
64
|
+
return Boolean(validation.ok &&
|
|
65
|
+
acceptance.ok &&
|
|
66
|
+
state?.inventory_complete === true &&
|
|
67
|
+
typeof state.last_structure === "string" &&
|
|
68
|
+
state.last_structure.length > 0 &&
|
|
69
|
+
(state.structured ?? 0) >= summaryCount);
|
|
70
|
+
}
|
|
71
|
+
function isWorkspaceShapeStageComplete(workspacePath, summaryCount) {
|
|
72
|
+
const validation = validateWorkspaceCompile(workspacePath);
|
|
73
|
+
const acceptance = validateStageContractAcceptance(workspacePath);
|
|
74
|
+
const state = loadState(workspacePath);
|
|
75
|
+
return Boolean(validation.ok &&
|
|
76
|
+
acceptance.ok &&
|
|
77
|
+
state?.inventory_complete === true &&
|
|
78
|
+
typeof state.last_shape === "string" &&
|
|
79
|
+
state.last_shape.length > 0 &&
|
|
80
|
+
(state.shaped ?? state.compiled ?? 0) >= summaryCount &&
|
|
81
|
+
(state.compiled ?? 0) >= summaryCount);
|
|
82
|
+
}
|
|
83
|
+
function writeWorkspaceShapeInput(workspacePath, workspaceName, sourcePath) {
|
|
84
|
+
const workspaceConfig = readInterfConfig(workspacePath);
|
|
85
|
+
const sourceConfig = loadSourceFolderConfig(sourcePath);
|
|
86
|
+
const sourceWorkspace = findSourceWorkspaceConfig(sourceConfig, workspaceName);
|
|
87
|
+
const questions = (sourceWorkspace?.checks ?? []).map((check, index) => ({
|
|
88
|
+
id: check.id ?? `check-${index + 1}`,
|
|
89
|
+
question: check.question,
|
|
90
|
+
}));
|
|
91
|
+
mkdirSync(join(workspacePath, ".interf"), { recursive: true });
|
|
92
|
+
writeFileSync(join(workspacePath, SHAPE_INPUT_RELATIVE_PATH), JSON.stringify({
|
|
93
|
+
kind: "workspace-shape-input",
|
|
94
|
+
version: 1,
|
|
95
|
+
generated_at: new Date().toISOString(),
|
|
96
|
+
target_name: workspaceName,
|
|
97
|
+
about: sourceWorkspace?.about ?? workspaceConfig?.about ?? null,
|
|
98
|
+
question_count: questions.length,
|
|
99
|
+
questions,
|
|
100
|
+
}, null, 2) + "\n");
|
|
101
|
+
return SHAPE_INPUT_RELATIVE_PATH;
|
|
102
|
+
}
|
|
103
|
+
export function buildWorkspaceCompileContract(workspacePath, workflowId, summaryCount, instructions, stageId = "shape", stageSkillDir = "shape", shapeInputPath = SHAPE_INPUT_RELATIVE_PATH) {
|
|
104
|
+
const config = readInterfConfig(workspacePath);
|
|
105
|
+
const sourcePath = resolveSourceFolderPath(workspacePath, config);
|
|
106
|
+
const acceptance = resolveStageAcceptance(workflowId, stageId, sourcePath);
|
|
107
|
+
const localSkills = buildLocalSkillContractExtension(workspacePath, [workflowCompileStageDirectory(stageSkillDir)], "Use them to refine workspace shaping, navigation, and retrieval routes.");
|
|
108
|
+
return buildWorkspaceShapeContract({
|
|
109
|
+
workspaceName: config?.name ?? "workspace",
|
|
110
|
+
summaryCount,
|
|
111
|
+
shapeInputPath,
|
|
112
|
+
workflowNotes: getWorkflowStagePolicyNotes(workflowId, stageId, sourcePath),
|
|
113
|
+
localSkillDocs: localSkills.reads,
|
|
114
|
+
instructions,
|
|
115
|
+
acceptance,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
function buildWorkspaceStructureStageContract(workspacePath, workflowId, summaryCount, instructions, stageId = "structure", stageSkillDir = "structure") {
|
|
119
|
+
const config = readInterfConfig(workspacePath);
|
|
120
|
+
const sourcePath = resolveSourceFolderPath(workspacePath, config);
|
|
121
|
+
const acceptance = resolveStageAcceptance(workflowId, stageId, sourcePath);
|
|
122
|
+
const localSkills = buildLocalSkillContractExtension(workspacePath, [workflowCompileStageDirectory(stageSkillDir)], "Use them to refine workspace structure, taxonomy, ontology, entity extraction, and claim extraction.");
|
|
123
|
+
return buildWorkspaceStructureContract({
|
|
124
|
+
workspaceName: config?.name ?? "workspace",
|
|
125
|
+
summaryCount,
|
|
126
|
+
workflowNotes: getWorkflowStagePolicyNotes(workflowId, stageId, sourcePath),
|
|
127
|
+
localSkillDocs: localSkills.reads,
|
|
128
|
+
instructions,
|
|
129
|
+
acceptance,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
export async function runWorkspaceSummarize(options) {
|
|
133
|
+
const context = resolveWorkspaceContext(options.workspacePath);
|
|
134
|
+
const sourcePath = options.sourcePath ?? context.sourcePath;
|
|
135
|
+
const workflowId = context.workflowId;
|
|
136
|
+
const stageDefinition = options.stageDefinition ?? findStageByContractType(workspaceExecutionStages(workflowId, options.workspacePath), "workspace-file-evidence");
|
|
137
|
+
const stageStatusLabel = stageDefinition.label.toLowerCase();
|
|
138
|
+
const plan = buildSummarizePlan(sourcePath, options.workspacePath, options.fullPass ? "all" : "pending");
|
|
139
|
+
const expectedSummaryTotal = plan.summaryCount + plan.targetCount;
|
|
140
|
+
const planPath = writeSummarizePlan(options.workspacePath, plan);
|
|
141
|
+
const localSkills = buildLocalSkillContractExtension(options.workspacePath, [workflowCompileStageDirectory(stageDefinition.skillDir)], "Use them to refine summary structure, evidence grouping, and summarization heuristics.");
|
|
142
|
+
const instructions = buildStageInstructions(bundledSkillForContractType(stageDefinition.contractType), localSkills);
|
|
143
|
+
if (options.reportSummary !== false) {
|
|
144
|
+
reportLine(options.reporter, `${plan.sourceCount} source files, ${plan.summaryCount} summarized, ${plan.targetCount} to summarize`);
|
|
145
|
+
}
|
|
146
|
+
if (plan.targetCount === 0) {
|
|
147
|
+
refreshWorkspaceArtifacts(options.workspacePath, { ensureViewSpec: true });
|
|
148
|
+
const validation = validateWorkspaceSummarize(options.workspacePath);
|
|
149
|
+
if (options.reportStep !== false) {
|
|
150
|
+
reportLine(options.reporter, `${formatWorkspaceWorkflowStageStep(workflowId, stageDefinition.id, { sourcePath })} skipped (no work required)`);
|
|
151
|
+
}
|
|
152
|
+
if (!validation.ok) {
|
|
153
|
+
reportValidationFailure(options.reporter, validation.summary);
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
ok: validation.ok,
|
|
157
|
+
code: validation.ok ? 0 : 1,
|
|
158
|
+
skipped: true,
|
|
159
|
+
plan,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
if (options.reportStep !== false) {
|
|
163
|
+
reportLine(options.reporter, `${formatWorkspaceWorkflowStageStep(workflowId, stageDefinition.id, { sourcePath })} (${plan.targetCount} files)`);
|
|
164
|
+
}
|
|
165
|
+
const stageResult = await executeValidatedSummarizeStage({
|
|
166
|
+
executor: options.executor,
|
|
167
|
+
workspacePath: options.workspacePath,
|
|
168
|
+
targetName: context.workspaceName,
|
|
169
|
+
workflow: workflowId,
|
|
170
|
+
workflowSourcePath: sourcePath,
|
|
171
|
+
stageDefinition,
|
|
172
|
+
instructions,
|
|
173
|
+
summary: `Preparing ${stageDefinition.label.toLowerCase()} for ${plan.targetCount} source files.`,
|
|
174
|
+
contract: buildWorkspaceSummarizeContract({
|
|
175
|
+
workspaceName: context.workspaceName,
|
|
176
|
+
targetCount: plan.targetCount,
|
|
177
|
+
expectedSummaryTotal,
|
|
178
|
+
sourcePath,
|
|
179
|
+
planPath,
|
|
180
|
+
workflowNotes: getWorkflowStagePolicyNotes(workflowId, stageDefinition.id, sourcePath),
|
|
181
|
+
localSkillDocs: localSkills.reads,
|
|
182
|
+
instructions,
|
|
183
|
+
acceptance: resolveStageAcceptance(workflowId, stageDefinition.id, sourcePath),
|
|
184
|
+
}),
|
|
185
|
+
statusLines: [
|
|
186
|
+
`Emit exactly one startup line: STATUS: loaded ${stageStatusLabel} plan ${plan.targetCount} files.`,
|
|
187
|
+
"The CLI owns live file-count progress. Do not emit per-file progress.",
|
|
188
|
+
"If `.interf/inventory.json` already exists, overwrite it completely instead of patching prior contents.",
|
|
189
|
+
"Emit STATUS: batch committed after a completed batch has been merged into summaries/ and inventory.",
|
|
190
|
+
`Emit DONE: ${stageStatusLabel} complete ${plan.targetCount}/${plan.targetCount} when finished.`,
|
|
191
|
+
],
|
|
192
|
+
reporter: options.reporter,
|
|
193
|
+
completionCheck: () => isWorkspaceSummarizeStageComplete(options.workspacePath, expectedSummaryTotal),
|
|
194
|
+
reconcile: () => reconcileWorkspaceSummarizeRun(options.workspacePath, expectedSummaryTotal),
|
|
195
|
+
refreshArtifacts: () => refreshWorkspaceArtifacts(options.workspacePath, { ensureViewSpec: true }),
|
|
196
|
+
validate: () => validateWorkspaceSummarize(options.workspacePath),
|
|
197
|
+
startingSummaryCount: plan.summaryCount,
|
|
198
|
+
targetCount: plan.targetCount,
|
|
199
|
+
});
|
|
200
|
+
if (!stageResult.ok) {
|
|
201
|
+
return {
|
|
202
|
+
ok: false,
|
|
203
|
+
code: stageResult.code,
|
|
204
|
+
skipped: false,
|
|
205
|
+
plan,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
ok: true,
|
|
210
|
+
code: 0,
|
|
211
|
+
skipped: false,
|
|
212
|
+
plan,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
async function runWorkspaceStructure(options) {
|
|
216
|
+
const workspaceConfig = readInterfConfig(options.workspacePath);
|
|
217
|
+
const workspaceName = workspaceConfig?.name ?? "workspace";
|
|
218
|
+
const workflowId = resolveWorkspaceWorkflowFromConfig(workspaceConfig);
|
|
219
|
+
const sourcePath = options.sourcePath ?? resolveSourceFolderPath(options.workspacePath, workspaceConfig);
|
|
220
|
+
const stageDefinition = options.stageDefinition ?? findStageByContractType(workspaceExecutionStages(workflowId, options.workspacePath), "workspace-knowledge-structure");
|
|
221
|
+
const stageStatusLabel = stageDefinition.label.toLowerCase();
|
|
222
|
+
const summaryCount = countFilesRecursive(join(options.workspacePath, "summaries"));
|
|
223
|
+
const localSkills = buildLocalSkillContractExtension(options.workspacePath, [workflowCompileStageDirectory(stageDefinition.skillDir)], "Use them to refine workspace structure, taxonomy, ontology, entity extraction, and claim extraction.");
|
|
224
|
+
const instructions = buildStageInstructions(bundledSkillForContractType(stageDefinition.contractType), localSkills);
|
|
225
|
+
if (options.reportStep !== false) {
|
|
226
|
+
reportBlankLine(options.reporter);
|
|
227
|
+
reportLine(options.reporter, `${formatWorkspaceWorkflowStageStep(workflowId, stageDefinition.id, { sourcePath })} (building knowledge structure)`);
|
|
228
|
+
}
|
|
229
|
+
return executeValidatedStage({
|
|
230
|
+
executor: options.executor,
|
|
231
|
+
workspacePath: options.workspacePath,
|
|
232
|
+
targetName: workspaceName,
|
|
233
|
+
workflow: workflowId,
|
|
234
|
+
workflowSourcePath: sourcePath,
|
|
235
|
+
stageDefinition,
|
|
236
|
+
instructions,
|
|
237
|
+
summary: `Preparing ${stageDefinition.label.toLowerCase()} for ${summaryCount} summary files.`,
|
|
238
|
+
contract: buildWorkspaceStructureStageContract(options.workspacePath, workflowId, summaryCount, instructions, stageDefinition.id, stageDefinition.skillDir),
|
|
239
|
+
statusLines: [
|
|
240
|
+
`Emit exactly one startup line: STATUS: loaded ${stageStatusLabel} plan ${summaryCount} summary files.`,
|
|
241
|
+
`Emit STATUS: inventoried summaries ${summaryCount}/${summaryCount} after the inventory pass completes.`,
|
|
242
|
+
`Emit STATUS: structured knowledge layer after entities, claims, and indexes are updated.`,
|
|
243
|
+
`Emit DONE: ${stageStatusLabel} complete ${summaryCount}/${summaryCount} when the required outputs are on disk.`,
|
|
244
|
+
],
|
|
245
|
+
reporter: options.reporter,
|
|
246
|
+
completionCheck: () => isWorkspaceStructureStageComplete(options.workspacePath, summaryCount),
|
|
247
|
+
reconcile: () => reconcileWorkspaceStructureRun(options.workspacePath),
|
|
248
|
+
refreshArtifacts: () => refreshWorkspaceArtifacts(options.workspacePath, { ensureViewSpec: true }),
|
|
249
|
+
validate: () => validateWorkspaceStructure(options.workspacePath),
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
async function runWorkspaceShape(options) {
|
|
253
|
+
const workspaceConfig = readInterfConfig(options.workspacePath);
|
|
254
|
+
const workspaceName = workspaceConfig?.name ?? "workspace";
|
|
255
|
+
const workflowId = resolveWorkspaceWorkflowFromConfig(workspaceConfig);
|
|
256
|
+
const sourcePath = options.sourcePath ?? resolveSourceFolderPath(options.workspacePath, workspaceConfig);
|
|
257
|
+
const stageDefinition = options.stageDefinition ?? findStageByContractType(workspaceExecutionStages(workflowId, options.workspacePath), "workspace-query-shape");
|
|
258
|
+
const stageStatusLabel = stageDefinition.label.toLowerCase();
|
|
259
|
+
const summaryCount = countFilesRecursive(join(options.workspacePath, "summaries"));
|
|
260
|
+
const localSkills = buildLocalSkillContractExtension(options.workspacePath, [workflowCompileStageDirectory(stageDefinition.skillDir)], "Use them to refine final workspace shaping, navigation, and retrieval routes.");
|
|
261
|
+
const instructions = buildStageInstructions(bundledSkillForContractType(stageDefinition.contractType), localSkills);
|
|
262
|
+
const shapeInputPath = writeWorkspaceShapeInput(options.workspacePath, workspaceName, sourcePath);
|
|
263
|
+
if (options.reportStep !== false) {
|
|
264
|
+
reportBlankLine(options.reporter);
|
|
265
|
+
reportLine(options.reporter, `${formatWorkspaceWorkflowStageStep(workflowId, stageDefinition.id, { sourcePath })} (shaping workspace surface)`);
|
|
266
|
+
}
|
|
267
|
+
return executeValidatedStage({
|
|
268
|
+
executor: options.executor,
|
|
269
|
+
workspacePath: options.workspacePath,
|
|
270
|
+
targetName: workspaceName,
|
|
271
|
+
workflow: workflowId,
|
|
272
|
+
workflowSourcePath: sourcePath,
|
|
273
|
+
stageDefinition,
|
|
274
|
+
instructions,
|
|
275
|
+
summary: `Preparing ${stageDefinition.label.toLowerCase()} for ${summaryCount} summary files.`,
|
|
276
|
+
contract: buildWorkspaceCompileContract(options.workspacePath, workflowId, summaryCount, instructions, stageDefinition.id, stageDefinition.skillDir, shapeInputPath),
|
|
277
|
+
statusLines: [
|
|
278
|
+
`Emit exactly one startup line: STATUS: loaded ${stageStatusLabel} plan ${summaryCount} summary files.`,
|
|
279
|
+
`Emit STATUS: read shaping input after ${shapeInputPath} has been loaded.`,
|
|
280
|
+
"Emit STATUS: shaped workspace surface after home.md and any focused indexes are updated.",
|
|
281
|
+
`Emit DONE: ${stageStatusLabel} complete ${summaryCount}/${summaryCount} when the required outputs are on disk.`,
|
|
282
|
+
],
|
|
283
|
+
reporter: options.reporter,
|
|
284
|
+
completionCheck: () => isWorkspaceShapeStageComplete(options.workspacePath, summaryCount),
|
|
285
|
+
reconcile: () => reconcileWorkspaceShapeRun(options.workspacePath),
|
|
286
|
+
refreshArtifacts: () => refreshWorkspaceArtifacts(options.workspacePath, { ensureViewSpec: true }),
|
|
287
|
+
validate: () => validateWorkspaceCompile(options.workspacePath),
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
async function runWorkspaceCompileStages(options) {
|
|
291
|
+
const workspaceConfig = readInterfConfig(options.workspacePath);
|
|
292
|
+
const workflowId = resolveWorkspaceWorkflowFromConfig(workspaceConfig);
|
|
293
|
+
const sourcePath = options.sourcePath ?? resolveSourceFolderPath(options.workspacePath, workspaceConfig);
|
|
294
|
+
const stages = workspaceExecutionStages(workflowId, options.workspacePath).filter((stage) => stage.contractType !== "workspace-file-evidence");
|
|
295
|
+
let structure = null;
|
|
296
|
+
let shape = null;
|
|
297
|
+
for (const stageDefinition of stages) {
|
|
298
|
+
const result = stageDefinition.contractType === "workspace-knowledge-structure"
|
|
299
|
+
? await runWorkspaceStructure({
|
|
300
|
+
executor: options.executor,
|
|
301
|
+
workspacePath: options.workspacePath,
|
|
302
|
+
sourcePath,
|
|
303
|
+
reporter: options.reporter,
|
|
304
|
+
reportStep: options.reportStep,
|
|
305
|
+
stageDefinition,
|
|
306
|
+
})
|
|
307
|
+
: await runWorkspaceShape({
|
|
308
|
+
executor: options.executor,
|
|
309
|
+
workspacePath: options.workspacePath,
|
|
310
|
+
sourcePath,
|
|
311
|
+
reporter: options.reporter,
|
|
312
|
+
reportStep: options.reportStep,
|
|
313
|
+
stageDefinition,
|
|
314
|
+
});
|
|
315
|
+
if (stageDefinition.contractType === "workspace-knowledge-structure") {
|
|
316
|
+
structure = result;
|
|
317
|
+
}
|
|
318
|
+
else if (stageDefinition.contractType === "workspace-query-shape") {
|
|
319
|
+
shape = result;
|
|
320
|
+
}
|
|
321
|
+
if (!result.ok) {
|
|
322
|
+
return {
|
|
323
|
+
ok: false,
|
|
324
|
+
structure,
|
|
325
|
+
shape,
|
|
326
|
+
failedStage: stageDefinition.id,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return {
|
|
331
|
+
ok: true,
|
|
332
|
+
structure,
|
|
333
|
+
shape,
|
|
334
|
+
failedStage: null,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
export async function runWorkspaceCompile(options) {
|
|
338
|
+
const result = await runWorkspaceCompileStages(options);
|
|
339
|
+
if (!result.ok) {
|
|
340
|
+
return result.shape ?? result.structure ?? { ok: false, code: 1 };
|
|
341
|
+
}
|
|
342
|
+
return result.shape ?? result.structure ?? { ok: true, code: 0 };
|
|
343
|
+
}
|
|
344
|
+
export async function compileWorkspace(options) {
|
|
345
|
+
refreshWorkspaceBootstrapGuidance(options.workspacePath);
|
|
346
|
+
const { sourcePath, workflowId } = resolveWorkspaceContext(options.workspacePath);
|
|
347
|
+
const stages = workspaceExecutionStages(workflowId, options.workspacePath);
|
|
348
|
+
let summarize = {
|
|
349
|
+
ok: true,
|
|
350
|
+
code: 0,
|
|
351
|
+
skipped: true,
|
|
352
|
+
plan: buildSummarizePlan(sourcePath, options.workspacePath),
|
|
353
|
+
};
|
|
354
|
+
let evidencePassCount = 0;
|
|
355
|
+
for (const stageDefinition of stages) {
|
|
356
|
+
if (stageDefinition.contractType !== "workspace-file-evidence") {
|
|
357
|
+
break;
|
|
358
|
+
}
|
|
359
|
+
summarize = await runWorkspaceSummarize({
|
|
360
|
+
executor: options.executor,
|
|
361
|
+
workspacePath: options.workspacePath,
|
|
362
|
+
sourcePath,
|
|
363
|
+
reporter: options.reporter,
|
|
364
|
+
reportSummary: evidencePassCount === 0,
|
|
365
|
+
reportStep: true,
|
|
366
|
+
stageDefinition,
|
|
367
|
+
fullPass: evidencePassCount > 0,
|
|
368
|
+
});
|
|
369
|
+
evidencePassCount += 1;
|
|
370
|
+
if (!summarize.ok) {
|
|
371
|
+
return {
|
|
372
|
+
ok: false,
|
|
373
|
+
summarize,
|
|
374
|
+
structure: null,
|
|
375
|
+
shape: null,
|
|
376
|
+
compile: null,
|
|
377
|
+
failedStage: stageDefinition.id,
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
const compileStages = await runWorkspaceCompileStages({
|
|
382
|
+
executor: options.executor,
|
|
383
|
+
workspacePath: options.workspacePath,
|
|
384
|
+
sourcePath,
|
|
385
|
+
reporter: options.reporter,
|
|
386
|
+
reportStep: true,
|
|
387
|
+
});
|
|
388
|
+
return {
|
|
389
|
+
ok: compileStages.ok,
|
|
390
|
+
summarize,
|
|
391
|
+
structure: compileStages.structure,
|
|
392
|
+
shape: compileStages.shape,
|
|
393
|
+
compile: compileStages.shape,
|
|
394
|
+
failedStage: compileStages.failedStage,
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
//# sourceMappingURL=workspace-compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-compile.js","sourceRoot":"","sources":["../../src/lib/workspace-compile.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@interf/compiler",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.3.1",
|
|
4
|
+
"description": "Open-source knowledge compiler that measures local-agent accuracy on your files and builds compiled workspaces on top of them.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"interf": "dist/bin.js"
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
"test:e2e": "npm run test:acceptance-live",
|
|
27
27
|
"test:e2e:claude": "npm run test:acceptance-live -- --agent claude-code",
|
|
28
28
|
"test:e2e:codex": "npm run test:acceptance-live -- --agent codex",
|
|
29
|
-
"test:e2e:quick": "npm run test:acceptance-quick:create-
|
|
30
|
-
"test:e2e:quick:claude": "npm run test:acceptance-quick:create-
|
|
31
|
-
"test:e2e:quick:codex": "npm run test:acceptance-quick:create-
|
|
29
|
+
"test:e2e:quick": "npm run test:acceptance-quick:create-workspace && npm run test:acceptance-quick:query-workspace",
|
|
30
|
+
"test:e2e:quick:claude": "npm run test:acceptance-quick:create-workspace -- --agent claude-code && npm run test:acceptance-quick:query-workspace -- --agent claude-code",
|
|
31
|
+
"test:e2e:quick:codex": "npm run test:acceptance-quick:create-workspace -- --agent codex && npm run test:acceptance-quick:query-workspace -- --agent codex",
|
|
32
32
|
"test:e2e:quick:matrix": "npm run test:e2e:quick:claude && npm run test:e2e:quick:codex",
|
|
33
33
|
"test:e2e:compare": "npm run test:acceptance-compare",
|
|
34
34
|
"test:e2e:release:claude": "npm run test:acceptance-live -- --agent claude-code",
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
"test:release:evals": "npm run eval:pack -- --pack internal/eval-packs/cbre-chart-sanity.json",
|
|
38
38
|
"test:release": "npm test && npm run test:e2e:release:claude && npm run test:e2e:release:codex && npm run test:release:evals",
|
|
39
39
|
"test:acceptance-live": "npm run build && node scripts/acceptance-live.mjs",
|
|
40
|
-
"test:acceptance-compare": "npm run build && node scripts/acceptance-live.mjs --
|
|
41
|
-
"test:acceptance-matrix": "npm run build && node scripts/acceptance-live.mjs --
|
|
40
|
+
"test:acceptance-compare": "npm run build && node scripts/acceptance-live.mjs --with-benchmark",
|
|
41
|
+
"test:acceptance-matrix": "npm run build && node scripts/acceptance-live.mjs --with-benchmark",
|
|
42
42
|
"test:acceptance-cache:refresh": "npm run build && node scripts/acceptance-live.mjs --output-root .interf-test-cache/latest-quick",
|
|
43
|
-
"test:acceptance-quick:create-
|
|
44
|
-
"test:acceptance-quick:query-
|
|
43
|
+
"test:acceptance-quick:create-workspace": "npm run build && node scripts/acceptance-targeted.mjs create-workspace",
|
|
44
|
+
"test:acceptance-quick:query-workspace": "npm run build && node scripts/acceptance-targeted.mjs workspace-query",
|
|
45
45
|
"prepublishOnly": "node scripts/prepublish-gate.mjs"
|
|
46
46
|
},
|
|
47
47
|
"files": [
|
|
@@ -1,29 +1,27 @@
|
|
|
1
1
|
---
|
|
2
2
|
{
|
|
3
3
|
"name": "benchmark",
|
|
4
|
-
"description": "Compare compiled
|
|
4
|
+
"description": "Compare compiled workspaces with Interf's file-based benchmark specs. Use when asked to benchmark, compare workflows, compare compiled workspaces, or run checks on already-compiled Interf targets."
|
|
5
5
|
}
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# Benchmark Compiled
|
|
8
|
+
# Benchmark Compiled Workspaces
|
|
9
9
|
|
|
10
10
|
Use this skill when the job is to compare compiled Interf outputs, not to build them from scratch.
|
|
11
11
|
|
|
12
12
|
Prefer the CLI:
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
interf
|
|
15
|
+
interf test
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
This skill is for:
|
|
19
|
-
- comparing
|
|
20
|
-
- comparing interfaces built on top of the same knowledge base
|
|
19
|
+
- comparing compiled workspaces built from the same source folder
|
|
21
20
|
- creating or refining simple benchmark specs under `interf/benchmarks/`
|
|
22
|
-
- summarizing which workflow or
|
|
21
|
+
- summarizing which workflow or compiled workspace performed better on deterministic checks
|
|
23
22
|
|
|
24
23
|
This skill is **not** for:
|
|
25
|
-
- compiling a
|
|
26
|
-
- compiling an interface
|
|
24
|
+
- compiling a workspace
|
|
27
25
|
- inventing a second benchmark system outside Interf's filesystem contract
|
|
28
26
|
|
|
29
27
|
## Source of truth
|
|
@@ -31,7 +29,8 @@ This skill is **not** for:
|
|
|
31
29
|
- benchmark specs in `interf/benchmarks/`
|
|
32
30
|
- saved benchmark runs in `interf/benchmarks/runs/`
|
|
33
31
|
- current target eligibility from `interf status`
|
|
34
|
-
- public command: `interf
|
|
32
|
+
- public command: `interf test`
|
|
33
|
+
- technical alias: `interf benchmark`
|
|
35
34
|
|
|
36
35
|
When this skill is used inside a generated workspace, do not try to open SDK repo source files outside the current workspace. The benchmark spec files and saved run artifacts are the source of truth.
|
|
37
36
|
|
|
@@ -39,32 +38,26 @@ When this skill is used inside a generated workspace, do not try to open SDK rep
|
|
|
39
38
|
|
|
40
39
|
Interf benchmark specs are file-first and deterministic by default.
|
|
41
40
|
|
|
42
|
-
They live under
|
|
41
|
+
They live under `interf/benchmarks/`.
|
|
43
42
|
|
|
44
|
-
|
|
45
|
-
- `interf/benchmarks/interface/*.json`
|
|
46
|
-
|
|
47
|
-
Saved benchmark runs live under:
|
|
48
|
-
|
|
49
|
-
- `interf/benchmarks/runs/knowledge-base/*.json`
|
|
50
|
-
- `interf/benchmarks/runs/interface/*.json`
|
|
43
|
+
Saved benchmark runs live under `interf/benchmarks/runs/workspace/`.
|
|
51
44
|
|
|
52
45
|
Minimal example:
|
|
53
46
|
|
|
54
47
|
```json
|
|
55
48
|
{
|
|
56
|
-
"type": "
|
|
49
|
+
"type": "workspace",
|
|
57
50
|
"name": "Weekly Brief Quality",
|
|
58
|
-
"description": "Compare weekly briefing
|
|
51
|
+
"description": "Compare weekly briefing workspaces.",
|
|
59
52
|
"cases": [
|
|
60
53
|
{
|
|
61
54
|
"id": "current-state",
|
|
62
|
-
"question": "Does this
|
|
63
|
-
"file": "
|
|
55
|
+
"question": "Does this workspace clearly say what changed and what matters next?",
|
|
56
|
+
"file": "home.md",
|
|
64
57
|
"expect": {
|
|
65
|
-
"must_include": ["
|
|
58
|
+
"must_include": ["launch", "people"],
|
|
66
59
|
"must_not_include": ["TODO"],
|
|
67
|
-
"min_words":
|
|
60
|
+
"min_words": 5
|
|
68
61
|
}
|
|
69
62
|
}
|
|
70
63
|
]
|
|
@@ -95,15 +88,15 @@ If a target is `stale`, `failed`, or `idle`, do not benchmark it yet. Recompile
|
|
|
95
88
|
## Recommended flow
|
|
96
89
|
|
|
97
90
|
1. Confirm the source folder and target type.
|
|
98
|
-
2. Confirm the selected
|
|
91
|
+
2. Confirm the selected workspaces are compiled.
|
|
99
92
|
3. Reuse an existing benchmark spec if one already expresses the user's assertion.
|
|
100
93
|
4. Otherwise create a small benchmark spec with:
|
|
101
94
|
- one clear question per case
|
|
102
95
|
- one output file per case
|
|
103
96
|
- a few deterministic checks
|
|
104
|
-
5. Run `interf
|
|
97
|
+
5. Run `interf test`.
|
|
105
98
|
6. Read the saved run artifact under `interf/benchmarks/runs/`.
|
|
106
|
-
7. Summarize pass/fail differences and what they imply about the workflow or
|
|
99
|
+
7. Summarize pass/fail differences and what they imply about the workflow or workspace.
|
|
107
100
|
|
|
108
101
|
## Authoring guidance
|
|
109
102
|
|
|
@@ -125,5 +118,5 @@ When summarizing a benchmark run:
|
|
|
125
118
|
- say which targets were compared
|
|
126
119
|
- say which cases passed or failed
|
|
127
120
|
- point to the saved run file
|
|
128
|
-
- explain what the failures imply about the current workflow or
|
|
121
|
+
- explain what the failures imply about the current workflow or workspace
|
|
129
122
|
- keep benchmark conclusions separate from subjective product opinions
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
{
|
|
3
3
|
"name": "workflow/create",
|
|
4
|
-
"description": "Create or refine an Interf workflow package. Use when asked to define a
|
|
4
|
+
"description": "Create or refine an Interf workflow package. Use when asked to define a workspace workflow, author workflow.json, shape compile stages, or add declarative stage acceptance criteria."
|
|
5
5
|
}
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -18,7 +18,7 @@ interf create workflow
|
|
|
18
18
|
That wizard should create the initial package under:
|
|
19
19
|
|
|
20
20
|
```text
|
|
21
|
-
interf/workflows/<
|
|
21
|
+
interf/workflows/<workflow-id>/
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
Then refine the package in place.
|
|
@@ -35,7 +35,7 @@ It has two layers:
|
|
|
35
35
|
Typical shape:
|
|
36
36
|
|
|
37
37
|
```text
|
|
38
|
-
interf/workflows
|
|
38
|
+
interf/workflows/<workflow-id>/
|
|
39
39
|
workflow.json
|
|
40
40
|
README.md
|
|
41
41
|
create/
|
|
@@ -58,7 +58,6 @@ Keep it declarative.
|
|
|
58
58
|
- `label`
|
|
59
59
|
- `hint`
|
|
60
60
|
- optional `extends`
|
|
61
|
-
- optional `placeholder`
|
|
62
61
|
- optional `stages`
|
|
63
62
|
- optional `stage_policy_notes`
|
|
64
63
|
|
|
@@ -73,16 +72,11 @@ Each stage can define:
|
|
|
73
72
|
|
|
74
73
|
## Contract kinds
|
|
75
74
|
|
|
76
|
-
Use the shipped contract families only
|
|
75
|
+
Use the shipped workspace contract families only:
|
|
77
76
|
|
|
78
|
-
|
|
79
|
-
- `
|
|
80
|
-
- `
|
|
81
|
-
|
|
82
|
-
Interface stages:
|
|
83
|
-
- `interface-retrieval`
|
|
84
|
-
- `interface-analysis`
|
|
85
|
-
- `interface-output`
|
|
77
|
+
- `workspace-file-evidence`
|
|
78
|
+
- `workspace-knowledge-structure`
|
|
79
|
+
- `workspace-query-shape`
|
|
86
80
|
|
|
87
81
|
Do not invent new engine contract kinds in a local workflow package.
|
|
88
82
|
|
|
@@ -102,7 +96,9 @@ Use dynamic counts when possible.
|
|
|
102
96
|
|
|
103
97
|
Good:
|
|
104
98
|
- `"summarized": "target_files"`
|
|
105
|
-
- `"
|
|
99
|
+
- `"structured": "summary_total"`
|
|
100
|
+
- `"shaped": "summary_total"`
|
|
101
|
+
- `"compiled": "summary_total"`
|
|
106
102
|
|
|
107
103
|
Avoid hardcoding fixed file counts unless the workflow really requires them.
|
|
108
104
|
|