claude-code-extensions 0.1.0 → 0.1.1

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 (115) hide show
  1. package/dist/ast.d.ts +43 -0
  2. package/dist/ast.js +308 -0
  3. package/dist/ast.js.map +1 -0
  4. package/dist/cli-setup.d.ts +14 -0
  5. package/dist/cli-setup.js +110 -0
  6. package/dist/cli-setup.js.map +1 -0
  7. package/dist/cli.d.ts +18 -0
  8. package/dist/cli.js +218 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/patch-worker.d.ts +6 -0
  11. package/dist/patch-worker.js +27 -0
  12. package/dist/patch-worker.js.map +1 -0
  13. package/dist/patches/always-show-context.d.ts +23 -0
  14. package/dist/patches/always-show-context.js +97 -0
  15. package/dist/patches/always-show-context.js.map +1 -0
  16. package/dist/patches/always-show-thinking.d.ts +18 -0
  17. package/dist/patches/always-show-thinking.js +55 -0
  18. package/dist/patches/always-show-thinking.js.map +1 -0
  19. package/dist/patches/banner.d.ts +10 -0
  20. package/dist/patches/banner.js +60 -0
  21. package/dist/patches/banner.js.map +1 -0
  22. package/dist/patches/cd-command.d.ts +16 -0
  23. package/dist/patches/cd-command.js +89 -0
  24. package/dist/patches/cd-command.js.map +1 -0
  25. package/dist/patches/cx-badge.d.ts +10 -0
  26. package/dist/patches/cx-badge.js +115 -0
  27. package/dist/patches/cx-badge.js.map +1 -0
  28. package/dist/patches/cx-resume-commands.d.ts +14 -0
  29. package/dist/patches/cx-resume-commands.js +53 -0
  30. package/dist/patches/cx-resume-commands.js.map +1 -0
  31. package/dist/patches/disable-paste-collapse.d.ts +16 -0
  32. package/dist/patches/disable-paste-collapse.js +49 -0
  33. package/dist/patches/disable-paste-collapse.js.map +1 -0
  34. package/dist/patches/disable-telemetry.d.ts +13 -0
  35. package/dist/patches/disable-telemetry.js +76 -0
  36. package/dist/patches/disable-telemetry.js.map +1 -0
  37. package/{patches/index.js → dist/patches/index.d.ts} +4 -0
  38. package/dist/patches/index.js +22 -0
  39. package/dist/patches/index.js.map +1 -0
  40. package/dist/patches/no-attribution.d.ts +15 -0
  41. package/dist/patches/no-attribution.js +42 -0
  42. package/dist/patches/no-attribution.js.map +1 -0
  43. package/dist/patches/no-feedback.d.ts +12 -0
  44. package/dist/patches/no-feedback.js +31 -0
  45. package/dist/patches/no-feedback.js.map +1 -0
  46. package/dist/patches/no-npm-warning.d.ts +9 -0
  47. package/dist/patches/no-npm-warning.js +31 -0
  48. package/dist/patches/no-npm-warning.js.map +1 -0
  49. package/dist/patches/no-tips.d.ts +10 -0
  50. package/dist/patches/no-tips.js +26 -0
  51. package/dist/patches/no-tips.js.map +1 -0
  52. package/dist/patches/persist-max-effort.d.ts +15 -0
  53. package/dist/patches/persist-max-effort.js +75 -0
  54. package/dist/patches/persist-max-effort.js.map +1 -0
  55. package/dist/patches/queue.d.ts +10 -0
  56. package/dist/patches/queue.js +202 -0
  57. package/dist/patches/queue.js.map +1 -0
  58. package/dist/patches/random-clawd.d.ts +9 -0
  59. package/dist/patches/random-clawd.js +49 -0
  60. package/dist/patches/random-clawd.js.map +1 -0
  61. package/dist/patches/reload.d.ts +10 -0
  62. package/dist/patches/reload.js +50 -0
  63. package/dist/patches/reload.js.map +1 -0
  64. package/dist/patches/session-export.d.ts +16 -0
  65. package/dist/patches/session-export.js +93 -0
  66. package/dist/patches/session-export.js.map +1 -0
  67. package/dist/patches/session-timer.d.ts +18 -0
  68. package/dist/patches/session-timer.js +217 -0
  69. package/dist/patches/session-timer.js.map +1 -0
  70. package/dist/patches/show-file-in-collapsed-read.d.ts +17 -0
  71. package/dist/patches/show-file-in-collapsed-read.js +151 -0
  72. package/dist/patches/show-file-in-collapsed-read.js.map +1 -0
  73. package/dist/patches/simple-spinner.d.ts +12 -0
  74. package/dist/patches/simple-spinner.js +30 -0
  75. package/dist/patches/simple-spinner.js.map +1 -0
  76. package/dist/patches/swap-enter-submit.d.ts +26 -0
  77. package/dist/patches/swap-enter-submit.js +155 -0
  78. package/dist/patches/swap-enter-submit.js.map +1 -0
  79. package/dist/setup.d.ts +11 -0
  80. package/dist/setup.js +268 -0
  81. package/dist/setup.js.map +1 -0
  82. package/dist/transform-worker.d.ts +10 -0
  83. package/dist/transform-worker.js +35 -0
  84. package/dist/transform-worker.js.map +1 -0
  85. package/dist/transform.d.ts +12 -0
  86. package/dist/transform.js +83 -0
  87. package/dist/transform.js.map +1 -0
  88. package/dist/types.d.ts +105 -0
  89. package/dist/types.js +8 -0
  90. package/dist/types.js.map +1 -0
  91. package/package.json +16 -11
  92. package/ast.js +0 -276
  93. package/cx +0 -228
  94. package/cx-setup +0 -101
  95. package/patch-worker.js +0 -31
  96. package/patches/always-show-context.js +0 -123
  97. package/patches/always-show-thinking.js +0 -65
  98. package/patches/banner.js +0 -58
  99. package/patches/cd-command.js +0 -104
  100. package/patches/cx-badge.js +0 -112
  101. package/patches/cx-resume-commands.js +0 -58
  102. package/patches/disable-paste-collapse.js +0 -52
  103. package/patches/disable-telemetry.js +0 -84
  104. package/patches/no-attribution.js +0 -55
  105. package/patches/no-npm-warning.js +0 -32
  106. package/patches/no-tips.js +0 -29
  107. package/patches/persist-max-effort.js +0 -70
  108. package/patches/queue.js +0 -215
  109. package/patches/random-clawd.js +0 -52
  110. package/patches/reload.js +0 -68
  111. package/patches/show-file-in-collapsed-read.js +0 -178
  112. package/patches/swap-enter-submit.js +0 -188
  113. package/setup.js +0 -222
  114. package/transform-worker.js +0 -38
  115. package/transform.js +0 -99
