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,58 +1,29 @@
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.CopilotInstructionsGenerator = void 0;
37
- const file_system_1 = require("../../utils/file-system");
38
- const path = __importStar(require("path"));
1
+ import { FileSystem } from '../../utils/file-system.js';
2
+ import * as path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { dirname } from 'path';
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
39
7
  /**
40
8
  * Generator for GitHub Copilot instructions file
41
9
  * Provides workflow instructions via .github/copilot-instructions.md
42
10
  */
43
- class CopilotInstructionsGenerator {
11
+ export class CopilotInstructionsGenerator {
12
+ static TARGET_FILE = '.github/copilot-instructions.md';
13
+ static START_MARKER = '<!-- CLAVIX:START -->';
14
+ static END_MARKER = '<!-- CLAVIX:END -->';
44
15
  /**
45
16
  * Generate or update .github/copilot-instructions.md with Clavix workflows
46
17
  */
47
18
  static async generate() {
48
19
  const templatePath = path.join(__dirname, '../../templates/agents/copilot-instructions.md');
49
20
  // Check if template exists
50
- if (!(await file_system_1.FileSystem.exists(templatePath))) {
21
+ if (!(await FileSystem.exists(templatePath))) {
51
22
  throw new Error(`Copilot instructions template not found at ${templatePath}`);
52
23
  }
53
- const template = await file_system_1.FileSystem.readFile(templatePath);
24
+ const template = await FileSystem.readFile(templatePath);
54
25
  // Ensure .github directory exists
55
- await file_system_1.FileSystem.ensureDir('.github');
26
+ await FileSystem.ensureDir('.github');
56
27
  // Inject into .github/copilot-instructions.md using managed blocks
57
28
  await this.injectManagedBlock(this.TARGET_FILE, template);
58
29
  }
@@ -62,8 +33,8 @@ class CopilotInstructionsGenerator {
62
33
  static async injectManagedBlock(filePath, content) {
63
34
  let fileContent = '';
64
35
  // Read existing file or start with empty content
65
- if (await file_system_1.FileSystem.exists(filePath)) {
66
- fileContent = await file_system_1.FileSystem.readFile(filePath);
36
+ if (await FileSystem.exists(filePath)) {
37
+ fileContent = await FileSystem.readFile(filePath);
67
38
  }
68
39
  const blockRegex = new RegExp(`${this.escapeRegex(this.START_MARKER)}[\\s\\S]*?${this.escapeRegex(this.END_MARKER)}`, 'g');
69
40
  const wrappedContent = `${this.START_MARKER}\n${content}\n${this.END_MARKER}`;
@@ -78,7 +49,7 @@ class CopilotInstructionsGenerator {
78
49
  }
79
50
  fileContent += wrappedContent + '\n';
80
51
  }
81
- await file_system_1.FileSystem.writeFileAtomic(filePath, fileContent);
52
+ await FileSystem.writeFileAtomic(filePath, fileContent);
82
53
  }
83
54
  /**
84
55
  * Escape special regex characters
@@ -90,15 +61,11 @@ class CopilotInstructionsGenerator {
90
61
  * Check if .github/copilot-instructions.md has Clavix block
91
62
  */
92
63
  static async hasClavixBlock() {
93
- if (!(await file_system_1.FileSystem.exists(this.TARGET_FILE))) {
64
+ if (!(await FileSystem.exists(this.TARGET_FILE))) {
94
65
  return false;
95
66
  }
96
- const content = await file_system_1.FileSystem.readFile(this.TARGET_FILE);
67
+ const content = await FileSystem.readFile(this.TARGET_FILE);
97
68
  return content.includes(this.START_MARKER);
98
69
  }
99
70
  }
100
- exports.CopilotInstructionsGenerator = CopilotInstructionsGenerator;
101
- CopilotInstructionsGenerator.TARGET_FILE = '.github/copilot-instructions.md';
102
- CopilotInstructionsGenerator.START_MARKER = '<!-- CLAVIX:START -->';
103
- CopilotInstructionsGenerator.END_MARKER = '<!-- CLAVIX:END -->';
104
71
  //# sourceMappingURL=copilot-instructions-generator.js.map
@@ -1,5 +1,5 @@
1
- import { BaseAdapter } from './base-adapter';
2
- import { CommandTemplate } from '../../types/agent';
1
+ import { BaseAdapter } from './base-adapter.js';
2
+ import { CommandTemplate } from '../../types/agent.js';
3
3
  /**
4
4
  * Crush CLI adapter
5
5
  * Commands stored in .crush/commands/clavix/ (supports subdirectories)
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CrushAdapter = void 0;
4
- const base_adapter_1 = require("./base-adapter");
5
- const file_system_1 = require("../../utils/file-system");
1
+ import { BaseAdapter } from './base-adapter.js';
2
+ import { FileSystem } from '../../utils/file-system.js';
6
3
  /**
7
4
  * Crush CLI adapter
8
5
  * Commands stored in .crush/commands/clavix/ (supports subdirectories)
@@ -10,25 +7,22 @@ const file_system_1 = require("../../utils/file-system");
10
7
  *
11
8
  * Reference: https://github.com/charmbracelet/crush/blob/main/COMMANDS.md
12
9
  */
13
- class CrushAdapter extends base_adapter_1.BaseAdapter {
14
- constructor() {
15
- super(...arguments);
16
- this.name = 'crush';
17
- this.displayName = 'Crush CLI';
18
- this.directory = '.crush/commands/clavix';
19
- this.fileExtension = '.md';
20
- this.features = {
21
- supportsSubdirectories: true,
22
- supportsFrontmatter: false,
23
- argumentPlaceholder: '$PROMPT',
24
- };
25
- }
10
+ export class CrushAdapter extends BaseAdapter {
11
+ name = 'crush';
12
+ displayName = 'Crush CLI';
13
+ directory = '.crush/commands/clavix';
14
+ fileExtension = '.md';
15
+ features = {
16
+ supportsSubdirectories: true,
17
+ supportsFrontmatter: false,
18
+ argumentPlaceholder: '$PROMPT',
19
+ };
26
20
  /**
27
21
  * Detect if Crush is available in the project
28
22
  * Checks for .crush directory (project-level commands)
29
23
  */
30
24
  async detectProject() {
31
- return await file_system_1.FileSystem.exists('.crush');
25
+ return await FileSystem.exists('.crush');
32
26
  }
33
27
  /**
34
28
  * Get command path for Crush
@@ -45,5 +39,4 @@ class CrushAdapter extends base_adapter_1.BaseAdapter {
45
39
  return template.content.replace(/\{\{ARGS\}\}/g, '$PROMPT');
46
40
  }
47
41
  }
48
- exports.CrushAdapter = CrushAdapter;
49
42
  //# sourceMappingURL=crush-adapter.js.map
@@ -1,4 +1,4 @@
1
- import { BaseAdapter } from './base-adapter';
1
+ import { BaseAdapter } from './base-adapter.js';
2
2
  /**
3
3
  * Cursor IDE adapter
4
4
  * Commands are stored in .cursor/commands/ (flat structure, no subdirectories)
@@ -1,30 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CursorAdapter = void 0;
4
- const base_adapter_1 = require("./base-adapter");
5
- const file_system_1 = require("../../utils/file-system");
1
+ import { BaseAdapter } from './base-adapter.js';
2
+ import { FileSystem } from '../../utils/file-system.js';
6
3
  /**
7
4
  * Cursor IDE adapter
8
5
  * Commands are stored in .cursor/commands/ (flat structure, no subdirectories)
9
6
  */
10
- class CursorAdapter extends base_adapter_1.BaseAdapter {
11
- constructor() {
12
- super(...arguments);
13
- this.name = 'cursor';
14
- this.displayName = 'Cursor';
15
- this.directory = '.cursor/commands';
16
- this.fileExtension = '.md';
17
- this.features = {
18
- supportsSubdirectories: false,
19
- supportsFrontmatter: false,
20
- };
21
- // Uses default formatCommand and generateCommands from BaseAdapter
22
- }
7
+ export class CursorAdapter extends BaseAdapter {
8
+ name = 'cursor';
9
+ displayName = 'Cursor';
10
+ directory = '.cursor/commands';
11
+ fileExtension = '.md';
12
+ features = {
13
+ supportsSubdirectories: false,
14
+ supportsFrontmatter: false,
15
+ };
23
16
  /**
24
17
  * Detect if Cursor is available in the project
25
18
  */
26
19
  async detectProject() {
27
- return await file_system_1.FileSystem.exists('.cursor');
20
+ return await FileSystem.exists('.cursor');
28
21
  }
29
22
  /**
30
23
  * Get command path for Cursor
@@ -36,5 +29,4 @@ class CursorAdapter extends base_adapter_1.BaseAdapter {
36
29
  return `clavix-${name}${this.fileExtension}`;
37
30
  }
38
31
  }
39
- exports.CursorAdapter = CursorAdapter;
40
32
  //# sourceMappingURL=cursor-adapter.js.map
@@ -1,5 +1,5 @@
1
- import { BaseAdapter } from './base-adapter';
2
- import { CommandTemplate } from '../../types/agent';
1
+ import { BaseAdapter } from './base-adapter.js';
2
+ import { CommandTemplate } from '../../types/agent.js';
3
3
  /**
4
4
  * Droid CLI adapter (Factory.ai)
5
5
  * Commands stored in .factory/commands/ with YAML frontmatter
@@ -1,32 +1,26 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DroidAdapter = void 0;
4
- const base_adapter_1 = require("./base-adapter");
5
- const file_system_1 = require("../../utils/file-system");
1
+ import { BaseAdapter } from './base-adapter.js';
2
+ import { FileSystem } from '../../utils/file-system.js';
6
3
  /**
7
4
  * Droid CLI adapter (Factory.ai)
8
5
  * Commands stored in .factory/commands/ with YAML frontmatter
9
6
  * Uses $ARGUMENTS placeholder for command arguments
10
7
  */
11
- class DroidAdapter extends base_adapter_1.BaseAdapter {
12
- constructor() {
13
- super(...arguments);
14
- this.name = 'droid';
15
- this.displayName = 'Droid CLI';
16
- this.directory = '.factory/commands';
17
- this.fileExtension = '.md';
18
- this.features = {
19
- supportsSubdirectories: false,
20
- supportsFrontmatter: true,
21
- frontmatterFields: ['description', 'argument-hint'],
22
- argumentPlaceholder: '$ARGUMENTS',
23
- };
24
- }
8
+ export class DroidAdapter extends BaseAdapter {
9
+ name = 'droid';
10
+ displayName = 'Droid CLI';
11
+ directory = '.factory/commands';
12
+ fileExtension = '.md';
13
+ features = {
14
+ supportsSubdirectories: false,
15
+ supportsFrontmatter: true,
16
+ frontmatterFields: ['description', 'argument-hint'],
17
+ argumentPlaceholder: '$ARGUMENTS',
18
+ };
25
19
  /**
26
20
  * Detect if Droid CLI is available in the project
27
21
  */
28
22
  async detectProject() {
29
- return await file_system_1.FileSystem.exists('.factory');
23
+ return await FileSystem.exists('.factory');
30
24
  }
31
25
  /**
32
26
  * Get command path for Droid CLI
@@ -53,5 +47,4 @@ argument-hint: [prompt]
53
47
  return frontmatter + content;
54
48
  }
55
49
  }
56
- exports.DroidAdapter = DroidAdapter;
57
50
  //# sourceMappingURL=droid-adapter.js.map
@@ -1,5 +1,5 @@
1
- import { BaseAdapter } from './base-adapter';
2
- import { CommandTemplate } from '../../types/agent';
1
+ import { BaseAdapter } from './base-adapter.js';
2
+ import { CommandTemplate } from '../../types/agent.js';
3
3
  /**
4
4
  * Gemini CLI adapter
5
5
  * Commands stored as TOML files under .gemini/commands/clavix by default
@@ -1,70 +1,35 @@
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.GeminiAdapter = 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");
1
+ import * as os from 'os';
2
+ import * as path from 'path';
3
+ import { BaseAdapter } from './base-adapter.js';
4
+ import { FileSystem } from '../../utils/file-system.js';
41
5
  /**
42
6
  * Gemini CLI adapter
43
7
  * Commands stored as TOML files under .gemini/commands/clavix by default
44
8
  */
45
- class GeminiAdapter extends base_adapter_1.BaseAdapter {
9
+ export class GeminiAdapter extends BaseAdapter {
10
+ options;
11
+ name = 'gemini';
12
+ displayName = 'Gemini CLI';
13
+ fileExtension = '.toml';
14
+ features = {
15
+ supportsSubdirectories: true,
16
+ supportsFrontmatter: false,
17
+ argumentPlaceholder: '{{args}}',
18
+ };
46
19
  constructor(options = {}) {
47
20
  super();
48
21
  this.options = options;
49
- this.name = 'gemini';
50
- this.displayName = 'Gemini CLI';
51
- this.fileExtension = '.toml';
52
- this.features = {
53
- supportsSubdirectories: true,
54
- supportsFrontmatter: false,
55
- argumentPlaceholder: '{{args}}',
56
- };
57
22
  }
58
23
  get directory() {
59
24
  const useNamespace = this.options.useNamespace ?? true;
60
25
  return useNamespace ? path.join('.gemini', 'commands', 'clavix') : path.join('.gemini', 'commands');
61
26
  }
62
27
  async detectProject() {
63
- if (await file_system_1.FileSystem.exists('.gemini')) {
28
+ if (await FileSystem.exists('.gemini')) {
64
29
  return true;
65
30
  }
66
31
  const homePath = path.join(this.getHomeDir(), '.gemini');
67
- return await file_system_1.FileSystem.exists(homePath);
32
+ return await FileSystem.exists(homePath);
68
33
  }
69
34
  getCommandPath() {
70
35
  return this.directory;
@@ -86,5 +51,4 @@ class GeminiAdapter extends base_adapter_1.BaseAdapter {
86
51
  return process.env.CLAVIX_HOME_OVERRIDE || os.homedir();
87
52
  }
88
53
  }
89
- exports.GeminiAdapter = GeminiAdapter;
90
54
  //# sourceMappingURL=gemini-adapter.js.map
@@ -1,4 +1,4 @@
1
- import { BaseAdapter } from './base-adapter';
1
+ import { BaseAdapter } from './base-adapter.js';
2
2
  /**
3
3
  * Kilocode adapter
4
4
  * Workflows stored in .kilocode/workflows/ (flat structure, no subdirectories)
@@ -1,8 +1,5 @@
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");
1
+ import { BaseAdapter } from './base-adapter.js';
2
+ import { FileSystem } from '../../utils/file-system.js';
6
3
  /**
7
4
  * Kilocode adapter
8
5
  * Workflows stored in .kilocode/workflows/ (flat structure, no subdirectories)
@@ -15,25 +12,21 @@ const file_system_1 = require("../../utils/file-system");
15
12
  *
16
13
  * Reference: https://kilocode.ai/docs/features/slash-commands/workflows
17
14
  */
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
- }
15
+ export class KilocodeAdapter extends BaseAdapter {
16
+ name = 'kilocode';
17
+ displayName = 'Kilocode';
18
+ directory = '.kilocode/workflows';
19
+ fileExtension = '.md';
20
+ features = {
21
+ supportsSubdirectories: false,
22
+ supportsFrontmatter: false,
23
+ };
31
24
  /**
32
25
  * Detect if Kilocode is available in the project
33
26
  * Checks for .kilocode directory
34
27
  */
35
28
  async detectProject() {
36
- return await file_system_1.FileSystem.exists('.kilocode');
29
+ return await FileSystem.exists('.kilocode');
37
30
  }
38
31
  /**
39
32
  * Get command path for Kilocode
@@ -45,5 +38,4 @@ class KilocodeAdapter extends base_adapter_1.BaseAdapter {
45
38
  return `clavix-${name}${this.fileExtension}`;
46
39
  }
47
40
  }
48
- exports.KilocodeAdapter = KilocodeAdapter;
49
41
  //# sourceMappingURL=kilocode-adapter.js.map
@@ -1,56 +1,27 @@
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"));
1
+ import { FileSystem } from '../../utils/file-system.js';
2
+ import * as path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { dirname } from 'path';
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
39
7
  /**
40
8
  * Generator for Octofriend OCTO.md file
41
9
  * Provides workflow instructions optimized for Octofriend capabilities
42
10
  */
43
- class OctoMdGenerator {
11
+ export class OctoMdGenerator {
12
+ static TARGET_FILE = 'OCTO.md';
13
+ static START_MARKER = '<!-- CLAVIX:START -->';
14
+ static END_MARKER = '<!-- CLAVIX:END -->';
44
15
  /**
45
16
  * Generate or update OCTO.md with Clavix workflows
46
17
  */
47
18
  static async generate() {
48
19
  const templatePath = path.join(__dirname, '../../templates/agents/octo.md');
49
20
  // Check if template exists
50
- if (!(await file_system_1.FileSystem.exists(templatePath))) {
21
+ if (!(await FileSystem.exists(templatePath))) {
51
22
  throw new Error(`OCTO.md template not found at ${templatePath}`);
52
23
  }
53
- const template = await file_system_1.FileSystem.readFile(templatePath);
24
+ const template = await FileSystem.readFile(templatePath);
54
25
  // Inject into OCTO.md using managed blocks
55
26
  await this.injectManagedBlock(this.TARGET_FILE, template);
56
27
  }
@@ -60,8 +31,8 @@ class OctoMdGenerator {
60
31
  static async injectManagedBlock(filePath, content) {
61
32
  let fileContent = '';
62
33
  // 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);
34
+ if (await FileSystem.exists(filePath)) {
35
+ fileContent = await FileSystem.readFile(filePath);
65
36
  }
66
37
  const blockRegex = new RegExp(`${this.escapeRegex(this.START_MARKER)}[\\s\\S]*?${this.escapeRegex(this.END_MARKER)}`, 'g');
67
38
  const wrappedContent = `${this.START_MARKER}\n${content}\n${this.END_MARKER}`;
@@ -76,7 +47,7 @@ class OctoMdGenerator {
76
47
  }
77
48
  fileContent += wrappedContent + '\n';
78
49
  }
79
- await file_system_1.FileSystem.writeFileAtomic(filePath, fileContent);
50
+ await FileSystem.writeFileAtomic(filePath, fileContent);
80
51
  }
81
52
  /**
82
53
  * Escape special regex characters
@@ -88,15 +59,11 @@ class OctoMdGenerator {
88
59
  * Check if OCTO.md has Clavix block
89
60
  */
90
61
  static async hasClavixBlock() {
91
- if (!(await file_system_1.FileSystem.exists(this.TARGET_FILE))) {
62
+ if (!(await FileSystem.exists(this.TARGET_FILE))) {
92
63
  return false;
93
64
  }
94
- const content = await file_system_1.FileSystem.readFile(this.TARGET_FILE);
65
+ const content = await FileSystem.readFile(this.TARGET_FILE);
95
66
  return content.includes(this.START_MARKER);
96
67
  }
97
68
  }
98
- exports.OctoMdGenerator = OctoMdGenerator;
99
- OctoMdGenerator.TARGET_FILE = 'OCTO.md';
100
- OctoMdGenerator.START_MARKER = '<!-- CLAVIX:START -->';
101
- OctoMdGenerator.END_MARKER = '<!-- CLAVIX:END -->';
102
69
  //# sourceMappingURL=octo-md-generator.js.map
@@ -1,5 +1,5 @@
1
- import { BaseAdapter } from './base-adapter';
2
- import { CommandTemplate } from '../../types/agent';
1
+ import { BaseAdapter } from './base-adapter.js';
2
+ import { CommandTemplate } from '../../types/agent.js';
3
3
  /**
4
4
  * OpenCode adapter
5
5
  * Commands stored in .opencode/command/ with frontmatter
@@ -1,32 +1,26 @@
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");
1
+ import { BaseAdapter } from './base-adapter.js';
2
+ import { FileSystem } from '../../utils/file-system.js';
6
3
  /**
7
4
  * OpenCode adapter
8
5
  * Commands stored in .opencode/command/ with frontmatter
9
6
  * Uses $ARGUMENTS, $1, $2 placeholders
10
7
  */
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
- }
8
+ export class OpenCodeAdapter extends BaseAdapter {
9
+ name = 'opencode';
10
+ displayName = 'OpenCode';
11
+ directory = '.opencode/command';
12
+ fileExtension = '.md';
13
+ features = {
14
+ supportsSubdirectories: false,
15
+ supportsFrontmatter: true,
16
+ frontmatterFields: ['description', 'agent', 'model'],
17
+ argumentPlaceholder: '$ARGUMENTS',
18
+ };
25
19
  /**
26
20
  * Detect if OpenCode is available in the project
27
21
  */
28
22
  async detectProject() {
29
- return await file_system_1.FileSystem.exists('.opencode');
23
+ return await FileSystem.exists('.opencode');
30
24
  }
31
25
  /**
32
26
  * Get command path for OpenCode
@@ -52,5 +46,4 @@ description: ${template.description}
52
46
  return frontmatter + content;
53
47
  }
54
48
  }
55
- exports.OpenCodeAdapter = OpenCodeAdapter;
56
49
  //# sourceMappingURL=opencode-adapter.js.map
@@ -1,5 +1,5 @@
1
- import { BaseAdapter } from './base-adapter';
2
- import { CommandTemplate } from '../../types/agent';
1
+ import { BaseAdapter } from './base-adapter.js';
2
+ import { CommandTemplate } from '../../types/agent.js';
3
3
  /**
4
4
  * Qwen Code CLI adapter
5
5
  * Commands stored as TOML files under .qwen/commands/clavix by default