clavix 2.7.1 → 2.8.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 (165) hide show
  1. package/README.md +18 -4
  2. package/bin/clavix.js +12 -5
  3. package/dist/cli/commands/archive.d.ts +5 -4
  4. package/dist/cli/commands/archive.js +135 -161
  5. package/dist/cli/commands/config.d.ts +4 -4
  6. package/dist/cli/commands/config.js +66 -105
  7. package/dist/cli/commands/deep.d.ts +3 -3
  8. package/dist/cli/commands/deep.js +97 -103
  9. package/dist/cli/commands/execute.d.ts +4 -4
  10. package/dist/cli/commands/execute.js +57 -63
  11. package/dist/cli/commands/fast.d.ts +3 -3
  12. package/dist/cli/commands/fast.js +122 -128
  13. package/dist/cli/commands/implement.d.ts +4 -4
  14. package/dist/cli/commands/implement.js +84 -148
  15. package/dist/cli/commands/init.js +87 -126
  16. package/dist/cli/commands/list.d.ts +5 -5
  17. package/dist/cli/commands/list.js +72 -111
  18. package/dist/cli/commands/plan.d.ts +7 -7
  19. package/dist/cli/commands/plan.js +92 -131
  20. package/dist/cli/commands/prd.d.ts +4 -4
  21. package/dist/cli/commands/prd.js +76 -111
  22. package/dist/cli/commands/prompts/clear.d.ts +6 -6
  23. package/dist/cli/commands/prompts/clear.js +70 -76
  24. package/dist/cli/commands/prompts/list.js +37 -43
  25. package/dist/cli/commands/show.d.ts +4 -4
  26. package/dist/cli/commands/show.js +72 -111
  27. package/dist/cli/commands/start.d.ts +3 -3
  28. package/dist/cli/commands/start.js +63 -101
  29. package/dist/cli/commands/summarize.d.ts +4 -4
  30. package/dist/cli/commands/summarize.js +81 -120
  31. package/dist/cli/commands/task-complete.d.ts +4 -4
  32. package/dist/cli/commands/task-complete.js +86 -123
  33. package/dist/cli/commands/update.d.ts +3 -3
  34. package/dist/cli/commands/update.js +97 -130
  35. package/dist/cli/commands/version.js +13 -48
  36. package/dist/core/adapters/agents-md-generator.js +17 -50
  37. package/dist/core/adapters/amp-adapter.d.ts +1 -1
  38. package/dist/core/adapters/amp-adapter.js +13 -21
  39. package/dist/core/adapters/augment-adapter.d.ts +2 -2
  40. package/dist/core/adapters/augment-adapter.js +16 -56
  41. package/dist/core/adapters/base-adapter.d.ts +1 -1
  42. package/dist/core/adapters/base-adapter.js +11 -47
  43. package/dist/core/adapters/claude-code-adapter.d.ts +2 -2
  44. package/dist/core/adapters/claude-code-adapter.js +19 -60
  45. package/dist/core/adapters/cline-adapter.d.ts +1 -1
  46. package/dist/core/adapters/cline-adapter.js +13 -21
  47. package/dist/core/adapters/codebuddy-adapter.d.ts +2 -2
  48. package/dist/core/adapters/codebuddy-adapter.js +17 -57
  49. package/dist/core/adapters/codex-adapter.d.ts +2 -2
  50. package/dist/core/adapters/codex-adapter.js +16 -56
  51. package/dist/core/adapters/copilot-instructions-generator.js +18 -51
  52. package/dist/core/adapters/crush-adapter.d.ts +2 -2
  53. package/dist/core/adapters/crush-adapter.js +13 -20
  54. package/dist/core/adapters/cursor-adapter.d.ts +1 -1
  55. package/dist/core/adapters/cursor-adapter.js +12 -20
  56. package/dist/core/adapters/droid-adapter.d.ts +2 -2
  57. package/dist/core/adapters/droid-adapter.js +14 -21
  58. package/dist/core/adapters/gemini-adapter.d.ts +2 -2
  59. package/dist/core/adapters/gemini-adapter.js +16 -52
  60. package/dist/core/adapters/kilocode-adapter.d.ts +1 -1
  61. package/dist/core/adapters/kilocode-adapter.js +12 -20
  62. package/dist/core/adapters/octo-md-generator.js +17 -50
  63. package/dist/core/adapters/opencode-adapter.d.ts +2 -2
  64. package/dist/core/adapters/opencode-adapter.js +14 -21
  65. package/dist/core/adapters/qwen-adapter.d.ts +2 -2
  66. package/dist/core/adapters/qwen-adapter.js +16 -52
  67. package/dist/core/adapters/roocode-adapter.d.ts +2 -2
  68. package/dist/core/adapters/roocode-adapter.js +12 -19
  69. package/dist/core/adapters/warp-md-generator.js +17 -50
  70. package/dist/core/adapters/windsurf-adapter.d.ts +1 -1
  71. package/dist/core/adapters/windsurf-adapter.js +12 -20
  72. package/dist/core/agent-manager.d.ts +1 -1
  73. package/dist/core/agent-manager.js +34 -38
  74. package/dist/core/archive-manager.js +10 -46
  75. package/dist/core/config-manager.d.ts +2 -2
  76. package/dist/core/config-manager.js +3 -40
  77. package/dist/core/conversation-analyzer.d.ts +1 -1
  78. package/dist/core/conversation-analyzer.js +1 -5
  79. package/dist/core/doc-injector.js +23 -60
  80. package/dist/core/git-manager.js +11 -48
  81. package/dist/core/prd-generator.js +16 -51
  82. package/dist/core/prompt-manager.js +6 -42
  83. package/dist/core/prompt-optimizer.js +1 -5
  84. package/dist/core/question-engine.js +6 -45
  85. package/dist/core/session-manager.d.ts +1 -1
  86. package/dist/core/session-manager.js +11 -49
  87. package/dist/core/task-manager.d.ts +26 -0
  88. package/dist/core/task-manager.js +243 -101
  89. package/dist/index.d.ts +2 -1
  90. package/dist/index.js +8 -12
  91. package/dist/templates/agents/agents.md +31 -2
  92. package/dist/templates/agents/copilot-instructions.md +1 -1
  93. package/dist/templates/agents/octo.md +20 -1
  94. package/dist/templates/agents/warp.md +1 -1
  95. package/dist/templates/slash-commands/_canonical/implement.md +33 -11
  96. package/dist/types/agent.js +1 -2
  97. package/dist/types/config.js +3 -8
  98. package/dist/types/errors.js +7 -13
  99. package/dist/types/session.js +1 -2
  100. package/dist/utils/agent-error-messages.js +1 -5
  101. package/dist/utils/error-utils.js +5 -12
  102. package/dist/utils/file-system.js +20 -57
  103. package/dist/utils/legacy-command-cleanup.d.ts +1 -1
  104. package/dist/utils/legacy-command-cleanup.js +9 -45
  105. package/dist/utils/template-loader.d.ts +1 -1
  106. package/dist/utils/template-loader.js +9 -41
  107. package/dist/utils/toml-templates.js +1 -4
  108. package/package.json +9 -4
  109. package/dist/core/adapters 2/agents-md-generator.d.ts +0 -26
  110. package/dist/core/adapters 2/agents-md-generator.js +0 -102
  111. package/dist/core/adapters 2/amp-adapter.d.ts +0 -27
  112. package/dist/core/adapters 2/amp-adapter.js +0 -42
  113. package/dist/core/adapters 2/augment-adapter.d.ts +0 -22
  114. package/dist/core/adapters 2/augment-adapter.js +0 -77
  115. package/dist/core/adapters 2/base-adapter.d.ts +0 -45
  116. package/dist/core/adapters 2/base-adapter.js +0 -142
  117. package/dist/core/adapters 2/claude-code-adapter.d.ts +0 -32
  118. package/dist/core/adapters 2/claude-code-adapter.js +0 -116
  119. package/dist/core/adapters 2/cline-adapter.d.ts +0 -34
  120. package/dist/core/adapters 2/cline-adapter.js +0 -52
  121. package/dist/core/adapters 2/codebuddy-adapter.d.ts +0 -24
  122. package/dist/core/adapters 2/codebuddy-adapter.js +0 -82
  123. package/dist/core/adapters 2/codex-adapter.d.ts +0 -24
  124. package/dist/core/adapters 2/codex-adapter.js +0 -79
  125. package/dist/core/adapters 2/copilot-instructions-generator.d.ts +0 -26
  126. package/dist/core/adapters 2/copilot-instructions-generator.js +0 -104
  127. package/dist/core/adapters 2/crush-adapter.d.ts +0 -35
  128. package/dist/core/adapters 2/crush-adapter.js +0 -49
  129. package/dist/core/adapters 2/cursor-adapter.d.ts +0 -25
  130. package/dist/core/adapters 2/cursor-adapter.js +0 -40
  131. package/dist/core/adapters 2/droid-adapter.d.ts +0 -33
  132. package/dist/core/adapters 2/droid-adapter.js +0 -57
  133. package/dist/core/adapters 2/gemini-adapter.d.ts +0 -27
  134. package/dist/core/adapters 2/gemini-adapter.js +0 -90
  135. package/dist/core/adapters 2/kilocode-adapter.d.ts +0 -34
  136. package/dist/core/adapters 2/kilocode-adapter.js +0 -49
  137. package/dist/core/adapters 2/octo-md-generator.d.ts +0 -26
  138. package/dist/core/adapters 2/octo-md-generator.js +0 -102
  139. package/dist/core/adapters 2/opencode-adapter.d.ts +0 -33
  140. package/dist/core/adapters 2/opencode-adapter.js +0 -56
  141. package/dist/core/adapters 2/qwen-adapter.d.ts +0 -27
  142. package/dist/core/adapters 2/qwen-adapter.js +0 -90
  143. package/dist/core/adapters 2/roocode-adapter.d.ts +0 -40
  144. package/dist/core/adapters 2/roocode-adapter.js +0 -68
  145. package/dist/core/adapters 2/warp-md-generator.d.ts +0 -17
  146. package/dist/core/adapters 2/warp-md-generator.js +0 -88
  147. package/dist/core/adapters 2/windsurf-adapter.d.ts +0 -34
  148. package/dist/core/adapters 2/windsurf-adapter.js +0 -49
  149. package/dist/core/agent-manager 2.js +0 -126
  150. package/dist/core/agent-manager.d 2.ts +0 -51
  151. package/dist/core/archive-manager 2.js +0 -338
  152. package/dist/core/archive-manager.d 2.ts +0 -100
  153. package/dist/core/conversation-analyzer.d 2.ts +0 -86
  154. package/dist/core/doc-injector 2.js +0 -236
  155. package/dist/core/doc-injector.d 2.ts +0 -51
  156. package/dist/core/git-manager 2.js +0 -214
  157. package/dist/core/git-manager.d 2.ts +0 -100
  158. package/dist/core/prompt-optimizer 2.js +0 -963
  159. package/dist/core/prompt-optimizer.d 2.ts +0 -268
  160. package/dist/core/question-engine 2.js +0 -395
  161. package/dist/core/question-engine.d 2.ts +0 -167
  162. package/dist/core/session-manager 2.js +0 -403
  163. package/dist/core/session-manager.d 2.ts +0 -139
  164. package/dist/core/task-manager 2.js +0 -689
  165. package/dist/core/task-manager.d 2.ts +0 -155