package/dist/ast.d.ts ADDED
@@ -0,0 +1,43 @@
1
+ /**
2
+ * AST indexing and query helpers for cx patches.
3
+ *
4
+ * ASTIndex builds lookup tables in a single walk so that subsequent
5
+ * queries are O(matches) instead of O(all nodes). The generator-based
6
+ * walkAST is retained for backward compat — some patches iterate it
7
+ * directly over subtrees.
8
+ */
9
+ import type { ASTNode, LiteralValue, SourceEdit, PatchEditor, PatchContext } from './types.js';
10
+ export declare function walkAST(node: ASTNode): Generator<ASTNode>;
11
+ export declare class ASTIndex {
12
+ ast: ASTNode;
13
+ nodesByType: Map<string, ASTNode[]>;
14
+ literalsByValue: Map<LiteralValue, ASTNode[]>;
15
+ parentMap: WeakMap<ASTNode, ASTNode>;
16
+ /** Pre-order flat list — sorted by start position. */
17
+ allNodes: ASTNode[];
18
+ constructor(ast: ASTNode);
19
+ private _build;
20
+ findFirst(root: ASTNode, predicate: (n: ASTNode) => boolean): ASTNode | null;
21
+ findAll(root: ASTNode, predicate: (n: ASTNode) => boolean): ASTNode[];
22
+ findArrayWithConsecutiveStrings(root: ASTNode, str1: string, str2: string): ASTNode | null;
23
+ findObjectWithStringProps(root: ASTNode, propPairs: [string, string][]): ASTNode | null;
24
+ findHookCallWithObjectKeys(root: ASTNode, hookName: string, keys: string[]): ASTNode | null;
25
+ findFunctionsContainingStrings(root: ASTNode, ...strings: string[]): ASTNode[];
26
+ getDestructuredName(objPattern: ASTNode, propKey: string): string | null;
27
+ private _inRange;
28
+ private _lowerBound;
29
+ /** Walk up the parent chain to find the nearest ancestor of a given type. */
30
+ ancestor(node: ASTNode, type: string): ASTNode | null;
31
+ enclosingFunction(node: ASTNode): ASTNode | null;
32
+ }
33
+ export declare class SourceEditor implements PatchEditor {
34
+ edits: SourceEdit[];
35
+ insertAt(pos: number, text: string): void;
36
+ replaceRange(start: number, end: number, text: string): void;
37
+ apply(src: string): string;
38
+ }
39
+ /**
40
+ * Build the standard patch context from source + AST index + editor.
41
+ * Shared by transform.ts (sequential) and workers (parallel).
42
+ */
43
+ export declare function buildContext(source: string, index: ASTIndex, editor: PatchEditor): PatchContext;
package/dist/ast.js ADDED
@@ -0,0 +1,308 @@
1
+ /**
2
+ * AST indexing and query helpers for cx patches.
3
+ *
4
+ * ASTIndex builds lookup tables in a single walk so that subsequent
5
+ * queries are O(matches) instead of O(all nodes). The generator-based
6
+ * walkAST is retained for backward compat — some patches iterate it
7
+ * directly over subtrees.
8
+ */
9
+ // ═══════════════════════════════════════════════════════════════════════════
10
+ // Walk (generator, for direct use by patches)
11
+ // ═══════════════════════════════════════════════════════════════════════════
12
+ export function* walkAST(node) {
13
+ if (!node || typeof node !== 'object')
14
+ return;
15
+ if (node.type)
16
+ yield node;
17
+ for (const key of Object.keys(node)) {
18
+ if (key === 'type' || key === 'start' || key === 'end' || key === 'raw')
19
+ continue;
20
+ const child = node[key];
21
+ if (Array.isArray(child)) {
22
+ for (const item of child) {
23
+ if (item && typeof item === 'object' && item.type)
24
+ yield* walkAST(item);
25
+ }
26
+ }
27
+ else if (child && typeof child === 'object' && child.type) {
28
+ yield* walkAST(child);
29
+ }
30
+ }
31
+ }
32
+ // ═══════════════════════════════════════════════════════════════════════════
33
+ // Index
34
+ // ═══════════════════════════════════════════════════════════════════════════
35
+ export class ASTIndex {
36
+ ast;
37
+ nodesByType = new Map();
38
+ literalsByValue = new Map();
39
+ parentMap = new WeakMap();
40
+ /** Pre-order flat list — sorted by start position. */
41
+ allNodes = [];
42
+ constructor(ast) {
43
+ this.ast = ast;
44
+ this._build(ast, null);
45
+ }
46
+ _build(node, parent) {
47
+ if (!node || typeof node !== 'object' || !node.type)
48
+ return;
49
+ this.allNodes.push(node);
50
+ if (parent)
51
+ this.parentMap.set(node, parent);
52
+ let byType = this.nodesByType.get(node.type);
53
+ if (!byType) {
54
+ byType = [];
55
+ this.nodesByType.set(node.type, byType);
56
+ }
57
+ byType.push(node);
58
+ if (node.type === 'Literal' && node.value != null) {
59
+ let byVal = this.literalsByValue.get(node.value);
60
+ if (!byVal) {
61
+ byVal = [];
62
+ this.literalsByValue.set(node.value, byVal);
63
+ }
64
+ byVal.push(node);
65
+ }
66
+ for (const key of Object.keys(node)) {
67
+ if (key === 'type' || key === 'start' || key === 'end' || key === 'raw')
68
+ continue;
69
+ const child = node[key];
70
+ if (Array.isArray(child)) {
71
+ for (const item of child)
72
+ this._build(item, node);
73
+ }
74
+ else {
75
+ this._build(child, node);
76
+ }
77
+ }
78
+ }
79
+ // ── Generic queries ────────────────────────────────────────────────────
80
+ findFirst(root, predicate) {
81
+ if (!root || root === this.ast) {
82
+ for (const n of this.allNodes)
83
+ if (predicate(n))
84
+ return n;
85
+ return null;
86
+ }
87
+ const lo = this._lowerBound(root.start);
88
+ for (let i = lo; i < this.allNodes.length; i++) {
89
+ const n = this.allNodes[i];
90
+ if (n.start >= root.end)
91
+ break;
92
+ if (n.end <= root.end && predicate(n))
93
+ return n;
94
+ }
95
+ return null;
96
+ }
97
+ findAll(root, predicate) {
98
+ const results = [];
99
+ if (!root || root === this.ast) {
100
+ for (const n of this.allNodes)
101
+ if (predicate(n))
102
+ results.push(n);
103
+ return results;
104
+ }
105
+ const lo = this._lowerBound(root.start);
106
+ for (let i = lo; i < this.allNodes.length; i++) {
107
+ const n = this.allNodes[i];
108
+ if (n.start >= root.end)
109
+ break;
110
+ if (n.end <= root.end && predicate(n))
111
+ results.push(n);
112
+ }
113
+ return results;
114
+ }
115
+ // ── Specialized queries (indexed) ──────────────────────────────────────
116
+ findArrayWithConsecutiveStrings(root, str1, str2) {
117
+ for (const lit of this._inRange(this.literalsByValue.get(str1), root)) {
118
+ const parent = this.parentMap.get(lit);
119
+ if (!parent || parent.type !== 'ArrayExpression')
120
+ continue;
121
+ const idx = parent.elements.indexOf(lit);
122
+ if (idx >= 0 && idx < parent.elements.length - 1) {
123
+ const next = parent.elements[idx + 1];
124
+ if (next?.type === 'Literal' && next.value === str2)
125
+ return parent;
126
+ }
127
+ }
128
+ return null;
129
+ }
130
+ findObjectWithStringProps(root, propPairs) {
131
+ let bestVal = propPairs[0][1];
132
+ let bestCount = Infinity;
133
+ for (const [, v] of propPairs) {
134
+ const c = (this.literalsByValue.get(v) || []).length;
135
+ if (c < bestCount) {
136
+ bestVal = v;
137
+ bestCount = c;
138
+ }
139
+ }
140
+ for (const lit of this._inRange(this.literalsByValue.get(bestVal), root)) {
141
+ let obj = this.parentMap.get(lit);
142
+ if (obj?.type === 'Property')
143
+ obj = this.parentMap.get(obj);
144
+ if (!obj || obj.type !== 'ObjectExpression')
145
+ continue;
146
+ if (propPairs.every(([key, value]) => obj.properties.some((prop) => {
147
+ if (prop.type !== 'Property')
148
+ return false;
149
+ const kMatch = (prop.key.type === 'Identifier' && prop.key.name === key) ||
150
+ (prop.key.type === 'Literal' && prop.key.value === key);
151
+ return kMatch && prop.value.type === 'Literal' && prop.value.value === value;
152
+ })))
153
+ return obj;
154
+ }
155
+ return null;
156
+ }
157
+ findHookCallWithObjectKeys(root, hookName, keys) {
158
+ for (const node of this._inRange(this.nodesByType.get('CallExpression'), root)) {
159
+ const c = node.callee;
160
+ if (c.type !== 'MemberExpression' || c.property.name !== hookName)
161
+ continue;
162
+ const firstArg = node.arguments[0];
163
+ if (!firstArg)
164
+ continue;
165
+ for (const obj of this._inRange(this.nodesByType.get('ObjectExpression'), firstArg)) {
166
+ if (keys.every(k => obj.properties.some((p) => p.type === 'Property' &&
167
+ ((p.key.type === 'Literal' && p.key.value === k) || (p.key.type === 'Identifier' && p.key.name === k)))))
168
+ return node;
169
+ }
170
+ }
171
+ return null;
172
+ }
173
+ findFunctionsContainingStrings(root, ...strings) {
174
+ let rarest = strings[0];
175
+ let rarestCount = (this.literalsByValue.get(rarest) || []).length;
176
+ for (let i = 1; i < strings.length; i++) {
177
+ const count = (this.literalsByValue.get(strings[i]) || []).length;
178
+ if (count < rarestCount) {
179
+ rarest = strings[i];
180
+ rarestCount = count;
181
+ }
182
+ }
183
+ const seen = new Set();
184
+ const results = [];
185
+ for (const lit of this._inRange(this.literalsByValue.get(rarest), root)) {
186
+ const fn = this.enclosingFunction(lit);
187
+ if (!fn || seen.has(fn))
188
+ continue;
189
+ seen.add(fn);
190
+ if (strings.every(s => (this.literalsByValue.get(s) || []).some(l => l.start >= fn.start && l.end <= fn.end)))
191
+ results.push(fn);
192
+ }
193
+ return results;
194
+ }
195
+ getDestructuredName(objPattern, propKey) {
196
+ for (const prop of objPattern.properties) {
197
+ if (prop.type === 'RestElement')
198
+ continue;
199
+ const k = prop.key;
200
+ if ((k.type === 'Identifier' && k.name === propKey) || (k.type === 'Literal' && k.value === propKey)) {
201
+ if (prop.value.type === 'Identifier')
202
+ return prop.value.name;
203
+ if (prop.value.type === 'AssignmentPattern' && prop.value.left.type === 'Identifier')
204
+ return prop.value.left.name;
205
+ }
206
+ }
207
+ return null;
208
+ }
209
+ // ── Internal helpers ───────────────────────────────────────────────────
210
+ _inRange(nodes, root) {
211
+ if (!nodes)
212
+ return [];
213
+ if (!root || root === this.ast)
214
+ return nodes;
215
+ return nodes.filter(n => n.start >= root.start && n.end <= root.end);
216
+ }
217
+ _lowerBound(target) {
218
+ let lo = 0;
219
+ let hi = this.allNodes.length;
220
+ while (lo < hi) {
221
+ const mid = (lo + hi) >> 1;
222
+ if (this.allNodes[mid].start < target)
223
+ lo = mid + 1;
224
+ else
225
+ hi = mid;
226
+ }
227
+ return lo;
228
+ }
229
+ /** Walk up the parent chain to find the nearest ancestor of a given type. */
230
+ ancestor(node, type) {
231
+ let current = this.parentMap.get(node);
232
+ while (current) {
233
+ if (current.type === type)
234
+ return current;
235
+ current = this.parentMap.get(current);
236
+ }
237
+ return null;
238
+ }
239
+ enclosingFunction(node) {
240
+ let current = this.parentMap.get(node);
241
+ while (current) {
242
+ if (current.type === 'FunctionDeclaration' || current.type === 'FunctionExpression' || current.type === 'ArrowFunctionExpression')
243
+ return current;
244
+ current = this.parentMap.get(current);
245
+ }
246
+ return null;
247
+ }
248
+ }
249
+ // ═══════════════════════════════════════════════════════════════════════════
250
+ // Source Editor
251
+ // ═══════════════════════════════════════════════════════════════════════════
252
+ export class SourceEditor {
253
+ edits = [];
254
+ insertAt(pos, text) {
255
+ this.edits.push({ pos, deleteCount: 0, text });
256
+ }
257
+ replaceRange(start, end, text) {
258
+ this.edits.push({ pos: start, deleteCount: end - start, text });
259
+ }
260
+ apply(src) {
261
+ const sorted = [...this.edits].sort((a, b) => b.pos - a.pos);
262
+ let result = src;
263
+ for (const edit of sorted) {
264
+ result = result.slice(0, edit.pos) + edit.text + result.slice(edit.pos + edit.deleteCount);
265
+ }
266
+ return result;
267
+ }
268
+ }
269
+ // ═══════════════════════════════════════════════════════════════════════════
270
+ // Context builder
271
+ // ═══════════════════════════════════════════════════════════════════════════
272
+ /**
273
+ * Build the standard patch context from source + AST index + editor.
274
+ * Shared by transform.ts (sequential) and workers (parallel).
275
+ */
276
+ export function buildContext(source, index, editor) {
277
+ return {
278
+ ast: index.ast,
279
+ source,
280
+ editor,
281
+ index,
282
+ find: {
283
+ findFirst: (root, pred) => index.findFirst(root, pred),
284
+ findAll: (root, pred) => index.findAll(root, pred),
285
+ walkAST,
286
+ },
287
+ query: {
288
+ findArrayWithConsecutiveStrings: (root, s1, s2) => index.findArrayWithConsecutiveStrings(root, s1, s2),
289
+ findObjectWithStringProps: (root, pp) => index.findObjectWithStringProps(root, pp),
290
+ findHookCallWithObjectKeys: (root, hn, keys) => index.findHookCallWithObjectKeys(root, hn, keys),
291
+ findFunctionsContainingStrings: (root, ...strings) => index.findFunctionsContainingStrings(root, ...strings),
292
+ getDestructuredName: (obj, key) => index.getDestructuredName(obj, key),
293
+ },
294
+ src: (node) => source.slice(node.start, node.end),
295
+ assert(condition, message) {
296
+ if (!condition)
297
+ throw new Error(`transform: ${message}`);
298
+ },
299
+ getFunctionName(fn) {
300
+ if (fn.type === 'FunctionDeclaration' && fn.id)
301
+ return fn.id.name;
302
+ const before = source.slice(Math.max(0, fn.start - 100), fn.start);
303
+ const m = before.match(/(?:^|[,;{}\s])(\w+)\s*=\s*$/);
304
+ return m ? m[1] : null;
305
+ },
306
+ };
307
+ }
308
+ //# sourceMappingURL=ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.js","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * cx-setup — Configure Claude Code Extensions
4
+ *
5
+ * Standalone tool for managing which patches cx applies.
6
+ *
7
+ * Usage:
8
+ * cx-setup Interactive TUI
9
+ * cx-setup list Show patch status
10
+ * cx-setup enable <id> Enable a patch
11
+ * cx-setup disable <id> Disable a patch
12
+ * cx-setup reset Re-enable all patches
13
+ */
14
+ export {};
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * cx-setup — Configure Claude Code Extensions
4
+ *
5
+ * Standalone tool for managing which patches cx applies.
6
+ *
7
+ * Usage:
8
+ * cx-setup Interactive TUI
9
+ * cx-setup list Show patch status
10
+ * cx-setup enable <id> Enable a patch
11
+ * cx-setup disable <id> Disable a patch
12
+ * cx-setup reset Re-enable all patches
13
+ */
14
+ import { existsSync, readFileSync, writeFileSync, rmSync } from 'fs';
15
+ import { resolve, dirname } from 'path';
16
+ import { fileURLToPath } from 'url';
17
+ import { listPatches } from './transform.js';
18
+ const __dirname = dirname(fileURLToPath(import.meta.url));
19
+ const CONFIG_PATH = resolve(__dirname, '..', '.cx-patches.json');
20
+ const CACHE_DIR = resolve(__dirname, '..', '.cache');
21
+ const DIM = '\x1b[2m', BOLD = '\x1b[1m', GREEN = '\x1b[32m', RESET = '\x1b[0m';
22
+ // ── Config helpers ────────────────────────────────────────────────────────
23
+ function loadConfig() {
24
+ if (!existsSync(CONFIG_PATH))
25
+ return {};
26
+ try {
27
+ return JSON.parse(readFileSync(CONFIG_PATH, 'utf-8')).patches || {};
28
+ }
29
+ catch {
30
+ return {};
31
+ }
32
+ }
33
+ function saveConfig(patches) {
34
+ writeFileSync(CONFIG_PATH, JSON.stringify({ patches }, null, 2) + '\n');
35
+ invalidateCache();
36
+ }
37
+ function invalidateCache() {
38
+ try {
39
+ rmSync(CACHE_DIR, { recursive: true, force: true });
40
+ }
41
+ catch { /* ok */ }
42
+ }
43
+ // ── Commands ──────────────────────────────────────────────────────────────
44
+ const cmd = process.argv[2];
45
+ const arg = process.argv[3];
46
+ if (!cmd) {
47
+ // Interactive TUI
48
+ const { default: setup } = await import('./setup.js');
49
+ setup();
50
+ }
51
+ else if (cmd === 'list') {
52
+ const config = loadConfig();
53
+ const all = listPatches();
54
+ console.log(`\n ${BOLD}cx patches${RESET}\n`);
55
+ for (const p of all) {
56
+ const on = config[p.id] !== false;
57
+ const icon = on ? `${GREEN}✔${RESET}` : `${DIM}○${RESET}`;
58
+ console.log(` ${icon} ${p.id.padEnd(16)}${DIM}${p.description}${RESET}`);
59
+ }
60
+ console.log(`\n Run ${BOLD}cx-setup${RESET} to toggle interactively.\n`);
61
+ }
62
+ else if (cmd === 'enable') {
63
+ if (!arg) {
64
+ console.error('Usage: cx-setup enable <patch-id>');
65
+ process.exit(1);
66
+ }
67
+ const all = listPatches();
68
+ if (!all.find(p => p.id === arg)) {
69
+ console.error(`Unknown patch: "${arg}". Available: ${all.map(p => p.id).join(', ')}`);
70
+ process.exit(1);
71
+ }
72
+ const config = loadConfig();
73
+ config[arg] = true;
74
+ saveConfig(config);
75
+ console.log(` ${GREEN}✔${RESET} ${BOLD}${arg}${RESET} enabled`);
76
+ }
77
+ else if (cmd === 'disable') {
78
+ if (!arg) {
79
+ console.error('Usage: cx-setup disable <patch-id>');
80
+ process.exit(1);
81
+ }
82
+ const all = listPatches();
83
+ if (!all.find(p => p.id === arg)) {
84
+ console.error(`Unknown patch: "${arg}". Available: ${all.map(p => p.id).join(', ')}`);
85
+ process.exit(1);
86
+ }
87
+ const config = loadConfig();
88
+ config[arg] = false;
89
+ saveConfig(config);
90
+ console.log(` ${DIM}○${RESET} ${BOLD}${arg}${RESET} disabled`);
91
+ }
92
+ else if (cmd === 'reset') {
93
+ try {
94
+ rmSync(CONFIG_PATH, { force: true });
95
+ }
96
+ catch { /* ok */ }
97
+ invalidateCache();
98
+ console.log(` ${GREEN}✔${RESET} Config reset — all patches enabled.`);
99
+ }
100
+ else {
101
+ console.error(`Unknown command: ${cmd}`);
102
+ console.error(`\nUsage:`);
103
+ console.error(` cx-setup Interactive configurator`);
104
+ console.error(` cx-setup list Show patch status`);
105
+ console.error(` cx-setup enable <id> Enable a patch`);
106
+ console.error(` cx-setup disable <id> Disable a patch`);
107
+ console.error(` cx-setup reset Re-enable all patches`);
108
+ process.exit(1);
109
+ }
110
+ //# sourceMappingURL=cli-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-setup.js","sourceRoot":"","sources":["../src/cli-setup.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * cx — Claude Code Extensions
4
+ *
5
+ * Drop-in replacement for `claude`. Applies enabled patches at runtime
6
+ * via AST transformation. The original cli.js is never modified.
7
+ * All arguments pass through to claude untouched.
8
+ *
9
+ * Subcommands:
10
+ * cx setup — interactive patch configurator
11
+ * cx list — show patch status
12
+ * cx reload — signal a running cx instance to reload Claude
13
+ * cx [args] — run patched Claude (with auto-reload support)
14
+ *
15
+ * Reload: type `! cx reload` inside Claude to restart the session
16
+ * with fresh patches applied. The conversation resumes via --continue.
17
+ */
18
+ export {};