embark-cli 1.2.2 → 1.2.4

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 (66) hide show
  1. package/.claude/commands/embark-research.md +67 -0
  2. package/.claude/commands/embark-review.md +84 -0
  3. package/.claude/settings.json +15 -0
  4. package/.claude/settings.local.json +7 -1
  5. package/README.md +40 -0
  6. package/dist/agents/amp.d.ts +5 -0
  7. package/dist/agents/amp.d.ts.map +1 -0
  8. package/dist/agents/amp.js +176 -0
  9. package/dist/agents/amp.js.map +1 -0
  10. package/dist/agents/claude.d.ts +5 -0
  11. package/dist/agents/claude.d.ts.map +1 -0
  12. package/dist/agents/claude.js +172 -0
  13. package/dist/agents/claude.js.map +1 -0
  14. package/dist/agents/codex.d.ts +5 -0
  15. package/dist/agents/codex.d.ts.map +1 -0
  16. package/dist/agents/codex.js +156 -0
  17. package/dist/agents/codex.js.map +1 -0
  18. package/dist/agents/gemini.d.ts +5 -0
  19. package/dist/agents/gemini.d.ts.map +1 -0
  20. package/dist/agents/gemini.js +156 -0
  21. package/dist/agents/gemini.js.map +1 -0
  22. package/dist/agents/index.d.ts +27 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +90 -0
  25. package/dist/agents/index.js.map +1 -0
  26. package/dist/cli-history.d.ts +2 -0
  27. package/dist/cli-history.d.ts.map +1 -0
  28. package/dist/cli-history.js +101 -0
  29. package/dist/cli-history.js.map +1 -0
  30. package/dist/cli-index.d.ts +2 -0
  31. package/dist/cli-index.d.ts.map +1 -0
  32. package/dist/cli-index.js +245 -0
  33. package/dist/cli-index.js.map +1 -0
  34. package/dist/cli-install.d.ts +2 -0
  35. package/dist/cli-install.d.ts.map +1 -0
  36. package/dist/cli-install.js +205 -0
  37. package/dist/cli-install.js.map +1 -0
  38. package/dist/cli-search.js +2 -2
  39. package/dist/cli-search.js.map +1 -1
  40. package/dist/cli-utils.d.ts +46 -0
  41. package/dist/cli-utils.d.ts.map +1 -1
  42. package/dist/cli-utils.js +561 -1
  43. package/dist/cli-utils.js.map +1 -1
  44. package/dist/embark-client.d.ts +37 -0
  45. package/dist/embark-client.d.ts.map +1 -1
  46. package/dist/embark-client.js +172 -0
  47. package/dist/embark-client.js.map +1 -1
  48. package/dist/git-utils.d.ts +7 -1
  49. package/dist/git-utils.d.ts.map +1 -1
  50. package/dist/git-utils.js +88 -1
  51. package/dist/git-utils.js.map +1 -1
  52. package/dist/handlers.d.ts +1 -0
  53. package/dist/handlers.d.ts.map +1 -1
  54. package/dist/index.js +24 -0
  55. package/dist/index.js.map +1 -1
  56. package/dist/skills/index.d.ts +3 -0
  57. package/dist/skills/index.d.ts.map +1 -0
  58. package/dist/skills/index.js +150 -0
  59. package/dist/skills/index.js.map +1 -0
  60. package/dist/stats-server.d.ts.map +1 -1
  61. package/dist/stats-server.js +4 -0
  62. package/dist/stats-server.js.map +1 -1
  63. package/dist/stats.d.ts +2 -2
  64. package/dist/stats.d.ts.map +1 -1
  65. package/package.json +1 -1
  66. package/test/cli-utils.test.js +102 -0
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: embark-research
3
+ description: Research codebase
4
+ ---
5
+
6
+
7
+ Use this skill to research and understand unfamiliar parts of the codebase using semantic code search.
8
+
9
+ ## When to Use
10
+
11
+ - Understanding unfamiliar codebases or locating specific functionality
12
+ - Finding implementations, definitions, or usage patterns
13
+ - Identifying code related to specific features or concepts
14
+ - Before making changes to understand the context and impact
15
+
16
+ ## Tools Available
17
+
18
+ ### `embark search`
19
+
20
+ Semantic code search that finds code by meaning, not just exact keywords.
21
+
22
+ ```bash
23
+ embark search "<descriptive query>" [path]
24
+ embark search -p <path> "<query>"
25
+ embark search --json "<query>" # For structured output
26
+ ```
27
+
28
+ **Query Tips:**
29
+ - Be descriptive: "function that validates user email addresses" > "email"
30
+ - Include context: "error handling middleware for HTTP requests with logging"
31
+ - Specify what you're looking for: "React component that renders a modal dialog"
32
+
33
+ ### `embark history`
34
+
35
+ Search through commit messages and changes to understand how code evolved.
36
+
37
+ ```bash
38
+ embark history "<query>"
39
+ embark history -n 20 "<query>" # Get more results
40
+ embark history --json "<query>" # For structured output
41
+ ```
42
+
43
+ **Use Cases:**
44
+ - Find when a feature was added: "add user authentication"
45
+ - Find bug fixes: "fix memory leak in worker"
46
+ - Understand refactoring: "refactor database connection"
47
+
48
+ ## Research Workflow
49
+
50
+ 1. **Start broad**: Use `embark search` with general terms to understand the landscape
51
+ 2. **Narrow down**: Add path filters (`-p`) once you identify relevant directories
52
+ 3. **Check history**: Use `embark history` to understand why code was written a certain way
53
+ 4. **Read the code**: Once you find relevant files, read them to understand the details
54
+
55
+ ## Example Session
56
+
57
+ ```bash
58
+ # Find authentication-related code
59
+ embark search "user authentication login"
60
+
61
+ # Narrow to specific directory
62
+ embark search -p src/auth "JWT token validation"
63
+
64
+ # Understand how auth evolved
65
+ embark history "add JWT authentication"
66
+ embark history "fix authentication bug"
67
+ ```
@@ -0,0 +1,84 @@
1
+ ---
2
+ name: embark-review
3
+ description: Review the branch
4
+ ---
5
+
6
+ Use this skill to review code changes using semantic search to understand context and impact.
7
+
8
+ ## When to Use
9
+
10
+ - Before committing changes to understand what you're about to commit
11
+ - Reviewing pull requests or branches
12
+ - Understanding the impact of changes on the rest of the codebase
13
+
14
+ ## Review Workflow
15
+
16
+ ### 1. Check Current Changes
17
+
18
+ First, see what's changed:
19
+
20
+ ```bash
21
+ git status
22
+ git diff # Unstaged changes
23
+ git diff --staged # Staged changes
24
+ git diff main...HEAD # All changes on current branch
25
+ ```
26
+
27
+ ### 2. Understand Changed Code Context
28
+
29
+ For each significantly changed file, use semantic search to understand:
30
+
31
+ - **Similar patterns**: Find similar code elsewhere that might need the same change using embark-cli
32
+ - **Callers**: Find code that calls the modified functions
33
+ - **Dependencies**: Find code that the modified code depends on
34
+
35
+ ```bash
36
+ # Find similar patterns
37
+ embark search "similar implementation to <describe the change>"
38
+
39
+ # Find callers of a modified function
40
+ embark search "calls to <function name> to understand impact"
41
+
42
+ # Find related test files
43
+ embark search -p test "tests for <feature being modified>"
44
+ ```
45
+
46
+ ### 3. Check Historical Context
47
+
48
+ Understand why the code was written this way:
49
+
50
+ ```bash
51
+ # Find related commits
52
+ embark history "changes to <feature name>"
53
+
54
+ # Find bug fixes in this area
55
+ embark history "fix <area being modified>"
56
+ ```
57
+
58
+ ### 4. Review Checklist
59
+
60
+ For each change, verify:
61
+
62
+ - [ ] The change is consistent with similar patterns in the codebase
63
+ - [ ] All callers of modified functions will still work correctly
64
+ - [ ] Related tests exist and cover the changes
65
+ - [ ] The change doesn't reintroduce previously fixed bugs
66
+
67
+ ## Example Session
68
+
69
+ ```bash
70
+ # See what's changed
71
+ git diff --staged
72
+
73
+ # For a change to auth middleware, find similar patterns
74
+ embark search "authentication middleware pattern"
75
+
76
+ # Find what calls this middleware
77
+ embark search "uses auth middleware to protect routes"
78
+
79
+ # Check if there were related bug fixes
80
+ embark history "fix auth middleware"
81
+
82
+ # Find related tests
83
+ embark search -p test "auth middleware test"
84
+ ```
@@ -0,0 +1,15 @@
1
+ {
2
+ "hooks": {
3
+ "Stop": [
4
+ {
5
+ "matcher": "",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "embark index"
10
+ }
11
+ ]
12
+ }
13
+ ]
14
+ }
15
+ }
@@ -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
  },
