cc-ding 0.4.0 → 1.0.0
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/bin/cc-ding.js +5 -5
- package/dist/src/biz/api-key-manager.js +3 -3
- package/dist/src/biz/cc-ding-cli.js +65 -66
- package/dist/src/biz/claude-process.js +33 -32
- package/dist/src/biz/claude-sdk.js +3 -2
- package/dist/src/biz/command-route.js +1 -1
- package/dist/src/biz/commands.js +6 -6
- package/dist/src/biz/cron.js +6 -6
- package/dist/src/biz/doctor.js +2 -2
- package/dist/src/biz/image.js +8 -8
- package/dist/src/biz/lock.js +1 -1
- package/dist/src/biz/menu.js +2 -2
- package/dist/src/biz/messaging.js +5 -5
- package/dist/src/biz/notify.js +1 -1
- package/dist/src/biz/platform.js +2 -2
- package/dist/src/biz/quote.js +5 -5
- package/dist/src/biz/recorder.js +9 -9
- package/dist/src/biz/secrets.js +1 -1
- package/dist/src/biz/session.js +13 -13
- package/dist/src/biz/task.js +23 -22
- package/dist/src/biz/todo.js +6 -6
- package/dist/src/common.js +1 -1
- package/dist/src/constants.js +1 -1
- package/package.json +4 -5
package/dist/src/biz/image.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var j=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.runOcr=b,exports.getImageDownloadUrl=I,exports.downloadImageBuffer=P,exports.processPictureMessage=G,exports.processRichTextMessage=L,exports.detectExtFromBuffer=M,exports.extractDownloadCode=K,exports.extractFileName=J,exports.downloadToFilesDir=X,exports.processFileMessage=Z;const N=require("child_process"),w=j(require("fs")),y=j(require("path")),B=j(require("urllib")),d=require("./session"),E=require("../common"),A=10*1024*1024,U=20*1024*1024,k="https://api.dingtalk.com",S="\u4EE5\u4E0B\u56FE\u7247 OCR \u8BC6\u522B\u7ED3\u679C\u6765\u81EA\u5BF9\u7528\u6237\u6D88\u606F\u4E2D\u56FE\u7247\u7684\u9884\u5904\u7406(\u975E\u7528\u6237\u539F\u59CB\u8F93\u5165)\uFF0C\u5982\u8BC6\u522B\u4E0D\u51C6\u786E\u53EF\u76F4\u63A5\u67E5\u770B\u539F\u56FE\u8DEF\u5F84",T=(0,E.projUtil)().getResourcePath(),_=(()=>{if(process.platform==="win32")return null;const e=process.arch;return e==="arm64"?y.default.join(T,"ocr-arm64"):e==="x64"?y.default.join(T,"ocr-x64"):null})();let C=null;async function b(e){return _?(C===null&&(C=w.default.existsSync(_),C||console.warn(`[${(0,d.timestamp)()}] OCR \u4E8C\u8FDB\u5236\u4E0D\u5B58\u5728: ${_}`)),C?new Promise(n=>{(0,N.execFile)(_,[e],{timeout:3e4,maxBuffer:5*1024*1024},(i,o,t)=>{if(i){console.warn(`[${(0,d.timestamp)()}] OCR \u6267\u884C\u5931\u8D25: ${i.message}`),t&&console.warn(`[${(0,d.timestamp)()}] OCR stderr: ${t.substring(0,200)}`),n(null);return}try{const s=JSON.parse(o);if(!Array.isArray(s)||s.length===0){console.log(`[${(0,d.timestamp)()}] OCR \u65E0\u8BC6\u522B\u7ED3\u679C`),n(null);return}const a=s.map(u=>u.word).filter(Boolean).join(" ");console.log(`[${(0,d.timestamp)()}] OCR \u8BC6\u522B\u7ED3\u679C: ${a.substring(0,200)}${a.length>200?"...":""}`),n(a||null)}catch{console.warn(`[${(0,d.timestamp)()}] OCR \u8F93\u51FA\u89E3\u6790\u5931\u8D25: ${o.substring(0,200)}`),n(null)}})}):null):(console.log(`[${(0,d.timestamp)()}] \u5F53\u524D\u5E73\u53F0(${process.platform}/${process.arch})\u4E0D\u652F\u6301\u672C\u5730OCR\uFF0C\u4F7F\u7528\u6A21\u578B\u8BC6\u522B`),null)}const q=[{bytes:[137,80,78,71],mediaType:"image/png",ext:"png"},{bytes:[255,216,255],mediaType:"image/jpeg",ext:"jpg"},{bytes:[71,73,70],mediaType:"image/gif",ext:"gif"},{bytes:[82,73,70,70],mediaType:"image/webp",ext:"webp"}];function F(e){for(const{bytes:n,mediaType:i,ext:o}of q)if(e.length>=n.length&&n.every((t,s)=>e[s]===t))return{mediaType:i,ext:o};return{mediaType:"image/jpeg",ext:"jpg"}}async function I(e,n,i){try{const o=await e.dingStreamClient.getAccessToken(),t=`${k}/v1.0/robot/messageFiles/download`,s=await B.default.request(t,{method:"POST",headers:{"x-acs-dingtalk-access-token":o,"Content-Type":"application/json"},data:{downloadCode:n,robotCode:i},dataType:"json",timeout:1e4});if(s.status!==200||!s.data)return e.debugLog(`getImageDownloadUrl API \u8FD4\u56DE\u975E200: status=${s.status}, data=${JSON.stringify(s.data)}`),null;const a=s.data,u=a?.downloadUrl;return u||(e.debugLog(`getImageDownloadUrl \u54CD\u5E94\u65E0 downloadUrl: ${JSON.stringify(a)}`),null)}catch(o){return console.warn(`[${(0,d.timestamp)()}] getImageDownloadUrl \u8BF7\u6C42\u5931\u8D25:`,o),null}}async function P(e,n=A){try{const i=await B.default.request(e,{method:"GET",dataType:"buffer",timeout:3e4});if(i.status!==200)return console.warn(`[${(0,d.timestamp)()}] downloadImageBuffer \u4E0B\u8F7D\u5931\u8D25: status=${i.status}`),null;const o=i.data;return!o||o.length===0?(console.warn(`[${(0,d.timestamp)()}] downloadImageBuffer \u4E0B\u8F7D\u7ED3\u679C\u4E3A\u7A7A`),null):o.length>n?(console.warn(`[${(0,d.timestamp)()}] \u6587\u4EF6\u5927\u5C0F ${o.length} \u8D85\u8FC7\u9650\u5236 ${n}`),null):o}catch(i){return console.warn(`[${(0,d.timestamp)()}] downloadImageBuffer \u4E0B\u8F7D\u5931\u8D25:`,i),null}}async function D(e,n,i,o){const t=await I(e,n,i);if(!t)return null;const s=await P(t);if(!s)return null;const{mediaType:a,ext:u}=F(s),f=y.default.join(o,".images"),m=n.slice(-8).replace(/[/\\:*?"<>|+= ]/g,"_"),p=`${Date.now()}-${m}.${u}`,c=y.default.join(f,p);try{w.default.mkdirSync(f,{recursive:!0}),w.default.writeFileSync(c,s)}catch(x){return console.warn(`[${(0,d.timestamp)()}] \u56FE\u7247\u4FDD\u5B58\u5931\u8D25: ${c}`,x),null}return console.log(`[${(0,d.timestamp)()}] \u56FE\u7247\u5DF2\u4FDD\u5B58: ${c} (${a}, ${s.length} bytes)`),{mediaType:a,filePath:c,sizeBytes:s.length}}async function v(e,n,i){const o=i!=null?`[\u56FE\u7247 ${i}]`:"[\u56FE\u7247]";if(n){const t=await b(e.filePath);if(t){const s=i!=null?`[\u56FE\u7247 ${i} OCR]`:"[\u56FE\u7247 OCR]";return`${o} ${e.filePath}
|
|
2
2
|
${s}
|
|
3
3
|
---
|
|
4
4
|
${t}
|
|
5
|
-
---`}console.warn(`[${(0,
|
|
6
|
-
`)}async function
|
|
7
|
-
${
|
|
5
|
+
---`}console.warn(`[${(0,d.timestamp)()}] OCR \u5931\u8D25\uFF0C\u4EC5\u4F20\u539F\u56FE\u8DEF\u5F84: ${e.filePath}`)}return`${o} ${e.filePath}`}async function G(e,n,i,o,t=!0,s){const a=await D(e,n,i,o);if(!a)return null;const u=await v(a,t),f=[];return t&&f.push(S),s&&f.push(s),f.push(u),f.join(`
|
|
6
|
+
`)}async function L(e,n,i,o,t=!0){const s=n.filter(r=>r.type==="picture"&&(r.downloadCode||r.pictureDownloadCode)).length,a=n.map(async(r,l)=>{if(r.type==="picture"){const g=r.downloadCode||r.pictureDownloadCode;if(g){const $=await D(e,g,i,o);return{index:l,result:$}}}return{index:l,result:null}}),u=await Promise.all(a),f=new Map;for(const{index:r,result:l}of u)f.set(r,l);const m=new Map;if(t&&s>0){const r=[];for(const[g,$]of f)$&&r.push(b($.filePath).then(h=>({index:g,ocrText:h})));const l=await Promise.all(r);for(const{index:g,ocrText:$}of l)m.set(g,$)}const p=[];let c=0;for(let r=0;r<n.length;r++){const l=n[r];if(l.type==="text"&&l.text){if(/^@\S+$/.test(l.text.trim()))continue;p.push(l.text)}else if(l.type==="mention"&&l.userId){const g=l.displayName?`${l.displayName}(${l.userId})`:l.userId;p.push(`[@\u63D0\u53CA: ${g}]`)}else if(l.type==="picture"){const g=f.get(r);if(g){c++;const $=s>1?c:void 0,h=t?m.get(r):null,R=$!=null?`[\u56FE\u7247 ${$}]`:"[\u56FE\u7247]";if(h){const O=$!=null?`[\u56FE\u7247 ${$} OCR]`:"[\u56FE\u7247 OCR]";p.push(`${R} ${g.filePath}
|
|
7
|
+
${O}
|
|
8
8
|
---
|
|
9
|
-
${
|
|
10
|
-
---`)}else
|
|
11
|
-
`)||"[\u5BCC\u6587\u672C\u6D88\u606F\u5185\u5BB9\u4E3A\u7A7A]";return t&&c>0?`${
|
|
12
|
-
${x}`:x}const
|
|
9
|
+
${h}
|
|
10
|
+
---`)}else p.push(`${R} ${g.filePath}`)}else(l.downloadCode||l.pictureDownloadCode)&&p.push("[\u56FE\u7247\u4E0B\u8F7D\u5931\u8D25]")}}const x=p.join(`
|
|
11
|
+
`)||"[\u5BCC\u6587\u672C\u6D88\u606F\u5185\u5BB9\u4E3A\u7A7A]";return t&&c>0?`${S}
|
|
12
|
+
${x}`:x}const z=[{bytes:[37,80,68,70],ext:"pdf"},{bytes:[80,75,3,4],ext:"zip"},{bytes:[80,75,5,6],ext:"zip"}];function M(e){if((F(e).mediaType!=="image/jpeg"||e.length<2||e[0]===255&&e[1]===216)&&e.length>=3&&e[0]===255&&e[1]===216&&e[2]===255)return".jpg";for(const{bytes:i,ext:o}of z)if(e.length>=i.length&&i.every((t,s)=>e[s]===t)){if(o==="zip"&&e.length>=30){const t=e.toString("latin1",0,Math.min(e.length,2e3));if(t.includes("word/"))return".docx";if(t.includes("xl/"))return".xlsx";if(t.includes("ppt/"))return".pptx"}return`.${o}`}return""}function K(e){const n=e;if(e.downloadCode)return e.downloadCode;if(n.pictureDownloadCode)return n.pictureDownloadCode;if(n.extensions&&typeof n.extensions=="object"){const o=n.extensions;if(o.downloadCode)return o.downloadCode}const i=["image_content","file_content","video_content","audio_content"];for(const o of i){const t=n[o];if(t&&typeof t=="object"){const s=t;if(s.download_code)return s.download_code;if(s.downloadCode)return s.downloadCode}}return null}function J(e){const n=e;if(e.fileName&&typeof e.fileName=="string")return e.fileName;for(const i of["content","file_content","image_content"]){const o=n[i];if(o&&typeof o=="object"){const t=o;if(t.fileName&&typeof t.fileName=="string")return t.fileName;if(t.file_name&&typeof t.file_name=="string")return t.file_name;if(t.name&&typeof t.name=="string")return t.name}}return null}async function X(e,n,i,o,t,s){const a=await I(e,n,i);if(!a)return null;const u=await P(a);if(!u)return null;const f=y.default.join(o,".files",t);w.default.mkdirSync(f,{recursive:!0});let m;if(s)m=s;else{const{ext:c}=F(u);m=`file.${c}`}if(w.default.existsSync(y.default.join(f,m))){const c=m.lastIndexOf("."),x=c>0?m.substring(0,c):m,r=c>0?m.substring(c):"";let l=1;for(;w.default.existsSync(y.default.join(f,`${x}_${l}${r}`));)l++;m=`${x}_${l}${r}`}const p=y.default.join(f,m);try{w.default.writeFileSync(p,u)}catch(c){return console.warn(`[${(0,d.timestamp)()}] \u6587\u4EF6\u4FDD\u5B58\u5931\u8D25: ${p}`,c),null}return console.log(`[${(0,d.timestamp)()}] \u6587\u4EF6\u5DF2\u4FDD\u5B58: ${p} (${u.length} bytes)`),p}async function Z(e,n,i,o,t){const s=await I(e,n,i);if(!s)return null;const a=await P(s,U);if(!a)return null;const u=M(a),f=y.default.join(o,".files"),m=n.slice(-8).replace(/[/\\:*?"<>|+= ]/g,"_"),p=`${Date.now()}-${m}${u}`,c=y.default.join(f,p);try{w.default.mkdirSync(f,{recursive:!0}),w.default.writeFileSync(c,a)}catch(l){return console.warn(`[${(0,d.timestamp)()}] \u6587\u4EF6\u4FDD\u5B58\u5931\u8D25: ${c}`,l),null}const x=(a.length/1024).toFixed(1);console.log(`[${(0,d.timestamp)()}] \u6587\u4EF6\u5DF2\u4FDD\u5B58: ${c} (${x}KB${u?`, ${u}`:""})`);const r=[];return r.push(`[\u6587\u4EF6] \u6536\u5230\u4E00\u4E2A\u6587\u4EF6${u?`\uFF08${u}\uFF09`:""}\uFF0C\u5927\u5C0F ${x}KB`),t&&r.push(t),r.push(`\u6587\u4EF6\u8DEF\u5F84: ${c}`),r.push("\u4F60\u53EF\u4EE5\u4F7F\u7528 Read \u5DE5\u5177\u67E5\u770B\u6587\u4EF6\u5185\u5BB9\u3002"),r.join(`
|
|
13
13
|
`)}
|
package/dist/src/biz/lock.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var c=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.acquirePidLock=a;const n=require("./session"),u=require("./platform"),s=c(require("fs")),l=c(require("path"));function a(e,o){const t=l.default.join(e,".pid.lock");if(s.default.existsSync(t))try{const i=parseInt(s.default.readFileSync(t,"utf-8").trim(),10);if(!isNaN(i))try{process.kill(i,0),console.error(`[FATAL] clientId "${o}" \u5DF2\u6709\u8FD0\u884C\u4E2D\u7684\u8FDB\u7A0B (PID: ${i})`),console.error(` \u5982\u9700\u5F3A\u5236\u542F\u52A8\uFF0C\u8BF7\u5148\u505C\u6B62\u5DF2\u6709\u8FDB\u7A0B\u6216\u5220\u9664\u9501\u6587\u4EF6: ${t}`),process.exit(1)}catch{console.log(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230\u8FC7\u671F\u9501\u6587\u4EF6 (PID: ${i} \u5DF2\u9000\u51FA)\uFF0C\u81EA\u52A8\u6E05\u7406`)}}catch{}s.default.writeFileSync(t,String(process.pid),"utf-8");const r=()=>{try{s.default.unlinkSync(t)}catch{}};process.on("exit",r),(0,u.isWindows)()||(process.on("SIGINT",()=>{r(),process.exit(130)}),process.on("SIGTERM",()=>{r(),process.exit(143)}))}
|
package/dist/src/biz/menu.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`)}function
|
|
1
|
+
"use strict";var y=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.loadMenuData=g,exports.setPendingSelection=D,exports.getPendingSelection=T,exports.clearPendingSelection=P,exports.hasPendingSelection=w,exports.startSelectionCleanupTimer=I,exports.getUserTrigger=S,exports.setUserTrigger=A,exports.getAllTriggerWords=j,exports.getMergedMenu=U,exports.addMenuItem=k,exports.deleteMenuItem=L,exports.formatMenuDisplay=O,exports.formatMenuList=v;const $=y(require("fs")),_=require("utils-ok"),f=require("./session");function b(e){return`${(0,f.getClientDir)(e)}/menu.json`}function g(e){const t=b(e);try{const n=JSON.parse($.default.readFileSync(t,"utf-8"));return{global:Array.isArray(n.global)?n.global:[],user:n.user&&typeof n.user=="object"?n.user:{},triggers:n.triggers&&typeof n.triggers=="object"?n.triggers:{}}}catch{return{global:[],user:{},triggers:{}}}}function m(e,t){const n=b(e);$.default.writeFileSync(n,JSON.stringify(t,null,2),"utf-8")}const c=new Map,M=6e4;function d(e,t){return`${e}:${t}`}function D(e,t,n,r){c.set(d(e,t),{staffId:t,conversationId:e,sessionWebhook:n,mergedItems:r,createdAt:Date.now()})}function T(e,t){return c.get(d(e,t))}function P(e,t){c.delete(d(e,t))}function w(e,t){const n=c.get(d(e,t));return n?Date.now()-n.createdAt>M?(c.delete(d(e,t)),!1):!0:!1}function I(){setInterval(()=>{const e=Date.now();for(const[t,n]of c)e-n.createdAt>M&&c.delete(t)},15e3)}function S(e,t){return g(e).triggers?.[t]||"cc"}function A(e,t,n){const r=g(e);r.triggers||(r.triggers={}),r.triggers[t]=n,m(e,r)}function j(e){const t=g(e),n=new Set(["cc"]);if(t.triggers)for(const r of Object.values(t.triggers))r&&n.add(r.toLowerCase());return n}function p(e,t){return`${e}:${t}`}function N(){return`m_${Date.now().toString(36)}`}function U(e,t,n){const r=g(e),o=p(t,n),s=r.user[o]||[];return[...r.global,...s]}function k(e,t,n,r,o,s){const i=g(e),a=o.trim()||s.trim().substring(0,20),u={id:N(),label:a,command:s.trim(),createdAt:_.dateUtil.mm().format("YYYY-MM-DD HH:mm:ss")};if(r)i.global.push(u);else{const l=p(t,n);i.user[l]||(i.user[l]=[]),i.user[l].push(u)}return m(e,i),console.log(`[${(0,f.timestamp)()}] [menu] \u6DFB\u52A0\u83DC\u5355: ${r?"\u5168\u5C40":"\u4E2A\u4EBA"} label=${u.label} id=${u.id}`),u}function L(e,t,n,r,o){const s=g(e),i=parseInt(o,10);if(r){if(isNaN(i)||i<1||i>s.global.length)return{success:!1,error:`\u5E8F\u53F7\u65E0\u6548\uFF0C\u5168\u5C40\u83DC\u5355\u5171 ${s.global.length} \u9879`};const[h]=s.global.splice(i-1,1);return m(e,s),console.log(`[${(0,f.timestamp)()}] [menu] \u5220\u9664\u5168\u5C40\u83DC\u5355: label=${h.label} id=${h.id}`),{success:!0,deletedItem:h}}const a=p(t,n),u=s.user[a]||[];if(isNaN(i)||i<1||i>u.length)return{success:!1,error:`\u5E8F\u53F7\u65E0\u6548\uFF0C\u4E2A\u4EBA\u83DC\u5355\u5171 ${u.length} \u9879`};const[l]=u.splice(i-1,1);return u.length===0&&delete s.user[a],m(e,s),console.log(`[${(0,f.timestamp)()}] [menu] \u5220\u9664\u4E2A\u4EBA\u83DC\u5355: label=${l.label} id=${l.id}`),{success:!0,deletedItem:l}}function O(e,t){if(e.length===0)return"\u{1F4ED} \u6682\u65E0\u5FEB\u6377\u6307\u4EE4\n\n\u{1F4A1} \u4F7F\u7528 `/menu add <\u6307\u4EE4>` \u6DFB\u52A0";const n=["### \u{1F4CB} \u5FEB\u6377\u6307\u4EE4",""];if(t>0){n.push("\u{1F310} **\u5168\u5C40**");for(let r=0;r<t;r++)n.push(`${r+1}. ${e[r].label}`)}if(e.length>t){t>0&&n.push(""),n.push("\u{1F464} **\u6211\u7684**");for(let r=t;r<e.length;r++)n.push(`${r+1}. ${e[r].label}`)}return n.push("","---","\u{1F4A1} \u56DE\u590D\u5E8F\u53F7\u6267\u884C (60s) | `/menu add/del/list` \u7BA1\u7406"),n.join(`
|
|
2
|
+
`)}function v(e,t,n,r){const o=g(e),s=[];if(r)if(s.push("### \u{1F4CB} \u5168\u5C40\u5FEB\u6377\u6307\u4EE4\u7BA1\u7406",""),o.global.length>0)for(let i=0;i<o.global.length;i++)s.push(`${i+1}. **${o.global[i].label}** \u2192 \`${o.global[i].command}\``);else s.push("\u{1F4ED} \u6682\u65E0\u5168\u5C40\u83DC\u5355\u9879\uFF0C\u4F7F\u7528 `/menu -g add <\u6307\u4EE4>` \u6DFB\u52A0");else{s.push("### \u{1F4CB} \u4E2A\u4EBA\u5FEB\u6377\u6307\u4EE4\u7BA1\u7406","");const i=p(t,n),a=o.user[i]||[];if(a.length>0)for(let l=0;l<a.length;l++)s.push(`${l+1}. **${a[l].label}** \u2192 \`${a[l].command}\``);else s.push("\u{1F4ED} \u6682\u65E0\u4E2A\u4EBA\u83DC\u5355\u9879\uFF0C\u4F7F\u7528 `/menu add <\u6307\u4EE4>` \u6DFB\u52A0");s.push("");const u=S(e,n);s.push(`\u5F53\u524D\u89E6\u53D1\u8BCD: \`${u}\` (\u4F7F\u7528 \`/menu trigger <\u8BCD>\` \u4FEE\u6539)`)}return s.join(`
|
|
3
3
|
`)}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var $=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.fetchQuotedMessage=U,exports.queryDingUser=A,exports.queryUserIdByMobile=w,exports.filterToolUseContent=M,exports.splitMessage=_,exports.sendDingMessage=k,exports.sendClaudeResponseToDing=q,exports.sendMessageToUser=O,exports.sendOwnerMessage=x;const I=require("utils-ok"),u=$(require("urllib")),m=require("./secrets"),h="https://api.dingtalk.com",b="https://oapi.dingtalk.com";async function U(e,t){try{const o=await e.dingStreamClient.getAccessToken(),s=`${h}/v1.0/im/api/messages/${encodeURIComponent(t)}`,r=await u.default.request(s,{method:"GET",headers:{"x-acs-dingtalk-access-token":o},dataType:"json",timeout:5e3});if(r.status!==200||!r.data)return e.debugLog(`fetchQuotedMessage API \u8FD4\u56DE\u975E200: status=${r.status}, data=${JSON.stringify(r.data)}`),null;const n=r.data;if(n.text&&typeof n.text=="object"){const a=n.text.content;if(typeof a=="string"&&a)return a.trim()}if(typeof n.content=="string"&&n.content)try{const a=JSON.parse(n.content);if(typeof a=="string")return a.trim();if(a.text)return String(a.text).trim();if(a.content)return String(a.content).trim()}catch{return n.content.trim()}if(n.body&&typeof n.body=="object"){const a=n.body;if(typeof a.content=="string"&&a.content)return a.content.trim()}return e.debugLog(`fetchQuotedMessage \u65E0\u6CD5\u4ECE\u54CD\u5E94\u4E2D\u63D0\u53D6\u6587\u672C: keys=${Object.keys(n).join(",")}`),null}catch(o){return console.warn("fetchQuotedMessage \u8BF7\u6C42\u5931\u8D25:",o),null}}async function A(e,t){try{const o=await e.dingStreamClient.getAccessToken(),s=`${b}/topapi/v2/user/get?access_token=${o}`,r=await u.default.request(s,{method:"POST",data:{userid:t},contentType:"json",dataType:"json",timeout:5e3});if(r.status!==200||!r.data)return e.debugLog(`queryDingUser API \u8FD4\u56DE\u975E200: status=${r.status}, data=${JSON.stringify(r.data)}`),null;const n=r.data;return n.errcode!==0?(console.warn(`queryDingUser \u63A5\u53E3\u8FD4\u56DE\u9519\u8BEF: errcode=${n.errcode}, errmsg=${n.errmsg}`),null):n.result||null}catch(o){return console.warn("queryDingUser \u8BF7\u6C42\u5931\u8D25:",o),null}}async function w(e,t){try{const o=await e.dingStreamClient.getAccessToken(),s=`${b}/topapi/v2/user/getbymobile?access_token=${o}`,r=await u.default.request(s,{method:"POST",data:{mobile:t},contentType:"json",dataType:"json",timeout:5e3});if(r.status!==200||!r.data)return e.debugLog(`queryUserIdByMobile API \u8FD4\u56DE\u975E200: status=${r.status}, data=${JSON.stringify(r.data)}`),null;const n=r.data;return n.errcode!==0?(console.warn(`queryUserIdByMobile \u63A5\u53E3\u8FD4\u56DE\u9519\u8BEF: errcode=${n.errcode}, errmsg=${n.errmsg}`),null):n.result?.userid||null}catch(o){return console.warn("queryUserIdByMobile \u8BF7\u6C42\u5931\u8D25:",o),null}}const S=["Write","Read","Edit","Bash","Grep","Glob","Agent","Skill","WebFetch","WebSearch","TaskOutput","AskUserQuestion","EnterPlanMode","ExitPlanMode","TaskCreate","TaskGet","TaskUpdate","TaskList","EnterWorktree","ExitWorktree","CronCreate","CronDelete","CronList","LSP","NotebookEdit"].join("|"),E=new RegExp(`<(${S})[^>]*\\/>`,"g"),C=new RegExp(`<(${S})[^>]*>[\\s\\S]*?<\\/\\1>`,"g"),j=/\n{3,}/g;function M(e){let t=e.replace(E,"");return t=t.replace(C,""),t=t.replace(j,`
|
|
2
2
|
|
|
3
|
-
`),t.trim()}function
|
|
4
|
-
`,t);(
|
|
5
|
-
@${i}`);const
|
|
6
|
-
`:"";await
|
|
3
|
+
`),t.trim()}function _(e,t){const o=[];for(;e.length>t;){let s=e.lastIndexOf(`
|
|
4
|
+
`,t);(s===-1||s<t*.5)&&(s=e.lastIndexOf("\u3002",t)),(s===-1||s<t*.5)&&(s=e.lastIndexOf(" ",t)),s===-1||s<t*.5?s=t:s+=1,o.push(e.substring(0,s).trim()),e=e.substring(s).trim()}return e.length>0&&o.push(e),o}async function k(e,t){const{conversationId:o,sessionWebhook:s,atUserId:r,content:n,msgType:a="text"}=t,c=e.config.conversations.find(d=>d.conversationId===o);let i=r;(c?.atSender===!1||c?.conversationType==="1")&&(i=void 0);const g=i?[i]:[],p=(0,m.resolveSecret)(c?.dingToken);let f=n;i&&a==="markdown"&&(f=`${n}
|
|
5
|
+
@${i}`);const y=a==="markdown"?{msgtype:"markdown",markdown:{title:f,text:f},at:{atUserIds:g,isAtAll:!1}}:{msgtype:"text",text:{content:n},at:{atUserIds:g,isAtAll:!1}};if(p){const d=await e.dingStreamClient.getAccessToken(),l=`https://oapi.dingtalk.com/robot/send?access_token=${p}`;try{await u.default.request(l,{method:"POST",data:y,contentType:"json",headers:{"x-acs-dingtalk-access-token":d},dataType:"json"})}catch(T){console.error("\u901A\u8FC7 dingToken \u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",T)}}else if(s){const d=await e.dingStreamClient.getAccessToken();try{await u.default.request(s,{method:"POST",data:y,contentType:"json",headers:{"x-acs-dingtalk-access-token":d},dataType:"json"})}catch(l){console.error("\u901A\u8FC7 sessionWebhook \u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",l)}}else if(e.config.defaultDingToken){const d=await e.dingStreamClient.getAccessToken(),l=`https://oapi.dingtalk.com/robot/send?access_token=${(0,m.resolveSecret)(e.config.defaultDingToken)}`;try{await u.default.request(l,{method:"POST",data:y,contentType:"json",headers:{"x-acs-dingtalk-access-token":d},dataType:"json"})}catch(T){console.error("\u901A\u8FC7 defaultDingToken \u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",T)}}else console.error("\u672A\u80FD\u83B7\u53D6\u673A\u5668\u4EBA\u4FE1\u606F\u53D1\u9001\u9014\u5F84")}async function q(e,t,o,s,r){const a=M(r);if(!a){e.debugLog("\u8FC7\u6EE4\u540E\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u8DF3\u8FC7\u53D1\u9001");return}if(a.length<=18e3)await k(e,{conversationId:t,sessionWebhook:o,atUserId:s,content:a,msgType:"markdown"});else{const c=_(a,18e3);for(let i=0;i<c.length;i++){const g=c.length>1?`**[${i+1}/${c.length}]**
|
|
6
|
+
`:"";await k(e,{conversationId:t,sessionWebhook:o,atUserId:i===c.length-1?s:"",content:g+c[i],msgType:"markdown"}),i<c.length-1&&await I.asyncUtil.sleep(500)}}}async function O(e,t,o,s="text"){if(!e.config.enableMsgToUser)return console.log(`[sendMessageToUser] enableMsgToUser \u672A\u5F00\u542F\uFF0C\u8DF3\u8FC7\u53D1\u9001 (userId=${t})`),!1;try{const r=await e.dingStreamClient.getAccessToken(),n=s==="markdown"?"sampleMarkdown":"sampleText",a=JSON.stringify(s==="markdown"?{title:"notification",text:o}:{content:o}),c=await u.default.request(`${h}/v1.0/robot/oToMessages/batchSend`,{method:"POST",data:{robotCode:e.clientId,userIds:[t],msgKey:n,msgParam:a},contentType:"json",headers:{"x-acs-dingtalk-access-token":r},dataType:"json"});return c.status===200?!0:(console.error(`sendMessageToUser API \u8FD4\u56DE\u975E200: status=${c.status}, userId=${t}`),!1)}catch(r){return console.error(`sendMessageToUser \u5931\u8D25 (userId=${t}):`,r),!1}}async function x(e,t,o="text"){const{ownerConversationId:s,owner:r}=e.config;if(!s||!r)return!1;const n=await w(e,r);return n?O(e,n,t,o):(console.error(`sendOwnerMessage: \u65E0\u6CD5\u5C06\u624B\u673A\u53F7 ${r} \u89E3\u6790\u4E3A Ding userId`),!1)}
|
package/dist/src/biz/notify.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var g=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.sendNotify=F;const u=g(require("fs")),S=g(require("path")),N=g(require("os")),m=g(require("urllib")),O=require("./secrets"),I="https://api.dingtalk.com",q="https://oapi.dingtalk.com";function w(e){return S.default.join(N.default.homedir(),".cc-ding",e)}function P(e){return S.default.join(w(e),"phone-map.json")}function M(e){const n=P(e);if(!u.default.existsSync(n))return{};try{const t=JSON.parse(u.default.readFileSync(n,"utf-8"));if(typeof t=="object"&&t!==null)return t}catch{}return{}}function x(e,n){const t=P(e);try{u.default.writeFileSync(t,JSON.stringify(n,null,2),"utf-8")}catch{}}async function D(e,n){const t=await m.default.request(`${I}/v1.0/oauth2/accessToken`,{method:"POST",data:{appKey:e,appSecret:n},contentType:"json",dataType:"json",timeout:1e4});if(t.status!==200||!t.data?.accessToken)throw new Error(`\u83B7\u53D6 accessToken \u5931\u8D25: ${JSON.stringify(t.data)}`);return t.data.accessToken}async function E(e,n){const t=await m.default.request(`${q}/topapi/v2/user/getbymobile?access_token=${e}`,{method:"POST",data:{mobile:n},contentType:"json",dataType:"json",timeout:5e3});if(t.status!==200||!t.data)return null;const r=t.data;return r.errcode!==0?null:r.result?.userid||null}async function J(e,n,t,r,c){const h=c?"sampleMarkdown":"sampleText",f=JSON.stringify(c?{title:"notification",text:r}:{content:r});return(await m.default.request(`${I}/v1.0/robot/oToMessages/batchSend`,{method:"POST",data:{robotCode:n,userIds:[t],msgKey:h,msgParam:f},contentType:"json",headers:{"x-acs-dingtalk-access-token":e},dataType:"json"})).status===200}async function F(e){const{clientId:n,message:t,conversationIds:r,atUserIds:c=[],mobiles:h=[],markdown:f=!1}=e,b=w(n),T=S.default.join(b,"config.json");if(!u.default.existsSync(T))return console.error(`\u274C \u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728: ${T}`),{success:0,fail:r.length};let d;try{d=JSON.parse(u.default.readFileSync(T,"utf-8"))}catch(a){return console.error(`\u274C \u914D\u7F6E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${a instanceof Error?a.message:a}`),{success:0,fail:r.length}}let $=0,i=0,y=null;const k=M(n);for(const a of r){const p=d.conversations.find(o=>o.conversationId===a),l=p?.conversationTitle||a;if(p?.conversationType==="1"){const o=h[r.indexOf(a)]||p.mobile;if(!o){console.error(` \u2717 ${l}: \u5355\u804A\u7F3A\u5C11\u624B\u673A\u53F7\uFF08\u8BF7\u914D\u7F6E conversations[].mobile \u6216\u4F20 --mobile\uFF09`),i++;continue}try{y||(y=await D(n,(0,O.resolveSecret)(d.clientSecret)));let s=k[o];if(s||(s=await E(y,o),s&&(k[o]=s,x(n,k))),!s){console.error(` \u2717 ${l}: \u65E0\u6CD5\u89E3\u6790\u624B\u673A\u53F7 ${o} \u4E3A userId`),i++;continue}await J(y,n,s,t,f)?(console.log(` \u2713 ${l}`),$++):(console.error(` \u2717 ${l}: API \u8FD4\u56DE\u5931\u8D25`),i++)}catch(s){console.error(` \u2717 ${l}: ${s instanceof Error?s.message:s}`),i++}continue}const _=(0,O.resolveSecret)(p?.dingToken||d.defaultDingToken);if(!_){console.error(` \u2717 ${l}: \u65E0 dingToken \u53EF\u7528`),i++;continue}try{const o=c.length>0?`${t} ${c.map(A=>`@${A}`).join(" ")}`:t,s=f?{msgtype:"markdown",markdown:{title:o,text:o},at:{atUserIds:c,isAtAll:!1}}:{msgtype:"text",text:{content:o},at:{atUserIds:c,isAtAll:!1}},j=`https://oapi.dingtalk.com/robot/send?access_token=${_}`,v=await m.default.request(j,{method:"POST",data:s,contentType:"json",dataType:"json"});v.status===200?(console.log(` \u2713 ${l}`),$++):(console.error(` \u2717 ${a}: HTTP ${v.status}`),i++)}catch(o){console.error(` \u2717 ${a}: ${o instanceof Error?o.message:o}`),i++}}return{success:$,fail:i}}
|
package/dist/src/biz/platform.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";var d=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.isWindows=m,exports.isWindowsPlatform=o,exports.getExecutableCandidates=C,exports.resolveExecutable=a,exports.commandExists=T,exports.quoteWindowsCommandArg=c,exports.buildWindowsCommandLineForCmd=w,exports.buildWindowsCmdArgs=_,exports.buildWindowsCdCommand=L,exports.formatClaudeCommandMissingMessage=v,exports.spawnCommand=M,exports.safeChmodSync=D,exports.isProcessRunning=I;const u=d(require("fs")),i=d(require("path")),f=require("child_process"),W=".COM;.EXE;.BAT;.CMD",E=new Set([".cmd",".bat"]),P=["/d","/s","/v:off"];function m(){return process.platform==="win32"}function o(t=process.platform){return t==="win32"}function S(t){return o(t)?";":":"}function b(t,e){return(t||"").split(S(e)).map(n=>n.trim()).filter(Boolean)}function A(t){return t.includes("/")||t.includes("\\")}function g(t){return(t||W).split(";").map(e=>e.trim().toLowerCase()).filter(Boolean).map(e=>e.startsWith(".")?e:`.${e}`)}function C(t,e={}){const n=e.platform||process.platform;return o(n)?i.default.extname(t).toLowerCase()?[t]:g(e.pathExt||process.env.PATHEXT).map(s=>`${t}${s}`):[t]}function p(t,e){try{return u.default.statSync(t).isFile()?(o(e)||u.default.accessSync(t,u.default.constants.X_OK),!0):!1}catch{return!1}}function a(t,e={}){const n=e.platform||process.platform,r=C(t,e);if(i.default.isAbsolute(t)||A(t)){for(const s of r)if(p(s,n))return s;return null}for(const s of b(e.envPath||process.env.PATH,n))for(const h of r){const l=i.default.join(s,h);if(p(l,n))return l}return null}function T(t){return a(t)!==null}function c(t){if(t==="")return'""';const e=/[\s"&|<>^()%!]/.test(t);let n="",r=0;for(const s of t.replace(/%/g,"%%")){if(s==="\\"){r++;continue}if(s==='"'){n+="\\".repeat(r*2+1),n+='"',r=0;continue}n+="\\".repeat(r),r=0,n+=s}return n+="\\".repeat(e?r*2:r),e?`"${n}"`:n}function w(t,e){return[t,...e].map(c).join(" ")}function _(t,e){return[...P,"/c",w(t,e)]}function L(t){return`cd /d ${c(t)}`}function v(t){return[`\u672A\u68C0\u6D4B\u5230 Claude Code CLI \u547D\u4EE4 \`${t}\``,"\u8BF7\u786E\u8BA4 Claude Code CLI \u5DF2\u5B89\u88C5\uFF0C\u5E76\u4E14\u8FD0\u884C cc-ding \u7684\u8FDB\u7A0B PATH \u4E2D\u53EF\u4EE5\u8BBF\u95EE\u8BE5\u547D\u4EE4\u3002\u5B89\u88C5\u6216\u4FEE\u6539 PATH \u540E\uFF0C\u8BF7\u91CD\u542F\u5F53\u524D\u7EC8\u7AEF\u3001PM2 \u6216 cc-ding \u8FDB\u7A0B\u3002","Windows \u8865\u5145\uFF1A\u5982\u679C\u901A\u8FC7 npm \u5168\u5C40\u5B89\u88C5 Claude Code CLI\uFF0C\u8BF7\u786E\u8BA4 `claude.cmd` \u6240\u5728\u76EE\u5F55\u5DF2\u52A0\u5165 PATH\u3002"].join(`
|
|
2
|
+
`)}function x(t){return E.has(i.default.extname(t).toLowerCase())}function M(t,e,n={}){const r=a(t)||t;return o()&&x(r)?(0,f.spawn)("cmd.exe",_(r,e),n):(0,f.spawn)(r,e,n)}function D(t,e){m()||require("fs").chmodSync(t,e)}function I(t){try{return process.kill(t,0),!0}catch{return!1}}
|
package/dist/src/biz/quote.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.extractQuoteInfo=
|
|
2
|
-
`).trim()}function
|
|
3
|
-
`)}function
|
|
4
|
-
`).trim()}function
|
|
5
|
-
\u8DEF\u5F84: ${s}`:null}function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.extractQuoteInfo=C,exports.enrichQuoteInfo=$,exports.extractDownloadCode=p,exports.extractFileName=h,exports.detectExtFromBuffer=w,exports.processFileMessage=N,exports.formatPromptWithQuote=k;const m=require("./messaging"),l=require("./image");function f(e){return e?typeof e.text=="string"?e.text.trim():typeof e=="string"?e.trim():"":""}function g(e){if(!e?.richText||!Array.isArray(e.richText))return"";const t=[];for(const i of e.richText)i.type==="text"&&i.text?t.push(i.text):i.type==="picture"&&t.push("[\u56FE\u7247]");return t.join(`
|
|
2
|
+
`).trim()}function y(e){if(!e?.chatRecords||!Array.isArray(e.chatRecords))return"";const t=e.chatRecords;if(t.length===0)return"";const i=[`[\u804A\u5929\u8BB0\u5F55 - ${t.length}\u6761]`];for(const r of t){const n=r.senderNick??r.senderName??"\u672A\u77E5",s=r.content??r.text??"",c=r.msgtype??r.msgType??"text";c!=="text"&&!s?i.push(`${n}: [${c}\u6D88\u606F]`):i.push(`${n}: ${s}`)}return i.join(`
|
|
3
|
+
`)}function T(e){if(!e)return"";const t=[];return typeof e.title=="string"&&t.push(`[\u5361\u7247: ${e.title}]`),typeof e.markdown=="string"?t.push(e.markdown):typeof e.text=="string"&&t.push(e.text),t.join(`
|
|
4
|
+
`).trim()}function C(e){const t=e.text;if(!t?.repliedMsg)return null;const i=t.repliedMsg,r=i.msgId,n=i.senderNick,s=i.msgType||"text",c=i.content;let o="",d,a,x;switch(s){case"text":o=f(c);break;case"picture":{d=c?.pictureDownloadCode||c?.downloadCode||void 0,o="[\u56FE\u7247\u6D88\u606F]";break}case"richText":{const u=c;o=g(u),o||(o="[\u5BCC\u6587\u672C\u6D88\u606F]"),u?.richText&&(x=u.richText);break}case"chatRecord":o=y(c),o||(o="[\u804A\u5929\u8BB0\u5F55]");break;case"file":a=c?.fileName,d=c?.downloadCode||void 0,o=a?`[\u6587\u4EF6: ${a}]`:"[\u6587\u4EF6\u6D88\u606F]";break;case"video":o="[\u89C6\u9891\u6D88\u606F]",d=c?.downloadCode||void 0;break;case"audio":o="[\u8BED\u97F3\u6D88\u606F]",d=c?.downloadCode||void 0;break;case"actionCard":case"interactiveCard":o=T(c),o||(o=`[${s}\u6D88\u606F]`);break;default:{o=f(c),o||(o=`[${s}\u6D88\u606F]`);break}}return!o&&!r?null:{quoteText:o,quoteMessageId:r,quoteSenderNick:n,quoteMsgType:s,quoteDownloadCode:d,quoteFileName:a,quoteRichText:x}}async function $(e,t,i,r,n){const s=t.quoteMsgType,c=t.quoteDownloadCode;if(s==="picture"&&c){const o=await(0,l.processPictureMessage)(e,c,i.robotCode,r,n);if(o){t.quoteText=o;return}}if(s==="richText"&&t.quoteRichText){const o=await(0,l.processRichTextMessage)(e,t.quoteRichText,i.robotCode,r,n);if(o&&o!=="[\u5BCC\u6587\u672C\u6D88\u606F\u5185\u5BB9\u4E3A\u7A7A]"){t.quoteText=o;return}}if((s==="file"||s==="video"||s==="audio")&&c){const o=await(0,l.downloadToFilesDir)(e,c,i.robotCode,r,s,t.quoteFileName);if(o){const d=t.quoteFileName?`[${s}: ${t.quoteFileName}]`:`[${s}]`;t.quoteText=`${d} ${o}`;return}}if(t.quoteText.startsWith("[")&&t.quoteMessageId){const o=await(0,m.fetchQuotedMessage)(e,t.quoteMessageId);o&&(t.quoteText=o)}}function p(e){if(e.downloadCode)return e.downloadCode;if(e.pictureDownloadCode)return e.pictureDownloadCode;if(e.fileDownloadCode)return e.fileDownloadCode;const t=e;if(t.extensions&&typeof t.extensions=="object"){const r=t.extensions;if(r.downloadCode)return r.downloadCode}const i=["image_content","file_content","video_content","audio_content"];for(const r of i){const n=t[r];if(n&&typeof n=="object"){const s=n;if(s.download_code)return s.download_code;if(s.downloadCode)return s.downloadCode}}return null}function h(e){if(e.fileName)return e.fileName;const t=e;for(const i of["content","file_content","image_content"]){const r=t[i];if(r&&typeof r=="object"){const n=r;if(n.fileName&&typeof n.fileName=="string")return n.fileName;if(n.file_name&&typeof n.file_name=="string")return n.file_name;if(n.name&&typeof n.name=="string")return n.name}}return typeof t.fileName=="string"?t.fileName:null}function w(e){return e.length>=5&&e[0]===37&&e[1]===80&&e[2]===68&&e[3]===70&&e[4]===45?"pdf":e.length>=4&&e[0]===80&&e[1]===75&&e[2]===3&&e[3]===4?"docx":e.length>=8&&e[0]===208&&e[1]===207&&e[2]===17&&e[3]===224?"xls":"bin"}async function N(e,t,i){const r=p(t);if(!r)return null;const n=h(t),s=await(0,l.downloadToFilesDir)(e,r,t.robotCode,i,"file",n||void 0);return s?`${n?`\u6587\u4EF6: ${n}`:"\u6587\u4EF6\u6D88\u606F"}
|
|
5
|
+
\u8DEF\u5F84: ${s}`:null}function k(e,t){if(!t.quoteText)return e;const i=[];if(t.quoteSenderNick&&i.push(`\u6765\u81EA: ${t.quoteSenderNick}`),t.quoteMsgType&&t.quoteMsgType!=="text"){const n={picture:"\u56FE\u7247",richText:"\u5BCC\u6587\u672C",chatRecord:"\u804A\u5929\u8BB0\u5F55",file:"\u6587\u4EF6",video:"\u89C6\u9891",audio:"\u8BED\u97F3",actionCard:"\u5361\u7247",interactiveCard:"\u5361\u7247"};i.push(`\u7C7B\u578B: ${n[t.quoteMsgType]||t.quoteMsgType}`)}return`\u2500\u2500 \u5F15\u7528\u6D88\u606F${i.length>0?` (${i.join(", ")})`:""} \u2500\u2500
|
|
6
6
|
${t.quoteText}
|
|
7
7
|
\u2500\u2500 \u5F15\u7528\u7ED3\u675F \u2500\u2500
|
|
8
8
|
|
package/dist/src/biz/recorder.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`)}function
|
|
3
|
-
`))}async function
|
|
4
|
-
`))}function
|
|
5
|
-
`);for(const r of c){const l=r.senderNick??r.senderName??"\u672A\u77E5",d=r.content??r.text??"",a=r.msgtype??r.msgType??"text";n.push(`**${l}** (${a}):`),n.push(d),n.push("")}}else n.push("[\u804A\u5929\u8BB0\u5F55 - \u5DF2\u4FDD\u5B58\u539F\u59CB\u6570\u636E]"),n.push("","```json",JSON.stringify(o,null,2),"```");return
|
|
6
|
-
`))}async function
|
|
7
|
-
`))}function
|
|
8
|
-
`))}function
|
|
9
|
-
`))}async function
|
|
1
|
+
"use strict";var x=exports&&exports.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getRecorderDir=j,exports.recordMessage=b;const y=x(require("fs")),p=x(require("path")),C=require("utils-ok"),m=require("./image"),g=require("./session");function j(o,t){return o.config.recorderCfg?.dist?o.config.recorderCfg.dist:p.default.join((0,g.getConversationDir)(o,t),".recorder")}function R(o=Date.now()){return C.dateUtil.mm(o).format("YYYY-MM-DD_HH-mm-ss-SSS")}function f(o,t,u,s){return["---",`msgType: ${o}`,`sender: ${t} (${u})`,`time: ${C.dateUtil.mm(s).format("YYYY-MM-DD HH:mm:ss")}`,"---",""].join(`
|
|
2
|
+
`)}function h(o,t,u){const s=p.default.join(o,t);y.default.mkdirSync(s,{recursive:!0});const i=`${R()}.md`,n=p.default.join(s,i);return y.default.writeFileSync(n,u,"utf-8"),n}async function $(o,t,u,s,i=""){try{const n=await(0,m.getImageDownloadUrl)(o,t,u);if(!n)return null;const e=await(0,m.downloadImageBuffer)(n);if(!e)return null;const c=p.default.join(s,"attachments");y.default.mkdirSync(c,{recursive:!0});const r=i?`.${i}`:(0,m.detectExtFromBuffer)(e),l=`${R()}-${t.slice(-8)}${r}`,d=p.default.join(c,l);return y.default.writeFileSync(d,e),console.log(`[${(0,g.timestamp)()}] [recorder] \u9644\u4EF6\u5DF2\u4FDD\u5B58: ${d} (${e.length} bytes)`),d}catch(n){return console.warn(`[${(0,g.timestamp)()}] [recorder] \u9644\u4EF6\u4E0B\u8F7D\u5931\u8D25:`,n),null}}function S(o,t,u,s){const i=Date.now(),n=o.text?.content?.trim()??"",e=f("text",u,s,i)+n;return h(t,"text",e)}async function _(o,t,u,s,i){const n=Date.now(),e=t.pictureDownloadCode||(0,m.extractDownloadCode)(t),c=[f("picture",s,i,n)];if(e){const r=await $(o,e,t.robotCode,u);r?c.push(``):c.push(`[\u56FE\u7247\u4E0B\u8F7D\u5931\u8D25] downloadCode: ${e}`)}else c.push("[\u56FE\u7247\u6D88\u606F - \u65E0\u6CD5\u83B7\u53D6\u4E0B\u8F7D\u7801]"),c.push("","```json",JSON.stringify(t,null,2),"```");return h(u,"picture",c.join(`
|
|
3
|
+
`))}async function k(o,t,u,s,i,n){const e=Date.now(),c=(0,m.extractDownloadCode)(t),r=[f(n,s,i,e)];if(c){const l=await $(o,c,t.robotCode,u);l?r.push(`[${n}] ${l}`):r.push(`[${n}\u4E0B\u8F7D\u5931\u8D25] downloadCode: ${c}`)}else r.push(`[${n}\u6D88\u606F - \u65E0\u6CD5\u83B7\u53D6\u4E0B\u8F7D\u7801\uFF0C\u5DF2\u4FDD\u5B58\u539F\u59CB\u6570\u636E]`),r.push("","```json",JSON.stringify(t,null,2),"```");return h(u,n,r.join(`
|
|
4
|
+
`))}function N(o,t,u,s){const i=Date.now(),n=[f("chatRecord",u,s,i)],e=o;let c=null;if(e.chatRecords&&Array.isArray(e.chatRecords))c=e.chatRecords;else if(e.extensions&&typeof e.extensions=="object"){const r=e.extensions;r.chatRecords&&Array.isArray(r.chatRecords)&&(c=r.chatRecords)}if(c&&c.length>0){n.push(`\u5171 ${c.length} \u6761\u6D88\u606F:
|
|
5
|
+
`);for(const r of c){const l=r.senderNick??r.senderName??"\u672A\u77E5",d=r.content??r.text??"",a=r.msgtype??r.msgType??"text";n.push(`**${l}** (${a}):`),n.push(d),n.push("")}}else n.push("[\u804A\u5929\u8BB0\u5F55 - \u5DF2\u4FDD\u5B58\u539F\u59CB\u6570\u636E]"),n.push("","```json",JSON.stringify(o,null,2),"```");return h(t,"chatRecord",n.join(`
|
|
6
|
+
`))}async function v(o,t,u,s,i){const n=Date.now(),e=[f("richText",s,i,n)],c=t.content?.richText;if(c&&Array.isArray(c)){const r=c,l=await Promise.all(r.map(async d=>{if(d.type!=="picture")return null;const a=d.downloadCode||d.pictureDownloadCode;return a?$(o,a,t.robotCode,u):null}));for(let d=0;d<r.length;d++){const a=r[d];if(a.type==="text"&&a.text)e.push(a.text);else if(a.type==="picture"){if(a.downloadCode||a.pictureDownloadCode){const w=l[d];w?e.push(``):e.push("[\u5185\u5D4C\u56FE\u7247\u4E0B\u8F7D\u5931\u8D25]")}}else a.type==="mention"&&a.userId&&e.push(`@${a.userId}`)}}else e.push("[\u5BCC\u6587\u672C\u6D88\u606F - \u5DF2\u4FDD\u5B58\u539F\u59CB\u6570\u636E]"),e.push("","```json",JSON.stringify(t,null,2),"```");return h(u,"richText",e.join(`
|
|
7
|
+
`))}function M(o,t,u,s,i){const n=Date.now(),e=[f(i,u,s,n)],c=o,r=c.actionCard??c.interactiveCard??c.content??c;return typeof r.text=="string"?e.push(r.text):typeof r.title=="string"&&(e.push(`**${r.title}**`),typeof r.markdown=="string"&&e.push(r.markdown)),e.push("","---","\u539F\u59CB\u6570\u636E:","```json",JSON.stringify(o,null,2),"```"),h(t,i,e.join(`
|
|
8
|
+
`))}function P(o,t,u,s,i){const n=Date.now(),e=[f(i,u,s,n)];return e.push(`[\u672A\u77E5\u6D88\u606F\u7C7B\u578B: ${i}]`),e.push("","```json",JSON.stringify(o,null,2),"```"),h(t,"unknown",e.join(`
|
|
9
|
+
`))}async function b(o,t,u){const s=j(o,u),i=t.msgtype||"unknown",n=t.senderNick??"\u672A\u77E5",e=t.senderStaffId??"";switch(console.log(`[${(0,g.timestamp)()}] [recorder] \u8BB0\u5F55\u6D88\u606F: type=${i}, sender=${n}(${e})`),i){case"text":return S(t,s,n,e);case"picture":return _(o,t,s,n,e);case"file":case"video":case"audio":return k(o,t,s,n,e,i);case"chatRecord":return N(t,s,n,e);case"richText":return v(o,t,s,n,e);case"actionCard":case"interactiveCard":return M(t,s,n,e,i);default:return P(t,s,n,e,i)}}
|
package/dist/src/biz/secrets.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isEnvRef=
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isEnvRef=o,exports.resolveSecret=i;const s=/^\$ENV:(\w+)$/,c=new Set;function o(e){return!!e&&s.test(e.trim())}function i(e){if(!e)return e;const n=e.trim().match(s);if(!n)return e;const r=n[1],t=process.env[r];return t===void 0||t===""?(c.has(r)||(c.add(r),console.error(`[secrets] \u914D\u7F6E\u5F15\u7528\u7684\u73AF\u5883\u53D8\u91CF\u672A\u8BBE\u7F6E: ${r} (\u5F15\u7528\u503C: ${e})`)),""):t}
|
package/dist/src/biz/session.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`)}function
|
|
3
|
-
`).filter(
|
|
4
|
-
`)}catch{return null}}function
|
|
5
|
-
`;try{
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
\u{
|
|
9
|
-
|
|
10
|
-
`,"utf-8")),
|
|
1
|
+
"use strict";var U=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.timestamp=$,exports.getHomeDir=F,exports.getClientDir=P,exports.initClientDir=E,exports.ensureClientDir=ie,exports.getClientConfig=oe,exports.resolveToUserId=b,exports.authCheck=re,exports.isOwner=Y,exports.isAdmin=R,exports.isOwnerOrAdmin=J,exports.debugLog=H,exports.isMobile=k,exports.getPhoneMapFile=W,exports.loadPhoneMap=B,exports.savePhoneMap=_,exports.userIdToPhone=ae,exports.getUserIdNameMapFile=L,exports.loadUserIdNameMap=z,exports.saveUserIdNameMap=G,exports.resolveUserIdName=ue,exports.resolveUserId=de,exports.resolveAllPhonesInConfig=le,exports.hashConversationId=K,exports.getReplyWebhook=fe,exports.getReplyConversationId=ge,exports.findActiveSession=C,exports.getConversationConfig=T,exports.getConversationDir=N,exports.getSessionsDir=M,exports.getTasksDir=X,exports.getImagesDir=V,exports.getSessionDir=v,exports.getSessionId=w,exports.formatSessionInfo=Se,exports.readSessionLogTail=ye,exports.findHistorySession=Z,exports.findLatestSession=he,exports.updateSessionFile=A,exports.appendSessionLog=me,exports.getActiveSessionsFile=O,exports.saveActiveSession=D,exports.loadActiveSessions=$e,exports.endSession=ee,exports.switchToSession=ve,exports.startNewSession=ne,exports.processMessageQueue=j,exports.handleSessionMessage=we,exports.cleanCache=pe;const p=require("utils-ok"),o=U(require("fs")),se=U(require("os")),x=U(require("assert")),Q=U(require("crypto")),g=U(require("path")),te=require("./commands"),h=require("./messaging"),I=require("./claude-process"),q=require("./platform");function $(){return p.dateUtil.mm(Date.now()).format("YYYY-MM-DD HH:mm:ss")}function F(){return se.default.homedir()}function P(e){return g.default.join(F(),".cc-ding",e.clientId)}function E(e,s){const n=g.default.join(F(),".cc-ding",e),t=g.default.join(n,"config.json");return o.default.mkdirSync(n,{recursive:!0}),o.default.writeFileSync(t,JSON.stringify(s,null,2),{encoding:"utf-8",mode:(0,q.isWindows)()?void 0:384}),(0,q.isWindows)()||o.default.chmodSync(t,384),t}function ie(e){const s=g.default.join(F(),".cc-ding",e),n=g.default.join(s,"config.json");if(o.default.existsSync(n))return;console.log(`[${$()}] \u5BA2\u6237\u7AEF\u76EE\u5F55\u672A\u521D\u59CB\u5316: ${s}`),console.log(`[${$()}] \u6B63\u5728\u81EA\u52A8\u521D\u59CB\u5316...`),E(e,{clientName:"cc\u52A9\u624B",owner:"<owner\u624B\u673A\u53F7>",whiteUserList:[],clientSecret:"<clientSecret-\u9489\u9489Stream\u8FDE\u63A5\u5BC6\u94A5>",defaultDingToken:"<\u515C\u5E95\u9489\u9489\u673A\u5668\u4EBAToken>",conversations:[]}),console.log(`[${$()}] \u5DF2\u751F\u6210\u9ED8\u8BA4\u914D\u7F6E\u6587\u4EF6: ${n}`),console.log(`[${$()}] \u8BF7\u7F16\u8F91 config.json \u586B\u5199\u5FC5\u8981\u7684\u914D\u7F6E\u9879\u540E\u91CD\u65B0\u542F\u52A8`),process.exit(1)}function oe(e){const s=g.default.join(P(e),"config.json");(0,x.default)(o.default.existsSync(s),`Could not find client config file: ${s}`);const n=p.fileUtil.getJSON(s);return(0,x.default)(n.clientSecret,"config.json missing required field: clientSecret"),(0,x.default)(n.whiteUserList,"config.json missing required field: whiteUserList"),n}function b(e,s){return k(s)&&e.resolvedPhones[s]||s}function re(e,s,n){if(J(e,s))return!0;if(n){const t=e.config.conversations.find(i=>i.conversationId===n);if(t?.whiteUserList&&t.whiteUserList.length>0)return t.whiteUserList.some(i=>b(e,i)===s)}return e.config.whiteUserList.some(t=>b(e,t)===s)}function Y(e,s){const n=e.config.owner;if(!n||!k(n))return!1;const t=e.resolvedPhones[n];return!!t&&t===s}function R(e,s){return e.config.adminUserList?.length?e.config.adminUserList.some(n=>b(e,n)===s):!1}function J(e,s){return Y(e,s)||R(e,s)}function H(e,s,...n){e.config.debug&&console.log(`[DEBUG] ${s}`,...n)}const ce=/^1\d{10}$/;function k(e){return ce.test(e)}function W(e){return g.default.join(P(e),"phone-map.json")}function B(e){const s=W(e);if(!o.default.existsSync(s))return{};try{const n=JSON.parse(o.default.readFileSync(s,"utf-8"));if(typeof n=="object"&&n!==null)return n}catch{}return{}}function _(e,s){const n=W(e);try{o.default.writeFileSync(n,JSON.stringify(s,null,2),"utf-8")}catch(t){console.error("\u4FDD\u5B58 phone-map.json \u5931\u8D25:",t)}}function ae(e,s){for(const[n,t]of Object.entries(e.resolvedPhones))if(t===s)return n;return null}function L(e){return g.default.join(P(e),"user-id-name-map.json")}function z(e){const s=L(e);if(!o.default.existsSync(s))return{};try{const n=JSON.parse(o.default.readFileSync(s,"utf-8"));if(typeof n=="object"&&n!==null)return n}catch{}return{}}function G(e,s){const n=L(e);try{o.default.writeFileSync(n,JSON.stringify(s,null,2),"utf-8")}catch(t){console.error("\u4FDD\u5B58 user-id-name-map.json \u5931\u8D25:",t)}}async function ue(e,s){if(!s)return null;const n=z(e);if(n[s])return n[s];const t=await(0,h.queryDingUser)(e,s);return t&&t.name?(n[s]=t.name,G(e,n),t.name):null}async function de(e,s){if(!s)return null;if(!k(s))return s;if(e.resolvedPhones[s])return e.resolvedPhones[s];const n=await(0,h.queryUserIdByMobile)(e,s);return n&&(e.resolvedPhones[s]=n,_(e,e.resolvedPhones)),n}async function le(e){e.resolvedPhones=B(e);const s=[],n=async t=>{if(e.resolvedPhones[t])return;const i=await(0,h.queryUserIdByMobile)(e,t);i&&(e.resolvedPhones[t]=i,s.push(t))};e.config.owner&&(k(e.config.owner)?(await n(e.config.owner),e.resolvedPhones[e.config.owner]||console.warn(`[WARN] \u65E0\u6CD5\u89E3\u6790 owner \u624B\u673A\u53F7: ${e.config.owner}`)):console.warn(`[WARN] owner \u5FC5\u987B\u4E3A\u624B\u673A\u53F7\uFF0C\u5F53\u524D\u503C\u65E0\u6548: ${e.config.owner}`));for(const t of e.config.whiteUserList)k(t)&&(await n(t),e.resolvedPhones[t]||console.warn(`[WARN] \u65E0\u6CD5\u89E3\u6790 whiteUserList \u624B\u673A\u53F7: ${t}`));for(const t of e.config.conversations)if(t.whiteUserList)for(const i of t.whiteUserList)k(i)&&(await n(i),e.resolvedPhones[i]||console.warn(`[WARN] \u65E0\u6CD5\u89E3\u6790\u7FA4\u767D\u540D\u5355\u624B\u673A\u53F7: ${i}`));s.length>0&&_(e,e.resolvedPhones),console.log(`[\u624B\u673A\u89E3\u6790] \u5DF2\u52A0\u8F7D ${Object.keys(e.resolvedPhones).length} \u6761\u8BB0\u5F55 (${s.length} \u6761\u65B0\u89E3\u6790)`)}function K(e,s){const t=T(e,s)?.linkConversationId||s;return Q.default.createHash("md5").update(t).digest("hex")}function fe(e){return e.currentWebhook||e.sessionWebhook}function ge(e){return e.currentConversationId||e.conversationId}function C(e,s){const n=e.activeSessions.get(s);if(n)return{key:s,session:n};const t=T(e,s);if(t?.linkConversationId){for(const i of e.activeSessions)if(T(e,i[0])?.linkConversationId===t.linkConversationId)return{key:i[0],session:i[1]}}}function T(e,s){return e.config.conversations.find(n=>n.conversationId===s)}function N(e,s){const n=K(e,s);return g.default.join(P(e),n)}function M(e,s){return g.default.join(N(e,s),".sessions")}function X(e,s){return g.default.join(N(e,s),".tasks")}function V(e,s){return g.default.join(N(e,s),".images")}function v(e,s){const n=s.claudeSessionId||s.startTimeStr;return g.default.join(M(e,s.conversationId),n)}function w(e){return e.claudeSessionId||e.startTimeStr}function Se(e,s){const n=C(e,s);if(!n)return null;const{session:t,isProcessing:i,messageQueue:r}=n.session;return[`- **\u4F1A\u8BDDID:** ${w(t)}`,`- **\u53D1\u8D77\u8005:** ${t.startNickName}(${t.startStaffId})`,`- **\u5F00\u59CB\u65F6\u95F4:** ${t.startTimeStr}`,`- **\u6700\u540E\u53D1\u9001\u8005:** ${n.session.lastSenderStaffId}`,`- **\u5904\u7406\u4E2D:** ${i}`,`- **\u6392\u961F\u6D88\u606F:** ${r?.length||0} \u6761`].join(`
|
|
2
|
+
`)}function ye(e,s,n){const t=C(e,s);if(!t)return null;const i=t.session,r=`${v(e,i.session)}/session.log`;if(!o.default.existsSync(r))return null;try{return o.default.readFileSync(r,"utf-8").split(`
|
|
3
|
+
`).filter(u=>u.length>0).slice(-n).join(`
|
|
4
|
+
`)}catch{return null}}function Z(e,s,n){const t=M(e,s),i=`${t}/${n}/session.json`;try{return p.fileUtil.getJSON(i)}catch{}const r=parseInt(n,10);if(!isNaN(r)&&r>0){const d=p.dateUtil.mm(r).format("YYYY-MM-DD-HH-mm-ss"),a=`${t}/${d}/session.json`;try{return p.fileUtil.getJSON(a)}catch{}}return null}function he(e,s){const n=M(e,s);if(!o.default.existsSync(n))return null;const t=C(e,s),i=t?w(t.session.session):null;let r=null,d=0;try{const a=o.default.readdirSync(n,{withFileTypes:!0});for(const u of a){if(!u.isDirectory())continue;const f=g.default.join(n,u.name,"session.json");if(o.default.existsSync(f))try{const c=p.fileUtil.getJSON(f);if(i&&w(c)===i)continue;c.startTime>d&&(d=c.startTime,r=c)}catch{continue}}}catch{}return r}function A(e,s,n){if(n.claudeSessionId&&!s.claudeSessionId){const i=v(e,s);s.claudeSessionId=n.claudeSessionId;const r=v(e,s);i!==r&&o.default.existsSync(i)&&(o.default.renameSync(i,r),console.log(`[${$()}] \u4F1A\u8BDD\u76EE\u5F55\u91CD\u547D\u540D: ${g.default.basename(i)} -> ${g.default.basename(r)}`))}const t=`${v(e,s)}/session.json`;try{n.sessionWebhook&&(s.sessionWebhook=n.sessionWebhook),n.currentWebhook!==void 0&&(s.currentWebhook=n.currentWebhook||void 0),n.currentConversationId!==void 0&&(s.currentConversationId=n.currentConversationId||void 0),o.default.writeFileSync(t,JSON.stringify(s,null,2),"utf-8");const i=n.claudeSessionId?"claudeSessionId":n.currentWebhook!==void 0?"currentWebhook":"sessionWebhook";console.log(`[${$()}] \u4F1A\u8BDD\u6587\u4EF6\u5DF2\u4FDD\u5B58: ${i}`),D(e,s.conversationId)}catch(i){console.error("\u66F4\u65B0 session.json \u5931\u8D25:",i)}}function me(e,s,n){const t=`${e}/session.log`,r=`[${$()}] [${s.toUpperCase()}]: ${n}
|
|
5
|
+
`;try{o.default.appendFileSync(t,r,"utf-8")}catch{}}function O(e,s){return`${M(e,s)}/active.json`}function D(e,s){const n=e.activeSessions.get(s),t=O(e,s);try{if(!n){o.default.existsSync(t)&&o.default.unlinkSync(t);return}const i={session:n.session,lastSenderStaffId:n.lastSenderStaffId,conversationConfig:n.conversationConfig};o.default.mkdirSync(g.default.dirname(t),{recursive:!0}),o.default.writeFileSync(t,JSON.stringify(i,null,2),"utf-8"),H(e,`\u6D3B\u8DC3\u4F1A\u8BDD\u5DF2\u6301\u4E45\u5316: \u7FA4=${s}`)}catch(i){console.error(`\u6301\u4E45\u5316\u6D3B\u8DC3\u4F1A\u8BDD\u5931\u8D25: \u7FA4=${s}`,i)}}function $e(e){for(const s of e.config.conversations){const n=O(e,s.conversationId);if(o.default.existsSync(n))try{const t=p.fileUtil.getJSON(n);if(!t?.session){console.log(`\u6D3B\u8DC3\u4F1A\u8BDD\u6587\u4EF6\u65E0\u6548\uFF0C\u8DF3\u8FC7: ${n}`);continue}const i=v(e,t.session);if(!o.default.existsSync(i)){console.log(`\u6D3B\u8DC3\u4F1A\u8BDD\u76EE\u5F55\u5DF2\u4E0D\u5B58\u5728\uFF0C\u6E05\u7406\u6301\u4E45\u5316\u6587\u4EF6: ${n}`),o.default.unlinkSync(n);continue}e.activeSessions.set(s.conversationId,{session:t.session,lastSenderStaffId:t.lastSenderStaffId||t.session.startStaffId,isProcessing:!1,messageQueue:[],conversationConfig:t.conversationConfig}),console.log(`\u6062\u590D\u6D3B\u8DC3\u4F1A\u8BDD: \u7FA4=${s.conversationId}, \u4F1A\u8BDDID=${w(t.session)}`)}catch(t){console.error(`\u52A0\u8F7D\u6D3B\u8DC3\u4F1A\u8BDD\u5931\u8D25: ${n}`,t)}}}async function ee(e,s,n){const t=C(e,s);if(!t){console.log(`\u7FA4 ${s} \u65E0\u6D3B\u8DC3\u4F1A\u8BDD`),await(0,h.sendDingMessage)(e,{conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u5F53\u524D\u6CA1\u6709\u6D3B\u8DC3\u7684\u4F1A\u8BDD\uFF0C\u65E0\u9700\u7ED3\u675F\u3002
|
|
6
|
+
\u53EF\u4EE5\u901A\u8FC7 /new \u5F00\u59CB\u65B0\u4F1A\u8BDD\u3002`});return}const{key:i,session:r}=t,{session:d}=r,a=v(e,d),u=w(d);console.log(`\u7ED3\u675F\u4F1A\u8BDD: \u7FA4=${s}, \u4F1A\u8BDDID=${u}`),(0,I.interruptClaudeProcess)(r,"\u7ED3\u675F\u4F1A\u8BDD\u65F6\u4E2D\u65AD\u6B63\u5728\u6267\u884C\u7684 Claude \u8FDB\u7A0B")&&o.default.appendFileSync(`${a}/session.log`,`[${$()}] [SYSTEM]: \u7ED3\u675F\u4F1A\u8BDD\u65F6\u4E2D\u65AD Claude \u8FDB\u7A0B
|
|
7
|
+
`,"utf-8");const f=r.messageQueue?.length??0;f>0&&(r.messageQueue=[],console.log(`[${$()}] \u7ED3\u675F\u4F1A\u8BDD\u65F6\u6E05\u7A7A\u6D88\u606F\u961F\u5217: \u7FA4=${s}, \u6E05\u7A7A${f}\u6761\u6D88\u606F`)),await(0,h.sendDingMessage)(e,{conversationId:s,sessionWebhook:n,atUserId:d.startStaffId,content:`\u{1F4AC} \u4F1A\u8BDD\u5DF2\u7ED3\u675F
|
|
8
|
+
\u{1F194} ${u}${f>0?`
|
|
9
|
+
\u{1F5D1}\uFE0F \u5DF2\u6E05\u7A7A\u6D88\u606F\u961F\u5217\uFF0C\u4E22\u5F03${f}\u6761\u5F85\u5904\u7406\u6D88\u606F`:""}`}),e.activeSessions.delete(i),D(e,i),o.default.appendFileSync(`${a}/session.log`,`[${$()}] [SYSTEM]: \u7528\u6237\u8BF7\u6C42\u7ED3\u675F\u4F1A\u8BDD
|
|
10
|
+
`,"utf-8")}async function ve(e,s,n,t,i,r){const d=Z(e,s,t);if(!d)return await(0,h.sendDingMessage)(e,{conversationId:s,sessionWebhook:n,atUserId:i,content:`\u274C \u672A\u627E\u5230\u4F1A\u8BDD ${t}\uFF0C\u8BE5\u4F1A\u8BDD\u53EF\u80FD\u5DF2\u88AB\u6E05\u7406\uFF0C\u8BF7\u53D1\u9001\u65B0\u6D88\u606F\u5F00\u59CB\u65B0\u4F1A\u8BDD`}),!1;const a=v(e,d);if(!o.default.existsSync(a))return await(0,h.sendDingMessage)(e,{conversationId:s,sessionWebhook:n,atUserId:i,content:`\u274C \u4F1A\u8BDD ${t} \u7684\u6570\u636E\u5DF2\u88AB\u6E05\u7406\uFF0C\u65E0\u6CD5\u6062\u590D\uFF0C\u8BF7\u53D1\u9001\u65B0\u6D88\u606F\u5F00\u59CB\u65B0\u4F1A\u8BDD`}),!1;const u=C(e,s);u&&(console.log(`\u5207\u6362\u4F1A\u8BDD\uFF0C\u5148\u7ED3\u675F\u5F53\u524D\u4F1A\u8BDD: ${w(u.session.session)}`),(0,I.interruptClaudeProcess)(u.session,"\u5207\u6362\u4F1A\u8BDD\u65F6\u4E2D\u65AD\u6B63\u5728\u6267\u884C\u7684 Claude \u8FDB\u7A0B"),e.activeSessions.delete(u.key),D(e,u.key),o.default.appendFileSync(`${v(e,u.session.session)}/session.log`,`[${$()}] [SYSTEM]: \u4F1A\u8BDD\u88AB\u5207\u6362\u5230 ${t}\uFF0C\u7ED3\u675F\u5F53\u524D\u4F1A\u8BDD
|
|
11
|
+
`,"utf-8")),e.activeSessions.set(s,{session:d,lastSenderStaffId:i,isProcessing:!1,messageQueue:[],conversationConfig:r}),D(e,s);const f=!!d.claudeSessionId,c=w(d);return await(0,h.sendDingMessage)(e,{conversationId:s,sessionWebhook:n,atUserId:i,content:`\u2705 \u5DF2\u5207\u6362\u5230\u5386\u53F2\u4F1A\u8BDD (\u{1F194} ${c})
|
|
11
12
|
${f?"\u{1F504} \u5DF2\u6062\u590D\u5BF9\u8BDD\u4E0A\u4E0B\u6587":"\u26A0\uFE0F \u8BE5\u4F1A\u8BDD\u65E0\u5386\u53F2\u4E0A\u4E0B\u6587\uFF0C\u5C06\u4ECE\u5934\u5F00\u59CB"}
|
|
12
|
-
\u{1F4A1} \u56DE\u590D /end \u53EF\u7ED3\u675F\u672C\u8F6E\u5BF9\u8BDD`}),console.log(`\u5DF2\u5207\u6362\u5230\u5386\u53F2\u4F1A\u8BDD: \u7FA4=${s}, \u4F1A\u8BDDID=${
|
|
13
|
-
\u5904\u7406\u4E2D...
|
|
14
|
-
\u{1F4A1} \u56DE\u590D /end \u53EF\u7ED3\u675F\u672C\u8F6E\u5BF9\u8BDD`});try{await(0,claude_process_1.executeClaudeQuery)(e,r,u,{skill:c.taskCfg?.skill,agent:c.agent,senderNick:i,senderStaffId:o,permissionMode:c.permissionMode})}catch(l){console.error("\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",l),await(0,messaging_1.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:o,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${l instanceof Error?l.message:String(l)}`})}finally{const l=e.activeSessions.get(n);l&&(l.isProcessing=!1)}const g=e.activeSessions.get(n);g&&g.messageQueue.length>0&&await processMessageQueue(e,n)}async function processMessageQueue(e,s){const n=e.activeSessions.get(s);if(!n||n.messageQueue.length===0)return;const t=n.messageQueue.shift(),{message:o,senderStaffId:i,senderNick:u}=t,c=n.session.sessionWebhook;console.log(`\u5904\u7406\u961F\u5217\u6D88\u606F: \u7FA4=${s}, \u5269\u4F59 ${n.messageQueue.length} \u6761`),n.isProcessing=!0,n.lastSenderStaffId=i,saveActiveSession(e,s),n.conversationConfig.receiveReply!==!1&&await(0,messaging_1.sendDingMessage)(e,{conversationId:s,sessionWebhook:c,atUserId:i,content:"\u2705 \u6536\u5230\uFF0C\u6211\u6765\u5904\u7406..."}).catch(()=>{});try{await(0,claude_process_1.executeClaudeQuery)(e,n.session,o,{skill:n.conversationConfig.taskCfg?.skill,agent:n.conversationConfig.agent,senderNick:u,senderStaffId:i,permissionMode:n.conversationConfig.permissionMode})}catch(a){console.error("\u6267\u884C\u961F\u5217 Claude \u67E5\u8BE2\u5931\u8D25:",a),await(0,messaging_1.sendDingMessage)(e,{conversationId:s,sessionWebhook:c,atUserId:i,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${a instanceof Error?a.message:String(a)}`})}finally{n.isProcessing=!1}if(n.goonPending){n.goonPending=!1,n.interrupted=!1,n.isProcessing=!0;try{await(0,claude_process_1.executeClaudeQuery)(e,n.session,"\u7EE7\u7EED",{senderNick:n.session.startNickName,senderStaffId:n.lastSenderStaffId,permissionMode:n.conversationConfig.permissionMode})}catch(a){console.error("goonPending \u6062\u590D\u6267\u884C\u5931\u8D25:",a)}finally{n.isProcessing=!1}}n.messageQueue.length>0&&await processMessageQueue(e,s)}async function handleSessionMessage(e,s){const{conversationId:n,sessionWebhook:t,senderStaffId:o,senderNick:i,message:u,conversationConfig:c}=s,a=u.replace(/^\[提及用户: .+\]\n/,"");if((0,commands_1.parseEndCommand)(a)){await endSession(e,n,t);return}const f=findActiveSession(e,n),r=f?.session;if(r){const d=getSessionDir(e,r.session);if(fs_1.default.existsSync(d)||(fs_1.default.mkdirSync(d,{recursive:!0}),fs_1.default.writeFileSync(`${d}/session.json`,JSON.stringify(r.session,null,2),"utf-8"),console.log(`\u4F1A\u8BDD\u76EE\u5F55\u5DF2\u91CD\u5EFA: \u7FA4=${n}, \u8DEF\u5F84=${d}`)),r.isProcessing){const l={message:u,senderStaffId:o,senderNick:i};r.messageQueue.push(l);const S=r.messageQueue.length;console.log(`\u4F1A\u8BDD ${n} \u6D88\u606F\u5DF2\u5165\u961F\uFF0C\u6392\u961F\u7B2C ${S} \u6761`),await(0,messaging_1.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:o,content:`\u23F3 \u6B63\u5728\u5904\u7406\u4E2D\uFF0C\u5DF2\u52A0\u5165\u961F\u5217\uFF08\u6392\u961F\u7B2C ${S} \u6761\uFF09`});return}const g=r.session.conversationId===n;console.log(`\u8FFD\u52A0\u6D88\u606F\u5230\u6D3B\u8DC3\u4F1A\u8BDD: \u7FA4=${n}, \u4F1A\u8BDDID=${getSessionId(r.session)}${g?"":`(\u5173\u8054\u7FA4,\u4F1A\u8BDD\u5F52\u5C5E=${r.session.conversationId})`}`),r.lastSenderStaffId=o,r.isProcessing=!0,saveActiveSession(e,f.key),g&&t!==r.session.sessionWebhook&&(r.session.sessionWebhook=t,updateSessionFile(e,r.session,{sessionWebhook:t})),r.session.currentWebhook=t,r.session.currentConversationId=n,updateSessionFile(e,r.session,{currentWebhook:t,currentConversationId:n}),c.receiveReply!==!1&&await(0,messaging_1.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:o,content:"\u2705 \u6536\u5230\uFF0C\u6211\u6765\u5904\u7406..."});try{await(0,claude_process_1.executeClaudeQuery)(e,r.session,u,{skill:c.taskCfg?.skill,agent:c.agent,senderNick:i,senderStaffId:o,permissionMode:c.permissionMode})}catch(l){if(r.session.claudeSessionId){console.log(`[\u4F1A\u8BDD\u6062\u590D\u5931\u8D25] \u6E05\u9664 claudeSessionId \u5E76\u91CD\u65B0\u53D1\u8D77: ${r.session.claudeSessionId}`),r.session.claudeSessionId=void 0,e.updateSessionFile(r.session,{});try{await(0,claude_process_1.executeClaudeQuery)(e,r.session,u,{skill:c.taskCfg?.skill,agent:c.agent,senderNick:i,senderStaffId:o,permissionMode:c.permissionMode});return}catch(S){console.error("\u91CD\u8BD5\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",S),await(0,messaging_1.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:o,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${S instanceof Error?S.message:String(S)}`}),r.isProcessing=!1,await processMessageQueue(e,n);return}}console.error("\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",l),await(0,messaging_1.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:o,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${l instanceof Error?l.message:String(l)}`})}finally{r.isProcessing=!1}await processMessageQueue(e,n)}else await startNewSession(e,{conversationId:n,sessionWebhook:t,senderStaffId:o,senderNick:i,message:u,conversationConfig:c})}function cleanCache(e,s,n=!0){const t={sessionsDeleted:0,tasksDeleted:0,imagesDeleted:0,errors:[]},o=s?[s]:e.config.conversations.map(i=>i.conversationId);for(const i of o){let u=null;if(n){const d=findActiveSession(e,i);d&&(u=getSessionId(d.session.session))}const c=getSessionsDir(e,i);if(fs_1.default.existsSync(c))try{const d=fs_1.default.readdirSync(c,{withFileTypes:!0});for(const g of d){if(!g.isDirectory()||u&&g.name===u)continue;const l=path_1.default.join(c,g.name);try{fs_1.default.rmSync(l,{recursive:!0,force:!0}),t.sessionsDeleted++}catch{t.errors.push(`\u5220\u9664\u4F1A\u8BDD\u76EE\u5F55\u5931\u8D25: ${l}`)}}}catch{t.errors.push(`\u8BFB\u53D6sessions\u76EE\u5F55\u5931\u8D25: ${c}`)}const a=getTasksDir(e,i);if(fs_1.default.existsSync(a))try{const d=fs_1.default.readdirSync(a,{withFileTypes:!0});for(const g of d){if(!g.isDirectory())continue;const l=path_1.default.join(a,g.name);try{fs_1.default.rmSync(l,{recursive:!0,force:!0}),t.tasksDeleted++}catch{t.errors.push(`\u5220\u9664\u4EFB\u52A1\u76EE\u5F55\u5931\u8D25: ${l}`)}}}catch{t.errors.push(`\u8BFB\u53D6tasks\u76EE\u5F55\u5931\u8D25: ${a}`)}const f=getImagesDir(e,i);if(fs_1.default.existsSync(f))try{const d=fs_1.default.readdirSync(f,{withFileTypes:!0});for(const g of d){const l=path_1.default.join(f,g.name);try{fs_1.default.unlinkSync(l),t.imagesDeleted++}catch{t.errors.push(`\u5220\u9664\u56FE\u7247\u5931\u8D25: ${l}`)}}}catch{t.errors.push(`\u8BFB\u53D6images\u76EE\u5F55\u5931\u8D25: ${f}`)}const r=path_1.default.join(getConversationDir(e,i),".playwright-cli");if(fs_1.default.existsSync(r))try{fs_1.default.rmSync(r,{recursive:!0,force:!0})}catch{t.errors.push(`\u5220\u9664 playwright-cli \u7F13\u5B58\u5931\u8D25: ${r}`)}if(!n){const d=getActiveSessionsFile(e,i);if(fs_1.default.existsSync(d))try{fs_1.default.unlinkSync(d)}catch{t.errors.push(`\u5220\u9664\u6D3B\u8DC3\u4F1A\u8BDD\u6587\u4EF6\u5931\u8D25: ${d}`)}e.activeSessions.has(i)&&e.activeSessions.delete(i)}}return t}
|
|
13
|
+
\u{1F4A1} \u56DE\u590D /end \u53EF\u7ED3\u675F\u672C\u8F6E\u5BF9\u8BDD`}),console.log(`\u5DF2\u5207\u6362\u5230\u5386\u53F2\u4F1A\u8BDD: \u7FA4=${s}, \u4F1A\u8BDDID=${c}, \u6709Claude\u4E0A\u4E0B\u6587=${f}`),!0}async function ne(e,s){const{conversationId:n,sessionWebhook:t,senderStaffId:i,senderNick:r,message:d,conversationConfig:a}=s,u=e.config.sessionMaxConcurrency??e.DEFAULT_SESSION_MAX_CONCURRENCY;if(e.activeSessions.size>=u){console.log(`\u8FBE\u5230\u6700\u5927\u5E76\u53D1\u6570 (${u})\uFF0C\u62D2\u7EDD\u65B0\u4F1A\u8BDD: \u7FA4=${n}`),await(0,h.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:i,content:"\u{1F92F} \u5F53\u524D\u7E41\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5..."});return}const f=Date.now(),c=Q.default.randomUUID(),l={conversationId:n,sessionWebhook:t,startTime:f,startTimeStr:p.dateUtil.mm(f).format("YYYY-MM-DD-HH-mm-ss"),startStaffId:i,startNickName:r};console.log(`\u521B\u5EFA\u65B0\u4F1A\u8BDD: \u7FA4=${n}, \u4F1A\u8BDDID=${c}, \u53D1\u8D77\u8005=${i}, \u5F53\u524D\u5E76\u53D1=${e.activeSessions.size+1}/${u}`);const m=v(e,l);o.default.mkdirSync(m,{recursive:!0}),o.default.writeFileSync(`${m}/session.json`,JSON.stringify(l,null,2),"utf-8"),e.activeSessions.set(n,{session:l,lastSenderStaffId:i,isProcessing:!0,messageQueue:[],conversationConfig:a}),D(e,n),a.receiveReply!==!1&&await(0,h.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,content:`\u2705 \u6536\u5230\uFF0C\u6211\u6765\u5904\u7406...
|
|
14
|
+
\u{1F194} ${c}`});try{await(0,I.executeClaudeQuery)(e,l,d,{skill:a.taskCfg?.skill,agent:a.agent,senderNick:r,senderStaffId:i,permissionMode:a.permissionMode,newSessionId:c})}catch(y){console.error("\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",y),await(0,h.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:i,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${y instanceof Error?y.message:String(y)}`})}finally{const y=e.activeSessions.get(n);y&&(y.isProcessing=!1)}const S=e.activeSessions.get(n);S&&S.messageQueue.length>0&&await j(e,n)}async function j(e,s){const n=e.activeSessions.get(s);if(!n||n.messageQueue.length===0)return;const t=n.messageQueue.shift(),{message:i,senderStaffId:r,senderNick:d}=t,a=n.session.sessionWebhook;console.log(`\u5904\u7406\u961F\u5217\u6D88\u606F: \u7FA4=${s}, \u5269\u4F59 ${n.messageQueue.length} \u6761`),n.isProcessing=!0,n.lastSenderStaffId=r,D(e,s),n.conversationConfig.receiveReply!==!1&&await(0,h.sendDingMessage)(e,{conversationId:s,sessionWebhook:a,content:"\u2705 \u6536\u5230\uFF0C\u6211\u6765\u5904\u7406..."}).catch(()=>{});try{await(0,I.executeClaudeQuery)(e,n.session,i,{skill:n.conversationConfig.taskCfg?.skill,agent:n.conversationConfig.agent,senderNick:d,senderStaffId:r,permissionMode:n.conversationConfig.permissionMode})}catch(u){console.error("\u6267\u884C\u961F\u5217 Claude \u67E5\u8BE2\u5931\u8D25:",u),await(0,h.sendDingMessage)(e,{conversationId:s,sessionWebhook:a,atUserId:r,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${u instanceof Error?u.message:String(u)}`})}finally{n.isProcessing=!1}if(n.goonPending){n.goonPending=!1,n.interrupted=!1,n.isProcessing=!0;try{await(0,I.executeClaudeQuery)(e,n.session,"\u7EE7\u7EED",{senderNick:n.session.startNickName,senderStaffId:n.lastSenderStaffId,permissionMode:n.conversationConfig.permissionMode})}catch(u){console.error("goonPending \u6062\u590D\u6267\u884C\u5931\u8D25:",u)}finally{n.isProcessing=!1}}n.messageQueue.length>0&&await j(e,s)}async function we(e,s){const{conversationId:n,sessionWebhook:t,senderStaffId:i,senderNick:r,message:d,conversationConfig:a}=s,u=d.replace(/^\[提及用户: .+\]\n/,"");if((0,te.parseEndCommand)(u)){await ee(e,n,t);return}const f=C(e,n),c=f?.session;if(c){const l=v(e,c.session);if(o.default.existsSync(l)||(o.default.mkdirSync(l,{recursive:!0}),o.default.writeFileSync(`${l}/session.json`,JSON.stringify(c.session,null,2),"utf-8"),console.log(`\u4F1A\u8BDD\u76EE\u5F55\u5DF2\u91CD\u5EFA: \u7FA4=${n}, \u8DEF\u5F84=${l}`)),c.isProcessing){const S={message:d,senderStaffId:i,senderNick:r};c.messageQueue.push(S);const y=c.messageQueue.length;console.log(`\u4F1A\u8BDD ${n} \u6D88\u606F\u5DF2\u5165\u961F\uFF0C\u6392\u961F\u7B2C ${y} \u6761`),await(0,h.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:i,content:`\u23F3 \u6B63\u5728\u5904\u7406\u4E2D\uFF0C\u5DF2\u52A0\u5165\u961F\u5217\uFF08\u6392\u961F\u7B2C ${y} \u6761\uFF09`});return}const m=c.session.conversationId===n;console.log(`\u8FFD\u52A0\u6D88\u606F\u5230\u6D3B\u8DC3\u4F1A\u8BDD: \u7FA4=${n}, \u4F1A\u8BDDID=${w(c.session)}${m?"":`(\u5173\u8054\u7FA4,\u4F1A\u8BDD\u5F52\u5C5E=${c.session.conversationId})`}`),c.lastSenderStaffId=i,c.isProcessing=!0,D(e,f.key),m&&t!==c.session.sessionWebhook&&(c.session.sessionWebhook=t,A(e,c.session,{sessionWebhook:t})),c.session.currentWebhook=t,c.session.currentConversationId=n,A(e,c.session,{currentWebhook:t,currentConversationId:n}),a.receiveReply!==!1&&await(0,h.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,content:"\u2705 \u6536\u5230\uFF0C\u6211\u6765\u5904\u7406..."});try{await(0,I.executeClaudeQuery)(e,c.session,d,{skill:a.taskCfg?.skill,agent:a.agent,senderNick:r,senderStaffId:i,permissionMode:a.permissionMode})}catch(S){if(c.session.claudeSessionId){console.log(`[\u4F1A\u8BDD\u6062\u590D\u5931\u8D25] \u6E05\u9664 claudeSessionId \u5E76\u91CD\u65B0\u53D1\u8D77: ${c.session.claudeSessionId}`),c.session.claudeSessionId=void 0,e.updateSessionFile(c.session,{});try{await(0,I.executeClaudeQuery)(e,c.session,d,{skill:a.taskCfg?.skill,agent:a.agent,senderNick:r,senderStaffId:i,permissionMode:a.permissionMode});return}catch(y){console.error("\u91CD\u8BD5\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",y),await(0,h.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:i,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${y instanceof Error?y.message:String(y)}`}),c.isProcessing=!1,await j(e,n);return}}console.error("\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",S),await(0,h.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:i,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${S instanceof Error?S.message:String(S)}`})}finally{c.isProcessing=!1}await j(e,n)}else await ne(e,{conversationId:n,sessionWebhook:t,senderStaffId:i,senderNick:r,message:d,conversationConfig:a})}function pe(e,s,n=!0){const t={sessionsDeleted:0,tasksDeleted:0,imagesDeleted:0,errors:[]},i=s?[s]:e.config.conversations.map(r=>r.conversationId);for(const r of i){let d=null;if(n){const l=C(e,r);l&&(d=w(l.session.session))}const a=M(e,r);if(o.default.existsSync(a))try{const l=o.default.readdirSync(a,{withFileTypes:!0});for(const m of l){if(!m.isDirectory()||d&&m.name===d)continue;const S=g.default.join(a,m.name);try{o.default.rmSync(S,{recursive:!0,force:!0}),t.sessionsDeleted++}catch{t.errors.push(`\u5220\u9664\u4F1A\u8BDD\u76EE\u5F55\u5931\u8D25: ${S}`)}}}catch{t.errors.push(`\u8BFB\u53D6sessions\u76EE\u5F55\u5931\u8D25: ${a}`)}const u=X(e,r);if(o.default.existsSync(u))try{const l=o.default.readdirSync(u,{withFileTypes:!0});for(const m of l){if(!m.isDirectory())continue;const S=g.default.join(u,m.name);try{o.default.rmSync(S,{recursive:!0,force:!0}),t.tasksDeleted++}catch{t.errors.push(`\u5220\u9664\u4EFB\u52A1\u76EE\u5F55\u5931\u8D25: ${S}`)}}}catch{t.errors.push(`\u8BFB\u53D6tasks\u76EE\u5F55\u5931\u8D25: ${u}`)}const f=V(e,r);if(o.default.existsSync(f))try{const l=o.default.readdirSync(f,{withFileTypes:!0});for(const m of l){const S=g.default.join(f,m.name);try{o.default.unlinkSync(S),t.imagesDeleted++}catch{t.errors.push(`\u5220\u9664\u56FE\u7247\u5931\u8D25: ${S}`)}}}catch{t.errors.push(`\u8BFB\u53D6images\u76EE\u5F55\u5931\u8D25: ${f}`)}const c=g.default.join(N(e,r),".playwright-cli");if(o.default.existsSync(c))try{o.default.rmSync(c,{recursive:!0,force:!0})}catch{t.errors.push(`\u5220\u9664 playwright-cli \u7F13\u5B58\u5931\u8D25: ${c}`)}if(!n){const l=O(e,r);if(o.default.existsSync(l))try{o.default.unlinkSync(l)}catch{t.errors.push(`\u5220\u9664\u6D3B\u8DC3\u4F1A\u8BDD\u6587\u4EF6\u5931\u8D25: ${l}`)}e.activeSessions.has(r)&&e.activeSessions.delete(r)}}return t}
|