tweakcc 3.2.1 → 3.2.3

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.
@@ -0,0 +1,4 @@
1
+ import{n as e,t}from"./index.mjs";import n from"node:fs";import{execSync as r}from"node:child_process";import i from"node-lief";const a=Buffer.from(`
2
+ ---- Bun! ----
3
+ `);function o(e,t){return e.subarray(t.offset,t.offset+t.length)}function s(e,t){return{offset:e.readUInt32LE(t),length:e.readUInt32LE(t+4)}}function c(e){return e.endsWith(`/claude`)||e===`claude`||e.endsWith(`/claude.exe`)||e===`claude.exe`}function l(e,t,n){let r=o(e,t.modulesPtr),i=Math.floor(r.length/36);for(let t=0;t<i;t++){let i=d(r,t*36),a=n(i,o(e,i.name).toString(`utf-8`),t);if(a!==void 0)return a}}function u(e){let t=0,n=e.readBigUInt64LE(t);t+=8;let r=s(e,t);t+=8;let i=e.readUInt32LE(t);return t+=4,{byteCount:n,modulesPtr:r,entryPointId:i,compileExecArgvPtr:s(e,t)}}function d(e,t){let n=t,r=s(e,n);n+=8;let i=s(e,n);n+=8;let a=s(e,n);n+=8;let o=s(e,n);n+=8;let c=e.readUInt8(n);n+=1;let l=e.readUInt8(n);n+=1;let u=e.readUInt8(n);return n+=1,{name:r,contents:i,sourcemap:a,bytecode:o,encoding:c,loader:l,moduleFormat:u,side:e.readUInt8(n)}}function f(e){if(e.length<32+a.length)throw Error(`BUN data is too small to contain trailer and offsets`);let n=e.length-a.length,r=e.subarray(n);if(t(`parseBunDataBlob: Expected trailer: ${a.toString(`hex`)}`),t(`parseBunDataBlob: Got trailer: ${r.toString(`hex`)}`),!r.equals(a))throw t(`Expected: ${a.toString(`hex`)}`),t(`Got: ${r.toString(`hex`)}`),Error(`BUN trailer bytes do not match trailer`);let i=e.length-32-a.length;return{bunOffsets:u(e.subarray(i,i+32)),bunData:e}}function p(e){if(e.length<4)throw Error(`Section data too small`);t(`extractBunDataFromSection: sectionData.length=${e.length}`);let n=e.readUInt32LE(0);t(`extractBunDataFromSection: bunDataSize from header=${n}`);let r=e.subarray(4,4+n);t(`extractBunDataFromSection: bunDataContent.length=${r.length}`);let{bunOffsets:i,bunData:a}=f(r);return{bunOffsets:i,bunData:a}}function m(e){if(!e.hasOverlay)throw Error(`ELF binary has no overlay data`);let n=e.overlay;if(t(`extractBunDataFromELFOverlay: Overlay size=${n.length} bytes`),n.length<a.length+8+32)throw Error(`ELF overlay data is too small`);let r=n.readBigUInt64LE(n.length-8);if(t(`extractBunDataFromELFOverlay: Total byte count from tail=${r}`),r<4096n||r>2n**32n-1n)throw Error(`ELF total byte count is out of range: ${r}`);let i=n.length-8-a.length,o=n.subarray(i,n.length-8);if(t(`extractBunDataFromELFOverlay: Expected trailer: ${a.toString(`hex`)}`),t(`extractBunDataFromELFOverlay: Got trailer: ${o.toString(`hex`)}`),!o.equals(a))throw Error(`BUN trailer bytes do not match trailer`);let s=n.length-8-a.length-32,c=n.subarray(s,n.length-8-a.length),l=u(c);t(`extractBunDataFromELFOverlay: Offsets.byteCount=${l.byteCount}`);let d=typeof l.byteCount==`bigint`?l.byteCount:BigInt(l.byteCount);if(d>=r)throw Error(`ELF total byte count is out of range`);let f=8+a.length+32,p=n.length-f-Number(d),m=n.subarray(p,n.length-f);return t(`extractBunDataFromELFOverlay: Extracted ${m.length} bytes of data`),{bunOffsets:l,bunData:Buffer.concat([m,c,o])}}function h(e){let t=e.getSegment(`__BUN`);if(!t)throw Error(`__BUN segment not found`);let n=t.getSection(`__bun`);if(!n)throw Error(`__bun section not found`);return p(n.content)}function g(e){let t=e.sections().find(e=>e.name===`.bun`);if(!t)throw Error(`.bun section not found`);return p(t.content)}function _(e){switch(t(`getBunData: Binary format detected as ${e.format}`),e.format){case`MachO`:return h(e);case`PE`:return g(e);case`ELF`:return m(e);default:throw Error(`Unsupported binary format: ${e.format}`)}}function v(e){try{i.logging.disable();let{bunOffsets:n,bunData:r}=_(i.parse(e));return t(`extractClaudeJsFromNativeInstallation: Got bunData, size=${r.length} bytes`),l(r,n,(e,n,i)=>{if(t(`extractClaudeJsFromNativeInstallation: Module ${i}: ${n}`),!c(n))return;let a=o(r,e.contents);return t(`extractClaudeJsFromNativeInstallation: Found claude module, contents length=${a.length}`),a.length>0?a:void 0})||(t(`extractClaudeJsFromNativeInstallation: claude module not found in any module`),null)}catch(e){return t(`extractClaudeJsFromNativeInstallation: Error during extraction:`,e),null}}function y(e,t,n){let r=[],i=[];l(e,t,(t,a)=>{let s=o(e,t.name),l;l=n&&c(a)?n:o(e,t.contents);let u=o(e,t.sourcemap),d=o(e,t.bytecode);i.push({name:s,contents:l,sourcemap:u,bytecode:d,encoding:t.encoding,loader:t.loader,moduleFormat:t.moduleFormat,side:t.side}),r.push(s,l,u,d)});let s=0,u=[];for(let e of r)u.push({offset:s,length:e.length}),s+=e.length+1;let d=s,f=i.length*36;s+=f;let p=o(e,t.compileExecArgvPtr),m=s,h=p.length;s+=h+1;let g=s;s+=32;let _=s;s+=a.length;let v=Buffer.allocUnsafe(s);v.fill(0);let y=0;for(let{offset:e,length:t}of u)t>0&&r[y].copy(v,e,0,t),v[e+t]=0,y++;h>0&&(p.copy(v,m,0,h),v[m+h]=0);for(let e=0;e<i.length;e++){let t=i[e],n=e*4,r={name:{offset:u[n].offset,length:u[n].length},contents:{offset:u[n+1].offset,length:u[n+1].length},sourcemap:{offset:u[n+2].offset,length:u[n+2].length},bytecode:{offset:u[n+3].offset,length:u[n+3].length},encoding:t.encoding,loader:t.loader,moduleFormat:t.moduleFormat,side:t.side},a=d+e*36;v.writeUInt32LE(r.name.offset,a),v.writeUInt32LE(r.name.length,a+4),a+=8,v.writeUInt32LE(r.contents.offset,a),v.writeUInt32LE(r.contents.length,a+4),a+=8,v.writeUInt32LE(r.sourcemap.offset,a),v.writeUInt32LE(r.sourcemap.length,a+4),a+=8,v.writeUInt32LE(r.bytecode.offset,a),v.writeUInt32LE(r.bytecode.length,a+4),a+=8,v.writeUInt8(r.encoding,a),v.writeUInt8(r.loader,a+1),v.writeUInt8(r.moduleFormat,a+2),v.writeUInt8(r.side,a+3)}let b={byteCount:g,modulesPtr:{offset:d,length:f},entryPointId:t.entryPointId,compileExecArgvPtr:{offset:m,length:h}},x=g,S=typeof b.byteCount==`bigint`?b.byteCount:BigInt(b.byteCount);return v.writeBigUInt64LE(S,x),x+=8,v.writeUInt32LE(b.modulesPtr.offset,x),v.writeUInt32LE(b.modulesPtr.length,x+4),x+=8,v.writeUInt32LE(b.entryPointId,x),x+=4,v.writeUInt32LE(b.compileExecArgvPtr.offset,x),v.writeUInt32LE(b.compileExecArgvPtr.length,x+4),a.copy(v,_),v}function b(e,t,r,i=!0){let a=t+`.tmp`;if(e.write(a),i){let e=n.statSync(r);n.chmodSync(a,e.mode)}try{n.renameSync(a,t)}catch(e){try{n.existsSync(a)&&n.unlinkSync(a)}catch{}throw e instanceof Error&&`code`in e&&(e.code===`ETXTBSY`||e.code===`EBUSY`||e.code===`EPERM`)?Error(`Cannot update the Claude executable while it is running.
4
+ Please close all Claude instances and try again.`):e}}function x(e){let t=Buffer.allocUnsafe(4+e.length);return t.writeUInt32LE(e.length,0),e.copy(t,4),t}function S(n,a,o,s){try{t(`repackMachO: Has code signature: ${n.hasCodeSignature}`),n.hasCodeSignature&&(t(`repackMachO: Removing code signature...`),n.removeSignature());let c=n.getSegment(`__BUN`);if(!c)throw Error(`__BUN segment not found`);let l=c.getSection(`__bun`);if(!l)throw Error(`__bun section not found`);let u=x(o);t(`repackMachO: Original section size: ${l.size}`),t(`repackMachO: Original segment fileSize: ${c.fileSize}`),t(`repackMachO: Original segment virtualSize: ${c.virtualSize}`),t(`repackMachO: New data size: ${u.length}`);let d=u.length-Number(l.size);if(d>0){let e=n.header.cpuType===i.MachO.Header.CPU_TYPE.ARM64,r=e?16384:4096,a=Math.ceil(d/r)*r;t(`repackMachO: CPU type: ${e?`ARM64`:`x86_64`}`),t(`repackMachO: Page size: ${r} bytes`),t(`repackMachO: Need to expand by ${d} bytes`),t(`repackMachO: Rounding up to page-aligned: ${a} bytes`);let o=n.extendSegment(c,a);if(t(`repackMachO: extendSegment returned: ${o}`),!o)throw Error(`Failed to extend __BUN segment`);t(`repackMachO: Section size after extend: ${l.size}`),t(`repackMachO: Segment fileSize after extend: ${c.fileSize}`),t(`repackMachO: Segment virtualSize after extend: ${c.virtualSize}`)}l.content=u,l.size=BigInt(u.length),t(`repackMachO: Final section size: ${l.size}`),t(`repackMachO: Writing modified binary to ${s}...`),b(n,s,a);try{t(`repackMachO: Re-signing binary with ad-hoc signature...`),r(`codesign -s - -f "${s}"`,{stdio:e()?`inherit`:`ignore`}),t(`repackMachO: Code signing completed successfully`)}catch(e){console.warn(`Warning: Failed to re-sign binary. The binary may not run correctly on macOS:`,e)}t(`repackMachO: Write completed successfully`)}catch(e){throw console.error(`repackMachO failed:`,e),e}}function C(e,n,r,i){try{let a=e.sections().find(e=>e.name===`.bun`);if(!a)throw Error(`.bun section not found`);let o=x(r);t(`repackPE: Original section size: ${a.size}, virtual size: ${a.virtualSize}`),t(`repackPE: New data size: ${o.length}`),a.content=o,a.virtualSize=BigInt(o.length),a.size=BigInt(o.length),t(`repackPE: Writing modified binary to ${i}...`),b(e,i,n,!1),t(`repackPE: Write completed successfully`)}catch(e){throw console.error(`repackPE failed:`,e),e}}function w(e,n,r,i){try{let a=Buffer.allocUnsafe(r.length+8);r.copy(a,0),a.writeBigUInt64LE(BigInt(r.length),r.length),t(`repackELF: Setting overlay data (${a.length} bytes)`),e.overlay=a,t(`repackELF: Writing modified binary to ${i}...`),b(e,i,n),t(`repackELF: Write completed successfully`)}catch(e){throw console.error(`repackELF failed:`,e),e}}function T(e,t,n){i.logging.disable();let r=i.parse(e),{bunOffsets:a,bunData:o}=_(r),s=y(o,a,t);switch(r.format){case`MachO`:S(r,e,s,n);break;case`PE`:C(r,e,s,n);break;case`ELF`:w(r,e,s,n);break;default:throw Error(`Unsupported binary format: ${r.format}`)}}export{v as extractClaudeJsFromNativeInstallation,T as repackNativeInstallation};
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "tweakcc",
3
- "version": "3.2.1",
3
+ "version": "3.2.3",
4
4
  "type": "module",
