embark-cli 1.2.3 → 1.3.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 (64) hide show
  1. package/.claude/settings.json +26 -0
  2. package/.claude/settings.local.json +7 -1
  3. package/.claude/skills/embark-research/SKILL.md +63 -0
  4. package/.claude/skills/embark-review/SKILL.md +81 -0
  5. package/dist/agents/amp.d.ts +5 -0
  6. package/dist/agents/amp.d.ts.map +1 -0
  7. package/dist/agents/amp.js +115 -0
  8. package/dist/agents/amp.js.map +1 -0
  9. package/dist/agents/claude.d.ts +5 -0
  10. package/dist/agents/claude.d.ts.map +1 -0
  11. package/dist/agents/claude.js +179 -0
  12. package/dist/agents/claude.js.map +1 -0
  13. package/dist/agents/codex.d.ts +5 -0
  14. package/dist/agents/codex.d.ts.map +1 -0
  15. package/dist/agents/codex.js +115 -0
  16. package/dist/agents/codex.js.map +1 -0
  17. package/dist/agents/gemini.d.ts +5 -0
  18. package/dist/agents/gemini.d.ts.map +1 -0
  19. package/dist/agents/gemini.js +115 -0
  20. package/dist/agents/gemini.js.map +1 -0
  21. package/dist/agents/index.d.ts +27 -0
  22. package/dist/agents/index.d.ts.map +1 -0
  23. package/dist/agents/index.js +90 -0
  24. package/dist/agents/index.js.map +1 -0
  25. package/dist/cli-history.d.ts +2 -0
  26. package/dist/cli-history.d.ts.map +1 -0
  27. package/dist/cli-history.js +101 -0
  28. package/dist/cli-history.js.map +1 -0
  29. package/dist/cli-index.d.ts.map +1 -1
  30. package/dist/cli-index.js +9 -2
  31. package/dist/cli-index.js.map +1 -1
  32. package/dist/cli-install.d.ts +2 -0
  33. package/dist/cli-install.d.ts.map +1 -0
  34. package/dist/cli-install.js +205 -0
  35. package/dist/cli-install.js.map +1 -0
  36. package/dist/cli-search.js +2 -2
  37. package/dist/cli-search.js.map +1 -1
  38. package/dist/cli-utils.d.ts +26 -0
  39. package/dist/cli-utils.d.ts.map +1 -1
  40. package/dist/cli-utils.js +270 -1
  41. package/dist/cli-utils.js.map +1 -1
  42. package/dist/embark-client.d.ts +14 -0
  43. package/dist/embark-client.d.ts.map +1 -1
  44. package/dist/embark-client.js +115 -0
  45. package/dist/embark-client.js.map +1 -1
  46. package/dist/git-utils.d.ts +7 -1
  47. package/dist/git-utils.d.ts.map +1 -1
  48. package/dist/git-utils.js +88 -1
  49. package/dist/git-utils.js.map +1 -1
  50. package/dist/handlers.d.ts +1 -0
  51. package/dist/handlers.d.ts.map +1 -1
  52. package/dist/index.js +20 -1
  53. package/dist/index.js.map +1 -1
  54. package/dist/skills/index.d.ts +3 -0
  55. package/dist/skills/index.d.ts.map +1 -0
  56. package/dist/skills/index.js +150 -0
  57. package/dist/skills/index.js.map +1 -0
  58. package/dist/stats-server.d.ts.map +1 -1
  59. package/dist/stats-server.js +4 -0
  60. package/dist/stats-server.js.map +1 -1
  61. package/dist/stats.d.ts +2 -2
  62. package/dist/stats.d.ts.map +1 -1
  63. package/package.json +1 -1
  64. package/test/cli-utils.test.js +102 -0
@@ -0,0 +1,26 @@
1
+ {
2
+ "hooks": {
3
+ "Stop": [
4
+ {
5
+ "matcher": "",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "embark index"
10
+ }
11
+ ]
12
+ }
13
+ ],
14
+ "UserPromptSubmit": [
15
+ {
16
+ "matcher": "",
17
+ "hooks": [
18
+ {
19
+ "type": "command",
20
+ "command": "embark index"
21
+ }
22
+ ]
23
+ }
24
+ ]
25
+ }
26
+ }
@@ -21,7 +21,13 @@
21
21
  "Bash(ENABLE_REMOTE_LOGS=true node:*)",
