@unitsvc/cc-helper 1.0.13 → 1.0.15
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/LICENSE +661 -661
- package/README-zh.md +173 -155
- package/README.md +173 -155
- package/dist/cli.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +47 -47
package/dist/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var ir=Object.create;var
|
|
2
|
+
"use strict";var ir=Object.create;var E=Object.defineProperty;var sr=Object.getOwnPropertyDescriptor;var ar=Object.getOwnPropertyNames;var cr=Object.getPrototypeOf,lr=Object.prototype.hasOwnProperty;var fr=(e,n)=>{for(var r in n)E(e,r,{get:n[r],enumerable:!0})},O=(e,n,r,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of ar(n))!lr.call(e,t)&&t!==r&&E(e,t,{get:()=>n[t],enumerable:!(o=sr(n,t))||o.enumerable});return e};var m=(e,n,r)=>(r=e!=null?ir(cr(e)):{},O(n||!e||!e.__esModule?E(r,"default",{value:e,enumerable:!0}):r,e)),mr=e=>O(E({},"__esModule",{value:!0}),e);var yr={};fr(yr,{ensureBinary:()=>B,getBinaryPath:()=>x,main:()=>rr,uninstall:()=>N});module.exports=mr(yr);var Q=require("child_process");var l=m(require("fs")),W=m(require("os")),$=m(require("path"));var L=m(require("os")),Z=m(require("path")),pr={darwin:"darwin",linux:"linux",win32:"windows"},dr={x64:"amd64",arm64:"arm64"};function U(){let e=L.default.platform(),n=L.default.arch(),r=pr[e],o=dr[n];if(!r)throw new Error(`Unsupported platform: ${e}`);if(!o)throw new Error(`Unsupported arch: ${n}`);return{platform:r,arch:o}}var R=e=>e==="windows"?"cc-helper.exe":"cc-helper";function v(e,n,r){let o=e.replace(/^v/,"");return n==="windows"?`cc-helper_${o}_${n}_${r}.zip`:`cc-helper_${o}_${n}_${r}.tar.gz`}var x=()=>{let{platform:e}=U();return Z.default.join(__dirname,"bin",R(e))};var w=m(require("fs")),M=m(require("path")),H=m(require("http")),q=m(require("https"));function S(e){try{w.default.existsSync(e)&&w.default.unlinkSync(e)}catch{}}async function k(e,n,r=3){for(let o=0;o<r;o++)try{await new Promise((t,i)=>{let p=(e.startsWith("https")?q.default:H.default).get(e,{headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}},c=>{if(c.statusCode===301||c.statusCode===302){let d=c.headers.location;if(d){k(d,n,r).then(t).catch(i);return}}if(c.statusCode!==200){i(new Error(`HTTP ${c.statusCode}`));return}let s=M.default.dirname(n);w.default.existsSync(s)||w.default.mkdirSync(s,{recursive:!0});let g=w.default.createWriteStream(n);c.pipe(g),g.on("finish",()=>{g.close(d=>{d?i(d):t()})}),g.on("error",d=>{S(n),i(d)}),c.on("error",d=>{S(n),i(d)})});p.setTimeout(3e4,()=>{p.destroy(),i(new Error("Timeout"))}),p.on("error",c=>{S(n),i(c)})});return}catch(t){if(S(n),o===r-1)throw t;console.log(`warn cc-helper retry ${o+1}/${r}`),await new Promise(i=>setTimeout(i,1e3*(o+1)))}}var f=m(require("fs")),u=m(require("path")),A=m(require("zlib"));async function ur(e,n){let r=0;for(;r+512<=e.length;){let o=e.subarray(r,r+512);if(o.every(c=>c===0))break;let t=o.subarray(0,100).toString().replace(/\0.*$/,""),i=o.subarray(345,500).toString().replace(/\0.*$/,"");i&&(t=`${i}/${t}`),t.startsWith("package/")&&(t=t.slice(8)),t=t.replace(/\//g,u.default.sep);let a=parseInt(o.subarray(124,136).toString().trim(),8)||0,p=o[156];if(r+=512,a>0&&t&&(p===0||p===48)){let c=u.default.join(n,t);await f.default.promises.mkdir(u.default.dirname(c),{recursive:!0}),await f.default.promises.writeFile(c,e.subarray(r,r+a)),r+=Math.ceil(a/512)*512}}}async function gr(e,n){await f.default.promises.mkdir(n,{recursive:!0});let r=await f.default.promises.readFile(e),o;try{o=A.default.unzipSync(r)}catch(t){throw new Error(`Failed to decompress tar.gz: ${t.message}`)}await ur(o,n)}async function hr(e,n){await f.default.promises.mkdir(n,{recursive:!0});let r=await f.default.promises.readFile(e);if(r.length<22)throw new Error(`Invalid ZIP: file too small (${r.length} bytes)`);let o=Buffer.from([80,75,5,6]),t=r.length-22;for(;t>=0&&!r.subarray(t,t+4).equals(o);)t--;if(t<0)throw new Error(`Invalid ZIP: missing end of central directory (file may be corrupted or incomplete, size: ${r.length} bytes)`);if(t+22>r.length)throw new Error("Invalid ZIP: truncated EOCD record");let i=r.readUInt32LE(t+16),a=r.readUInt32LE(t+12),p=i+a;if(i>=r.length||p>r.length)throw new Error(`Invalid ZIP: central directory out of bounds (cdOffset: ${i}, cdEnd: ${p}, fileSize: ${r.length})`);let c=Buffer.from([80,75,1,2]),s=i;for(;s<p;){if(s+46>r.length)throw new Error(`Invalid ZIP: truncated central directory at position ${s}`);if(!r.subarray(s,s+4).equals(c))throw new Error(`Invalid ZIP: invalid central directory signature at position ${s}`);let g=r.readUInt16LE(s+28),d=r.readUInt16LE(s+30),C=r.readUInt16LE(s+32),y=r.readUInt32LE(s+42),er=r.readUInt32LE(s+20),xr=r.readUInt32LE(s+24),$r=r.readUInt16LE(s+10);if(s+46+g+d+C>r.length)throw new Error(`Invalid ZIP: truncated central directory entry at position ${s}`);let h=r.subarray(s+46,s+46+g).toString();if(s+=46+g+d+C,h.endsWith("/")){await f.default.promises.mkdir(u.default.join(n,h.replace(/\//g,u.default.sep)),{recursive:!0});continue}if(h=h.replace(/\//g,u.default.sep),y+30>r.length)throw new Error(`Invalid ZIP: local header out of bounds for ${h}`);let I=r.readUInt16LE(y+8),tr=r.readUInt16LE(y+26),nr=r.readUInt16LE(y+28),P=y+30+tr+nr,D=er;if(P+D>r.length)throw new Error(`Invalid ZIP: truncated file data for ${h}`);let F=r.subarray(P,P+D),b=u.default.join(n,h);await f.default.promises.mkdir(u.default.dirname(b),{recursive:!0});try{if(I===8)await f.default.promises.writeFile(b,A.default.inflateRawSync(F));else if(I===0)await f.default.promises.writeFile(b,F);else throw new Error(`Unsupported compression method ${I} for ${h}`)}catch(or){throw new Error(`Failed to decompress ${h}: ${or.message}`)}}}async function G(e,n,r){r==="windows"?await hr(e,n):await gr(e,n)}function K(e,n){let r=u.default.join(e,n);if(f.default.existsSync(r))return r;for(let o of f.default.readdirSync(e)){let t=u.default.join(e,o,n);if(f.default.statSync(u.default.join(e,o)).isDirectory()&&f.default.existsSync(t))return t}throw new Error(`Binary ${n} not found`)}var j=m(require("https"));var _="next-bin",z="cc-helper";function J(e){return new Promise((n,r)=>{let o=j.default.get({hostname:"api.github.com",path:e,headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}},t=>{let i="";t.on("data",a=>i+=a),t.on("end",()=>{t.statusCode!==200?r(new Error(`GitHub API error: ${t.statusCode}`)):n(JSON.parse(i))})});o.setTimeout(15e3,()=>{o.destroy(),r(new Error("GitHub API timeout"))}),o.on("error",r)})}async function V(){return(await J(`/repos/${_}/${z}/releases/latest`)).tag_name.replace(/^v/,"")}async function X(e,n){var t;let r=await J(`/repos/${_}/${z}/releases?per_page=10`),o=e==="windows"?`_${e}_${n}.zip`:`_${e}_${n}.tar.gz`;for(let i of r)if((t=i.assets)!=null&&t.some(a=>a.name.includes(o)))return i.tag_name.replace(/^v/,"");throw new Error(`No binary found for ${e}-${n}`)}function Y(e,n,r,o){let t=e.startsWith("v")?e:`v${e}`,i=`https://github.com/${_}/${z}/releases/download/${t}/${v(e,n,r)}`;return o?`${o}/${i}`:i}async function T(e,n,r,o,t){let i=v(e,n,r),a=$.default.join(W.default.tmpdir(),i),p=Y(e,n,r,t);console.log(`info cc-helper@${e} Installing for ${n}-${r}`),t&&console.log("info cc-helper Using proxy:",t);try{await k(p,a)}catch(s){throw t||console.log("warn cc-helper Download failed, try: npx @unitsvc/cc-helper --proxy enable"),s}let c=$.default.join(W.default.tmpdir(),`cc-helper_${Date.now()}`);l.default.mkdirSync(c,{recursive:!0});try{await G(a,c,n);let s=K(c,R(n)),g=$.default.dirname(o);l.default.existsSync(g)||l.default.mkdirSync(g,{recursive:!0}),l.default.existsSync(o)&&l.default.unlinkSync(o),l.default.copyFileSync(s,o),process.platform!=="win32"&&l.default.chmodSync(o,493),console.log("info cc-helper Installed to",o)}finally{let s=l.default.rmSync||l.default.rmdirSync;try{s(c,{recursive:!0,force:!0})}catch{}l.default.existsSync(a)&&l.default.unlinkSync(a)}}async function B(e=null,n){let{platform:r,arch:o}=U(),t=x();if(l.default.existsSync(t))return t;if(e)try{return await T(e,r,o,t,n),t}catch(a){if(!a.message.includes("404"))throw a;console.log(`warn cc-helper@${e} not available, using latest`)}let i=await V();try{await T(i,r,o,t,n)}catch(a){if(!a.message.includes("404"))throw a;i=await X(r,o),await T(i,r,o,t,n)}return t}function N(){let e=x(),n=$.default.dirname(e);l.default.existsSync(e)?(l.default.unlinkSync(e),console.log("info cc-helper Removed binary:",e)):console.log("info cc-helper No binary found"),l.default.existsSync(n)&&l.default.readdirSync(n).length===0&&l.default.rmdirSync(n),console.log("info cc-helper To complete uninstallation, run:"),console.log(" npm uninstall -g @unitsvc/cc-helper")}function wr(e){let n=[],r,o="https://edgeone.gh-proxy.org";for(let t=0;t<e.length;t++)e[t]==="--proxy"?t+1<e.length&&(e[t+1].startsWith("http://")||e[t+1].startsWith("https://"))?(r=e[t+1],t++):r=o:e[t].startsWith("--proxy=")?r=e[t].slice(8)||o:n.push(e[t]);return{proxy:r,remainingArgs:n}}async function rr(){let e=process.argv.slice(2);if(e[0]==="uninstall"){N();return}let{proxy:n,remainingArgs:r}=wr(e);try{let o=await B(null,n),t=(0,Q.spawn)(o,r,{stdio:"inherit"});t.on("close",i=>process.exit(i??1)),t.on("error",i=>{console.error("ERR! cc-helper",i.message),process.exit(1)})}catch(o){console.error("ERR! cc-helper",o.message),process.exit(1)}}require.main===module&&rr();0&&(module.exports={ensureBinary,getBinaryPath,main,uninstall});
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var or=Object.create;var I=Object.defineProperty;var ir=Object.getOwnPropertyDescriptor;var sr=Object.getOwnPropertyNames;var ar=Object.getPrototypeOf,cr=Object.prototype.hasOwnProperty;var lr=(e,t)=>{for(var r in t)I(e,r,{get:t[r],enumerable:!0})},M=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of sr(t))!cr.call(e,n)&&n!==r&&I(e,n,{get:()=>t[n],enumerable:!(o=ir(t,n))||o.enumerable});return e};var m=(e,t,r)=>(r=e!=null?or(ar(e)):{},M(t||!e||!e.__esModule?I(r,"default",{value:e,enumerable:!0}):r,e)),fr=e=>M(I({},"__esModule",{value:!0}),e);var hr={};lr(hr,{ensureBinary:()=>D,findReleaseWithBinary:()=>L,getArchiveName:()=>w,getBinaryName:()=>S,getBinaryPath:()=>E,getDownloadUrl:()=>U,getLatestVersion:()=>P,getPlatform:()=>x,install:()=>X,uninstall:()=>Y});module.exports=fr(hr);var l=m(require("fs")),C=m(require("os")),v=m(require("path"));var _=m(require("os")),H=m(require("path")),mr={darwin:"darwin",linux:"linux",win32:"windows"},dr={x64:"amd64",arm64:"arm64"};function x(){let e=_.default.platform(),t=_.default.arch(),r=mr[e],o=dr[t];if(!r)throw new Error(`Unsupported platform: ${e}`);if(!o)throw new Error(`Unsupported arch: ${t}`);return{platform:r,arch:o}}var S=e=>e==="windows"?"cc-helper.exe":"cc-helper";function w(e,t,r){let o=e.replace(/^v/,"");return t==="windows"?`cc-helper_${o}_${t}_${r}.zip`:`cc-helper_${o}_${t}_${r}.tar.gz`}var E=()=>{let{platform:e}=x();return H.default.join(__dirname,"bin",S(e))};var y=m(require("fs")),G=m(require("path")),q=m(require("http")),K=m(require("https"));function b(e){try{y.default.existsSync(e)&&y.default.unlinkSync(e)}catch{}}async function R(e,t,r=3){for(let o=0;o<r;o++)try{await new Promise((n,i)=>{let d=(e.startsWith("https")?K.default:q.default).get(e,{headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}},c=>{if(c.statusCode===301||c.statusCode===302){let p=c.headers.location;if(p){R(p,t,r).then(n).catch(i);return}}if(c.statusCode!==200){i(new Error(`HTTP ${c.statusCode}`));return}let s=G.default.dirname(t);y.default.existsSync(s)||y.default.mkdirSync(s,{recursive:!0});let g=y.default.createWriteStream(t);c.pipe(g),g.on("finish",()=>{g.close(p=>{p?i(p):n()})}),g.on("error",p=>{b(t),i(p)}),c.on("error",p=>{b(t),i(p)})});d.setTimeout(3e4,()=>{d.destroy(),i(new Error("Timeout"))}),d.on("error",c=>{b(t),i(c)})});return}catch(n){if(b(t),o===r-1)throw n;console.log(`warn cc-helper retry ${o+1}/${r}`),await new Promise(i=>setTimeout(i,1e3*(o+1)))}}var f=m(require("fs")),u=m(require("path")),T=m(require("zlib"));async function pr(e,t){let r=0;for(;r+512<=e.length;){let o=e.subarray(r,r+512);if(o.every(c=>c===0))break;let n=o.subarray(0,100).toString().replace(/\0.*$/,""),i=o.subarray(345,500).toString().replace(/\0.*$/,"");i&&(n=`${i}/${n}`),n.startsWith("package/")&&(n=n.slice(8)),n=n.replace(/\//g,u.default.sep);let a=parseInt(o.subarray(124,136).toString().trim(),8)||0,d=o[156];if(r+=512,a>0&&n&&(d===0||d===48)){let c=u.default.join(t,n);await f.default.promises.mkdir(u.default.dirname(c),{recursive:!0}),await f.default.promises.writeFile(c,e.subarray(r,r+a)),r+=Math.ceil(a/512)*512}}}async function ur(e,t){await f.default.promises.mkdir(t,{recursive:!0});let r=await f.default.promises.readFile(e),o;try{o=T.default.unzipSync(r)}catch(n){throw new Error(`Failed to decompress tar.gz: ${n.message}`)}await pr(o,t)}async function gr(e,t){await f.default.promises.mkdir(t,{recursive:!0});let r=await f.default.promises.readFile(e);if(r.length<22)throw new Error(`Invalid ZIP: file too small (${r.length} bytes)`);let o=Buffer.from([80,75,5,6]),n=r.length-22;for(;n>=0&&!r.subarray(n,n+4).equals(o);)n--;if(n<0)throw new Error(`Invalid ZIP: missing end of central directory (file may be corrupted or incomplete, size: ${r.length} bytes)`);if(n+22>r.length)throw new Error("Invalid ZIP: truncated EOCD record");let i=r.readUInt32LE(n+16),a=r.readUInt32LE(n+12),d=i+a;if(i>=r.length||d>r.length)throw new Error(`Invalid ZIP: central directory out of bounds (cdOffset: ${i}, cdEnd: ${d}, fileSize: ${r.length})`);let c=Buffer.from([80,75,1,2]),s=i;for(;s<d;){if(s+46>r.length)throw new Error(`Invalid ZIP: truncated central directory at position ${s}`);if(!r.subarray(s,s+4).equals(c))throw new Error(`Invalid ZIP: invalid central directory signature at position ${s}`);let g=r.readUInt16LE(s+28),p=r.readUInt16LE(s+30),F=r.readUInt16LE(s+32),$=r.readUInt32LE(s+42),rr=r.readUInt32LE(s+20),wr=r.readUInt32LE(s+24),yr=r.readUInt16LE(s+10);if(s+46+g+p+F>r.length)throw new Error(`Invalid ZIP: truncated central directory entry at position ${s}`);let h=r.subarray(s+46,s+46+g).toString();if(s+=46+g+p+F,h.endsWith("/")){await f.default.promises.mkdir(u.default.join(t,h.replace(/\//g,u.default.sep)),{recursive:!0});continue}if(h=h.replace(/\//g,u.default.sep),$+30>r.length)throw new Error(`Invalid ZIP: local header out of bounds for ${h}`);let k=r.readUInt16LE($+8),er=r.readUInt16LE($+26),tr=r.readUInt16LE($+28),B=$+30+er+tr,Z=rr;if(B+Z>r.length)throw new Error(`Invalid ZIP: truncated file data for ${h}`);let O=r.subarray(B,B+Z),z=u.default.join(t,h);await f.default.promises.mkdir(u.default.dirname(z),{recursive:!0});try{if(k===8)await f.default.promises.writeFile(z,T.default.inflateRawSync(O));else if(k===0)await f.default.promises.writeFile(z,O);else throw new Error(`Unsupported compression method ${k} for ${h}`)}catch(nr){throw new Error(`Failed to decompress ${h}: ${nr.message}`)}}}async function V(e,t,r){r==="windows"?await gr(e,t):await ur(e,t)}function j(e,t){let r=u.default.join(e,t);if(f.default.existsSync(r))return r;for(let o of f.default.readdirSync(e)){let n=u.default.join(e,o,t);if(f.default.statSync(u.default.join(e,o)).isDirectory()&&f.default.existsSync(n))return n}throw new Error(`Binary ${t} not found`)}var J=m(require("https"));var W="next-bin",A="cc-helper";function Q(e){return new Promise((t,r)=>{let o=J.default.get({hostname:"api.github.com",path:e,headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}},n=>{let i="";n.on("data",a=>i+=a),n.on("end",()=>{n.statusCode!==200?r(new Error(`GitHub API error: ${n.statusCode}`)):t(JSON.parse(i))})});o.setTimeout(15e3,()=>{o.destroy(),r(new Error("GitHub API timeout"))}),o.on("error",r)})}async function P(){return(await Q(`/repos/${W}/${A}/releases/latest`)).tag_name.replace(/^v/,"")}async function L(e,t){var n;let r=await Q(`/repos/${W}/${A}/releases?per_page=10`),o=e==="windows"?`_${e}_${t}.zip`:`_${e}_${t}.tar.gz`;for(let i of r)if((n=i.assets)!=null&&n.some(a=>a.name.includes(o)))return i.tag_name.replace(/^v/,"");throw new Error(`No binary found for ${e}-${t}`)}function U(e,t,r,o){let n=e.startsWith("v")?e:`v${e}`,i=`https://github.com/${W}/${A}/releases/download/${n}/${w(e,t,r)}`;return o?`${o}/${i}`:i}async function N(e,t,r,o,n){let i=w(e,t,r),a=v.default.join(C.default.tmpdir(),i),d=U(e,t,r,n);console.log(`info cc-helper@${e} Installing for ${t}-${r}`),n&&console.log("info cc-helper Using proxy:",n);try{await R(d,a)}catch(s){throw n||console.log("warn cc-helper Download failed, try: npx @unitsvc/cc-helper --proxy enable"),s}let c=v.default.join(C.default.tmpdir(),`cc-helper_${Date.now()}`);l.default.mkdirSync(c,{recursive:!0});try{await V(a,c,t);let s=j(c,S(t)),g=v.default.dirname(o);l.default.existsSync(g)||l.default.mkdirSync(g,{recursive:!0}),l.default.existsSync(o)&&l.default.unlinkSync(o),l.default.copyFileSync(s,o),process.platform!=="win32"&&l.default.chmodSync(o,493),console.log("info cc-helper Installed to",o)}finally{let s=l.default.rmSync||l.default.rmdirSync;try{s(c,{recursive:!0,force:!0})}catch{}l.default.existsSync(a)&&l.default.unlinkSync(a)}}async function D(e=null,t){let{platform:r,arch:o}=x(),n=E();if(l.default.existsSync(n))return n;if(e)try{return await N(e,r,o,n,t),n}catch(a){if(!a.message.includes("404"))throw a;console.log(`warn cc-helper@${e} not available, using latest`)}let i=await P();try{await N(i,r,o,n,t)}catch(a){if(!a.message.includes("404"))throw a;i=await L(r,o),await N(i,r,o,n,t)}return n}async function X(e=null,t){try{await D(e,t)}catch(r){console.error("ERR! cc-helper",r.message)}}function Y(){let e=E(),t=v.default.dirname(e);l.default.existsSync(e)?(l.default.unlinkSync(e),console.log("info cc-helper Removed binary:",e)):console.log("info cc-helper No binary found"),l.default.existsSync(t)&&l.default.readdirSync(t).length===0&&l.default.rmdirSync(t),console.log("info cc-helper To complete uninstallation, run:"),console.log(" npm uninstall -g @unitsvc/cc-helper")}0&&(module.exports={ensureBinary,findReleaseWithBinary,getArchiveName,getBinaryName,getBinaryPath,getDownloadUrl,getLatestVersion,getPlatform,install,uninstall});
|
package/package.json
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@unitsvc/cc-helper",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Claude Code /loop feature bypass tool",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"bin": {
|
|
7
|
-
"cc-helper": "dist/cli.js"
|
|
8
|
-
},
|
|
9
|
-
"scripts": {
|
|
10
|
-
"build": "node scripts/build.js",
|
|
11
|
-
"test": "vitest run",
|
|
12
|
-
"test:watch": "vitest",
|
|
13
|
-
"prepublishOnly": "npm run build"
|
|
14
|
-
},
|
|
15
|
-
"keywords": [
|
|
16
|
-
"claude code",
|
|
17
|
-
"claude",
|
|
18
|
-
"loop",
|
|
19
|
-
"cli",
|
|
20
|
-
"zai"
|
|
21
|
-
],
|
|
22
|
-
"author": "next-bin",
|
|
23
|
-
"license": "AGPL-3.0",
|
|
24
|
-
"repository": {
|
|
25
|
-
"type": "git",
|
|
26
|
-
"url": "git+https://github.com/next-bin/cc-helper.git"
|
|
27
|
-
},
|
|
28
|
-
"homepage": "https://github.com/next-bin/cc-helper#readme",
|
|
29
|
-
"bugs": {
|
|
30
|
-
"url": "https://github.com/next-bin/cc-helper/issues"
|
|
31
|
-
},
|
|
32
|
-
"engines": {
|
|
33
|
-
"node": ">=14.0.0"
|
|
34
|
-
},
|
|
35
|
-
"files": [
|
|
36
|
-
"dist/",
|
|
37
|
-
"README.md",
|
|
38
|
-
"README-zh.md",
|
|
39
|
-
"LICENSE"
|
|
40
|
-
],
|
|
41
|
-
"devDependencies": {
|
|
42
|
-
"@types/node": "^20.11.0",
|
|
43
|
-
"esbuild": "^0.27.3",
|
|
44
|
-
"typescript": "^5.3.3",
|
|
45
|
-
"vitest": "^4.0.18"
|
|
46
|
-
}
|
|
47
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@unitsvc/cc-helper",
|
|
3
|
+
"version": "1.0.15",
|
|
4
|
+
"description": "Claude Code /loop feature bypass tool",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"cc-helper": "dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "node scripts/build.js",
|
|
11
|
+
"test": "vitest run",
|
|
12
|
+
"test:watch": "vitest",
|
|
13
|
+
"prepublishOnly": "npm run build"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"claude code",
|
|
17
|
+
"claude",
|
|
18
|
+
"loop",
|
|
19
|
+
"cli",
|
|
20
|
+
"zai"
|
|
21
|
+
],
|
|
22
|
+
"author": "next-bin",
|
|
23
|
+
"license": "AGPL-3.0",
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/next-bin/cc-helper.git"
|
|
27
|
+
},
|
|
28
|
+
"homepage": "https://github.com/next-bin/cc-helper#readme",
|
|
29
|
+
"bugs": {
|
|
30
|
+
"url": "https://github.com/next-bin/cc-helper/issues"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=14.0.0"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist/",
|
|
37
|
+
"README.md",
|
|
38
|
+
"README-zh.md",
|
|
39
|
+
"LICENSE"
|
|
40
|
+
],
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/node": "^20.11.0",
|
|
43
|
+
"esbuild": "^0.27.3",
|
|
44
|
+
"typescript": "^5.3.3",
|
|
45
|
+
"vitest": "^4.0.18"
|
|
46
|
+
}
|
|
47
|
+
}
|