@indy2kro/agentenv 0.2.0 → 0.2.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 (88) hide show
  1. package/README.md +57 -11
  2. package/dist/adapters/cline.d.ts +9 -0
  3. package/dist/adapters/cline.d.ts.map +1 -0
  4. package/dist/adapters/cline.js +19 -0
  5. package/dist/adapters/cline.js.map +1 -0
  6. package/dist/adapters/cursor.d.ts +9 -0
  7. package/dist/adapters/cursor.d.ts.map +1 -0
  8. package/dist/adapters/cursor.js +19 -0
  9. package/dist/adapters/cursor.js.map +1 -0
  10. package/dist/adapters/detect.d.ts +1 -1
  11. package/dist/adapters/detect.d.ts.map +1 -1
  12. package/dist/adapters/detect.js +6 -1
  13. package/dist/adapters/detect.js.map +1 -1
  14. package/dist/adapters/gemini.d.ts +9 -0
  15. package/dist/adapters/gemini.d.ts.map +1 -0
  16. package/dist/adapters/gemini.js +19 -0
  17. package/dist/adapters/gemini.js.map +1 -0
  18. package/dist/adapters/index.d.ts +6 -0
  19. package/dist/adapters/index.d.ts.map +1 -1
  20. package/dist/adapters/index.js +6 -0
  21. package/dist/adapters/index.js.map +1 -1
  22. package/dist/adapters/rtk-delegation.d.ts +28 -0
  23. package/dist/adapters/rtk-delegation.d.ts.map +1 -0
  24. package/dist/adapters/rtk-delegation.js +102 -0
  25. package/dist/adapters/rtk-delegation.js.map +1 -0
  26. package/dist/adapters/vibe.d.ts +9 -0
  27. package/dist/adapters/vibe.d.ts.map +1 -0
  28. package/dist/adapters/vibe.js +19 -0
  29. package/dist/adapters/vibe.js.map +1 -0
  30. package/dist/adapters/windsurf.d.ts +9 -0
  31. package/dist/adapters/windsurf.d.ts.map +1 -0
  32. package/dist/adapters/windsurf.js +19 -0
  33. package/dist/adapters/windsurf.js.map +1 -0
  34. package/dist/commands/apply.d.ts +6 -0
  35. package/dist/commands/apply.d.ts.map +1 -1
  36. package/dist/commands/apply.js +31 -14
  37. package/dist/commands/apply.js.map +1 -1
  38. package/dist/commands/configure.d.ts.map +1 -1
  39. package/dist/commands/configure.js +5 -3
  40. package/dist/commands/configure.js.map +1 -1
  41. package/dist/commands/setup.d.ts +39 -0
  42. package/dist/commands/setup.d.ts.map +1 -1
  43. package/dist/commands/setup.js +19 -9
  44. package/dist/commands/setup.js.map +1 -1
  45. package/dist/commands/status.d.ts +6 -0
  46. package/dist/commands/status.d.ts.map +1 -1
  47. package/dist/commands/status.js +6 -0
  48. package/dist/commands/status.js.map +1 -1
  49. package/dist/commands/update.d.ts.map +1 -1
  50. package/dist/commands/update.js +67 -9
  51. package/dist/commands/update.js.map +1 -1
  52. package/dist/config/schema.d.ts +26 -2
  53. package/dist/config/schema.d.ts.map +1 -1
  54. package/dist/config/schema.js +142 -43
  55. package/dist/config/schema.js.map +1 -1
  56. package/dist/generate/agentsmd.d.ts.map +1 -1
  57. package/dist/generate/agentsmd.js +15 -4
  58. package/dist/generate/agentsmd.js.map +1 -1
  59. package/dist/integrations/superpowers.d.ts.map +1 -1
  60. package/dist/integrations/superpowers.js +3 -1
  61. package/dist/integrations/superpowers.js.map +1 -1
  62. package/dist/shell/detector.d.ts +1 -1
  63. package/dist/shell/detector.d.ts.map +1 -1
  64. package/dist/shell/detector.js +61 -20
  65. package/dist/shell/detector.js.map +1 -1
  66. package/dist/toolchain/fallbacks.d.ts.map +1 -1
  67. package/dist/toolchain/fallbacks.js +8 -3
  68. package/dist/toolchain/fallbacks.js.map +1 -1
  69. package/dist/toolchain/mise.d.ts +106 -6
  70. package/dist/toolchain/mise.d.ts.map +1 -1
  71. package/dist/toolchain/mise.js +248 -89
  72. package/dist/toolchain/mise.js.map +1 -1
  73. package/dist/toolchain/rtk.d.ts.map +1 -1
  74. package/dist/toolchain/rtk.js +6 -0
  75. package/dist/toolchain/rtk.js.map +1 -1
  76. package/dist/utils/fs-retry.d.ts +46 -0
  77. package/dist/utils/fs-retry.d.ts.map +1 -0
  78. package/dist/utils/fs-retry.js +94 -0
  79. package/dist/utils/fs-retry.js.map +1 -0
  80. package/dist/utils/output.d.ts +16 -0
  81. package/dist/utils/output.d.ts.map +1 -0
  82. package/dist/utils/output.js +20 -0
  83. package/dist/utils/output.js.map +1 -0
  84. package/dist/wizard/build.d.ts +16 -2
  85. package/dist/wizard/build.d.ts.map +1 -1
  86. package/dist/wizard/build.js +47 -11
  87. package/dist/wizard/build.js.map +1 -1
  88. package/package.json +1 -1
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Windows file-lock resilient writes (Tasks 8 & 13 of the Windows Shell
3
+ * Compatibility Overhaul plan).
4
+ *
5
+ * On Windows an open/locked file (editor, AV scan, another agentenv) makes
6
+ * `fs.writeFileSync` throw EBUSY/EPERM immediately. `writeFileWithRetry`
7
+ * retries those codes with a short backoff instead of failing the first try.
8
+ * `writeFileWithVerify` additionally confirms the write actually persisted
9
+ * (existence + size), so a locking/AV failure that quietly didn't persist is
10
+ * reported truthfully.
11
+ *
12
+ * The fs interface is injectable so tests can model "throws EBUSY twice then
13
+ * succeeds" and "reports success but file is missing" without touching the
14
+ * real filesystem.
15
+ */
16
+ import * as fs from 'fs';
17
+ export const defaultRetryFs = {
18
+ writeFileSync: (filePath, content) => fs.writeFileSync(filePath, content),
19
+ statSize: (filePath) => {
20
+ try {
21
+ return fs.statSync(filePath).size;
22
+ }
23
+ catch {
24
+ return null;
25
+ }
26
+ },
27
+ };
28
+ const DEFAULT_ATTEMPTS = 5;
29
+ const DEFAULT_DELAY_MS = 25;
30
+ /** True when an error means "the file is temporarily locked", worth retrying. */
31
+ export function isRetryableWriteError(err) {
32
+ if (typeof err !== 'object' || err === null)
33
+ return false;
34
+ const code = err.code;
35
+ if (code === 'EBUSY')
36
+ return true;
37
+ return code === 'EPERM' && process.platform === 'win32';
38
+ }
39
+ function sleepSync(ms) {
40
+ const buffer = new SharedArrayBuffer(4);
41
+ Atomics.wait(new Int32Array(buffer), 0, 0, ms);
42
+ }
43
+ /**
44
+ * Write `content` to `filePath`, retrying briefly on Windows file-lock errors
45
+ * (EBUSY/EPERM). Throws when the write ultimately cannot succeed.
46
+ */
47
+ export function writeFileWithRetry(filePath, content, opts = {}, fsImpl = defaultRetryFs) {
48
+ const attempts = opts.attempts ?? DEFAULT_ATTEMPTS;
49
+ const delayMs = opts.delayMs ?? DEFAULT_DELAY_MS;
50
+ for (let attempt = 1; attempt <= attempts; attempt++) {
51
+ try {
52
+ fsImpl.writeFileSync(filePath, content);
53
+ return;
54
+ }
55
+ catch (err) {
56
+ if (opts.failFast === true || attempt === attempts || !isRetryableWriteError(err)) {
57
+ throw err;
58
+ }
59
+ if (delayMs > 0)
60
+ sleepSync(delayMs);
61
+ }
62
+ }
63
+ }
64
+ /**
65
+ * Write `content` and confirm it persisted: the file must exist after the
66
+ * write, and, for non-empty content, be non-empty. Any mismatch is reported as
67
+ * a failure message instead of a bare silent success.
68
+ */
69
+ export function writeFileWithVerify(filePath, content, opts = {}, fsImpl = defaultRetryFs) {
70
+ try {
71
+ writeFileWithRetry(filePath, content, opts, fsImpl);
72
+ }
73
+ catch (err) {
74
+ return {
75
+ success: false,
76
+ message: `Failed to write ${filePath}: ${err instanceof Error ? err.message : String(err)}`,
77
+ };
78
+ }
79
+ const size = fsImpl.statSize(filePath);
80
+ if (size === null) {
81
+ return {
82
+ success: false,
83
+ message: `Write to ${filePath} reported success but the file is missing`,
84
+ };
85
+ }
86
+ if (content.length > 0 && size === 0) {
87
+ return {
88
+ success: false,
89
+ message: `Write to ${filePath} reported success but the file is empty`,
90
+ };
91
+ }
92
+ return { success: true, message: '' };
93
+ }
94
+ //# sourceMappingURL=fs-retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-retry.js","sourceRoot":"","sources":["../../src/utils/fs-retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Windows error display normalization (Task 12 of the Windows Shell
3
+ * Compatibility Overhaul plan).
4
+ *
5
+ * Captured subprocess output on Windows can carry `\r\n` line endings; printing
6
+ * it verbatim garbles multi-line hints (double line breaks, stray `\r`). This
7
+ * tiny helper strips `\r` and collapses the tail to a single trailing newline
8
+ * so every stderr-derived message is CRLF-clean before a theme renderer prints
9
+ * it.
10
+ */
11
+ /**
12
+ * Strip carriage returns and guarantee exactly one trailing newline (or ''
13
+ * for empty input).
14
+ */
15
+ export declare function normalizeOutput(text: string): string;
16
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIpD"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Windows error display normalization (Task 12 of the Windows Shell
3
+ * Compatibility Overhaul plan).
4
+ *
5
+ * Captured subprocess output on Windows can carry `\r\n` line endings; printing
6
+ * it verbatim garbles multi-line hints (double line breaks, stray `\r`). This
7
+ * tiny helper strips `\r` and collapses the tail to a single trailing newline
8
+ * so every stderr-derived message is CRLF-clean before a theme renderer prints
9
+ * it.
10
+ */
11
+ /**
12
+ * Strip carriage returns and guarantee exactly one trailing newline (or ''
13
+ * for empty input).
14
+ */
15
+ export function normalizeOutput(text) {
16
+ const stripped = text.replace(/\r/g, '');
17
+ const collapsed = stripped.replace(/\n+$/, '');
18
+ return collapsed === '' ? '' : `${collapsed}\n`;
19
+ }
20
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,OAAO,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,CAAC;AAClD,CAAC"}
@@ -7,9 +7,23 @@ export declare const AGENT_OPTIONS: Array<{
7
7
  value: AgentKey;
8
8
  label: string;
9
9
  }>;
