@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.
Files changed (130) hide show
  1. package/dist/adapters/agent-dirs.d.ts +29 -0
  2. package/dist/adapters/agent-dirs.d.ts.map +1 -0
  3. package/dist/adapters/agent-dirs.js +46 -0
  4. package/dist/adapters/agent-dirs.js.map +1 -0
  5. package/dist/adapters/base.d.ts +7 -1
  6. package/dist/adapters/base.d.ts.map +1 -1
  7. package/dist/adapters/base.js.map +1 -1
  8. package/dist/adapters/claude.d.ts.map +1 -1
  9. package/dist/adapters/claude.js +18 -10
  10. package/dist/adapters/claude.js.map +1 -1
  11. package/dist/adapters/cline.d.ts.map +1 -1
  12. package/dist/adapters/cline.js +2 -2
  13. package/dist/adapters/cline.js.map +1 -1
  14. package/dist/adapters/codex.d.ts.map +1 -1
  15. package/dist/adapters/codex.js +3 -2
  16. package/dist/adapters/codex.js.map +1 -1
  17. package/dist/adapters/copilot.d.ts.map +1 -1
  18. package/dist/adapters/copilot.js +3 -4
  19. package/dist/adapters/copilot.js.map +1 -1
  20. package/dist/adapters/cursor.d.ts.map +1 -1
  21. package/dist/adapters/cursor.js +7 -6
  22. package/dist/adapters/cursor.js.map +1 -1
  23. package/dist/adapters/detect.d.ts.map +1 -1
  24. package/dist/adapters/detect.js +1 -0
  25. package/dist/adapters/detect.js.map +1 -1
  26. package/dist/adapters/gemini.d.ts.map +1 -1
  27. package/dist/adapters/gemini.js +2 -2
  28. package/dist/adapters/gemini.js.map +1 -1
  29. package/dist/adapters/index.d.ts +4 -0
  30. package/dist/adapters/index.d.ts.map +1 -1
  31. package/dist/adapters/index.js +21 -0
  32. package/dist/adapters/index.js.map +1 -1
  33. package/dist/adapters/opencode.d.ts.map +1 -1
  34. package/dist/adapters/opencode.js +2 -2
  35. package/dist/adapters/opencode.js.map +1 -1
  36. package/dist/adapters/rtk-delegation.d.ts.map +1 -1
  37. package/dist/adapters/rtk-delegation.js +16 -1
  38. package/dist/adapters/rtk-delegation.js.map +1 -1
  39. package/dist/adapters/vibe.d.ts.map +1 -1
  40. package/dist/adapters/vibe.js +2 -2
  41. package/dist/adapters/vibe.js.map +1 -1
  42. package/dist/adapters/windsurf.d.ts.map +1 -1
  43. package/dist/adapters/windsurf.js +2 -2
  44. package/dist/adapters/windsurf.js.map +1 -1
  45. package/dist/cli/exit.d.ts +17 -6
  46. package/dist/cli/exit.d.ts.map +1 -1
  47. package/dist/cli/exit.js +17 -7
  48. package/dist/cli/exit.js.map +1 -1
  49. package/dist/commands/apply.d.ts +77 -0
  50. package/dist/commands/apply.d.ts.map +1 -1
  51. package/dist/commands/apply.js +202 -27
  52. package/dist/commands/apply.js.map +1 -1
  53. package/dist/commands/config-edit.d.ts +33 -0
  54. package/dist/commands/config-edit.d.ts.map +1 -0
  55. package/dist/commands/config-edit.js +216 -0
  56. package/dist/commands/config-edit.js.map +1 -0
  57. package/dist/commands/doctor.d.ts +41 -0
  58. package/dist/commands/doctor.d.ts.map +1 -1
  59. package/dist/commands/doctor.js +135 -52
  60. package/dist/commands/doctor.js.map +1 -1
  61. package/dist/commands/setup.d.ts +4 -0
  62. package/dist/commands/setup.d.ts.map +1 -1
  63. package/dist/commands/setup.js +58 -5
  64. package/dist/commands/setup.js.map +1 -1
  65. package/dist/commands/status.d.ts.map +1 -1
  66. package/dist/commands/status.js +40 -16
  67. package/dist/commands/status.js.map +1 -1
  68. package/dist/commands/uninstall.d.ts +78 -1
  69. package/dist/commands/uninstall.d.ts.map +1 -1
  70. package/dist/commands/uninstall.js +329 -31
  71. package/dist/commands/uninstall.js.map +1 -1
  72. package/dist/commands/update.d.ts +51 -0
  73. package/dist/commands/update.d.ts.map +1 -1
  74. package/dist/commands/update.js +172 -71
  75. package/dist/commands/update.js.map +1 -1
  76. package/dist/commands/wizard.d.ts +27 -1
  77. package/dist/commands/wizard.d.ts.map +1 -1
  78. package/dist/commands/wizard.js +48 -31
  79. package/dist/commands/wizard.js.map +1 -1
  80. package/dist/config/schema.d.ts +31 -3
  81. package/dist/config/schema.d.ts.map +1 -1
  82. package/dist/config/schema.js +224 -123
  83. package/dist/config/schema.js.map +1 -1
  84. package/dist/config/scopes.d.ts +4 -2
  85. package/dist/config/scopes.d.ts.map +1 -1
  86. package/dist/config/scopes.js +23 -4
  87. package/dist/config/scopes.js.map +1 -1
  88. package/dist/generate/agentsmd.d.ts +54 -0
  89. package/dist/generate/agentsmd.d.ts.map +1 -1
  90. package/dist/generate/agentsmd.js +225 -143
  91. package/dist/generate/agentsmd.js.map +1 -1
  92. package/dist/index.js +9 -2
  93. package/dist/index.js.map +1 -1
  94. package/dist/integrations/render.d.ts.map +1 -1
  95. package/dist/integrations/render.js +25 -10
  96. package/dist/integrations/render.js.map +1 -1
  97. package/dist/integrations/superpowers.d.ts.map +1 -1
  98. package/dist/integrations/superpowers.js +2 -0
  99. package/dist/integrations/superpowers.js.map +1 -1
  100. package/dist/shell/detector.d.ts +22 -2
  101. package/dist/shell/detector.d.ts.map +1 -1
  102. package/dist/shell/detector.js +122 -34
  103. package/dist/shell/detector.js.map +1 -1
  104. package/dist/toolchain/gh.d.ts.map +1 -1
  105. package/dist/toolchain/gh.js +1 -0
  106. package/dist/toolchain/gh.js.map +1 -1
  107. package/dist/toolchain/mise.d.ts +7 -0
  108. package/dist/toolchain/mise.d.ts.map +1 -1
  109. package/dist/toolchain/mise.js +23 -3
  110. package/dist/toolchain/mise.js.map +1 -1
  111. package/dist/toolchain/rtk.d.ts +71 -3
  112. package/dist/toolchain/rtk.d.ts.map +1 -1
  113. package/dist/toolchain/rtk.js +115 -7
  114. package/dist/toolchain/rtk.js.map +1 -1
  115. package/dist/ui/output.d.ts.map +1 -1
  116. package/dist/ui/output.js +10 -2
  117. package/dist/ui/output.js.map +1 -1
  118. package/dist/ui/spinner.d.ts +15 -3
  119. package/dist/ui/spinner.d.ts.map +1 -1
  120. package/dist/ui/spinner.js +52 -4
  121. package/dist/ui/spinner.js.map +1 -1
  122. package/dist/ui/theme.d.ts +27 -1
  123. package/dist/ui/theme.d.ts.map +1 -1
  124. package/dist/ui/theme.js +73 -8
  125. package/dist/ui/theme.js.map +1 -1
  126. package/dist/utils/fs-retry.d.ts +16 -0
  127. package/dist/utils/fs-retry.d.ts.map +1 -1
  128. package/dist/utils/fs-retry.js +28 -0
  129. package/dist/utils/fs-retry.js.map +1 -1
  130. 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 -q are explicit overrides, applied before any command runs.
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":"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"}
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;AAS1E,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,CAkBR"}
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
- const STATE_GLYPH = {
5
- installed: '✓',
6
- missing: '✗',
7
- unsupported: '·',
8
- drifted: '!',
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 = STATE_GLYPH[state.state];
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;AAIH,MAAM,WAAW,GAAmD;IAClE,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,GAAG;IAChB,OAAO,EAAE,GAAG;CACb,CAAC;AAEF,0EAA0E;AAC1E,MAAM,UAAU,oBAAoB,CAAC,KAA4B;IAC/D,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,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,GACT,MAAM,KAAK,eAAe;QACxB,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,MAAM,KAAK,iBAAiB;YAC5B,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,MAAM,KAAK,eAAe;gBAC1B,CAAC,CAAC,GAAG;gBACL,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
+ {"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;AA6BtF,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"}
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":"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"}
1
+ {"version":3,"file":"superpowers.js","sourceRoot":"","sources":["../../src/integrations/superpowers.ts"],"names":[],"mappings":"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"}
@@ -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":"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"}
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/shell/detector.ts"],"names":[],"mappings":"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"}
@@ -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
- * Detect the current shell environment
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 detectShell() {
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 GIT_BASH_PATHS) {
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
- // If GNU coreutils are not available, we may need to install them
78
- if (!isPosixCompatible) {
79
- gnubinPath = installGNUCoreutilsMacOS();
80
- if (gnubinPath) {
81
- isPosixCompatible = true;
82
- }
83
- }
84
- else {
85
- // Try to get the gnubin path if coreutils are installed
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
- gnubinPath = path.join(prefix, 'libexec', 'gnubin');
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 GIT_BASH_PATHS) {
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'], { stdio: 'ignore' });
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'], { stdio: 'ignore' });
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
- child_process.spawnSync('brew', ['install', '--quiet', pkg], { stdio: 'ignore' });
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], { stdio: 'ignore' });
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}`], { stdio: 'ignore' });
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 report the state
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: `Tier 0: checked; would fix ${agents.length} agent shell(s) in an interactive terminal — skipped (non-TTY)`,
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 = process.env.HOME || process.env.USERPROFILE || '';
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 = process.env.HOME || process.env.USERPROFILE || '') {
783
+ export function checkAgentShellConfiguration(agent, home = homeDir()) {
696
784
  switch (agent) {
697
785
  case 'claude_code':
698
786
  return checkClaudeCodeShell(home);