5
5
  "description": "Command-line tool to customize your Claude Code theme colors, thinking verbs and more.",
6
- "main": "dist/index.js",
6
+ "main": "dist/index.mjs",
7
7
  "bin": {
8
- "tweakcc": "./dist/index.js"
8
+ "tweakcc": "./dist/index.mjs"
9
9
  },
10
10
  "keywords": [
11
11
  "cli",
@@ -37,7 +37,6 @@
37
37
  "@types/node": "^20.19.10",
38
38
  "@types/react": "^18.3.23",
39
39
  "@types/which": "^3.0.4",
40
- "@vitejs/plugin-react-oxc": "^0.3.0",
41
40
  "eslint": "^9.33.0",
42
41
  "eslint-plugin-react": "^7.37.5",
43
42
  "globals": "^16.3.0",
@@ -45,10 +44,10 @@
45
44
  "lint-staged": "^16.2.7",
46
45
  "prettier": "^3.6.2",
47
46
  "rollup-plugin-node-externals": "^8.0.1",
47
+ "tsdown": "^0.18.4",
48
48
  "tsx": "^4.20.3",
49
49
  "typescript": "^5.9.2",
50
50
  "typescript-eslint": "^8.39.0",
51
- "vite": "npm:rolldown-vite@^7.1.0",
52
51
  "vitest": "^3.2.4"
53
52
  },
54
53
  "lint-staged": {
@@ -71,13 +70,17 @@
71
70
  "wasmagic": "^1.0.7",
72
71
  "which": "^6.0.0"
73
72
  },
73
+ "engines": {
74
+ "node": ">=20.0.0"
75
+ },
74
76
  "scripts": {
75
- "build": "tsc -b && vite build",
76
- "build:dev": "vite build --mode development",
77
- "watch": "vite build --watch --mode development",
78
- "start": "node dist/index.js",
77
+ "build": "tsc --noEmit && tsdown --minify src/index.tsx",
78
+ "build:dev": "tsdown src/index.tsx",
79
+ "watch": "tsdown --watch src/index.tsx",
80
+ "start": "node dist/index.mjs",
79
81
  "lint": "tsc --noEmit && eslint src",
80
- "test": "vitest",
82
+ "test": "vitest run",
83
+ "test:dev": "vitest",
81
84
  "format": "prettier --write src"
82
85
  }
83
86
  }