@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.
Files changed (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +320 -0
  3. package/dist/adapters/base.d.ts +58 -0
  4. package/dist/adapters/base.d.ts.map +1 -0
  5. package/dist/adapters/base.js +16 -0
  6. package/dist/adapters/base.js.map +1 -0
  7. package/dist/adapters/claude.d.ts +21 -0
  8. package/dist/adapters/claude.d.ts.map +1 -0
  9. package/dist/adapters/claude.js +198 -0
  10. package/dist/adapters/claude.js.map +1 -0
  11. package/dist/adapters/codex.d.ts +23 -0
  12. package/dist/adapters/codex.d.ts.map +1 -0
  13. package/dist/adapters/codex.js +134 -0
  14. package/dist/adapters/codex.js.map +1 -0
  15. package/dist/adapters/copilot.d.ts +21 -0
  16. package/dist/adapters/copilot.d.ts.map +1 -0
  17. package/dist/adapters/copilot.js +111 -0
  18. package/dist/adapters/copilot.js.map +1 -0
  19. package/dist/adapters/detect.d.ts +23 -0
  20. package/dist/adapters/detect.d.ts.map +1 -0
  21. package/dist/adapters/detect.js +80 -0
  22. package/dist/adapters/detect.js.map +1 -0
  23. package/dist/adapters/index.d.ts +12 -0
  24. package/dist/adapters/index.d.ts.map +1 -0
  25. package/dist/adapters/index.js +11 -0
  26. package/dist/adapters/index.js.map +1 -0
  27. package/dist/adapters/opencode.d.ts +19 -0
  28. package/dist/adapters/opencode.d.ts.map +1 -0
  29. package/dist/adapters/opencode.js +107 -0
  30. package/dist/adapters/opencode.js.map +1 -0
  31. package/dist/commands/apply.d.ts +21 -0
  32. package/dist/commands/apply.d.ts.map +1 -0
  33. package/dist/commands/apply.js +113 -0
  34. package/dist/commands/apply.js.map +1 -0
  35. package/dist/commands/configure.d.ts +13 -0
  36. package/dist/commands/configure.d.ts.map +1 -0
  37. package/dist/commands/configure.js +151 -0
  38. package/dist/commands/configure.js.map +1 -0
  39. package/dist/commands/setup.d.ts +11 -0
  40. package/dist/commands/setup.d.ts.map +1 -0
  41. package/dist/commands/setup.js +78 -0
  42. package/dist/commands/setup.js.map +1 -0
  43. package/dist/commands/status.d.ts +3 -0
  44. package/dist/commands/status.d.ts.map +1 -0
  45. package/dist/commands/status.js +152 -0
  46. package/dist/commands/status.js.map +1 -0
  47. package/dist/config/schema.d.ts +142 -0
  48. package/dist/config/schema.d.ts.map +1 -0
  49. package/dist/config/schema.js +778 -0
  50. package/dist/config/schema.js.map +1 -0
  51. package/dist/config/scopes.d.ts +14 -0
  52. package/dist/config/scopes.d.ts.map +1 -0
  53. package/dist/config/scopes.js +32 -0
  54. package/dist/config/scopes.js.map +1 -0
  55. package/dist/generate/agentsmd.d.ts +44 -0
  56. package/dist/generate/agentsmd.d.ts.map +1 -0
  57. package/dist/generate/agentsmd.js +340 -0
  58. package/dist/generate/agentsmd.js.map +1 -0
  59. package/dist/index.d.ts +7 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +24 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/integrations/base.d.ts +33 -0
  64. package/dist/integrations/base.d.ts.map +1 -0
  65. package/dist/integrations/base.js +9 -0
  66. package/dist/integrations/base.js.map +1 -0
  67. package/dist/integrations/index.d.ts +7 -0
  68. package/dist/integrations/index.d.ts.map +1 -0
  69. package/dist/integrations/index.js +5 -0
  70. package/dist/integrations/index.js.map +1 -0
  71. package/dist/integrations/superpowers.d.ts +48 -0
  72. package/dist/integrations/superpowers.d.ts.map +1 -0
  73. package/dist/integrations/superpowers.js +191 -0
  74. package/dist/integrations/superpowers.js.map +1 -0
  75. package/dist/shell/detector.d.ts +92 -0
  76. package/dist/shell/detector.d.ts.map +1 -0
  77. package/dist/shell/detector.js +714 -0
  78. package/dist/shell/detector.js.map +1 -0
  79. package/dist/toolchain/fallbacks.d.ts +77 -0
  80. package/dist/toolchain/fallbacks.d.ts.map +1 -0
  81. package/dist/toolchain/fallbacks.js +238 -0
  82. package/dist/toolchain/fallbacks.js.map +1 -0
  83. package/dist/toolchain/gh.d.ts +20 -0
  84. package/dist/toolchain/gh.d.ts.map +1 -0
  85. package/dist/toolchain/gh.js +36 -0
  86. package/dist/toolchain/gh.js.map +1 -0
  87. package/dist/toolchain/mise.d.ts +92 -0
  88. package/dist/toolchain/mise.d.ts.map +1 -0
  89. package/dist/toolchain/mise.js +346 -0
  90. package/dist/toolchain/mise.js.map +1 -0
  91. package/dist/toolchain/rtk.d.ts +27 -0
  92. package/dist/toolchain/rtk.d.ts.map +1 -0
  93. package/dist/toolchain/rtk.js +76 -0
  94. package/dist/toolchain/rtk.js.map +1 -0
  95. package/dist/wizard/build.d.ts +24 -0
  96. package/dist/wizard/build.d.ts.map +1 -0
  97. package/dist/wizard/build.js +64 -0
  98. package/dist/wizard/build.js.map +1 -0
  99. package/package.json +80 -0
@@ -0,0 +1,113 @@
1
+ import { Command } from 'commander';
2
+ import * as path from 'path';
3
+ import { ClaudeCodeAdapter, CodexCliAdapter, CopilotAdapter, OpenCodeAdapter, } from '../adapters/index.js';
4
+ import { getEnabledAgents, loadConfig, validateConfig } from '../config/schema.js';
5
+ import { resolveScopeDir } from '../config/scopes.js';
6
+ import { generateInstructionFiles, updateWithMarkers } from '../generate/agentsmd.js';
7
+ import { fixShellConfiguration } from '../shell/detector.js';
8
+ import { ensureMiseInstalled, generateMiseToml, runMiseInstall, saveMiseToml, } from '../toolchain/mise.js';
9
+ function adaptersFor(config, baseDir, options) {
10
+ const adapterConfig = {
11
+ enabled: true,
12
+ baseDir,
13
+ rtkEnabled: config.rtk?.enabled === true,
14
+ rtkInit: options.rtkInit,
15
+ };
16
+ const adapters = [];
17
+ if (config.agents?.claude_code)
18
+ adapters.push(new ClaudeCodeAdapter(adapterConfig));
19
+ if (config.agents?.codex_cli)
20
+ adapters.push(new CodexCliAdapter(adapterConfig));
21
+ if (config.agents?.copilot)
22
+ adapters.push(new CopilotAdapter(adapterConfig));
23
+ if (config.agents?.opencode)
24
+ adapters.push(new OpenCodeAdapter(adapterConfig));
25
+ return adapters;
26
+ }
27
+ /** Apply a validated configuration and return structured results for the CLI. */
28
+ export async function applyConfiguration(config, baseDir, options = {}) {
29
+ const messages = [];
30
+ const errors = [];
31
+ if (config.tier0?.check_enabled !== false) {
32
+ const enabledAgents = getEnabledAgents(config);
33
+ const tier0 = fixShellConfiguration(baseDir, enabledAgents);
34
+ (tier0.success ? messages : errors).push(`Tier 0: ${tier0.message}`);
35
+ if (tier0.success && tier0.results) {
36
+ for (const result of tier0.results) {
37
+ (result.action === 'skipped' ? messages : messages).push(` ${result.agent}: ${result.message}`);
38
+ }
39
+ }
40
+ }
41
+ const misePath = path.join(baseDir, 'mise.toml');
42
+ try {
43
+ saveMiseToml(generateMiseToml(config, config.custom_tools ?? []), misePath);
44
+ messages.push(`Generated ${misePath}`);
45
+ }
46
+ catch (error) {
47
+ errors.push(`Unable to write ${misePath}: ${error instanceof Error ? error.message : String(error)}`);
48
+ }
49
+ if (errors.length === 0 && !options.skipMiseInstall) {
50
+ const mise = ensureMiseInstalled();
51
+ if (!mise.success) {
52
+ errors.push(mise.message);
53
+ }
54
+ else {
55
+ const install = await runMiseInstall(misePath, baseDir);
56
+ if (install.success) {
57
+ messages.push('mise install completed');
58
+ }
59
+ else {
60
+ errors.push(`mise install failed${install.exitCode === null ? '' : ` (exit ${install.exitCode})`}: ${install.stderr || install.stdout}`);
61
+ }
62
+ }
63
+ }
64
+ const markerStart = config.generate?.marker_start ?? '<!-- agentenv-managed-start -->';
65
+ const markerEnd = config.generate?.marker_end ?? '<!-- agentenv-managed-end -->';
66
+ for (const file of generateInstructionFiles(config, baseDir)) {
67
+ const update = updateWithMarkers(file.path, file.content, markerStart, markerEnd);
68
+ (update.success ? messages : errors).push(update.message);
69
+ }
70
+ for (const adapter of adaptersFor(config, baseDir, options)) {
71
+ const result = await adapter.initialize();
72
+ if (result.success)
73
+ messages.push(`${adapter.getName()}: ${result.message}`);
74
+ else
75
+ errors.push(`${adapter.getName()}: ${result.errors.join('; ') || result.message}`);
76
+ }
77
+ return { success: errors.length === 0, messages, errors };
78
+ }
79
+ export const applyCommand = new Command()
80
+ .name('apply')
81
+ .description('Non-interactive: read config and generate everything')
82
+ .option('--skip-mise-install', 'skip mise install (files only; for CI/dry-run)')
83
+ .action(async (options) => {
84
+ let config;
85
+ try {
86
+ config = loadConfig();
87
+ }
88
+ catch (error) {
89
+ console.error(error instanceof Error ? error.message : String(error));
90
+ process.exitCode = 1;
91
+ return;
92
+ }
93
+ const report = validateConfig(config);
94
+ for (const warning of report.warnings)
95
+ console.log(`warning: ${warning}`);
96
+ if (report.errors.length > 0) {
97
+ for (const error of report.errors)
98
+ console.error(`error: ${error}`);
99
+ process.exitCode = 1;
100
+ return;
101
+ }
102
+ const baseDir = resolveScopeDir(config.scope);
103
+ const result = await applyConfiguration(config, baseDir, {
104
+ skipMiseInstall: options.skipMiseInstall === true,
105
+ });
106
+ for (const message of result.messages)
107
+ console.log(message);
108
+ for (const error of result.errors)
109
+ console.error(error);
110
+ if (!result.success)
111
+ process.exitCode = 1;
112
+ });
113
+ //# sourceMappingURL=apply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Configure command - Advanced mode wizard
4
+ * Performs step-by-step configuration:
5
+ * 1. Select agents (pre-checked = enabled or detected)
6
+ * 2. Select tools (full Tier 1-3 picker, pre-checked = enabled)
7
+ * 3. Add custom binaries
8
+ * 4. Choose scope (project vs user)
9
+ * 5. Choose rtk enable/disable
10
+ * 6. Diff review screen, then apply
11
+ */
12
+ export declare const configureCommand: Command;
13
+ //# sourceMappingURL=configure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../src/commands/configure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,SA8IzB,CAAC"}
@@ -0,0 +1,151 @@
1
+ import { Command } from 'commander';
2
+ import { checkbox, confirm, input, select } from '@inquirer/prompts';
3
+ import { detectInstalledAgents } from '../adapters/detect.js';
4
+ import { BINARY_MAP, DEFAULT_CONFIG, TOOL_DESCRIPTIONS, TOOL_KEYS, TOOL_TIERS, diffConfigs, loadConfig, saveConfig, } from '../config/schema.js';
5
+ import { configFilePath, resolveScopeDir } from '../config/scopes.js';
6
+ import { applyConfiguration } from './apply.js';
7
+ import { AGENT_OPTIONS, buildConfigFromSelections, formatDiffLines } from '../wizard/build.js';
8
+ /**
9
+ * Configure command - Advanced mode wizard
10
+ * Performs step-by-step configuration:
11
+ * 1. Select agents (pre-checked = enabled or detected)
12
+ * 2. Select tools (full Tier 1-3 picker, pre-checked = enabled)
13
+ * 3. Add custom binaries
14
+ * 4. Choose scope (project vs user)
15
+ * 5. Choose rtk enable/disable
16
+ * 6. Diff review screen, then apply
17
+ */
18
+ export const configureCommand = new Command()
19
+ .name('configure')
20
+ .description('Re-run configuration wizard (Advanced mode)')
21
+ .action(async () => {
22
+ console.log('\n=== agentenv Configure (Advanced Mode) ===\n');
23
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
24
+ console.error('Configure is interactive; in a non-TTY run `agentenv apply` instead.');
25
+ process.exitCode = 1;
26
+ return;
27
+ }
28
+ let existing;
29
+ try {
30
+ existing = loadConfig();
31
+ }
32
+ catch {
33
+ existing = DEFAULT_CONFIG;
34
+ }
35
+ const detected = detectInstalledAgents();
36
+ // Step 1: Select agents
37
+ console.log('Step 1/6: Select agents to configure');
38
+ const agents = (await checkbox({
39
+ message: 'Select agents:',
40
+ choices: AGENT_OPTIONS.map((agent) => ({
41
+ name: agent.label,
42
+ value: agent.value,
43
+ checked: existing.agents?.[agent.value] === true || detected.includes(agent.value),
44
+ })),
45
+ }));
46
+ // Step 2: Select tools
47
+ console.log('\nStep 2/6: Select tools to install');
48
+ const tools = (await checkbox({
49
+ message: 'Select tools (Tiers 1-3):',
50
+ choices: TOOL_KEYS.map((key) => ({
51
+ name: `${BINARY_MAP[key]} — ${TOOL_DESCRIPTIONS[key]} [Tier ${TOOL_TIERS[key]}]`,
52
+ value: key,
53
+ checked: existing.tools?.[key] === true,
54
+ })),
55
+ }));
56
+ // Step 3: Add custom binaries
57
+ console.log('\nStep 3/6: Add custom binaries');
58
+ const customTools = [];
59
+ let addCustom = await confirm({ message: 'Add a custom binary?', default: false });
60
+ while (addCustom) {
61
+ const name = await input({ message: 'Tool name (e.g. "my-tool"):' });
62
+ const description = await input({ message: 'Description (optional):', default: '' });
63
+ const alreadyInstalled = await confirm({ message: 'Already installed?', default: true });
64
+ if (alreadyInstalled) {
65
+ const pathWindows = await input({
66
+ message: 'Windows path (e.g. C:\\tools\\my-tool.exe):',
67
+ default: '',
68
+ });
69
+ const pathMacOS = await input({
70
+ message: 'macOS path (e.g. /usr/local/bin/my-tool):',
71
+ default: '',
72
+ });
73
+ const pathLinux = await input({
74
+ message: 'Linux path (e.g. /usr/bin/my-tool):',
75
+ default: '',
76
+ });
77
+ customTools.push({
78
+ name,
79
+ description,
80
+ already_installed: true,
81
+ path_windows: pathWindows,
82
+ path_macos: pathMacOS,
83
+ path_linux: pathLinux,
84
+ });
85
+ }
86
+ else {
87
+ const miseSource = await input({ message: 'mise source (e.g. github:owner/repo):' });
88
+ const version = await input({ message: 'Version (default: latest):', default: 'latest' });
89
+ customTools.push({
90
+ name,
91
+ description,
92
+ already_installed: false,
93
+ mise_source: miseSource,
94
+ version,
95
+ });
96
+ }
97
+ addCustom = await confirm({ message: 'Add another custom binary?', default: false });
98
+ }
99
+ // Step 4: Choose scope
100
+ console.log('\nStep 4/6: Choose configuration scope');
101
+ const scope = (await select({
102
+ message: 'Scope:',
103
+ choices: [
104
+ { name: `Project-level (this repo: ${process.cwd()})`, value: 'project' },
105
+ { name: 'User/global-level', value: 'user' },
106
+ ],
107
+ }));
108
+ // Step 5: Enable rtk
109
+ console.log('\nStep 5/6: Token optimization');
110
+ const rtkEnabled = await confirm({
111
+ message: 'Enable rtk command rewriting?',
112
+ default: existing.rtk?.enabled !== false,
113
+ });
114
+ // Step 6: Review
115
+ console.log('\nStep 6/6: Review changes');
116
+ const config = buildConfigFromSelections({ agents, tools, customTools, scope, rtkEnabled });
117
+ const diff = diffConfigs(existing, config);
118
+ console.log('\nConfiguration summary:');
119
+ console.log(` Agents: ${agents.length > 0 ? agents.join(', ') : '(none)'}`);
120
+ console.log(` Tools: ${tools.length > 0 ? tools.join(', ') : '(none)'}`);
121
+ console.log(` Custom tools: ${customTools.length}`);
122
+ console.log(` Scope: ${scope}`);
123
+ console.log(` rtk enabled: ${rtkEnabled}`);
124
+ if (diff.length === 0) {
125
+ console.log('\nNo changes from the current configuration.');
126
+ }
127
+ else {
128
+ console.log('\nChanges vs. current configuration:');
129
+ for (const line of formatDiffLines(diff))
130
+ console.log(` ${line}`);
131
+ }
132
+ const proceed = await confirm({ message: 'Apply this configuration?', default: true });
133
+ if (!proceed) {
134
+ console.log('\nCancelled. No changes made.\n');
135
+ return;
136
+ }
137
+ const file = configFilePath(scope);
138
+ saveConfig(config, file);
139
+ console.log(`\nSaved configuration: ${file}`);
140
+ const result = await applyConfiguration(config, resolveScopeDir(scope));
141
+ for (const message of result.messages)
142
+ console.log(message);
143
+ for (const error of result.errors)
144
+ console.error(error);
145
+ if (!result.success) {
146
+ process.exitCode = 1;
147
+ return;
148
+ }
149
+ console.log('\nConfiguration applied successfully!\n');
150
+ });
151
+ //# sourceMappingURL=configure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/commands/configure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Setup command - Interactive Simple mode wizard
4
+ * Performs:
5
+ * - Auto-detect installed agents
6
+ * - Install Tier 1 (and Tier 2 unless declined)
7
+ * - Wire hooks for the selected agents
8
+ * - Apply everything (incl. Tier 0 shell fix)
9
+ */
10
+ export declare const setupCommand: Command;
11
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,SAoErB,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { Command } from 'commander';
2
+ import { checkbox, confirm, select } from '@inquirer/prompts';
3
+ import { detectInstalledAgents } from '../adapters/detect.js';
4
+ import { saveConfig } from '../config/schema.js';
5
+ import { configFilePath, resolveScopeDir } from '../config/scopes.js';
6
+ import { applyConfiguration } from './apply.js';
7
+ import { AGENT_OPTIONS, buildConfigFromSelections, simpleToolSelection } from '../wizard/build.js';
8
+ function agentLabel(agent) {
9
+ return AGENT_OPTIONS.find((option) => option.value === agent)?.label ?? agent;
10
+ }
11
+ /**
12
+ * Setup command - Interactive Simple mode wizard
13
+ * Performs:
14
+ * - Auto-detect installed agents
15
+ * - Install Tier 1 (and Tier 2 unless declined)
16
+ * - Wire hooks for the selected agents
17
+ * - Apply everything (incl. Tier 0 shell fix)
18
+ */
19
+ export const setupCommand = new Command()
20
+ .name('setup')
21
+ .description('Interactive setup wizard (Simple mode)')
22
+ .action(async () => {
23
+ console.log('\n=== agentenv Setup (Simple Mode) ===\n');
24
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
25
+ console.error('Setup is interactive; in a non-TTY run `agentenv apply` instead.');
26
+ process.exitCode = 1;
27
+ return;
28
+ }
29
+ const detected = detectInstalledAgents();
30
+ console.log(detected.length > 0
31
+ ? `Detected agents: ${detected.map(agentLabel).join(', ')}`
32
+ : 'No agents detected on PATH (you can still select agents to configure)');
33
+ const selectedAgents = (await checkbox({
34
+ message: 'Select agents to configure:',
35
+ choices: AGENT_OPTIONS.map((agent) => ({
36
+ name: agent.label,
37
+ value: agent.value,
38
+ checked: detected.includes(agent.value),
39
+ })),
40
+ }));
41
+ if (selectedAgents.length === 0) {
42
+ console.log('No agents selected; nothing to configure.');
43
+ process.exitCode = 1;
44
+ return;
45
+ }
46
+ const installTier2 = await confirm({
47
+ message: 'Install Tier 2 tools (AI-coding value-add: ast-grep, git-delta, gh, difftastic)?',
48
+ default: true,
49
+ });
50
+ const scope = (await select({
51
+ message: 'Where should the configuration live?',
52
+ choices: [
53
+ { name: `Project-level (this repo: ${process.cwd()})`, value: 'project' },
54
+ { name: 'User/global-level', value: 'user' },
55
+ ],
56
+ }));
57
+ const config = buildConfigFromSelections({
58
+ agents: selectedAgents,
59
+ tools: simpleToolSelection(installTier2),
60
+ customTools: [],
61
+ scope,
62
+ rtkEnabled: true,
63
+ });
64
+ const file = configFilePath(scope);
65
+ saveConfig(config, file);
66
+ console.log(`Saved configuration: ${file}\n`);
67
+ const result = await applyConfiguration(config, resolveScopeDir(scope));
68
+ for (const message of result.messages)
69
+ console.log(message);
70
+ for (const error of result.errors)
71
+ console.error(error);
72
+ if (!result.success) {
73
+ process.exitCode = 1;
74
+ return;
75
+ }
76
+ console.log('\nSetup complete!\n');
77
+ });
78
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const statusCommand: Command;
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgEpC,eAAO,MAAM,aAAa,SA+GtB,CAAC"}
@@ -0,0 +1,152 @@
1
+ import { Command } from 'commander';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { isAgentInstalled, resolveBinary } from '../adapters/detect.js';
5
+ import { BINARY_MAP, TOOL_DESCRIPTIONS, TOOL_KEYS, TOOL_TIERS, getEnabledAgents, loadConfig, validateConfig, } from '../config/schema.js';
6
+ import { findConfigPath, resolveScopeDir } from '../config/scopes.js';
7
+ import { detectShell } from '../shell/detector.js';
8
+ const AGENT_CONFIG_FILES = {
9
+ claude_code: {
10
+ label: 'Claude Code',
11
+ check: () => path.join(homeDir(), '.claude', 'settings.json'),
12
+ },
13
+ // These are written by `rtk init` in the project dir / global plugin dir.
14
+ codex_cli: { label: 'Codex CLI', check: (baseDir) => path.join(baseDir, 'RTK.md') },
15
+ copilot: {
16
+ label: 'GitHub Copilot',
17
+ check: (baseDir) => path.join(baseDir, '.github', 'copilot-instructions.md'),
18
+ },
19
+ opencode: {
20
+ label: 'OpenCode',
21
+ check: () => path.join(homeDir(), '.config', 'opencode', 'plugins', 'rtk.ts'),
22
+ },
23
+ };
24
+ function homeDir() {
25
+ return process.env.HOME || process.env.USERPROFILE || '';
26
+ }
27
+ function containsManagedMarker(file, config) {
28
+ try {
29
+ const content = fs.readFileSync(file, 'utf-8');
30
+ const marker = config.generate?.marker_start ?? '<!-- agentenv-managed-start -->';
31
+ return content.includes(marker);
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ function customToolStatus(tool) {
38
+ if (tool.already_installed) {
39
+ const candidate = pathForPlatform(tool);
40
+ if (candidate && fs.existsSync(candidate))
41
+ return `present (${candidate})`;
42
+ return 'MISSING on disk';
43
+ }
44
+ return `mise source: ${tool.mise_source}${tool.version ? ` (${tool.version})` : ''}`;
45
+ }
46
+ function pathForPlatform(tool) {
47
+ if (process.platform === 'win32')
48
+ return tool.path_windows;
49
+ if (process.platform === 'darwin')
50
+ return tool.path_macos;
51
+ return tool.path_linux;
52
+ }
53
+ export const statusCommand = new Command()
54
+ .name('status')
55
+ .description('Show current configuration and environment status')
56
+ .action(() => {
57
+ console.log('\n=== agentenv status ===\n');
58
+ const configPath = findConfigPath();
59
+ if (!configPath) {
60
+ console.log('No agentenv.toml found (project or user scope).');
61
+ console.log(' Run `agentenv setup` or `agentenv configure` to create one.\n');
62
+ process.exitCode = 1;
63
+ return;
64
+ }
65
+ let config;
66
+ try {
67
+ config = loadConfig();
68
+ }
69
+ catch (error) {
70
+ console.error(error instanceof Error ? error.message : String(error));
71
+ process.exitCode = 1;
72
+ return;
73
+ }
74
+ const baseDir = resolveScopeDir(config.scope);
75
+ console.log(`Config: ${configPath}`);
76
+ console.log(`Scope: ${config.scope ?? 'project'}`);
77
+ console.log(`Base directory: ${baseDir}`);
78
+ const report = validateConfig(config);
79
+ console.log(`Validation: ${report.errors.length === 0 ? 'valid' : `${report.errors.length} error(s)`}${report.warnings.length > 0 ? `, ${report.warnings.length} warning(s)` : ''}`);
80
+ for (const warning of report.warnings)
81
+ console.log(` warning: ${warning}`);
82
+ console.log(`RTK command rewriting: ${config.rtk?.enabled ? 'enabled' : 'disabled'}`);
83
+ // Tier 0 shell status
84
+ const shell = detectShell();
85
+ console.log('\nTier 0 (shell):');
86
+ if (shell.isWindows) {
87
+ console.log(` Windows, POSIX-compatible: ${shell.isPosixCompatible ? 'yes' : 'NO'}`);
88
+ if (shell.gitBashPath)
89
+ console.log(` Git Bash: ${shell.gitBashPath}`);
90
+ if (!shell.isPosixCompatible)
91
+ console.log(' Fix: run `agentenv apply` (Tier 0 shell fix)');
92
+ }
93
+ else {
94
+ console.log(` ${shell.isPosixCompatible ? 'POSIX-compatible' : 'non-POSIX'} (not Windows; Tier 0 N/A)`);
95
+ const missing = shell.missingUtilities;
96
+ if (missing.length > 0)
97
+ console.log(` Missing utilities: ${missing.join(', ')}`);
98
+ }
99
+ // Agents
100
+ const enabledAgents = getEnabledAgents(config);
101
+ console.log('\nAgents:');
102
+ if (enabledAgents.length === 0) {
103
+ console.log(' (none enabled)');
104
+ }
105
+ for (const agent of enabledAgents) {
106
+ const meta = AGENT_CONFIG_FILES[agent];
107
+ const installed = isAgentInstalled(agent);
108
+ const configured = fs.existsSync(meta.check(baseDir));
109
+ const drift = installed && !configured;
110
+ console.log(` ${meta.label.padEnd(16)} installed: ${installed ? 'yes' : 'no'} ` +
111
+ `configured: ${configured ? 'yes' : 'no'}${drift ? ' <- drift: installed but not configured' : ''}`);
112
+ }
113
+ // Tools
114
+ const enabledTools = TOOL_KEYS.filter((key) => config.tools?.[key] === true);
115
+ console.log('\nTools:');
116
+ for (const key of enabledTools) {
117
+ const binary = BINARY_MAP[key];
118
+ const found = resolveBinary(binary) !== null;
119
+ const tier = TOOL_TIERS[key] ?? '?';
120
+ const desc = TOOL_DESCRIPTIONS[key] ?? '';
121
+ console.log(` ${found ? '✓' : '✗'} ${binary.padEnd(12)} ${key} (Tier ${tier})${found ? '' : ' <- drift: enabled in config but not on PATH'} — ${desc}`);
122
+ }
123
+ if (enabledTools.length === 0)
124
+ console.log(' (none enabled)');
125
+ // Custom tools
126
+ const customTools = config.custom_tools ?? [];
127
+ console.log('\nCustom tools:');
128
+ if (customTools.length === 0) {
129
+ console.log(' (none)');
130
+ }
131
+ for (const tool of customTools) {
132
+ console.log(` ${tool.name}: ${customToolStatus(tool)}`);
133
+ }
134
+ // Generated files
135
+ console.log('\nGenerated files:');
136
+ const generated = [
137
+ ['mise.toml', path.join(baseDir, 'mise.toml'), false],
138
+ ['AGENTS.md', path.join(baseDir, 'AGENTS.md'), true],
139
+ ['CLAUDE.md', path.join(baseDir, 'CLAUDE.md'), true],
140
+ ];
141
+ for (const [label, file, markerCheck] of generated) {
142
+ const exists = fs.existsSync(file);
143
+ if (!exists) {
144
+ console.log(` ✗ ${label} (missing)`);
145
+ continue;
146
+ }
147
+ const managed = markerCheck ? containsManagedMarker(file, config) : true;
148
+ console.log(` ✓ ${label}${managed ? '' : ' (managed marker block missing)'}`);
149
+ }
150
+ console.log('\n=== Status complete ===\n');
151
+ });
152
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}