package/README.md CHANGED
@@ -65,6 +65,17 @@ The authorization tokens are securely saved in `~/.jbaccount` for future session
65
65
  - `REPOSITORY_ID` (optional): Alternative way to specify default repository (fallback for `REPOSITORY_GIT_REMOTE_URL`)
66
66
  - `REPOSITORY_REVISION` (optional): Default repository revision (commit hash, branch name, or tag) to search in. If not set, searches the latest indexed version.
67
67
 
68
+ #### Indexing Configuration
69
+ - `INDEX_DESCRIPTOR_JSON` (optional for `embark index --remote`): JSON descriptor for the index job. Must include `scope`, `embedModelId`, `dimensions`, `precision`, `env`, `version` (optional: `clusterType`, `uniqueName`, `flavor`).
70
+ - `INDEX_SCOPE` (optional): Descriptor scope when building JSON (default: `CODE_BLOCKS`).
71
+ - `INDEX_VERSION` (optional): Descriptor version when building JSON (default: `2`).
72
+ - `INDEX_EMBED_MODEL_ID` (optional): Descriptor embed model id when building JSON (default: `openai-embedding-large`).
73
+ - `INDEX_DIMENSIONS` (optional): Descriptor dimensions when building JSON (default: `3072`).
74
+ - `INDEX_ENV` (optional): Descriptor environment when building JSON (`stable` or `bench`, default: `stable`).
75
+ - `INDEX_BENCH_CLIENT_ID` (optional): Benchmark client id when `INDEX_ENV=bench`.
76
+ - `INDEX_REPOSITORY_JSON` (optional for `embark index --remote`): JSON descriptor for the repository. Must include `id`, `source`, `sourceId` (optional: `customerCode`).
77
+ - `INDEX_CUSTOMER_CODE` (optional): Repository customerCode when deriving Space repository JSON.
78
+
68
79
  #### Multi-Repository Filtering
