claude-code-extensions 0.1.0 → 0.1.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/ast.d.ts +43 -0
- package/dist/ast.js +308 -0
- package/dist/ast.js.map +1 -0
- package/dist/cli-list.d.ts +5 -0
- package/dist/cli-list.js +33 -0
- package/dist/cli-list.js.map +1 -0
- package/dist/cli-reload.d.ts +7 -0
- package/dist/cli-reload.js +24 -0
- package/dist/cli-reload.js.map +1 -0
- package/dist/cli-setup.d.ts +14 -0
- package/dist/cli-setup.js +110 -0
- package/dist/cli-setup.js.map +1 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.js +183 -0
- package/dist/cli.js.map +1 -0
- package/dist/patch-worker.d.ts +6 -0
- package/dist/patch-worker.js +27 -0
- package/dist/patch-worker.js.map +1 -0
- package/dist/patches/always-show-context.d.ts +23 -0
- package/dist/patches/always-show-context.js +97 -0
- package/dist/patches/always-show-context.js.map +1 -0
- package/dist/patches/always-show-thinking.d.ts +18 -0
- package/dist/patches/always-show-thinking.js +55 -0
- package/dist/patches/always-show-thinking.js.map +1 -0
- package/dist/patches/banner.d.ts +10 -0
- package/dist/patches/banner.js +105 -0
- package/dist/patches/banner.js.map +1 -0
- package/dist/patches/cd-command.d.ts +16 -0
- package/dist/patches/cd-command.js +89 -0
- package/dist/patches/cd-command.js.map +1 -0
- package/dist/patches/cx-badge.d.ts +10 -0
- package/dist/patches/cx-badge.js +115 -0
- package/dist/patches/cx-badge.js.map +1 -0
- package/dist/patches/cx-resume-commands.d.ts +14 -0
- package/dist/patches/cx-resume-commands.js +53 -0
- package/dist/patches/cx-resume-commands.js.map +1 -0
- package/dist/patches/disable-paste-collapse.d.ts +16 -0
- package/dist/patches/disable-paste-collapse.js +49 -0
- package/dist/patches/disable-paste-collapse.js.map +1 -0
- package/dist/patches/disable-telemetry.d.ts +13 -0
- package/dist/patches/disable-telemetry.js +76 -0
- package/dist/patches/disable-telemetry.js.map +1 -0
- package/{patches/index.js → dist/patches/index.d.ts} +2 -0
- package/dist/patches/index.js +20 -0
- package/dist/patches/index.js.map +1 -0
- package/dist/patches/no-attribution.d.ts +15 -0
- package/dist/patches/no-attribution.js +42 -0
- package/dist/patches/no-attribution.js.map +1 -0
- package/dist/patches/no-feedback.d.ts +12 -0
- package/dist/patches/no-feedback.js +31 -0
- package/dist/patches/no-feedback.js.map +1 -0
- package/dist/patches/no-npm-warning.d.ts +9 -0
- package/dist/patches/no-npm-warning.js +31 -0
- package/dist/patches/no-npm-warning.js.map +1 -0
- package/dist/patches/no-tips.d.ts +10 -0
- package/dist/patches/no-tips.js +26 -0
- package/dist/patches/no-tips.js.map +1 -0
- package/dist/patches/persist-max-effort.d.ts +15 -0
- package/dist/patches/persist-max-effort.js +75 -0
- package/dist/patches/persist-max-effort.js.map +1 -0
- package/dist/patches/queue.d.ts +10 -0
- package/dist/patches/queue.js +202 -0
- package/dist/patches/queue.js.map +1 -0
- package/dist/patches/random-clawd.d.ts +9 -0
- package/dist/patches/random-clawd.js +49 -0
- package/dist/patches/random-clawd.js.map +1 -0
- package/dist/patches/reload.d.ts +10 -0
- package/dist/patches/reload.js +50 -0
- package/dist/patches/reload.js.map +1 -0
- package/dist/patches/show-file-in-collapsed-read.d.ts +17 -0
- package/dist/patches/show-file-in-collapsed-read.js +151 -0
- package/dist/patches/show-file-in-collapsed-read.js.map +1 -0
- package/dist/patches/simple-spinner.d.ts +12 -0
- package/dist/patches/simple-spinner.js +31 -0
- package/dist/patches/simple-spinner.js.map +1 -0
- package/dist/patches/swap-enter-submit.d.ts +26 -0
- package/dist/patches/swap-enter-submit.js +155 -0
- package/dist/patches/swap-enter-submit.js.map +1 -0
- package/dist/setup.d.ts +11 -0
- package/dist/setup.js +268 -0
- package/dist/setup.js.map +1 -0
- package/dist/transform-worker.d.ts +10 -0
- package/dist/transform-worker.js +35 -0
- package/dist/transform-worker.js.map +1 -0
- package/dist/transform.d.ts +12 -0
- package/dist/transform.js +83 -0
- package/dist/transform.js.map +1 -0
- package/dist/types.d.ts +105 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +19 -11
- package/ast.js +0 -276
- package/cx +0 -228
- package/cx-setup +0 -101
- package/patch-worker.js +0 -31
- package/patches/always-show-context.js +0 -123
- package/patches/always-show-thinking.js +0 -65
- package/patches/banner.js +0 -58
- package/patches/cd-command.js +0 -104
- package/patches/cx-badge.js +0 -112
- package/patches/cx-resume-commands.js +0 -58
- package/patches/disable-paste-collapse.js +0 -52
- package/patches/disable-telemetry.js +0 -84
- package/patches/no-attribution.js +0 -55
- package/patches/no-npm-warning.js +0 -32
- package/patches/no-tips.js +0 -29
- package/patches/persist-max-effort.js +0 -70
- package/patches/queue.js +0 -215
- package/patches/random-clawd.js +0 -52
- package/patches/reload.js +0 -68
- package/patches/show-file-in-collapsed-read.js +0 -178
- package/patches/swap-enter-submit.js +0 -188
- package/setup.js +0 -222
- package/transform-worker.js +0 -38
- package/transform.js +0 -99
package/dist/setup.js
ADDED
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive patch configurator.
|
|
3
|
+
* Toggle patches on/off with a keyboard-driven TUI.
|
|
4
|
+
*
|
|
5
|
+
* Called by `cx setup` — not meant to be run directly.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, writeFileSync, existsSync, rmSync } from 'fs';
|
|
8
|
+
import { resolve, dirname } from 'path';
|
|
9
|
+
import { fileURLToPath } from 'url';
|
|
10
|
+
import { listPatches } from './transform.js';
|
|
11
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
const CONFIG_PATH = resolve(__dirname, '..', '.cx-patches.json');
|
|
13
|
+
// ── Config persistence ────────────────────────────────────────────────────
|
|
14
|
+
function loadConfig() {
|
|
15
|
+
if (!existsSync(CONFIG_PATH))
|
|
16
|
+
return { patches: {} };
|
|
17
|
+
try {
|
|
18
|
+
return JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return { patches: {} };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function saveConfig(patches) {
|
|
25
|
+
writeFileSync(CONFIG_PATH, JSON.stringify({ patches }, null, 2) + '\n');
|
|
26
|
+
}
|
|
27
|
+
const groups = [
|
|
28
|
+
{ label: 'Display', ids: [
|
|
29
|
+
'always-show-thinking', 'disable-paste-collapse',
|
|
30
|
+
'show-file-in-collapsed-read', 'cx-badge',
|
|
31
|
+
'cx-resume-commands', 'random-clawd',
|
|
32
|
+
] },
|
|
33
|
+
{ label: 'Input', ids: [
|
|
34
|
+
'queue', 'swap-enter-submit', 'reload',
|
|
35
|
+
] },
|
|
36
|
+
{ label: 'Spinner', ids: [
|
|
37
|
+
'no-tips', 'simple-spinner',
|
|
38
|
+
] },
|
|
39
|
+
{ label: 'Behavior', ids: [
|
|
40
|
+
'persist-max-effort', 'no-npm-warning', 'no-feedback',
|
|
41
|
+
] },
|
|
42
|
+
];
|
|
43
|
+
// ── State ─────────────────────────────────────────────────────────────────
|
|
44
|
+
const patchMap = new Map(listPatches().map(p => [p.id, p]));
|
|
45
|
+
// Patches that are always on and should not appear in the setup TUI
|
|
46
|
+
const hidden = new Set(['banner']);
|
|
47
|
+
// Build ordered list from groups, append any ungrouped patches at the end
|
|
48
|
+
const groupedIds = new Set(groups.flatMap(g => g.ids));
|
|
49
|
+
const ungrouped = listPatches().filter(p => !groupedIds.has(p.id) && !hidden.has(p.id));
|
|
50
|
+
if (ungrouped.length)
|
|
51
|
+
groups.push({ label: 'Other', ids: ungrouped.map(p => p.id) });
|
|
52
|
+
const allPatchList = groups.flatMap(g => g.ids.map(id => patchMap.get(id)).filter((p) => !!p));
|
|
53
|
+
// sectionStarts[i] = label if patch i starts a new section
|
|
54
|
+
const sectionStarts = {};
|
|
55
|
+
let idx = 0;
|
|
56
|
+
for (const g of groups) {
|
|
57
|
+
const valid = g.ids.filter(id => patchMap.has(id));
|
|
58
|
+
if (valid.length) {
|
|
59
|
+
sectionStarts[idx] = g.label;
|
|
60
|
+
idx += valid.length;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const config = loadConfig();
|
|
64
|
+
const states = allPatchList.map(p => config.patches?.[p.id] !== undefined ? config.patches[p.id] : (p.defaultEnabled !== false));
|
|
65
|
+
let cursor = 0;
|
|
66
|
+
let dirty = false;
|
|
67
|
+
let resetPending = false;
|
|
68
|
+
let firstRunMode = false;
|
|
69
|
+
// ── Rendering ─────────────────────────────────────────────────────────────
|
|
70
|
+
const ESC = '\x1b';
|
|
71
|
+
const CLEAR = `${ESC}[2J${ESC}[H`;
|
|
72
|
+
const HIDE_CURSOR = `${ESC}[?25l`;
|
|
73
|
+
const SHOW_CURSOR = `${ESC}[?25h`;
|
|
74
|
+
const BOLD = `${ESC}[1m`;
|
|
75
|
+
const DIM = `${ESC}[2m`;
|
|
76
|
+
const RESET = `${ESC}[0m`;
|
|
77
|
+
const GREEN = `${ESC}[32m`;
|
|
78
|
+
const YELLOW = `${ESC}[33m`;
|
|
79
|
+
const CYAN = `${ESC}[36m`;
|
|
80
|
+
const WHITE = `${ESC}[37m`;
|
|
81
|
+
const BG_HIGHLIGHT = `${ESC}[48;5;236m`;
|
|
82
|
+
const maxId = Math.max(...allPatchList.map(p => p.id.length));
|
|
83
|
+
function render() {
|
|
84
|
+
const rows = process.stdout.rows || 24;
|
|
85
|
+
const lines = [];
|
|
86
|
+
const patchLineIndex = [];
|
|
87
|
+
// Header
|
|
88
|
+
lines.push('');
|
|
89
|
+
if (firstRunMode) {
|
|
90
|
+
lines.push(` ${BOLD}${CYAN}Welcome to cx${RESET} ${DIM}— Claude Code Extensions${RESET}`);
|
|
91
|
+
lines.push(` ${DIM}These patches will be applied to Claude Code at runtime.${RESET}`);
|
|
92
|
+
lines.push(` ${DIM}Press Enter to proceed with defaults, or toggle patches with Space.${RESET}`);
|
|
93
|
+
lines.push(` ${DIM}You can always change this later by running ${RESET}${BOLD}cx setup${RESET}${DIM}.${RESET}`);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
lines.push(` ${BOLD}${CYAN}cx setup${RESET} ${DIM}— toggle patches on/off${RESET}`);
|
|
97
|
+
}
|
|
98
|
+
// Patch list with section headers
|
|
99
|
+
for (let i = 0; i < allPatchList.length; i++) {
|
|
100
|
+
if (sectionStarts[i]) {
|
|
101
|
+
lines.push('');
|
|
102
|
+
lines.push(` ${DIM}${sectionStarts[i]}${RESET}`);
|
|
103
|
+
}
|
|
104
|
+
const p = allPatchList[i];
|
|
105
|
+
const on = states[i];
|
|
106
|
+
const sel = i === cursor;
|
|
107
|
+
const bg = sel ? BG_HIGHLIGHT : '';
|
|
108
|
+
const pointer = sel ? `${bg}${WHITE}> ` : `${bg} `;
|
|
109
|
+
const checkbox = on ? `${GREEN}✔${RESET}${bg}` : `${DIM}○${RESET}${bg}`;
|
|
110
|
+
const name = sel ? `${BOLD}${WHITE}${p.id}${RESET}${bg}` : p.id;
|
|
111
|
+
const pad = ' '.repeat(maxId - p.id.length + 2);
|
|
112
|
+
const desc = `${DIM}${p.description}${RESET}`;
|
|
113
|
+
patchLineIndex[i] = lines.length;
|
|
114
|
+
lines.push(`${pointer}${checkbox} ${name}${pad}${desc}${RESET}`);
|
|
115
|
+
}
|
|
116
|
+
// Footer
|
|
117
|
+
lines.push('');
|
|
118
|
+
if (resetPending) {
|
|
119
|
+
lines.push(` ${YELLOW}Press r again to reset all patches to defaults${RESET}`);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
let footer = ` ${DIM}↑↓${RESET} navigate ${DIM}space${RESET} toggle ${DIM}r${RESET} reset ${DIM}enter${RESET} save ${DIM}esc${RESET} cancel`;
|
|
123
|
+
if (dirty) {
|
|
124
|
+
footer += ` ${YELLOW}● unsaved${RESET}`;
|
|
125
|
+
}
|
|
126
|
+
lines.push(footer);
|
|
127
|
+
}
|
|
128
|
+
const prefix = CLEAR + HIDE_CURSOR;
|
|
129
|
+
// Everything fits — render as-is
|
|
130
|
+
if (lines.length <= rows) {
|
|
131
|
+
process.stdout.write(prefix + lines.join('\n') + '\n');
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
// Scrolling — reserve 2 lines for indicators
|
|
135
|
+
const usable = Math.max(1, rows - 2);
|
|
136
|
+
const target = patchLineIndex[cursor];
|
|
137
|
+
let scrollTop = Math.max(0, target - Math.floor(usable / 2));
|
|
138
|
+
scrollTop = Math.min(scrollTop, lines.length - usable);
|
|
139
|
+
const visible = lines.slice(scrollTop, scrollTop + usable);
|
|
140
|
+
const top = scrollTop > 0 ? ` ${DIM}↑ more${RESET}` : '';
|
|
141
|
+
const bottom = scrollTop + usable < lines.length ? ` ${DIM}↓ more${RESET}` : '';
|
|
142
|
+
process.stdout.write(prefix + top + '\n' + visible.join('\n') + '\n' + bottom + '\n');
|
|
143
|
+
}
|
|
144
|
+
// ── Input handling ────────────────────────────────────────────────────────
|
|
145
|
+
function cleanup() {
|
|
146
|
+
process.stdout.write(SHOW_CURSOR + CLEAR);
|
|
147
|
+
process.stdout.removeListener('resize', render);
|
|
148
|
+
process.stdin.setRawMode(false);
|
|
149
|
+
process.stdin.pause();
|
|
150
|
+
}
|
|
151
|
+
export default function setup(opts) {
|
|
152
|
+
const isFirstRun = opts?.firstRun ?? false;
|
|
153
|
+
firstRunMode = isFirstRun;
|
|
154
|
+
if (!process.stdin.isTTY) {
|
|
155
|
+
console.error('cx setup requires an interactive terminal.');
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
return new Promise((resolveSetup) => {
|
|
159
|
+
process.stdin.setRawMode(true);
|
|
160
|
+
process.stdin.resume();
|
|
161
|
+
process.stdin.setEncoding('utf8');
|
|
162
|
+
process.stdout.on('resize', render);
|
|
163
|
+
render();
|
|
164
|
+
const onKey = (key) => {
|
|
165
|
+
// Ctrl+C
|
|
166
|
+
if (key === '\x03') {
|
|
167
|
+
cleanup();
|
|
168
|
+
if (isFirstRun) {
|
|
169
|
+
// Save defaults and continue
|
|
170
|
+
const patches = {};
|
|
171
|
+
for (let i = 0; i < allPatchList.length; i++) {
|
|
172
|
+
patches[allPatchList[i].id] = states[i];
|
|
173
|
+
}
|
|
174
|
+
saveConfig(patches);
|
|
175
|
+
done();
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
process.exit(0);
|
|
179
|
+
}
|
|
180
|
+
// ESC
|
|
181
|
+
if (key === '\x1b' || key === 'q') {
|
|
182
|
+
cleanup();
|
|
183
|
+
if (isFirstRun) {
|
|
184
|
+
// Save defaults and continue
|
|
185
|
+
const patches = {};
|
|
186
|
+
for (let i = 0; i < allPatchList.length; i++) {
|
|
187
|
+
patches[allPatchList[i].id] = states[i];
|
|
188
|
+
}
|
|
189
|
+
saveConfig(patches);
|
|
190
|
+
console.log(` ${DIM}Using default patches.${RESET}\n`);
|
|
191
|
+
done();
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
console.log(' Cancelled — no changes saved.\n');
|
|
195
|
+
process.exit(0);
|
|
196
|
+
}
|
|
197
|
+
// Reset to defaults (two-press confirmation)
|
|
198
|
+
if (key === 'r') {
|
|
199
|
+
if (resetPending) {
|
|
200
|
+
// Second press — perform the reset
|
|
201
|
+
for (let i = 0; i < allPatchList.length; i++) {
|
|
202
|
+
states[i] = allPatchList[i].defaultEnabled !== false;
|
|
203
|
+
}
|
|
204
|
+
dirty = true;
|
|
205
|
+
resetPending = false;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
// First press — enter pending state
|
|
209
|
+
resetPending = true;
|
|
210
|
+
}
|
|
211
|
+
render();
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
// Any other key cancels a pending reset
|
|
215
|
+
if (resetPending) {
|
|
216
|
+
resetPending = false;
|
|
217
|
+
}
|
|
218
|
+
// Arrow up / k
|
|
219
|
+
if (key === '\x1b[A' || key === 'k') {
|
|
220
|
+
cursor = Math.max(0, cursor - 1);
|
|
221
|
+
}
|
|
222
|
+
// Arrow down / j
|
|
223
|
+
if (key === '\x1b[B' || key === 'j') {
|
|
224
|
+
cursor = Math.min(allPatchList.length - 1, cursor + 1);
|
|
225
|
+
}
|
|
226
|
+
// Space — toggle
|
|
227
|
+
if (key === ' ') {
|
|
228
|
+
states[cursor] = !states[cursor];
|
|
229
|
+
dirty = true;
|
|
230
|
+
}
|
|
231
|
+
// Enter — save and exit
|
|
232
|
+
if (key === '\r' || key === '\n') {
|
|
233
|
+
const patches = {};
|
|
234
|
+
for (let i = 0; i < allPatchList.length; i++) {
|
|
235
|
+
patches[allPatchList[i].id] = states[i];
|
|
236
|
+
}
|
|
237
|
+
saveConfig(patches);
|
|
238
|
+
cleanup();
|
|
239
|
+
// Delete cache so next run re-transforms
|
|
240
|
+
try {
|
|
241
|
+
rmSync(resolve(__dirname, '..', '.cache'), { recursive: true, force: true });
|
|
242
|
+
}
|
|
243
|
+
catch { /* ok */ }
|
|
244
|
+
console.log(` ${GREEN}✔${RESET} Config saved to .cx-patches.json\n`);
|
|
245
|
+
const enabled = allPatchList.filter((_, i) => states[i]).map(p => p.id);
|
|
246
|
+
const disabled = allPatchList.filter((_, i) => !states[i]).map(p => p.id);
|
|
247
|
+
if (enabled.length)
|
|
248
|
+
console.log(` ${GREEN}enabled${RESET} ${enabled.join(', ')}`);
|
|
249
|
+
if (disabled.length)
|
|
250
|
+
console.log(` ${DIM}disabled${RESET} ${disabled.join(', ')}`);
|
|
251
|
+
if (isFirstRun) {
|
|
252
|
+
console.log('');
|
|
253
|
+
done();
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
console.log(`\n Run ${BOLD}cx${RESET} to start with these patches.\n`);
|
|
257
|
+
process.exit(0);
|
|
258
|
+
}
|
|
259
|
+
render();
|
|
260
|
+
};
|
|
261
|
+
process.stdin.on('data', onKey);
|
|
262
|
+
function done() {
|
|
263
|
+
process.stdin.removeListener('data', onKey);
|
|
264
|
+
resolveSetup();
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single worker that does all heavy work: parse, index, apply patches.
|
|
3
|
+
* Sends progress messages so the main thread can update the UI.
|
|
4
|
+
*
|
|
5
|
+
* Receives: { source, patchIds, patchesDir }
|
|
6
|
+
* Sends: { type: 'ready' } — parse + index done
|
|
7
|
+
* { type: 'done', id } — one patch applied
|
|
8
|
+
* { type: 'complete', patched } — final result
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single worker that does all heavy work: parse, index, apply patches.
|
|
3
|
+
* Sends progress messages so the main thread can update the UI.
|
|
4
|
+
*
|
|
5
|
+
* Receives: { source, patchIds, patchesDir }
|
|
6
|
+
* Sends: { type: 'ready' } — parse + index done
|
|
7
|
+
* { type: 'done', id } — one patch applied
|
|
8
|
+
* { type: 'complete', patched } — final result
|
|
9
|
+
*/
|
|
10
|
+
import { workerData, parentPort } from 'worker_threads';
|
|
11
|
+
import * as acorn from 'acorn';
|
|
12
|
+
import { ASTIndex, SourceEditor, buildContext } from './ast.js';
|
|
13
|
+
const { source, patchIds, patchesDir } = workerData;
|
|
14
|
+
try {
|
|
15
|
+
const ast = acorn.parse(source, { ecmaVersion: 'latest', sourceType: 'module', allowHashBang: true });
|
|
16
|
+
const index = new ASTIndex(ast);
|
|
17
|
+
parentPort.postMessage({ type: 'ready' });
|
|
18
|
+
const editor = new SourceEditor();
|
|
19
|
+
const ctx = buildContext(source, index, editor);
|
|
20
|
+
for (const id of patchIds) {
|
|
21
|
+
const mod = await import(`${patchesDir}/${id}.js`);
|
|
22
|
+
try {
|
|
23
|
+
mod.default.apply(ctx);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
throw new Error(`Patch "${id}" failed: ${err.message}`);
|
|
27
|
+
}
|
|
28
|
+
parentPort.postMessage({ type: 'done', id });
|
|
29
|
+
}
|
|
30
|
+
parentPort.postMessage({ type: 'complete', patched: editor.apply(source) });
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
parentPort.postMessage({ type: 'error', error: err.message });
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=transform-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-worker.js","sourceRoot":"","sources":["../src/transform-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGhE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,UAAwB,CAAC;AAElE,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,CAAuB,CAAC;IAC5H,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,UAAW,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAEhD,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,UAAU,IAAI,EAAE,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC;YACF,GAAG,CAAC,OAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,aAAc,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,UAAW,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,UAAW,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC/E,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,UAAW,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AST transform framework for @anthropic-ai/claude-code
|
|
3
|
+
*
|
|
4
|
+
* Parses the minified bundle with acorn and applies modular patches
|
|
5
|
+
* from the patches/ directory. Each patch receives a context object
|
|
6
|
+
* with the AST, source, editor, and query helpers.
|
|
7
|
+
*/
|
|
8
|
+
import type { PatchInfo, TransformCallbacks } from './types.js';
|
|
9
|
+
export declare function transform(source: string, only?: string[] | null, exclude?: string[] | null, callbacks?: TransformCallbacks): string;
|
|
10
|
+
export declare function transformAsync(source: string, patchIds: string[], callbacks?: TransformCallbacks): Promise<string>;
|
|
11
|
+
/** List all available patches. */
|
|
12
|
+
export declare function listPatches(): PatchInfo[];
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AST transform framework for @anthropic-ai/claude-code
|
|
3
|
+
*
|
|
4
|
+
* Parses the minified bundle with acorn and applies modular patches
|
|
5
|
+
* from the patches/ directory. Each patch receives a context object
|
|
6
|
+
* with the AST, source, editor, and query helpers.
|
|
7
|
+
*/
|
|
8
|
+
import * as acorn from 'acorn';
|
|
9
|
+
import { Worker } from 'worker_threads';
|
|
10
|
+
import { dirname, resolve } from 'path';
|
|
11
|
+
import { fileURLToPath } from 'url';
|
|
12
|
+
import { ASTIndex, SourceEditor, buildContext } from './ast.js';
|
|
13
|
+
import * as allPatches from './patches/index.js';
|
|
14
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
16
|
+
// Patch resolution
|
|
17
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
18
|
+
function resolvePatches(only, exclude) {
|
|
19
|
+
const available = Object.values(allPatches);
|
|
20
|
+
if (only) {
|
|
21
|
+
return only.map(id => {
|
|
22
|
+
const p = available.find(p => p.id === id);
|
|
23
|
+
if (!p)
|
|
24
|
+
throw new Error(`Unknown patch: "${id}". Available: ${available.map(p => p.id).join(', ')}`);
|
|
25
|
+
return p;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return available.filter(p => !exclude?.includes(p.id));
|
|
29
|
+
}
|
|
30
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
31
|
+
// Transform (sequential)
|
|
32
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
33
|
+
export function transform(source, only = null, exclude = null, callbacks = {}) {
|
|
34
|
+
const ast = acorn.parse(source, { ecmaVersion: 'latest', sourceType: 'module', allowHashBang: true });
|
|
35
|
+
const index = new ASTIndex(ast);
|
|
36
|
+
const editor = new SourceEditor();
|
|
37
|
+
const ctx = buildContext(source, index, editor);
|
|
38
|
+
const toApply = resolvePatches(only, exclude);
|
|
39
|
+
callbacks.onReady?.();
|
|
40
|
+
for (const patch of toApply) {
|
|
41
|
+
try {
|
|
42
|
+
patch.apply(ctx);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
throw new Error(`Patch "${patch.id}" failed: ${err.message}`);
|
|
46
|
+
}
|
|
47
|
+
callbacks.onDone?.(patch.id);
|
|
48
|
+
}
|
|
49
|
+
return editor.apply(source);
|
|
50
|
+
}
|
|
51
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
52
|
+
// Transform (async — single worker thread for non-blocking UI)
|
|
53
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
54
|
+
export function transformAsync(source, patchIds, callbacks = {}) {
|
|
55
|
+
const workerPath = resolve(__dirname, 'transform-worker.js');
|
|
56
|
+
const patchesDir = resolve(__dirname, 'patches');
|
|
57
|
+
return new Promise((res, rej) => {
|
|
58
|
+
const worker = new Worker(workerPath, {
|
|
59
|
+
workerData: { source, patchIds, patchesDir },
|
|
60
|
+
});
|
|
61
|
+
worker.on('message', (msg) => {
|
|
62
|
+
if (msg.type === 'ready')
|
|
63
|
+
callbacks.onReady?.();
|
|
64
|
+
else if (msg.type === 'done')
|
|
65
|
+
callbacks.onDone?.(msg.id);
|
|
66
|
+
else if (msg.type === 'complete')
|
|
67
|
+
res(msg.patched);
|
|
68
|
+
else if (msg.type === 'error')
|
|
69
|
+
rej(new Error(msg.error));
|
|
70
|
+
});
|
|
71
|
+
worker.on('error', rej);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/** List all available patches. */
|
|
75
|
+
export function listPatches() {
|
|
76
|
+
return Object.values(allPatches).map(p => ({
|
|
77
|
+
id: p.id,
|
|
78
|
+
name: p.name,
|
|
79
|
+
description: p.description,
|
|
80
|
+
defaultEnabled: p.defaultEnabled,
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for cx — Claude Code Extensions.
|
|
3
|
+
*
|
|
4
|
+
* All types used across the framework are defined here to avoid
|
|
5
|
+
* circular dependencies between modules.
|
|
6
|
+
*/
|
|
7
|
+
import type { ASTIndex } from './ast.js';
|
|
8
|
+
/**
|
|
9
|
+
* Loose AST node type for patch authors.
|
|
10
|
+
* Extends acorn positional info with an index signature so ESTree
|
|
11
|
+
* properties (value, elements, properties, callee, etc.) are
|
|
12
|
+
* accessible without casts.
|
|
13
|
+
*/
|
|
14
|
+
export interface ASTNode {
|
|
15
|
+
type: string;
|
|
16
|
+
start: number;
|
|
17
|
+
end: number;
|
|
18
|
+
[key: string]: any;
|
|
19
|
+
}
|
|
20
|
+
/** Possible values of a JS Literal node. */
|
|
21
|
+
export type LiteralValue = string | number | boolean | null | RegExp;
|
|
22
|
+
export interface SourceEdit {
|
|
23
|
+
pos: number;
|
|
24
|
+
deleteCount: number;
|
|
25
|
+
text: string;
|
|
26
|
+
}
|
|
27
|
+
/** Minimal editor interface exposed to patches. */
|
|
28
|
+
export interface PatchEditor {
|
|
29
|
+
insertAt(pos: number, text: string): void;
|
|
30
|
+
replaceRange(start: number, end: number, text: string): void;
|
|
31
|
+
}
|
|
32
|
+
export interface FindHelpers {
|
|
33
|
+
findFirst(root: ASTNode, predicate: (node: ASTNode) => boolean): ASTNode | null;
|
|
34
|
+
findAll(root: ASTNode, predicate: (node: ASTNode) => boolean): ASTNode[];
|
|
35
|
+
walkAST: (node: ASTNode) => Generator<ASTNode>;
|
|
36
|
+
}
|
|
37
|
+
export interface QueryHelpers {
|
|
38
|
+
findArrayWithConsecutiveStrings(root: ASTNode, str1: string, str2: string): ASTNode | null;
|
|
39
|
+
findObjectWithStringProps(root: ASTNode, propPairs: [string, string][]): ASTNode | null;
|
|
40
|
+
findHookCallWithObjectKeys(root: ASTNode, hookName: string, keys: string[]): ASTNode | null;
|
|
41
|
+
findFunctionsContainingStrings(root: ASTNode, ...strings: string[]): ASTNode[];
|
|
42
|
+
getDestructuredName(objPattern: ASTNode, propKey: string): string | null;
|
|
43
|
+
}
|
|
44
|
+
export interface PatchContext {
|
|
45
|
+
ast: ASTNode;
|
|
46
|
+
source: string;
|
|
47
|
+
editor: PatchEditor;
|
|
48
|
+
index: ASTIndex;
|
|
49
|
+
find: FindHelpers;
|
|
50
|
+
query: QueryHelpers;
|
|
51
|
+
src(node: ASTNode): string;
|
|
52
|
+
assert(condition: unknown, message: string): void;
|
|
53
|
+
getFunctionName(fn: ASTNode): string | null;
|
|
54
|
+
}
|
|
55
|
+
export interface Patch {
|
|
56
|
+
id: string;
|
|
57
|
+
name: string;
|
|
58
|
+
description: string;
|
|
59
|
+
defaultEnabled?: boolean;
|
|
60
|
+
apply(ctx: PatchContext): void;
|
|
61
|
+
}
|
|
62
|
+
export interface PatchInfo {
|
|
63
|
+
id: string;
|
|
64
|
+
name: string;
|
|
65
|
+
description: string;
|
|
66
|
+
defaultEnabled?: boolean;
|
|
67
|
+
}
|
|
68
|
+
export interface WorkerData {
|
|
69
|
+
source: string;
|
|
70
|
+
patchIds: string[];
|
|
71
|
+
patchesDir: string;
|
|
72
|
+
}
|
|
73
|
+
export interface PatchWorkerData {
|
|
74
|
+
source: string;
|
|
75
|
+
patchId: string;
|
|
76
|
+
patchesDir: string;
|
|
77
|
+
}
|
|
78
|
+
export type WorkerMessage = {
|
|
79
|
+
type: 'ready';
|
|
80
|
+
} | {
|
|
81
|
+
type: 'done';
|
|
82
|
+
id: string;
|
|
83
|
+
} | {
|
|
84
|
+
type: 'complete';
|
|
85
|
+
patched: string;
|
|
86
|
+
} | {
|
|
87
|
+
type: 'error';
|
|
88
|
+
error: string;
|
|
89
|
+
};
|
|
90
|
+
export type PatchWorkerMessage = {
|
|
91
|
+
type: 'ready';
|
|
92
|
+
} | {
|
|
93
|
+
type: 'done';
|
|
94
|
+
edits: SourceEdit[];
|
|
95
|
+
} | {
|
|
96
|
+
type: 'error';
|
|
97
|
+
error: string;
|
|
98
|
+
};
|
|
99
|
+
export interface CxConfig {
|
|
100
|
+
patches: Record<string, boolean>;
|
|
101
|
+
}
|
|
102
|
+
export interface TransformCallbacks {
|
|
103
|
+
onReady?(): void;
|
|
104
|
+
onDone?(id: string): void;
|
|
105
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
package/package.json
CHANGED
|
@@ -1,25 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-code-extensions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Modular, opt-in patches for @anthropic-ai/claude-code applied at runtime via AST transformation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"cx": "./
|
|
8
|
-
"cx-setup": "./
|
|
7
|
+
"cx": "./dist/cli.js",
|
|
8
|
+
"cx-setup": "./dist/cli-setup.js",
|
|
9
|
+
"cx-list": "./dist/cli-list.js",
|
|
10
|
+
"cx-reload": "./dist/cli-reload.js"
|
|
9
11
|
},
|
|
10
12
|
"files": [
|
|
11
|
-
"
|
|
12
|
-
"cx-setup",
|
|
13
|
-
"ast.js",
|
|
14
|
-
"transform.js",
|
|
15
|
-
"transform-worker.js",
|
|
16
|
-
"patch-worker.js",
|
|
17
|
-
"setup.js",
|
|
18
|
-
"patches/"
|
|
13
|
+
"dist/"
|
|
19
14
|
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"link": "tsc && npm link",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"acorn": "^8.16.0"
|
|
22
22
|
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/node": "^22.0.0",
|
|
25
|
+
"typescript": "^5.7.0"
|
|
26
|
+
},
|
|
23
27
|
"peerDependencies": {
|
|
24
28
|
"@anthropic-ai/claude-code": "*"
|
|
25
29
|
},
|
|
@@ -34,6 +38,10 @@
|
|
|
34
38
|
"extensions",
|
|
35
39
|
"patches"
|
|
36
40
|
],
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "https://github.com/magidandrew/cx"
|
|
44
|
+
},
|
|
37
45
|
"license": "MIT",
|
|
38
46
|
"engines": {
|
|
39
47
|
"node": ">=18"
|