@hegemonart/get-design-done 1.28.6 → 1.28.7

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.
@@ -0,0 +1,49 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * scripts/lib/install/converters/cursor.cjs — Phase 28.7 (Plan 28.7-04).
5
+ *
6
+ * Cursor SKILL.md converter. Translates Claude-shape source into
7
+ * Cursor's expected shape:
8
+ *
9
+ * - Frontmatter `name:` normalized to `gdd-<skill>` (no double-prefix).
10
+ * - Slash references in prose pass through unchanged — Cursor consumes
11
+ * the same `/gdd-<name>` shape Claude does (see runtime-slash.cjs).
12
+ * Mixed-shape inputs (`gdd-x`, `/gdd:x`) are normalized to `/gdd-x`
13
+ * so the installed skill is consistent.
14
+ * - Tool names in code fences pass through unchanged — Cursor accepts
15
+ * the Claude vocabulary (Read/Write/Bash/Edit/Grep/Glob).
16
+ * - A 1-line HTML adapter header is injected at the top of the body
17
+ * to record that this file was auto-generated from Claude source.
18
+ *
19
+ * Architecture ported from gsd-build/get-shit-done (MIT) — per Phase
20
+ * 28.7 D-02 (port architecture, not source). See NOTICE for upstream
21
+ * attribution. gsd-build's equivalent function is
22
+ * `convertClaudeCommandToCursorSkill` in bin/install.js; our modular
23
+ * factor delegates the actual rewrites to ./shared.cjs.
24
+ *
25
+ * Pure / side-effect-free: no fs, no env, no path. `convert` is a
26
+ * deterministic string → string transform.
27
+ */
28
+
29
+ const shared = require('./shared.cjs');
30
+
31
+ /**
32
+ * Convert Claude-source SKILL.md content for the Cursor runtime.
33
+ *
34
+ * @param {string} content Full source SKILL.md content (frontmatter + body).
35
+ * @param {string} skillName The bare skill name (e.g. `'help'`, `'explore'`).
36
+ * @param {{ runtime?: string }} [opts] Optional context — `runtime` defaults
37
+ * to `'cursor'`. Currently informational only; future per-tier branching
38
+ * may consume it.
39
+ * @returns {string}
40
+ */
41
+ function convert(content, skillName, opts) {
42
+ const { frontmatter, body } = shared.extractFrontmatterAndBody(content);
43
+ const fm = shared.buildFrontmatter(frontmatter, skillName, 'gdd-');
44
+ let out = shared.rewriteSlashRefs(body, 'cursor');
45
+ out = shared.ensureAdapterHeader(out, 'Cursor');
46
+ return fm + out;
47
+ }
48
+
49
+ module.exports = { convert };
@@ -0,0 +1,116 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * scripts/lib/install/converters/gemini.cjs — Phase 28.7 (Plan 28.7-07).
5
+ *
6
+ * Gemini CLI command-file converter. Translates Claude-shape SKILL.md
7
+ * source into the command-format output Gemini expects under
8
+ * `<config>/commands/gdd/<name>.md` (see Phase 28.7 D-05 +
9
+ * `runtime-artifact-layout.cjs#gemini`, which stages this converter via
10
+ * `commandsKind('commands/gdd', 'gdd-', ...)`).
11
+ *
12
+ * Translation rules:
13
+ *
14
+ * - Frontmatter `name:` normalized to `gdd-<skill>` (no double-prefix).
15
+ * - Slash references in prose pass through as `/gdd-<name>` — Gemini
16
+ * accepts the Claude-canonical slash shape via `runtime-slash.cjs`
17
+ * (rt: 'gemini' → `/gdd-`). Legacy colon and shell-variable forms
18
+ * are normalized to `/gdd-`.
19
+ * - Tool names in code fences are rewritten per `GEMINI_TOOL_MAP`
20
+ * (Phase 28.7 D-06 — reuse Phase 21 `reference/gemini-tools.md`
21
+ * authoritative table). Source of truth for the map is the Phase 21
22
+ * reference doc, NOT this file; the constant below is a frozen
23
+ * snapshot of that table as of `Last verified: 2026-04-24`. If
24
+ * Gemini ships a tool-vocabulary change, update
25
+ * `reference/gemini-tools.md` FIRST and then re-sync the constant.
26
+ * Currently mapped:
27
+ * Read → read_file
28
+ * Write → write_file
29
+ * Edit → replace
30
+ * Bash → run_shell_command
31
+ * Grep → search_file_content
32
+ * Glob → glob
33
+ * WebSearch → google_web_search
34
+ * WebFetch → web_fetch
35
+ * `Task` is intentionally absent — per Phase 21 gemini-tools.md
36
+ * "Known gaps", Gemini handles Task via a nested-CLI invocation, not
37
+ * a tool call; skills that rely on Task fall back to documentation
38
+ * prose ("on Gemini this becomes a nested gemini CLI run") that the
39
+ * converter leaves untouched.
40
+ * - Prose mentions of tool names (e.g. "use the Bash tool") are NOT
41
+ * rewritten — only the parenthesized invocation form inside fenced
42
+ * blocks gets rewritten. This matches the codex + augment converter
43
+ * policies (Phase 28.7 D-06 invocation-only convention).
44
+ * - A 1-line HTML adapter header is injected at the top of the body
45
+ * to record that this file was auto-generated from Claude source.
46
+ *
47
+ * Wave 4 layout note: Gemini uses `commands/gdd/<name>.md` (nested
48
+ * `gdd/` subdirectory under `commands/`), distinct from OpenCode + Kilo
49
+ * which use the XDG singular `command/<name>.md` layout. Both shapes
50
+ * are command-format runtimes — they differ only in destSubpath, which
51
+ * is encoded in `runtime-artifact-layout.cjs#commandsKind`.
52
+ *
53
+ * Architecture ported from gsd-build/get-shit-done (MIT) — per Phase
54
+ * 28.7 D-02 (port architecture, not source). See NOTICE for upstream
55
+ * attribution. gsd-build's equivalent function is
56
+ * `convertClaudeCommandToGeminiCommand` in bin/install.js; our modular
57
+ * factor delegates the actual rewrites to ./shared.cjs and follows the
58
+ * same `tool-map + slash-rewrite + adapter-header` pattern as the codex
59
+ * (CODEX_TOOL_MAP) and augment (AUGMENT_TOOL_MAP) converters.
60
+ *
61
+ * Phase 21 reference cite (D-06): reference/gemini-tools.md is the
62
+ * canonical, version-pinned source for the tool-name mapping. Do not
63
+ * edit GEMINI_TOOL_MAP without first updating that file.
64
+ *
65
+ * Pure / side-effect-free: no fs, no env, no path. `convert` is a
66
+ * deterministic string → string transform.
67
+ */
68
+
69
+ const shared = require('./shared.cjs');
70
+
71
+ /**
72
+ * Claude tool name → Gemini tool name. Locked by Phase 21
73
+ * `reference/gemini-tools.md` (per Phase 28.7 D-06). Skills referenced
74
+ * as `Read(...)`, `Write(...)`, etc. in Claude-source code fences are
75
+ * rewritten to Gemini's vocabulary at install time.
76
+ *
77
+ * Note: `Task` is intentionally absent. Per Phase 21 gemini-tools.md
78
+ * "Known gaps", Gemini handles Task via nested-CLI invocation (not a
79
+ * tool call); the converter leaves `Task(...)` references untouched so
80
+ * fallback prose ("on Gemini this becomes a nested gemini CLI run")
81
+ * is still readable.
82
+ *
83
+ * Frozen to prevent accidental mutation. The same Object.freeze pattern
84
+ * is used by CODEX_TOOL_MAP (shared.cjs) and AUGMENT_TOOL_MAP
85
+ * (augment.cjs).
86
+ */
87
+ const GEMINI_TOOL_MAP = Object.freeze({
88
+ Read: 'read_file',
89
+ Write: 'write_file',
90
+ Edit: 'replace',
91
+ Bash: 'run_shell_command',
92
+ Grep: 'search_file_content',
93
+ Glob: 'glob',
94
+ WebSearch: 'google_web_search',
95
+ WebFetch: 'web_fetch',
96
+ });
97
+
98
+ /**
99
+ * Convert Claude-source SKILL.md content for the Gemini runtime.
100
+ *
101
+ * @param {string} content Full source SKILL.md content (frontmatter + body).
102
+ * @param {string} skillName The bare skill name (e.g. `'help'`, `'explore'`).
103
+ * @param {{ runtime?: string }} [opts] Optional context — `runtime` defaults
104
+ * to `'gemini'`. Currently informational only.
105
+ * @returns {string}
106
+ */
107
+ function convert(content, skillName, opts) {
108
+ const { frontmatter, body } = shared.extractFrontmatterAndBody(content);
109
+ const fm = shared.buildFrontmatter(frontmatter, skillName, 'gdd-');
110
+ let out = shared.rewriteSlashRefs(body, 'gemini');
111
+ out = shared.rewriteCodeFenceTools(out, GEMINI_TOOL_MAP);
112
+ out = shared.ensureAdapterHeader(out, 'Gemini');
113
+ return fm + out;
114
+ }
115
+
116
+ module.exports = { convert, GEMINI_TOOL_MAP };
@@ -0,0 +1,62 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * scripts/lib/install/converters/kilo.cjs — Phase 28.7 (Plan 28.7-07).
5
+ *
6
+ * Kilo command-file converter. Translates Claude-shape SKILL.md source
7
+ * into the command-format output Kilo expects under its XDG
8
+ * `command/<name>.md` slash-command directory (see Phase 28.7 D-05 +
9
+ * `runtime-artifact-layout.cjs#kilo`, which stages this converter via
10
+ * `commandsKind('command', 'gdd-', ...)`).
11
+ *
12
+ * Translation rules:
13
+ *
14
+ * - Frontmatter `name:` normalized to `gdd-<skill>` (no double-prefix).
15
+ * - Slash references in prose pass through as `/gdd-<name>` — Kilo
16
+ * accepts the Claude-canonical slash shape via the
17
+ * `runtime-slash.cjs` map (rt: 'kilo' → `/gdd-`). Legacy colon and
18
+ * shell-variable forms are normalized to `/gdd-`.
19
+ * - Tool names in code fences pass through unchanged — per Phase 21
20
+ * verification, Kilo accepts the Claude vocabulary
21
+ * (Read/Write/Bash/Edit/Grep/Glob) natively. No tool-map rewrite.
22
+ * - A 1-line HTML adapter header is injected at the top of the body
23
+ * to record that this file was auto-generated from Claude source.
24
+ *
25
+ * Wave 4 layout note: Kilo uses the same `command/<name>.md` flat
26
+ * layout as OpenCode (its sibling Wave 4 runtime). The converter is
27
+ * structurally identical to opencode.cjs — only the runtime string
28
+ * and adapter-display label differ. Both runtimes share the XDG
29
+ * `command/` directory convention (singular `command`, not the
30
+ * Gemini-style `commands/gdd/` nested path).
31
+ *
32
+ * Architecture ported from gsd-build/get-shit-done (MIT) — per Phase
33
+ * 28.7 D-02 (port architecture, not source). See NOTICE for upstream
34
+ * attribution. gsd-build's equivalent function is
35
+ * `convertClaudeCommandToKiloCommand` in bin/install.js; our modular
36
+ * factor delegates the actual rewrites to ./shared.cjs and follows
37
+ * the same uniform pattern as opencode / cursor / qwen.
38
+ *
39
+ * Pure / side-effect-free: no fs, no env, no path. `convert` is a
40
+ * deterministic string → string transform.
41
+ */
42
+
43
+ const shared = require('./shared.cjs');
44
+
45
+ /**
46
+ * Convert Claude-source SKILL.md content for the Kilo runtime.
47
+ *
48
+ * @param {string} content Full source SKILL.md content (frontmatter + body).
49
+ * @param {string} skillName The bare skill name (e.g. `'help'`, `'explore'`).
50
+ * @param {{ runtime?: string }} [opts] Optional context — `runtime` defaults
51
+ * to `'kilo'`. Currently informational only.
52
+ * @returns {string}
53
+ */
54
+ function convert(content, skillName, opts) {
55
+ const { frontmatter, body } = shared.extractFrontmatterAndBody(content);
56
+ const fm = shared.buildFrontmatter(frontmatter, skillName, 'gdd-');
57
+ let out = shared.rewriteSlashRefs(body, 'kilo');
58
+ out = shared.ensureAdapterHeader(out, 'Kilo');
59
+ return fm + out;
60
+ }
61
+
62
+ module.exports = { convert };
@@ -0,0 +1,64 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * scripts/lib/install/converters/opencode.cjs — Phase 28.7 (Plan 28.7-07).
5
+ *
6
+ * OpenCode command-file converter. Translates Claude-shape SKILL.md
7
+ * source into the command-format output OpenCode expects under its
8
+ * XDG `command/<name>.md` slash-command directory (see Phase 28.7
9
+ * D-05 + `runtime-artifact-layout.cjs#opencode`, which stages this
10
+ * converter via `commandsKind('command', 'gdd-', ...)`).
11
+ *
12
+ * Translation rules:
13
+ *
14
+ * - Frontmatter `name:` normalized to `gdd-<skill>` (no double-prefix).
15
+ * - Slash references in prose pass through as `/gdd-<name>` —
16
+ * OpenCode accepts the Claude-canonical slash shape via the
17
+ * `runtime-slash.cjs` map (rt: 'opencode' → `/gdd-`). Legacy
18
+ * colon and shell-variable forms are normalized to `/gdd-`.
19
+ * - Tool names in code fences pass through unchanged — per Phase 21
20
+ * verification, OpenCode accepts the Claude vocabulary
21
+ * (Read/Write/Bash/Edit/Grep/Glob) natively. No tool-map rewrite.
22
+ * - A 1-line HTML adapter header is injected at the top of the body
23
+ * to record that this file was auto-generated from Claude source.
24
+ *
25
+ * Command-format vs skills-format note: OpenCode is one of three Wave 4
26
+ * runtimes (alongside kilo + gemini) whose layout is a flat
27
+ * `command/<name>.md` file rather than the per-skill folder structure
28
+ * (`skills/<name>/SKILL.md`) used by Wave 1/2/3 runtimes. The converter
29
+ * itself does NOT know its destination directory — the destSubpath is
30
+ * encoded in `runtime-artifact-layout.cjs#commandsKind`. From the
31
+ * converter's perspective, the output is still a single markdown +
32
+ * YAML-frontmatter string; the installer routes it to the right path.
33
+ *
34
+ * Architecture ported from gsd-build/get-shit-done (MIT) — per Phase
35
+ * 28.7 D-02 (port architecture, not source). See NOTICE for upstream
36
+ * attribution. gsd-build's equivalent function is
37
+ * `convertClaudeCommandToOpenCodeCommand` in bin/install.js; our
38
+ * modular factor delegates the actual rewrites to ./shared.cjs and
39
+ * follows the same uniform pattern as cursor / qwen / copilot.
40
+ *
41
+ * Pure / side-effect-free: no fs, no env, no path. `convert` is a
42
+ * deterministic string → string transform.
43
+ */
44
+
45
+ const shared = require('./shared.cjs');
46
+
47
+ /**
48
+ * Convert Claude-source SKILL.md content for the OpenCode runtime.
49
+ *
50
+ * @param {string} content Full source SKILL.md content (frontmatter + body).
51
+ * @param {string} skillName The bare skill name (e.g. `'help'`, `'explore'`).
52
+ * @param {{ runtime?: string }} [opts] Optional context — `runtime` defaults
53
+ * to `'opencode'`. Currently informational only.
54
+ * @returns {string}
55
+ */
56
+ function convert(content, skillName, opts) {
57
+ const { frontmatter, body } = shared.extractFrontmatterAndBody(content);
58
+ const fm = shared.buildFrontmatter(frontmatter, skillName, 'gdd-');
59
+ let out = shared.rewriteSlashRefs(body, 'opencode');
60
+ out = shared.ensureAdapterHeader(out, 'OpenCode');
61
+ return fm + out;
62
+ }
63
+
64
+ module.exports = { convert };
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * scripts/lib/install/converters/qwen.cjs — Phase 28.7 (Plan 28.7-05).
5
+ *
6
+ * Qwen Code SKILL.md converter. Translates Claude-shape source into
7
+ * Qwen's expected shape:
8
+ *
9
+ * - Frontmatter `name:` normalized to `gdd-<skill>` (no double-prefix).
10
+ * - Slash references in prose pass through as `/gdd-<name>` —
11
+ * Qwen accepts the Claude shape. Mixed-shape inputs are normalized
12
+ * via the runtime-slash module.
13
+ * - Tool names in code fences pass through unchanged — per Phase 21
14
+ * verification, Qwen Code is Claude-compatible and accepts the
15
+ * Claude vocabulary (Read/Write/Bash/Edit/Grep/Glob) natively.
16
+ * gsd-build reuses `convertClaudeCommandToClaudeSkill` for Qwen on
17
+ * the same grounds; our modular equivalent simply omits the tool-map
18
+ * rewrite step (cf. cursor.cjs / windsurf.cjs / trae.cjs).
19
+ * - A 1-line HTML adapter header is injected at the top of the body
20
+ * to record that this file was auto-generated from Claude source.
21
+ *
22
+ * Architecture ported from gsd-build/get-shit-done (MIT) — per Phase
23
+ * 28.7 D-02 (port architecture, not source). See NOTICE for upstream
24
+ * attribution. gsd-build's qwen runtime reuses Claude-shape conversion
25
+ * (see runtime-artifact-layout.cjs case 'qwen'); our modular factor
26
+ * delegates the actual rewrites to ./shared.cjs.
27
+ *
28
+ * Pure / side-effect-free: no fs, no env, no path. `convert` is a
29
+ * deterministic string → string transform.
30
+ */
31
+
32
+ const shared = require('./shared.cjs');
33
+
34
+ /**
35
+ * Convert Claude-source SKILL.md content for the Qwen runtime.
36
+ *
37
+ * @param {string} content Full source SKILL.md content (frontmatter + body).
38
+ * @param {string} skillName The bare skill name (e.g. `'help'`, `'explore'`).
39
+ * @param {{ runtime?: string }} [opts] Optional context — `runtime` defaults
40
+ * to `'qwen'`. Currently informational only.
41
+ * @returns {string}
42
+ */
43
+ function convert(content, skillName, opts) {
44
+ const { frontmatter, body } = shared.extractFrontmatterAndBody(content);
45
+ const fm = shared.buildFrontmatter(frontmatter, skillName, 'gdd-');
46
+ let out = shared.rewriteSlashRefs(body, 'qwen');
47
+ out = shared.ensureAdapterHeader(out, 'Qwen');
48
+ return fm + out;
49
+ }
50
+
51
+ module.exports = { convert };