clavix 2.3.1 → 2.4.1

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 (187) hide show
  1. package/README.md +0 -116
  2. package/bin/clavix.js +7 -0
  3. package/dist/cli/commands/implement.js +25 -33
  4. package/dist/cli/commands/plan.js +22 -27
  5. package/dist/cli/commands/prd.js +7 -12
  6. package/dist/cli/commands/start.js +4 -9
  7. package/dist/cli/commands/summarize.js +15 -22
  8. package/dist/core 2/adapters/agents-md-generator.d.ts +26 -0
  9. package/dist/core 2/adapters/agents-md-generator.js +102 -0
  10. package/dist/core 2/adapters/amp-adapter.d.ts +27 -0
  11. package/dist/core 2/adapters/amp-adapter.js +42 -0
  12. package/dist/core 2/adapters/augment-adapter.d.ts +22 -0
  13. package/dist/core 2/adapters/augment-adapter.js +77 -0
  14. package/dist/core 2/adapters/base-adapter.d.ts +45 -0
  15. package/dist/core 2/adapters/base-adapter.js +142 -0
  16. package/dist/core 2/adapters/claude-code-adapter.d.ts +32 -0
  17. package/dist/core 2/adapters/claude-code-adapter.js +116 -0
  18. package/dist/core 2/adapters/cline-adapter.d.ts +34 -0
  19. package/dist/core 2/adapters/cline-adapter.js +52 -0
  20. package/dist/core 2/adapters/codebuddy-adapter.d.ts +24 -0
  21. package/dist/core 2/adapters/codebuddy-adapter.js +82 -0
  22. package/dist/core 2/adapters/codex-adapter.d.ts +24 -0
  23. package/dist/core 2/adapters/codex-adapter.js +79 -0
  24. package/dist/core 2/adapters/copilot-instructions-generator.d.ts +26 -0
  25. package/dist/core 2/adapters/copilot-instructions-generator.js +104 -0
  26. package/dist/core 2/adapters/crush-adapter.d.ts +35 -0
  27. package/dist/core 2/adapters/crush-adapter.js +49 -0
  28. package/dist/core 2/adapters/cursor-adapter.d.ts +25 -0
  29. package/dist/core 2/adapters/cursor-adapter.js +40 -0
  30. package/dist/core 2/adapters/droid-adapter.d.ts +33 -0
  31. package/dist/core 2/adapters/droid-adapter.js +57 -0
  32. package/dist/core 2/adapters/gemini-adapter.d.ts +27 -0
  33. package/dist/core 2/adapters/gemini-adapter.js +90 -0
  34. package/dist/core 2/adapters/kilocode-adapter.d.ts +34 -0
  35. package/dist/core 2/adapters/kilocode-adapter.js +49 -0
  36. package/dist/core 2/adapters/octo-md-generator.d.ts +26 -0
  37. package/dist/core 2/adapters/octo-md-generator.js +102 -0
  38. package/dist/core 2/adapters/opencode-adapter.d.ts +33 -0
  39. package/dist/core 2/adapters/opencode-adapter.js +56 -0
  40. package/dist/core 2/adapters/qwen-adapter.d.ts +27 -0
  41. package/dist/core 2/adapters/qwen-adapter.js +90 -0
  42. package/dist/core 2/adapters/roocode-adapter.d.ts +40 -0
  43. package/dist/core 2/adapters/roocode-adapter.js +68 -0
  44. package/dist/core 2/adapters/warp-md-generator.d.ts +17 -0
  45. package/dist/core 2/adapters/warp-md-generator.js +88 -0
  46. package/dist/core 2/adapters/windsurf-adapter.d.ts +34 -0
  47. package/dist/core 2/adapters/windsurf-adapter.js +49 -0
  48. package/dist/core 2/agent-manager.d.ts +51 -0
  49. package/dist/core 2/agent-manager.js +126 -0
  50. package/dist/core 2/archive-manager.d.ts +100 -0
  51. package/dist/core 2/archive-manager.js +338 -0
  52. package/dist/core 2/conversation-analyzer.d.ts +86 -0
  53. package/dist/core 2/doc-injector.d.ts +51 -0
  54. package/dist/core 2/doc-injector.js +236 -0
  55. package/dist/core 2/git-manager.d.ts +100 -0
  56. package/dist/core 2/git-manager.js +214 -0
  57. package/dist/core 2/prompt-optimizer.d.ts +268 -0
  58. package/dist/core 2/prompt-optimizer.js +963 -0
  59. package/dist/core 2/question-engine.d.ts +167 -0
  60. package/dist/core 2/question-engine.js +395 -0
  61. package/dist/core 2/session-manager.d.ts +139 -0
  62. package/dist/core 2/session-manager.js +403 -0
  63. package/dist/core 2/task-manager.d.ts +155 -0
  64. package/dist/core 2/task-manager.js +689 -0
  65. package/dist/index.js +6 -0
  66. package/dist/utils/template-loader.js +24 -22
  67. package/package.json +1 -1
  68. package/dist/templates/slash-commands/augment/archive.md +0 -291
  69. package/dist/templates/slash-commands/augment/deep.md +0 -207
  70. package/dist/templates/slash-commands/augment/fast.md +0 -183
  71. package/dist/templates/slash-commands/augment/implement.md +0 -267
  72. package/dist/templates/slash-commands/augment/plan.md +0 -173
  73. package/dist/templates/slash-commands/augment/prd.md +0 -178
  74. package/dist/templates/slash-commands/augment/start.md +0 -142
  75. package/dist/templates/slash-commands/augment/summarize.md +0 -179
  76. package/dist/templates/slash-commands/claude-code/archive.md +0 -291
  77. package/dist/templates/slash-commands/claude-code/deep.md +0 -207
  78. package/dist/templates/slash-commands/claude-code/fast.md +0 -183
  79. package/dist/templates/slash-commands/claude-code/implement.md +0 -267
  80. package/dist/templates/slash-commands/claude-code/plan.md +0 -173
  81. package/dist/templates/slash-commands/claude-code/prd.md +0 -178
  82. package/dist/templates/slash-commands/claude-code/start.md +0 -142
  83. package/dist/templates/slash-commands/claude-code/summarize.md +0 -179
  84. package/dist/templates/slash-commands/cline/archive.md +0 -291
  85. package/dist/templates/slash-commands/cline/deep.md +0 -207
  86. package/dist/templates/slash-commands/cline/fast.md +0 -183
  87. package/dist/templates/slash-commands/cline/implement.md +0 -267
  88. package/dist/templates/slash-commands/cline/plan.md +0 -173
  89. package/dist/templates/slash-commands/cline/prd.md +0 -178
  90. package/dist/templates/slash-commands/cline/start.md +0 -142
  91. package/dist/templates/slash-commands/cline/summarize.md +0 -179
  92. package/dist/templates/slash-commands/codebuddy/archive.md +0 -291
  93. package/dist/templates/slash-commands/codebuddy/deep.md +0 -207
  94. package/dist/templates/slash-commands/codebuddy/fast.md +0 -183
  95. package/dist/templates/slash-commands/codebuddy/implement.md +0 -267
  96. package/dist/templates/slash-commands/codebuddy/plan.md +0 -173
  97. package/dist/templates/slash-commands/codebuddy/prd.md +0 -178
  98. package/dist/templates/slash-commands/codebuddy/start.md +0 -142
  99. package/dist/templates/slash-commands/codebuddy/summarize.md +0 -179
  100. package/dist/templates/slash-commands/codex/archive.md +0 -291
  101. package/dist/templates/slash-commands/codex/deep.md +0 -207
  102. package/dist/templates/slash-commands/codex/fast.md +0 -183
  103. package/dist/templates/slash-commands/codex/implement.md +0 -267
  104. package/dist/templates/slash-commands/codex/plan.md +0 -173
  105. package/dist/templates/slash-commands/codex/prd.md +0 -178
  106. package/dist/templates/slash-commands/codex/start.md +0 -142
  107. package/dist/templates/slash-commands/codex/summarize.md +0 -179
  108. package/dist/templates/slash-commands/crush/archive.md +0 -291
  109. package/dist/templates/slash-commands/crush/deep.md +0 -207
  110. package/dist/templates/slash-commands/crush/fast.md +0 -183
  111. package/dist/templates/slash-commands/crush/implement.md +0 -267
  112. package/dist/templates/slash-commands/crush/plan.md +0 -173
  113. package/dist/templates/slash-commands/crush/prd.md +0 -178
  114. package/dist/templates/slash-commands/crush/start.md +0 -142
  115. package/dist/templates/slash-commands/crush/summarize.md +0 -179
  116. package/dist/templates/slash-commands/cursor/archive.md +0 -291
  117. package/dist/templates/slash-commands/cursor/deep.md +0 -207
  118. package/dist/templates/slash-commands/cursor/fast.md +0 -183
  119. package/dist/templates/slash-commands/cursor/implement.md +0 -267
  120. package/dist/templates/slash-commands/cursor/plan.md +0 -173
  121. package/dist/templates/slash-commands/cursor/prd.md +0 -178
  122. package/dist/templates/slash-commands/cursor/start.md +0 -142
  123. package/dist/templates/slash-commands/cursor/summarize.md +0 -179
  124. package/dist/templates/slash-commands/droid/archive.md +0 -291
  125. package/dist/templates/slash-commands/droid/deep.md +0 -207
  126. package/dist/templates/slash-commands/droid/fast.md +0 -183
  127. package/dist/templates/slash-commands/droid/implement.md +0 -267
  128. package/dist/templates/slash-commands/droid/plan.md +0 -173
  129. package/dist/templates/slash-commands/droid/prd.md +0 -178
  130. package/dist/templates/slash-commands/droid/start.md +0 -142
  131. package/dist/templates/slash-commands/droid/summarize.md +0 -179
  132. package/dist/templates/slash-commands/gemini/archive.toml +0 -290
  133. package/dist/templates/slash-commands/gemini/deep.toml +0 -206
  134. package/dist/templates/slash-commands/gemini/fast.toml +0 -182
  135. package/dist/templates/slash-commands/gemini/implement.toml +0 -266
  136. package/dist/templates/slash-commands/gemini/plan.toml +0 -170
  137. package/dist/templates/slash-commands/gemini/prd.toml +0 -177
  138. package/dist/templates/slash-commands/gemini/start.toml +0 -141
  139. package/dist/templates/slash-commands/gemini/summarize.toml +0 -178
  140. package/dist/templates/slash-commands/kilocode/archive.md +0 -291
  141. package/dist/templates/slash-commands/kilocode/deep.md +0 -207
  142. package/dist/templates/slash-commands/kilocode/fast.md +0 -183
  143. package/dist/templates/slash-commands/kilocode/implement.md +0 -267
  144. package/dist/templates/slash-commands/kilocode/plan.md +0 -173
  145. package/dist/templates/slash-commands/kilocode/prd.md +0 -178
  146. package/dist/templates/slash-commands/kilocode/start.md +0 -142
  147. package/dist/templates/slash-commands/kilocode/summarize.md +0 -179
  148. package/dist/templates/slash-commands/opencode/archive.md +0 -291
  149. package/dist/templates/slash-commands/opencode/deep.md +0 -207
  150. package/dist/templates/slash-commands/opencode/fast.md +0 -183
  151. package/dist/templates/slash-commands/opencode/implement.md +0 -267
  152. package/dist/templates/slash-commands/opencode/plan.md +0 -173
  153. package/dist/templates/slash-commands/opencode/prd.md +0 -178
  154. package/dist/templates/slash-commands/opencode/start.md +0 -142
  155. package/dist/templates/slash-commands/opencode/summarize.md +0 -179
  156. package/dist/templates/slash-commands/qwen/archive.toml +0 -290
  157. package/dist/templates/slash-commands/qwen/deep.toml +0 -206
  158. package/dist/templates/slash-commands/qwen/fast.toml +0 -182
  159. package/dist/templates/slash-commands/qwen/implement.toml +0 -266
  160. package/dist/templates/slash-commands/qwen/plan.toml +0 -170
  161. package/dist/templates/slash-commands/qwen/prd.toml +0 -177
  162. package/dist/templates/slash-commands/qwen/start.toml +0 -141
  163. package/dist/templates/slash-commands/qwen/summarize.toml +0 -178
  164. package/dist/templates/slash-commands/roocode/archive.md +0 -291
  165. package/dist/templates/slash-commands/roocode/deep.md +0 -207
  166. package/dist/templates/slash-commands/roocode/fast.md +0 -183
  167. package/dist/templates/slash-commands/roocode/implement.md +0 -267
  168. package/dist/templates/slash-commands/roocode/plan.md +0 -173
  169. package/dist/templates/slash-commands/roocode/prd.md +0 -178
  170. package/dist/templates/slash-commands/roocode/start.md +0 -142
  171. package/dist/templates/slash-commands/roocode/summarize.md +0 -179
  172. package/dist/templates/slash-commands/windsurf/archive.md +0 -291
  173. package/dist/templates/slash-commands/windsurf/deep.md +0 -207
  174. package/dist/templates/slash-commands/windsurf/fast.md +0 -183
  175. package/dist/templates/slash-commands/windsurf/implement.md +0 -267
  176. package/dist/templates/slash-commands/windsurf/plan.md +0 -173
  177. package/dist/templates/slash-commands/windsurf/prd.md +0 -178
  178. package/dist/templates/slash-commands/windsurf/start.md +0 -142
  179. package/dist/templates/slash-commands/windsurf/summarize.md +0 -179
  180. /package/dist/templates/slash-commands/{amp → _canonical}/archive.md +0 -0
  181. /package/dist/templates/slash-commands/{amp → _canonical}/deep.md +0 -0
  182. /package/dist/templates/slash-commands/{amp → _canonical}/fast.md +0 -0
  183. /package/dist/templates/slash-commands/{amp → _canonical}/implement.md +0 -0
  184. /package/dist/templates/slash-commands/{amp → _canonical}/plan.md +0 -0
  185. /package/dist/templates/slash-commands/{amp → _canonical}/prd.md +0 -0
  186. /package/dist/templates/slash-commands/{amp → _canonical}/start.md +0 -0
  187. /package/dist/templates/slash-commands/{amp → _canonical}/summarize.md +0 -0
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClineAdapter = void 0;
4
+ const base_adapter_1 = require("./base-adapter");
5
+ const file_system_1 = require("../../utils/file-system");
6
+ /**
7
+ * Cline adapter
8
+ * Workflows stored in .cline/workflows/ (flat structure, no subdirectories)
9
+ * Slash command format: /<name.md> (includes .md extension with leading slash)
10
+ *
11
+ * Features:
12
+ * - Lives alongside Cline Rules
13
+ * - Clear step-by-step instructions in markdown
14
+ * - Supports built-in tools, CLI utilities, and MCP integrations
15
+ *
16
+ * Reference: https://docs.cline.bot/features/slash-commands/workflows
17
+ */
18
+ class ClineAdapter extends base_adapter_1.BaseAdapter {
19
+ constructor() {
20
+ super(...arguments);
21
+ this.name = 'cline';
22
+ this.displayName = 'Cline';
23
+ this.directory = '.clinerules/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 Cline is available in the project
33
+ * Checks for .cline directory
34
+ */
35
+ async detectProject() {
36
+ if (await file_system_1.FileSystem.exists('.clinerules')) {
37
+ return true;
38
+ }
39
+ return await file_system_1.FileSystem.exists('.cline');
40
+ }
41
+ /**
42
+ * Get command path for Cline
43
+ */
44
+ getCommandPath() {
45
+ return this.directory;
46
+ }
47
+ getTargetFilename(name) {
48
+ return `clavix-${name}${this.fileExtension}`;
49
+ }
50
+ }
51
+ exports.ClineAdapter = ClineAdapter;
52
+ //# sourceMappingURL=cline-adapter.js.map
@@ -0,0 +1,24 @@
1
+ import { BaseAdapter } from './base-adapter';
2
+ import { CommandTemplate } from '../../types/agent';
3
+ /**
4
+ * CodeBuddy CLI adapter
5
+ * Commands stored in .codebuddy/commands with YAML frontmatter
6
+ */
7
+ export declare class CodeBuddyAdapter extends BaseAdapter {
8
+ readonly name = "codebuddy";
9
+ readonly displayName = "CodeBuddy";
10
+ readonly directory = ".codebuddy/commands";
11
+ readonly fileExtension = ".md";
12
+ readonly features: {
13
+ supportsSubdirectories: boolean;
14
+ supportsFrontmatter: boolean;
15
+ argumentPlaceholder: string;
16
+ frontmatterFields: string[];
17
+ };
18
+ detectProject(): Promise<boolean>;
19
+ getCommandPath(): string;
20
+ getTargetFilename(name: string): string;
21
+ protected formatCommand(template: CommandTemplate): string;
22
+ private getHomeDir;
23
+ }
24
+ //# sourceMappingURL=codebuddy-adapter.d.ts.map
@@ -0,0 +1,82 @@
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.CodeBuddyAdapter = 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
+ * CodeBuddy CLI adapter
43
+ * Commands stored in .codebuddy/commands with YAML frontmatter
44
+ */
45
+ class CodeBuddyAdapter extends base_adapter_1.BaseAdapter {
46
+ constructor() {
47
+ super(...arguments);
48
+ this.name = 'codebuddy';
49
+ this.displayName = 'CodeBuddy';
50
+ this.directory = '.codebuddy/commands';
51
+ this.fileExtension = '.md';
52
+ this.features = {
53
+ supportsSubdirectories: false,
54
+ supportsFrontmatter: true,
55
+ argumentPlaceholder: '$1',
56
+ frontmatterFields: ['description', 'argument-hint'],
57
+ };
58
+ }
59
+ async detectProject() {
60
+ if (await file_system_1.FileSystem.exists('.codebuddy')) {
61
+ return true;
62
+ }
63
+ const homePath = path.join(this.getHomeDir(), '.codebuddy');
64
+ return await file_system_1.FileSystem.exists(homePath);
65
+ }
66
+ getCommandPath() {
67
+ return this.directory;
68
+ }
69
+ getTargetFilename(name) {
70
+ return `clavix-${name}${this.fileExtension}`;
71
+ }
72
+ formatCommand(template) {
73
+ const frontmatter = `---\ndescription: ${template.description}\nargument-hint: [prompt]\n---\n\n`;
74
+ const content = template.content.replace(/\{\{ARGS\}\}/g, '$1');
75
+ return frontmatter + content;
76
+ }
77
+ getHomeDir() {
78
+ return process.env.CLAVIX_HOME_OVERRIDE || os.homedir();
79
+ }
80
+ }
81
+ exports.CodeBuddyAdapter = CodeBuddyAdapter;
82
+ //# sourceMappingURL=codebuddy-adapter.js.map
@@ -0,0 +1,24 @@
1
+ import { BaseAdapter } from './base-adapter';
2
+ import { CommandTemplate } from '../../types/agent';
3
+ /**
4
+ * Codex CLI adapter
5
+ * Commands stored globally under ~/.codex/prompts
6
+ */
7
+ export declare class CodexAdapter extends BaseAdapter {
8
+ readonly name = "codex";
9
+ readonly displayName = "Codex CLI";
10
+ readonly directory = "~/.codex/prompts";
11
+ readonly fileExtension = ".md";
12
+ readonly features: {
13
+ supportsSubdirectories: boolean;
14
+ supportsFrontmatter: boolean;
15
+ argumentPlaceholder: string;
16
+ frontmatterFields: string[];
17
+ };
18
+ detectProject(): Promise<boolean>;
19
+ getCommandPath(): string;
20
+ getTargetFilename(name: string): string;
21
+ protected formatCommand(template: CommandTemplate): string;
22
+ private getHomeDir;
23
+ }
24
+ //# sourceMappingURL=codex-adapter.d.ts.map
@@ -0,0 +1,79 @@
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.CodexAdapter = 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
+ * Codex CLI adapter
43
+ * Commands stored globally under ~/.codex/prompts
44
+ */
45
+ class CodexAdapter extends base_adapter_1.BaseAdapter {
46
+ constructor() {
47
+ super(...arguments);
48
+ this.name = 'codex';
49
+ this.displayName = 'Codex CLI';
50
+ this.directory = '~/.codex/prompts';
51
+ this.fileExtension = '.md';
52
+ this.features = {
53
+ supportsSubdirectories: false,
54
+ supportsFrontmatter: true,
55
+ argumentPlaceholder: '$ARGUMENTS',
56
+ frontmatterFields: ['description', 'argument-hint'],
57
+ };
58
+ }
59
+ async detectProject() {
60
+ const codexDir = path.join(this.getHomeDir(), '.codex');
61
+ return await file_system_1.FileSystem.exists(codexDir);
62
+ }
63
+ getCommandPath() {
64
+ return path.join(this.getHomeDir(), '.codex', 'prompts');
65
+ }
66
+ getTargetFilename(name) {
67
+ return `clavix-${name}${this.fileExtension}`;
68
+ }
69
+ formatCommand(template) {
70
+ const frontmatter = `---\ndescription: ${template.description}\nargument-hint: [prompt]\n---\n\n`;
71
+ const content = template.content.replace(/\{\{ARGS\}\}/g, '$ARGUMENTS');
72
+ return frontmatter + content;
73
+ }
74
+ getHomeDir() {
75
+ return process.env.CLAVIX_HOME_OVERRIDE || os.homedir();
76
+ }
77
+ }
78
+ exports.CodexAdapter = CodexAdapter;
79
+ //# sourceMappingURL=codex-adapter.js.map
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Generator for GitHub Copilot instructions file
3
+ * Provides workflow instructions via .github/copilot-instructions.md
4
+ */
5
+ export declare class CopilotInstructionsGenerator {
6
+ static readonly TARGET_FILE = ".github/copilot-instructions.md";
7
+ static readonly START_MARKER = "<!-- CLAVIX:START -->";
8
+ static readonly END_MARKER = "<!-- CLAVIX:END -->";
9
+ /**
10
+ * Generate or update .github/copilot-instructions.md with Clavix workflows
11
+ */
12
+ static generate(): Promise<void>;
13
+ /**
14
+ * Inject or update managed block in .github/copilot-instructions.md
15
+ */
16
+ private static injectManagedBlock;
17
+ /**
18
+ * Escape special regex characters
19
+ */
20
+ private static escapeRegex;
21
+ /**
22
+ * Check if .github/copilot-instructions.md has Clavix block
23
+ */
24
+ static hasClavixBlock(): Promise<boolean>;
25
+ }
26
+ //# sourceMappingURL=copilot-instructions-generator.d.ts.map
@@ -0,0 +1,104 @@
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"));
39
+ /**
40
+ * Generator for GitHub Copilot instructions file
41
+ * Provides workflow instructions via .github/copilot-instructions.md
42
+ */
43
+ class CopilotInstructionsGenerator {
44
+ /**
45
+ * Generate or update .github/copilot-instructions.md with Clavix workflows
46
+ */
47
+ static async generate() {
48
+ const templatePath = path.join(__dirname, '../../templates/agents/copilot-instructions.md');
49
+ // Check if template exists
50
+ if (!(await file_system_1.FileSystem.exists(templatePath))) {
51
+ throw new Error(`Copilot instructions template not found at ${templatePath}`);
52
+ }
53
+ const template = await file_system_1.FileSystem.readFile(templatePath);
54
+ // Ensure .github directory exists
55
+ await file_system_1.FileSystem.ensureDir('.github');
56
+ // Inject into .github/copilot-instructions.md using managed blocks
57
+ await this.injectManagedBlock(this.TARGET_FILE, template);
58
+ }
59
+ /**
60
+ * Inject or update managed block in .github/copilot-instructions.md
61
+ */
62
+ static async injectManagedBlock(filePath, content) {
63
+ let fileContent = '';
64
+ // 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);
67
+ }
68
+ const blockRegex = new RegExp(`${this.escapeRegex(this.START_MARKER)}[\\s\\S]*?${this.escapeRegex(this.END_MARKER)}`, 'g');
69
+ const wrappedContent = `${this.START_MARKER}\n${content}\n${this.END_MARKER}`;
70
+ if (blockRegex.test(fileContent)) {
71
+ // Replace existing block
72
+ fileContent = fileContent.replace(blockRegex, wrappedContent);
73
+ }
74
+ else {
75
+ // Append new block
76
+ if (fileContent && !fileContent.endsWith('\n\n')) {
77
+ fileContent += '\n\n';
78
+ }
79
+ fileContent += wrappedContent + '\n';
80
+ }
81
+ await file_system_1.FileSystem.writeFileAtomic(filePath, fileContent);
82
+ }
83
+ /**
84
+ * Escape special regex characters
85
+ */
86
+ static escapeRegex(str) {
87
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
88
+ }
89
+ /**
90
+ * Check if .github/copilot-instructions.md has Clavix block
91
+ */
92
+ static async hasClavixBlock() {
93
+ if (!(await file_system_1.FileSystem.exists(this.TARGET_FILE))) {
94
+ return false;
95
+ }
96
+ const content = await file_system_1.FileSystem.readFile(this.TARGET_FILE);
97
+ return content.includes(this.START_MARKER);
98
+ }
99
+ }
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
+ //# sourceMappingURL=copilot-instructions-generator.js.map
@@ -0,0 +1,35 @@
1
+ import { BaseAdapter } from './base-adapter';
2
+ import { CommandTemplate } from '../../types/agent';
3
+ /**
4
+ * Crush CLI adapter
5
+ * Commands stored in .crush/commands/clavix/ (supports subdirectories)
6
+ * Uses $PROMPT placeholder for user input (Crush-specific syntax)
7
+ *
8
+ * Reference: https://github.com/charmbracelet/crush/blob/main/COMMANDS.md
9
+ */
10
+ export declare class CrushAdapter extends BaseAdapter {
11
+ readonly name = "crush";
12
+ readonly displayName = "Crush CLI";
13
+ readonly directory = ".crush/commands/clavix";
14
+ readonly fileExtension = ".md";
15
+ readonly features: {
16
+ supportsSubdirectories: boolean;
17
+ supportsFrontmatter: boolean;
18
+ argumentPlaceholder: string;
19
+ };
20
+ /**
21
+ * Detect if Crush is available in the project
22
+ * Checks for .crush directory (project-level commands)
23
+ */
24
+ detectProject(): Promise<boolean>;
25
+ /**
26
+ * Get command path for Crush
27
+ */
28
+ getCommandPath(): string;
29
+ /**
30
+ * Format command content for Crush
31
+ * Replaces generic {{ARGS}} placeholder with Crush-specific $PROMPT
32
+ */
33
+ protected formatCommand(template: CommandTemplate): string;
34
+ }
35
+ //# sourceMappingURL=crush-adapter.d.ts.map
@@ -0,0 +1,49 @@
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");
6
+ /**
7
+ * Crush CLI adapter
8
+ * Commands stored in .crush/commands/clavix/ (supports subdirectories)
9
+ * Uses $PROMPT placeholder for user input (Crush-specific syntax)
10
+ *
11
+ * Reference: https://github.com/charmbracelet/crush/blob/main/COMMANDS.md
12
+ */
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
+ }
26
+ /**
27
+ * Detect if Crush is available in the project
28
+ * Checks for .crush directory (project-level commands)
29
+ */
30
+ async detectProject() {
31
+ return await file_system_1.FileSystem.exists('.crush');
32
+ }
33
+ /**
34
+ * Get command path for Crush
35
+ */
36
+ getCommandPath() {
37
+ return this.directory;
38
+ }
39
+ /**
40
+ * Format command content for Crush
41
+ * Replaces generic {{ARGS}} placeholder with Crush-specific $PROMPT
42
+ */
43
+ formatCommand(template) {
44
+ // Replace Clavix generic placeholder with Crush placeholder
45
+ return template.content.replace(/\{\{ARGS\}\}/g, '$PROMPT');
46
+ }
47
+ }
48
+ exports.CrushAdapter = CrushAdapter;
49
+ //# sourceMappingURL=crush-adapter.js.map
@@ -0,0 +1,25 @@
1
+ import { BaseAdapter } from './base-adapter';
2
+ /**
3
+ * Cursor IDE adapter
4
+ * Commands are stored in .cursor/commands/ (flat structure, no subdirectories)
5
+ */
6
+ export declare class CursorAdapter extends BaseAdapter {
7
+ readonly name = "cursor";
8
+ readonly displayName = "Cursor";
9
+ readonly directory = ".cursor/commands";
10
+ readonly fileExtension = ".md";
11
+ readonly features: {
12
+ supportsSubdirectories: boolean;
13
+ supportsFrontmatter: boolean;
14
+ };
15
+ /**
16
+ * Detect if Cursor is available in the project
17
+ */
18
+ detectProject(): Promise<boolean>;
19
+ /**
20
+ * Get command path for Cursor
21
+ */
22
+ getCommandPath(): string;
23
+ getTargetFilename(name: string): string;
24
+ }
25
+ //# sourceMappingURL=cursor-adapter.d.ts.map
@@ -0,0 +1,40 @@
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");
6
+ /**
7
+ * Cursor IDE adapter
8
+ * Commands are stored in .cursor/commands/ (flat structure, no subdirectories)
9
+ */
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
+ }
23
+ /**
24
+ * Detect if Cursor is available in the project
25
+ */
26
+ async detectProject() {
27
+ return await file_system_1.FileSystem.exists('.cursor');
28
+ }
29
+ /**
30
+ * Get command path for Cursor
31
+ */
32
+ getCommandPath() {
33
+ return this.directory;
34
+ }
35
+ getTargetFilename(name) {
36
+ return `clavix-${name}${this.fileExtension}`;
37
+ }
38
+ }
39
+ exports.CursorAdapter = CursorAdapter;
40
+ //# sourceMappingURL=cursor-adapter.js.map
@@ -0,0 +1,33 @@
1
+ import { BaseAdapter } from './base-adapter';
2
+ import { CommandTemplate } from '../../types/agent';
3
+ /**
4
+ * Droid CLI adapter (Factory.ai)
5
+ * Commands stored in .factory/commands/ with YAML frontmatter
6
+ * Uses $ARGUMENTS placeholder for command arguments
7
+ */
8
+ export declare class DroidAdapter extends BaseAdapter {
9
+ readonly name = "droid";
10
+ readonly displayName = "Droid CLI";
11
+ readonly directory = ".factory/commands";
12
+ readonly fileExtension = ".md";
13
+ readonly features: {
14
+ supportsSubdirectories: boolean;
15
+ supportsFrontmatter: boolean;
16
+ frontmatterFields: string[];
17
+ argumentPlaceholder: string;
18
+ };
19
+ /**
20
+ * Detect if Droid CLI is available in the project
21
+ */
22
+ detectProject(): Promise<boolean>;
23
+ /**
24
+ * Get command path for Droid CLI
25
+ */
26
+ getCommandPath(): string;
27
+ getTargetFilename(name: string): string;
28
+ /**
29
+ * Format command with YAML frontmatter for Droid CLI
30
+ */
31
+ protected formatCommand(template: CommandTemplate): string;
32
+ }
33
+ //# sourceMappingURL=droid-adapter.d.ts.map
@@ -0,0 +1,57 @@
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");
6
+ /**
7
+ * Droid CLI adapter (Factory.ai)
8
+ * Commands stored in .factory/commands/ with YAML frontmatter
9
+ * Uses $ARGUMENTS placeholder for command arguments
10
+ */
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
+ }
25
+ /**
26
+ * Detect if Droid CLI is available in the project
27
+ */
28
+ async detectProject() {
29
+ return await file_system_1.FileSystem.exists('.factory');
30
+ }
31
+ /**
32
+ * Get command path for Droid CLI
33
+ */
34
+ getCommandPath() {
35
+ return this.directory;
36
+ }
37
+ getTargetFilename(name) {
38
+ return `clavix-${name}${this.fileExtension}`;
39
+ }
40
+ /**
41
+ * Format command with YAML frontmatter for Droid CLI
42
+ */
43
+ formatCommand(template) {
44
+ // Add YAML frontmatter
45
+ const frontmatter = `---
46
+ description: ${template.description}
47
+ argument-hint: [prompt]
48
+ ---
49
+
50
+ `;
51
+ // Replace generic argument placeholder with $ARGUMENTS
52
+ const content = template.content.replace(/\{\{ARGS\}\}/g, '$ARGUMENTS');
53
+ return frontmatter + content;
54
+ }
55
+ }
56
+ exports.DroidAdapter = DroidAdapter;
57
+ //# sourceMappingURL=droid-adapter.js.map
@@ -0,0 +1,27 @@
1
+ import { BaseAdapter } from './base-adapter';
2
+ import { CommandTemplate } from '../../types/agent';
3
+ /**
4
+ * Gemini CLI adapter
5
+ * Commands stored as TOML files under .gemini/commands/clavix by default
6
+ */
7
+ export declare class GeminiAdapter extends BaseAdapter {
8
+ private readonly options;
9
+ readonly name = "gemini";
10
+ readonly displayName = "Gemini CLI";
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=gemini-adapter.d.ts.map