10
- export declare const TIER_1_TOOLS: readonly ["ripgrep", "fd", "jq", "rtk"];
11
- export declare const TIER_2_TOOLS: readonly ["ast_grep", "git_delta", "gh", "difftastic"];
10
+ export declare function defaultToolSelection(): string[];
12
11
  export declare function simpleToolSelection(includeTier2: boolean): string[];
12
+ export declare const TIER_LABELS: Record<number, string>;
13
+ export type ToolChoiceEntry = {
14
+ type: 'separator';
15
+ line: string;
16
+ } | {
17
+ type?: never;
18
+ value: string;
19
+ name: string;
20
+ checked: boolean;
21
+ };
22
+ export declare function toolChoices(existing: AgentenvConfig): ToolChoiceEntry[];
23
+ /** Page size for checkbox prompts: fit everything when the terminal allows,
24
+ * otherwise fill the terminal without going below a usable minimum.
25
+ * Pairs with `loop: false` so short-terminal paging never wraps around. */
26
+ export declare function promptPageSize(choiceCount: number, rows: number | undefined): number;
13
27
  /**
14
28
  * Parse a comma-separated agent list (from `--agents`) into valid AgentKeys.
15
29
  * Rejects unknown names so a typo can't silently drop an agent.
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/wizard/build.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,eAAe,EACf,UAAU,EACV,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKnE,CAAC;AAEF,eAAO,MAAM,YAAY,yCAA0C,CAAC;AACpE,eAAO,MAAM,YAAY,wDAAyD,CAAC;AAEnF,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,EAAE,CAEnE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAY1D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,QAAQ,EAAE,EAClB,YAAY,EAAE,OAAO,EACrB,UAAU,EAAE,OAAO,EACnB,KAAK,EAAE,SAAS,GAAG,MAAM,GACxB,cAAc,CAQhB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED,6DAA6D;AAC7D,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,gBAAgB,GAAG,cAAc,CA6B/E;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CASjE"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/wizard/build.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,eAAe,EACf,UAAU,EACV,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAG7B,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAUnE,CAAC;AAEF,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,EAAE,CAGnE;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAI9C,CAAC;AAKF,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,eAAe,EAAE,CAkBvE;AAED;;4EAE4E;AAC5E,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAIpF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAY1D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,QAAQ,EAAE,EAClB,YAAY,EAAE,OAAO,EACrB,UAAU,EAAE,OAAO,EACnB,KAAK,EAAE,SAAS,GAAG,MAAM,GACxB,cAAc,CAQhB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED,6DAA6D;AAC7D,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,gBAAgB,GAAG,cAAc,CA2B/E;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CASjE"}
@@ -2,17 +2,58 @@
2
2
  * Wizard helpers: pure config assembly + diff presentation.
3
3
  * Kept free of inquirer/CLI so the logic is unit-testable.
4
4
  */
