workspace-maxxing 0.1.0
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/.agents/skills/workspace-maxxing/.workspace-templates/CONTEXT.md +44 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/SYSTEM.md +44 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/references/anti-patterns.md +16 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/references/iron-laws.md +26 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/references/reporting-format.md +52 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/scripts/benchmark.ts +171 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/scripts/dispatch.ts +473 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/scripts/generate-tests.ts +158 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/scripts/install-tool.ts +82 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/scripts/iterate.ts +265 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/scripts/orchestrator.ts +539 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/scripts/scaffold.ts +282 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/scripts/validate.ts +452 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/skills/architecture/SKILL.md +95 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/skills/fixer/SKILL.md +109 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/skills/iteration/SKILL.md +89 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/skills/prompt-engineering/SKILL.md +87 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/skills/research/SKILL.md +94 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/skills/testing/SKILL.md +89 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/skills/tooling/SKILL.md +87 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/skills/validation/SKILL.md +103 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/skills/worker/SKILL.md +79 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/workspace/00-meta/CONTEXT.md +6 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/workspace/00-meta/execution-log.md +27 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/workspace/01-input/CONTEXT.md +29 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/workspace/02-process/CONTEXT.md +29 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/workspace/03-output/CONTEXT.md +29 -0
- package/.agents/skills/workspace-maxxing/.workspace-templates/workspace/README.md +14 -0
- package/.agents/skills/workspace-maxxing/SKILL.md +312 -0
- package/.agents/skills/workspace-maxxing/scripts/benchmark.ts +171 -0
- package/.agents/skills/workspace-maxxing/scripts/dispatch.ts +473 -0
- package/.agents/skills/workspace-maxxing/scripts/generate-tests.ts +158 -0
- package/.agents/skills/workspace-maxxing/scripts/install-tool.ts +82 -0
- package/.agents/skills/workspace-maxxing/scripts/iterate.ts +265 -0
- package/.agents/skills/workspace-maxxing/scripts/orchestrator.ts +539 -0
- package/.agents/skills/workspace-maxxing/scripts/scaffold.ts +282 -0
- package/.agents/skills/workspace-maxxing/scripts/validate.ts +452 -0
- package/README.md +144 -0
- package/dist/agent-creator.d.ts +9 -0
- package/dist/agent-creator.d.ts.map +1 -0
- package/dist/agent-creator.js +199 -0
- package/dist/agent-creator.js.map +1 -0
- package/dist/agent-iterator.d.ts +38 -0
- package/dist/agent-iterator.d.ts.map +1 -0
- package/dist/agent-iterator.js +327 -0
- package/dist/agent-iterator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +197 -0
- package/dist/index.js.map +1 -0
- package/dist/install.d.ts +18 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +117 -0
- package/dist/install.js.map +1 -0
- package/dist/platforms/claude.d.ts +7 -0
- package/dist/platforms/claude.d.ts.map +1 -0
- package/dist/platforms/claude.js +70 -0
- package/dist/platforms/claude.js.map +1 -0
- package/dist/platforms/copilot.d.ts +7 -0
- package/dist/platforms/copilot.d.ts.map +1 -0
- package/dist/platforms/copilot.js +75 -0
- package/dist/platforms/copilot.js.map +1 -0
- package/dist/platforms/gemini.d.ts +7 -0
- package/dist/platforms/gemini.d.ts.map +1 -0
- package/dist/platforms/gemini.js +81 -0
- package/dist/platforms/gemini.js.map +1 -0
- package/dist/platforms/index.d.ts +8 -0
- package/dist/platforms/index.d.ts.map +1 -0
- package/dist/platforms/index.js +41 -0
- package/dist/platforms/index.js.map +1 -0
- package/dist/platforms/opencode.d.ts +7 -0
- package/dist/platforms/opencode.d.ts.map +1 -0
- package/dist/platforms/opencode.js +70 -0
- package/dist/platforms/opencode.js.map +1 -0
- package/dist/scripts/benchmark.d.ts +20 -0
- package/dist/scripts/benchmark.d.ts.map +1 -0
- package/dist/scripts/benchmark.js +170 -0
- package/dist/scripts/benchmark.js.map +1 -0
- package/dist/scripts/dispatch.d.ts +32 -0
- package/dist/scripts/dispatch.d.ts.map +1 -0
- package/dist/scripts/dispatch.js +386 -0
- package/dist/scripts/dispatch.js.map +1 -0
- package/dist/scripts/generate-tests.d.ts +11 -0
- package/dist/scripts/generate-tests.d.ts.map +1 -0
- package/dist/scripts/generate-tests.js +118 -0
- package/dist/scripts/generate-tests.js.map +1 -0
- package/dist/scripts/install-tool.d.ts +8 -0
- package/dist/scripts/install-tool.d.ts.map +1 -0
- package/dist/scripts/install-tool.js +98 -0
- package/dist/scripts/install-tool.js.map +1 -0
- package/dist/scripts/iterate.d.ts +44 -0
- package/dist/scripts/iterate.d.ts.map +1 -0
- package/dist/scripts/iterate.js +260 -0
- package/dist/scripts/iterate.js.map +1 -0
- package/dist/scripts/orchestrator.d.ts +40 -0
- package/dist/scripts/orchestrator.d.ts.map +1 -0
- package/dist/scripts/orchestrator.js +378 -0
- package/dist/scripts/orchestrator.js.map +1 -0
- package/dist/scripts/scaffold.d.ts +8 -0
- package/dist/scripts/scaffold.d.ts.map +1 -0
- package/dist/scripts/scaffold.js +279 -0
- package/dist/scripts/scaffold.js.map +1 -0
- package/dist/scripts/validate.d.ts +11 -0
- package/dist/scripts/validate.d.ts.map +1 -0
- package/dist/scripts/validate.js +472 -0
- package/dist/scripts/validate.js.map +1 -0
- package/docs/superpowers/plans/2026-04-07-autonomous-iteration-plan.md +1123 -0
- package/docs/superpowers/plans/2026-04-07-autonomous-iteration-sub-agent-batches.md +1923 -0
- package/docs/superpowers/plans/2026-04-07-autonomous-workflow-sub-skill-plan.md +1505 -0
- package/docs/superpowers/plans/2026-04-07-benchmarking-multi-agent-plan.md +854 -0
- package/docs/superpowers/plans/2026-04-07-workspace-builder-logic-plan.md +1426 -0
- package/docs/superpowers/plans/2026-04-07-workspace-maxxing-plan.md +1299 -0
- package/docs/superpowers/plans/2026-04-08-session-294c-subagent-invocation-plan.md +320 -0
- package/docs/superpowers/plans/2026-04-08-workflow-prompt-hardening-plan.md +1025 -0
- package/docs/superpowers/plans/2026-04-12-workspace-agent-creation-plan.md +992 -0
- package/docs/superpowers/specs/2026-04-07-autonomous-iteration-design.md +214 -0
- package/docs/superpowers/specs/2026-04-07-autonomous-iteration-sub-agent-batches-design.md +188 -0
- package/docs/superpowers/specs/2026-04-07-autonomous-workflow-sub-skill-design.md +137 -0
- package/docs/superpowers/specs/2026-04-07-benchmarking-multi-agent-design.md +105 -0
- package/docs/superpowers/specs/2026-04-07-workspace-builder-logic-design.md +179 -0
- package/docs/superpowers/specs/2026-04-07-workspace-maxxing-design.md +227 -0
- package/docs/superpowers/specs/2026-04-08-session-294c-subagent-invocation-design.md +265 -0
- package/docs/superpowers/specs/2026-04-08-workflow-prompt-hardening-design.md +146 -0
- package/docs/superpowers/specs/2026-04-12-workspace-agent-creation-design.md +239 -0
- package/jest.config.js +8 -0
- package/package.json +32 -0
- package/src/agent-creator.ts +180 -0
- package/src/agent-iterator.ts +397 -0
- package/src/index.ts +189 -0
- package/src/install.ts +105 -0
- package/src/platforms/claude.ts +40 -0
- package/src/platforms/copilot.ts +50 -0
- package/src/platforms/gemini.ts +55 -0
- package/src/platforms/index.ts +45 -0
- package/src/platforms/opencode.ts +41 -0
- package/src/scripts/benchmark.ts +171 -0
- package/src/scripts/dispatch.ts +473 -0
- package/src/scripts/generate-tests.ts +112 -0
- package/src/scripts/install-tool.ts +82 -0
- package/src/scripts/iterate.ts +271 -0
- package/src/scripts/orchestrator.ts +539 -0
- package/src/scripts/scaffold.ts +282 -0
- package/src/scripts/validate.ts +516 -0
- package/templates/.workspace-templates/CONTEXT.md +44 -0
- package/templates/.workspace-templates/SYSTEM.md +44 -0
- package/templates/.workspace-templates/references/anti-patterns.md +16 -0
- package/templates/.workspace-templates/references/iron-laws.md +26 -0
- package/templates/.workspace-templates/references/reporting-format.md +52 -0
- package/templates/.workspace-templates/scripts/benchmark.ts +171 -0
- package/templates/.workspace-templates/scripts/dispatch.ts +473 -0
- package/templates/.workspace-templates/scripts/generate-tests.ts +158 -0
- package/templates/.workspace-templates/scripts/install-tool.ts +82 -0
- package/templates/.workspace-templates/scripts/iterate.ts +265 -0
- package/templates/.workspace-templates/scripts/orchestrator.ts +539 -0
- package/templates/.workspace-templates/scripts/scaffold.ts +282 -0
- package/templates/.workspace-templates/scripts/validate.ts +452 -0
- package/templates/.workspace-templates/skills/architecture/SKILL.md +95 -0
- package/templates/.workspace-templates/skills/fixer/SKILL.md +109 -0
- package/templates/.workspace-templates/skills/iteration/SKILL.md +89 -0
- package/templates/.workspace-templates/skills/prompt-engineering/SKILL.md +87 -0
- package/templates/.workspace-templates/skills/research/SKILL.md +94 -0
- package/templates/.workspace-templates/skills/testing/SKILL.md +89 -0
- package/templates/.workspace-templates/skills/tooling/SKILL.md +87 -0
- package/templates/.workspace-templates/skills/validation/SKILL.md +103 -0
- package/templates/.workspace-templates/skills/worker/SKILL.md +79 -0
- package/templates/.workspace-templates/workspace/00-meta/CONTEXT.md +6 -0
- package/templates/.workspace-templates/workspace/00-meta/execution-log.md +27 -0
- package/templates/.workspace-templates/workspace/01-input/CONTEXT.md +29 -0
- package/templates/.workspace-templates/workspace/02-process/CONTEXT.md +29 -0
- package/templates/.workspace-templates/workspace/03-output/CONTEXT.md +29 -0
- package/templates/.workspace-templates/workspace/README.md +14 -0
- package/templates/SKILL.md +347 -0
- package/tests/benchmark.test.ts +158 -0
- package/tests/cli.test.ts +109 -0
- package/tests/dispatch-parallel.test.ts +124 -0
- package/tests/dispatch.test.ts +218 -0
- package/tests/fixer-skill.test.ts +203 -0
- package/tests/generate-tests.test.ts +101 -0
- package/tests/install-tool.test.ts +141 -0
- package/tests/install.test.ts +144 -0
- package/tests/integration.test.ts +324 -0
- package/tests/iterate.test.ts +219 -0
- package/tests/orchestrator.test.ts +710 -0
- package/tests/scaffold.test.ts +238 -0
- package/tests/templates-enhanced.test.ts +208 -0
- package/tests/templates.test.ts +219 -0
- package/tests/validate.test.ts +421 -0
- package/tests/validation-enhanced.test.ts +303 -0
- package/tests/worker-skill.test.ts +88 -0
- package/tsconfig.json +19 -0
- package/workspace/00-meta/CONTEXT.md +3 -0
- package/workspace/00-meta/execution-log.md +17 -0
- package/workspace/00-meta/tools.md +11 -0
- package/workspace/01-input/CONTEXT.md +27 -0
- package/workspace/CONTEXT.md +35 -0
- package/workspace/README.md +14 -0
- package/workspace/SYSTEM.md +36 -0
- package/workspace-maxxing-0.1.0.tgz +0 -0
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.validateWorkspace = validateWorkspace;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const REQUIRED_SYSTEM_HEADINGS = [
|
|
40
|
+
'## Role',
|
|
41
|
+
'## Folder Map',
|
|
42
|
+
'## Workflow Rules',
|
|
43
|
+
'## Scope Guardrails',
|
|
44
|
+
'## Sequential Execution Protocol',
|
|
45
|
+
'## Stage Boundaries',
|
|
46
|
+
'## Tooling Policy',
|
|
47
|
+
];
|
|
48
|
+
const REQUIRED_ROOT_CONTEXT_HEADINGS = [
|
|
49
|
+
'## How to Use This File',
|
|
50
|
+
'## Task Routing',
|
|
51
|
+
'## Loading Order',
|
|
52
|
+
'## Scope Guardrails',
|
|
53
|
+
'## Sequential Routing Contract',
|
|
54
|
+
'## Stage Handoff Routing',
|
|
55
|
+
'## Escalation',
|
|
56
|
+
];
|
|
57
|
+
const REQUIRED_STAGE_CONTEXT_HEADINGS = [
|
|
58
|
+
'## Purpose',
|
|
59
|
+
'## Inputs',
|
|
60
|
+
'## Outputs',
|
|
61
|
+
'## Dependencies',
|
|
62
|
+
'## Required Evidence',
|
|
63
|
+
'## Completion Criteria',
|
|
64
|
+
'## Handoff',
|
|
65
|
+
];
|
|
66
|
+
const DISALLOWED_STAGE_SOURCE_EXTENSIONS = new Set([
|
|
67
|
+
'.ts',
|
|
68
|
+
'.tsx',
|
|
69
|
+
'.js',
|
|
70
|
+
'.jsx',
|
|
71
|
+
'.py',
|
|
72
|
+
'.java',
|
|
73
|
+
'.go',
|
|
74
|
+
'.rs',
|
|
75
|
+
'.cs',
|
|
76
|
+
'.cpp',
|
|
77
|
+
'.c',
|
|
78
|
+
'.rb',
|
|
79
|
+
'.php',
|
|
80
|
+
'.swift',
|
|
81
|
+
'.kt',
|
|
82
|
+
'.scala',
|
|
83
|
+
]);
|
|
84
|
+
function validateWorkspace(workspacePath) {
|
|
85
|
+
const ws = path.resolve(workspacePath);
|
|
86
|
+
const checks = [];
|
|
87
|
+
const numberedFolders = getNumberedStageFolders(ws);
|
|
88
|
+
const systemMdPath = path.join(ws, 'SYSTEM.md');
|
|
89
|
+
const systemExists = fs.existsSync(systemMdPath);
|
|
90
|
+
checks.push({
|
|
91
|
+
name: 'SYSTEM.md exists',
|
|
92
|
+
passed: systemExists,
|
|
93
|
+
message: systemExists ? 'Found' : 'Missing',
|
|
94
|
+
});
|
|
95
|
+
if (systemExists) {
|
|
96
|
+
const systemContent = fs.readFileSync(systemMdPath, 'utf-8');
|
|
97
|
+
const hasFolderMap = systemContent.toLowerCase().includes('folder map');
|
|
98
|
+
checks.push({
|
|
99
|
+
name: 'SYSTEM.md contains folder map',
|
|
100
|
+
passed: hasFolderMap,
|
|
101
|
+
message: hasFolderMap ? 'Found' : 'Missing "folder map" reference',
|
|
102
|
+
});
|
|
103
|
+
addRequiredHeadingChecks('SYSTEM.md', systemContent, REQUIRED_SYSTEM_HEADINGS, checks);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
checks.push({
|
|
107
|
+
name: 'SYSTEM.md contains folder map',
|
|
108
|
+
passed: false,
|
|
109
|
+
message: 'Cannot check — SYSTEM.md missing',
|
|
110
|
+
});
|
|
111
|
+
for (const heading of REQUIRED_SYSTEM_HEADINGS) {
|
|
112
|
+
checks.push({
|
|
113
|
+
name: `SYSTEM.md contains ${heading}`,
|
|
114
|
+
passed: false,
|
|
115
|
+
message: `Cannot check - SYSTEM.md missing`,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const contextMdPath = path.join(ws, 'CONTEXT.md');
|
|
120
|
+
const contextExists = fs.existsSync(contextMdPath);
|
|
121
|
+
checks.push({
|
|
122
|
+
name: 'CONTEXT.md exists at root',
|
|
123
|
+
passed: contextExists,
|
|
124
|
+
message: contextExists ? 'Found' : 'Missing',
|
|
125
|
+
});
|
|
126
|
+
if (contextExists) {
|
|
127
|
+
const contextContent = fs.readFileSync(contextMdPath, 'utf-8');
|
|
128
|
+
addRequiredHeadingChecks('CONTEXT.md', contextContent, REQUIRED_ROOT_CONTEXT_HEADINGS, checks);
|
|
129
|
+
const allReferenced = numberedFolders.every((folder) => contextContent.includes(`${folder}/CONTEXT.md`));
|
|
130
|
+
checks.push({
|
|
131
|
+
name: 'Root routing references all numbered stages',
|
|
132
|
+
passed: allReferenced,
|
|
133
|
+
message: allReferenced ? 'All numbered stages are routed' : 'Missing one or more numbered stage routes',
|
|
134
|
+
});
|
|
135
|
+
const enforcesSelectiveLoading = /## Loading Order/i.test(contextContent)
|
|
136
|
+
&& /SYSTEM\.md/i.test(contextContent)
|
|
137
|
+
&& /Only the task files needed/i.test(contextContent);
|
|
138
|
+
checks.push({
|
|
139
|
+
name: 'Root loading order enforces selective loading',
|
|
140
|
+
passed: enforcesSelectiveLoading,
|
|
141
|
+
message: enforcesSelectiveLoading
|
|
142
|
+
? 'Selective loading guidance found'
|
|
143
|
+
: 'Loading order lacks selective-loading guidance',
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
for (const heading of REQUIRED_ROOT_CONTEXT_HEADINGS) {
|
|
148
|
+
checks.push({
|
|
149
|
+
name: `CONTEXT.md contains ${heading}`,
|
|
150
|
+
passed: false,
|
|
151
|
+
message: 'Cannot check - CONTEXT.md missing',
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
checks.push({
|
|
155
|
+
name: 'Root routing references all numbered stages',
|
|
156
|
+
passed: false,
|
|
157
|
+
message: 'Cannot check - CONTEXT.md missing',
|
|
158
|
+
});
|
|
159
|
+
checks.push({
|
|
160
|
+
name: 'Root loading order enforces selective loading',
|
|
161
|
+
passed: false,
|
|
162
|
+
message: 'Cannot check - CONTEXT.md missing',
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
const executionLogPath = path.join(ws, '00-meta', 'execution-log.md');
|
|
166
|
+
const executionLogExists = fs.existsSync(executionLogPath);
|
|
167
|
+
checks.push({
|
|
168
|
+
name: '00-meta/execution-log.md exists',
|
|
169
|
+
passed: executionLogExists,
|
|
170
|
+
message: executionLogExists ? 'Found' : 'Missing',
|
|
171
|
+
});
|
|
172
|
+
if (executionLogExists) {
|
|
173
|
+
const executionLogContent = fs.readFileSync(executionLogPath, 'utf-8');
|
|
174
|
+
const hasStageChecklistHeading = /## Stage Checklist/i.test(executionLogContent);
|
|
175
|
+
checks.push({
|
|
176
|
+
name: 'Execution log contains stage checklist heading',
|
|
177
|
+
passed: hasStageChecklistHeading,
|
|
178
|
+
message: hasStageChecklistHeading ? 'Found' : 'Missing "## Stage Checklist" heading',
|
|
179
|
+
});
|
|
180
|
+
const hasAllStageChecklistEntries = numberedFolders.every((folder) => {
|
|
181
|
+
const pattern = new RegExp(`^\\s*-\\s*\\[[ xX]\\]\\s+${escapeRegExp(folder)}\\s*$`, 'm');
|
|
182
|
+
return pattern.test(executionLogContent);
|
|
183
|
+
});
|
|
184
|
+
checks.push({
|
|
185
|
+
name: 'Execution log references all numbered stages',
|
|
186
|
+
passed: hasAllStageChecklistEntries,
|
|
187
|
+
message: hasAllStageChecklistEntries
|
|
188
|
+
? 'All numbered stages are present in checklist'
|
|
189
|
+
: 'Missing one or more numbered stage checklist entries',
|
|
190
|
+
});
|
|
191
|
+
const sequentialOrderValid = hasAllStageChecklistEntries
|
|
192
|
+
? isExecutionChecklistSequential(executionLogContent, numberedFolders)
|
|
193
|
+
: false;
|
|
194
|
+
checks.push({
|
|
195
|
+
name: 'Execution log stage completion order is sequential',
|
|
196
|
+
passed: sequentialOrderValid,
|
|
197
|
+
message: sequentialOrderValid
|
|
198
|
+
? 'Stage completion order is sequential'
|
|
199
|
+
: 'Found later stage marked complete before earlier stage',
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
checks.push({
|
|
204
|
+
name: 'Execution log contains stage checklist heading',
|
|
205
|
+
passed: false,
|
|
206
|
+
message: 'Cannot check - execution log missing',
|
|
207
|
+
});
|
|
208
|
+
checks.push({
|
|
209
|
+
name: 'Execution log references all numbered stages',
|
|
210
|
+
passed: false,
|
|
211
|
+
message: 'Cannot check - execution log missing',
|
|
212
|
+
});
|
|
213
|
+
checks.push({
|
|
214
|
+
name: 'Execution log stage completion order is sequential',
|
|
215
|
+
passed: false,
|
|
216
|
+
message: 'Cannot check - execution log missing',
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
for (const folder of numberedFolders) {
|
|
220
|
+
const contextPath = path.join(ws, folder, 'CONTEXT.md');
|
|
221
|
+
const exists = fs.existsSync(contextPath);
|
|
222
|
+
checks.push({
|
|
223
|
+
name: `${folder}/CONTEXT.md exists`,
|
|
224
|
+
passed: exists,
|
|
225
|
+
message: exists ? 'Found' : 'Missing',
|
|
226
|
+
});
|
|
227
|
+
if (exists) {
|
|
228
|
+
const content = fs.readFileSync(contextPath, 'utf-8');
|
|
229
|
+
const notEmpty = content.trim().length > 0;
|
|
230
|
+
checks.push({
|
|
231
|
+
name: `${folder}/CONTEXT.md is not empty`,
|
|
232
|
+
passed: notEmpty,
|
|
233
|
+
message: notEmpty ? `${content.trim().length} chars` : 'File is empty',
|
|
234
|
+
});
|
|
235
|
+
addRequiredHeadingChecks(`${folder}/CONTEXT.md`, content, REQUIRED_STAGE_CONTEXT_HEADINGS, checks);
|
|
236
|
+
const deps = extractStageRefs(extractDependenciesSection(content));
|
|
237
|
+
const currentNum = parseInt(folder.slice(0, 2), 10);
|
|
238
|
+
const pointsToLaterStage = deps.some((dep) => parseInt(dep.slice(0, 2), 10) > currentNum);
|
|
239
|
+
checks.push({
|
|
240
|
+
name: `${folder} dependencies do not point to later stages`,
|
|
241
|
+
passed: !pointsToLaterStage,
|
|
242
|
+
message: !pointsToLaterStage ? 'Dependency direction valid' : 'Found dependency on later-numbered stage',
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
for (const heading of REQUIRED_STAGE_CONTEXT_HEADINGS) {
|
|
247
|
+
checks.push({
|
|
248
|
+
name: `${folder}/CONTEXT.md contains ${heading}`,
|
|
249
|
+
passed: false,
|
|
250
|
+
message: 'Cannot check - CONTEXT.md missing',
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
checks.push({
|
|
254
|
+
name: `${folder} dependencies do not point to later stages`,
|
|
255
|
+
passed: false,
|
|
256
|
+
message: 'Cannot check - CONTEXT.md missing',
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
const disallowedFiles = findDisallowedStageSourceFiles(path.join(ws, folder));
|
|
260
|
+
checks.push({
|
|
261
|
+
name: `${folder} contains no product source code files`,
|
|
262
|
+
passed: disallowedFiles.length === 0,
|
|
263
|
+
message: disallowedFiles.length === 0
|
|
264
|
+
? 'Only workflow documentation artifacts found'
|
|
265
|
+
: `Found source files: ${disallowedFiles.join(', ')}`,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
const allFiles = getAllMarkdownFiles(ws);
|
|
269
|
+
const duplicateCheck = checkDuplicateContent(allFiles);
|
|
270
|
+
checks.push(duplicateCheck);
|
|
271
|
+
// Agent-driven test-case enforcement (default)
|
|
272
|
+
const agentDrivenRequired = true;
|
|
273
|
+
checks.push({
|
|
274
|
+
name: 'Agent-driven test-case mode enforced',
|
|
275
|
+
passed: true,
|
|
276
|
+
message: 'Agent-driven mode is the default; validator requires .agents/iteration/test-cases.json',
|
|
277
|
+
});
|
|
278
|
+
if (agentDrivenRequired) {
|
|
279
|
+
const testCasesPath = path.join(ws, '.agents', 'iteration', 'test-cases.json');
|
|
280
|
+
const readyMarker = path.join(ws, '.agents', 'iteration', '.test-cases-ready');
|
|
281
|
+
const testCasesExists = fs.existsSync(testCasesPath);
|
|
282
|
+
checks.push({
|
|
283
|
+
name: '.agents/iteration/test-cases.json exists',
|
|
284
|
+
passed: testCasesExists,
|
|
285
|
+
message: testCasesExists ? 'Found' : 'Missing agent-generated test-cases file',
|
|
286
|
+
});
|
|
287
|
+
if (testCasesExists) {
|
|
288
|
+
try {
|
|
289
|
+
const raw = fs.readFileSync(testCasesPath, 'utf-8');
|
|
290
|
+
const parsed = JSON.parse(raw);
|
|
291
|
+
const isArray = Array.isArray(parsed);
|
|
292
|
+
checks.push({
|
|
293
|
+
name: 'test-cases.json is a JSON array',
|
|
294
|
+
passed: isArray,
|
|
295
|
+
message: isArray ? `Contains ${parsed.length} case(s)` : 'Not an array',
|
|
296
|
+
});
|
|
297
|
+
if (isArray) {
|
|
298
|
+
const missingFields = [];
|
|
299
|
+
for (let i = 0; i < Math.min(parsed.length, 5); i++) {
|
|
300
|
+
const tc = parsed[i];
|
|
301
|
+
if (!tc || typeof tc !== 'object' || !tc.id || !tc.input || !tc.expected) {
|
|
302
|
+
missingFields.push(`item[${i}]`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
checks.push({
|
|
306
|
+
name: 'test-cases.json items have minimal fields',
|
|
307
|
+
passed: missingFields.length === 0,
|
|
308
|
+
message: missingFields.length === 0 ? 'Sample items valid' : `Missing fields in ${missingFields.join(', ')}`,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
catch (e) {
|
|
313
|
+
const emsg = (e && e.message) ? e.message : String(e);
|
|
314
|
+
checks.push({
|
|
315
|
+
name: 'test-cases.json parseable JSON',
|
|
316
|
+
passed: false,
|
|
317
|
+
message: `JSON parse error: ${emsg}`,
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
const readyExists = fs.existsSync(readyMarker);
|
|
322
|
+
checks.push({
|
|
323
|
+
name: '.agents/iteration/.test-cases-ready exists',
|
|
324
|
+
passed: readyExists,
|
|
325
|
+
message: readyExists ? 'Found' : 'Missing readiness marker file',
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
const passed = checks.every((c) => c.passed);
|
|
329
|
+
console.log(`\nValidation: ${ws}`);
|
|
330
|
+
console.log('='.repeat(50));
|
|
331
|
+
for (const check of checks) {
|
|
332
|
+
const icon = check.passed ? '✓' : '✗';
|
|
333
|
+
console.log(` ${icon} ${check.name}: ${check.message}`);
|
|
334
|
+
}
|
|
335
|
+
console.log('='.repeat(50));
|
|
336
|
+
console.log(passed ? '✓ All checks passed' : '✗ Some checks failed');
|
|
337
|
+
return { passed, checks };
|
|
338
|
+
}
|
|
339
|
+
function getAllMarkdownFiles(dir) {
|
|
340
|
+
const results = [];
|
|
341
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
342
|
+
for (const entry of entries) {
|
|
343
|
+
const fullPath = path.join(dir, entry.name);
|
|
344
|
+
if (entry.isDirectory()) {
|
|
345
|
+
results.push(...getAllMarkdownFiles(fullPath));
|
|
346
|
+
}
|
|
347
|
+
else if (entry.name.endsWith('.md')) {
|
|
348
|
+
results.push(fullPath);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
return results;
|
|
352
|
+
}
|
|
353
|
+
function escapeRegExp(value) {
|
|
354
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
355
|
+
}
|
|
356
|
+
function hasHeading(content, heading) {
|
|
357
|
+
return new RegExp(`^${escapeRegExp(heading)}\\s*$`, 'im').test(content);
|
|
358
|
+
}
|
|
359
|
+
function addRequiredHeadingChecks(fileLabel, content, headings, checks) {
|
|
360
|
+
for (const heading of headings) {
|
|
361
|
+
const found = hasHeading(content, heading);
|
|
362
|
+
checks.push({
|
|
363
|
+
name: `${fileLabel} contains ${heading}`,
|
|
364
|
+
passed: found,
|
|
365
|
+
message: found ? 'Found' : `Missing ${heading}`,
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
function checkDuplicateContent(files) {
|
|
370
|
+
const MIN_DUPLICATE_LENGTH = 50;
|
|
371
|
+
const duplicates = [];
|
|
372
|
+
for (let i = 0; i < files.length; i++) {
|
|
373
|
+
for (let j = i + 1; j < files.length; j++) {
|
|
374
|
+
const contentA = fs.readFileSync(files[i], 'utf-8');
|
|
375
|
+
const contentB = fs.readFileSync(files[j], 'utf-8');
|
|
376
|
+
const linesA = contentA.split('\n');
|
|
377
|
+
const linesB = contentB.split('\n');
|
|
378
|
+
for (const lineA of linesA) {
|
|
379
|
+
const trimmed = lineA.trim();
|
|
380
|
+
if (trimmed.length > MIN_DUPLICATE_LENGTH) {
|
|
381
|
+
for (const lineB of linesB) {
|
|
382
|
+
if (lineB.trim() === trimmed) {
|
|
383
|
+
duplicates.push(trimmed.substring(0, 60) + '...');
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
if (duplicates.length > 0) {
|
|
392
|
+
return {
|
|
393
|
+
name: 'No duplicate content across files',
|
|
394
|
+
passed: false,
|
|
395
|
+
message: `Found ${duplicates.length} duplicate text block(s)`,
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
return {
|
|
399
|
+
name: 'No duplicate content across files',
|
|
400
|
+
passed: true,
|
|
401
|
+
message: 'No duplicates found',
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
function getNumberedStageFolders(workspacePath) {
|
|
405
|
+
const entries = fs.readdirSync(workspacePath, { withFileTypes: true });
|
|
406
|
+
return entries
|
|
407
|
+
.filter((entry) => entry.isDirectory() && /^\d{2}-/.test(entry.name) && entry.name !== '00-meta')
|
|
408
|
+
.map((entry) => entry.name);
|
|
409
|
+
}
|
|
410
|
+
function extractDependenciesSection(content) {
|
|
411
|
+
const match = content.match(/## Dependencies\s*([\s\S]*?)(?=\n##\s|$)/i);
|
|
412
|
+
return match ? match[1] : '';
|
|
413
|
+
}
|
|
414
|
+
function extractStageRefs(content) {
|
|
415
|
+
const refs = new Set();
|
|
416
|
+
const regex = /(\d{2}-[A-Za-z0-9-_]+)/g;
|
|
417
|
+
let match;
|
|
418
|
+
while ((match = regex.exec(content)) !== null) {
|
|
419
|
+
refs.add(match[1]);
|
|
420
|
+
}
|
|
421
|
+
return Array.from(refs);
|
|
422
|
+
}
|
|
423
|
+
function isExecutionChecklistSequential(content, stages) {
|
|
424
|
+
let foundUncheckedStage = false;
|
|
425
|
+
for (const stage of stages) {
|
|
426
|
+
const pattern = new RegExp(`^\\s*-\\s*\\[([ xX])\\]\\s+${escapeRegExp(stage)}\\s*$`, 'm');
|
|
427
|
+
const match = content.match(pattern);
|
|
428
|
+
if (!match) {
|
|
429
|
+
return false;
|
|
430
|
+
}
|
|
431
|
+
const isChecked = match[1].toLowerCase() === 'x';
|
|
432
|
+
if (!isChecked) {
|
|
433
|
+
foundUncheckedStage = true;
|
|
434
|
+
continue;
|
|
435
|
+
}
|
|
436
|
+
if (foundUncheckedStage) {
|
|
437
|
+
return false;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
return true;
|
|
441
|
+
}
|
|
442
|
+
function findDisallowedStageSourceFiles(stageDir) {
|
|
443
|
+
const disallowed = [];
|
|
444
|
+
const walk = (currentDir) => {
|
|
445
|
+
const entries = fs.readdirSync(currentDir, { withFileTypes: true });
|
|
446
|
+
for (const entry of entries) {
|
|
447
|
+
const fullPath = path.join(currentDir, entry.name);
|
|
448
|
+
if (entry.isDirectory()) {
|
|
449
|
+
walk(fullPath);
|
|
450
|
+
continue;
|
|
451
|
+
}
|
|
452
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
453
|
+
if (DISALLOWED_STAGE_SOURCE_EXTENSIONS.has(ext)) {
|
|
454
|
+
disallowed.push(path.relative(stageDir, fullPath).replace(/\\/g, '/'));
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
walk(stageDir);
|
|
459
|
+
return disallowed;
|
|
460
|
+
}
|
|
461
|
+
if (require.main === module) {
|
|
462
|
+
const args = process.argv.slice(2);
|
|
463
|
+
const workspaceIdx = args.indexOf('--workspace');
|
|
464
|
+
const workspace = workspaceIdx !== -1 ? args[workspaceIdx + 1] : undefined;
|
|
465
|
+
if (!workspace) {
|
|
466
|
+
console.error('Usage: node validate.ts --workspace <path>');
|
|
467
|
+
process.exit(1);
|
|
468
|
+
}
|
|
469
|
+
const result = validateWorkspace(workspace);
|
|
470
|
+
process.exit(result.passed ? 0 : 1);
|
|
471
|
+
}
|
|
472
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/scripts/validate.ts"],"names":[],"mappings":"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"}
|