@indy2kro/agentenv 1.0.0 → 1.0.2
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/dist/adapters/agent-dirs.d.ts +29 -0
- package/dist/adapters/agent-dirs.d.ts.map +1 -0
- package/dist/adapters/agent-dirs.js +46 -0
- package/dist/adapters/agent-dirs.js.map +1 -0
- package/dist/adapters/base.d.ts +7 -1
- package/dist/adapters/base.d.ts.map +1 -1
- package/dist/adapters/base.js.map +1 -1
- package/dist/adapters/claude.d.ts.map +1 -1
- package/dist/adapters/claude.js +18 -10
- package/dist/adapters/claude.js.map +1 -1
- package/dist/adapters/cline.d.ts.map +1 -1
- package/dist/adapters/cline.js +2 -2
- package/dist/adapters/cline.js.map +1 -1
- package/dist/adapters/codex.d.ts.map +1 -1
- package/dist/adapters/codex.js +3 -2
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/copilot.d.ts.map +1 -1
- package/dist/adapters/copilot.js +3 -4
- package/dist/adapters/copilot.js.map +1 -1
- package/dist/adapters/cursor.d.ts.map +1 -1
- package/dist/adapters/cursor.js +7 -6
- package/dist/adapters/cursor.js.map +1 -1
- package/dist/adapters/detect.d.ts.map +1 -1
- package/dist/adapters/detect.js +1 -0
- package/dist/adapters/detect.js.map +1 -1
- package/dist/adapters/gemini.d.ts.map +1 -1
- package/dist/adapters/gemini.js +2 -2
- package/dist/adapters/gemini.js.map +1 -1
- package/dist/adapters/index.d.ts +4 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +21 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/opencode.d.ts.map +1 -1
- package/dist/adapters/opencode.js +2 -2
- package/dist/adapters/opencode.js.map +1 -1
- package/dist/adapters/rtk-delegation.d.ts.map +1 -1
- package/dist/adapters/rtk-delegation.js +16 -1
- package/dist/adapters/rtk-delegation.js.map +1 -1
- package/dist/adapters/vibe.d.ts.map +1 -1
- package/dist/adapters/vibe.js +2 -2
- package/dist/adapters/vibe.js.map +1 -1
- package/dist/adapters/windsurf.d.ts.map +1 -1
- package/dist/adapters/windsurf.js +2 -2
- package/dist/adapters/windsurf.js.map +1 -1
- package/dist/cli/exit.d.ts +17 -6
- package/dist/cli/exit.d.ts.map +1 -1
- package/dist/cli/exit.js +17 -7
- package/dist/cli/exit.js.map +1 -1
- package/dist/commands/apply.d.ts +77 -0
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +202 -27
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/config-edit.d.ts +33 -0
- package/dist/commands/config-edit.d.ts.map +1 -0
- package/dist/commands/config-edit.js +216 -0
- package/dist/commands/config-edit.js.map +1 -0
- package/dist/commands/doctor.d.ts +41 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +135 -52
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/setup.d.ts +4 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +58 -5
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +40 -16
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/uninstall.d.ts +78 -1
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +329 -31
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts +51 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +172 -71
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/wizard.d.ts +27 -1
- package/dist/commands/wizard.d.ts.map +1 -1
- package/dist/commands/wizard.js +48 -31
- package/dist/commands/wizard.js.map +1 -1
- package/dist/config/schema.d.ts +31 -3
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +224 -123
- package/dist/config/schema.js.map +1 -1
- package/dist/config/scopes.d.ts +4 -2
- package/dist/config/scopes.d.ts.map +1 -1
- package/dist/config/scopes.js +23 -4
- package/dist/config/scopes.js.map +1 -1
- package/dist/generate/agentsmd.d.ts +54 -0
- package/dist/generate/agentsmd.d.ts.map +1 -1
- package/dist/generate/agentsmd.js +225 -143
- package/dist/generate/agentsmd.js.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/render.d.ts.map +1 -1
- package/dist/integrations/render.js +25 -10
- package/dist/integrations/render.js.map +1 -1
- package/dist/integrations/superpowers.d.ts.map +1 -1
- package/dist/integrations/superpowers.js +2 -0
- package/dist/integrations/superpowers.js.map +1 -1
- package/dist/shell/detector.d.ts +22 -2
- package/dist/shell/detector.d.ts.map +1 -1
- package/dist/shell/detector.js +122 -34
- package/dist/shell/detector.js.map +1 -1
- package/dist/toolchain/gh.d.ts.map +1 -1
- package/dist/toolchain/gh.js +1 -0
- package/dist/toolchain/gh.js.map +1 -1
- package/dist/toolchain/mise.d.ts +7 -0
- package/dist/toolchain/mise.d.ts.map +1 -1
- package/dist/toolchain/mise.js +23 -3
- package/dist/toolchain/mise.js.map +1 -1
- package/dist/toolchain/rtk.d.ts +71 -3
- package/dist/toolchain/rtk.d.ts.map +1 -1
- package/dist/toolchain/rtk.js +115 -7
- package/dist/toolchain/rtk.js.map +1 -1
- package/dist/ui/output.d.ts.map +1 -1
- package/dist/ui/output.js +10 -2
- package/dist/ui/output.js.map +1 -1
- package/dist/ui/spinner.d.ts +15 -3
- package/dist/ui/spinner.d.ts.map +1 -1
- package/dist/ui/spinner.js +52 -4
- package/dist/ui/spinner.js.map +1 -1
- package/dist/ui/theme.d.ts +27 -1
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/theme.js +73 -8
- package/dist/ui/theme.js.map +1 -1
- package/dist/utils/fs-retry.d.ts +16 -0
- package/dist/utils/fs-retry.d.ts.map +1 -1
- package/dist/utils/fs-retry.js +28 -0
- package/dist/utils/fs-retry.js.map +1 -1
- package/package.json +4 -3
package/dist/index.js
CHANGED
|
@@ -11,10 +11,12 @@ import { statusCommand } from './commands/status.js';
|
|
|
11
11
|
import { updateCommand } from './commands/update.js';
|
|
12
12
|
import { doctorCommand } from './commands/doctor.js';
|
|
13
13
|
import { uninstallCommand } from './commands/uninstall.js';
|
|
14
|
+
import { addCommand, removeCommand } from './commands/config-edit.js';
|
|
14
15
|
import { completionCommand } from './commands/completion.js';
|
|
15
16
|
import { shellFixCommand } from './commands/shell-fix.js';
|
|
16
17
|
import { setColorEnabled } from './ui/theme.js';
|
|
17
18
|
import { setQuietEnabled } from './ui/output.js';
|
|
19
|
+
import { setSpinnerEnabled } from './ui/spinner.js';
|
|
18
20
|
import { installExitOverride } from './cli/exit.js';
|
|
19
21
|
const { version } = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));
|
|
20
22
|
// Create the CLI
|
|
@@ -26,14 +28,17 @@ program
|
|
|
26
28
|
.showSuggestionAfterError()
|
|
27
29
|
.option('--no-color', 'disable colored output (also honors the NO_COLOR env var)')
|
|
28
30
|
.option('-q, --quiet', 'suppress banner/footer chrome (data lines are kept)')
|
|
31
|
+
.option('--no-spinner', 'disable the animated spinner, keeping the label/succeed/fail lines (also auto-off under TERM=dumb or CI)')
|
|
29
32
|
.option('--debug', 'print the failing command and stack trace for unhandled errors');
|
|
30
33
|
// Color auto-detects from TTY + NO_COLOR/FORCE_COLOR by default (chalk);
|
|
31
|
-
// --no-color and -
|
|
34
|
+
// --no-color, -q and --no-spinner are explicit overrides, applied before any command runs.
|
|
32
35
|
program.hook('preAction', (_thisCommand, actionCommand) => {
|
|
33
|
-
const { color, quiet } = actionCommand.optsWithGlobals();
|
|
36
|
+
const { color, quiet, spinner } = actionCommand.optsWithGlobals();
|
|
34
37
|
if (color === false)
|
|
35
38
|
setColorEnabled(false);
|
|
36
39
|
setQuietEnabled(quiet === true);
|
|
40
|
+
if (spinner === false)
|
|
41
|
+
setSpinnerEnabled(false);
|
|
37
42
|
});
|
|
38
43
|
// Add commands
|
|
39
44
|
program.addCommand(setupCommand);
|
|
@@ -42,6 +47,8 @@ program.addCommand(statusCommand);
|
|
|
42
47
|
program.addCommand(updateCommand);
|
|
43
48
|
program.addCommand(doctorCommand);
|
|
44
49
|
program.addCommand(uninstallCommand);
|
|
50
|
+
program.addCommand(addCommand);
|
|
51
|
+
program.addCommand(removeCommand);
|
|
45
52
|
program.addCommand(completionCommand);
|
|
46
53
|
program.addCommand(shellFixCommand);
|
|
47
54
|
// After addCommand, so the override is installed on every subcommand too.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAEnG,iBAAiB;AACjB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,wEAAwE,CAAC;KACrF,OAAO,CAAC,OAAO,CAAC;KAChB,wBAAwB,EAAE;KAC1B,MAAM,CAAC,YAAY,EAAE,2DAA2D,CAAC;KACjF,MAAM,CAAC,aAAa,EAAE,qDAAqD,CAAC;KAC5E,MAAM,CAAC,SAAS,EAAE,gEAAgE,CAAC,CAAC;AAEvF,yEAAyE;AACzE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/integrations/render.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/integrations/render.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAiB1E,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAIzE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAU1E;AAED,0DAA0D;AAC1D,wBAAgB,UAAU,CACxB,MAAM,EAAE,eAAe,GAAG,iBAAiB,GAAG,SAAS,GAAG,eAAe,GACxE,MAAM,CAyBR"}
|
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Rendering helpers for integration results, shared by `apply` and `status`.
|
|
3
3
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
import { asciiGlyphsEnabled } from '../ui/theme.js';
|
|
5
|
+
function stateGlyph(state) {
|
|
6
|
+
const ascii = asciiGlyphsEnabled();
|
|
7
|
+
switch (state) {
|
|
8
|
+
case 'installed':
|
|
9
|
+
return ascii ? '[ok]' : '✓';
|
|
10
|
+
case 'missing':
|
|
11
|
+
return ascii ? '[FAIL]' : '✗';
|
|
12
|
+
case 'unsupported':
|
|
13
|
+
return ascii ? '[-]' : '·';
|
|
14
|
+
case 'drifted':
|
|
15
|
+
return '!'; // already ASCII-safe
|
|
16
|
+
}
|
|
17
|
+
}
|
|
10
18
|
/** Render a single integration/agent pair as a one-line status string. */
|
|
11
19
|
export function integrationStateLine(state) {
|
|
12
|
-
const glyph =
|
|
20
|
+
const glyph = stateGlyph(state.state);
|
|
13
21
|
const detail = state.detail ? ` (${state.detail})` : '';
|
|
14
22
|
return `${glyph} ${state.agent}: ${state.state}${detail}`;
|
|
15
23
|
}
|
|
@@ -32,12 +40,19 @@ export function integrationResultLines(result) {
|
|
|
32
40
|
}
|
|
33
41
|
/** Render the gh auth result as a single display line. */
|
|
34
42
|
export function ghAuthLine(status) {
|
|
43
|
+
const ascii = asciiGlyphsEnabled();
|
|
35
44
|
const glyph = status === 'authenticated'
|
|
36
|
-
?
|
|
45
|
+
? ascii
|
|
46
|
+
? '[ok]'
|
|
47
|
+
: '✓'
|
|
37
48
|
: status === 'unauthenticated'
|
|
38
|
-
?
|
|
49
|
+
? ascii
|
|
50
|
+
? '[FAIL]'
|
|
51
|
+
: '✗'
|
|
39
52
|
: status === 'not_installed'
|
|
40
|
-
?
|
|
53
|
+
? ascii
|
|
54
|
+
? '[-]'
|
|
55
|
+
: '·'
|
|
41
56
|
: '?';
|
|
42
57
|
const label = status === 'authenticated'
|
|
43
58
|
? 'authenticated'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/integrations/render.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/integrations/render.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,SAAS,UAAU,CAAC,KAAqC;IACvD,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;IACnC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9B,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;QAChC,KAAK,aAAa;YAChB,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7B,KAAK,SAAS;YACZ,OAAO,GAAG,CAAC,CAAC,qBAAqB;IACrC,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,oBAAoB,CAAC,KAA4B;IAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAyB;IAC9D,MAAM,KAAK,GAAa,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,UAAU,CACxB,MAAyE;IAEzE,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;IACnC,MAAM,KAAK,GACT,MAAM,KAAK,eAAe;QACxB,CAAC,CAAC,KAAK;YACL,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,GAAG;QACP,CAAC,CAAC,MAAM,KAAK,iBAAiB;YAC5B,CAAC,CAAC,KAAK;gBACL,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,GAAG;YACP,CAAC,CAAC,MAAM,KAAK,eAAe;gBAC1B,CAAC,CAAC,KAAK;oBACL,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,GAAG;gBACP,CAAC,CAAC,GAAG,CAAC;IACd,MAAM,KAAK,GACT,MAAM,KAAK,eAAe;QACxB,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,MAAM,KAAK,iBAAiB;YAC5B,CAAC,CAAC,mBAAmB;YACrB,CAAC,CAAC,MAAM,KAAK,eAAe;gBAC1B,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,SAAS,CAAC;IACpB,OAAO,GAAG,KAAK,gBAAgB,KAAK,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"superpowers.d.ts","sourceRoot":"","sources":["../../src/integrations/superpowers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAY,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAyB,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9F,eAAO,MAAM,4BAA4B,iCAAiC,CAAC;AAC3E,eAAO,MAAM,qBAAqB,wCAAwC,CAAC;AAW3E,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,8DAA8D;AAC9D,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"superpowers.d.ts","sourceRoot":"","sources":["../../src/integrations/superpowers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAY,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAyB,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9F,eAAO,MAAM,4BAA4B,iCAAiC,CAAC;AAC3E,eAAO,MAAM,qBAAqB,wCAAwC,CAAC;AAW3E,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,8DAA8D;AAC9D,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,sBAAsB,CAAC;AA+BtF,UAAU,MAAM;IACd,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC;IAC1D,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;CACnE;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAQD,qBAAa,kBAAmB,YAAW,kBAAkB;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,IAAI,GAAE,sBAA2B;IAK7C,OAAO,IAAI,MAAM;IAIjB,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO;IAIzD,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,gBAAgB;IAwClB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA2B1F,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI1F,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAmEhG"}
|
|
@@ -24,10 +24,12 @@ const defaultClaudeCliRunner = (args, cwd) => {
|
|
|
24
24
|
return { success: false, exitCode: null, stdout: '', stderr: 'claude CLI not found on PATH' };
|
|
25
25
|
}
|
|
26
26
|
try {
|
|
27
|
+
// `plugin marketplace add`/`plugin install` fetch from GitHub.
|
|
27
28
|
const result = child_process.spawnSync(claudePath, args, {
|
|
28
29
|
cwd,
|
|
29
30
|
encoding: 'utf-8',
|
|
30
31
|
stdio: 'pipe',
|
|
32
|
+
timeout: 60000,
|
|
31
33
|
});
|
|
32
34
|
return {
|
|
33
35
|
success: result.status === 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"superpowers.js","sourceRoot":"","sources":["../../src/integrations/superpowers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,aAAa,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAI1E,MAAM,CAAC,MAAM,4BAA4B,GAAG,8BAA8B,CAAC;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,qCAAqC,CAAC;AAE3E,MAAM,oBAAoB,GAAsC;IAC9D,SAAS,EACP,yJAAyJ;IAC3J,OAAO,EACL,+RAA+R;IACjS,QAAQ,EACN,gMAAgM;CACnM,CAAC;AAYF,MAAM,sBAAsB,GAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC5D,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IAChG,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE;YACvD,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"superpowers.js","sourceRoot":"","sources":["../../src/integrations/superpowers.ts"],"names":[],"mappings":"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"}
|
package/dist/shell/detector.d.ts
CHANGED
|
@@ -2,10 +2,26 @@
|
|
|
2
2
|
* Tier 0 Shell Detection and Configuration
|
|
3
3
|
* Detects the shell environment and ensures POSIX compatibility on Windows
|
|
4
4
|
*/
|
|
5
|
+
import * as child_process from 'child_process';
|
|
5
6
|
import type { AgentKey } from '../config/schema.js';
|
|
6
7
|
import { type ShellFixStateEntry } from './shell-fix-state.js';
|
|
7
8
|
export declare const POSIX_UTILITIES: string[];
|
|
8
9
|
export declare const GIT_BASH_PATHS: string[];
|
|
10
|
+
/**
|
|
11
|
+
* Candidate Git Bash directories: the well-known machine-wide paths plus
|
|
12
|
+
* per-user (`%LOCALAPPDATA%\Programs\Git`, the default for a non-admin Git
|
|
13
|
+
* for Windows install) and scoop install locations, which vary per machine
|
|
14
|
+
* and so can't be hardcoded in GIT_BASH_PATHS.
|
|
15
|
+
*/
|
|
16
|
+
export declare function gitBashCandidatePaths(env?: NodeJS.ProcessEnv): string[];
|
|
17
|
+
/**
|
|
18
|
+
* Fall back to searching PATH for git.exe when none of the well-known
|
|
19
|
+
* install locations exist — covers custom install directories the
|
|
20
|
+
* candidate list can't anticipate. Derives the Git Bash root from git.exe's
|
|
21
|
+
* location (`<root>\cmd\git.exe` or `<root>\bin\git.exe`) and checks that
|
|
22
|
+
* root's `bin` and `usr\bin` directories.
|
|
23
|
+
*/
|
|
24
|
+
export declare function findGitBashOnPath(spawnSync?: typeof child_process.spawnSync): string | undefined;
|
|
9
25
|
export interface ShellInfo {
|
|
10
26
|
currentShell: string;
|
|
11
27
|
isPosixCompatible: boolean;
|
|
@@ -18,9 +34,13 @@ export interface ShellInfo {
|
|
|
18
34
|
pathEnvironment: string;
|
|
19
35
|
}
|
|
20
36
|
/**
|
|
21
|
-
* Detect the current shell environment
|
|
37
|
+
* Detect the current shell environment.
|
|
38
|
+
*
|
|
39
|
+
* `spawnSync` is injectable (defaults to the real `child_process.spawnSync`)
|
|
40
|
+
* purely so tests can observe — and assert nothing installs anything through
|
|
41
|
+
* — the one remaining subprocess call this function makes directly.
|
|
22
42
|
*/
|
|
23
|
-
export declare function detectShell(): ShellInfo;
|
|
43
|
+
export declare function detectShell(spawnSync?: typeof child_process.spawnSync): ShellInfo;
|
|
24
44
|
/**
|
|
25
45
|
* Check if GNU coreutils are available (for macOS/Linux)
|
|
26
46
|
* Uses `command -v` to get the resolved path, then checks version output.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/shell/detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/shell/detector.ts"],"names":[],"mappings":"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"}
|
package/dist/shell/detector.js
CHANGED
|
@@ -7,6 +7,7 @@ import * as path from 'path';
|
|
|
7
7
|
import * as winPath from 'path/win32';
|
|
8
8
|
import * as child_process from 'child_process';
|
|
9
9
|
import { AGENT_KEYS } from '../config/schema.js';
|
|
10
|
+
import { homeDir } from '../adapters/agent-dirs.js';
|
|
10
11
|
import { getShimsDirValue, pathContainsDir, removeShimsDirValue } from '../toolchain/mise.js';
|
|
11
12
|
import { writeFileWithRetry } from '../utils/fs-retry.js';
|
|
12
13
|
import { clearShellFixState, mergeShellFixEntries, readShellFixState, shellFixStatePath, writeShellFixState, } from './shell-fix-state.js';
|
|
@@ -28,7 +29,7 @@ export const POSIX_UTILITIES = [
|
|
|
28
29
|
'mv',
|
|
29
30
|
'less',
|
|
30
31
|
];
|
|
31
|
-
// Well-known paths for Git Bash on Windows
|
|
32
|
+
// Well-known machine-wide paths for Git Bash on Windows
|
|
32
33
|
export const GIT_BASH_PATHS = [
|
|
33
34
|
'C:\\Program Files\\Git\\bin',
|
|
34
35
|
'C:\\Program Files\\Git\\usr\\bin',
|
|
@@ -36,9 +37,67 @@ export const GIT_BASH_PATHS = [
|
|
|
36
37
|
'C:\\Program Files (x86)\\Git\\usr\\bin',
|
|
37
38
|
];
|
|
38
39
|
/**
|
|
39
|
-
*
|
|
40
|
+
* Candidate Git Bash directories: the well-known machine-wide paths plus
|
|
41
|
+
* per-user (`%LOCALAPPDATA%\Programs\Git`, the default for a non-admin Git
|
|
42
|
+
* for Windows install) and scoop install locations, which vary per machine
|
|
43
|
+
* and so can't be hardcoded in GIT_BASH_PATHS.
|
|
40
44
|
*/
|
|
41
|
-
export function
|
|
45
|
+
export function gitBashCandidatePaths(env = process.env) {
|
|
46
|
+
const candidates = [...GIT_BASH_PATHS];
|
|
47
|
+
const localAppData = env.LOCALAPPDATA;
|
|
48
|
+
if (localAppData) {
|
|
49
|
+
candidates.push(path.join(localAppData, 'Programs', 'Git', 'bin'), path.join(localAppData, 'Programs', 'Git', 'usr', 'bin'));
|
|
50
|
+
}
|
|
51
|
+
const scoopRoot = env.SCOOP || (env.USERPROFILE ? path.join(env.USERPROFILE, 'scoop') : undefined);
|
|
52
|
+
if (scoopRoot) {
|
|
53
|
+
candidates.push(path.join(scoopRoot, 'apps', 'git', 'current', 'bin'), path.join(scoopRoot, 'apps', 'git', 'current', 'usr', 'bin'));
|
|
54
|
+
}
|
|
55
|
+
return candidates;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Fall back to searching PATH for git.exe when none of the well-known
|
|
59
|
+
* install locations exist — covers custom install directories the
|
|
60
|
+
* candidate list can't anticipate. Derives the Git Bash root from git.exe's
|
|
61
|
+
* location (`<root>\cmd\git.exe` or `<root>\bin\git.exe`) and checks that
|
|
62
|
+
* root's `bin` and `usr\bin` directories.
|
|
63
|
+
*/
|
|
64
|
+
export function findGitBashOnPath(spawnSync = child_process.spawnSync) {
|
|
65
|
+
try {
|
|
66
|
+
const where = spawnSync('cmd.exe', ['/c', 'where', 'git'], {
|
|
67
|
+
encoding: 'utf8',
|
|
68
|
+
timeout: 5000,
|
|
69
|
+
});
|
|
70
|
+
if (where.status !== 0 || !where.stdout) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
const gitExe = where.stdout
|
|
74
|
+
.split(/\r?\n/)
|
|
75
|
+
.map((line) => line.trim())
|
|
76
|
+
.find((line) => line.length > 0);
|
|
77
|
+
if (!gitExe) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
const root = path.dirname(path.dirname(gitExe));
|
|
81
|
+
for (const sub of ['bin', path.join('usr', 'bin')]) {
|
|
82
|
+
const candidate = path.join(root, sub);
|
|
83
|
+
if (fs.existsSync(candidate)) {
|
|
84
|
+
return candidate;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Detect the current shell environment.
|
|
95
|
+
*
|
|
96
|
+
* `spawnSync` is injectable (defaults to the real `child_process.spawnSync`)
|
|
97
|
+
* purely so tests can observe — and assert nothing installs anything through
|
|
98
|
+
* — the one remaining subprocess call this function makes directly.
|
|
99
|
+
*/
|
|
100
|
+
export function detectShell(spawnSync = child_process.spawnSync) {
|
|
42
101
|
const isWindows = process.platform === 'win32';
|
|
43
102
|
const isMacOS = process.platform === 'darwin';
|
|
44
103
|
const currentShell = determineCurrentShell();
|
|
@@ -58,7 +117,7 @@ export function detectShell() {
|
|
|
58
117
|
// Find Git Bash path (used by the Tier 0 fix even when the current shell
|
|
59
118
|
// is PowerShell/cmd, so agents get pointed at a real POSIX shell).
|
|
60
119
|
// Use path.resolve() to handle paths with spaces properly.
|
|
61
|
-
for (const gitPath of
|
|
120
|
+
for (const gitPath of gitBashCandidatePaths()) {
|
|
62
121
|
try {
|
|
63
122
|
const resolvedPath = path.resolve(gitPath);
|
|
64
123
|
if (fs.existsSync(resolvedPath)) {
|
|
@@ -70,31 +129,36 @@ export function detectShell() {
|
|
|
70
129
|
// Ignore
|
|
71
130
|
}
|
|
72
131
|
}
|
|
132
|
+
// None of the well-known install locations exist: search PATH itself,
|
|
133
|
+
// which covers custom install directories.
|
|
134
|
+
if (!gitBashPath) {
|
|
135
|
+
gitBashPath = findGitBashOnPath(spawnSync);
|
|
136
|
+
}
|
|
73
137
|
}
|
|
74
138
|
else if (isMacOS) {
|
|
75
|
-
// On macOS, check for GNU coreutils
|
|
139
|
+
// On macOS, check for GNU coreutils. detectShell() must stay read-only —
|
|
140
|
+
// status/doctor call it too, and both are documented as never changing
|
|
141
|
+
// the machine — so it only ever detects, never installs. Installing is
|
|
142
|
+
// fixShellConfiguration()'s job (the explicit, reported Tier 0 apply
|
|
143
|
+
// step), which calls installGNUCoreutilsMacOS() itself when needed.
|
|
76
144
|
isPosixCompatible = checkGNUCoreutils();
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
try {
|
|
87
|
-
const result = child_process.spawnSync('brew', ['--prefix', 'coreutils'], {
|
|
88
|
-
encoding: 'utf-8',
|
|
89
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
90
|
-
});
|
|
145
|
+
// Read-only probe: report the gnubin path when coreutils happen to
|
|
146
|
+
// already be installed via Homebrew; do nothing (and no error) otherwise.
|
|
147
|
+
try {
|
|
148
|
+
const result = spawnSync('brew', ['--prefix', 'coreutils'], {
|
|
149
|
+
encoding: 'utf-8',
|
|
150
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
151
|
+
timeout: 10000,
|
|
152
|
+
});
|
|
153
|
+
if (result.status === 0) {
|
|
91
154
|
const prefix = result.stdout.trim();
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
catch {
|
|
95
|
-
// coreutils not installed via Homebrew, or Homebrew not available
|
|
155
|
+
if (prefix)
|
|
156
|
+
gnubinPath = path.join(prefix, 'libexec', 'gnubin');
|
|
96
157
|
}
|
|
97
158
|
}
|
|
159
|
+
catch {
|
|
160
|
+
// coreutils not installed via Homebrew, or Homebrew not available
|
|
161
|
+
}
|
|
98
162
|
}
|
|
99
163
|
else {
|
|
100
164
|
// On Linux and other Unix-like systems, check for GNU coreutils
|
|
@@ -165,7 +229,7 @@ function checkGitBash() {
|
|
|
165
229
|
}
|
|
166
230
|
// Check PATH for Git Bash directories (spaces-safe, case-folded on win32)
|
|
167
231
|
const pathEnv = process.env.PATH || '';
|
|
168
|
-
for (const gitPath of
|
|
232
|
+
for (const gitPath of gitBashCandidatePaths()) {
|
|
169
233
|
if (pathContainsDir(pathEnv, gitPath)) {
|
|
170
234
|
return true;
|
|
171
235
|
}
|
|
@@ -192,11 +256,13 @@ export function checkGNUCoreutils() {
|
|
|
192
256
|
const grepResult = child_process.spawnSync('sh', ['-c', 'command -v grep'], {
|
|
193
257
|
encoding: 'utf-8',
|
|
194
258
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
259
|
+
timeout: 5000,
|
|
195
260
|
});
|
|
196
261
|
const grepPath = grepResult.stdout.trim();
|
|
197
262
|
if (grepPath) {
|
|
198
263
|
const grepCheck = child_process.spawnSync(grepPath, ['-P', '--version'], {
|
|
199
264
|
stdio: 'ignore',
|
|
265
|
+
timeout: 5000,
|
|
200
266
|
});
|
|
201
267
|
if (grepCheck.status === 0)
|
|
202
268
|
return true;
|
|
@@ -205,10 +271,14 @@ export function checkGNUCoreutils() {
|
|
|
205
271
|
const sedResult = child_process.spawnSync('sh', ['-c', 'command -v sed'], {
|
|
206
272
|
encoding: 'utf-8',
|
|
207
273
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
274
|
+
timeout: 5000,
|
|
208
275
|
});
|
|
209
276
|
const sedPath = sedResult.stdout.trim();
|
|
210
277
|
if (sedPath) {
|
|
211
|
-
const sedCheck = child_process.spawnSync(sedPath, ['--version'], {
|
|
278
|
+
const sedCheck = child_process.spawnSync(sedPath, ['--version'], {
|
|
279
|
+
stdio: 'ignore',
|
|
280
|
+
timeout: 5000,
|
|
281
|
+
});
|
|
212
282
|
if (sedCheck.status === 0)
|
|
213
283
|
return true;
|
|
214
284
|
}
|
|
@@ -228,7 +298,10 @@ function installGNUCoreutilsMacOS() {
|
|
|
228
298
|
}
|
|
229
299
|
try {
|
|
230
300
|
// Check if Homebrew is installed
|
|
231
|
-
const brewOk = child_process.spawnSync('sh', ['-c', 'command -v brew'], {
|
|
301
|
+
const brewOk = child_process.spawnSync('sh', ['-c', 'command -v brew'], {
|
|
302
|
+
stdio: 'ignore',
|
|
303
|
+
timeout: 5000,
|
|
304
|
+
});
|
|
232
305
|
if (brewOk.status !== 0) {
|
|
233
306
|
return undefined;
|
|
234
307
|
}
|
|
@@ -238,15 +311,22 @@ function installGNUCoreutilsMacOS() {
|
|
|
238
311
|
// Only install when the formula is not already installed
|
|
239
312
|
const listed = child_process.spawnSync('brew', ['list', '--formula', pkg], {
|
|
240
313
|
stdio: 'ignore',
|
|
314
|
+
timeout: 10000,
|
|
241
315
|
});
|
|
242
316
|
if (listed.status !== 0) {
|
|
243
|
-
|
|
317
|
+
// An actual package install (network + possibly a build), unlike the
|
|
318
|
+
// read-only probes around it — given more room before we give up.
|
|
319
|
+
child_process.spawnSync('brew', ['install', '--quiet', pkg], {
|
|
320
|
+
stdio: 'ignore',
|
|
321
|
+
timeout: 120000,
|
|
322
|
+
});
|
|
244
323
|
}
|
|
245
324
|
}
|
|
246
325
|
// Get the gnubin path from coreutils
|
|
247
326
|
const result = child_process.spawnSync('brew', ['--prefix', 'coreutils'], {
|
|
248
327
|
encoding: 'utf-8',
|
|
249
328
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
329
|
+
timeout: 10000,
|
|
250
330
|
});
|
|
251
331
|
if (result.status !== 0) {
|
|
252
332
|
return undefined;
|
|
@@ -270,11 +350,17 @@ export function checkMissingUtilities(isPosixCompatible) {
|
|
|
270
350
|
for (const util of POSIX_UTILITIES) {
|
|
271
351
|
// `where` reports "not found" via a non-zero exit code (the INFO text goes
|
|
272
352
|
// to stderr), so checking the exit status is what distinguishes "found".
|
|
273
|
-
const where = child_process.spawnSync('cmd.exe', ['/c', 'where', util], {
|
|
353
|
+
const where = child_process.spawnSync('cmd.exe', ['/c', 'where', util], {
|
|
354
|
+
stdio: 'ignore',
|
|
355
|
+
timeout: 5000,
|
|
356
|
+
});
|
|
274
357
|
if (where.status === 0) {
|
|
275
358
|
continue;
|
|
276
359
|
}
|
|
277
|
-
const which = child_process.spawnSync('sh', ['-c', `command -v ${util}`], {
|
|
360
|
+
const which = child_process.spawnSync('sh', ['-c', `command -v ${util}`], {
|
|
361
|
+
stdio: 'ignore',
|
|
362
|
+
timeout: 5000,
|
|
363
|
+
});
|
|
278
364
|
if (which.status === 0) {
|
|
279
365
|
continue;
|
|
280
366
|
}
|
|
@@ -620,19 +706,21 @@ export function fixShellConfiguration(_baseDir = '.', agents = [...AGENT_KEYS],
|
|
|
620
706
|
if (!shellInfo.gitBashPath) {
|
|
621
707
|
return {
|
|
622
708
|
success: true,
|
|
623
|
-
message: 'Git Bash not found on PATH; install Git for Windows to enable Tier 0 shell fixes',
|
|
709
|
+
message: 'Git Bash not found in common install locations or on PATH; install Git for Windows to enable Tier 0 shell fixes',
|
|
624
710
|
};
|
|
625
711
|
}
|
|
626
|
-
// Non-TTY/test shell: skip file writes, just
|
|
712
|
+
// Non-TTY/test shell, or tier0.mode = "never": skip file writes, just
|
|
713
|
+
// report the state. (Callers already prefix messages with "Tier 0: "
|
|
714
|
+
// themselves, so this string must not repeat it.)
|
|
627
715
|
if (!complex) {
|
|
628
716
|
return {
|
|
629
717
|
success: true,
|
|
630
|
-
message: `
|
|
718
|
+
message: `checked; would fix ${agents.length} agent shell(s) — skipped (pass --shell-fix always, or run interactively, to apply)`,
|
|
631
719
|
gitBashPath: shellInfo.gitBashPath,
|
|
632
720
|
};
|
|
633
721
|
}
|
|
634
722
|
const bashExe = bashExecutable(shellInfo.gitBashPath);
|
|
635
|
-
const home =
|
|
723
|
+
const home = homeDir();
|
|
636
724
|
const results = agents.map((agent) => applyAgentShellFix(agent, bashExe, home));
|
|
637
725
|
const written = results.filter((result) => result.action === 'created' || result.action === 'updated');
|
|
638
726
|
recordShellFixState(written, bashExe, statePath);
|
|
@@ -692,7 +780,7 @@ export function fixShellConfiguration(_baseDir = '.', agents = [...AGENT_KEYS],
|
|
|
692
780
|
* since that's the interactive shell the user is running agentenv from, not
|
|
693
781
|
* the target agent's configuration.
|
|
694
782
|
*/
|
|
695
|
-
export function checkAgentShellConfiguration(agent, home =
|
|
783
|
+
export function checkAgentShellConfiguration(agent, home = homeDir()) {
|
|
696
784
|
switch (agent) {
|
|
697
785
|
case 'claude_code':
|
|
698
786
|
return checkClaudeCodeShell(home);
|