5
- import { AGENT_KEYS, TOOL_KEYS } from '../config/schema.js';
5
+ import { AGENT_KEYS, BINARY_MAP, DEFAULT_CONFIG, TOOL_DESCRIPTIONS, TOOL_KEYS, TOOL_TIERS, } from '../config/schema.js';
6
+ import { requiresFallback } from '../toolchain/fallbacks.js';
6
7
  export const AGENT_OPTIONS = [
7
8
  { value: 'claude_code', label: 'Claude Code' },
8
9
  { value: 'codex_cli', label: 'Codex CLI' },
9
10
  { value: 'copilot', label: 'GitHub Copilot' },
10
11
  { value: 'opencode', label: 'OpenCode' },
12
+ { value: 'gemini_cli', label: 'Gemini CLI' },
13
+ { value: 'cursor', label: 'Cursor' },
14
+ { value: 'windsurf', label: 'Windsurf' },
15
+ { value: 'cline', label: 'Cline CLI' },
16
+ { value: 'vibe', label: 'Mistral Vibe' },
11
17
  ];
12
- export const TIER_1_TOOLS = ['ripgrep', 'fd', 'jq', 'rtk'];
13
- export const TIER_2_TOOLS = ['ast_grep', 'git_delta', 'gh', 'difftastic'];
18
+ export function defaultToolSelection() {
19
+ return TOOL_KEYS.filter((key) => DEFAULT_CONFIG.tools?.[key] === true);
20
+ }
14
21
  export function simpleToolSelection(includeTier2) {
15
- return includeTier2 ? [...TIER_1_TOOLS, ...TIER_2_TOOLS] : [...TIER_1_TOOLS];
22
+ const maxTier = includeTier2 ? 2 : 1;
23
+ return defaultToolSelection().filter((key) => (TOOL_TIERS[key] ?? 0) <= maxTier);
24
+ }
25
+ export const TIER_LABELS = {
26
+ 1: 'Essential',
27
+ 2: 'AI-coding value-add',
28
+ 3: 'Power-user',
29
+ };
30
+ export function toolChoices(existing) {
31
+ const entries = [];
32
+ for (const tier of [1, 2, 3]) {
33
+ const keys = TOOL_KEYS.filter((key) => TOOL_TIERS[key] === tier);
34
+ if (keys.length === 0)
35
+ continue;
36
+ entries.push({ type: 'separator', line: `── Tier ${tier} · ${TIER_LABELS[tier]} ──` });
37
+ for (const key of keys) {
38
+ const tierTag = requiresFallback(key)
39
+ ? `[Tier ${tier} · fallback tool · requires manual install]`
40
+ : `[Tier ${tier}]`;
41
+ entries.push({
42
+ value: key,
43
+ name: `${BINARY_MAP[key]} — ${TOOL_DESCRIPTIONS[key]} ${tierTag}`,
44
+ checked: existing.tools?.[key] === true,
45
+ });
46
+ }
47
+ }
48
+ return entries;
49
+ }
50
+ /** Page size for checkbox prompts: fit everything when the terminal allows,
51
+ * otherwise fill the terminal without going below a usable minimum.
52
+ * Pairs with `loop: false` so short-terminal paging never wraps around. */
53
+ export function promptPageSize(choiceCount, rows) {
54
+ const reserved = 4; // prompt line + help line + margin
55
+ const capacity = Math.max(8, (rows ?? 24) - reserved);
56
+ return Math.min(choiceCount, capacity);
16
57
  }
