@fission-ai/openspec 0.22.0 → 1.0.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.
Files changed (185) hide show
  1. package/README.md +111 -382
  2. package/dist/cli/index.js +120 -6
  3. package/dist/commands/workflow/index.d.ts +17 -0
  4. package/dist/commands/workflow/index.js +12 -0
  5. package/dist/commands/workflow/instructions.d.ts +29 -0
  6. package/dist/commands/workflow/instructions.js +381 -0
  7. package/dist/commands/workflow/new-change.d.ts +11 -0
  8. package/dist/commands/workflow/new-change.js +44 -0
  9. package/dist/commands/workflow/schemas.d.ts +10 -0
  10. package/dist/commands/workflow/schemas.js +34 -0
  11. package/dist/commands/workflow/shared.d.ts +52 -0
  12. package/dist/commands/workflow/shared.js +111 -0
  13. package/dist/commands/workflow/status.d.ts +14 -0
  14. package/dist/commands/workflow/status.js +58 -0
  15. package/dist/commands/workflow/templates.d.ts +16 -0
  16. package/dist/commands/workflow/templates.js +68 -0
  17. package/dist/core/artifact-graph/instruction-loader.d.ts +5 -1
  18. package/dist/core/artifact-graph/instruction-loader.js +8 -19
  19. package/dist/core/command-generation/adapters/amazon-q.d.ts +13 -0
  20. package/dist/core/command-generation/adapters/amazon-q.js +26 -0
  21. package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
  22. package/dist/core/command-generation/adapters/antigravity.js +26 -0
  23. package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
  24. package/dist/core/command-generation/adapters/auggie.js +27 -0
  25. package/dist/core/command-generation/adapters/claude.d.ts +13 -0
  26. package/dist/core/command-generation/adapters/claude.js +50 -0
  27. package/dist/core/command-generation/adapters/cline.d.ts +14 -0
  28. package/dist/core/command-generation/adapters/cline.js +27 -0
  29. package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
  30. package/dist/core/command-generation/adapters/codebuddy.js +28 -0
  31. package/dist/core/command-generation/adapters/codex.d.ts +13 -0
  32. package/dist/core/command-generation/adapters/codex.js +27 -0
  33. package/dist/core/command-generation/adapters/continue.d.ts +13 -0
  34. package/dist/core/command-generation/adapters/continue.js +28 -0
  35. package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
  36. package/dist/core/command-generation/adapters/costrict.js +27 -0
  37. package/dist/core/command-generation/adapters/crush.d.ts +13 -0
  38. package/dist/core/command-generation/adapters/crush.js +30 -0
  39. package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
  40. package/dist/core/command-generation/adapters/cursor.js +44 -0
  41. package/dist/core/command-generation/adapters/factory.d.ts +13 -0
  42. package/dist/core/command-generation/adapters/factory.js +27 -0
  43. package/dist/core/command-generation/adapters/gemini.d.ts +13 -0
  44. package/dist/core/command-generation/adapters/gemini.js +26 -0
  45. package/dist/core/command-generation/adapters/github-copilot.d.ts +13 -0
  46. package/dist/core/command-generation/adapters/github-copilot.js +26 -0
  47. package/dist/core/command-generation/adapters/iflow.d.ts +13 -0
  48. package/dist/core/command-generation/adapters/iflow.js +29 -0
  49. package/dist/core/command-generation/adapters/index.d.ts +27 -0
  50. package/dist/core/command-generation/adapters/index.js +27 -0
  51. package/dist/core/command-generation/adapters/kilocode.d.ts +14 -0
  52. package/dist/core/command-generation/adapters/kilocode.js +23 -0
  53. package/dist/core/command-generation/adapters/opencode.d.ts +13 -0
  54. package/dist/core/command-generation/adapters/opencode.js +26 -0
  55. package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
  56. package/dist/core/command-generation/adapters/qoder.js +30 -0
  57. package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
  58. package/dist/core/command-generation/adapters/qwen.js +26 -0
  59. package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
  60. package/dist/core/command-generation/adapters/roocode.js +27 -0
  61. package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
  62. package/dist/core/command-generation/adapters/windsurf.js +51 -0
  63. package/dist/core/command-generation/generator.d.ts +21 -0
  64. package/dist/core/command-generation/generator.js +27 -0
  65. package/dist/core/command-generation/index.d.ts +22 -0
  66. package/dist/core/command-generation/index.js +24 -0
  67. package/dist/core/command-generation/registry.d.ts +36 -0
  68. package/dist/core/command-generation/registry.js +88 -0
  69. package/dist/core/command-generation/types.d.ts +55 -0
  70. package/dist/core/command-generation/types.js +8 -0
  71. package/dist/core/config-prompts.d.ts +1 -28
  72. package/dist/core/config-prompts.js +26 -143
  73. package/dist/core/config.d.ts +1 -0
  74. package/dist/core/config.js +21 -21
  75. package/dist/core/init.d.ts +16 -36
  76. package/dist/core/init.js +323 -534
  77. package/dist/core/legacy-cleanup.d.ts +162 -0
  78. package/dist/core/legacy-cleanup.js +501 -0
  79. package/dist/core/shared/index.d.ts +8 -0
  80. package/dist/core/shared/index.js +8 -0
  81. package/dist/core/shared/skill-generation.d.ts +41 -0
  82. package/dist/core/shared/skill-generation.js +76 -0
  83. package/dist/core/shared/tool-detection.d.ts +66 -0
  84. package/dist/core/shared/tool-detection.js +140 -0
  85. package/dist/core/templates/index.d.ts +7 -16
  86. package/dist/core/templates/index.js +8 -36
  87. package/dist/core/templates/skill-templates.d.ts +22 -0
  88. package/dist/core/templates/skill-templates.js +1117 -20
  89. package/dist/core/update.d.ts +38 -0
  90. package/dist/core/update.js +280 -62
  91. package/dist/prompts/searchable-multi-select.d.ts +27 -0
  92. package/dist/prompts/searchable-multi-select.js +149 -0
  93. package/dist/ui/ascii-patterns.d.ts +16 -0
  94. package/dist/ui/ascii-patterns.js +133 -0
  95. package/dist/ui/welcome-screen.d.ts +10 -0
  96. package/dist/ui/welcome-screen.js +146 -0
  97. package/dist/utils/file-system.d.ts +11 -0
  98. package/dist/utils/file-system.js +65 -2
  99. package/dist/utils/index.d.ts +1 -0
  100. package/dist/utils/index.js +2 -0
  101. package/package.json +1 -1
  102. package/dist/commands/artifact-workflow.d.ts +0 -17
  103. package/dist/commands/artifact-workflow.js +0 -961
  104. package/dist/core/configurators/agents.d.ts +0 -8
  105. package/dist/core/configurators/agents.js +0 -15
  106. package/dist/core/configurators/base.d.ts +0 -7
  107. package/dist/core/configurators/base.js +0 -2
  108. package/dist/core/configurators/claude.d.ts +0 -8
  109. package/dist/core/configurators/claude.js +0 -15
  110. package/dist/core/configurators/cline.d.ts +0 -8
  111. package/dist/core/configurators/cline.js +0 -15
  112. package/dist/core/configurators/codebuddy.d.ts +0 -8
  113. package/dist/core/configurators/codebuddy.js +0 -15
  114. package/dist/core/configurators/costrict.d.ts +0 -8
  115. package/dist/core/configurators/costrict.js +0 -15
  116. package/dist/core/configurators/iflow.d.ts +0 -8
  117. package/dist/core/configurators/iflow.js +0 -15
  118. package/dist/core/configurators/qoder.d.ts +0 -30
  119. package/dist/core/configurators/qoder.js +0 -42
  120. package/dist/core/configurators/qwen.d.ts +0 -24
  121. package/dist/core/configurators/qwen.js +0 -37
  122. package/dist/core/configurators/registry.d.ts +0 -9
  123. package/dist/core/configurators/registry.js +0 -43
  124. package/dist/core/configurators/slash/amazon-q.d.ts +0 -9
  125. package/dist/core/configurators/slash/amazon-q.js +0 -46
  126. package/dist/core/configurators/slash/antigravity.d.ts +0 -9
  127. package/dist/core/configurators/slash/antigravity.js +0 -23
  128. package/dist/core/configurators/slash/auggie.d.ts +0 -9
  129. package/dist/core/configurators/slash/auggie.js +0 -31
  130. package/dist/core/configurators/slash/base.d.ts +0 -19
  131. package/dist/core/configurators/slash/base.js +0 -69
  132. package/dist/core/configurators/slash/claude.d.ts +0 -9
  133. package/dist/core/configurators/slash/claude.js +0 -37
  134. package/dist/core/configurators/slash/cline.d.ts +0 -9
  135. package/dist/core/configurators/slash/cline.js +0 -23
  136. package/dist/core/configurators/slash/codebuddy.d.ts +0 -9
  137. package/dist/core/configurators/slash/codebuddy.js +0 -34
  138. package/dist/core/configurators/slash/codex.d.ts +0 -14
  139. package/dist/core/configurators/slash/codex.js +0 -109
  140. package/dist/core/configurators/slash/continue.d.ts +0 -9
  141. package/dist/core/configurators/slash/continue.js +0 -46
  142. package/dist/core/configurators/slash/costrict.d.ts +0 -9
  143. package/dist/core/configurators/slash/costrict.js +0 -31
  144. package/dist/core/configurators/slash/crush.d.ts +0 -9
  145. package/dist/core/configurators/slash/crush.js +0 -37
  146. package/dist/core/configurators/slash/cursor.d.ts +0 -9
  147. package/dist/core/configurators/slash/cursor.js +0 -37
  148. package/dist/core/configurators/slash/factory.d.ts +0 -10
  149. package/dist/core/configurators/slash/factory.js +0 -35
  150. package/dist/core/configurators/slash/gemini.d.ts +0 -9
  151. package/dist/core/configurators/slash/gemini.js +0 -22
  152. package/dist/core/configurators/slash/github-copilot.d.ts +0 -9
  153. package/dist/core/configurators/slash/github-copilot.js +0 -34
  154. package/dist/core/configurators/slash/iflow.d.ts +0 -9
  155. package/dist/core/configurators/slash/iflow.js +0 -37
  156. package/dist/core/configurators/slash/kilocode.d.ts +0 -9
  157. package/dist/core/configurators/slash/kilocode.js +0 -17
  158. package/dist/core/configurators/slash/opencode.d.ts +0 -12
  159. package/dist/core/configurators/slash/opencode.js +0 -72
  160. package/dist/core/configurators/slash/qoder.d.ts +0 -35
  161. package/dist/core/configurators/slash/qoder.js +0 -76
  162. package/dist/core/configurators/slash/qwen.d.ts +0 -32
  163. package/dist/core/configurators/slash/qwen.js +0 -49
  164. package/dist/core/configurators/slash/registry.d.ts +0 -8
  165. package/dist/core/configurators/slash/registry.js +0 -78
  166. package/dist/core/configurators/slash/roocode.d.ts +0 -9
  167. package/dist/core/configurators/slash/roocode.js +0 -23
  168. package/dist/core/configurators/slash/toml-base.d.ts +0 -10
  169. package/dist/core/configurators/slash/toml-base.js +0 -53
  170. package/dist/core/configurators/slash/windsurf.d.ts +0 -9
  171. package/dist/core/configurators/slash/windsurf.js +0 -23
  172. package/dist/core/templates/agents-root-stub.d.ts +0 -2
  173. package/dist/core/templates/agents-root-stub.js +0 -17
  174. package/dist/core/templates/agents-template.d.ts +0 -2
  175. package/dist/core/templates/agents-template.js +0 -458
  176. package/dist/core/templates/claude-template.d.ts +0 -2
  177. package/dist/core/templates/claude-template.js +0 -2
  178. package/dist/core/templates/cline-template.d.ts +0 -2
  179. package/dist/core/templates/cline-template.js +0 -2
  180. package/dist/core/templates/costrict-template.d.ts +0 -2
  181. package/dist/core/templates/costrict-template.js +0 -2
  182. package/dist/core/templates/project-template.d.ts +0 -8
  183. package/dist/core/templates/project-template.js +0 -32
  184. package/dist/core/templates/slash-command-templates.d.ts +0 -4
  185. package/dist/core/templates/slash-command-templates.js +0 -49