22
22
  "Bash(ENABLE_LOCAL_LOGS=true node:*)",
23
23
  "Bash(ENABLE_LOCAL_LOGS=1 node dist/index.js:*)",
24
- "mcp__jetbrains-app__semantic_code_search"
24
+ "mcp__jetbrains-app__semantic_code_search",
25
+ "Bash(npm test:*)",
26
+ "Bash(grep:*)",
27
+ "WebSearch",
28
+ "WebFetch(domain:docs.claude.com)",
29
+ "WebFetch(domain:ampcode.com)",
30
+ "WebFetch(domain:google-gemini.github.io)"
25
31
  ],
26
32
  "deny": []
27
33
  },
@@ -0,0 +1,63 @@
1
+ # Embark Research
2
+
3
+ Use this skill to research and understand unfamiliar parts of the codebase using semantic code search.
4
+
5
+ ## When to Use
6
+
7
+ - Understanding unfamiliar codebases or locating specific functionality
8
+ - Finding implementations, definitions, or usage patterns
9
+ - Identifying code related to specific features or concepts
10
+ - Before making changes to understand the context and impact
11
+
12
+ ## Tools Available
13
+
14
+ ### `embark search`
15
+
16
+ Semantic code search that finds code by meaning, not just exact keywords.
17
+
18
+ ```bash
19
+ embark search "<descriptive query>" [path]
20
+ embark search -p <path> "<query>"
21
+ embark search --json "<query>" # For structured output
22
+ ```
23
+
24
+ **Query Tips:**
25
+ - Be descriptive: "function that validates user email addresses" > "email"
26
+ - Include context: "error handling middleware for HTTP requests with logging"
27
+ - Specify what you're looking for: "React component that renders a modal dialog"
28
+
29
+ ### `embark history`
30
+
31
+ Search through commit messages and changes to understand how code evolved.
32
+
33
+ ```bash
34
+ embark history "<query>"
35
+ embark history -n 20 "<query>" # Get more results
36
+ embark history --json "<query>" # For structured output
37
+ ```
38
+
39
+ **Use Cases:**
40
+ - Find when a feature was added: "add user authentication"
41
+ - Find bug fixes: "fix memory leak in worker"
42
+ - Understand refactoring: "refactor database connection"
43
+
44
+ ## Research Workflow
45
+
46
+ 1. **Start broad**: Use `embark search` with general terms to understand the landscape
47
+ 2. **Narrow down**: Add path filters (`-p`) once you identify relevant directories
48
+ 3. **Check history**: Use `embark history` to understand why code was written a certain way
49
+ 4. **Read the code**: Once you find relevant files, read them to understand the details
50
+
51
+ ## Example Session
52
+
53
+ ```bash
54
+ # Find authentication-related code
55
+ embark search "user authentication login"
56
+
57
+ # Narrow to specific directory
58
+ embark search -p src/auth "JWT token validation"
59
+
60
+ # Understand how auth evolved
61
+ embark history "add JWT authentication"
62
+ embark history "fix authentication bug"
63
+ ```
@@ -0,0 +1,81 @@
1
+ # Embark Review
2
+
3
+ Use this skill to review code changes using semantic search to understand context and impact.
4
+
5
+ ## When to Use
6
+
7
+ - Before committing changes to understand what you're about to commit
8
+ - Reviewing pull requests or branches
9
+ - Understanding the impact of changes on the rest of the codebase
10
+
11
+ ## Review Workflow
12
+
13
+ ### 1. Check Current Changes
14
+
15
+ First, see what's changed:
16
+
17
+ ```bash
18
+ git status
19
+ git diff # Unstaged changes
20
+ git diff --staged # Staged changes
21
+ git diff main...HEAD # All changes on current branch
22
+ ```
23
+
24
+ ### 2. Understand Changed Code Context
25
+
26
+ For each significantly changed file, use semantic search to understand:
27
+
28
+ - **Similar patterns**: Find similar code elsewhere that might need the same change
29
+ - **Callers**: Find code that calls the modified functions
30
+ - **Dependencies**: Find code that the modified code depends on
31
+
32
+ ```bash
33
+ # Find similar patterns
34
+ embark search "similar implementation to <describe the change>"
35
+
36
+ # Find callers of a modified function
37
+ embark search "calls to <function name> to understand impact"
38
+
39
+ # Find related test files
40
+ embark search -p test "tests for <feature being modified>"
41
+ ```
42
+
43
+ ### 3. Check Historical Context
44
+
45
+ Understand why the code was written this way:
46
+
47
+ ```bash
48
+ # Find related commits
49
+ embark history "changes to <feature name>"
50
+
51
+ # Find bug fixes in this area
52
+ embark history "fix <area being modified>"
53
+ ```
54
+
55
+ ### 4. Review Checklist
56
+
57
+ For each change, verify:
58
+
59
+ - [ ] The change is consistent with similar patterns in the codebase
60
+ - [ ] All callers of modified functions will still work correctly
61
+ - [ ] Related tests exist and cover the changes
62
+ - [ ] The change doesn't reintroduce previously fixed bugs
63
+
64
+ ## Example Session
65
+
66
+ ```bash
67
+ # See what's changed
68
+ git diff --staged
69
+
70
+ # For a change to auth middleware, find similar patterns
71
+ embark search "authentication middleware pattern"
72
+
73
+ # Find what calls this middleware
74
+ embark search "uses auth middleware to protect routes"
75
+
76
+ # Check if there were related bug fixes
77
+ embark history "fix auth middleware"
78
+
79
+ # Find related tests
80
+ embark search -p test "auth middleware test"
81
+ ```
@@ -0,0 +1,5 @@
1
+ import type { DetectedAgent, InstallOptions, InstallResult } from './index.js';
2
+ export declare function detectAmp(): DetectedAgent | null;
3
+ export declare function checkAmpInstalled(configPath: string): boolean;
4
+ export declare function installAmp(options: InstallOptions): Promise<InstallResult>;
5
+ //# sourceMappingURL=amp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amp.d.ts","sourceRoot":"","sources":["../../src/agents/amp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG/E,wBAAgB,SAAS,IAAI,aAAa,GAAG,IAAI,CAgBhD;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAM7D;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA2DhF"}
@@ -0,0 +1,115 @@
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.detectAmp = detectAmp;
37
+ exports.checkAmpInstalled = checkAmpInstalled;
38
+ exports.installAmp = installAmp;
39
+ const os = __importStar(require("os"));
40
+ const path = __importStar(require("path"));
41
+ const fs = __importStar(require("fs"));
42
+ const index_js_1 = require("../skills/index.js");
43
+ function detectAmp() {
44
+ const homeDir = os.homedir();
45
+ const globalConfigPath = path.join(homeDir, '.amp');
46
+ const cwd = process.cwd();
47
+ const projectConfigPath = path.join(cwd, '.amp');
48
+ if (!fs.existsSync(globalConfigPath)) {
49
+ return null;
50
+ }
51
+ return {
52
+ type: 'amp',
53
+ globalConfigPath,
54
+ projectConfigPath: fs.existsSync(projectConfigPath) ? projectConfigPath : null,
55
+ isInstalled: false,
56
+ };
57
+ }
58
+ function checkAmpInstalled(configPath) {
59
+ const skillsPath = path.join(configPath, 'skills');
60
+ const hasResearchSkill = fs.existsSync(path.join(skillsPath, 'embark-research', 'SKILL.md'));
61
+ const hasReviewSkill = fs.existsSync(path.join(skillsPath, 'embark-review', 'SKILL.md'));
62
+ return hasResearchSkill || hasReviewSkill;
63
+ }
64
+ async function installAmp(options) {
65
+ const homeDir = os.homedir();
66
+ const cwd = process.cwd();
67
+ const configPath = options.scope === 'project'
68
+ ? path.join(cwd, '.amp')
69
+ : path.join(homeDir, '.amp');
70
+ const result = {
71
+ agent: 'amp',
72
+ success: true,
73
+ message: '',
74
+ skillsInstalled: [],
75
+ hooksInstalled: [],
76
+ };
77
+ const messages = [];
78
+ // Create config directory if it doesn't exist
79
+ if (!fs.existsSync(configPath)) {
80
+ fs.mkdirSync(configPath, { recursive: true });
81
+ }
82
+ // Install skills
83
+ if (!options.hooksOnly) {
84
+ const skillsPath = path.join(configPath, 'skills');
85
+ // Install embark-research skill
86
+ const researchSkillPath = path.join(skillsPath, 'embark-research');
87
+ const researchFilePath = path.join(researchSkillPath, 'SKILL.md');
88
+ if (!fs.existsSync(researchFilePath)) {
89
+ fs.mkdirSync(researchSkillPath, { recursive: true });
90
+ fs.writeFileSync(researchFilePath, index_js_1.EMBARK_RESEARCH_SKILL, 'utf-8');
91
+ result.skillsInstalled.push('embark-research');
92
+ }
93
+ // Install embark-review skill
94
+ const reviewSkillPath = path.join(skillsPath, 'embark-review');
95
+ const reviewFilePath = path.join(reviewSkillPath, 'SKILL.md');
96
+ if (!fs.existsSync(reviewFilePath)) {
97
+ fs.mkdirSync(reviewSkillPath, { recursive: true });
98
+ fs.writeFileSync(reviewFilePath, index_js_1.EMBARK_REVIEW_SKILL, 'utf-8');
99
+ result.skillsInstalled.push('embark-review');
100
+ }
101
+ if (result.skillsInstalled.length > 0) {
102
+ messages.push(`Installed skills: ${result.skillsInstalled.join(', ')}`);
103
+ }
104
+ else {
105
+ messages.push('Skills already installed');
106
+ }
107
+ }
108
+ // Note: Amp hooks support is uncertain, skip for now
109
+ if (!options.skillsOnly) {
110
+ messages.push('Amp hooks not yet supported');
111
+ }
112
+ result.message = messages.join('. ');
113
+ return result;
114
+ }
115
+ //# sourceMappingURL=amp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amp.js","sourceRoot":"","sources":["../../src/agents/amp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { DetectedAgent, InstallOptions, InstallResult } from './index.js';
2
+ export declare function detectClaude(): DetectedAgent | null;
3
+ export declare function checkClaudeInstalled(configPath: string): boolean;
4
+ export declare function installClaude(options: InstallOptions): Promise<InstallResult>;
5
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/agents/claude.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAsF/E,wBAAgB,YAAY,IAAI,aAAa,GAAG,IAAI,CAgBnD;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAWhE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAwEnF"}
@@ -0,0 +1,179 @@
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.detectClaude = detectClaude;
37
+ exports.checkClaudeInstalled = checkClaudeInstalled;
38
+ exports.installClaude = installClaude;
39
+ const os = __importStar(require("os"));
40
+ const path = __importStar(require("path"));
41
+ const fs = __importStar(require("fs"));
42
+ const index_js_1 = require("../skills/index.js");
43
+ const HOOK_COMMAND = 'embark index';
44
+ function readSettingsJson(settingsPath) {
45
+ if (!fs.existsSync(settingsPath)) {
46
+ return {};
47
+ }
48
+ try {
49
+ const content = fs.readFileSync(settingsPath, 'utf-8');
50
+ return JSON.parse(content);
51
+ }
52
+ catch {
53
+ return {};
54
+ }
55
+ }
56
+ function writeSettingsJson(settingsPath, settings) {
57
+ const dir = path.dirname(settingsPath);
58
+ if (!fs.existsSync(dir)) {
59
+ fs.mkdirSync(dir, { recursive: true });
60
+ }
61
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
62
+ }
63
+ function hasEmbarkHook(matchers) {
64
+ if (!matchers)
65
+ return false;
66
+ return matchers.some((matcher) => matcher.hooks.some((hook) => hook.command?.includes('embark')));
67
+ }
68
+ function createEmbarkHookMatcher() {
69
+ return {
70
+ matcher: '',
71
+ hooks: [
72
+ {
73
+ type: 'command',
74
+ command: HOOK_COMMAND,
75
+ },
76
+ ],
77
+ };
78
+ }
79
+ function addHookIfMissing(settings, hookType) {
80
+ if (!settings.hooks) {
81
+ settings.hooks = {};
82
+ }
83
+ if (!settings.hooks[hookType]) {
84
+ settings.hooks[hookType] = [];
85
+ }
86
+ if (hasEmbarkHook(settings.hooks[hookType])) {
87
+ return false;
88
+ }
89
+ settings.hooks[hookType].push(createEmbarkHookMatcher());
90
+ return true;
91
+ }
92
+ function detectClaude() {
93
+ const homeDir = os.homedir();
94
+ const globalConfigPath = path.join(homeDir, '.claude');
95
+ const cwd = process.cwd();
96
+ const projectConfigPath = path.join(cwd, '.claude');
97
+ if (!fs.existsSync(globalConfigPath)) {
98
+ return null;
99
+ }
100
+ return {
101
+ type: 'claude',
102
+ globalConfigPath,
103
+ projectConfigPath: fs.existsSync(projectConfigPath) ? projectConfigPath : null,
104
+ isInstalled: false,
105
+ };
106
+ }
107
+ function checkClaudeInstalled(configPath) {
108
+ const settingsPath = path.join(configPath, 'settings.json');
109
+ const settings = readSettingsJson(settingsPath);
110
+ const hasHooks = hasEmbarkHook(settings.hooks?.UserPromptSubmit) || hasEmbarkHook(settings.hooks?.Stop);
111
+ const skillsPath = path.join(configPath, 'skills');
112
+ const hasResearchSkill = fs.existsSync(path.join(skillsPath, 'embark-research', 'SKILL.md'));
113
+ const hasReviewSkill = fs.existsSync(path.join(skillsPath, 'embark-review', 'SKILL.md'));
114
+ return hasHooks || hasResearchSkill || hasReviewSkill;
115
+ }
116
+ async function installClaude(options) {
117
+ const homeDir = os.homedir();
118
+ const cwd = process.cwd();
119
+ const configPath = options.scope === 'project'
120
+ ? path.join(cwd, '.claude')
121
+ : path.join(homeDir, '.claude');
122
+ const result = {
123
+ agent: 'claude',
124
+ success: true,
125
+ message: '',
126
+ skillsInstalled: [],
127
+ hooksInstalled: [],
128
+ };
129
+ const messages = [];
130
+ // Install hooks (unless skills-only)
131
+ if (!options.skillsOnly) {
132
+ const settingsPath = path.join(configPath, 'settings.json');
133
+ const settings = readSettingsJson(settingsPath);
134
+ // Add UserPromptSubmit hook for session start
135
+ if (addHookIfMissing(settings, 'UserPromptSubmit')) {
136
+ result.hooksInstalled.push('UserPromptSubmit');
137
+ }
138
+ // Add Stop hook for when agent session ends
139
+ if (addHookIfMissing(settings, 'Stop')) {
140
+ result.hooksInstalled.push('Stop');
141
+ }
142
+ if (result.hooksInstalled.length > 0) {
143
+ writeSettingsJson(settingsPath, settings);
144
+ messages.push(`Installed hooks: ${result.hooksInstalled.join(', ')}`);
145
+ }
146
+ else {
147
+ messages.push('Hooks already installed');
148
+ }
149
+ }
150
+ // Install skills (unless hooks-only)
151
+ if (!options.hooksOnly) {
152
+ const skillsPath = path.join(configPath, 'skills');
153
+ // Install embark-research skill
154
+ const researchSkillPath = path.join(skillsPath, 'embark-research');
155
+ const researchFilePath = path.join(researchSkillPath, 'SKILL.md');
156
+ if (!fs.existsSync(researchFilePath)) {
157
+ fs.mkdirSync(researchSkillPath, { recursive: true });
158
+ fs.writeFileSync(researchFilePath, index_js_1.EMBARK_RESEARCH_SKILL, 'utf-8');
159
+ result.skillsInstalled.push('embark-research');
160
+ }
161
+ // Install embark-review skill
162
+ const reviewSkillPath = path.join(skillsPath, 'embark-review');
163
+ const reviewFilePath = path.join(reviewSkillPath, 'SKILL.md');
164
+ if (!fs.existsSync(reviewFilePath)) {
165
+ fs.mkdirSync(reviewSkillPath, { recursive: true });
166
+ fs.writeFileSync(reviewFilePath, index_js_1.EMBARK_REVIEW_SKILL, 'utf-8');
167
+ result.skillsInstalled.push('embark-review');
168
+ }
169
+ if (result.skillsInstalled.length > 0) {
170
+ messages.push(`Installed skills: ${result.skillsInstalled.join(', ')}`);
171
+ }
172
+ else {
173
+ messages.push('Skills already installed');
174
+ }
175
+ }
176
+ result.message = messages.join('. ');
177
+ return result;
178
+ }
179
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agents/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { DetectedAgent, InstallOptions, InstallResult } from './index.js';
2
+ export declare function detectCodex(): DetectedAgent | null;
3
+ export declare function checkCodexInstalled(configPath: string): boolean;
4
+ export declare function installCodex(options: InstallOptions): Promise<InstallResult>;
5
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG/E,wBAAgB,WAAW,IAAI,aAAa,GAAG,IAAI,CAgBlD;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAM/D;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA2DlF"}
@@ -0,0 +1,115 @@
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.detectCodex = detectCodex;
37
+ exports.checkCodexInstalled = checkCodexInstalled;
38
+ exports.installCodex = installCodex;
39
+ const os = __importStar(require("os"));
40
+ const path = __importStar(require("path"));
41
+ const fs = __importStar(require("fs"));
42
+ const index_js_1 = require("../skills/index.js");
43
+ function detectCodex() {
44
+ const homeDir = os.homedir();
45
+ const globalConfigPath = path.join(homeDir, '.codex');
46
+ const cwd = process.cwd();
47
+ const projectConfigPath = path.join(cwd, '.codex');
48
+ if (!fs.existsSync(globalConfigPath)) {
49
+ return null;
50
+ }
51
+ return {
52
+ type: 'codex',
53
+ globalConfigPath,
54
+ projectConfigPath: fs.existsSync(projectConfigPath) ? projectConfigPath : null,
55
+ isInstalled: false,
56
+ };
57
+ }
58
+ function checkCodexInstalled(configPath) {
59
+ const skillsPath = path.join(configPath, 'skills');
60
+ const hasResearchSkill = fs.existsSync(path.join(skillsPath, 'embark-research', 'SKILL.md'));
61
+ const hasReviewSkill = fs.existsSync(path.join(skillsPath, 'embark-review', 'SKILL.md'));
62
+ return hasResearchSkill || hasReviewSkill;
63
+ }
64
+ async function installCodex(options) {
65
+ const homeDir = os.homedir();
66
+ const cwd = process.cwd();
67
+ const configPath = options.scope === 'project'
68
+ ? path.join(cwd, '.codex')
69
+ : path.join(homeDir, '.codex');
70
+ const result = {
71
+ agent: 'codex',
72
+ success: true,
73
+ message: '',
74
+ skillsInstalled: [],
75
+ hooksInstalled: [],
76
+ };
77
+ const messages = [];
78
+ // Create config directory if it doesn't exist
79
+ if (!fs.existsSync(configPath)) {
80
+ fs.mkdirSync(configPath, { recursive: true });
81
+ }
82
+ // Install skills
83
+ if (!options.hooksOnly) {
84
+ const skillsPath = path.join(configPath, 'skills');
85
+ // Install embark-research skill
86
+ const researchSkillPath = path.join(skillsPath, 'embark-research');
87
+ const researchFilePath = path.join(researchSkillPath, 'SKILL.md');
88
+ if (!fs.existsSync(researchFilePath)) {
89
+ fs.mkdirSync(researchSkillPath, { recursive: true });
90
+ fs.writeFileSync(researchFilePath, index_js_1.EMBARK_RESEARCH_SKILL, 'utf-8');
91
+ result.skillsInstalled.push('embark-research');
92
+ }
93
+ // Install embark-review skill
94
+ const reviewSkillPath = path.join(skillsPath, 'embark-review');
95
+ const reviewFilePath = path.join(reviewSkillPath, 'SKILL.md');
96
+ if (!fs.existsSync(reviewFilePath)) {
97
+ fs.mkdirSync(reviewSkillPath, { recursive: true });
98
+ fs.writeFileSync(reviewFilePath, index_js_1.EMBARK_REVIEW_SKILL, 'utf-8');
99
+ result.skillsInstalled.push('embark-review');
100
+ }
101
+ if (result.skillsInstalled.length > 0) {
102
+ messages.push(`Installed skills: ${result.skillsInstalled.join(', ')}`);
103
+ }
104
+ else {
105
+ messages.push('Skills already installed');
106
+ }
107
+ }
108
+ // Note: Codex doesn't have hooks in the same way as Claude
109
+ if (!options.skillsOnly) {
110
+ messages.push('Codex does not support hooks (index runs on each session via instructions)');
111
+ }
112
+ result.message = messages.join('. ');
113
+ return result;
114
+ }
115
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { DetectedAgent, InstallOptions, InstallResult } from './index.js';
2
+ export declare function detectGemini(): DetectedAgent | null;
3
+ export declare function checkGeminiInstalled(configPath: string): boolean;
4
+ export declare function installGemini(options: InstallOptions): Promise<InstallResult>;
5
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/agents/gemini.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG/E,wBAAgB,YAAY,IAAI,aAAa,GAAG,IAAI,CAgBnD;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAMhE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA2DnF"}