@williambeto/ai-workflow 2.4.9 → 2.6.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/bin/ai-workflow.d.ts +3 -0
- package/bin/ai-workflow.js +2669 -1
- package/bin/ai-workflow.js.map +1 -0
- package/chunk-2AOV2ATY.js +749 -0
- package/chunk-5WRI5ZAA.js +31 -0
- package/chunk-6EMG6FAO.js +734 -0
- package/chunk-UHLZX2EG.js +1827 -0
- package/core/index.d.ts +440 -0
- package/core/index.js +32 -0
- package/core/index.js.map +1 -0
- package/dist-assets/AGENTS.md +23 -6
- package/dist-assets/agents/atlas.md +8 -8
- package/dist-assets/agents/nexus.md +4 -4
- package/dist-assets/agents/orion.md +1 -1
- package/dist-assets/agents/phoenix.md +1 -1
- package/dist-assets/agents/sage.md +1 -1
- package/dist-assets/commands/implement.md +1 -1
- package/dist-assets/docs/QUICKSTART.md +8 -8
- package/dist-assets/docs/cli-reference.md +7 -7
- package/dist-assets/docs/compatibility/provider-usage.md +1 -9
- package/dist-assets/docs/compatibility/runtime-matrix.md +5 -6
- package/dist-assets/docs/consumer-onboarding.md +2 -2
- package/dist-assets/docs/design-patterns-policy.md +1 -1
- package/dist-assets/docs/npm-consumer-quickstart.md +70 -109
- package/dist-assets/docs/policies/01-BRANCH_GATE.md +1 -1
- package/dist-assets/docs/policies/06-FINAL_EVIDENCE_CONTRACT.md +2 -2
- package/dist-assets/docs/policies/08-PRODUCT_TRUTHFULNESS_AND_PROJECT_DOCS.md +1 -1
- package/dist-assets/docs/policies/10-BEHAVIORAL_CONTRACT_HARDENING.md +1 -1
- package/dist-assets/docs/policies/ORCHESTRATION_PROTOCOL.md +8 -9
- package/dist-assets/docs/policies/PROCEDURE_DELIVERY_ARTIFACTS.md +4 -10
- package/dist-assets/docs/policies/SKILLS_COMMON_GOVERNANCE.md +1 -1
- package/dist-assets/docs/profiles/README.md +2 -2
- package/dist-assets/docs/specs/runtime-operational-contract.md +12 -12
- package/dist-assets/docs/troubleshooting-guide.md +2 -2
- package/dist-assets/docs/visual-validation-guide.md +3 -3
- package/dist-assets/schemas/evidence.schema.json +109 -0
- package/dist-assets/templates/ANTIGRAVITY.md.template +7 -5
- package/dist-assets/templates/CLAUDE.md.template +7 -5
- package/dist-assets/templates/CODEX.md.template +7 -5
- package/evidence-validator-76ZQQYDU.js +6661 -0
- package/package.json +7 -64
- package/{src/core/workspace/read-only-workspace.js → read-only-workspace-PZBE7KAX.js} +14 -31
- package/{src/commands/validate.js → validate-Q2NLLQ5G.js} +30 -22
- package/AGENTS.md +0 -34
- package/CHANGELOG.md +0 -259
- package/LICENSE +0 -21
- package/PUBLISH_MANIFEST.json +0 -34
- package/README.md +0 -129
- package/dist-assets/templates/.geminiignore.template +0 -8
- package/dist-assets/templates/GEMINI.md.template +0 -20
- package/docs/compatibility/provider-usage.md +0 -46
- package/docs/compatibility/runtime-matrix.md +0 -31
- package/docs/getting-started/DESKTOP_PROMPT.md +0 -52
- package/docs/getting-started/authoring-custom-skills.md +0 -80
- package/docs/getting-started/quickstart.md +0 -117
- package/docs/getting-started/troubleshooting.md +0 -123
- package/docs/getting-started/upgrading-to-v2.md +0 -62
- package/src/adapters/index.js +0 -4
- package/src/adapters/platforms/antigravity.js +0 -382
- package/src/adapters/platforms/claude.js +0 -126
- package/src/adapters/platforms/codex.js +0 -113
- package/src/adapters/platforms/gemini.js +0 -245
- package/src/cli.js +0 -155
- package/src/commands/clean.js +0 -106
- package/src/commands/collect-evidence.js +0 -25
- package/src/commands/doctor.js +0 -202
- package/src/commands/execute.js +0 -382
- package/src/commands/init.js +0 -359
- package/src/commands/run.js +0 -112
- package/src/core/backup.js +0 -65
- package/src/core/completion-contract.js +0 -35
- package/src/core/delegation-controller.js +0 -193
- package/src/core/evidence/evidence-ledger.js +0 -98
- package/src/core/execution-planner.js +0 -62
- package/src/core/filesystem.js +0 -141
- package/src/core/finalization/finalizer.js +0 -165
- package/src/core/finalization/workspace-snapshot.js +0 -110
- package/src/core/gates/branch-gate.js +0 -134
- package/src/core/gates/merge-gate.js +0 -74
- package/src/core/handoff/handoff-engine.js +0 -104
- package/src/core/healing/cli-remediation-executor.js +0 -153
- package/src/core/healing/healer-engine.js +0 -212
- package/src/core/healing/runtime-remediation-executor.js +0 -136
- package/src/core/identity.js +0 -43
- package/src/core/install-plan.js +0 -34
- package/src/core/opencode-merge.js +0 -150
- package/src/core/package-assets.js +0 -141
- package/src/core/request-classifier.js +0 -73
- package/src/core/request-router.js +0 -289
- package/src/core/runtime/opencode-adapter.js +0 -202
- package/src/core/sdd/validator.js +0 -67
- package/src/core/statuses.js +0 -29
- package/src/core/symlink-layout.js +0 -93
- package/src/core/templates.js +0 -229
- package/src/core/validation/artifact-fidelity-gate.js +0 -445
- package/src/core/validation/canonical-finalization.js +0 -43
- package/src/core/validation/delivery-decision-engine.js +0 -344
- package/src/core/validation/evidence-collector.js +0 -245
- package/src/core/validation/quality-guard.js +0 -251
- package/src/core/validation/stack-detector.js +0 -65
- package/src/core/validation/validation-planner.js +0 -134
- package/src/core/validation/visual-verifier.js +0 -175
- package/src/core/workflow-profiles.js +0 -107
- package/src/core/workflow-state-machine.js +0 -46
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@williambeto/ai-workflow",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.3",
|
|
4
4
|
"description": "AI Workflow Kit — OpenCode-first software delivery workflow with agents, commands, skills, validation, and evidence",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "José Willams",
|
|
@@ -34,69 +34,12 @@
|
|
|
34
34
|
},
|
|
35
35
|
"files": [
|
|
36
36
|
"bin",
|
|
37
|
-
"
|
|
37
|
+
"core",
|
|
38
38
|
"dist-assets",
|
|
39
|
-
"
|
|
39
|
+
"*.js",
|
|
40
|
+
"package.json",
|
|
40
41
|
"README.md",
|
|
41
42
|
"LICENSE",
|
|
42
|
-
"CHANGELOG.md"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"docs/compatibility"
|
|
46
|
-
],
|
|
47
|
-
"scripts": {
|
|
48
|
-
"build": "node internal/validate/build-publish.mjs",
|
|
49
|
-
"validate": "node internal/validate/validate-all.mjs",
|
|
50
|
-
"validate:json": "node internal/validate/validate-json.mjs",
|
|
51
|
-
"validate:structure": "node internal/validate/validate-structure.mjs",
|
|
52
|
-
"validate:refs": "node internal/validate/validate-refs.mjs",
|
|
53
|
-
"validate:artifact-safety": "node internal/validate/validate-artifact-safety.mjs",
|
|
54
|
-
"validate:links": "node internal/validate/validate-links.mjs",
|
|
55
|
-
"validate:docs-consistency": "node internal/validate/validate-doc-consistency.mjs",
|
|
56
|
-
"validate:workflow": "node internal/validate/validate-workflow.mjs",
|
|
57
|
-
"validate:schemas": "node internal/validate/validate-schemas.mjs",
|
|
58
|
-
"validate:skills": "node internal/validate/validate-skills.mjs",
|
|
59
|
-
"validate:subagents": "node internal/validate/validate-subagents.mjs",
|
|
60
|
-
"validate:commands": "node internal/validate/validate-commands.mjs",
|
|
61
|
-
"validate:agents": "node internal/validate/validate-agents.mjs",
|
|
62
|
-
"validate:policy-refs": "node internal/validate/validate-policy-refs.mjs",
|
|
63
|
-
"validate:privacy-gate": "node internal/validate/validate-privacy-gate.mjs",
|
|
64
|
-
"validate:ui-evidence": "node internal/validate/validate-ui-evidence-gate.mjs",
|
|
65
|
-
"validate:delegation": "node internal/validate/validate-delegation.mjs",
|
|
66
|
-
"validate:routing": "node internal/validate/validate-routing-consistency.mjs",
|
|
67
|
-
"validate:cli-smoke": "node internal/validate/validate-cli-smoke.mjs",
|
|
68
|
-
"validate:cli-docs": "node internal/validate/validate-cli-docs.mjs",
|
|
69
|
-
"lint:md": "markdownlint \"**/*.md\"",
|
|
70
|
-
"validate:registry": "node internal/validate/validate-registry-integrity.mjs",
|
|
71
|
-
"clean:verify": "node -e \"const fs = require('fs'); fs.rmSync('dist', { recursive: true, force: true }); fs.readdirSync('.').filter(f => f.endsWith('.tgz')).forEach(f => fs.rmSync(f, { force: true }));\"",
|
|
72
|
-
"test": "npm run test:unit",
|
|
73
|
-
"test:unit": "vitest run tests/unit/",
|
|
74
|
-
"test:watch": "vitest",
|
|
75
|
-
"test:coverage": "vitest run --coverage",
|
|
76
|
-
"test:e2e": "node tests/validate-e2e.mjs && vitest run tests/e2e/consumer-workflow.test.js",
|
|
77
|
-
"test:e2e:runtime": "AI_WORKFLOW_RELEASE=1 vitest run tests/e2e/consumer-workflow.test.js -t \"Real OpenCode Smoke Test\"",
|
|
78
|
-
"release:verify": "npm run clean:verify && npm test && npm run test:e2e && npm run validate && npm run pack:verify && npm run test:e2e:runtime",
|
|
79
|
-
"pack:verify": "node tests/e2e/verify-packed-consumer.mjs",
|
|
80
|
-
"pack:safe": "node internal/validate/pack-safe.mjs",
|
|
81
|
-
"validate:behavioral-contracts": "node internal/validate/validate-behavioral-contracts.mjs",
|
|
82
|
-
"validate:token-economy": "node internal/validate/validate-token-economy.mjs",
|
|
83
|
-
"validate:upgrade": "node internal/validate/validate-upgrade-path.mjs",
|
|
84
|
-
"validate:visual": "node internal/validate/validate-visual.mjs",
|
|
85
|
-
"validate:release-readiness": "node internal/validate/validate-release-readiness.mjs"
|
|
86
|
-
},
|
|
87
|
-
"devDependencies": {
|
|
88
|
-
"@playwright/test": "^1.60.0",
|
|
89
|
-
"@semantic-release/changelog": "^6.0.3",
|
|
90
|
-
"@semantic-release/git": "^10.0.1",
|
|
91
|
-
"@semantic-release/github": "^12.0.8",
|
|
92
|
-
"@semantic-release/npm": "^13.1.5",
|
|
93
|
-
"@vitest/coverage-v8": "^4.1.7",
|
|
94
|
-
"ajv": "^8.20.0",
|
|
95
|
-
"ajv-formats": "^3.0.1",
|
|
96
|
-
"axe-core": "^4.10.0",
|
|
97
|
-
"markdownlint-cli": "^0.49.0",
|
|
98
|
-
"playwright": "^1.60.0",
|
|
99
|
-
"semantic-release": "^25.0.3",
|
|
100
|
-
"vitest": "^4.1.7"
|
|
101
|
-
}
|
|
102
|
-
}
|
|
43
|
+
"CHANGELOG.md"
|
|
44
|
+
]
|
|
45
|
+
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import os from "node:os";
|
|
4
|
-
import crypto from "node:crypto";
|
|
1
|
+
import "./chunk-5WRI5ZAA.js";
|
|
5
2
|
|
|
3
|
+
// src/core/workspace/read-only-workspace.ts
|
|
4
|
+
import fs from "fs/promises";
|
|
5
|
+
import path from "path";
|
|
6
|
+
import os from "os";
|
|
7
|
+
import crypto from "crypto";
|
|
6
8
|
async function copyDirectory(src, dest) {
|
|
7
9
|
const entries = await fs.readdir(src, { withFileTypes: true });
|
|
8
10
|
for (const entry of entries) {
|
|
@@ -11,7 +13,6 @@ async function copyDirectory(src, dest) {
|
|
|
11
13
|
}
|
|
12
14
|
const srcPath = path.join(src, entry.name);
|
|
13
15
|
const destPath = path.join(dest, entry.name);
|
|
14
|
-
|
|
15
16
|
if (entry.isDirectory()) {
|
|
16
17
|
await fs.mkdir(destPath, { recursive: true });
|
|
17
18
|
await copyDirectory(srcPath, destPath);
|
|
@@ -20,13 +21,11 @@ async function copyDirectory(src, dest) {
|
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
|
-
|
|
24
24
|
async function captureHashSnapshot(dir) {
|
|
25
25
|
const snapshot = {};
|
|
26
26
|
await scanDir(dir, dir, snapshot);
|
|
27
27
|
return snapshot;
|
|
28
28
|
}
|
|
29
|
-
|
|
30
29
|
async function scanDir(baseDir, currentDir, snapshot) {
|
|
31
30
|
const entries = await fs.readdir(currentDir, { withFileTypes: true });
|
|
32
31
|
for (const entry of entries) {
|
|
@@ -35,7 +34,6 @@ async function scanDir(baseDir, currentDir, snapshot) {
|
|
|
35
34
|
}
|
|
36
35
|
const fullPath = path.join(currentDir, entry.name);
|
|
37
36
|
const relPath = path.relative(baseDir, fullPath);
|
|
38
|
-
|
|
39
37
|
if (entry.isDirectory()) {
|
|
40
38
|
await scanDir(baseDir, fullPath, snapshot);
|
|
41
39
|
} else if (entry.isFile()) {
|
|
@@ -44,24 +42,14 @@ async function scanDir(baseDir, currentDir, snapshot) {
|
|
|
44
42
|
const hash = crypto.createHash("sha256").update(content).digest("hex");
|
|
45
43
|
snapshot[relPath] = hash;
|
|
46
44
|
} catch {
|
|
47
|
-
// ignore
|
|
48
45
|
}
|
|
49
46
|
}
|
|
50
47
|
}
|
|
51
48
|
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Runs a function inside a temporary copy of the workspace.
|
|
55
|
-
* Mutating the workspace inside this temp directory will trigger a BLOCKED result.
|
|
56
|
-
*/
|
|
57
|
-
export async function runInReadOnlyWorkspace(originalCwd, runFn) {
|
|
49
|
+
async function runInReadOnlyWorkspace(originalCwd, runFn) {
|
|
58
50
|
const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "opencode-ro-"));
|
|
59
|
-
|
|
60
51
|
try {
|
|
61
|
-
// 1. Copy repository files recursively (excluding git/node_modules/tmp)
|
|
62
52
|
await copyDirectory(originalCwd, tempDir);
|
|
63
|
-
|
|
64
|
-
// 2. Write the required opencode.jsonc permission config file
|
|
65
53
|
const opencodeConfig = {
|
|
66
54
|
permission: {
|
|
67
55
|
edit: "deny",
|
|
@@ -80,16 +68,9 @@ export async function runInReadOnlyWorkspace(originalCwd, runFn) {
|
|
|
80
68
|
path.join(tempDir, "opencode.jsonc"),
|
|
81
69
|
JSON.stringify(opencodeConfig, null, 2)
|
|
82
70
|
);
|
|
83
|
-
|
|
84
|
-
// 3. Capture initial file hash snapshot
|
|
85
71
|
const snapshotBefore = await captureHashSnapshot(tempDir);
|
|
86
|
-
|
|
87
|
-
// 4. Execute the callback function inside the temp directory
|
|
88
72
|
const runResult = await runFn(tempDir);
|
|
89
|
-
|
|
90
|
-
// 5. Capture post-run snapshot and verify no file mutations occurred
|
|
91
73
|
const snapshotAfter = await captureHashSnapshot(tempDir);
|
|
92
|
-
|
|
93
74
|
const mutated = [];
|
|
94
75
|
for (const [file, hash] of Object.entries(snapshotAfter)) {
|
|
95
76
|
if (snapshotBefore[file] !== hash) {
|
|
@@ -97,11 +78,10 @@ export async function runInReadOnlyWorkspace(originalCwd, runFn) {
|
|
|
97
78
|
}
|
|
98
79
|
}
|
|
99
80
|
for (const file of Object.keys(snapshotBefore)) {
|
|
100
|
-
if (snapshotAfter[file] ===
|
|
81
|
+
if (snapshotAfter[file] === void 0) {
|
|
101
82
|
mutated.push(file);
|
|
102
83
|
}
|
|
103
84
|
}
|
|
104
|
-
|
|
105
85
|
if (mutated.length > 0) {
|
|
106
86
|
return {
|
|
107
87
|
success: false,
|
|
@@ -110,10 +90,13 @@ export async function runInReadOnlyWorkspace(originalCwd, runFn) {
|
|
|
110
90
|
eventCount: runResult.eventCount || 0
|
|
111
91
|
};
|
|
112
92
|
}
|
|
113
|
-
|
|
114
93
|
return runResult;
|
|
115
94
|
} finally {
|
|
116
|
-
|
|
117
|
-
|
|
95
|
+
await fs.rm(tempDir, { recursive: true, force: true }).catch(() => {
|
|
96
|
+
});
|
|
118
97
|
}
|
|
119
98
|
}
|
|
99
|
+
export {
|
|
100
|
+
runInReadOnlyWorkspace
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=read-only-workspace-PZBE7KAX.js.map
|
|
@@ -1,32 +1,42 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import {
|
|
2
|
+
EvidenceCollector,
|
|
3
|
+
QualityGuard,
|
|
4
|
+
ValidationPlanner,
|
|
5
|
+
VisualVerifier
|
|
6
|
+
} from "./chunk-6EMG6FAO.js";
|
|
7
|
+
import "./chunk-2AOV2ATY.js";
|
|
8
|
+
import "./chunk-5WRI5ZAA.js";
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
// src/cli/commands/validate.ts
|
|
11
|
+
import fs from "fs/promises";
|
|
12
|
+
import path from "path";
|
|
13
|
+
async function runValidate({
|
|
14
|
+
cwd = process.cwd(),
|
|
15
|
+
exitOnError = true,
|
|
16
|
+
taskSlug = null,
|
|
17
|
+
a11y = false,
|
|
18
|
+
visualDist = null,
|
|
19
|
+
port = 8080
|
|
20
|
+
}) {
|
|
9
21
|
console.log("--- Running Validation ---");
|
|
10
|
-
const qualityGuard = new QualityGuard({ cwd, taskSlug,
|
|
22
|
+
const qualityGuard = new QualityGuard({ cwd, taskSlug, evidencePolicy: "optional", riskLevel: "medium" });
|
|
11
23
|
const planner = new ValidationPlanner({ cwd, qualityGuard });
|
|
12
24
|
const tasks = await planner.plan("standard");
|
|
13
|
-
|
|
14
|
-
const collector = new EvidenceCollector({ cwd, timeout: 60000, taskSlug, mode: "standard" });
|
|
25
|
+
const collector = new EvidenceCollector({ cwd, timeout: 6e4, taskSlug, evidencePolicy: "optional" });
|
|
15
26
|
const results = [];
|
|
16
|
-
|
|
17
27
|
for (const task of tasks) {
|
|
18
28
|
console.log(`Running validation task: ${task.name}...`);
|
|
19
29
|
const res = collector.runTask(task);
|
|
20
30
|
results.push(res);
|
|
21
31
|
console.log(`- Status: ${res.status} (${res.summary})`);
|
|
22
32
|
}
|
|
23
|
-
|
|
24
33
|
let a11yResult = null;
|
|
25
34
|
if (a11y) {
|
|
26
35
|
if (!visualDist) {
|
|
27
36
|
throw new Error("Accessibility audit (--a11y) requires a target build directory specified via --visual-dist=<path>.");
|
|
28
37
|
}
|
|
29
|
-
console.log(
|
|
38
|
+
console.log(`
|
|
39
|
+
--- Running Accessibility Audit ---`);
|
|
30
40
|
console.log(`Serving ${visualDist} on port ${port}...`);
|
|
31
41
|
try {
|
|
32
42
|
const verifier = new VisualVerifier({ cwd, visualDist, port });
|
|
@@ -41,21 +51,17 @@ export async function runValidate({ cwd = process.cwd(), exitOnError = true, tas
|
|
|
41
51
|
throw err;
|
|
42
52
|
}
|
|
43
53
|
}
|
|
44
|
-
|
|
45
|
-
// Load future configuration if present
|
|
46
54
|
let config = {};
|
|
47
55
|
try {
|
|
48
56
|
const configContent = await fs.readFile(path.join(cwd, "ai-workflow.config.json"), "utf8");
|
|
49
57
|
config = JSON.parse(configContent);
|
|
50
|
-
} catch {
|
|
51
|
-
|
|
58
|
+
} catch {
|
|
59
|
+
}
|
|
52
60
|
const hasFailure = results.some((r) => ["FAIL", "BLOCKED", "FAIL_QUALITY_GATE"].includes(r.status));
|
|
53
|
-
|
|
54
61
|
let hasA11yFailure = false;
|
|
55
62
|
if (a11yResult) {
|
|
56
|
-
const criticalIsBlocker = true;
|
|
63
|
+
const criticalIsBlocker = true;
|
|
57
64
|
const seriousIsBlocker = config.a11y?.seriousAsBlocker === true;
|
|
58
|
-
|
|
59
65
|
if (criticalIsBlocker && a11yResult.critical.length > 0) {
|
|
60
66
|
hasA11yFailure = true;
|
|
61
67
|
console.error(`Accessibility FAILED: ${a11yResult.critical.length} critical accessibility violations detected.`);
|
|
@@ -69,13 +75,15 @@ export async function runValidate({ cwd = process.cwd(), exitOnError = true, tas
|
|
|
69
75
|
}
|
|
70
76
|
}
|
|
71
77
|
}
|
|
72
|
-
|
|
73
78
|
if (hasFailure || hasA11yFailure) {
|
|
74
79
|
console.log("\nValidation FAILED.");
|
|
75
80
|
if (exitOnError) process.exit(1);
|
|
76
81
|
return { passed: false, results, a11yResult };
|
|
77
82
|
}
|
|
78
|
-
|
|
79
83
|
console.log("\nValidation PASSED.");
|
|
80
84
|
return { passed: true, results, a11yResult };
|
|
81
85
|
}
|
|
86
|
+
export {
|
|
87
|
+
runValidate
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=validate-Q2NLLQ5G.js.map
|
package/AGENTS.md
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# AI Workflow Kit contributor contract
|
|
2
|
-
|
|
3
|
-
## Purpose
|
|
4
|
-
|
|
5
|
-
Deliver useful software through proportionate workflow, minimum diff, observed validation, and concise evidence.
|
|
6
|
-
|
|
7
|
-
## Non-negotiable safety
|
|
8
|
-
|
|
9
|
-
- Never implement on `main` or `master`.
|
|
10
|
-
- Preserve unrelated dirty work.
|
|
11
|
-
- Run existing relevant validation commands.
|
|
12
|
-
- Never report success after failed or unavailable required validation.
|
|
13
|
-
- Bound remediation and stop when no progress is made.
|
|
14
|
-
- Always await explicit conversational authorization from the human user in the chat before executing any codebase modification, Git commit, tagging, or remote push. Automated system approval hooks (e.g., artifact reviews) do not bypass this human-in-the-loop requirement.
|
|
15
|
-
- Remote push is only permitted on non-protected feature/maintenance branches (e.g. feat/*, fix/*, chore/*, docs/*) with explicit conversational authorization, and is strictly prohibited on protected branches like main or master.
|
|
16
|
-
|
|
17
|
-
## Routing & Delegation
|
|
18
|
-
|
|
19
|
-
Atlas routes. Nexus owns discovery, requirements, and spec authoring. Orion owns planning, PR sequencing, and release strategy. Astra implements substantial scoped work. Sage independently validates when risk or full mode justifies separation. Phoenix performs bounded remediation. Delegation must improve the result; do not create agent theatre or claim handoffs that did not occur.
|
|
20
|
-
|
|
21
|
-
## Modes
|
|
22
|
-
|
|
23
|
-
- quick: small change, targeted validation, short summary;
|
|
24
|
-
- standard: scoped feature, relevant validation, optional delegation;
|
|
25
|
-
- full: formal planning, specialist implementation, independent validation, persisted evidence.
|
|
26
|
-
|
|
27
|
-
## Evidence
|
|
28
|
-
|
|
29
|
-
Quick and standard work require only branch, changed areas, commands/results, and limitations in the handoff. Full/release/audit/security work may persist machine-generated evidence.
|
|
30
|
-
|
|
31
|
-
## Core Concept
|
|
32
|
-
|
|
33
|
-
AI Workflow is an npm CLI that installs agents, commands, skills, policies and templates into your repository.
|
|
34
|
-
It guides coding agents from request to implementation, validation and evidence. AI Workflow Kit preserves workflow integrity so coding agents cannot skip from request to code to success without an explicit implementation path, proportional validation, and final evidence.
|
package/CHANGELOG.md
DELETED
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
## [2.4.9] - 2026-06-28
|
|
2
|
-
|
|
3
|
-
### Added
|
|
4
|
-
- Created developer guide `docs/getting-started/authoring-custom-skills.md` for writing and integrating custom capability skills.
|
|
5
|
-
- Enhanced `dist-assets/docs/visual-validation-guide.md` with advanced Playwright session state authentication and Axe-core accessibility auditing.
|
|
6
|
-
|
|
7
|
-
### Fixed
|
|
8
|
-
- Mapped all legacy skill references (e.g. `tester`, `build-and-validate`) to v2 skill names across all prompts and runbooks templates.
|
|
9
|
-
- Removed obsolete third-party integration guides (`use-napkin-project-memory.md` and `use-linear-for-operational-planning.md`) from packaged runbooks.
|
|
10
|
-
- Removed `read_only_safety_verification.md` from the npm publish files list to reduce package size.
|
|
11
|
-
- Fixed MD029 markdown lint style violation in the visual validation guide.
|
|
12
|
-
|
|
13
|
-
## [2.4.8] - 2026-06-27
|
|
14
|
-
|
|
15
|
-
### Added
|
|
16
|
-
- Created 5 new specialized domain skills (`cyber-security`, `database`, `devops`, `localization`, and `performance`) under `.ai-workflow/opencode/skills/` to provide guidance on security, database design, pipelines, i18n, and profiling.
|
|
17
|
-
- Added unit tests for `identity.js`, `canonical-finalization.js`, and `branch-gate.js` exceptions to increase test coverage.
|
|
18
|
-
- Optimized route classifier to automatically trigger appropriate subagent and skill loading rules based on the intent context.
|
|
19
|
-
|
|
20
|
-
### Fixed
|
|
21
|
-
- Fixed vitest code coverage failures by adjusting thresholds and excludes.
|
|
22
|
-
|
|
23
|
-
## [2.4.7] - 2026-06-27
|
|
24
|
-
|
|
25
|
-
### Added
|
|
26
|
-
- Integrated `@vitest/coverage-v8` to compute code coverage, establishing a strict **80% minimum threshold** for lines, functions, branches, and statements in `vitest.config.js`.
|
|
27
|
-
- Added the `npm run test:coverage` script in `package.json` for easy local and CI coverage reporting.
|
|
28
|
-
- Created the official community Code of Conduct template at `.github/CODE_OF_CONDUCT.md` with maintainer contact method.
|
|
29
|
-
- Excluded the `coverage/` directory from git tracking in `.gitignore`.
|
|
30
|
-
|
|
31
|
-
### Fixed
|
|
32
|
-
- Mitigated shell injection risks in the `cli-remediation-executor.js` by removing the insecure `shell:true` parameter and spawning native subprocess commands directly via platform detection (`npm` on POSIX and `npm.cmd` on Windows).
|
|
33
|
-
- Fixed 3 failing unit tests in `visual-verifier.test.js` to align with the CSS variables flexibilization threshold (>200 chars) introduced in v2.4.6.
|
|
34
|
-
- Documented `ai-workflow clean` limitations regarding the absolute deletion of custom `opencode.jsonc` configs in `cli-reference.md` and `troubleshooting.md`.
|
|
35
|
-
|
|
36
|
-
### Changed
|
|
37
|
-
- Bumped and updated development dependencies (dev-dependencies group) to their latest stable versions for security and build stability.
|
|
38
|
-
|
|
39
|
-
## [2.4.6] - 2026-06-25
|
|
40
|
-
|
|
41
|
-
### Fixed
|
|
42
|
-
- Flexibilized Design System CSS variables check in `ArtifactFidelityGate` to only enforce the validation when CSS rules volume is substantial (>200 characters), preventing false-positive blocks on tiny or simple style additions.
|
|
43
|
-
|
|
44
|
-
## [2.4.5] - 2026-06-24
|
|
45
|
-
|
|
46
|
-
### Changed
|
|
47
|
-
- Refined Design System token validation to support both CSS custom property declarations and usages via `var()`, reducing false-positive quality gate blocks on minor style adjustments.
|
|
48
|
-
- Flexibilized `git push` policy to allow remote pushes to non-protected feature/maintenance branches upon explicit human authorization in the chat, keeping `main` and `master` branches strictly protected.
|
|
49
|
-
|
|
50
|
-
## [2.4.4] - 2026-06-24
|
|
51
|
-
|
|
52
|
-
### Added
|
|
53
|
-
- Added `clean` CLI command (`aw clean`) to cleanly de-initialize and remove AI Workflow files and symlinks from a project.
|
|
54
|
-
- Translated all E2E test titles and comments in the codebase to English for consistent localization.
|
|
55
|
-
|
|
56
|
-
## [2.4.3] - 2026-06-24
|
|
57
|
-
|
|
58
|
-
### Added
|
|
59
|
-
- Hardened agent prompt contract rules and safety gates for all 6 agents (Atlas, Nexus, Orion, Astra, Sage, Phoenix).
|
|
60
|
-
- Hardened workflow procedures and validation checks for core commands (validate, release, deploy, implement, spec-create).
|
|
61
|
-
- Enhanced all 19 default skills with stricter constraint and procedure parameters.
|
|
62
|
-
|
|
63
|
-
## [2.4.2] - 2026-06-21
|
|
64
|
-
|
|
65
|
-
### Added
|
|
66
|
-
- Registered `Frontend-Design-System-Specialist` subagent in `opencode.jsonc` templates and configurations.
|
|
67
|
-
- Updated `Astra` agent prompt contract to explicitly load `frontend-design-system` skill when active.
|
|
68
|
-
|
|
69
|
-
## [2.4.1] - 2026-06-21
|
|
70
|
-
|
|
71
|
-
### Fixed
|
|
72
|
-
- Hardened visual and accessibility quality gates.
|
|
73
|
-
- Enhanced `ArtifactFidelityGate` to check all skill folder path variations for `frontend-design-system`.
|
|
74
|
-
- Documented Playwright, browser, and Axe-core preconditions in README and quickstart documentation.
|
|
75
|
-
- Improved validation resiliency by warning instead of crashing when browser binaries are missing.
|
|
76
|
-
|
|
77
|
-
## [2.4.0] - 2026-06-20
|
|
78
|
-
|
|
79
|
-
### Added
|
|
80
|
-
- Native Visual Evidence capture in `collect-evidence` via `--visual-dist` and `--port` parameters, launching a static loopback server and capturing Chromium screenshots using Playwright.
|
|
81
|
-
- CSS/HTML Design System Gate validation in `ArtifactFidelityGate` that automatically runs when the `frontend-design-system` skill is loaded in the repository, checking for CSS custom properties, inline style density, CDN scripts, and semantic HTML layout tags.
|
|
82
|
-
- Native accessibility auditing command `npx aw validate --a11y` via Axe-core running inside Playwright, blocking critical violations and persisting reports in `.evidence/a11y/report.json`.
|
|
83
|
-
- Standard `frontend-design-system` skill (`.agents/skills/frontend-design-system/SKILL.md`) to guide Astra and other agents through visual hierarchy, spacing grids, theme palettes, accessible contrast, and output rules.
|
|
84
|
-
- Automated tests covering static loopback servers, Playwright screenshots, Axe-core checks, inline style gates, CSS tokens, and HTML semantics.
|
|
85
|
-
|
|
86
|
-
## [2.3.7] - 2026-06-20
|
|
87
|
-
|
|
88
|
-
### Changed
|
|
89
|
-
- Bumped version to 2.3.7.
|
|
90
|
-
|
|
91
|
-
## [2.3.6] - 2026-06-20
|
|
92
|
-
|
|
93
|
-
### Added
|
|
94
|
-
- Request-aware delivery decision and artifact fidelity gates (GREEN phase) to prevent false-positive completions in frontend/backend stack tasks.
|
|
95
|
-
- Hardened check for blocking delivery decisions in `ArtifactFidelityGate` and `Finalizer`.
|
|
96
|
-
- False-positive regression tests and release readiness audit documentation.
|
|
97
|
-
|
|
98
|
-
### Fixed
|
|
99
|
-
- Aligned WordPress root detection logic between `DeliveryDecisionEngine` and `ArtifactFidelityGate`.
|
|
100
|
-
- Corrected architecture and design patterns policy relative paths in the technical plan prompt.
|
|
101
|
-
- Normalized approved release decision string to `RELEASE_OR_DEPLOY_APPROVED`.
|
|
102
|
-
|
|
103
|
-
## [2.3.5] - 2026-06-20
|
|
104
|
-
|
|
105
|
-
### Fixed
|
|
106
|
-
- Corrected the governance policy relative path header in all standard skill Markdown files.
|
|
107
|
-
|
|
108
|
-
## [2.3.4] - 2026-06-20
|
|
109
|
-
|
|
110
|
-
### Fixed
|
|
111
|
-
- Corrected the mapping and resolution path of policies under `opencode/docs`.
|
|
112
|
-
|
|
113
|
-
## [2.3.3] - 2026-06-20
|
|
114
|
-
|
|
115
|
-
### Added
|
|
116
|
-
- First phase implementation of the Delivery Decision Engine and Artifact Fidelity Gate checking for correct technology stacks.
|
|
117
|
-
- Hardened PromptContracts and validation scripts for stack-aware quality checking.
|
|
118
|
-
|
|
119
|
-
## [2.3.2] - 2026-06-19
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
### Documentation
|
|
123
|
-
- Clarified first-time usage with `npx @williambeto/ai-workflow init`.
|
|
124
|
-
- Clarified local installed-package alias usage with `npx aw init`, `npx aw doctor`, and `npx aw run`.
|
|
125
|
-
|
|
126
|
-
### Notes
|
|
127
|
-
- No CLI behavior changed.
|
|
128
|
-
- No runtime behavior changed.
|
|
129
|
-
|
|
130
|
-
## [2.3.1] - 2026-06-18
|
|
131
|
-
|
|
132
|
-
### Fixed
|
|
133
|
-
- Enforced runtime actor selection for explicit actor routing.
|
|
134
|
-
- Prevented silent fallback to default runtime behavior when a selected specialized actor cannot be applied.
|
|
135
|
-
- Blocked specialized actor execution when the runtime does not support `--agent`.
|
|
136
|
-
- Added truthful ledger evidence for requested actor, selected actor, runtime requested actor and runtime applied actor.
|
|
137
|
-
- Hardened routing consistency validation across agents, runtime adapter and delegation ledger.
|
|
138
|
-
|
|
139
|
-
### Added
|
|
140
|
-
- Unit tests covering OpenCode runtime actor enforcement and fail-closed checks.
|
|
141
|
-
- E2E coverage for explicit actor routing, blocked fallbacks and default non-specialized execution.
|
|
142
|
-
- Updated routing consistency validation to catch unsupported actor execution returning success.
|
|
143
|
-
|
|
144
|
-
### Release
|
|
145
|
-
- Prepared locally only.
|
|
146
|
-
- Not published to npm.
|
|
147
|
-
- No git tag created.
|
|
148
|
-
- No remote push performed.
|
|
149
|
-
|
|
150
|
-
## [2.3.0] - 2026-06-16
|
|
151
|
-
|
|
152
|
-
### Added
|
|
153
|
-
- Isolated read-only workspace runner to prevent execution modifications from altering the original repository.
|
|
154
|
-
- Sage validation agent execution in full/deep task mode, logging events to the ledger and handling revalidation.
|
|
155
|
-
- Real OpenCode smoke test integration inside the `release:verify` suite.
|
|
156
|
-
- Scenario 17 in E2E tests verifying the complete multi-agent coordination loop (`Astra -> Sage -> Phoenix -> Sage`).
|
|
157
|
-
|
|
158
|
-
### Fixed
|
|
159
|
-
- Sequential state transitions for read-only runs (`IMPLEMENTING -> IMPLEMENTED -> VALIDATING -> COMPLETED`).
|
|
160
|
-
- Snapshot comparison logic to correctly target `.snapshot.files` and compare `.sha256` properties.
|
|
161
|
-
- Bypassed physical writing of ledger histories and handoff markdown files during read-only executions.
|
|
162
|
-
- Injected mock OpenCode environment configuration inside `verify-packed-consumer.mjs` for autonomous sandbox runs.
|
|
163
|
-
|
|
164
|
-
## [2.0.5] - 2026-06-08
|
|
165
|
-
|
|
166
|
-
### Fixed
|
|
167
|
-
|
|
168
|
-
- Locked standard/full Atlas completion behind current-task Sage, Evidence Collector, and QualityGuard execution.
|
|
169
|
-
- Rejected direct Atlas `PASS`, user-deferred `/validate`, self-validation, and missing executable finalizer paths.
|
|
170
|
-
- Added canonical cross-field validation for branch evidence, owners, artifacts, truthfulness, collector/final status, and Phoenix/Sage consistency.
|
|
171
|
-
- Strengthened fictitious-product claim detection for unsupported market superlatives, pricing, SLA/support, API, batch, and export capabilities.
|
|
172
|
-
- Added regression tests for runtime completion lock and internally inconsistent canonical results.
|
|
173
|
-
|
|
174
|
-
## [2.0.3] - 2026-06-08
|
|
175
|
-
|
|
176
|
-
### Added
|
|
177
|
-
|
|
178
|
-
- Lightweight workflow profiles separating execution mode from domain quality guidance.
|
|
179
|
-
- Deterministic profile routing for frontend product, frontend utility, backend API, refactor, documentation, and security review work.
|
|
180
|
-
- Objective owner-completion contract with one bounded resume before `BLOCKED`.
|
|
181
|
-
- Consumer workflow profile documentation.
|
|
182
|
-
|
|
183
|
-
### Changed
|
|
184
|
-
|
|
185
|
-
- Visual validation now uses objective rendered checks instead of subjective labels or benchmark comparison.
|
|
186
|
-
- Frontend product and utility profiles load both frontend and UI/UX skills without imposing a fixed SaaS page template.
|
|
187
|
-
- Product Truthfulness accepts clear page-level conceptual labels for non-authoritative commercial concepts while keeping official/live/security/SLA claims strict.
|
|
188
|
-
- Atlas handoff guidance is shorter and outcome-first.
|
|
189
|
-
|
|
190
|
-
# Changelog
|
|
191
|
-
|
|
192
|
-
## [2.0.4] - 2026-06-08
|
|
193
|
-
|
|
194
|
-
### Fixed
|
|
195
|
-
|
|
196
|
-
- Removed circular finalization evidence by deriving canonical results from executed policy checks and persisting them in `EVIDENCE.json`.
|
|
197
|
-
- Enforced all canonical standard/full final response fields from one machine-readable contract.
|
|
198
|
-
- Persisted and rendered delegation owners, loaded skills, delivery artifacts, Sage revalidation, Evidence Collector, QualityGuard, Product Truthfulness, finalizer, and terminal status.
|
|
199
|
-
- Required structured TypeScript waivers with an explicit source and concrete constraint.
|
|
200
|
-
- Added regression coverage for omitted fields, direct finalizer bypass, remediation without Sage revalidation, and canonical status spelling.
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
## 2.0.2
|
|
204
|
-
|
|
205
|
-
### Fixed
|
|
206
|
-
|
|
207
|
-
- Enforced mode-specific final delivery artifacts so `standard` cannot pass with `delivery-summary.md`.
|
|
208
|
-
- Added mandatory finalization evidence for collector, QualityGuard, Product Truthfulness, delegation, and finalizer identity.
|
|
209
|
-
- Prevented `PASS` when canonical finalization fields are missing or inconsistent.
|
|
210
|
-
- Added direct tests for standard artifact mismatch and finalization evidence.
|
|
211
|
-
- Kept bounded remediation responsible for correcting final-gate failures before promotion.
|
|
212
|
-
|
|
213
|
-
## 2.0.1
|
|
214
|
-
|
|
215
|
-
### Fixed
|
|
216
|
-
|
|
217
|
-
- Added bounded, progress-aware remediation for recoverable quality and delegation gates.
|
|
218
|
-
- Prevented unresolved gate failures from being downgraded to `PASS_WITH_NOTES`.
|
|
219
|
-
- Added hard remediation limits by execution mode and blocking on repeated/no-progress findings.
|
|
220
|
-
- Synchronized the root evidence contract with the canonical distributed contract.
|
|
221
|
-
- Added direct coverage for implementation documentation and remediation lifecycle behavior.
|
|
222
|
-
|
|
223
|
-
## 2.0.0
|
|
224
|
-
|
|
225
|
-
### Added
|
|
226
|
-
|
|
227
|
-
- OpenCode-first workflow with six primary ownership roles.
|
|
228
|
-
- Proportional `quick`, `standard`, and `full` delivery modes.
|
|
229
|
-
- Persisted delivery artifacts and executable evidence collection.
|
|
230
|
-
- Branch recovery, quality gates, delegation statuses, Product Truthfulness, and safe packaging.
|
|
231
|
-
- TypeScript default for new frontend applications unless explicitly waived.
|
|
232
|
-
- Consumer quickstart, runtime compatibility guidance, and v2 upgrade documentation.
|
|
233
|
-
- Optional Codex, Claude Code, and Gemini adapter assets.
|
|
234
|
-
|
|
235
|
-
### Changed
|
|
236
|
-
|
|
237
|
-
- Public version identity is now aligned with the npm upgrade path from `1.x` to `2.0.0`.
|
|
238
|
-
- Active documentation describes only the current 2.0 product and supported migration path.
|
|
239
|
-
- Repository-maintenance paths are separated from consumer-facing paths.
|
|
240
|
-
- The initial `2.0.0` rollout uses the npm `next` dist-tag without moving `latest`.
|
|
241
|
-
|
|
242
|
-
### Removed
|
|
243
|
-
|
|
244
|
-
- Obsolete pre-2.0 runtime guidance, taxonomies, aliases, package paths, and intermediate release-candidate documentation.
|
|
245
|
-
|
|
246
|
-
## Previous public releases
|
|
247
|
-
|
|
248
|
-
The previous npm line ends at `1.19.1`. Detailed historical changes remain available in Git history and GitHub Releases.
|
|
249
|
-
|
|
250
|
-
## 2.1.0
|
|
251
|
-
|
|
252
|
-
### Changed
|
|
253
|
-
|
|
254
|
-
- Recovered the original product direction: proportionate workflows, useful software, and concise evidence.
|
|
255
|
-
- Kept protected-branch enforcement, required validation execution, bounded remediation, and false-success prevention as non-negotiable guardrails.
|
|
256
|
-
- Removed mandatory canonical response fields, owner JSON, fixed delivery filenames, and persisted evidence from quick/standard work.
|
|
257
|
-
- Simplified Atlas to route and coordinate without forcing multi-agent ceremony.
|
|
258
|
-
- Simplified QualityGuard to objective branch, validation, documentation, UI-evidence, and full-mode persistence checks.
|
|
259
|
-
- Replaced keyword-driven Product Truthfulness enforcement with semantic guidance.
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 AI Workflow Kit contributors
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
package/PUBLISH_MANIFEST.json
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "ai-workflow-publish-manifest",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"layers": {
|
|
5
|
-
"core": [
|
|
6
|
-
"bin/**",
|
|
7
|
-
"src/**",
|
|
8
|
-
"package.json",
|
|
9
|
-
"opencode.jsonc"
|
|
10
|
-
],
|
|
11
|
-
"assets": [
|
|
12
|
-
"dist-assets/skills/**",
|
|
13
|
-
"dist-assets/agents/**",
|
|
14
|
-
"dist-assets/commands/**",
|
|
15
|
-
"dist-assets/prompts/**",
|
|
16
|
-
"dist-assets/templates/**",
|
|
17
|
-
"dist-assets/schemas/**",
|
|
18
|
-
"dist-assets/runbooks/**",
|
|
19
|
-
"dist-assets/harness/**",
|
|
20
|
-
"dist-assets/docs/**",
|
|
21
|
-
"dist-assets/examples/**",
|
|
22
|
-
"dist-assets/AGENTS.md"
|
|
23
|
-
]
|
|
24
|
-
},
|
|
25
|
-
"exclude": [
|
|
26
|
-
"internal/**",
|
|
27
|
-
"**/tests/**",
|
|
28
|
-
"**/evidence/**",
|
|
29
|
-
"**/*.original.md",
|
|
30
|
-
".git/**",
|
|
31
|
-
".ai-workflow/**",
|
|
32
|
-
"node_modules/**"
|
|
33
|
-
]
|
|
34
|
-
}
|