69
80
  - `INCLUDE_REPOSITORY_URLS` (optional): Comma-separated list of Git repository URLs to add to searches. These repositories are searched in addition to any discovered from workspace roots. Useful when your working directory does not contain all repos you want to search. Example: `"https://github.com/owner/repo1.git,https://github.com/owner/repo2.git"`
70
81
  - `EXCLUDE_REPOSITORY_URLS` (optional): Comma-separated list of Git repository URLs to exclude from searches. When set, these repositories will be skipped. Example: `"https://github.com/owner/large-repo.git"`
@@ -123,6 +134,35 @@ npx embark-cli search "authorization middleware" src
123
134
  - `--json`: Emit JSON results instead of grep-like lines
124
135
  - `-h, --help`: Show CLI usage
125
136
 
137
+ ### CLI Indexing
138
+
139
+ Use `embark index` to kick off indexing. The default (local) mode currently just prints a stub message; pass `--remote` to schedule indexing through the Embark API using the Git remote from your current repository or `REPOSITORY_GIT_REMOTE_URL`.
140
+
141
+ Examples:
142
+
143
+ ```bash
144
+ embark index --remote
145
+ embark index --remote --repo https://github.com/owner/repo.git --revision main
146
+ embark index --remote --reschedule-period 24
147
+ ```
148
+
149
+ Options:
150
+ - `--remote`: Call the Embark API to schedule indexing
151
+ - `-r, --repo <url>`: Repository Git remote URL (defaults to current repo or `REPOSITORY_GIT_REMOTE_URL`)
152
+ - `-R, --revision <rev>`: Revision/branch/tag to index
153
+ - `--descriptor <name>`: Legacy index descriptor name (use `--descriptor-json` for scheduling)
154
+ - `--descriptor-json <json>`: Full index descriptor JSON for remote scheduling
155
+ - `--repository-json <json>`: Repository JSON for remote scheduling
156
+ - `--scope <name>`: Descriptor scope when building JSON (default: `CODE_BLOCKS`)
157
+ - `--version <int>`: Descriptor version when building JSON (default: `2`)
158
+ - `--embed-model <id>`: Embedding model id when building JSON (default: `openai-embedding-large`)
159
+ - `--dimensions <int>`: Embedding dimensions when building JSON (default: `3072`)
160
+ - `--env <stable|bench>`: Descriptor environment when building JSON (default: `stable`)
161
+ - `--bench-client-id <id>`: Benchmark client id when env=bench
162
+ - `--customer-code <code>`: Repository customerCode (required for Space)
163
+ - `--reschedule-period <int>`: Reschedule period for recurring jobs
164
+ - `-h, --help`: Show CLI usage
165
+
126
166
  ### Running the Server