17
58
  /**
18
59
  * Parse a comma-separated agent list (from `--agents`) into valid AgentKeys.
@@ -47,12 +88,7 @@ export function buildDefaultSimpleConfig(agents, includeTier2, rtkEnabled, scope
47
88
  }
48
89
  /** Assemble a full AgentenvConfig from picker selections. */
49
90
  export function buildConfigFromSelections(sel) {
50
- const agents = {
51
- claude_code: false,
52
- codex_cli: false,
53
- copilot: false,
54
- opencode: false,
55
- };
91
+ const agents = Object.fromEntries(AGENT_KEYS.map((key) => [key, false]));
56
92
  for (const agent of sel.agents)
57
93
  agents[agent] = true;
58
94
  const tools = {};
@@ -66,7 +102,7 @@ export function buildConfigFromSelections(sel) {
66
102
  integrations: sel.integrations,
67
103
  rtk: {
68
104
  enabled: sel.rtkEnabled,
69
- init: { claude_code: true, codex_cli: true, copilot: true, opencode: true },
105
+ init: Object.fromEntries(AGENT_KEYS.map((key) => [key, true])),
70
106
  },
71
107
  tier0: { check_enabled: true },
72
108
  generate: {
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/wizard/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/wizard/build.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,UAAU,EACV,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,SAAS,EACT,UAAU,GACX,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,CAAC,MAAM,aAAa,GAA8C;IACtE,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;IAC9C,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;IAC1C,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE;IAC7C,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;IACxC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;IAC5C,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;IACxC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE;IACtC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE;CACzC,CAAC;AAEF,MAAM,UAAU,oBAAoB;IAClC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAqB;IACvD,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,oBAAoB,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAA2B;IACjD,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,qBAAqB;IACxB,CAAC,EAAE,YAAY;CAChB,CAAC;AASF,MAAM,UAAU,WAAW,CAAC,QAAwB;IAClD,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAChC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACvF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC;gBACnC,CAAC,CAAC,SAAS,IAAI,6CAA6C;gBAC5D,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,iBAAiB,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE;gBACjE,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI;aACxC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;4EAE4E;AAC5E,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,IAAwB;IAC1E,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,mCAAmC;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAY,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,oBAAoB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAkB,EAClB,YAAqB,EACrB,UAAmB,EACnB,KAAyB;IAEzB,OAAO,yBAAyB,CAAC;QAC/B,MAAM;QACN,KAAK,EAAE,mBAAmB,CAAC,YAAY,CAAC;QACxC,WAAW,EAAE,EAAE;QACf,KAAK;QACL,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAWD,6DAA6D;AAC7D,MAAM,UAAU,yBAAyB,CAAC,GAAqB;IAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAGtE,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM;QAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAErD,MAAM,KAAK,GAAyC,EAAE,CAAC;IACvD,KAAK,MAAM,GAAG,IAAI,SAAS;QAAE,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAElE,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM;QACN,KAAK;QACL,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QACtE,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,GAAG,EAAE;YACH,OAAO,EAAE,GAAG,CAAC,UAAU;YACvB,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;SAC/D;QACD,KAAK,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;QAC9B,QAAQ,EAAE;YACR,YAAY,EAAE,iCAAiC;YAC/C,UAAU,EAAE,+BAA+B;YAC3C,KAAK,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;SAClC;KACF,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,IAAuB;IACrD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/F,MAAM,MAAM,GACV,KAAK,CAAC,IAAI,KAAK,SAAS;YACtB,CAAC,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACtE,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACxC,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indy2kro/agentenv",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "CLI for configuring a consistent, capable shell environment for AI coding agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",