@indy2kro/agentenv 0.1.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/LICENSE +21 -0
- package/README.md +320 -0
- package/dist/adapters/base.d.ts +58 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +16 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/claude.d.ts +21 -0
- package/dist/adapters/claude.d.ts.map +1 -0
- package/dist/adapters/claude.js +198 -0
- package/dist/adapters/claude.js.map +1 -0
- package/dist/adapters/codex.d.ts +23 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +134 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/copilot.d.ts +21 -0
- package/dist/adapters/copilot.d.ts.map +1 -0
- package/dist/adapters/copilot.js +111 -0
- package/dist/adapters/copilot.js.map +1 -0
- package/dist/adapters/detect.d.ts +23 -0
- package/dist/adapters/detect.d.ts.map +1 -0
- package/dist/adapters/detect.js +80 -0
- package/dist/adapters/detect.js.map +1 -0
- package/dist/adapters/index.d.ts +12 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +11 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/opencode.d.ts +19 -0
- package/dist/adapters/opencode.d.ts.map +1 -0
- package/dist/adapters/opencode.js +107 -0
- package/dist/adapters/opencode.js.map +1 -0
- package/dist/commands/apply.d.ts +21 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +113 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/configure.d.ts +13 -0
- package/dist/commands/configure.d.ts.map +1 -0
- package/dist/commands/configure.js +151 -0
- package/dist/commands/configure.js.map +1 -0
- package/dist/commands/setup.d.ts +11 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +78 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +152 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config/schema.d.ts +142 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +778 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/scopes.d.ts +14 -0
- package/dist/config/scopes.d.ts.map +1 -0
- package/dist/config/scopes.js +32 -0
- package/dist/config/scopes.js.map +1 -0
- package/dist/generate/agentsmd.d.ts +44 -0
- package/dist/generate/agentsmd.d.ts.map +1 -0
- package/dist/generate/agentsmd.js +340 -0
- package/dist/generate/agentsmd.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/base.d.ts +33 -0
- package/dist/integrations/base.d.ts.map +1 -0
- package/dist/integrations/base.js +9 -0
- package/dist/integrations/base.js.map +1 -0
- package/dist/integrations/index.d.ts +7 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +5 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/superpowers.d.ts +48 -0
- package/dist/integrations/superpowers.d.ts.map +1 -0
- package/dist/integrations/superpowers.js +191 -0
- package/dist/integrations/superpowers.js.map +1 -0
- package/dist/shell/detector.d.ts +92 -0
- package/dist/shell/detector.d.ts.map +1 -0
- package/dist/shell/detector.js +714 -0
- package/dist/shell/detector.js.map +1 -0
- package/dist/toolchain/fallbacks.d.ts +77 -0
- package/dist/toolchain/fallbacks.d.ts.map +1 -0
- package/dist/toolchain/fallbacks.js +238 -0
- package/dist/toolchain/fallbacks.js.map +1 -0
- package/dist/toolchain/gh.d.ts +20 -0
- package/dist/toolchain/gh.d.ts.map +1 -0
- package/dist/toolchain/gh.js +36 -0
- package/dist/toolchain/gh.js.map +1 -0
- package/dist/toolchain/mise.d.ts +92 -0
- package/dist/toolchain/mise.d.ts.map +1 -0
- package/dist/toolchain/mise.js +346 -0
- package/dist/toolchain/mise.js.map +1 -0
- package/dist/toolchain/rtk.d.ts +27 -0
- package/dist/toolchain/rtk.d.ts.map +1 -0
- package/dist/toolchain/rtk.js +76 -0
- package/dist/toolchain/rtk.js.map +1 -0
- package/dist/wizard/build.d.ts +24 -0
- package/dist/wizard/build.d.ts.map +1 -0
- package/dist/wizard/build.js +64 -0
- package/dist/wizard/build.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mise Toolchain Integration
|
|
3
|
+
* Handles mise.toml generation and mise commands
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import * as child_process from 'child_process';
|
|
8
|
+
import { TOOL_TIERS } from '../config/schema.js';
|
|
9
|
+
import { FALLBACK_REQUIRED_TOOLS, requiresFallback } from './fallbacks.js';
|
|
10
|
+
// Tool to mise name mappings
|
|
11
|
+
export const MISE_TOOL_NAMES = {
|
|
12
|
+
ripgrep: 'ripgrep',
|
|
13
|
+
fd: 'fd',
|
|
14
|
+
jq: 'jq',
|
|
15
|
+
rtk: 'rtk',
|
|
16
|
+
ast_grep: 'ast-grep',
|
|
17
|
+
git_delta: 'delta',
|
|
18
|
+
universal_ctags: 'universal-ctags',
|
|
19
|
+
gh: 'gh',
|
|
20
|
+
difftastic: 'difftastic',
|
|
21
|
+
yq: 'yq',
|
|
22
|
+
bat: 'bat',
|
|
23
|
+
eza: 'eza',
|
|
24
|
+
miller: 'miller',
|
|
25
|
+
tokei: 'tokei',
|
|
26
|
+
hyperfine: 'hyperfine',
|
|
27
|
+
fzf: 'fzf',
|
|
28
|
+
just: 'just',
|
|
29
|
+
watchexec: 'watchexec',
|
|
30
|
+
direnv: 'direnv',
|
|
31
|
+
};
|
|
32
|
+
// Tools that cannot be installed via mise and require fallback
|
|
33
|
+
// Based on Phase 0 findings: universal-ctags and tokei are not in mise registry
|
|
34
|
+
export { FALLBACK_REQUIRED_TOOLS, requiresFallback };
|
|
35
|
+
/**
|
|
36
|
+
* Tools agentenv invokes directly are pinned to versions we have verified;
|
|
37
|
+
* everything else resolves to latest. rtk is invoked by agentenv's delegation
|
|
38
|
+
* (its `init` flags are the hook contract), moves fast, and must stay pinned —
|
|
39
|
+
* bump deliberately per plan §10.
|
|
40
|
+
*/
|
|
41
|
+
export const PINNED_TOOL_VERSIONS = {
|
|
42
|
+
rtk: '0.49.0',
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Generate mise.toml content from agentenv config
|
|
46
|
+
*/
|
|
47
|
+
export function generateMiseToml(config, customTools = []) {
|
|
48
|
+
const lines = [];
|
|
49
|
+
lines.push('# mise.toml - Generated by agentenv');
|
|
50
|
+
lines.push('# Do not edit directly; edit agentenv.toml instead');
|
|
51
|
+
lines.push('');
|
|
52
|
+
// Tools section
|
|
53
|
+
lines.push('[tools]');
|
|
54
|
+
const tools = config.tools || {};
|
|
55
|
+
const toolKeys = Object.keys(tools);
|
|
56
|
+
// Process tools by tier
|
|
57
|
+
const tier1Tools = toolKeys.filter((key) => TOOL_TIERS[key] === 1 && tools[key]);
|
|
58
|
+
const tier2Tools = toolKeys.filter((key) => TOOL_TIERS[key] === 2 && tools[key]);
|
|
59
|
+
const tier3Tools = toolKeys.filter((key) => TOOL_TIERS[key] === 3 && tools[key]);
|
|
60
|
+
// Add enabled tools
|
|
61
|
+
const allEnabledTools = [...tier1Tools, ...tier2Tools, ...tier3Tools];
|
|
62
|
+
for (const toolKey of allEnabledTools) {
|
|
63
|
+
// Skip tools that require fallback installation (not in mise registry)
|
|
64
|
+
if (requiresFallback(toolKey)) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const miseName = MISE_TOOL_NAMES[toolKey] || toolKey;
|
|
68
|
+
const version = PINNED_TOOL_VERSIONS[miseName] || 'latest';
|
|
69
|
+
lines.push(`${miseName} = "${version}"`);
|
|
70
|
+
}
|
|
71
|
+
// Add custom tools with mise_source
|
|
72
|
+
for (const ct of customTools) {
|
|
73
|
+
if (ct.mise_source) {
|
|
74
|
+
const version = ct.version || 'latest';
|
|
75
|
+
lines.push(`\n# Custom tool: ${ct.name}`);
|
|
76
|
+
lines.push(`${ct.mise_source} = "${version}"`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
lines.push('');
|
|
80
|
+
// Env section for agentenv-specific variables
|
|
81
|
+
lines.push('[env]');
|
|
82
|
+
lines.push('AGENTENV_MANAGED = "true"');
|
|
83
|
+
lines.push('');
|
|
84
|
+
return lines.join('\n');
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Save mise.toml to a file
|
|
88
|
+
*/
|
|
89
|
+
export function saveMiseToml(content, outputPath) {
|
|
90
|
+
try {
|
|
91
|
+
fs.mkdirSync(path.dirname(outputPath), { recursive: true });
|
|
92
|
+
fs.writeFileSync(outputPath, content);
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
throw new Error(`Failed to save mise.toml: ${err}`, { cause: err });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get list of tools to install from config
|
|
100
|
+
*/
|
|
101
|
+
export function getToolsToInstall(config) {
|
|
102
|
+
const tools = config.tools || {};
|
|
103
|
+
const toolKeys = Object.keys(tools);
|
|
104
|
+
const result = [];
|
|
105
|
+
for (const key of toolKeys) {
|
|
106
|
+
if (tools[key]) {
|
|
107
|
+
// Skip tools that require fallback installation (not in mise registry)
|
|
108
|
+
if (requiresFallback(key)) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
const miseName = MISE_TOOL_NAMES[key] || key;
|
|
112
|
+
result.push({
|
|
113
|
+
name: key,
|
|
114
|
+
miseName,
|
|
115
|
+
version: PINNED_TOOL_VERSIONS[miseName] || 'latest',
|
|
116
|
+
tier: TOOL_TIERS[key] || 3,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Check if mise is installed
|
|
124
|
+
*/
|
|
125
|
+
export function isMiseInstalled() {
|
|
126
|
+
try {
|
|
127
|
+
child_process.execSync('mise --version', { stdio: 'ignore' });
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get mise version
|
|
136
|
+
*/
|
|
137
|
+
export function getMiseVersion() {
|
|
138
|
+
try {
|
|
139
|
+
const output = child_process.execSync('mise --version', { encoding: 'utf-8' });
|
|
140
|
+
return output.trim();
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return 'unknown';
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Check if a specific tool is installed via mise
|
|
148
|
+
*/
|
|
149
|
+
export function isToolInstalled(toolName) {
|
|
150
|
+
try {
|
|
151
|
+
child_process.execSync(`mise which ${toolName}`, { stdio: 'ignore' });
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Install mise itself
|
|
160
|
+
* This should be done by the user before running agentenv
|
|
161
|
+
*/
|
|
162
|
+
export function ensureMiseInstalled() {
|
|
163
|
+
if (isMiseInstalled()) {
|
|
164
|
+
return {
|
|
165
|
+
success: true,
|
|
166
|
+
message: 'mise is already installed',
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
success: false,
|
|
171
|
+
message: 'mise is not installed. Please install it first: https://mise.jdx.dev',
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Run mise install
|
|
176
|
+
* Installs all tools listed in mise.toml
|
|
177
|
+
*/
|
|
178
|
+
export async function runMiseInstall(miseTomlPath, cwd = '.') {
|
|
179
|
+
try {
|
|
180
|
+
const result = child_process.spawnSync('mise', ['install'], {
|
|
181
|
+
cwd,
|
|
182
|
+
encoding: 'utf-8',
|
|
183
|
+
stdio: 'pipe',
|
|
184
|
+
env: {
|
|
185
|
+
...process.env,
|
|
186
|
+
// Ensure mise uses the correct config file
|
|
187
|
+
MISE_CONFIG_FILE: miseTomlPath,
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
return {
|
|
191
|
+
success: result.status === 0,
|
|
192
|
+
stdout: result.stdout || '',
|
|
193
|
+
stderr: result.stderr || '',
|
|
194
|
+
exitCode: result.status ?? null,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
return {
|
|
199
|
+
success: false,
|
|
200
|
+
stdout: '',
|
|
201
|
+
stderr: err instanceof Error ? err.message : String(err),
|
|
202
|
+
exitCode: null,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Get installed tool versions via mise
|
|
208
|
+
*/
|
|
209
|
+
export function getInstalledVersions() {
|
|
210
|
+
const versions = {};
|
|
211
|
+
try {
|
|
212
|
+
const output = child_process.execSync('mise ls --json', {
|
|
213
|
+
encoding: 'utf-8',
|
|
214
|
+
stdio: 'pipe',
|
|
215
|
+
});
|
|
216
|
+
const tools = JSON.parse(output);
|
|
217
|
+
for (const tool of tools) {
|
|
218
|
+
versions[tool.name] = tool.version;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// Ignore errors (mise might not be installed or might not support --json)
|
|
223
|
+
}
|
|
224
|
+
return versions;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Parse existing mise.toml file
|
|
228
|
+
*/
|
|
229
|
+
export function parseMiseToml(filePath) {
|
|
230
|
+
try {
|
|
231
|
+
if (!fs.existsSync(filePath)) {
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
235
|
+
return parseToml(content);
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Simple TOML parser helper
|
|
243
|
+
*/
|
|
244
|
+
function parseToml(content) {
|
|
245
|
+
const result = {};
|
|
246
|
+
let currentTable = result;
|
|
247
|
+
const lines = content.split('\n');
|
|
248
|
+
for (const line of lines) {
|
|
249
|
+
const trimmed = line.trim();
|
|
250
|
+
// Skip comments and empty lines
|
|
251
|
+
if (trimmed === '' || trimmed.startsWith('#')) {
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
// Section header
|
|
255
|
+
if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
|
|
256
|
+
const section = trimmed.slice(1, -1);
|
|
257
|
+
if (section.includes('.')) {
|
|
258
|
+
// Nested section
|
|
259
|
+
const parts = section.split('.');
|
|
260
|
+
let parent = result;
|
|
261
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
262
|
+
if (!parent[parts[i]]) {
|
|
263
|
+
parent[parts[i]] = {};
|
|
264
|
+
}
|
|
265
|
+
parent = parent[parts[i]];
|
|
266
|
+
}
|
|
267
|
+
currentTable = parent;
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
if (!result[section]) {
|
|
271
|
+
result[section] = {};
|
|
272
|
+
}
|
|
273
|
+
currentTable = result[section];
|
|
274
|
+
}
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
// Key-value pair
|
|
278
|
+
const equalsIndex = trimmed.indexOf('=');
|
|
279
|
+
if (equalsIndex > 0) {
|
|
280
|
+
const key = trimmed.slice(0, equalsIndex).trim();
|
|
281
|
+
const value = trimmed.slice(equalsIndex + 1).trim();
|
|
282
|
+
// Remove quotes if present
|
|
283
|
+
let cleanValue = value;
|
|
284
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
285
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
286
|
+
cleanValue = value.slice(1, -1);
|
|
287
|
+
}
|
|
288
|
+
// Parse boolean
|
|
289
|
+
if (cleanValue.toLowerCase() === 'true') {
|
|
290
|
+
cleanValue = true;
|
|
291
|
+
}
|
|
292
|
+
else if (cleanValue.toLowerCase() === 'false') {
|
|
293
|
+
cleanValue = false;
|
|
294
|
+
}
|
|
295
|
+
// Parse number
|
|
296
|
+
if (!isNaN(Number(cleanValue))) {
|
|
297
|
+
cleanValue = Number(cleanValue);
|
|
298
|
+
}
|
|
299
|
+
currentTable[key] = cleanValue;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return result;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Merge existing mise.toml with new tools
|
|
306
|
+
* Preserves existing tools that are not in the new config
|
|
307
|
+
*/
|
|
308
|
+
export function mergeMiseConfigs(existing, newConfig) {
|
|
309
|
+
const result = {
|
|
310
|
+
tools: { ...newConfig.tools },
|
|
311
|
+
env: { ...newConfig.env },
|
|
312
|
+
settings: { ...newConfig.settings },
|
|
313
|
+
};
|
|
314
|
+
if (existing) {
|
|
315
|
+
// Merge tools - preserve existing versions if not in new config
|
|
316
|
+
for (const [tool, version] of Object.entries(existing.tools || {})) {
|
|
317
|
+
if (!result.tools[tool]) {
|
|
318
|
+
result.tools[tool] = version;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
// Merge env
|
|
322
|
+
if (existing.env) {
|
|
323
|
+
for (const [key, value] of Object.entries(existing.env)) {
|
|
324
|
+
if (!result.env || !result.env[key]) {
|
|
325
|
+
if (!result.env) {
|
|
326
|
+
result.env = {};
|
|
327
|
+
}
|
|
328
|
+
result.env[key] = value;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
// Merge settings
|
|
333
|
+
if (existing.settings) {
|
|
334
|
+
for (const [key, value] of Object.entries(existing.settings)) {
|
|
335
|
+
if (!result.settings || result.settings[key] === undefined) {
|
|
336
|
+
if (!result.settings) {
|
|
337
|
+
result.settings = {};
|
|
338
|
+
}
|
|
339
|
+
result.settings[key] = value;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return result;
|
|
345
|
+
}
|
|
346
|
+
//# sourceMappingURL=mise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mise.js","sourceRoot":"","sources":["../../src/toolchain/mise.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RTK Toolchain Integration
|
|
3
|
+
* Delegate per-agent hook wiring to `rtk init <flags>` instead of
|
|
4
|
+
* re-implementing hook formats by hand (see docs/research/rtk-init-delegation.md).
|
|
5
|
+
*/
|
|
6
|
+
export interface RtkInitResult {
|
|
7
|
+
success: boolean;
|
|
8
|
+
message: string;
|
|
9
|
+
stdout: string;
|
|
10
|
+
stderr: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Runs `rtk init` with the given args in the given cwd. Injectable so tests
|
|
14
|
+
* can stub it (CI has no rtk on PATH).
|
|
15
|
+
*/
|
|
16
|
+
export type RtkInitFn = (args: string[], cwd: string) => RtkInitResult;
|
|
17
|
+
/** rtk init args per agent, verified against rtk 0.42.4 and 0.49.0. */
|
|
18
|
+
export declare const RTK_INIT_FLAGS: Record<string, string[]>;
|
|
19
|
+
/** Resolve the rtk init function to use, defaulting to the real one. */
|
|
20
|
+
export declare function resolveRtkInit(rtkInit?: RtkInitFn): RtkInitFn;
|
|
21
|
+
/**
|
|
22
|
+
* Surfaces what rtk actually rewrote as part of the per-agent message, so its
|
|
23
|
+
* work isn't silently invisible (Phase 4 transparency log).
|
|
24
|
+
* Also notes the side effect of creating ~/.local/share/rtk/history.db
|
|
25
|
+
*/
|
|
26
|
+
export declare function rtkMessage(run: RtkInitResult): string;
|
|
27
|
+
//# sourceMappingURL=rtk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rtk.d.ts","sourceRoot":"","sources":["../../src/toolchain/rtk.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,aAAa,CAAC;AAEvE,uEAAuE;AACvE,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAInD,CAAC;AAgDF,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAYrD"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RTK Toolchain Integration
|
|
3
|
+
* Delegate per-agent hook wiring to `rtk init <flags>` instead of
|
|
4
|
+
* re-implementing hook formats by hand (see docs/research/rtk-init-delegation.md).
|
|
5
|
+
*/
|
|
6
|
+
import * as child_process from 'child_process';
|
|
7
|
+
import { resolveBinary } from '../adapters/detect.js';
|
|
8
|
+
/** rtk init args per agent, verified against rtk 0.42.4 and 0.49.0. */
|
|
9
|
+
export const RTK_INIT_FLAGS = {
|
|
10
|
+
codex_cli: ['--codex'],
|
|
11
|
+
copilot: ['--copilot'],
|
|
12
|
+
opencode: ['-g', '--opencode'],
|
|
13
|
+
};
|
|
14
|
+
const defaultRtkInit = (args, cwd) => {
|
|
15
|
+
// Testing escape hatch: point at a stub `rtk` program (run via node) that
|
|
16
|
+
// writes the files a real `rtk init` would, so the full CLI pipeline can be
|
|
17
|
+
// exercised in CI without installing rtk.
|
|
18
|
+
const stub = process.env.AGENTENV_RTK_BIN;
|
|
19
|
+
const rtkPath = stub ? process.execPath : resolveBinary('rtk');
|
|
20
|
+
if (!stub && !rtkPath) {
|
|
21
|
+
return {
|
|
22
|
+
success: false,
|
|
23
|
+
message: 'rtk binary not found on PATH — is rtk in mise.toml (Tier 1) and did `mise install` run?',
|
|
24
|
+
stdout: '',
|
|
25
|
+
stderr: '',
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const cmd = stub ? process.execPath : rtkPath;
|
|
29
|
+
const cmdArgs = stub ? [stub, 'init', ...args] : ['init', ...args];
|
|
30
|
+
try {
|
|
31
|
+
const result = child_process.spawnSync(cmd, cmdArgs, {
|
|
32
|
+
cwd,
|
|
33
|
+
encoding: 'utf-8',
|
|
34
|
+
stdio: 'pipe',
|
|
35
|
+
});
|
|
36
|
+
const ok = result.status === 0;
|
|
37
|
+
return {
|
|
38
|
+
success: ok,
|
|
39
|
+
message: ok
|
|
40
|
+
? `rtk init ${args.join(' ')} succeeded`
|
|
41
|
+
: `rtk init ${args.join(' ')} failed (exit ${result.status ?? 'null'})`,
|
|
42
|
+
stdout: result.stdout || '',
|
|
43
|
+
stderr: result.stderr || '',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
return {
|
|
48
|
+
success: false,
|
|
49
|
+
message: `rtk init ${args.join(' ')} errored: ${err instanceof Error ? err.message : String(err)}`,
|
|
50
|
+
stdout: '',
|
|
51
|
+
stderr: '',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
/** Resolve the rtk init function to use, defaulting to the real one. */
|
|
56
|
+
export function resolveRtkInit(rtkInit) {
|
|
57
|
+
return rtkInit ?? defaultRtkInit;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Surfaces what rtk actually rewrote as part of the per-agent message, so its
|
|
61
|
+
* work isn't silently invisible (Phase 4 transparency log).
|
|
62
|
+
* Also notes the side effect of creating ~/.local/share/rtk/history.db
|
|
63
|
+
*/
|
|
64
|
+
export function rtkMessage(run) {
|
|
65
|
+
const rewrote = run.stdout.replace(/\s+/g, ' ').trim();
|
|
66
|
+
if (!rewrote)
|
|
67
|
+
return run.message;
|
|
68
|
+
const summary = rewrote.length > 400 ? rewrote.slice(0, 400).trimEnd() + '...' : rewrote;
|
|
69
|
+
// Add transparency note about rtk history database creation
|
|
70
|
+
// As documented in docs/research/rtk-init-delegation.md and phase0-linux-verification.md
|
|
71
|
+
const message = `${run.message}: ${summary}`;
|
|
72
|
+
// Note: rtk init always creates ~/.local/share/rtk/history.db (command history database)
|
|
73
|
+
// This is a side effect that users should be aware of
|
|
74
|
+
return message;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=rtk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rtk.js","sourceRoot":"","sources":["../../src/toolchain/rtk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wizard helpers: pure config assembly + diff presentation.
|
|
3
|
+
* Kept free of inquirer/CLI so the logic is unit-testable.
|
|
4
|
+
*/
|
|
5
|
+
import type { AgentKey, AgentenvConfig, ConfigDiffEntry, CustomTool } from '../config/schema.js';
|
|
6
|
+
export declare const AGENT_OPTIONS: Array<{
|
|
7
|
+
value: AgentKey;
|
|
8
|
+
label: string;
|
|
9
|
+
}>;
|
|
10
|
+
export declare const TIER_1_TOOLS: readonly ["ripgrep", "fd", "jq", "rtk"];
|
|
11
|
+
export declare const TIER_2_TOOLS: readonly ["ast_grep", "git_delta", "gh", "difftastic"];
|
|
12
|
+
export declare function simpleToolSelection(includeTier2: boolean): string[];
|
|
13
|
+
export interface WizardSelections {
|
|
14
|
+
agents: AgentKey[];
|
|
15
|
+
tools: string[];
|
|
16
|
+
customTools: CustomTool[];
|
|
17
|
+
scope: 'project' | 'user';
|
|
18
|
+
rtkEnabled: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** Assemble a full AgentenvConfig from picker selections. */
|
|
21
|
+
export declare function buildConfigFromSelections(sel: WizardSelections): AgentenvConfig;
|
|
22
|
+
/** Render a ConfigDiffEntry[] as human-readable review lines. */
|
|
23
|
+
export declare function formatDiffLines(diff: ConfigDiffEntry[]): string[];
|
|
24
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/wizard/build.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjG,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKnE,CAAC;AAEF,eAAO,MAAM,YAAY,yCAA0C,CAAC;AACpE,eAAO,MAAM,YAAY,wDAAyD,CAAC;AAEnF,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,EAAE,CAEnE;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,6DAA6D;AAC7D,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,gBAAgB,GAAG,cAAc,CA4B/E;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CASjE"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wizard helpers: pure config assembly + diff presentation.
|
|
3
|
+
* Kept free of inquirer/CLI so the logic is unit-testable.
|
|
4
|
+
*/
|
|
5
|
+
import { TOOL_KEYS } from '../config/schema.js';
|
|
6
|
+
export const AGENT_OPTIONS = [
|
|
7
|
+
{ value: 'claude_code', label: 'Claude Code' },
|
|
8
|
+
{ value: 'codex_cli', label: 'Codex CLI' },
|
|
9
|
+
{ value: 'copilot', label: 'GitHub Copilot' },
|
|
10
|
+
{ value: 'opencode', label: 'OpenCode' },
|
|
11
|
+
];
|
|
12
|
+
export const TIER_1_TOOLS = ['ripgrep', 'fd', 'jq', 'rtk'];
|
|
13
|
+
export const TIER_2_TOOLS = ['ast_grep', 'git_delta', 'gh', 'difftastic'];
|
|
14
|
+
export function simpleToolSelection(includeTier2) {
|
|
15
|
+
return includeTier2 ? [...TIER_1_TOOLS, ...TIER_2_TOOLS] : [...TIER_1_TOOLS];
|
|
16
|
+
}
|
|
17
|
+
/** Assemble a full AgentenvConfig from picker selections. */
|
|
18
|
+
export function buildConfigFromSelections(sel) {
|
|
19
|
+
const agents = {
|
|
20
|
+
claude_code: false,
|
|
21
|
+
codex_cli: false,
|
|
22
|
+
copilot: false,
|
|
23
|
+
opencode: false,
|
|
24
|
+
};
|
|
25
|
+
for (const agent of sel.agents)
|
|
26
|
+
agents[agent] = true;
|
|
27
|
+
const tools = {};
|
|
28
|
+
for (const key of TOOL_KEYS)
|
|
29
|
+
tools[key] = sel.tools.includes(key);
|
|
30
|
+
return {
|
|
31
|
+
scope: sel.scope,
|
|
32
|
+
agents,
|
|
33
|
+
tools,
|
|
34
|
+
custom_tools: sel.customTools.length > 0 ? sel.customTools : undefined,
|
|
35
|
+
rtk: {
|
|
36
|
+
enabled: sel.rtkEnabled,
|
|
37
|
+
init: { claude_code: true, codex_cli: true, copilot: true, opencode: true },
|
|
38
|
+
},
|
|
39
|
+
tier0: { check_enabled: true },
|
|
40
|
+
generate: {
|
|
41
|
+
marker_start: '<!-- agentenv-managed-start -->',
|
|
42
|
+
marker_end: '<!-- agentenv-managed-end -->',
|
|
43
|
+
files: ['AGENTS.md', 'CLAUDE.md'],
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Render a ConfigDiffEntry[] as human-readable review lines. */
|
|
48
|
+
export function formatDiffLines(diff) {
|
|
49
|
+
return diff.map((entry) => {
|
|
50
|
+
const action = entry.kind === 'added' ? 'add' : entry.kind === 'removed' ? 'remove' : 'change';
|
|
51
|
+
const detail = entry.kind === 'changed'
|
|
52
|
+
? `: ${formatValue(entry.oldValue)} -> ${formatValue(entry.newValue)}`
|
|
53
|
+
: '';
|
|
54
|
+
return `${action.padEnd(7)} ${entry.key}${detail}`;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function formatValue(value) {
|
|
58
|
+
if (value === undefined)
|
|
59
|
+
return 'unset';
|
|
60
|
+
if (typeof value === 'boolean' || typeof value === 'string')
|
|
61
|
+
return String(value);
|
|
62
|
+
return JSON.stringify(value);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/wizard/build.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@indy2kro/agentenv",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI for configuring a consistent, capable shell environment for AI coding agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"agentenv": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"!dist/**/*.test.*",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public"
|
|
19
|
+
},
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/indy2kro/agentenv.git"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc",
|
|
26
|
+
"prepublishOnly": "npm run build",
|
|
27
|
+
"start": "ts-node src/index.ts",
|
|
28
|
+
"dev": "ts-node-dev src/index.ts",
|
|
29
|
+
"test": "npm run build && node dist/config/schema.test.js && node dist/config/scopes.test.js && node dist/generate/agentsmd.test.js && node dist/adapters/claude.test.js && node dist/adapters/adapters.test.js && node dist/adapters/detect.test.js && node dist/shell/detector.test.js && node dist/toolchain/mise.test.js && node dist/toolchain/gh.test.js && node dist/integrations/superpowers.test.js && node dist/toolchain/fallbacks.test.js && node dist/wizard/build.test.js && node dist/commands/apply.test.js",
|
|
30
|
+
"smoke": "npm run build && node scripts/smoke.mjs",
|
|
31
|
+
"smoke:real": "npm run build && node scripts/smoke.mjs --real",
|
|
32
|
+
"lint": "eslint src --max-warnings 0",
|
|
33
|
+
"lint:fix": "eslint src --fix",
|
|
34
|
+
"format": "prettier --write src",
|
|
35
|
+
"format:check": "prettier --check src",
|
|
36
|
+
"prepare": "cd ../.. && husky"
|
|
37
|
+
},
|
|
38
|
+
"keywords": [
|
|
39
|
+
"ai",
|
|
40
|
+
"coding",
|
|
41
|
+
"agents",
|
|
42
|
+
"claude",
|
|
43
|
+
"copilot",
|
|
44
|
+
"codex",
|
|
45
|
+
"opencode",
|
|
46
|
+
"environment",
|
|
47
|
+
"mise",
|
|
48
|
+
"rtk"
|
|
49
|
+
],
|
|
50
|
+
"author": "Cristian Radu <indy2kro@gmail.com>",
|
|
51
|
+
"license": "MIT",
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@inquirer/prompts": "^8.7.2",
|
|
54
|
+
"commander": "^15.0.0",
|
|
55
|
+
"toml": "^5.0.0"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@eslint/js": "^10.0.1",
|
|
59
|
+
"@types/node": "^20.0.0",
|
|
60
|
+
"eslint": "^10.10.0",
|
|
61
|
+
"eslint-config-prettier": "^10.1.8",
|
|
62
|
+
"globals": "^17.12.0",
|
|
63
|
+
"husky": "^9.1.7",
|
|
64
|
+
"lint-staged": "^17.5.1",
|
|
65
|
+
"prettier": "^3.9.6",
|
|
66
|
+
"ts-node": "^10.9.0",
|
|
67
|
+
"ts-node-dev": "^2.0.0",
|
|
68
|
+
"typescript": "^5.0.0",
|
|
69
|
+
"typescript-eslint": "^8.70.0"
|
|
70
|
+
},
|
|
71
|
+
"engines": {
|
|
72
|
+
"node": ">=22.13.0"
|
|
73
|
+
},
|
|
74
|
+
"lint-staged": {
|
|
75
|
+
"*.ts": [
|
|
76
|
+
"eslint --fix --max-warnings 0",
|
|
77
|
+
"prettier --write"
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
}
|