127
167
 
128
168
  #### Using npx (Recommended)
@@ -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;AAyD/E,wBAAgB,SAAS,IAAI,aAAa,GAAG,IAAI,CAgBhD;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAc7D;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAyEhF"}
@@ -0,0 +1,176 @@
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 readConfigYaml(configPath) {
44
+ // Amp may use YAML or JSON config - we'll support JSON for simplicity
45
+ const jsonPath = configPath.endsWith('.json') ? configPath : configPath + '.json';
46
+ if (!fs.existsSync(jsonPath)) {
47
+ return {};
48
+ }
49
+ try {
50
+ const content = fs.readFileSync(jsonPath, 'utf-8');
51
+ return JSON.parse(content);
52
+ }
53
+ catch {
54
+ return {};
55
+ }
56
+ }
57
+ function writeConfigJson(configPath, config) {
58
+ const dir = path.dirname(configPath);
59
+ if (!fs.existsSync(dir)) {
60
+ fs.mkdirSync(dir, { recursive: true });
61
+ }
62
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
63
+ }
64
+ const EMBARK_INSTRUCTIONS = `
65
+ ## Embark Code Search
66
+
67
+ You have access to Embark semantic code search via the following commands:
68
+
69
+ ### embark search
70
+ Semantic code search that finds code by meaning:
71
+ \`\`\`bash
72
+ embark search "<descriptive query>" [path]
73
+ \`\`\`
74
+
75
+ ### embark history
76
+ Search through commit messages and changes:
77
+ \`\`\`bash
78
+ embark history "<query>"
79
+ \`\`\`
80
+
81
+ Use these tools to:
82
+ - Understand unfamiliar parts of the codebase
83
+ - Find implementations, definitions, or usage patterns
84
+ - Review code changes by understanding context and impact
85
+ `;
86
+ function detectAmp() {
87
+ const homeDir = os.homedir();
88
+ const globalConfigPath = path.join(homeDir, '.amp');
89
+ const cwd = process.cwd();
90
+ const projectConfigPath = path.join(cwd, '.amp');
91
+ if (!fs.existsSync(globalConfigPath)) {
92
+ return null;
93
+ }
94
+ return {
95
+ type: 'amp',
96
+ globalConfigPath,
97
+ projectConfigPath: fs.existsSync(projectConfigPath) ? projectConfigPath : null,
98
+ isInstalled: false,
99
+ };
100
+ }
101
+ function checkAmpInstalled(configPath) {
102
+ const instructionsPath = path.join(configPath, 'instructions.md');
103
+ if (fs.existsSync(instructionsPath)) {
104
+ const content = fs.readFileSync(instructionsPath, 'utf-8');
105
+ return content.includes('embark');
106
+ }
107
+ const configJsonPath = path.join(configPath, 'config.json');
108
+ if (fs.existsSync(configJsonPath)) {
109
+ const config = readConfigYaml(configJsonPath);
110
+ return config.instructions?.includes('embark') ?? false;
111
+ }
112
+ return false;
113
+ }
114
+ async function installAmp(options) {
115
+ const homeDir = os.homedir();
116
+ const cwd = process.cwd();
117
+ const configPath = options.scope === 'project'
118
+ ? path.join(cwd, '.amp')
119
+ : path.join(homeDir, '.amp');
120
+ const result = {
121
+ agent: 'amp',
122
+ success: true,
123
+ message: '',
124
+ skillsInstalled: [],
125
+ hooksInstalled: [],
126
+ };
127
+ const messages = [];
128
+ // Create config directory if it doesn't exist
129
+ if (!fs.existsSync(configPath)) {
130
+ fs.mkdirSync(configPath, { recursive: true });
131
+ }
132
+ // Install instructions/skills
133
+ if (!options.hooksOnly) {
134
+ const instructionsPath = path.join(configPath, 'instructions.md');
135
+ let existingContent = '';
136
+ if (fs.existsSync(instructionsPath)) {
137
+ existingContent = fs.readFileSync(instructionsPath, 'utf-8');
138
+ }
139
+ if (!existingContent.includes('embark')) {
140
+ const newContent = existingContent + '\n' + EMBARK_INSTRUCTIONS + '\n\n---\n\n' +
141
+ '### /embark-research\n\n' + index_js_1.EMBARK_RESEARCH_SKILL + '\n\n---\n\n' +
142
+ '### /embark-review\n\n' + index_js_1.EMBARK_REVIEW_SKILL;
143
+ fs.writeFileSync(instructionsPath, newContent.trim() + '\n', 'utf-8');
144
+ result.skillsInstalled.push('embark-research', 'embark-review');
145
+ messages.push('Installed Embark instructions and skills');
146
+ }
147
+ else {
148
+ messages.push('Embark instructions already installed');
149
+ }
150
+ }
151
+ // Install hooks if amp supports them
152
+ if (!options.skillsOnly) {
153
+ const configJsonPath = path.join(configPath, 'config.json');
154
+ const config = readConfigYaml(configJsonPath);
155
+ if (!config.hooks) {
156
+ config.hooks = {};
157
+ }
158
+ let hooksAdded = false;
159
+ if (!config.hooks.onStop?.includes('embark index')) {
160
+ config.hooks.onStop = config.hooks.onStop || [];
161
+ config.hooks.onStop.push('embark index');
162
+ result.hooksInstalled.push('onStop');
163
+ hooksAdded = true;
164
+ }
165
+ if (hooksAdded) {
166
+ writeConfigJson(configJsonPath, config);
167
+ messages.push(`Installed hooks: ${result.hooksInstalled.join(', ')}`);
168
+ }
169
+ else {
170
+ messages.push('Hooks already installed');
171
+ }
172
+ }
173
+ result.message = messages.join('. ');
174
+ return result;
175
+ }
176
+ //# 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;AAqF/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,CAgEnF"}
@@ -0,0 +1,172 @@
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?.Stop);
111
+ const commandsPath = path.join(configPath, 'commands');
112
+ const hasResearchSkill = fs.existsSync(path.join(commandsPath, 'embark-research.md'));
113
+ const hasReviewSkill = fs.existsSync(path.join(commandsPath, 'embark-review.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 Stop hook for when agent session ends
135
+ if (addHookIfMissing(settings, 'Stop')) {
136
+ result.hooksInstalled.push('Stop');
137
+ }
138
+ if (result.hooksInstalled.length > 0) {
139
+ writeSettingsJson(settingsPath, settings);
140
+ messages.push(`Installed hooks: ${result.hooksInstalled.join(', ')}`);
141
+ }
142
+ else {
143
+ messages.push('Hooks already installed');
144
+ }
145
+ }
146
+ // Install skills/commands (unless hooks-only)
147
+ if (!options.hooksOnly) {
148
+ const commandsPath = path.join(configPath, 'commands');
149
+ if (!fs.existsSync(commandsPath)) {
150
+ fs.mkdirSync(commandsPath, { recursive: true });
151
+ }
152
+ const researchPath = path.join(commandsPath, 'embark-research.md');
153
+ if (!fs.existsSync(researchPath)) {
154
+ fs.writeFileSync(researchPath, index_js_1.EMBARK_RESEARCH_SKILL, 'utf-8');
155
+ result.skillsInstalled.push('embark-research');
156
+ }
157
+ const reviewPath = path.join(commandsPath, 'embark-review.md');
158
+ if (!fs.existsSync(reviewPath)) {
159
+ fs.writeFileSync(reviewPath, index_js_1.EMBARK_REVIEW_SKILL, 'utf-8');
160
+ result.skillsInstalled.push('embark-review');
161
+ }
162
+ if (result.skillsInstalled.length > 0) {
163
+ messages.push(`Installed skills: ${result.skillsInstalled.join(', ')}`);
164
+ }
165
+ else {
166
+ messages.push('Skills already installed');
167
+ }
168
+ }
169
+ result.message = messages.join('. ');
170
+ return result;
171
+ }
172
+ //# 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;AAmD/E,wBAAgB,WAAW,IAAI,aAAa,GAAG,IAAI,CAgBlD;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAc/D;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAoDlF"}