@@ -1,23 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- const FILE_PATHS = {
3
- proposal: '.clinerules/workflows/openspec-proposal.md',
4
- apply: '.clinerules/workflows/openspec-apply.md',
5
- archive: '.clinerules/workflows/openspec-archive.md'
6
- };
7
- export class ClineSlashCommandConfigurator extends SlashCommandConfigurator {
8
- toolId = 'cline';
9
- isAvailable = true;
10
- getRelativePath(id) {
11
- return FILE_PATHS[id];
12
- }
13
- getFrontmatter(id) {
14
- const descriptions = {
15
- proposal: 'Scaffold a new OpenSpec change and validate strictly.',
16
- apply: 'Implement an approved OpenSpec change and keep tasks in sync.',
17
- archive: 'Archive a deployed OpenSpec change and update specs.'
18
- };
19
- const description = descriptions[id];
20
- return `# OpenSpec: ${id.charAt(0).toUpperCase() + id.slice(1)}\n\n${description}`;
21
- }
22
- }
23
- //# sourceMappingURL=cline.js.map
@@ -1,9 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- import { SlashCommandId } from '../../templates/index.js';
3
- export declare class CodeBuddySlashCommandConfigurator extends SlashCommandConfigurator {
4
- readonly toolId = "codebuddy";
5
- readonly isAvailable = true;
6
- protected getRelativePath(id: SlashCommandId): string;
7
- protected getFrontmatter(id: SlashCommandId): string;
8
- }
9
- //# sourceMappingURL=codebuddy.d.ts.map
@@ -1,34 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- const FILE_PATHS = {
3
- proposal: '.codebuddy/commands/openspec/proposal.md',
4
- apply: '.codebuddy/commands/openspec/apply.md',
5
- archive: '.codebuddy/commands/openspec/archive.md'
6
- };
7
- const FRONTMATTER = {
8
- proposal: `---
9
- name: OpenSpec: Proposal
10
- description: "Scaffold a new OpenSpec change and validate strictly."
11
- argument-hint: "[feature description or request]"
12
- ---`,
13
- apply: `---
14
- name: OpenSpec: Apply
15
- description: "Implement an approved OpenSpec change and keep tasks in sync."
16
- argument-hint: "[change-id]"
17
- ---`,
18
- archive: `---
19
- name: OpenSpec: Archive
20
- description: "Archive a deployed OpenSpec change and update specs."
21
- argument-hint: "[change-id]"
22
- ---`
23
- };
24
- export class CodeBuddySlashCommandConfigurator extends SlashCommandConfigurator {
25
- toolId = 'codebuddy';
26
- isAvailable = true;
27
- getRelativePath(id) {
28
- return FILE_PATHS[id];
29
- }
30
- getFrontmatter(id) {
31
- return FRONTMATTER[id];
32
- }
33
- }
34
- //# sourceMappingURL=codebuddy.js.map
@@ -1,14 +0,0 @@
1
- import { SlashCommandConfigurator } from "./base.js";
2
- import { SlashCommandId } from "../../templates/index.js";
3
- export declare class CodexSlashCommandConfigurator extends SlashCommandConfigurator {
4
- readonly toolId = "codex";
5
- readonly isAvailable = true;
6
- protected getRelativePath(id: SlashCommandId): string;
7
- protected getFrontmatter(id: SlashCommandId): string | undefined;
8
- private getGlobalPromptsDir;
9
- generateAll(projectPath: string, _openspecDir: string): Promise<string[]>;
10
- updateExisting(projectPath: string, _openspecDir: string): Promise<string[]>;
11
- private updateFullFile;
12
- resolveAbsolutePath(_projectPath: string, id: SlashCommandId): string;
13
- }
14
- //# sourceMappingURL=codex.d.ts.map
@@ -1,109 +0,0 @@
1
- import path from "path";
2
- import os from "os";
3
- import { SlashCommandConfigurator } from "./base.js";
4
- import { TemplateManager } from "../../templates/index.js";
5
- import { FileSystemUtils } from "../../../utils/file-system.js";
6
- import { OPENSPEC_MARKERS } from "../../config.js";
7
- // Use POSIX-style paths for consistent logging across platforms.
8
- const FILE_PATHS = {
9
- proposal: ".codex/prompts/openspec-proposal.md",
10
- apply: ".codex/prompts/openspec-apply.md",
11
- archive: ".codex/prompts/openspec-archive.md",
12
- };
13
- export class CodexSlashCommandConfigurator extends SlashCommandConfigurator {
14
- toolId = "codex";
15
- isAvailable = true;
16
- getRelativePath(id) {
17
- return FILE_PATHS[id];
18
- }
19
- getFrontmatter(id) {
20
- // Codex supports YAML frontmatter with description and argument-hint fields,
21
- // plus $ARGUMENTS to capture all arguments as a single string.
22
- const frontmatter = {
23
- proposal: `---
24
- description: Scaffold a new OpenSpec change and validate strictly.
25
- argument-hint: request or feature description
26
- ---
27
-
28
- $ARGUMENTS`,
29
- apply: `---
30
- description: Implement an approved OpenSpec change and keep tasks in sync.
31
- argument-hint: change-id
32
- ---
33
-
34
- $ARGUMENTS`,
35
- archive: `---
36
- description: Archive a deployed OpenSpec change and update specs.
37
- argument-hint: change-id
38
- ---
39
-
40
- $ARGUMENTS`,
41
- };
42
- return frontmatter[id];
43
- }
44
- getGlobalPromptsDir() {
45
- const home = (process.env.CODEX_HOME && process.env.CODEX_HOME.trim())
46
- ? process.env.CODEX_HOME.trim()
47
- : FileSystemUtils.joinPath(os.homedir(), ".codex");
48
- return FileSystemUtils.joinPath(home, "prompts");
49
- }
50
- // Codex discovers prompts globally. Generate directly in the global directory
51
- // and wrap shared body with markers.
52
- async generateAll(projectPath, _openspecDir) {
53
- const createdOrUpdated = [];
54
- for (const target of this.getTargets()) {
55
- const body = TemplateManager.getSlashCommandBody(target.id).trim();
56
- const promptsDir = this.getGlobalPromptsDir();
57
- const filePath = FileSystemUtils.joinPath(promptsDir, path.basename(target.path));
58
- await FileSystemUtils.createDirectory(path.dirname(filePath));
59
- if (await FileSystemUtils.fileExists(filePath)) {
60
- await this.updateFullFile(filePath, target.id, body);
61
- }
62
- else {
63
- const frontmatter = this.getFrontmatter(target.id);
64
- const sections = [];
65
- if (frontmatter)
66
- sections.push(frontmatter.trim());
67
- sections.push(`${OPENSPEC_MARKERS.start}\n${body}\n${OPENSPEC_MARKERS.end}`);
68
- await FileSystemUtils.writeFile(filePath, sections.join("\n") + "\n");
69
- }
70
- createdOrUpdated.push(target.path);
71
- }
72
- return createdOrUpdated;
73
- }
74
- async updateExisting(projectPath, _openspecDir) {
75
- const updated = [];
76
- for (const target of this.getTargets()) {
77
- const promptsDir = this.getGlobalPromptsDir();
78
- const filePath = FileSystemUtils.joinPath(promptsDir, path.basename(target.path));
79
- if (await FileSystemUtils.fileExists(filePath)) {
80
- const body = TemplateManager.getSlashCommandBody(target.id).trim();
81
- await this.updateFullFile(filePath, target.id, body);
82
- updated.push(target.path);
83
- }
84
- }
85
- return updated;
86
- }
87
- // Update both frontmatter and body in an existing file
88
- async updateFullFile(filePath, id, body) {
89
- const content = await FileSystemUtils.readFile(filePath);
90
- const startIndex = content.indexOf(OPENSPEC_MARKERS.start);
91
- if (startIndex === -1) {
92
- throw new Error(`Missing OpenSpec start marker in ${filePath}`);
93
- }
94
- // Replace everything before the start marker with the new frontmatter
95
- const frontmatter = this.getFrontmatter(id);
96
- const sections = [];
97
- if (frontmatter)
98
- sections.push(frontmatter.trim());
99
- sections.push(`${OPENSPEC_MARKERS.start}\n${body}\n${OPENSPEC_MARKERS.end}`);
100
- await FileSystemUtils.writeFile(filePath, sections.join("\n") + "\n");
101
- }
102
- // Resolve to the global prompts location for configuration detection
103
- resolveAbsolutePath(_projectPath, id) {
104
- const promptsDir = this.getGlobalPromptsDir();
105
- const fileName = path.basename(FILE_PATHS[id]);
106
- return FileSystemUtils.joinPath(promptsDir, fileName);
107
- }
108
- }
109
- //# sourceMappingURL=codex.js.map
@@ -1,9 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- import { SlashCommandId } from '../../templates/index.js';
3
- export declare class ContinueSlashCommandConfigurator extends SlashCommandConfigurator {
4
- readonly toolId = "continue";
5
- readonly isAvailable = true;
6
- protected getRelativePath(id: SlashCommandId): string;
7
- protected getFrontmatter(id: SlashCommandId): string;
8
- }
9
- //# sourceMappingURL=continue.d.ts.map
@@ -1,46 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- const FILE_PATHS = {
3
- proposal: '.continue/prompts/openspec-proposal.prompt',
4
- apply: '.continue/prompts/openspec-apply.prompt',
5
- archive: '.continue/prompts/openspec-archive.prompt'
6
- };
7
- /*
8
- * Continue .prompt format requires YAML frontmatter:
9
- * ---
10
- * name: commandName
11
- * description: description
12
- * invokable: true
13
- * ---
14
- * Body...
15
- *
16
- * The 'invokable: true' field is required to make the prompt available as a slash command.
17
- * We use 'openspec-proposal' as the name so the command becomes /openspec-proposal.
18
- */
19
- const FRONTMATTER = {
20
- proposal: `---
21
- name: openspec-proposal
22
- description: Scaffold a new OpenSpec change and validate strictly.
23
- invokable: true
24
- ---`,
25
- apply: `---
26
- name: openspec-apply
27
- description: Implement an approved OpenSpec change and keep tasks in sync.
28
- invokable: true
29
- ---`,
30
- archive: `---
31
- name: openspec-archive
32
- description: Archive a deployed OpenSpec change and update specs.
33
- invokable: true
34
- ---`
35
- };
36
- export class ContinueSlashCommandConfigurator extends SlashCommandConfigurator {
37
- toolId = 'continue';
38
- isAvailable = true;
39
- getRelativePath(id) {
40
- return FILE_PATHS[id];
41
- }
42
- getFrontmatter(id) {
43
- return FRONTMATTER[id];
44
- }
45
- }
46
- //# sourceMappingURL=continue.js.map
@@ -1,9 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- import { SlashCommandId } from '../../templates/index.js';
3
- export declare class CostrictSlashCommandConfigurator extends SlashCommandConfigurator {
4
- readonly toolId = "costrict";
5
- readonly isAvailable = true;
6
- protected getRelativePath(id: SlashCommandId): string;
7
- protected getFrontmatter(id: SlashCommandId): string | undefined;
8
- }
9
- //# sourceMappingURL=costrict.d.ts.map
@@ -1,31 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- const FILE_PATHS = {
3
- proposal: '.cospec/openspec/commands/openspec-proposal.md',
4
- apply: '.cospec/openspec/commands/openspec-apply.md',
5
- archive: '.cospec/openspec/commands/openspec-archive.md',
6
- };
7
- const FRONTMATTER = {
8
- proposal: `---
9
- description: "Scaffold a new OpenSpec change and validate strictly."
10
- argument-hint: feature description or request
11
- ---`,
12
- apply: `---
13
- description: "Implement an approved OpenSpec change and keep tasks in sync."
14
- argument-hint: change-id
15
- ---`,
16
- archive: `---
17
- description: "Archive a deployed OpenSpec change and update specs."
18
- argument-hint: change-id
19
- ---`
20
- };
21
- export class CostrictSlashCommandConfigurator extends SlashCommandConfigurator {
22
- toolId = 'costrict';
23
- isAvailable = true;
24
- getRelativePath(id) {
25
- return FILE_PATHS[id];
26
- }
27
- getFrontmatter(id) {
28
- return FRONTMATTER[id];
29
- }
30
- }
31
- //# sourceMappingURL=costrict.js.map
@@ -1,9 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- import { SlashCommandId } from '../../templates/index.js';
3
- export declare class CrushSlashCommandConfigurator extends SlashCommandConfigurator {
4
- readonly toolId = "crush";
5
- readonly isAvailable = true;
6
- protected getRelativePath(id: SlashCommandId): string;
7
- protected getFrontmatter(id: SlashCommandId): string;
8
- }
9
- //# sourceMappingURL=crush.d.ts.map
@@ -1,37 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- const FILE_PATHS = {
3
- proposal: '.crush/commands/openspec/proposal.md',
4
- apply: '.crush/commands/openspec/apply.md',
5
- archive: '.crush/commands/openspec/archive.md'
6
- };
7
- const FRONTMATTER = {
8
- proposal: `---
9
- name: OpenSpec: Proposal
10
- description: Scaffold a new OpenSpec change and validate strictly.
11
- category: OpenSpec
12
- tags: [openspec, change]
13
- ---`,
14
- apply: `---
15
- name: OpenSpec: Apply
16
- description: Implement an approved OpenSpec change and keep tasks in sync.
17
- category: OpenSpec
18
- tags: [openspec, apply]
19
- ---`,
20
- archive: `---
21
- name: OpenSpec: Archive
22
- description: Archive a deployed OpenSpec change and update specs.
23
- category: OpenSpec
24
- tags: [openspec, archive]
25
- ---`
26
- };
27
- export class CrushSlashCommandConfigurator extends SlashCommandConfigurator {
28
- toolId = 'crush';
29
- isAvailable = true;
30
- getRelativePath(id) {
31
- return FILE_PATHS[id];
32
- }
33
- getFrontmatter(id) {
34
- return FRONTMATTER[id];
35
- }
36
- }
37
- //# sourceMappingURL=crush.js.map
@@ -1,9 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- import { SlashCommandId } from '../../templates/index.js';
3
- export declare class CursorSlashCommandConfigurator extends SlashCommandConfigurator {
4
- readonly toolId = "cursor";
5
- readonly isAvailable = true;
6
- protected getRelativePath(id: SlashCommandId): string;
7
- protected getFrontmatter(id: SlashCommandId): string;
8
- }
9
- //# sourceMappingURL=cursor.d.ts.map
@@ -1,37 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- const FILE_PATHS = {
3
- proposal: '.cursor/commands/openspec-proposal.md',
4
- apply: '.cursor/commands/openspec-apply.md',
5
- archive: '.cursor/commands/openspec-archive.md'
6
- };
7
- const FRONTMATTER = {
8
- proposal: `---
9
- name: /openspec-proposal
10
- id: openspec-proposal
11
- category: OpenSpec
12
- description: Scaffold a new OpenSpec change and validate strictly.
13
- ---`,
14
- apply: `---
15
- name: /openspec-apply
16
- id: openspec-apply
17
- category: OpenSpec
18
- description: Implement an approved OpenSpec change and keep tasks in sync.
19
- ---`,
20
- archive: `---
21
- name: /openspec-archive
22
- id: openspec-archive
23
- category: OpenSpec
24
- description: Archive a deployed OpenSpec change and update specs.
25
- ---`
26
- };
27
- export class CursorSlashCommandConfigurator extends SlashCommandConfigurator {
28
- toolId = 'cursor';
29
- isAvailable = true;
30
- getRelativePath(id) {
31
- return FILE_PATHS[id];
32
- }
33
- getFrontmatter(id) {
34
- return FRONTMATTER[id];
35
- }
36
- }
37
- //# sourceMappingURL=cursor.js.map
@@ -1,10 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- import { SlashCommandId } from '../../templates/index.js';
3
- export declare class FactorySlashCommandConfigurator extends SlashCommandConfigurator {
4
- readonly toolId = "factory";
5
- readonly isAvailable = true;
6
- protected getRelativePath(id: SlashCommandId): string;
7
- protected getFrontmatter(id: SlashCommandId): string;
8
- protected getBody(id: SlashCommandId): string;
9
- }
10
- //# sourceMappingURL=factory.d.ts.map
@@ -1,35 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- const FILE_PATHS = {
3
- proposal: '.factory/commands/openspec-proposal.md',
4
- apply: '.factory/commands/openspec-apply.md',
5
- archive: '.factory/commands/openspec-archive.md'
6
- };
7
- const FRONTMATTER = {
8
- proposal: `---
9
- description: Scaffold a new OpenSpec change and validate strictly.
10
- argument-hint: request or feature description
11
- ---`,
12
- apply: `---
13
- description: Implement an approved OpenSpec change and keep tasks in sync.
14
- argument-hint: change-id
15
- ---`,
16
- archive: `---
17
- description: Archive a deployed OpenSpec change and update specs.
18
- argument-hint: change-id
19
- ---`
20
- };
21
- export class FactorySlashCommandConfigurator extends SlashCommandConfigurator {
22
- toolId = 'factory';
23
- isAvailable = true;
24
- getRelativePath(id) {
25
- return FILE_PATHS[id];
26
- }
27
- getFrontmatter(id) {
28
- return FRONTMATTER[id];
29
- }
30
- getBody(id) {
31
- const baseBody = super.getBody(id);
32
- return `${baseBody}\n\n$ARGUMENTS`;
33
- }
34
- }
35
- //# sourceMappingURL=factory.js.map
@@ -1,9 +0,0 @@
1
- import { TomlSlashCommandConfigurator } from './toml-base.js';
2
- import { SlashCommandId } from '../../templates/index.js';
3
- export declare class GeminiSlashCommandConfigurator extends TomlSlashCommandConfigurator {
4
- readonly toolId = "gemini";
5
- readonly isAvailable = true;
6
- protected getRelativePath(id: SlashCommandId): string;
7
- protected getDescription(id: SlashCommandId): string;
8
- }
9
- //# sourceMappingURL=gemini.d.ts.map
@@ -1,22 +0,0 @@
1
- import { TomlSlashCommandConfigurator } from './toml-base.js';
2
- const FILE_PATHS = {
3
- proposal: '.gemini/commands/openspec/proposal.toml',
4
- apply: '.gemini/commands/openspec/apply.toml',
5
- archive: '.gemini/commands/openspec/archive.toml'
6
- };
7
- const DESCRIPTIONS = {
8
- proposal: 'Scaffold a new OpenSpec change and validate strictly.',
9
- apply: 'Implement an approved OpenSpec change and keep tasks in sync.',
10
- archive: 'Archive a deployed OpenSpec change and update specs.'
11
- };
12
- export class GeminiSlashCommandConfigurator extends TomlSlashCommandConfigurator {
13
- toolId = 'gemini';
14
- isAvailable = true;
15
- getRelativePath(id) {
16
- return FILE_PATHS[id];
17
- }
18
- getDescription(id) {
19
- return DESCRIPTIONS[id];
20
- }
21
- }
22
- //# sourceMappingURL=gemini.js.map
@@ -1,9 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- import { SlashCommandId } from '../../templates/index.js';
3
- export declare class GitHubCopilotSlashCommandConfigurator extends SlashCommandConfigurator {
4
- readonly toolId = "github-copilot";
5
- readonly isAvailable = true;
6
- protected getRelativePath(id: SlashCommandId): string;
7
- protected getFrontmatter(id: SlashCommandId): string;
8
- }
9
- //# sourceMappingURL=github-copilot.d.ts.map
@@ -1,34 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- const FILE_PATHS = {
3
- proposal: '.github/prompts/openspec-proposal.prompt.md',
4
- apply: '.github/prompts/openspec-apply.prompt.md',
5
- archive: '.github/prompts/openspec-archive.prompt.md'
6
- };
7
- const FRONTMATTER = {
8
- proposal: `---
9
- description: Scaffold a new OpenSpec change and validate strictly.
10
- ---
11
-
12
- $ARGUMENTS`,
13
- apply: `---
14
- description: Implement an approved OpenSpec change and keep tasks in sync.
15
- ---
16
-
17
- $ARGUMENTS`,
18
- archive: `---
19
- description: Archive a deployed OpenSpec change and update specs.
20
- ---
21
-
22
- $ARGUMENTS`
23
- };
24
- export class GitHubCopilotSlashCommandConfigurator extends SlashCommandConfigurator {
25
- toolId = 'github-copilot';
26
- isAvailable = true;
27
- getRelativePath(id) {
28
- return FILE_PATHS[id];
29
- }
30
- getFrontmatter(id) {
31
- return FRONTMATTER[id];
32
- }
33
- }
34
- //# sourceMappingURL=github-copilot.js.map
@@ -1,9 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- import { SlashCommandId } from '../../templates/index.js';
3
- export declare class IflowSlashCommandConfigurator extends SlashCommandConfigurator {
4
- readonly toolId = "iflow";
5
- readonly isAvailable = true;
6
- protected getRelativePath(id: SlashCommandId): string;
7
- protected getFrontmatter(id: SlashCommandId): string;
8
- }
9
- //# sourceMappingURL=iflow.d.ts.map
@@ -1,37 +0,0 @@
1
- import { SlashCommandConfigurator } from './base.js';
2
- const FILE_PATHS = {
3
- proposal: '.iflow/commands/openspec-proposal.md',
4
- apply: '.iflow/commands/openspec-apply.md',
5
- archive: '.iflow/commands/openspec-archive.md'
6
- };
7
- const FRONTMATTER = {
8
- proposal: `---
9
- name: /openspec-proposal
10
- id: openspec-proposal
11
- category: OpenSpec
12
- description: Scaffold a new OpenSpec change and validate strictly.
13
- ---`,
14
- apply: `---
15
- name: /openspec-apply
16
- id: openspec-apply
17
- category: OpenSpec
18
- description: Implement an approved OpenSpec change and keep tasks in sync.
19
- ---`,
20
- archive: `---
21
- name: /openspec-archive
22
- id: openspec-archive
23
- category: OpenSpec
24
- description: Archive a deployed OpenSpec change and update specs.
25
- ---`
26
- };
27
- export class IflowSlashCommandConfigurator extends SlashCommandConfigurator {
28
- toolId = 'iflow';
29
- isAvailable = true;
30
- getRelativePath(id) {
31
- return FILE_PATHS[id];
32
- }
33
- getFrontmatter(id) {
34
- return FRONTMATTER[id];
35
- }
36
- }
37
- //# sourceMappingURL=iflow.js.map
@@ -1,9 +0,0 @@
1
- import { SlashCommandConfigurator } from "./base.js";
2
- import { SlashCommandId } from "../../templates/index.js";
3
- export declare class KiloCodeSlashCommandConfigurator extends SlashCommandConfigurator {
4
- readonly toolId = "kilocode";
5
- readonly isAvailable = true;
6
- protected getRelativePath(id: SlashCommandId): string;
7
- protected getFrontmatter(_id: SlashCommandId): string | undefined;
8
- }
9
- //# sourceMappingURL=kilocode.d.ts.map
@@ -1,17 +0,0 @@
1
- import { SlashCommandConfigurator } from "./base.js";
2
- const FILE_PATHS = {
3
- proposal: ".kilocode/workflows/openspec-proposal.md",
4
- apply: ".kilocode/workflows/openspec-apply.md",
5
- archive: ".kilocode/workflows/openspec-archive.md"
6
- };
7
- export class KiloCodeSlashCommandConfigurator extends SlashCommandConfigurator {
8
- toolId = "kilocode";
9
- isAvailable = true;
10
- getRelativePath(id) {
11
- return FILE_PATHS[id];
12
- }
13
- getFrontmatter(_id) {
14
- return undefined;
15
- }
16
- }
17
- //# sourceMappingURL=kilocode.js.map
@@ -1,12 +0,0 @@
1
- import { SlashCommandConfigurator } from "./base.js";
2
- import { SlashCommandId } from "../../templates/index.js";
3
- export declare class OpenCodeSlashCommandConfigurator extends SlashCommandConfigurator {
4
- readonly toolId = "opencode";
5
- readonly isAvailable = true;
6
- protected getRelativePath(id: SlashCommandId): string;
7
- protected getFrontmatter(id: SlashCommandId): string | undefined;
8
- generateAll(projectPath: string, _openspecDir: string): Promise<string[]>;
9
- updateExisting(projectPath: string, _openspecDir: string): Promise<string[]>;
10
- private rewriteArchiveFile;
11
- }
12
- //# sourceMappingURL=opencode.d.ts.map