@@ -1,34 +0,0 @@
1
- import { BaseAdapter } from './base-adapter';
2
- /**
3
- * Kilocode adapter
4
- * Workflows stored in .kilocode/workflows/ (flat structure, no subdirectories)
5
- * Slash command format: /[name.md] (includes .md extension)
6
- *
7
- * Features:
8
- * - Simple markdown with step-by-step instructions
9
- * - Supports built-in tools and MCP integrations
10
- * - Project-specific workflows only
11
- *
12
- * Reference: https://kilocode.ai/docs/features/slash-commands/workflows
13
- */
14
- export declare class KilocodeAdapter extends BaseAdapter {
15
- readonly name = "kilocode";
16
- readonly displayName = "Kilocode";
17
- readonly directory = ".kilocode/workflows";
18
- readonly fileExtension = ".md";
19
- readonly features: {
20
- supportsSubdirectories: boolean;
21
- supportsFrontmatter: boolean;
22
- };
23
- /**
24
- * Detect if Kilocode is available in the project
25
- * Checks for .kilocode directory
26
- */
27
- detectProject(): Promise<boolean>;
28
- /**
29
- * Get command path for Kilocode
30
- */
31
- getCommandPath(): string;
32
- getTargetFilename(name: string): string;
33
- }
34
- //# sourceMappingURL=kilocode-adapter.d.ts.map
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KilocodeAdapter = void 0;
4
- const base_adapter_1 = require("./base-adapter");
5
- const file_system_1 = require("../../utils/file-system");
6
- /**
7
- * Kilocode adapter
8
- * Workflows stored in .kilocode/workflows/ (flat structure, no subdirectories)
9
- * Slash command format: /[name.md] (includes .md extension)
10
- *
11
- * Features:
12
- * - Simple markdown with step-by-step instructions
13
- * - Supports built-in tools and MCP integrations
14
- * - Project-specific workflows only
15
- *
16
- * Reference: https://kilocode.ai/docs/features/slash-commands/workflows
17
- */
18
- class KilocodeAdapter extends base_adapter_1.BaseAdapter {
19
- constructor() {
20
- super(...arguments);
21
- this.name = 'kilocode';
22
- this.displayName = 'Kilocode';
23
- this.directory = '.kilocode/workflows';
24
- this.fileExtension = '.md';
25
- this.features = {
26
- supportsSubdirectories: false,
27
- supportsFrontmatter: false,
28
- };
29
- // Uses default formatCommand and generateCommands from BaseAdapter
30
- }
31
- /**
32
- * Detect if Kilocode is available in the project
33
- * Checks for .kilocode directory
34
- */
35
- async detectProject() {
36
- return await file_system_1.FileSystem.exists('.kilocode');
37
- }
38
- /**
39
- * Get command path for Kilocode
40
- */
41
- getCommandPath() {
42
- return this.directory;
43
- }
44
- getTargetFilename(name) {
45
- return `clavix-${name}${this.fileExtension}`;
46
- }
47
- }
48
- exports.KilocodeAdapter = KilocodeAdapter;
49
- //# sourceMappingURL=kilocode-adapter.js.map
@@ -1,26 +0,0 @@
1
- /**
2
- * Generator for Octofriend OCTO.md file
3
- * Provides workflow instructions optimized for Octofriend capabilities
4
- */
5
- export declare class OctoMdGenerator {
6
- static readonly TARGET_FILE = "OCTO.md";
7
- static readonly START_MARKER = "<!-- CLAVIX:START -->";
8
- static readonly END_MARKER = "<!-- CLAVIX:END -->";
9
- /**
10
- * Generate or update OCTO.md with Clavix workflows
11
- */
12
- static generate(): Promise<void>;
13
- /**
14
- * Inject or update managed block in OCTO.md
15
- */
16
- private static injectManagedBlock;
17
- /**
18
- * Escape special regex characters
19
- */
20
- private static escapeRegex;
21
- /**
22
- * Check if OCTO.md has Clavix block
23
- */
24
- static hasClavixBlock(): Promise<boolean>;
25
- }
26
- //# sourceMappingURL=octo-md-generator.d.ts.map
@@ -1,102 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.OctoMdGenerator = void 0;
37
- const file_system_1 = require("../../utils/file-system");
38
- const path = __importStar(require("path"));
39
- /**
40
- * Generator for Octofriend OCTO.md file
41
- * Provides workflow instructions optimized for Octofriend capabilities
42
- */
43
- class OctoMdGenerator {
44
- /**
45
- * Generate or update OCTO.md with Clavix workflows
46
- */
47
- static async generate() {
48
- const templatePath = path.join(__dirname, '../../templates/agents/octo.md');
49
- // Check if template exists
50
- if (!(await file_system_1.FileSystem.exists(templatePath))) {
51
- throw new Error(`OCTO.md template not found at ${templatePath}`);
52
- }
53
- const template = await file_system_1.FileSystem.readFile(templatePath);
54
- // Inject into OCTO.md using managed blocks
55
- await this.injectManagedBlock(this.TARGET_FILE, template);
56
- }
57
- /**
58
- * Inject or update managed block in OCTO.md
59
- */
60
- static async injectManagedBlock(filePath, content) {
61
- let fileContent = '';
62
- // Read existing file or start with empty content
63
- if (await file_system_1.FileSystem.exists(filePath)) {
64
- fileContent = await file_system_1.FileSystem.readFile(filePath);
65
- }
66
- const blockRegex = new RegExp(`${this.escapeRegex(this.START_MARKER)}[\\s\\S]*?${this.escapeRegex(this.END_MARKER)}`, 'g');
67
- const wrappedContent = `${this.START_MARKER}\n${content}\n${this.END_MARKER}`;
68
- if (blockRegex.test(fileContent)) {
69
- // Replace existing block
70
- fileContent = fileContent.replace(blockRegex, wrappedContent);
71
- }
72
- else {
73
- // Append new block
74
- if (fileContent && !fileContent.endsWith('\n\n')) {
75
- fileContent += '\n\n';
76
- }
77
- fileContent += wrappedContent + '\n';
78
- }
79
- await file_system_1.FileSystem.writeFileAtomic(filePath, fileContent);
80
- }
81
- /**
82
- * Escape special regex characters
83
- */
84
- static escapeRegex(str) {
85
- return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
86
- }
87
- /**
88
- * Check if OCTO.md has Clavix block
89
- */
90
- static async hasClavixBlock() {
91
- if (!(await file_system_1.FileSystem.exists(this.TARGET_FILE))) {
92
- return false;
93
- }
94
- const content = await file_system_1.FileSystem.readFile(this.TARGET_FILE);
95
- return content.includes(this.START_MARKER);
96
- }
97
- }
98
- exports.OctoMdGenerator = OctoMdGenerator;
99
- OctoMdGenerator.TARGET_FILE = 'OCTO.md';
100
- OctoMdGenerator.START_MARKER = '<!-- CLAVIX:START -->';
101
- OctoMdGenerator.END_MARKER = '<!-- CLAVIX:END -->';
102
- //# sourceMappingURL=octo-md-generator.js.map
@@ -1,33 +0,0 @@
1
- import { BaseAdapter } from './base-adapter';
2
- import { CommandTemplate } from '../../types/agent';
3
- /**
4
- * OpenCode adapter
5
- * Commands stored in .opencode/command/ with frontmatter
6
- * Uses $ARGUMENTS, $1, $2 placeholders
7
- */
8
- export declare class OpenCodeAdapter extends BaseAdapter {
9
- readonly name = "opencode";
10
- readonly displayName = "OpenCode";
11
- readonly directory = ".opencode/command";
12
- readonly fileExtension = ".md";
13
- readonly features: {
14
- supportsSubdirectories: boolean;
15
- supportsFrontmatter: boolean;
16
- frontmatterFields: string[];
17
- argumentPlaceholder: string;
18
- };
19
- /**
20
- * Detect if OpenCode is available in the project
21
- */
22
- detectProject(): Promise<boolean>;
23
- /**
24
- * Get command path for OpenCode
25
- */
26
- getCommandPath(): string;
27
- getTargetFilename(name: string): string;
28
- /**
29
- * Format command with frontmatter for OpenCode
30
- */
31
- protected formatCommand(template: CommandTemplate): string;
32
- }
33
- //# sourceMappingURL=opencode-adapter.d.ts.map
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OpenCodeAdapter = void 0;
4
- const base_adapter_1 = require("./base-adapter");
5
- const file_system_1 = require("../../utils/file-system");
6
- /**
7
- * OpenCode adapter
8
- * Commands stored in .opencode/command/ with frontmatter
9
- * Uses $ARGUMENTS, $1, $2 placeholders
10
- */
11
- class OpenCodeAdapter extends base_adapter_1.BaseAdapter {
12
- constructor() {
13
- super(...arguments);
14
- this.name = 'opencode';
15
- this.displayName = 'OpenCode';
16
- this.directory = '.opencode/command';
17
- this.fileExtension = '.md';
18
- this.features = {
19
- supportsSubdirectories: false,
20
- supportsFrontmatter: true,
21
- frontmatterFields: ['description', 'agent', 'model'],
22
- argumentPlaceholder: '$ARGUMENTS',
23
- };
24
- }
25
- /**
26
- * Detect if OpenCode is available in the project
27
- */
28
- async detectProject() {
29
- return await file_system_1.FileSystem.exists('.opencode');
30
- }
31
- /**
32
- * Get command path for OpenCode
33
- */
34
- getCommandPath() {
35
- return this.directory;
36
- }
37
- getTargetFilename(name) {
38
- return `clavix-${name}${this.fileExtension}`;
39
- }
40
- /**
41
- * Format command with frontmatter for OpenCode
42
- */
43
- formatCommand(template) {
44
- // Add frontmatter
45
- const frontmatter = `---
46
- description: ${template.description}
47
- ---
48
-
49
- `;
50
- // Replace generic argument placeholder with $ARGUMENTS
51
- const content = template.content.replace(/\{\{ARGS\}\}/g, '$ARGUMENTS');
52
- return frontmatter + content;
53
- }
54
- }
55
- exports.OpenCodeAdapter = OpenCodeAdapter;
56
- //# sourceMappingURL=opencode-adapter.js.map
@@ -1,27 +0,0 @@
1
- import { BaseAdapter } from './base-adapter';
2
- import { CommandTemplate } from '../../types/agent';
3
- /**
4
- * Qwen Code CLI adapter
5
- * Commands stored as TOML files under .qwen/commands/clavix by default
6
- */
7
- export declare class QwenAdapter extends BaseAdapter {
8
- private readonly options;
9
- readonly name = "qwen";
10
- readonly displayName = "Qwen Code";
11
- readonly fileExtension = ".toml";
12
- readonly features: {
13
- supportsSubdirectories: boolean;
14
- supportsFrontmatter: boolean;
15
- argumentPlaceholder: string;
16
- };
17
- constructor(options?: {
18
- useNamespace?: boolean;
19
- });
20
- get directory(): string;
21
- detectProject(): Promise<boolean>;
22
- getCommandPath(): string;
23
- getTargetFilename(name: string): string;
24
- protected formatCommand(template: CommandTemplate): string;
25
- private getHomeDir;
26
- }
27
- //# sourceMappingURL=qwen-adapter.d.ts.map
@@ -1,90 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.QwenAdapter = void 0;
37
- const os = __importStar(require("os"));
38
- const path = __importStar(require("path"));
39
- const base_adapter_1 = require("./base-adapter");
40
- const file_system_1 = require("../../utils/file-system");
41
- /**
42
- * Qwen Code CLI adapter
43
- * Commands stored as TOML files under .qwen/commands/clavix by default
44
- */
45
- class QwenAdapter extends base_adapter_1.BaseAdapter {
46
- constructor(options = {}) {
47
- super();
48
- this.options = options;
49
- this.name = 'qwen';
50
- this.displayName = 'Qwen Code';
51
- this.fileExtension = '.toml';
52
- this.features = {
53
- supportsSubdirectories: true,
54
- supportsFrontmatter: false,
55
- argumentPlaceholder: '{{args}}',
56
- };
57
- }
58
- get directory() {
59
- const useNamespace = this.options.useNamespace ?? true;
60
- return useNamespace ? path.join('.qwen', 'commands', 'clavix') : path.join('.qwen', 'commands');
61
- }
62
- async detectProject() {
63
- if (await file_system_1.FileSystem.exists('.qwen')) {
64
- return true;
65
- }
66
- const homePath = path.join(this.getHomeDir(), '.qwen');
67
- return await file_system_1.FileSystem.exists(homePath);
68
- }
69
- getCommandPath() {
70
- return this.directory;
71
- }
72
- getTargetFilename(name) {
73
- const commandPath = this.getCommandPath();
74
- const namespaced = commandPath.endsWith(path.join('commands', 'clavix'));
75
- const baseName = namespaced ? name : `clavix-${name}`;
76
- return `${baseName}${this.fileExtension}`;
77
- }
78
- formatCommand(template) {
79
- const description = template.description.trim().length > 0
80
- ? `description = ${JSON.stringify(template.description)}\n\n`
81
- : '';
82
- const content = template.content.replace(/\{\{ARGS\}\}/g, '{{args}}');
83
- return `${description}prompt = """\n${content}\n"""\n`;
84
- }
85
- getHomeDir() {
86
- return process.env.CLAVIX_HOME_OVERRIDE || os.homedir();
87
- }
88
- }
89
- exports.QwenAdapter = QwenAdapter;
90
- //# sourceMappingURL=qwen-adapter.js.map
@@ -1,40 +0,0 @@
1
- import { BaseAdapter } from './base-adapter';
2
- import { CommandTemplate } from '../../types/agent';
3
- /**
4
- * Roocode adapter
5
- * Commands stored in .roo/commands/ (flat structure, no subdirectories)
6
- * Slash command format: /[name] (no .md extension, auto-converts to lowercase/dashes)
7
- *
8
- * Features:
9
- * - Supports optional frontmatter (description, argument-hint)
10
- * - Command names automatically processed: lowercase, spaces→dashes, special chars removed
11
- * - Project commands override global commands
12
- *
13
- * Reference: https://docs.roocode.com/features/slash-commands
14
- */
15
- export declare class RoocodeAdapter extends BaseAdapter {
16
- readonly name = "roocode";
17
- readonly displayName = "Roocode";
18
- readonly directory = ".roo/commands";
19
- readonly fileExtension = ".md";
20
- readonly features: {
21
- supportsSubdirectories: boolean;
22
- supportsFrontmatter: boolean;
23
- };
24
- /**
25
- * Detect if Roocode is available in the project
26
- * Checks for .roo directory
27
- */
28
- detectProject(): Promise<boolean>;
29
- /**
30
- * Get command path for Roocode
31
- */
32
- getCommandPath(): string;
33
- getTargetFilename(name: string): string;
34
- /**
35
- * Format command content for Roocode
36
- * Adds frontmatter with description and argument-hint if not already present
37
- */
38
- protected formatCommand(template: CommandTemplate): string;
39
- }
40
- //# sourceMappingURL=roocode-adapter.d.ts.map
@@ -1,68 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RoocodeAdapter = void 0;
4
- const base_adapter_1 = require("./base-adapter");
5
- const file_system_1 = require("../../utils/file-system");
6
- /**
7
- * Roocode adapter
8
- * Commands stored in .roo/commands/ (flat structure, no subdirectories)
9
- * Slash command format: /[name] (no .md extension, auto-converts to lowercase/dashes)
10
- *
11
- * Features:
12
- * - Supports optional frontmatter (description, argument-hint)
13
- * - Command names automatically processed: lowercase, spaces→dashes, special chars removed
14
- * - Project commands override global commands
15
- *
16
- * Reference: https://docs.roocode.com/features/slash-commands
17
- */
18
- class RoocodeAdapter extends base_adapter_1.BaseAdapter {
19
- constructor() {
20
- super(...arguments);
21
- this.name = 'roocode';
22
- this.displayName = 'Roocode';
23
- this.directory = '.roo/commands';
24
- this.fileExtension = '.md';
25
- this.features = {
26
- supportsSubdirectories: false,
27
- supportsFrontmatter: true,
28
- };
29
- }
30
- /**
31
- * Detect if Roocode is available in the project
32
- * Checks for .roo directory
33
- */
34
- async detectProject() {
35
- return await file_system_1.FileSystem.exists('.roo');
36
- }
37
- /**
38
- * Get command path for Roocode
39
- */
40
- getCommandPath() {
41
- return this.directory;
42
- }
43
- getTargetFilename(name) {
44
- return `clavix-${name}${this.fileExtension}`;
45
- }
46
- /**
47
- * Format command content for Roocode
48
- * Adds frontmatter with description and argument-hint if not already present
49
- */
50
- formatCommand(template) {
51
- const content = template.content;
52
- // Check if frontmatter already exists
53
- if (content.trim().startsWith('---')) {
54
- // Frontmatter already exists, use as-is
55
- return content;
56
- }
57
- // Add Roocode-specific frontmatter
58
- const frontmatter = `---
59
- description: ${template.description || `Clavix ${template.name} command`}
60
- argument-hint: <prompt>
61
- ---
62
-
63
- `;
64
- return frontmatter + content;
65
- }
66
- }
67
- exports.RoocodeAdapter = RoocodeAdapter;
68
- //# sourceMappingURL=roocode-adapter.js.map
@@ -1,17 +0,0 @@
1
- /**
2
- * Generator for Warp WARP.md file
3
- * Provides workflow instructions optimized for Warp users
4
- */
5
- export declare class WarpMdGenerator {
6
- static readonly TARGET_FILE = "WARP.md";
7
- static readonly START_MARKER = "<!-- CLAVIX:START -->";
8
- static readonly END_MARKER = "<!-- CLAVIX:END -->";
9
- /**
10
- * Generate or update WARP.md with Clavix workflows
11
- */
12
- static generate(): Promise<void>;
13
- private static injectManagedBlock;
14
- private static escapeRegex;
15
- static hasClavixBlock(): Promise<boolean>;
16
- }
17
- //# sourceMappingURL=warp-md-generator.d.ts.map
@@ -1,88 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.WarpMdGenerator = void 0;
37
- const file_system_1 = require("../../utils/file-system");
38
- const path = __importStar(require("path"));
39
- /**
40
- * Generator for Warp WARP.md file
41
- * Provides workflow instructions optimized for Warp users
42
- */
43
- class WarpMdGenerator {
44
- /**
45
- * Generate or update WARP.md with Clavix workflows
46
- */
47
- static async generate() {
48
- const templatePath = path.join(__dirname, '../../templates/agents/warp.md');
49
- if (!(await file_system_1.FileSystem.exists(templatePath))) {
50
- throw new Error(`WARP.md template not found at ${templatePath}`);
51
- }
52
- const template = await file_system_1.FileSystem.readFile(templatePath);
53
- await this.injectManagedBlock(this.TARGET_FILE, template);
54
- }
55
- static async injectManagedBlock(filePath, content) {
56
- let fileContent = '';
57
- if (await file_system_1.FileSystem.exists(filePath)) {
58
- fileContent = await file_system_1.FileSystem.readFile(filePath);
59
- }
60
- const blockRegex = new RegExp(`${this.escapeRegex(this.START_MARKER)}[\\s\\S]*?${this.escapeRegex(this.END_MARKER)}`, 'g');
61
- const wrappedContent = `${this.START_MARKER}\n${content}\n${this.END_MARKER}`;
62
- if (blockRegex.test(fileContent)) {
63
- fileContent = fileContent.replace(blockRegex, wrappedContent);
64
- }
65
- else {
66
- if (fileContent && !fileContent.endsWith('\n\n')) {
67
- fileContent += '\n\n';
68
- }
69
- fileContent += wrappedContent + '\n';
70
- }
71
- await file_system_1.FileSystem.writeFileAtomic(filePath, fileContent);
72
- }
73
- static escapeRegex(str) {
74
- return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
75
- }
76
- static async hasClavixBlock() {
77
- if (!(await file_system_1.FileSystem.exists(this.TARGET_FILE))) {
78
- return false;
79
- }
80
- const content = await file_system_1.FileSystem.readFile(this.TARGET_FILE);
81
- return content.includes(this.START_MARKER);
82
- }
83
- }
84
- exports.WarpMdGenerator = WarpMdGenerator;
85
- WarpMdGenerator.TARGET_FILE = 'WARP.md';
86
- WarpMdGenerator.START_MARKER = '<!-- CLAVIX:START -->';
87
- WarpMdGenerator.END_MARKER = '<!-- CLAVIX:END -->';
88
- //# sourceMappingURL=warp-md-generator.js.map
@@ -1,34 +0,0 @@
1
- import { BaseAdapter } from './base-adapter';
2
- /**
3
- * Windsurf adapter
4
- * Workflows stored in .windsurf/workflows/ (supports subdirectories)
5
- * Slash command format: /[name] (no .md extension)
6
- *
7
- * Features:
8
- * - Supports subdirectories for workflow organization
9
- * - 12,000 character limit per workflow file
10
- * - Auto-discovers from workspace, subdirectories, and parent dirs up to git root
11
- *
12
- * Reference: https://docs.windsurf.com/windsurf/cascade/workflows
13
- */
14
- export declare class WindsurfAdapter extends BaseAdapter {
15
- readonly name = "windsurf";
16
- readonly displayName = "Windsurf";
17
- readonly directory = ".windsurf/workflows";
18
- readonly fileExtension = ".md";
19
- readonly features: {
20
- supportsSubdirectories: boolean;
21
- supportsFrontmatter: boolean;
22
- };
23
- /**
24
- * Detect if Windsurf is available in the project
25
- * Checks for .windsurf directory
26
- */
27
- detectProject(): Promise<boolean>;
28
- /**
29
- * Get command path for Windsurf
30
- */
31
- getCommandPath(): string;
32
- getTargetFilename(name: string): string;
33
- }
34
- //# sourceMappingURL=windsurf-adapter.d.ts.map