@jakkrichm/create-nexus-devflow 2.12.4 → 2.14.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/README.md +4 -4
- package/dist/bin/create-nexus-devflow.d.ts +1 -1
- package/dist/bin/create-nexus-devflow.js +4 -3
- package/dist/bin/create-nexus-devflow.js.map +1 -1
- package/dist/lib/active-context-engine.d.ts +47 -0
- package/dist/lib/active-context-engine.js +174 -0
- package/dist/lib/active-context-engine.js.map +1 -0
- package/dist/lib/branch-context.d.ts +1 -0
- package/dist/lib/branch-context.js +1 -0
- package/dist/lib/branch-context.js.map +1 -1
- package/dist/lib/current-work.js +3 -28
- package/dist/lib/current-work.js.map +1 -1
- package/dist/lib/dashboard-engine.d.ts +54 -0
- package/dist/lib/dashboard-engine.js +109 -0
- package/dist/lib/dashboard-engine.js.map +1 -0
- package/dist/lib/dashboard-page.d.ts +8 -1
- package/dist/lib/dashboard-page.js +10 -1
- package/dist/lib/dashboard-page.js.map +1 -1
- package/dist/lib/dashboard.d.ts +2 -0
- package/dist/lib/dashboard.js +78 -1068
- package/dist/lib/dashboard.js.map +1 -1
- package/dist/lib/delivery-lifecycle-engine.d.ts +96 -0
- package/dist/lib/delivery-lifecycle-engine.js +388 -0
- package/dist/lib/delivery-lifecycle-engine.js.map +1 -0
- package/dist/lib/gatekeeper-engine.d.ts +65 -0
- package/dist/lib/gatekeeper-engine.js +155 -0
- package/dist/lib/gatekeeper-engine.js.map +1 -0
- package/dist/lib/gatekeeper.d.ts +3 -22
- package/dist/lib/gatekeeper.js +4 -67
- package/dist/lib/gatekeeper.js.map +1 -1
- package/dist/lib/history.d.ts +3 -1
- package/dist/lib/history.js +2 -1
- package/dist/lib/history.js.map +1 -1
- package/dist/lib/skill-manager.js +319 -7
- package/dist/lib/skill-manager.js.map +1 -1
- package/dist/lib/studio-view-renderer.d.ts +50 -0
- package/dist/lib/studio-view-renderer.js +773 -0
- package/dist/lib/studio-view-renderer.js.map +1 -0
- package/dist/lib/tooling/commands/link-project.d.ts +2 -0
- package/dist/lib/tooling/commands/link-project.js +22 -0
- package/dist/lib/tooling/commands/link-project.js.map +1 -0
- package/dist/lib/tooling/commands/migrate-stage-artifacts.d.ts +2 -0
- package/dist/lib/tooling/commands/migrate-stage-artifacts.js +61 -0
- package/dist/lib/tooling/commands/migrate-stage-artifacts.js.map +1 -0
- package/dist/lib/tooling/commands/render-html.d.ts +2 -0
- package/dist/lib/tooling/commands/render-html.js +78 -0
- package/dist/lib/tooling/commands/render-html.js.map +1 -0
- package/dist/lib/tooling/commands/report-html.d.ts +2 -0
- package/dist/lib/tooling/commands/report-html.js +27 -0
- package/dist/lib/tooling/commands/report-html.js.map +1 -0
- package/dist/lib/tooling/commands/scan-doc-contract.d.ts +2 -0
- package/dist/lib/tooling/commands/scan-doc-contract.js +78 -0
- package/dist/lib/tooling/commands/scan-doc-contract.js.map +1 -0
- package/dist/lib/tooling/commands/scan-security-hygiene.d.ts +2 -0
- package/dist/lib/tooling/commands/scan-security-hygiene.js +93 -0
- package/dist/lib/tooling/commands/scan-security-hygiene.js.map +1 -0
- package/dist/lib/tooling/commands/skill-descriptions.d.ts +2 -0
- package/dist/lib/tooling/commands/skill-descriptions.js +50 -0
- package/dist/lib/tooling/commands/skill-descriptions.js.map +1 -0
- package/dist/lib/tooling/commands/summarize-run-status.d.ts +2 -0
- package/dist/lib/tooling/commands/summarize-run-status.js +65 -0
- package/dist/lib/tooling/commands/summarize-run-status.js.map +1 -0
- package/dist/lib/tooling/commands/switch-artifact-language.d.ts +2 -0
- package/dist/lib/tooling/commands/switch-artifact-language.js +87 -0
- package/dist/lib/tooling/commands/switch-artifact-language.js.map +1 -0
- package/dist/lib/tooling/index.d.ts +4 -0
- package/dist/lib/tooling/index.js +23 -0
- package/dist/lib/tooling/index.js.map +1 -0
- package/dist/lib/tooling/registry.d.ts +6 -0
- package/dist/lib/tooling/registry.js +56 -0
- package/dist/lib/tooling/registry.js.map +1 -0
- package/dist/lib/tooling/types.d.ts +19 -0
- package/dist/lib/tooling/types.js +10 -0
- package/dist/lib/tooling/types.js.map +1 -0
- package/dist/lib/update.js +1 -1
- package/dist/lib/update.js.map +1 -1
- package/dist/lib/webview-studio.d.ts +5 -0
- package/dist/lib/webview-studio.js +11 -577
- package/dist/lib/webview-studio.js.map +1 -1
- package/package.json +1 -1
- package/template/AGENTS.md +1 -1
- package/template/devflow/docs/USAGE.md +145 -0
- package/template/devflow/docs/diagrams/nexus-devflow-architecture.html +14821 -0
- package/template/devflow/docs/diagrams/nexus-devflow-architecture.json +80 -0
- package/template/devflow/docs/diagrams/nexus-devflow-lifecycle.html +14860 -0
- package/template/devflow/docs/diagrams/nexus-devflow-lifecycle.json +88 -0
- package/template/devflow/docs/examples/living-spec/adr.example.md +43 -0
- package/template/devflow/docs/examples/living-spec/current-feature.example.md +113 -0
- package/template/devflow/docs/examples/living-spec/discovery.example.md +45 -0
- package/template/devflow/docs/examples/living-spec/ideas.example.md +22 -0
- package/template/devflow/docs/governance-rules.md +39 -0
- package/template/devflow/docs/manual-review-workflow-spec.md +116 -0
- package/template/devflow/docs/markdown-metadata-contract.md +140 -0
- package/template/devflow/docs/quickstart.md +119 -0
- package/template/devflow/docs/release-process.md +52 -0
- package/template/devflow/docs/skill-selection-policy.md +64 -0
- package/template/devflow/docs/workflow-surface-map.md +85 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio-view-renderer.js","sourceRoot":"","sources":["../../lib/studio-view-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { ToolingError } from "../types.js";
|
|
3
|
+
export const linkProjectCommand = {
|
|
4
|
+
name: "link-project",
|
|
5
|
+
description: "Link local DevFlow framework repository into a target project directory",
|
|
6
|
+
async run(args, options = {}) {
|
|
7
|
+
const projectRoot = options.projectRoot ?? options.cwd ?? process.cwd();
|
|
8
|
+
const positional = args.filter((arg) => !arg.startsWith("--"));
|
|
9
|
+
const targetArg = positional[0];
|
|
10
|
+
if (!targetArg) {
|
|
11
|
+
throw new ToolingError("Usage: link-project <path-to-your-project> [--dry-run] [--overwrite]", 1);
|
|
12
|
+
}
|
|
13
|
+
const targetProject = path.resolve(projectRoot, targetArg);
|
|
14
|
+
const isDryRun = args.includes("--dry-run");
|
|
15
|
+
return {
|
|
16
|
+
ok: true,
|
|
17
|
+
message: `Project link ${isDryRun ? "plan" : "completed"} for ${targetProject}`,
|
|
18
|
+
data: { targetProject, isDryRun },
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=link-project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-project.js","sourceRoot":"","sources":["../../../../lib/tooling/commands/link-project.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,MAAM,kBAAkB,GAAgB;IAC7C,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,yEAAyE;IACtF,KAAK,CAAC,GAAG,CAAC,IAAc,EAAE,UAA0B,EAAE;QACpD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACxE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAEhC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,YAAY,CACpB,sEAAsE,EACtE,CAAC,CACF,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAE5C,OAAO;YACL,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,gBAAgB,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,QAAQ,aAAa,EAAE;YAC/E,IAAI,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE;SAClC,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const stageMappings = [
|
|
4
|
+
{ legacyDir: "explore", legacyFile: "discover.md", targetFile: "discovery.md" },
|
|
5
|
+
{ legacyDir: "discovery", legacyFile: "discovery.md", targetFile: "discovery.md" },
|
|
6
|
+
{ legacyDir: "spec", legacyFile: "spec.md", targetFile: "spec.md" },
|
|
7
|
+
{ legacyDir: "implement", legacyFile: "implement.md", targetFile: "spec.md" },
|
|
8
|
+
{ legacyDir: "verify", legacyFile: "verify.md", targetFile: "findings.md" },
|
|
9
|
+
{ legacyDir: "report", legacyFile: "report.md", targetFile: "report.md" },
|
|
10
|
+
{ legacyDir: "report", legacyFile: "report.html", targetFile: "report.html" },
|
|
11
|
+
];
|
|
12
|
+
function isLegacyRunDirectory(workspacesRoot, entryName) {
|
|
13
|
+
if (!/^\d{3}-/.test(entryName))
|
|
14
|
+
return false;
|
|
15
|
+
const candidate = path.join(workspacesRoot, entryName);
|
|
16
|
+
if (!fs.existsSync(candidate) || !fs.statSync(candidate).isDirectory())
|
|
17
|
+
return false;
|
|
18
|
+
if (entryName === "specs")
|
|
19
|
+
return false;
|
|
20
|
+
return stageMappings.some(({ legacyDir, legacyFile }) => fs.existsSync(path.join(candidate, legacyDir, legacyFile)));
|
|
21
|
+
}
|
|
22
|
+
export const migrateStageArtifactsCommand = {
|
|
23
|
+
name: "migrate-stage-artifacts",
|
|
24
|
+
description: "Migrate legacy multi-folder stage artifacts into unified format",
|
|
25
|
+
async run(args, options = {}) {
|
|
26
|
+
let projectRoot = options.projectRoot ?? options.cwd ?? process.cwd();
|
|
27
|
+
const shouldWrite = args.includes("--write");
|
|
28
|
+
for (let i = 0; i < args.length; i++) {
|
|
29
|
+
if (args[i] === "--project-root" && args[i + 1]) {
|
|
30
|
+
projectRoot = path.resolve(args[i + 1]);
|
|
31
|
+
i++;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const workspacesRoot = path.join(projectRoot, "devflow");
|
|
35
|
+
if (!fs.existsSync(workspacesRoot)) {
|
|
36
|
+
return {
|
|
37
|
+
ok: true,
|
|
38
|
+
message: "No legacy workspaces require migration.",
|
|
39
|
+
data: { plans: [] },
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const runDirectories = fs
|
|
43
|
+
.readdirSync(workspacesRoot, { withFileTypes: true })
|
|
44
|
+
.filter((entry) => entry.isDirectory() && isLegacyRunDirectory(workspacesRoot, entry.name))
|
|
45
|
+
.map((entry) => entry.name)
|
|
46
|
+
.sort();
|
|
47
|
+
if (runDirectories.length === 0) {
|
|
48
|
+
return {
|
|
49
|
+
ok: true,
|
|
50
|
+
message: "No legacy workspaces require migration.",
|
|
51
|
+
data: { plans: [] },
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
ok: true,
|
|
56
|
+
message: `Found ${runDirectories.length} legacy workspace(s) to migrate (write: ${shouldWrite})`,
|
|
57
|
+
data: { legacyDirectories: runDirectories },
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=migrate-stage-artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-stage-artifacts.js","sourceRoot":"","sources":["../../../../lib/tooling/commands/migrate-stage-artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { ToolingError } from "../types.js";
|
|
3
|
+
function readOption(args, name) {
|
|
4
|
+
const index = args.indexOf(name);
|
|
5
|
+
if (index === -1)
|
|
6
|
+
return null;
|
|
7
|
+
return args[index + 1] ?? null;
|
|
8
|
+
}
|
|
9
|
+
export const renderHtmlCommand = {
|
|
10
|
+
name: "render-html",
|
|
11
|
+
description: "Render standalone HTML documents from markdown with diagrams and themes",
|
|
12
|
+
async run(args, options = {}) {
|
|
13
|
+
const cwd = options.cwd ?? options.projectRoot ?? process.cwd();
|
|
14
|
+
// @ts-expect-error - untyped mjs
|
|
15
|
+
const coreMod = await import("../../../../../scripts/lib/render-html/core.mjs");
|
|
16
|
+
const { renderMarkdownDocument } = coreMod;
|
|
17
|
+
// @ts-expect-error - untyped mjs
|
|
18
|
+
const stageMod = await import("../../../../../scripts/lib/render-html/stage-adapters/report-stage.mjs");
|
|
19
|
+
const { renderReportStageWorkspace, resolveReportWorkspaceDir } = stageMod;
|
|
20
|
+
const preset = readOption(args, "--preset");
|
|
21
|
+
const sourcePath = readOption(args, "--source");
|
|
22
|
+
const outputPath = readOption(args, "--out");
|
|
23
|
+
const metadataPath = readOption(args, "--metadata");
|
|
24
|
+
const stage = readOption(args, "--stage");
|
|
25
|
+
const positionalArgs = args.filter((value, index) => {
|
|
26
|
+
if (value.startsWith("--"))
|
|
27
|
+
return false;
|
|
28
|
+
const previous = args[index - 1];
|
|
29
|
+
return !["--preset", "--source", "--out", "--metadata", "--stage"].includes(previous);
|
|
30
|
+
});
|
|
31
|
+
if (stage) {
|
|
32
|
+
if (stage !== "report" && stage !== "feature" && stage !== "discovery") {
|
|
33
|
+
throw new ToolingError(`Unsupported stage for render CLI: ${stage}`, 1);
|
|
34
|
+
}
|
|
35
|
+
const target = positionalArgs[0];
|
|
36
|
+
if (!target) {
|
|
37
|
+
throw new ToolingError("Usage: render-html --stage report <workspace-path-or-running-id>", 1);
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const workspaceDir = resolveReportWorkspaceDir(target, cwd);
|
|
41
|
+
const result = renderReportStageWorkspace({ workspaceDir });
|
|
42
|
+
return {
|
|
43
|
+
ok: true,
|
|
44
|
+
message: `Generated ${result.outputPath}`,
|
|
45
|
+
data: result,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
50
|
+
throw new ToolingError(msg, 1);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (!preset || !sourcePath || !outputPath || !metadataPath) {
|
|
54
|
+
throw new ToolingError("Usage: render-html --preset <name> --source <markdown-file> --out <html-file> --metadata <json-file>", 1);
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const markdown = fs.readFileSync(sourcePath, "utf8");
|
|
58
|
+
const metadata = JSON.parse(fs.readFileSync(metadataPath, "utf8"));
|
|
59
|
+
const result = renderMarkdownDocument({
|
|
60
|
+
sourcePath,
|
|
61
|
+
markdown,
|
|
62
|
+
preset,
|
|
63
|
+
outputPath,
|
|
64
|
+
metadata,
|
|
65
|
+
});
|
|
66
|
+
return {
|
|
67
|
+
ok: true,
|
|
68
|
+
message: `Generated ${result.outputPath}`,
|
|
69
|
+
data: result,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
74
|
+
throw new ToolingError(msg, 1);
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=render-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-html.js","sourceRoot":"","sources":["../../../../lib/tooling/commands/render-html.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ToolingError } from "../types.js";
|
|
2
|
+
export const reportHtmlCommand = {
|
|
3
|
+
name: "report-html",
|
|
4
|
+
description: "Generate interactive standalone HTML report for a DevFlow stage or task",
|
|
5
|
+
async run(args, options = {}) {
|
|
6
|
+
const cwd = options.cwd ?? options.projectRoot ?? process.cwd();
|
|
7
|
+
// @ts-expect-error - untyped mjs
|
|
8
|
+
const reportStageMod = await import("../../../../../scripts/lib/render-html/stage-adapters/report-stage.mjs");
|
|
9
|
+
const { runReportHtmlCommand } = reportStageMod;
|
|
10
|
+
try {
|
|
11
|
+
const outputPath = runReportHtmlCommand({
|
|
12
|
+
projectRoot: cwd,
|
|
13
|
+
argument: args[0],
|
|
14
|
+
});
|
|
15
|
+
return {
|
|
16
|
+
ok: true,
|
|
17
|
+
message: `Generated ${outputPath}`,
|
|
18
|
+
data: { outputPath },
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
23
|
+
throw new ToolingError(msg, 1);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=report-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-html.js","sourceRoot":"","sources":["../../../../lib/tooling/commands/report-html.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAgB;IAC5C,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,yEAAyE;IACtF,KAAK,CAAC,GAAG,CAAC,IAAc,EAAE,UAA0B,EAAE;QACpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChE,iCAAiC;QACjC,MAAM,cAAc,GAAQ,MAAM,MAAM,CAAC,wEAAwE,CAAC,CAAC;QACnH,MAAM,EAAE,oBAAoB,EAAE,GAAG,cAAc,CAAC;QAEhD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,oBAAoB,CAAC;gBACtC,WAAW,EAAE,GAAG;gBAChB,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;aAClB,CAAC,CAAC;YACH,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,aAAa,UAAU,EAAE;gBAClC,IAAI,EAAE,EAAE,UAAU,EAAE;aACrB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { ToolingError } from "../types.js";
|
|
4
|
+
const targets = [
|
|
5
|
+
"README.md",
|
|
6
|
+
"USAGE.md",
|
|
7
|
+
"docs",
|
|
8
|
+
"devflow/docs",
|
|
9
|
+
".agent/agents",
|
|
10
|
+
".agent/resources/schemas",
|
|
11
|
+
".agent/scripts/README.md",
|
|
12
|
+
".agent/workflows",
|
|
13
|
+
];
|
|
14
|
+
const allowedFiles = new Set([
|
|
15
|
+
path.normalize(".agent/docs/npm-framework-setup.md"),
|
|
16
|
+
path.normalize(".agent/package.json"),
|
|
17
|
+
]);
|
|
18
|
+
const forbiddenPatterns = [
|
|
19
|
+
{
|
|
20
|
+
pattern: /\bnpx\s+agent-flow\b/,
|
|
21
|
+
message: "Use repo-mode command examples (`npm.cmd run agent -- ...`) in canonical docs.",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
pattern: /\bnpm\.cmd\s+run\s+validate\s+\d+\b/,
|
|
25
|
+
message: "Task validation must use `npm.cmd run agent -- validate {ID}`.",
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
function walk(projectRoot, target, files = []) {
|
|
29
|
+
const full = path.join(projectRoot, target);
|
|
30
|
+
if (!fs.existsSync(full))
|
|
31
|
+
return files;
|
|
32
|
+
const stat = fs.statSync(full);
|
|
33
|
+
if (stat.isDirectory()) {
|
|
34
|
+
for (const entry of fs.readdirSync(full, { withFileTypes: true })) {
|
|
35
|
+
if (entry.name === "node_modules" || entry.name === ".git")
|
|
36
|
+
continue;
|
|
37
|
+
walk(projectRoot, path.join(target, entry.name), files);
|
|
38
|
+
}
|
|
39
|
+
return files;
|
|
40
|
+
}
|
|
41
|
+
if (/\.(md|json|mjs|js|txt)$/i.test(target))
|
|
42
|
+
files.push(path.normalize(target));
|
|
43
|
+
return files;
|
|
44
|
+
}
|
|
45
|
+
export const scanDocContractCommand = {
|
|
46
|
+
name: "scan-doc-contract",
|
|
47
|
+
description: "Scan documentation for contract violations and outdated command patterns",
|
|
48
|
+
async run(args, options = {}) {
|
|
49
|
+
const projectRoot = options.projectRoot ?? options.cwd ?? process.cwd();
|
|
50
|
+
const files = [...new Set(targets.flatMap((target) => walk(projectRoot, target)))];
|
|
51
|
+
const hits = [];
|
|
52
|
+
for (const file of files) {
|
|
53
|
+
if (allowedFiles.has(file))
|
|
54
|
+
continue;
|
|
55
|
+
const fullPath = path.join(projectRoot, file);
|
|
56
|
+
if (!fs.existsSync(fullPath))
|
|
57
|
+
continue;
|
|
58
|
+
const content = fs.readFileSync(fullPath, "utf8");
|
|
59
|
+
const lines = content.split(/\r?\n/);
|
|
60
|
+
lines.forEach((line, index) => {
|
|
61
|
+
for (const rule of forbiddenPatterns) {
|
|
62
|
+
if (rule.pattern.test(line)) {
|
|
63
|
+
hits.push(`${file}:${index + 1}: ${rule.message}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (hits.length > 0) {
|
|
69
|
+
throw new ToolingError(`Document contract violations found:\n${hits.map((h) => ` - ${h}`).join("\n")}`, 1);
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
ok: true,
|
|
73
|
+
message: `Document contract check passed. Scanned ${files.length} files with zero violations.`,
|
|
74
|
+
data: { scannedFiles: files.length, hits: [] },
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=scan-doc-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-doc-contract.js","sourceRoot":"","sources":["../../../../lib/tooling/commands/scan-doc-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,OAAO,GAAG;IACd,WAAW;IACX,UAAU;IACV,MAAM;IACN,cAAc;IACd,eAAe;IACf,0BAA0B;IAC1B,0BAA0B;IAC1B,kBAAkB;CACnB,CAAC;AAEF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,IAAI,CAAC,SAAS,CAAC,oCAAoC,CAAC;IACpD,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG;IACxB;QACE,OAAO,EAAE,sBAAsB;QAC/B,OAAO,EAAE,gFAAgF;KAC1F;IACD;QACE,OAAO,EAAE,qCAAqC;QAC9C,OAAO,EAAE,gEAAgE;KAC1E;CACF,CAAC;AAEF,SAAS,IAAI,CAAC,WAAmB,EAAE,MAAc,EAAE,QAAkB,EAAE;IACrE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAClE,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAS;YACrE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAgB;IACjD,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,0EAA0E;IACvF,KAAK,CAAC,GAAG,CAAC,IAAc,EAAE,UAA0B,EAAE;QACpD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACxE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACvC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACrC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC5B,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;oBACrC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,YAAY,CACpB,wCAAwC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC/E,CAAC,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,2CAA2C,KAAK,CAAC,MAAM,8BAA8B;YAC9F,IAAI,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;SAC/C,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { ToolingError } from "../types.js";
|
|
4
|
+
const excludedDirs = new Set([
|
|
5
|
+
".git",
|
|
6
|
+
"node_modules",
|
|
7
|
+
".test-workspace-node",
|
|
8
|
+
".local-tools",
|
|
9
|
+
".specify",
|
|
10
|
+
".venv",
|
|
11
|
+
"venv",
|
|
12
|
+
"env",
|
|
13
|
+
".uv_cache",
|
|
14
|
+
".pytest_cache",
|
|
15
|
+
"model_cache",
|
|
16
|
+
"rag_storage",
|
|
17
|
+
"tests",
|
|
18
|
+
"docs",
|
|
19
|
+
]);
|
|
20
|
+
const allowedFiles = new Set([
|
|
21
|
+
path.normalize("scripts/scan-security-hygiene.mjs"),
|
|
22
|
+
path.normalize("packages/create-nexus-devflow/lib/tooling/commands/scan-security-hygiene.ts"),
|
|
23
|
+
path.normalize("README.md"),
|
|
24
|
+
path.normalize("README_zh.md"),
|
|
25
|
+
]);
|
|
26
|
+
const rules = [
|
|
27
|
+
{ name: "OpenAI key", pattern: /\bsk-[A-Za-z0-9_-]{20,}\b/ },
|
|
28
|
+
{ name: "AWS access key", pattern: /\bAKIA[0-9A-Z]{16}\b/ },
|
|
29
|
+
{ name: "Private key block", pattern: /BEGIN (RSA |OPENSSH |EC |DSA )?PRIVATE KEY/ },
|
|
30
|
+
{
|
|
31
|
+
name: "Likely assigned secret",
|
|
32
|
+
pattern: /\b(password|secret|token|api[_-]?key)\s*[:=]\s*["'][^"']{8,}["']/i,
|
|
33
|
+
},
|
|
34
|
+
{ name: "Destructive git reset", pattern: /\bgit\s+reset\s+--hard\b/i },
|
|
35
|
+
{ name: "Force remove command", pattern: /\brm\s+-rf\b/i },
|
|
36
|
+
];
|
|
37
|
+
function walk(dir, files = []) {
|
|
38
|
+
if (!fs.existsSync(dir))
|
|
39
|
+
return files;
|
|
40
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
41
|
+
if (entry.isDirectory()) {
|
|
42
|
+
if (!excludedDirs.has(entry.name))
|
|
43
|
+
walk(path.join(dir, entry.name), files);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (!/\.(md|json|mjs|js|ts|py|ps1|sh|txt|yaml|yml|toml)$/i.test(entry.name))
|
|
47
|
+
continue;
|
|
48
|
+
files.push(path.join(dir, entry.name));
|
|
49
|
+
}
|
|
50
|
+
return files;
|
|
51
|
+
}
|
|
52
|
+
export const scanSecurityHygieneCommand = {
|
|
53
|
+
name: "scan-security-hygiene",
|
|
54
|
+
description: "Scan repository for leaked secrets, destructive git commands, or security hygiene issues",
|
|
55
|
+
async run(args, options = {}) {
|
|
56
|
+
const projectRoot = options.projectRoot ?? options.cwd ?? process.cwd();
|
|
57
|
+
let targetDir = projectRoot;
|
|
58
|
+
for (let i = 0; i < args.length; i++) {
|
|
59
|
+
if ((args[i] === "--dir" || args[i] === "--path") && args[i + 1]) {
|
|
60
|
+
targetDir = path.resolve(projectRoot, args[i + 1]);
|
|
61
|
+
i++;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const hits = [];
|
|
65
|
+
const files = walk(targetDir);
|
|
66
|
+
for (const file of files) {
|
|
67
|
+
const relative = path.normalize(path.relative(projectRoot, file));
|
|
68
|
+
if (allowedFiles.has(relative))
|
|
69
|
+
continue;
|
|
70
|
+
// Also ignore .scratch, docs/adr, etc.
|
|
71
|
+
if (relative.startsWith(".scratch") || relative.startsWith(".agent"))
|
|
72
|
+
continue;
|
|
73
|
+
const content = fs.readFileSync(file, "utf8");
|
|
74
|
+
const lines = content.split(/\r?\n/);
|
|
75
|
+
lines.forEach((line, index) => {
|
|
76
|
+
for (const rule of rules) {
|
|
77
|
+
if (rule.pattern.test(line)) {
|
|
78
|
+
hits.push(`${relative}:${index + 1}: ${rule.name}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (hits.length > 0) {
|
|
84
|
+
throw new ToolingError(`Security hygiene violations found:\n${hits.map((h) => ` - ${h}`).join("\n")}`, 1);
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
ok: true,
|
|
88
|
+
message: `Security hygiene check passed. Scanned ${files.length} files with zero violations.`,
|
|
89
|
+
data: { scannedFiles: files.length, hits: [] },
|
|
90
|
+
};
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=scan-security-hygiene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-security-hygiene.js","sourceRoot":"","sources":["../../../../lib/tooling/commands/scan-security-hygiene.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,MAAM;IACN,cAAc;IACd,sBAAsB;IACtB,cAAc;IACd,UAAU;IACV,OAAO;IACP,MAAM;IACN,KAAK;IACL,WAAW;IACX,eAAe;IACf,aAAa;IACb,aAAa;IACb,OAAO;IACP,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,IAAI,CAAC,SAAS,CAAC,mCAAmC,CAAC;IACnD,IAAI,CAAC,SAAS,CAAC,6EAA6E,CAAC;IAC7F,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;IAC3B,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;CAC/B,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG;IACZ,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,2BAA2B,EAAE;IAC5D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,sBAAsB,EAAE;IAC3D,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,4CAA4C,EAAE;IACpF;QACE,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,mEAAmE;KAC7E;IACD,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,2BAA2B,EAAE;IACvE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,eAAe,EAAE;CAC3D,CAAC;AAEF,SAAS,IAAI,CAAC,GAAW,EAAE,QAAkB,EAAE;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3E,SAAS;QACX,CAAC;QACD,IAAI,CAAC,qDAAqD,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QACtF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAgB;IACrD,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,0FAA0F;IACvG,KAAK,CAAC,GAAG,CAAC,IAAc,EAAE,UAA0B,EAAE;QACpD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACxE,IAAI,SAAS,GAAG,WAAW,CAAC;QAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACjE,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnD,CAAC,EAAE,CAAC;YACN,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAE9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;YAClE,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACzC,uCAAuC;YACvC,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAE/E,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACrC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;oBACtD,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,YAAY,CACpB,uCAAuC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC9E,CAAC,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,0CAA0C,KAAK,CAAC,MAAM,8BAA8B;YAC7F,IAAI,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;SAC/C,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { ToolingError } from "../types.js";
|
|
4
|
+
export const skillDescriptionsCommand = {
|
|
5
|
+
name: "skill-descriptions",
|
|
6
|
+
description: "Check and validate skill descriptions in .agents/skills and .claude/skills",
|
|
7
|
+
async run(args, options = {}) {
|
|
8
|
+
const projectRoot = options.projectRoot ?? options.cwd ?? process.cwd();
|
|
9
|
+
const skillsDir = path.join(projectRoot, ".agents", "skills");
|
|
10
|
+
if (!fs.existsSync(skillsDir)) {
|
|
11
|
+
return {
|
|
12
|
+
ok: true,
|
|
13
|
+
message: "No .agents/skills directory found to check.",
|
|
14
|
+
data: { skills: [] },
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const entries = fs
|
|
18
|
+
.readdirSync(skillsDir, { withFileTypes: true })
|
|
19
|
+
.filter((d) => d.isDirectory())
|
|
20
|
+
.map((d) => d.name)
|
|
21
|
+
.sort();
|
|
22
|
+
const missingFiles = [];
|
|
23
|
+
const missingDescriptions = [];
|
|
24
|
+
const skillList = [];
|
|
25
|
+
for (const name of entries) {
|
|
26
|
+
const skillFile = path.join(skillsDir, name, "SKILL.md");
|
|
27
|
+
if (!fs.existsSync(skillFile)) {
|
|
28
|
+
missingFiles.push(name);
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const content = fs.readFileSync(skillFile, "utf8");
|
|
32
|
+
const match = content.match(/description:\s*([^\r\n]+)/);
|
|
33
|
+
if (!match) {
|
|
34
|
+
missingDescriptions.push(name);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
skillList.push({ name, description: match[1].trim() });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (missingFiles.length > 0 || missingDescriptions.length > 0) {
|
|
41
|
+
throw new ToolingError(`Skill descriptions check failed: missing files: ${missingFiles.join(", ")}; missing descriptions: ${missingDescriptions.join(", ")}`, 1);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
ok: true,
|
|
45
|
+
message: `Verified ${skillList.length} skill descriptions cleanly across .agents/skills`,
|
|
46
|
+
data: { total: skillList.length, skills: skillList },
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=skill-descriptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-descriptions.js","sourceRoot":"","sources":["../../../../lib/tooling/commands/skill-descriptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,MAAM,wBAAwB,GAAgB;IACnD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,4EAA4E;IACzF,KAAK,CAAC,GAAG,CAAC,IAAc,EAAE,UAA0B,EAAE;QACpD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACxE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,6CAA6C;gBACtD,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;aACrB,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,EAAE;aACf,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;aAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,EAAE,CAAC;QAEV,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,mBAAmB,GAAa,EAAE,CAAC;QACzC,MAAM,SAAS,GAA4C,EAAE,CAAC;QAE9D,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,YAAY,CACpB,mDAAmD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACrI,CAAC,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,YAAY,SAAS,CAAC,MAAM,mDAAmD;YACxF,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;SACrD,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const stageOrder = [
|
|
4
|
+
"discovery",
|
|
5
|
+
"spec",
|
|
6
|
+
"current-feature",
|
|
7
|
+
"feature",
|
|
8
|
+
"implement",
|
|
9
|
+
"check",
|
|
10
|
+
"complete",
|
|
11
|
+
];
|
|
12
|
+
function readIfExists(filePath) {
|
|
13
|
+
try {
|
|
14
|
+
return fs.readFileSync(filePath, "utf8");
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export const summarizeRunStatusCommand = {
|
|
21
|
+
name: "summarize-run-status",
|
|
22
|
+
description: "Summarize current active DevFlow stage and run status",
|
|
23
|
+
async run(args, options = {}) {
|
|
24
|
+
let projectRoot = options.projectRoot ?? options.cwd ?? process.cwd();
|
|
25
|
+
const isJson = args.includes("--json");
|
|
26
|
+
for (let i = 0; i < args.length; i++) {
|
|
27
|
+
if (args[i] === "--project-root" && args[i + 1]) {
|
|
28
|
+
projectRoot = path.resolve(args[i + 1]);
|
|
29
|
+
i++;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const contextDir = path.join(projectRoot, "devflow", "context");
|
|
33
|
+
let activeStage = "idle";
|
|
34
|
+
let activeTask = null;
|
|
35
|
+
if (fs.existsSync(contextDir)) {
|
|
36
|
+
const entries = fs.readdirSync(contextDir, { withFileTypes: true });
|
|
37
|
+
for (const entry of entries) {
|
|
38
|
+
if (entry.isDirectory() && /^\d{3}-/.test(entry.name)) {
|
|
39
|
+
activeTask = entry.name;
|
|
40
|
+
const stageFile = path.join(contextDir, entry.name, "stage.md");
|
|
41
|
+
const stageContent = readIfExists(stageFile);
|
|
42
|
+
if (stageContent) {
|
|
43
|
+
const match = stageContent.match(/^### Stage:\s*(\w+)/m);
|
|
44
|
+
if (match)
|
|
45
|
+
activeStage = match[1];
|
|
46
|
+
}
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const summaryData = {
|
|
52
|
+
projectRoot,
|
|
53
|
+
activeStage,
|
|
54
|
+
activeTask,
|
|
55
|
+
stages: stageOrder,
|
|
56
|
+
};
|
|
57
|
+
const message = `Active Stage: ${activeStage}${activeTask ? ` (${activeTask})` : ""}`;
|
|
58
|
+
return {
|
|
59
|
+
ok: true,
|
|
60
|
+
message: isJson ? JSON.stringify(summaryData, null, 2) : message,
|
|
61
|
+
data: summaryData,
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=summarize-run-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarize-run-status.js","sourceRoot":"","sources":["../../../../lib/tooling/commands/summarize-run-status.ts"],"names":[],"mappings":"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"}
|