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.
- package/.claude/settings.json +26 -0
- package/.claude/settings.local.json +7 -1
- package/.claude/skills/embark-research/SKILL.md +63 -0
- package/.claude/skills/embark-review/SKILL.md +81 -0
- package/dist/agents/amp.d.ts +5 -0
- package/dist/agents/amp.d.ts.map +1 -0
- package/dist/agents/amp.js +115 -0
- package/dist/agents/amp.js.map +1 -0
- package/dist/agents/claude.d.ts +5 -0
- package/dist/agents/claude.d.ts.map +1 -0
- package/dist/agents/claude.js +179 -0
- package/dist/agents/claude.js.map +1 -0
- package/dist/agents/codex.d.ts +5 -0
- package/dist/agents/codex.d.ts.map +1 -0
- package/dist/agents/codex.js +115 -0
- package/dist/agents/codex.js.map +1 -0
- package/dist/agents/gemini.d.ts +5 -0
- package/dist/agents/gemini.d.ts.map +1 -0
- package/dist/agents/gemini.js +115 -0
- package/dist/agents/gemini.js.map +1 -0
- package/dist/agents/index.d.ts +27 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +90 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/cli-history.d.ts +2 -0
- package/dist/cli-history.d.ts.map +1 -0
- package/dist/cli-history.js +101 -0
- package/dist/cli-history.js.map +1 -0
- package/dist/cli-index.d.ts.map +1 -1
- package/dist/cli-index.js +9 -2
- package/dist/cli-index.js.map +1 -1
- package/dist/cli-install.d.ts +2 -0
- package/dist/cli-install.d.ts.map +1 -0
- package/dist/cli-install.js +205 -0
- package/dist/cli-install.js.map +1 -0
- package/dist/cli-search.js +2 -2
- package/dist/cli-search.js.map +1 -1
- package/dist/cli-utils.d.ts +26 -0
- package/dist/cli-utils.d.ts.map +1 -1
- package/dist/cli-utils.js +270 -1
- package/dist/cli-utils.js.map +1 -1
- package/dist/embark-client.d.ts +14 -0
- package/dist/embark-client.d.ts.map +1 -1
- package/dist/embark-client.js +115 -0
- package/dist/embark-client.js.map +1 -1
- package/dist/git-utils.d.ts +7 -1
- package/dist/git-utils.d.ts.map +1 -1
- package/dist/git-utils.js +88 -1
- package/dist/git-utils.js.map +1 -1
- package/dist/handlers.d.ts +1 -0
- package/dist/handlers.d.ts.map +1 -1
- package/dist/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/dist/skills/index.d.ts +3 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +150 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/stats-server.d.ts.map +1 -1
- package/dist/stats-server.js +4 -0
- package/dist/stats-server.js.map +1 -1
- package/dist/stats.d.ts +2 -2
- package/dist/stats.d.ts.map +1 -1
- package/package.json +1 -1
- 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"}
|