specky-sdd 3.7.1 → 3.7.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/.apm/agents/design-architect.agent.md +1 -1
- package/.apm/agents/implementer.agent.md +1 -1
- package/.apm/agents/quality-reviewer.agent.md +1 -1
- package/.apm/agents/release-engineer.agent.md +1 -1
- package/.apm/agents/requirements-engineer.agent.md +1 -1
- package/.apm/agents/research-analyst.agent.md +1 -1
- package/.apm/agents/sdd-clarify.agent.md +1 -1
- package/.apm/agents/sdd-init.agent.md +1 -1
- package/.apm/agents/spec-engineer.agent.md +1 -1
- package/.apm/agents/specky-onboarding.agent.md +1 -1
- package/.apm/agents/specky-orchestrator.agent.md +1 -1
- package/.apm/agents/task-planner.agent.md +1 -1
- package/.apm/agents/test-verifier.agent.md +1 -1
- package/.apm/prompts/specky-api.prompt.md +1 -1
- package/.apm/prompts/specky-brownfield.prompt.md +1 -1
- package/.apm/prompts/specky-check-drift.prompt.md +1 -1
- package/.apm/prompts/specky-clarify.prompt.md +1 -1
- package/.apm/prompts/specky-debug-hook.prompt.md +1 -1
- package/.apm/prompts/specky-deploy.prompt.md +1 -1
- package/.apm/prompts/specky-design.prompt.md +1 -1
- package/.apm/prompts/specky-from-figma.prompt.md +1 -1
- package/.apm/prompts/specky-from-meeting.prompt.md +1 -1
- package/.apm/prompts/specky-greenfield.prompt.md +1 -1
- package/.apm/prompts/specky-implement.prompt.md +1 -1
- package/.apm/prompts/specky-migration.prompt.md +1 -1
- package/.apm/prompts/specky-onboarding.prompt.md +1 -1
- package/.apm/prompts/specky-orchestrate.prompt.md +1 -1
- package/.apm/prompts/specky-pipeline-status.prompt.md +1 -1
- package/.apm/prompts/specky-release.prompt.md +1 -1
- package/.apm/prompts/specky-research.prompt.md +1 -1
- package/.apm/prompts/specky-reset-phase.prompt.md +1 -1
- package/.apm/prompts/specky-resolve-conflict.prompt.md +1 -1
- package/.apm/prompts/specky-specify.prompt.md +1 -1
- package/.apm/prompts/specky-tasks.prompt.md +1 -1
- package/.apm/prompts/specky-verify.prompt.md +1 -1
- package/CHANGELOG.md +47 -0
- package/README.md +4 -0
- package/apm-policy.yml +41 -0
- package/apm.lock.yaml +71 -0
- package/apm.yml +29 -2
- package/dist/cli/commands/apm.d.ts +2 -0
- package/dist/cli/commands/apm.d.ts.map +1 -0
- package/dist/cli/commands/apm.js +139 -0
- package/dist/cli/commands/apm.js.map +1 -0
- package/dist/cli/index.js +10 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/lib/apm/lock.d.ts +23 -0
- package/dist/cli/lib/apm/lock.d.ts.map +1 -0
- package/dist/cli/lib/apm/lock.js +90 -0
- package/dist/cli/lib/apm/lock.js.map +1 -0
- package/dist/cli/lib/apm/manifest.d.ts +31 -0
- package/dist/cli/lib/apm/manifest.d.ts.map +1 -0
- package/dist/cli/lib/apm/manifest.js +65 -0
- package/dist/cli/lib/apm/manifest.js.map +1 -0
- package/dist/cli/lib/apm/policy.d.ts +23 -0
- package/dist/cli/lib/apm/policy.d.ts.map +1 -0
- package/dist/cli/lib/apm/policy.js +85 -0
- package/dist/cli/lib/apm/policy.js.map +1 -0
- package/dist/cli/lib/asset-copier.d.ts.map +1 -1
- package/dist/cli/lib/asset-copier.js +36 -20
- package/dist/cli/lib/asset-copier.js.map +1 -1
- package/dist/cli/lib/harness/compilers/claude.d.ts +10 -0
- package/dist/cli/lib/harness/compilers/claude.d.ts.map +1 -0
- package/dist/cli/lib/harness/compilers/claude.js +29 -0
- package/dist/cli/lib/harness/compilers/claude.js.map +1 -0
- package/dist/cli/lib/harness/compilers/common.d.ts +14 -0
- package/dist/cli/lib/harness/compilers/common.d.ts.map +1 -0
- package/dist/cli/lib/harness/compilers/common.js +43 -0
- package/dist/cli/lib/harness/compilers/common.js.map +1 -0
- package/dist/cli/lib/harness/compilers/copilot.d.ts +10 -0
- package/dist/cli/lib/harness/compilers/copilot.d.ts.map +1 -0
- package/dist/cli/lib/harness/compilers/copilot.js +32 -0
- package/dist/cli/lib/harness/compilers/copilot.js.map +1 -0
- package/dist/cli/lib/harness/index.d.ts +12 -0
- package/dist/cli/lib/harness/index.d.ts.map +1 -0
- package/dist/cli/lib/harness/index.js +18 -0
- package/dist/cli/lib/harness/index.js.map +1 -0
- package/dist/cli/lib/harness/tool-map.d.ts +15 -0
- package/dist/cli/lib/harness/tool-map.d.ts.map +1 -0
- package/dist/cli/lib/harness/tool-map.js +92 -0
- package/dist/cli/lib/harness/tool-map.js.map +1 -0
- package/dist/cli/lib/harness/types.d.ts +42 -0
- package/dist/cli/lib/harness/types.d.ts.map +1 -0
- package/dist/cli/lib/harness/types.js +12 -0
- package/dist/cli/lib/harness/types.js.map +1 -0
- package/dist/cli/lib/paths.d.ts +1 -0
- package/dist/cli/lib/paths.d.ts.map +1 -1
- package/dist/cli/lib/paths.js +1 -0
- package/dist/cli/lib/paths.js.map +1 -1
- package/package.json +5 -3
|
@@ -9,6 +9,7 @@ import { createHash } from "node:crypto";
|
|
|
9
9
|
import { cpSync, existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync, chmodSync, unlinkSync, } from "node:fs";
|
|
10
10
|
import { basename, resolve, relative } from "node:path";
|
|
11
11
|
import { sourcePaths } from "./paths.js";
|
|
12
|
+
import { getCompiler } from "./harness/index.js";
|
|
12
13
|
function ensureDir(dir) {
|
|
13
14
|
if (!existsSync(dir))
|
|
14
15
|
mkdirSync(dir, { recursive: true });
|
|
@@ -18,7 +19,7 @@ function shouldWrite(dest, opts) {
|
|
|
18
19
|
return true;
|
|
19
20
|
return !existsSync(dest);
|
|
20
21
|
}
|
|
21
|
-
function copyFile(src, dest, opts, result) {
|
|
22
|
+
function copyFile(src, dest, opts, result, transformer) {
|
|
22
23
|
if (!shouldWrite(dest, opts)) {
|
|
23
24
|
result.skipped.push(dest);
|
|
24
25
|
return;
|
|
@@ -28,10 +29,30 @@ function copyFile(src, dest, opts, result) {
|
|
|
28
29
|
return;
|
|
29
30
|
}
|
|
30
31
|
ensureDir(resolve(dest, ".."));
|
|
31
|
-
|
|
32
|
+
if (transformer) {
|
|
33
|
+
const content = readFileSync(src, "utf8");
|
|
34
|
+
writeFileSync(dest, transformer(content, src, dest), "utf8");
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
cpSync(src, dest);
|
|
38
|
+
}
|
|
39
|
+
result.written.push(dest);
|
|
40
|
+
}
|
|
41
|
+
function copyTextFile(src, dest, opts, result, transformer) {
|
|
42
|
+
if (!shouldWrite(dest, opts)) {
|
|
43
|
+
result.skipped.push(dest);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (opts.dryRun) {
|
|
47
|
+
result.written.push(dest);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
ensureDir(resolve(dest, ".."));
|
|
51
|
+
const content = readFileSync(src, "utf8");
|
|
52
|
+
writeFileSync(dest, transformer(content, src, dest), "utf8");
|
|
32
53
|
result.written.push(dest);
|
|
33
54
|
}
|
|
34
|
-
function copyDir(src, dest, opts, result, renamer) {
|
|
55
|
+
function copyDir(src, dest, opts, result, renamer, transformer) {
|
|
35
56
|
if (!existsSync(src))
|
|
36
57
|
return;
|
|
37
58
|
ensureDir(dest);
|
|
@@ -41,31 +62,25 @@ function copyDir(src, dest, opts, result, renamer) {
|
|
|
41
62
|
const destPath = resolve(dest, name);
|
|
42
63
|
const st = statSync(srcPath);
|
|
43
64
|
if (st.isDirectory()) {
|
|
44
|
-
copyDir(srcPath, destPath, opts, result, renamer);
|
|
65
|
+
copyDir(srcPath, destPath, opts, result, renamer, transformer);
|
|
45
66
|
}
|
|
46
67
|
else {
|
|
47
|
-
|
|
68
|
+
if (transformer)
|
|
69
|
+
copyTextFile(srcPath, destPath, opts, result, transformer);
|
|
70
|
+
else
|
|
71
|
+
copyFile(srcPath, destPath, opts, result);
|
|
48
72
|
}
|
|
49
73
|
}
|
|
50
74
|
}
|
|
51
|
-
/**
|
|
52
|
-
* Transform `.agent.md` (Copilot format) to `.md` (Claude Code format) and
|
|
53
|
-
* strip Copilot-specific frontmatter markers. For now we just rename.
|
|
54
|
-
*/
|
|
55
|
-
function claudeAgentRenamer(fileName) {
|
|
56
|
-
return fileName.replace(/\.agent\.md$/, ".md");
|
|
57
|
-
}
|
|
58
|
-
function claudePromptRenamer(fileName) {
|
|
59
|
-
return fileName.replace(/\.prompt\.md$/, ".md");
|
|
60
|
-
}
|
|
61
75
|
/**
|
|
62
76
|
* Copy assets to Claude Code `.claude/` layout.
|
|
63
77
|
*/
|
|
64
78
|
export function copyToClaude(pkgRoot, targets, opts) {
|
|
65
79
|
const src = sourcePaths(pkgRoot);
|
|
66
80
|
const result = { written: [], skipped: [] };
|
|
67
|
-
|
|
68
|
-
copyDir(src.
|
|
81
|
+
const claude = getCompiler("claude");
|
|
82
|
+
copyDir(src.agentsDir, targets.claude.agents, opts, result, claude.renameAgent, claude.compileAgent);
|
|
83
|
+
copyDir(src.promptsDir, targets.claude.commands, opts, result, claude.renamePrompt, claude.compilePrompt);
|
|
69
84
|
copyDir(src.skillsDir, targets.claude.skills, opts, result);
|
|
70
85
|
copyDir(src.hookScriptsDir, targets.claude.hooksScripts, opts, result);
|
|
71
86
|
// Make hook scripts executable (Unix only — Windows ignores mode)
|
|
@@ -86,7 +101,7 @@ export function copyToClaude(pkgRoot, targets, opts) {
|
|
|
86
101
|
// Copy copilot-instructions to .claude/rules/
|
|
87
102
|
const instructionSrc = resolve(src.instructionsDir, "copilot-instructions.instructions.md");
|
|
88
103
|
if (existsSync(instructionSrc)) {
|
|
89
|
-
copyFile(instructionSrc, resolve(targets.claude.rules, "copilot-instructions.md"), opts, result);
|
|
104
|
+
copyFile(instructionSrc, resolve(targets.claude.rules, "copilot-instructions.md"), opts, result, claude.compileInstruction);
|
|
90
105
|
}
|
|
91
106
|
return result;
|
|
92
107
|
}
|
|
@@ -96,8 +111,9 @@ export function copyToClaude(pkgRoot, targets, opts) {
|
|
|
96
111
|
export function copyToCopilot(pkgRoot, targets, opts) {
|
|
97
112
|
const src = sourcePaths(pkgRoot);
|
|
98
113
|
const result = { written: [], skipped: [] };
|
|
99
|
-
|
|
100
|
-
copyDir(src.
|
|
114
|
+
const copilot = getCompiler("copilot");
|
|
115
|
+
copyDir(src.agentsDir, targets.copilot.agents, opts, result, copilot.renameAgent, copilot.compileAgent);
|
|
116
|
+
copyDir(src.promptsDir, targets.copilot.prompts, opts, result, copilot.renamePrompt, copilot.compilePrompt);
|
|
101
117
|
copyDir(src.skillsDir, targets.copilot.skills, opts, result);
|
|
102
118
|
copyDir(src.hookScriptsDir, targets.copilot.hooksScripts, opts, result);
|
|
103
119
|
// rc.14: Remove stale pre-rc.12 hooks manifest at .github/hooks/specky-sdd-hooks.json.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-copier.js","sourceRoot":"","sources":["../../../src/cli/lib/asset-copier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,MAAM,EACN,UAAU,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,aAAa,EACb,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"asset-copier.js","sourceRoot":"","sources":["../../../src/cli/lib/asset-copier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* harness/compilers/claude.ts — renders canonical primitives into Claude Code
|
|
3
|
+
* native form: `.claude/agents/*.md`, `.claude/commands/*.md`, comma-list
|
|
4
|
+
* `tools:` with `Read`/`Glob`/`Grep`/`Task` and `mcp__specky__sdd_*` MCP
|
|
5
|
+
* tools, commands without Copilot-only `agent:` frontmatter, and rules that
|
|
6
|
+
* use `paths:` instead of Copilot's `applyTo:`.
|
|
7
|
+
*/
|
|
8
|
+
import type { HarnessCompiler } from "../types.js";
|
|
9
|
+
export declare const claudeCompiler: HarnessCompiler;
|
|
10
|
+
//# sourceMappingURL=claude.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../../../src/cli/lib/harness/compilers/claude.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,eAAO,MAAM,cAAc,EAAE,eAwB5B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* harness/compilers/claude.ts — renders canonical primitives into Claude Code
|
|
3
|
+
* native form: `.claude/agents/*.md`, `.claude/commands/*.md`, comma-list
|
|
4
|
+
* `tools:` with `Read`/`Glob`/`Grep`/`Task` and `mcp__specky__sdd_*` MCP
|
|
5
|
+
* tools, commands without Copilot-only `agent:` frontmatter, and rules that
|
|
6
|
+
* use `paths:` instead of Copilot's `applyTo:`.
|
|
7
|
+
*/
|
|
8
|
+
import { transformToolsLine } from "./common.js";
|
|
9
|
+
export const claudeCompiler = {
|
|
10
|
+
target: "claude",
|
|
11
|
+
compileAgent(content) {
|
|
12
|
+
return transformToolsLine(content, "claude", "comma-list");
|
|
13
|
+
},
|
|
14
|
+
compilePrompt(content) {
|
|
15
|
+
return content
|
|
16
|
+
.replace(/^agent:\s*agent\s*\n/m, "")
|
|
17
|
+
.replace(/^mode:\s*agent\s*\n/m, "");
|
|
18
|
+
},
|
|
19
|
+
compileInstruction(content) {
|
|
20
|
+
return content.replace(/^applyTo:\s*['"]?\*\*['"]?\s*$/m, "paths: ['**']");
|
|
21
|
+
},
|
|
22
|
+
renameAgent(fileName) {
|
|
23
|
+
return fileName.replace(/\.agent\.md$/, ".md");
|
|
24
|
+
},
|
|
25
|
+
renamePrompt(fileName) {
|
|
26
|
+
return fileName.replace(/\.prompt\.md$/, ".md");
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../../../src/cli/lib/harness/compilers/claude.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC3C,MAAM,EAAE,QAAQ;IAEhB,YAAY,CAAC,OAAO;QAChB,OAAO,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC/D,CAAC;IAED,aAAa,CAAC,OAAO;QACjB,OAAO,OAAO;aACT,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC;aACpC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,kBAAkB,CAAC,OAAO;QACtB,OAAO,OAAO,CAAC,OAAO,CAAC,iCAAiC,EAAE,eAAe,CAAC,CAAC;IAC/E,CAAC;IAED,WAAW,CAAC,QAAQ;QAChB,OAAO,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,YAAY,CAAC,QAAQ;QACjB,OAAO,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;CACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* harness/compilers/common.ts — shared frontmatter/tool-line helpers used by
|
|
3
|
+
* every harness compiler.
|
|
4
|
+
*/
|
|
5
|
+
import type { HarnessTarget } from "../types.js";
|
|
6
|
+
export declare function unique(values: string[]): string[];
|
|
7
|
+
/** Parse a frontmatter `tools:` value that is a JSON array or a comma list. */
|
|
8
|
+
export declare function parseToolArray(tools: string): string[];
|
|
9
|
+
/**
|
|
10
|
+
* Rewrite the `tools:` frontmatter line for a target harness, mapping each
|
|
11
|
+
* source token to its native token(s) and serializing in the harness's format.
|
|
12
|
+
*/
|
|
13
|
+
export declare function transformToolsLine(content: string, target: HarnessTarget, format: "json-array" | "comma-list"): string;
|
|
14
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../../src/cli/lib/harness/compilers/common.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEjD;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBtD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,YAAY,GAAG,YAAY,GACpC,MAAM,CAQR"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* harness/compilers/common.ts — shared frontmatter/tool-line helpers used by
|
|
3
|
+
* every harness compiler.
|
|
4
|
+
*/
|
|
5
|
+
import { mapTool } from "../tool-map.js";
|
|
6
|
+
export function unique(values) {
|
|
7
|
+
return [...new Set(values.filter(Boolean))];
|
|
8
|
+
}
|
|
9
|
+
/** Parse a frontmatter `tools:` value that is a JSON array or a comma list. */
|
|
10
|
+
export function parseToolArray(tools) {
|
|
11
|
+
const trimmed = tools.trim();
|
|
12
|
+
if (!trimmed)
|
|
13
|
+
return [];
|
|
14
|
+
if (trimmed.startsWith("[")) {
|
|
15
|
+
try {
|
|
16
|
+
const parsed = JSON.parse(trimmed);
|
|
17
|
+
if (Array.isArray(parsed))
|
|
18
|
+
return parsed.map(String);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// Fall through to the comma parser below.
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return trimmed
|
|
25
|
+
.replace(/^\[/, "")
|
|
26
|
+
.replace(/\]$/, "")
|
|
27
|
+
.split(",")
|
|
28
|
+
.map((token) => token.trim().replace(/^"|"$/g, ""))
|
|
29
|
+
.filter(Boolean);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Rewrite the `tools:` frontmatter line for a target harness, mapping each
|
|
33
|
+
* source token to its native token(s) and serializing in the harness's format.
|
|
34
|
+
*/
|
|
35
|
+
export function transformToolsLine(content, target, format) {
|
|
36
|
+
return content.replace(/^tools:\s*(.+)$/m, (_line, rawTools) => {
|
|
37
|
+
const mapped = unique(parseToolArray(rawTools).flatMap((token) => mapTool(token, target)));
|
|
38
|
+
if (format === "comma-list")
|
|
39
|
+
return `tools: ${mapped.join(", ")}`;
|
|
40
|
+
return `tools: ${JSON.stringify(mapped)}`;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../../src/cli/lib/harness/compilers/common.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,UAAU,MAAM,CAAC,MAAgB;IACnC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAAC,KAAa;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;YAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACL,0CAA0C;QAC9C,CAAC;IACL,CAAC;IACD,OAAO,OAAO;SACT,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;SAClB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;SAClD,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAC9B,OAAe,EACf,MAAqB,EACrB,MAAmC;IAEnC,OAAO,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;QACnE,MAAM,MAAM,GAAG,MAAM,CACjB,cAAc,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CACtE,CAAC;QACF,IAAI,MAAM,KAAK,YAAY;YAAE,OAAO,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClE,OAAO,UAAU,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* harness/compilers/copilot.ts — renders canonical primitives into GitHub
|
|
3
|
+
* Copilot (VS Code) native form: `.github/agents/*.agent.md`,
|
|
4
|
+
* `.github/prompts/*.prompt.md`, JSON-array `tools:` with `search`/`agent`/
|
|
5
|
+
* `edit`/`fetch` and namespaced `specky/sdd_*` MCP tools, and `agent: agent`
|
|
6
|
+
* prompt frontmatter.
|
|
7
|
+
*/
|
|
8
|
+
import type { HarnessCompiler } from "../types.js";
|
|
9
|
+
export declare const copilotCompiler: HarnessCompiler;
|
|
10
|
+
//# sourceMappingURL=copilot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot.d.ts","sourceRoot":"","sources":["../../../../../src/cli/lib/harness/compilers/copilot.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,eAAO,MAAM,eAAe,EAAE,eA2B7B,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* harness/compilers/copilot.ts — renders canonical primitives into GitHub
|
|
3
|
+
* Copilot (VS Code) native form: `.github/agents/*.agent.md`,
|
|
4
|
+
* `.github/prompts/*.prompt.md`, JSON-array `tools:` with `search`/`agent`/
|
|
5
|
+
* `edit`/`fetch` and namespaced `specky/sdd_*` MCP tools, and `agent: agent`
|
|
6
|
+
* prompt frontmatter.
|
|
7
|
+
*/
|
|
8
|
+
import { transformToolsLine } from "./common.js";
|
|
9
|
+
export const copilotCompiler = {
|
|
10
|
+
target: "copilot",
|
|
11
|
+
compileAgent(content) {
|
|
12
|
+
return transformToolsLine(content, "copilot", "json-array");
|
|
13
|
+
},
|
|
14
|
+
compilePrompt(content) {
|
|
15
|
+
// `.apm` prompts already use `agent: agent`; keep them and drop any stray
|
|
16
|
+
// legacy `mode: agent` line. If only a legacy line exists, upgrade it.
|
|
17
|
+
if (/^agent:/m.test(content)) {
|
|
18
|
+
return content.replace(/^mode:\s*agent\s*$/m, "");
|
|
19
|
+
}
|
|
20
|
+
return content.replace(/^mode:\s*agent\s*$/m, "agent: agent");
|
|
21
|
+
},
|
|
22
|
+
compileInstruction(content) {
|
|
23
|
+
return content;
|
|
24
|
+
},
|
|
25
|
+
renameAgent(fileName) {
|
|
26
|
+
return fileName;
|
|
27
|
+
},
|
|
28
|
+
renamePrompt(fileName) {
|
|
29
|
+
return fileName;
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=copilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../../../../src/cli/lib/harness/compilers/copilot.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC5C,MAAM,EAAE,SAAS;IAEjB,YAAY,CAAC,OAAO;QAChB,OAAO,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAChE,CAAC;IAED,aAAa,CAAC,OAAO;QACjB,0EAA0E;QAC1E,uEAAuE;QACvE,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;IAClE,CAAC;IAED,kBAAkB,CAAC,OAAO;QACtB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,QAAQ;QAChB,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,YAAY,CAAC,QAAQ;QACjB,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* harness/index.ts — the harness compiler registry.
|
|
3
|
+
*
|
|
4
|
+
* `getCompiler(target)` returns the compiler that renders Specky's canonical
|
|
5
|
+
* `.apm` primitives into a harness's native form. Register new harnesses here.
|
|
6
|
+
*/
|
|
7
|
+
import type { HarnessCompiler, HarnessTarget } from "./types.js";
|
|
8
|
+
export declare function getCompiler(target: HarnessTarget): HarnessCompiler;
|
|
9
|
+
export declare const SUPPORTED_TARGETS: HarnessTarget[];
|
|
10
|
+
export type { HarnessCompiler, HarnessTarget } from "./types.js";
|
|
11
|
+
export { mapTool, normalizeToLogical, logicalToNative } from "./tool-map.js";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/harness/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AASjE,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,eAAe,CAElE;AAED,eAAO,MAAM,iBAAiB,EAA6B,aAAa,EAAE,CAAC;AAE3E,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* harness/index.ts — the harness compiler registry.
|
|
3
|
+
*
|
|
4
|
+
* `getCompiler(target)` returns the compiler that renders Specky's canonical
|
|
5
|
+
* `.apm` primitives into a harness's native form. Register new harnesses here.
|
|
6
|
+
*/
|
|
7
|
+
import { copilotCompiler } from "./compilers/copilot.js";
|
|
8
|
+
import { claudeCompiler } from "./compilers/claude.js";
|
|
9
|
+
const COMPILERS = {
|
|
10
|
+
copilot: copilotCompiler,
|
|
11
|
+
claude: claudeCompiler,
|
|
12
|
+
};
|
|
13
|
+
export function getCompiler(target) {
|
|
14
|
+
return COMPILERS[target];
|
|
15
|
+
}
|
|
16
|
+
export const SUPPORTED_TARGETS = Object.keys(COMPILERS);
|
|
17
|
+
export { mapTool, normalizeToLogical, logicalToNative } from "./tool-map.js";
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/lib/harness/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,SAAS,GAA2C;IACtD,OAAO,EAAE,eAAe;IACxB,MAAM,EAAE,cAAc;CACzB,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,MAAqB;IAC7C,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAoB,CAAC;AAG3E,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* harness/tool-map.ts — logical↔native tool vocabulary.
|
|
3
|
+
*
|
|
4
|
+
* A single source of truth for how Specky's canonical tool ids map to each
|
|
5
|
+
* harness's native tool tokens. Copilot and Claude outputs produced here are
|
|
6
|
+
* byte-for-byte identical to the legacy inline transforms in asset-copier.ts.
|
|
7
|
+
*/
|
|
8
|
+
import type { HarnessTarget, LogicalTool } from "./types.js";
|
|
9
|
+
/** Fold any known native/source token into a canonical logical tool id. */
|
|
10
|
+
export declare function normalizeToLogical(token: string): LogicalTool;
|
|
11
|
+
/** Render a logical tool id into the native token(s) for a harness. */
|
|
12
|
+
export declare function logicalToNative(logical: LogicalTool, target: HarnessTarget): string[];
|
|
13
|
+
/** Map a single source/native token to the native token(s) for a harness. */
|
|
14
|
+
export declare function mapTool(token: string, target: HarnessTarget): string[];
|
|
15
|
+
//# sourceMappingURL=tool-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-map.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/harness/tool-map.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK7D,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAsC7D;AAsCD,uEAAuE;AACvE,wBAAgB,eAAe,CAC3B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,aAAa,GACtB,MAAM,EAAE,CAQV;AAED,6EAA6E;AAC7E,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAEtE"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* harness/tool-map.ts — logical↔native tool vocabulary.
|
|
3
|
+
*
|
|
4
|
+
* A single source of truth for how Specky's canonical tool ids map to each
|
|
5
|
+
* harness's native tool tokens. Copilot and Claude outputs produced here are
|
|
6
|
+
* byte-for-byte identical to the legacy inline transforms in asset-copier.ts.
|
|
7
|
+
*/
|
|
8
|
+
const MCP_PREFIX = "mcp.specky.";
|
|
9
|
+
const RAW_PREFIX = "raw:";
|
|
10
|
+
/** Fold any known native/source token into a canonical logical tool id. */
|
|
11
|
+
export function normalizeToLogical(token) {
|
|
12
|
+
if (token.startsWith("specky/")) {
|
|
13
|
+
return `${MCP_PREFIX}${token.slice("specky/".length)}`;
|
|
14
|
+
}
|
|
15
|
+
if (token.startsWith("mcp__specky__")) {
|
|
16
|
+
return `${MCP_PREFIX}${token.slice("mcp__specky__".length)}`;
|
|
17
|
+
}
|
|
18
|
+
if (token.startsWith("sdd_")) {
|
|
19
|
+
return `${MCP_PREFIX}${token}`;
|
|
20
|
+
}
|
|
21
|
+
switch (token) {
|
|
22
|
+
case "Read":
|
|
23
|
+
case "Glob":
|
|
24
|
+
case "Grep":
|
|
25
|
+
case "search":
|
|
26
|
+
return "workspace.search";
|
|
27
|
+
case "Edit":
|
|
28
|
+
case "Write":
|
|
29
|
+
case "MultiEdit":
|
|
30
|
+
case "edit":
|
|
31
|
+
return "workspace.edit";
|
|
32
|
+
case "Bash":
|
|
33
|
+
case "runCommands":
|
|
34
|
+
return "workspace.command";
|
|
35
|
+
case "WebFetch":
|
|
36
|
+
case "WebSearch":
|
|
37
|
+
case "fetch":
|
|
38
|
+
return "web.fetch";
|
|
39
|
+
case "Task":
|
|
40
|
+
case "agent":
|
|
41
|
+
return "agent.delegate";
|
|
42
|
+
case "TodoWrite":
|
|
43
|
+
case "todos":
|
|
44
|
+
return "todo.write";
|
|
45
|
+
default:
|
|
46
|
+
return `${RAW_PREFIX}${token}`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const NATIVE = {
|
|
50
|
+
"workspace.search": {
|
|
51
|
+
copilot: ["search"],
|
|
52
|
+
claude: ["Read", "Glob", "Grep"],
|
|
53
|
+
},
|
|
54
|
+
"workspace.edit": {
|
|
55
|
+
copilot: ["edit"],
|
|
56
|
+
claude: ["Edit", "Write"],
|
|
57
|
+
},
|
|
58
|
+
"workspace.command": {
|
|
59
|
+
copilot: ["runCommands"],
|
|
60
|
+
claude: ["Bash"],
|
|
61
|
+
},
|
|
62
|
+
"web.fetch": {
|
|
63
|
+
copilot: ["fetch"],
|
|
64
|
+
claude: ["WebFetch", "WebSearch"],
|
|
65
|
+
},
|
|
66
|
+
"agent.delegate": {
|
|
67
|
+
copilot: ["agent"],
|
|
68
|
+
claude: ["Task"],
|
|
69
|
+
},
|
|
70
|
+
"todo.write": {
|
|
71
|
+
copilot: ["todos"],
|
|
72
|
+
claude: ["TodoWrite"],
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
function speckyMcpToken(tool, target) {
|
|
76
|
+
return target === "claude" ? `mcp__specky__${tool}` : `specky/${tool}`;
|
|
77
|
+
}
|
|
78
|
+
/** Render a logical tool id into the native token(s) for a harness. */
|
|
79
|
+
export function logicalToNative(logical, target) {
|
|
80
|
+
if (logical.startsWith(MCP_PREFIX)) {
|
|
81
|
+
return [speckyMcpToken(logical.slice(MCP_PREFIX.length), target)];
|
|
82
|
+
}
|
|
83
|
+
if (logical.startsWith(RAW_PREFIX)) {
|
|
84
|
+
return [logical.slice(RAW_PREFIX.length)];
|
|
85
|
+
}
|
|
86
|
+
return NATIVE[logical][target];
|
|
87
|
+
}
|
|
88
|
+
/** Map a single source/native token to the native token(s) for a harness. */
|
|
89
|
+
export function mapTool(token, target) {
|
|
90
|
+
return logicalToNative(normalizeToLogical(token), target);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=tool-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-map.js","sourceRoot":"","sources":["../../../../src/cli/lib/harness/tool-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* harness/types.ts — Primitive Intermediate Representation (IR) and the
|
|
3
|
+
* per-harness compiler contract.
|
|
4
|
+
*
|
|
5
|
+
* Specky keeps a single canonical primitive source in `.apm/`. Each supported
|
|
6
|
+
* agent harness (GitHub Copilot, Claude Code, and future targets) has a
|
|
7
|
+
* compiler that renders those primitives into that harness's native file
|
|
8
|
+
* layout and tool vocabulary. Adding a new harness means adding a new
|
|
9
|
+
* `HarnessCompiler` — never hand-editing agents/prompts per platform.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Supported harness targets. Extend this union and register a compiler in
|
|
13
|
+
* `harness/index.ts` to add a new harness (e.g. "cursor", "codex", "opencode").
|
|
14
|
+
* New targets must also add native tool mappings in `harness/tool-map.ts`.
|
|
15
|
+
*/
|
|
16
|
+
export type HarnessTarget = "copilot" | "claude";
|
|
17
|
+
/**
|
|
18
|
+
* Canonical, harness-agnostic tool vocabulary. Primitive sources are authored
|
|
19
|
+
* against native Copilot tokens today; `normalizeToLogical` folds any known
|
|
20
|
+
* native token into one of these logical ids, and `logicalToNative` renders a
|
|
21
|
+
* logical id back into the tokens a specific harness understands.
|
|
22
|
+
*/
|
|
23
|
+
export type LogicalTool = "workspace.search" | "workspace.edit" | "workspace.command" | "web.fetch" | "agent.delegate" | "todo.write" | `mcp.specky.${string}` | `raw:${string}`;
|
|
24
|
+
/**
|
|
25
|
+
* A compiler renders canonical primitive files into one harness's native
|
|
26
|
+
* form. Content transforms operate on raw file text (frontmatter + body);
|
|
27
|
+
* renamers map source filenames to the harness's expected extension.
|
|
28
|
+
*/
|
|
29
|
+
export interface HarnessCompiler {
|
|
30
|
+
readonly target: HarnessTarget;
|
|
31
|
+
/** Transform an agent markdown file (frontmatter `tools:` line, etc.). */
|
|
32
|
+
compileAgent(content: string): string;
|
|
33
|
+
/** Transform a prompt/command markdown file. */
|
|
34
|
+
compilePrompt(content: string): string;
|
|
35
|
+
/** Transform an instruction/rules markdown file. */
|
|
36
|
+
compileInstruction(content: string): string;
|
|
37
|
+
/** Map an agent source filename to the harness's expected filename. */
|
|
38
|
+
renameAgent(fileName: string): string;
|
|
39
|
+
/** Map a prompt source filename to the harness's expected filename. */
|
|
40
|
+
renamePrompt(fileName: string): string;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,mBAAmB,GACnB,WAAW,GACX,gBAAgB,GAChB,YAAY,GACZ,cAAc,MAAM,EAAE,GACtB,OAAO,MAAM,EAAE,CAAC;AAEtB;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,0EAA0E;IAC1E,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,gDAAgD;IAChD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,oDAAoD;IACpD,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5C,uEAAuE;IACvE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,uEAAuE;IACvE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* harness/types.ts — Primitive Intermediate Representation (IR) and the
|
|
3
|
+
* per-harness compiler contract.
|
|
4
|
+
*
|
|
5
|
+
* Specky keeps a single canonical primitive source in `.apm/`. Each supported
|
|
6
|
+
* agent harness (GitHub Copilot, Claude Code, and future targets) has a
|
|
7
|
+
* compiler that renders those primitives into that harness's native file
|
|
8
|
+
* layout and tool vocabulary. Adding a new harness means adding a new
|
|
9
|
+
* `HarnessCompiler` — never hand-editing agents/prompts per platform.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/lib/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
package/dist/cli/lib/paths.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/paths.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,CASpC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/paths.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,CASpC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB,CAgBA;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CA6BtD"}
|
package/dist/cli/lib/paths.js
CHANGED
|
@@ -41,6 +41,7 @@ export function sourcePaths(pkgRoot) {
|
|
|
41
41
|
copilotHooksManifest: resolve(pkgRoot, "dist/copilot-hooks.json"),
|
|
42
42
|
configYml: resolve(pkgRoot, "config.yml"),
|
|
43
43
|
apmYml: resolve(pkgRoot, "apm.yml"),
|
|
44
|
+
apmPolicyYml: resolve(pkgRoot, "apm-policy.yml"),
|
|
44
45
|
};
|
|
45
46
|
}
|
|
46
47
|
export function targetPaths(workspace) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/cli/lib/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC;;;;GAIG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,qCAAqC;IACrC,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACzD,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,8CAA8C,GAAG,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/cli/lib/paths.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specky-sdd",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.3",
|
|
4
4
|
"description": "Specky — Spec-Driven Development CLI toolkit. 58 MCP tools, 13 agents, 22 prompts, 8 skills, 16 hooks. Unified `specky` CLI installs to Claude Code or GitHub Copilot on macOS, Linux, and Windows.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"specky-sdd": "dist/cli/index.js"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
|
-
"audit": "node scripts/audit-agent-frontmatter.mjs",
|
|
13
|
-
"build": "node scripts/audit-agent-frontmatter.mjs && tsc && rm -rf dist/templates && cp -r templates dist/templates && node scripts/build-claude-hooks.mjs && node scripts/finalize-build.mjs",
|
|
12
|
+
"audit": "node scripts/check-manifest-sync.mjs && node scripts/audit-agent-frontmatter.mjs",
|
|
13
|
+
"build": "node scripts/check-manifest-sync.mjs && node scripts/audit-agent-frontmatter.mjs && tsc && rm -rf dist/templates && cp -r templates dist/templates && node scripts/build-claude-hooks.mjs && node scripts/finalize-build.mjs",
|
|
14
14
|
"start": "node dist/cli/index.js serve",
|
|
15
15
|
"dev": "tsx watch src/index.ts",
|
|
16
16
|
"clean": "rm -rf dist",
|
|
@@ -25,6 +25,8 @@
|
|
|
25
25
|
".apm/",
|
|
26
26
|
"templates/",
|
|
27
27
|
"apm.yml",
|
|
28
|
+
"apm.lock.yaml",
|
|
29
|
+
"apm-policy.yml",
|
|
28
30
|
"config.yml",
|
|
29
31
|
"media/specky-icon-256.png",
|
|
30
32
|
"media/specky-icon-128.png",
|