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.
- package/.claude/commands/embark-research.md +67 -0
- package/.claude/commands/embark-review.md +84 -0
- package/.claude/settings.json +15 -0
- package/.claude/settings.local.json +7 -1
- package/README.md +40 -0
- package/dist/agents/amp.d.ts +5 -0
- package/dist/agents/amp.d.ts.map +1 -0
- package/dist/agents/amp.js +176 -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 +172 -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 +156 -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 +156 -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 +2 -0
- package/dist/cli-index.d.ts.map +1 -0
- package/dist/cli-index.js +245 -0
- package/dist/cli-index.js.map +1 -0
- 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 +46 -0
- package/dist/cli-utils.d.ts.map +1 -1
- package/dist/cli-utils.js +561 -1
- package/dist/cli-utils.js.map +1 -1
- package/dist/embark-client.d.ts +37 -0
- package/dist/embark-client.d.ts.map +1 -1
- package/dist/embark-client.js +172 -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 +24 -0
- 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,156 @@
|
|
|
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 readConfigJson(configPath) {
|
|
44
|
+
if (!fs.existsSync(configPath)) {
|
|
45
|
+
return {};
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
49
|
+
return JSON.parse(content);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return {};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function writeConfigJson(configPath, config) {
|
|
56
|
+
const dir = path.dirname(configPath);
|
|
57
|
+
if (!fs.existsSync(dir)) {
|
|
58
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
59
|
+
}
|
|
60
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
61
|
+
}
|
|
62
|
+
const EMBARK_INSTRUCTIONS = `
|
|
63
|
+
## Embark Code Search
|
|
64
|
+
|
|
65
|
+
You have access to Embark semantic code search via the following commands:
|
|
66
|
+
|
|
67
|
+
### embark search
|
|
68
|
+
Semantic code search that finds code by meaning:
|
|
69
|
+
\`\`\`bash
|
|
70
|
+
embark search "<descriptive query>" [path]
|
|
71
|
+
\`\`\`
|
|
72
|
+
|
|
73
|
+
### embark history
|
|
74
|
+
Search through commit messages and changes:
|
|
75
|
+
\`\`\`bash
|
|
76
|
+
embark history "<query>"
|
|
77
|
+
\`\`\`
|
|
78
|
+
|
|
79
|
+
Use these tools to:
|
|
80
|
+
- Understand unfamiliar parts of the codebase
|
|
81
|
+
- Find implementations, definitions, or usage patterns
|
|
82
|
+
- Review code changes by understanding context and impact
|
|
83
|
+
`;
|
|
84
|
+
function detectCodex() {
|
|
85
|
+
const homeDir = os.homedir();
|
|
86
|
+
const globalConfigPath = path.join(homeDir, '.codex');
|
|
87
|
+
const cwd = process.cwd();
|
|
88
|
+
const projectConfigPath = path.join(cwd, '.codex');
|
|
89
|
+
if (!fs.existsSync(globalConfigPath)) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
type: 'codex',
|
|
94
|
+
globalConfigPath,
|
|
95
|
+
projectConfigPath: fs.existsSync(projectConfigPath) ? projectConfigPath : null,
|
|
96
|
+
isInstalled: false,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function checkCodexInstalled(configPath) {
|
|
100
|
+
const instructionsPath = path.join(configPath, 'instructions.md');
|
|
101
|
+
if (fs.existsSync(instructionsPath)) {
|
|
102
|
+
const content = fs.readFileSync(instructionsPath, 'utf-8');
|
|
103
|
+
return content.includes('embark');
|
|
104
|
+
}
|
|
105
|
+
const configJsonPath = path.join(configPath, 'config.json');
|
|
106
|
+
if (fs.existsSync(configJsonPath)) {
|
|
107
|
+
const config = readConfigJson(configJsonPath);
|
|
108
|
+
return config.instructions?.includes('embark') ?? false;
|
|
109
|
+
}
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
async function installCodex(options) {
|
|
113
|
+
const homeDir = os.homedir();
|
|
114
|
+
const cwd = process.cwd();
|
|
115
|
+
const configPath = options.scope === 'project'
|
|
116
|
+
? path.join(cwd, '.codex')
|
|
117
|
+
: path.join(homeDir, '.codex');
|
|
118
|
+
const result = {
|
|
119
|
+
agent: 'codex',
|
|
120
|
+
success: true,
|
|
121
|
+
message: '',
|
|
122
|
+
skillsInstalled: [],
|
|
123
|
+
hooksInstalled: [],
|
|
124
|
+
};
|
|
125
|
+
const messages = [];
|
|
126
|
+
// Create config directory if it doesn't exist
|
|
127
|
+
if (!fs.existsSync(configPath)) {
|
|
128
|
+
fs.mkdirSync(configPath, { recursive: true });
|
|
129
|
+
}
|
|
130
|
+
// Install instructions/skills (Codex uses instructions.md file)
|
|
131
|
+
if (!options.hooksOnly) {
|
|
132
|
+
const instructionsPath = path.join(configPath, 'instructions.md');
|
|
133
|
+
let existingContent = '';
|
|
134
|
+
if (fs.existsSync(instructionsPath)) {
|
|
135
|
+
existingContent = fs.readFileSync(instructionsPath, 'utf-8');
|
|
136
|
+
}
|
|
137
|
+
if (!existingContent.includes('embark')) {
|
|
138
|
+
const newContent = existingContent + '\n' + EMBARK_INSTRUCTIONS + '\n\n---\n\n' +
|
|
139
|
+
'### /embark-research\n\n' + index_js_1.EMBARK_RESEARCH_SKILL + '\n\n---\n\n' +
|
|
140
|
+
'### /embark-review\n\n' + index_js_1.EMBARK_REVIEW_SKILL;
|
|
141
|
+
fs.writeFileSync(instructionsPath, newContent.trim() + '\n', 'utf-8');
|
|
142
|
+
result.skillsInstalled.push('embark-research', 'embark-review');
|
|
143
|
+
messages.push('Installed Embark instructions and skills');
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
messages.push('Embark instructions already installed');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Note: Codex doesn't have hooks in the same way as Claude
|
|
150
|
+
if (!options.skillsOnly) {
|
|
151
|
+
messages.push('Codex does not support hooks (index runs on each session via instructions)');
|
|
152
|
+
}
|
|
153
|
+
result.message = messages.join('. ');
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
//# 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;AAmD/E,wBAAgB,YAAY,IAAI,aAAa,GAAG,IAAI,CAgBnD;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAchE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAoDnF"}
|
|
@@ -0,0 +1,156 @@
|
|
|
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.detectGemini = detectGemini;
|
|
37
|
+
exports.checkGeminiInstalled = checkGeminiInstalled;
|
|
38
|
+
exports.installGemini = installGemini;
|
|
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 readConfigJson(configPath) {
|
|
44
|
+
if (!fs.existsSync(configPath)) {
|
|
45
|
+
return {};
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
49
|
+
return JSON.parse(content);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return {};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function writeConfigJson(configPath, config) {
|
|
56
|
+
const dir = path.dirname(configPath);
|
|
57
|
+
if (!fs.existsSync(dir)) {
|
|
58
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
59
|
+
}
|
|
60
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
61
|
+
}
|
|
62
|
+
const EMBARK_INSTRUCTIONS = `
|
|
63
|
+
## Embark Code Search
|
|
64
|
+
|
|
65
|
+
You have access to Embark semantic code search via the following commands:
|
|
66
|
+
|
|
67
|
+
### embark search
|
|
68
|
+
Semantic code search that finds code by meaning:
|
|
69
|
+
\`\`\`bash
|
|
70
|
+
embark search "<descriptive query>" [path]
|
|
71
|
+
\`\`\`
|
|
72
|
+
|
|
73
|
+
### embark history
|
|
74
|
+
Search through commit messages and changes:
|
|
75
|
+
\`\`\`bash
|
|
76
|
+
embark history "<query>"
|
|
77
|
+
\`\`\`
|
|
78
|
+
|
|
79
|
+
Use these tools to:
|
|
80
|
+
- Understand unfamiliar parts of the codebase
|
|
81
|
+
- Find implementations, definitions, or usage patterns
|
|
82
|
+
- Review code changes by understanding context and impact
|
|
83
|
+
`;
|
|
84
|
+
function detectGemini() {
|
|
85
|
+
const homeDir = os.homedir();
|
|
86
|
+
const globalConfigPath = path.join(homeDir, '.gemini');
|
|
87
|
+
const cwd = process.cwd();
|
|
88
|
+
const projectConfigPath = path.join(cwd, '.gemini');
|
|
89
|
+
if (!fs.existsSync(globalConfigPath)) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
type: 'gemini',
|
|
94
|
+
globalConfigPath,
|
|
95
|
+
projectConfigPath: fs.existsSync(projectConfigPath) ? projectConfigPath : null,
|
|
96
|
+
isInstalled: false,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function checkGeminiInstalled(configPath) {
|
|
100
|
+
const instructionsPath = path.join(configPath, 'instructions.md');
|
|
101
|
+
if (fs.existsSync(instructionsPath)) {
|
|
102
|
+
const content = fs.readFileSync(instructionsPath, 'utf-8');
|
|
103
|
+
return content.includes('embark');
|
|
104
|
+
}
|
|
105
|
+
const configJsonPath = path.join(configPath, 'config.json');
|
|
106
|
+
if (fs.existsSync(configJsonPath)) {
|
|
107
|
+
const config = readConfigJson(configJsonPath);
|
|
108
|
+
return config.instructions?.includes('embark') ?? false;
|
|
109
|
+
}
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
async function installGemini(options) {
|
|
113
|
+
const homeDir = os.homedir();
|
|
114
|
+
const cwd = process.cwd();
|
|
115
|
+
const configPath = options.scope === 'project'
|
|
116
|
+
? path.join(cwd, '.gemini')
|
|
117
|
+
: path.join(homeDir, '.gemini');
|
|
118
|
+
const result = {
|
|
119
|
+
agent: 'gemini',
|
|
120
|
+
success: true,
|
|
121
|
+
message: '',
|
|
122
|
+
skillsInstalled: [],
|
|
123
|
+
hooksInstalled: [],
|
|
124
|
+
};
|
|
125
|
+
const messages = [];
|
|
126
|
+
// Create config directory if it doesn't exist
|
|
127
|
+
if (!fs.existsSync(configPath)) {
|
|
128
|
+
fs.mkdirSync(configPath, { recursive: true });
|
|
129
|
+
}
|
|
130
|
+
// Install instructions/skills
|
|
131
|
+
if (!options.hooksOnly) {
|
|
132
|
+
const instructionsPath = path.join(configPath, 'instructions.md');
|
|
133
|
+
let existingContent = '';
|
|
134
|
+
if (fs.existsSync(instructionsPath)) {
|
|
135
|
+
existingContent = fs.readFileSync(instructionsPath, 'utf-8');
|
|
136
|
+
}
|
|
137
|
+
if (!existingContent.includes('embark')) {
|
|
138
|
+
const newContent = existingContent + '\n' + EMBARK_INSTRUCTIONS + '\n\n---\n\n' +
|
|
139
|
+
'### /embark-research\n\n' + index_js_1.EMBARK_RESEARCH_SKILL + '\n\n---\n\n' +
|
|
140
|
+
'### /embark-review\n\n' + index_js_1.EMBARK_REVIEW_SKILL;
|
|
141
|
+
fs.writeFileSync(instructionsPath, newContent.trim() + '\n', 'utf-8');
|
|
142
|
+
result.skillsInstalled.push('embark-research', 'embark-review');
|
|
143
|
+
messages.push('Installed Embark instructions and skills');
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
messages.push('Embark instructions already installed');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Note: Gemini Code Assist doesn't have CLI hooks in the same way
|
|
150
|
+
if (!options.skillsOnly) {
|
|
151
|
+
messages.push('Gemini does not support CLI hooks (use VS Code extension settings instead)');
|
|
152
|
+
}
|
|
153
|
+
result.message = messages.join('. ');
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/agents/gemini.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { AgentName, InstallScope } from '../cli-utils.js';
|
|
2
|
+
export interface DetectedAgent {
|
|
3
|
+
type: AgentName;
|
|
4
|
+
globalConfigPath: string;
|
|
5
|
+
projectConfigPath: string | null;
|
|
6
|
+
isInstalled: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface InstallOptions {
|
|
9
|
+
scope: InstallScope;
|
|
10
|
+
skillsOnly: boolean;
|
|
11
|
+
hooksOnly: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface InstallResult {
|
|
14
|
+
agent: AgentName;
|
|
15
|
+
success: boolean;
|
|
16
|
+
message: string;
|
|
17
|
+
skillsInstalled: string[];
|
|
18
|
+
hooksInstalled: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface AgentInstaller {
|
|
21
|
+
detect(): DetectedAgent | null;
|
|
22
|
+
checkInstalled(configPath: string): boolean;
|
|
23
|
+
install(options: InstallOptions): Promise<InstallResult>;
|
|
24
|
+
}
|
|
25
|
+
export declare function detectAgents(): DetectedAgent[];
|
|
26
|
+
export declare function getConfigPath(agent: DetectedAgent, scope: InstallScope): string;
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,IAAI,aAAa,GAAG,IAAI,CAAC;IAC/B,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5C,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC1D;AAED,wBAAgB,YAAY,IAAI,aAAa,EAAE,CA+C9C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAK/E"}
|
|
@@ -0,0 +1,90 @@
|
|
|
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.detectAgents = detectAgents;
|
|
37
|
+
exports.getConfigPath = getConfigPath;
|
|
38
|
+
const os = __importStar(require("os"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
function detectAgents() {
|
|
42
|
+
const agents = [];
|
|
43
|
+
const homeDir = os.homedir();
|
|
44
|
+
const cwd = process.cwd();
|
|
45
|
+
// Import installers lazily to avoid circular dependencies
|
|
46
|
+
const claudeConfigPath = path.join(homeDir, '.claude');
|
|
47
|
+
if (fs.existsSync(claudeConfigPath)) {
|
|
48
|
+
agents.push({
|
|
49
|
+
type: 'claude',
|
|
50
|
+
globalConfigPath: claudeConfigPath,
|
|
51
|
+
projectConfigPath: fs.existsSync(path.join(cwd, '.claude')) ? path.join(cwd, '.claude') : null,
|
|
52
|
+
isInstalled: false,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
const codexConfigPath = path.join(homeDir, '.codex');
|
|
56
|
+
if (fs.existsSync(codexConfigPath)) {
|
|
57
|
+
agents.push({
|
|
58
|
+
type: 'codex',
|
|
59
|
+
globalConfigPath: codexConfigPath,
|
|
60
|
+
projectConfigPath: fs.existsSync(path.join(cwd, '.codex')) ? path.join(cwd, '.codex') : null,
|
|
61
|
+
isInstalled: false,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
const ampConfigPath = path.join(homeDir, '.amp');
|
|
65
|
+
if (fs.existsSync(ampConfigPath)) {
|
|
66
|
+
agents.push({
|
|
67
|
+
type: 'amp',
|
|
68
|
+
globalConfigPath: ampConfigPath,
|
|
69
|
+
projectConfigPath: fs.existsSync(path.join(cwd, '.amp')) ? path.join(cwd, '.amp') : null,
|
|
70
|
+
isInstalled: false,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
const geminiConfigPath = path.join(homeDir, '.gemini');
|
|
74
|
+
if (fs.existsSync(geminiConfigPath)) {
|
|
75
|
+
agents.push({
|
|
76
|
+
type: 'gemini',
|
|
77
|
+
globalConfigPath: geminiConfigPath,
|
|
78
|
+
projectConfigPath: fs.existsSync(path.join(cwd, '.gemini')) ? path.join(cwd, '.gemini') : null,
|
|
79
|
+
isInstalled: false,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return agents;
|
|
83
|
+
}
|
|
84
|
+
function getConfigPath(agent, scope) {
|
|
85
|
+
if (scope === 'project' && agent.projectConfigPath) {
|
|
86
|
+
return agent.projectConfigPath;
|
|
87
|
+
}
|
|
88
|
+
return agent.globalConfigPath;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-history.d.ts","sourceRoot":"","sources":["../src/cli-history.ts"],"names":[],"mappings":"AAoEA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,iBAkE9C"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.runHistory = runHistory;
|
|
7
|
+
const package_json_1 = __importDefault(require("../package.json"));
|
|
8
|
+
const config_js_1 = require("./config.js");
|
|
9
|
+
const logger_js_1 = require("./logger.js");
|
|
10
|
+
const embark_client_js_1 = require("./embark-client.js");
|
|
11
|
+
const git_utils_js_1 = require("./git-utils.js");
|
|
12
|
+
const cli_utils_js_1 = require("./cli-utils.js");
|
|
13
|
+
function resolveRepositoryUrl(requestedUrl, configRepoUrl, configWorkingDir) {
|
|
14
|
+
const cwd = process.cwd();
|
|
15
|
+
if (requestedUrl) {
|
|
16
|
+
return requestedUrl;
|
|
17
|
+
}
|
|
18
|
+
if ((0, git_utils_js_1.isGitRepository)(cwd)) {
|
|
19
|
+
const url = (0, git_utils_js_1.getGitRemoteUrlCached)(cwd);
|
|
20
|
+
if (url) {
|
|
21
|
+
return url;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (configWorkingDir && (0, git_utils_js_1.isGitRepository)(configWorkingDir)) {
|
|
25
|
+
const url = (0, git_utils_js_1.getGitRemoteUrlCached)(configWorkingDir);
|
|
26
|
+
if (url) {
|
|
27
|
+
return url;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (configRepoUrl) {
|
|
31
|
+
return configRepoUrl;
|
|
32
|
+
}
|
|
33
|
+
throw new Error('No repository available for history search. Run from a Git repository or set REPOSITORY_GIT_REMOTE_URL.');
|
|
34
|
+
}
|
|
35
|
+
function formatTimestamp(timestamp) {
|
|
36
|
+
if (timestamp === null) {
|
|
37
|
+
return '';
|
|
38
|
+
}
|
|
39
|
+
const date = new Date(timestamp * 1000);
|
|
40
|
+
return date.toISOString().replace('T', ' ').replace(/\.\d{3}Z$/, '');
|
|
41
|
+
}
|
|
42
|
+
function formatCommitResult(commit, index) {
|
|
43
|
+
const parts = [`${index + 1}. ${commit.revision.substring(0, 12)}`];
|
|
44
|
+
if (commit.timestamp !== null) {
|
|
45
|
+
parts.push(`(${formatTimestamp(commit.timestamp)})`);
|
|
46
|
+
}
|
|
47
|
+
parts.push(`score=${commit.score.toFixed(3)}`);
|
|
48
|
+
if (commit.paths.length > 0) {
|
|
49
|
+
const pathsPreview = commit.paths.length <= 3
|
|
50
|
+
? commit.paths.join(', ')
|
|
51
|
+
: `${commit.paths.slice(0, 3).join(', ')} (+${commit.paths.length - 3} more)`;
|
|
52
|
+
parts.push(`files: ${pathsPreview}`);
|
|
53
|
+
}
|
|
54
|
+
return parts.join(' ');
|
|
55
|
+
}
|
|
56
|
+
async function runHistory(argv) {
|
|
57
|
+
const parsed = (0, cli_utils_js_1.parseHistoryArgs)(argv);
|
|
58
|
+
if (parsed.showHelp) {
|
|
59
|
+
console.log(cli_utils_js_1.HISTORY_USAGE);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (parsed.error) {
|
|
63
|
+
console.error(`Error: ${parsed.error}\n\n${cli_utils_js_1.HISTORY_USAGE}`);
|
|
64
|
+
process.exitCode = 1;
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const config = (0, config_js_1.loadConfig)();
|
|
68
|
+
const repositoryGitRemoteUrl = resolveRepositoryUrl(parsed.repositoryGitRemoteUrl, config.repositoryGitRemoteUrl, config.workingDir);
|
|
69
|
+
const revision = parsed.revision || config.repositoryRevision;
|
|
70
|
+
try {
|
|
71
|
+
const { commits } = await (0, embark_client_js_1.searchCommits)(parsed.query, repositoryGitRemoteUrl, revision, parsed.maxResults, parsed.minScore, config, package_json_1.default);
|
|
72
|
+
if (parsed.format === 'json') {
|
|
73
|
+
console.log(JSON.stringify({ query: parsed.query, commits }, null, 2));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (commits.length === 0) {
|
|
77
|
+
console.error(`No commits found for "${parsed.query}"`);
|
|
78
|
+
process.exitCode = 1;
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
console.log(`Found ${commits.length} commits for "${parsed.query}":\n`);
|
|
82
|
+
commits.forEach((commit, index) => {
|
|
83
|
+
console.log(formatCommitResult(commit, index));
|
|
84
|
+
});
|
|
85
|
+
(0, logger_js_1.logToFile)('info', 'CLI history search completed', {
|
|
86
|
+
query: parsed.query,
|
|
87
|
+
resultCount: commits.length,
|
|
88
|
+
repositoryGitRemoteUrl,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
(0, logger_js_1.logToFile)('error', 'CLI history search failed', {
|
|
93
|
+
query: parsed.query,
|
|
94
|
+
repositoryGitRemoteUrl,
|
|
95
|
+
error: error instanceof Error ? error.message : String(error),
|
|
96
|
+
});
|
|
97
|
+
console.error(`History search failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
98
|
+
process.exitCode = 1;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=cli-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-history.js","sourceRoot":"","sources":["../src/cli-history.ts"],"names":[],"mappings":";;;;;AAoEA,gCAkEC;AAtID,mEAAkC;AAClC,2CAAyC;AACzC,2CAAwC;AACxC,yDAAuE;AACvE,iDAAwE;AACxE,iDAAiE;AAEjE,SAAS,oBAAoB,CAC3B,YAA2B,EAC3B,aAA4B,EAC5B,gBAA+B;IAE/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,IAAA,8BAAe,EAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAA,oCAAqB,EAAC,GAAG,CAAC,CAAC;QACvC,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,IAAI,IAAA,8BAAe,EAAC,gBAAgB,CAAC,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAA,oCAAqB,EAAC,gBAAgB,CAAC,CAAC;QACpD,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,yGAAyG,CAC1G,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,SAAwB;IAC/C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA0B,EAAE,KAAa;IACnE,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAEpE,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE/C,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;YAC3C,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,MAAM,MAAM,GAAG,IAAA,+BAAgB,EAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,4BAAa,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,OAAO,4BAAa,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAC5B,MAAM,sBAAsB,GAAG,oBAAoB,CACjD,MAAM,CAAC,sBAAsB,EAC7B,MAAM,CAAC,sBAAsB,EAC7B,MAAM,CAAC,UAAU,CAClB,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,kBAAkB,CAAC;IAE9D,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,gCAAa,EACrC,MAAM,CAAC,KAAe,EACtB,sBAAsB,EACtB,QAAQ,EACR,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,QAAQ,EACf,MAAM,EACN,sBAAG,CACJ,CAAC;QAEF,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;YACxD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,MAAM,iBAAiB,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC;QACxE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAChC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,IAAA,qBAAS,EAAC,MAAM,EAAE,8BAA8B,EAAE;YAChD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,OAAO,CAAC,MAAM;YAC3B,sBAAsB;SACvB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,qBAAS,EAAC,OAAO,EAAE,2BAA2B,EAAE;YAC9C,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,sBAAsB;YACtB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CACX,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnF,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-index.d.ts","sourceRoot":"","sources":["../src/cli-index.ts"],"names":[],"mappings":"AA2MA,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,iBAiG5C"}
|