cc-ding 0.0.5 → 0.1.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.
@@ -1 +1,6 @@
1
- 'use strict';function a9_0x1e2d(_0x46fa82,_0x9a50a1){_0x46fa82=_0x46fa82-0x109;const _0x29a6b0=a9_0x29a6();let _0x1e2dff=_0x29a6b0[_0x46fa82];return _0x1e2dff;}const a9_0x2fae45=a9_0x1e2d;(function(_0x2b95e2,_0x23aad5){const _0x2f8a81=a9_0x1e2d,_0x7fd1c2=_0x2b95e2();while(!![]){try{const _0x14c4a3=parseInt(_0x2f8a81(0x134))/0x1+parseInt(_0x2f8a81(0x154))/0x2*(-parseInt(_0x2f8a81(0x156))/0x3)+-parseInt(_0x2f8a81(0x12a))/0x4*(-parseInt(_0x2f8a81(0x161))/0x5)+-parseInt(_0x2f8a81(0x12e))/0x6+-parseInt(_0x2f8a81(0x10e))/0x7*(parseInt(_0x2f8a81(0x145))/0x8)+parseInt(_0x2f8a81(0x118))/0x9*(-parseInt(_0x2f8a81(0x10c))/0xa)+parseInt(_0x2f8a81(0x149))/0xb*(parseInt(_0x2f8a81(0x15f))/0xc);if(_0x14c4a3===_0x23aad5)break;else _0x7fd1c2['push'](_0x7fd1c2['shift']());}catch(_0x301526){_0x7fd1c2['push'](_0x7fd1c2['shift']());}}}(a9_0x29a6,0x82bfe));var __importDefault=this&&this[a9_0x2fae45(0x121)]||function(_0x53e690){const _0x2bc970=a9_0x2fae45;return _0x53e690&&_0x53e690[_0x2bc970(0x143)]?_0x53e690:{'default':_0x53e690};};Object[a9_0x2fae45(0x130)](exports,a9_0x2fae45(0x143),{'value':!![]}),exports[a9_0x2fae45(0x15e)]=fetchQuotedMessage,exports[a9_0x2fae45(0x159)]=queryDingUser,exports[a9_0x2fae45(0x115)]=queryUserIdByMobile,exports['filterToolUseContent']=filterToolUseContent,exports['splitMessage']=splitMessage,exports[a9_0x2fae45(0x109)]=sendDingMessage,exports[a9_0x2fae45(0x166)]=sendClaudeResponseToDing;const utils_ok_1=require(a9_0x2fae45(0x168)),urllib_1=__importDefault(require(a9_0x2fae45(0x147))),DING_API_BASE='https://api.dingtalk.com',DING_OAPI_BASE='https://oapi.dingtalk.com';function a9_0x29a6(){const _0x1e5e35=['userid','fetchQuotedMessage\x20API\x20返回非200:\x20status=','trim','CronCreate','**[','875968wCHPjq','EnterWorktree','过滤后内容为空,跳过发送','dingStreamClient','3271758PtUjts','object','defineProperty',')[^>]*\x5c/>','conversationId','TaskList','497137crkFNs','fetchQuotedMessage\x20无法从响应中提取文本:\x20keys=','defaultDingToken','GET','string','baseUtil','replace','default','status','通过\x20defaultDingToken\x20发送钉钉消息失败:','debugLog','TaskGet','conversationType','AskUserQuestion',',\x20errmsg=','__esModule','result','641320EqWuzM','text','urllib','TaskCreate','4366813KSusJx','TaskOutput','markdown','/topapi/v2/user/get?access_token=','join','EnterPlanMode','data','/v1.0/im/api/messages/','stringify',',\x20data=','queryUserIdByMobile\x20请求失败:','44752xpJZcn','length','66hWnRHI','ExitPlanMode','fetchQuotedMessage\x20请求失败:','queryDingUser','warn','WebFetch','substring','push','fetchQuotedMessage','36WhTBOF','POST','20sCWNTp','queryDingUser\x20API\x20返回非200:\x20status=','atSender','request','https://oapi.dingtalk.com/robot/send?access_token=','sendClaudeResponseToDing','通过\x20sessionWebhook\x20发送钉钉消息失败:','utils-ok','json','Glob','/topapi/v2/user/getbymobile?access_token=','sendDingMessage','dingToken','NotebookEdit','10tRBOMc','getAccessToken','35sXklWo','Read','parse','Bash','通过\x20dingToken\x20发送钉钉消息失败:','LSP','sleep','queryUserIdByMobile','Grep','queryUserIdByMobile\x20API\x20返回非200:\x20status=','5311026ZrATIB','lastIndexOf','conversations','body','content',']**\x0a','TaskUpdate','find','config','__importDefault','errcode','errmsg','error'];a9_0x29a6=function(){return _0x1e5e35;};return a9_0x29a6();}async function fetchQuotedMessage(_0x4e8a20,_0x2533db){const _0x5edf9d=a9_0x2fae45;try{const _0x26700c=await _0x4e8a20[_0x5edf9d(0x12d)][_0x5edf9d(0x10d)](),_0x3e1227=DING_API_BASE+_0x5edf9d(0x150)+encodeURIComponent(_0x2533db),_0xf9a334=await urllib_1[_0x5edf9d(0x13b)][_0x5edf9d(0x164)](_0x3e1227,{'method':_0x5edf9d(0x137),'headers':{'x-acs-dingtalk-access-token':_0x26700c},'dataType':_0x5edf9d(0x169),'timeout':0x1388});if(_0xf9a334[_0x5edf9d(0x13c)]!==0xc8||!_0xf9a334[_0x5edf9d(0x14f)])return _0x4e8a20[_0x5edf9d(0x13e)](_0x5edf9d(0x126)+_0xf9a334[_0x5edf9d(0x13c)]+_0x5edf9d(0x152)+JSON[_0x5edf9d(0x151)](_0xf9a334[_0x5edf9d(0x14f)])),null;const _0x8485dd=_0xf9a334[_0x5edf9d(0x14f)];if(_0x8485dd[_0x5edf9d(0x146)]&&typeof _0x8485dd[_0x5edf9d(0x146)]==='object'){const _0x185dd6=_0x8485dd[_0x5edf9d(0x146)][_0x5edf9d(0x11c)];if(typeof _0x185dd6===_0x5edf9d(0x138)&&_0x185dd6)return _0x185dd6[_0x5edf9d(0x127)]();}if(typeof _0x8485dd[_0x5edf9d(0x11c)]===_0x5edf9d(0x138)&&_0x8485dd[_0x5edf9d(0x11c)])try{const _0x3cd58b=JSON[_0x5edf9d(0x110)](_0x8485dd[_0x5edf9d(0x11c)]);if(typeof _0x3cd58b===_0x5edf9d(0x138))return _0x3cd58b['trim']();if(_0x3cd58b[_0x5edf9d(0x146)])return String(_0x3cd58b[_0x5edf9d(0x146)])[_0x5edf9d(0x127)]();if(_0x3cd58b[_0x5edf9d(0x11c)])return String(_0x3cd58b[_0x5edf9d(0x11c)])[_0x5edf9d(0x127)]();}catch{return _0x8485dd[_0x5edf9d(0x11c)][_0x5edf9d(0x127)]();}if(_0x8485dd[_0x5edf9d(0x11b)]&&typeof _0x8485dd[_0x5edf9d(0x11b)]===_0x5edf9d(0x12f)){const _0x463ad5=_0x8485dd[_0x5edf9d(0x11b)];if(typeof _0x463ad5['content']===_0x5edf9d(0x138)&&_0x463ad5[_0x5edf9d(0x11c)])return _0x463ad5['content'][_0x5edf9d(0x127)]();}return _0x4e8a20[_0x5edf9d(0x13e)](_0x5edf9d(0x135)+Object['keys'](_0x8485dd)[_0x5edf9d(0x14d)](',')),null;}catch(_0x3238b5){return console[_0x5edf9d(0x15a)](_0x5edf9d(0x158),_0x3238b5),null;}}async function queryDingUser(_0xc97b9f,_0x15117a){const _0x38edb0=a9_0x2fae45;try{const _0x1595bb=await _0xc97b9f['dingStreamClient'][_0x38edb0(0x10d)](),_0x23a8d2=DING_OAPI_BASE+_0x38edb0(0x14c)+_0x1595bb,_0x3862c3=await urllib_1[_0x38edb0(0x13b)]['request'](_0x23a8d2,{'method':_0x38edb0(0x160),'data':{'userid':_0x15117a},'contentType':_0x38edb0(0x169),'dataType':_0x38edb0(0x169),'timeout':0x1388});if(_0x3862c3[_0x38edb0(0x13c)]!==0xc8||!_0x3862c3['data'])return _0xc97b9f[_0x38edb0(0x13e)](_0x38edb0(0x162)+_0x3862c3[_0x38edb0(0x13c)]+_0x38edb0(0x152)+JSON['stringify'](_0x3862c3[_0x38edb0(0x14f)])),null;const _0x74d926=_0x3862c3['data'];if(_0x74d926[_0x38edb0(0x122)]!==0x0)return console[_0x38edb0(0x15a)]('queryDingUser\x20接口返回错误:\x20errcode='+_0x74d926[_0x38edb0(0x122)]+_0x38edb0(0x142)+_0x74d926[_0x38edb0(0x123)]),null;return _0x74d926[_0x38edb0(0x144)]||null;}catch(_0x420544){return console[_0x38edb0(0x15a)]('queryDingUser\x20请求失败:',_0x420544),null;}}async function queryUserIdByMobile(_0x79c5b4,_0x51c1fb){const _0x52b93e=a9_0x2fae45;try{const _0x3fb0a1=await _0x79c5b4[_0x52b93e(0x12d)][_0x52b93e(0x10d)](),_0x814976=DING_OAPI_BASE+_0x52b93e(0x16b)+_0x3fb0a1,_0x32c49f=await urllib_1['default'][_0x52b93e(0x164)](_0x814976,{'method':_0x52b93e(0x160),'data':{'mobile':_0x51c1fb},'contentType':'json','dataType':_0x52b93e(0x169),'timeout':0x1388});if(_0x32c49f[_0x52b93e(0x13c)]!==0xc8||!_0x32c49f['data'])return _0x79c5b4[_0x52b93e(0x13e)](_0x52b93e(0x117)+_0x32c49f[_0x52b93e(0x13c)]+_0x52b93e(0x152)+JSON[_0x52b93e(0x151)](_0x32c49f[_0x52b93e(0x14f)])),null;const _0x4447ea=_0x32c49f['data'];if(_0x4447ea[_0x52b93e(0x122)]!==0x0)return console[_0x52b93e(0x15a)]('queryUserIdByMobile\x20接口返回错误:\x20errcode='+_0x4447ea[_0x52b93e(0x122)]+',\x20errmsg='+_0x4447ea[_0x52b93e(0x123)]),null;const _0x2e52a1=_0x4447ea[_0x52b93e(0x144)];return _0x2e52a1?.[_0x52b93e(0x125)]||null;}catch(_0x481469){return console[_0x52b93e(0x15a)](_0x52b93e(0x153),_0x481469),null;}}const TOOL_TAGS=['Write',a9_0x2fae45(0x10f),'Edit',a9_0x2fae45(0x111),a9_0x2fae45(0x116),a9_0x2fae45(0x16a),'Agent','Skill',a9_0x2fae45(0x15b),'WebSearch',a9_0x2fae45(0x14a),a9_0x2fae45(0x141),a9_0x2fae45(0x14e),a9_0x2fae45(0x157),a9_0x2fae45(0x148),a9_0x2fae45(0x13f),a9_0x2fae45(0x11e),a9_0x2fae45(0x133),a9_0x2fae45(0x12b),'ExitWorktree',a9_0x2fae45(0x128),'CronDelete','CronList',a9_0x2fae45(0x113),a9_0x2fae45(0x10b)][a9_0x2fae45(0x14d)]('|'),TOOL_USE_SELF_CLOSE_RE=new RegExp('<('+TOOL_TAGS+a9_0x2fae45(0x131),'g'),TOOL_USE_OPEN_CLOSE_RE=new RegExp('<('+TOOL_TAGS+')[^>]*>[\x5cs\x5cS]*?<\x5c/\x5c1>','g'),MULTI_NEWLINE_RE=/\n{3,}/g;function filterToolUseContent(_0x238abd){const _0x3356d3=a9_0x2fae45;let _0x2118e8=_0x238abd[_0x3356d3(0x13a)](TOOL_USE_SELF_CLOSE_RE,'');return _0x2118e8=_0x2118e8[_0x3356d3(0x13a)](TOOL_USE_OPEN_CLOSE_RE,''),_0x2118e8=_0x2118e8[_0x3356d3(0x13a)](MULTI_NEWLINE_RE,'\x0a\x0a'),_0x2118e8['trim']();}function splitMessage(_0x4f29a7,_0x1ac23d){const _0x45276a=a9_0x2fae45,_0x1f5999=[];while(_0x4f29a7[_0x45276a(0x155)]>_0x1ac23d){let _0x7bacc4=_0x4f29a7[_0x45276a(0x119)]('\x0a',_0x1ac23d);(_0x7bacc4===-0x1||_0x7bacc4<_0x1ac23d*0.5)&&(_0x7bacc4=_0x4f29a7[_0x45276a(0x119)]('。',_0x1ac23d)),(_0x7bacc4===-0x1||_0x7bacc4<_0x1ac23d*0.5)&&(_0x7bacc4=_0x4f29a7[_0x45276a(0x119)]('\x20',_0x1ac23d)),_0x7bacc4===-0x1||_0x7bacc4<_0x1ac23d*0.5?_0x7bacc4=_0x1ac23d:_0x7bacc4+=0x1,_0x1f5999[_0x45276a(0x15d)](_0x4f29a7[_0x45276a(0x15c)](0x0,_0x7bacc4)['trim']()),_0x4f29a7=_0x4f29a7['substring'](_0x7bacc4)[_0x45276a(0x127)]();}return _0x4f29a7[_0x45276a(0x155)]>0x0&&_0x1f5999[_0x45276a(0x15d)](_0x4f29a7),_0x1f5999;}async function sendDingMessage(_0x3322a1,_0x2c9c40){const _0x2be7bc=a9_0x2fae45,{conversationId:_0x32655c,sessionWebhook:_0x2ab82f,atUserId:_0x27937a,content:_0x50f8ac,msgType:msgType='text'}=_0x2c9c40,_0xe724e7=_0x3322a1[_0x2be7bc(0x120)][_0x2be7bc(0x11a)][_0x2be7bc(0x11f)](_0x2541e0=>_0x2541e0[_0x2be7bc(0x132)]===_0x32655c);let _0x38ed82=_0x27937a;(_0xe724e7?.[_0x2be7bc(0x163)]===![]||_0xe724e7?.[_0x2be7bc(0x140)]==='1')&&(_0x38ed82=undefined);const _0x141ccd=_0x38ed82?[_0x38ed82]:[],_0x362dd5=_0xe724e7?.[_0x2be7bc(0x10a)];let _0x2fda86=_0x50f8ac;_0x38ed82&&msgType===_0x2be7bc(0x14b)&&(_0x2fda86=_0x50f8ac+'\x0a@'+_0x38ed82);const _0x16ed4e=msgType==='markdown'?{'msgtype':_0x2be7bc(0x14b),'markdown':{'title':_0x2fda86,'text':_0x2fda86},'at':{'atUserIds':_0x141ccd,'isAtAll':![]}}:{'msgtype':'text','text':{'content':_0x50f8ac},'at':{'atUserIds':_0x141ccd,'isAtAll':![]}};if(_0x362dd5){const _0x5e300f=await _0x3322a1[_0x2be7bc(0x12d)][_0x2be7bc(0x10d)](),_0x329311='https://oapi.dingtalk.com/robot/send?access_token='+_0x362dd5;try{await urllib_1[_0x2be7bc(0x13b)][_0x2be7bc(0x164)](_0x329311,{'method':'POST','data':_0x16ed4e,'contentType':_0x2be7bc(0x169),'headers':{'x-acs-dingtalk-access-token':_0x5e300f},'dataType':_0x2be7bc(0x169)});}catch(_0x1453a4){console[_0x2be7bc(0x124)](_0x2be7bc(0x112),_0x1453a4);}}else{if(_0x2ab82f){const _0x2875cb=await _0x3322a1[_0x2be7bc(0x12d)][_0x2be7bc(0x10d)]();try{await urllib_1[_0x2be7bc(0x13b)][_0x2be7bc(0x164)](_0x2ab82f,{'method':_0x2be7bc(0x160),'data':_0x16ed4e,'contentType':_0x2be7bc(0x169),'headers':{'x-acs-dingtalk-access-token':_0x2875cb},'dataType':_0x2be7bc(0x169)});}catch(_0x194f92){console[_0x2be7bc(0x124)](_0x2be7bc(0x167),_0x194f92);}}else{if(_0x3322a1[_0x2be7bc(0x120)][_0x2be7bc(0x136)]){const _0x209a68=await _0x3322a1[_0x2be7bc(0x12d)][_0x2be7bc(0x10d)](),_0x166a01=_0x2be7bc(0x165)+_0x3322a1[_0x2be7bc(0x120)][_0x2be7bc(0x136)];try{await urllib_1[_0x2be7bc(0x13b)]['request'](_0x166a01,{'method':'POST','data':_0x16ed4e,'contentType':_0x2be7bc(0x169),'headers':{'x-acs-dingtalk-access-token':_0x209a68},'dataType':_0x2be7bc(0x169)});}catch(_0x4398e9){console['error'](_0x2be7bc(0x13d),_0x4398e9);}}else console[_0x2be7bc(0x124)]('未能获取机器人信息发送途径');}}}async function sendClaudeResponseToDing(_0x4aca8c,_0x23a2fe,_0x10f390,_0x579335,_0x404a67){const _0x4cb0a5=a9_0x2fae45,_0xb8c9c2=0x4650,_0x3a6c29=filterToolUseContent(_0x404a67);if(!_0x3a6c29){_0x4aca8c['debugLog'](_0x4cb0a5(0x12c));return;}if(_0x3a6c29[_0x4cb0a5(0x155)]<=_0xb8c9c2)await sendDingMessage(_0x4aca8c,{'conversationId':_0x23a2fe,'sessionWebhook':_0x10f390,'atUserId':_0x579335,'content':_0x3a6c29,'msgType':'markdown'});else{const _0x5c049b=splitMessage(_0x3a6c29,_0xb8c9c2);for(let _0x38daed=0x0;_0x38daed<_0x5c049b['length'];_0x38daed++){const _0x1bc562=_0x5c049b[_0x4cb0a5(0x155)]>0x1?_0x4cb0a5(0x129)+(_0x38daed+0x1)+'/'+_0x5c049b[_0x4cb0a5(0x155)]+_0x4cb0a5(0x11d):'';await sendDingMessage(_0x4aca8c,{'conversationId':_0x23a2fe,'sessionWebhook':_0x10f390,'atUserId':_0x38daed===_0x5c049b['length']-0x1?_0x579335:'','content':_0x1bc562+_0x5c049b[_0x38daed],'msgType':'markdown'}),_0x38daed<_0x5c049b[_0x4cb0a5(0x155)]-0x1&&await utils_ok_1[_0x4cb0a5(0x139)][_0x4cb0a5(0x114)](0x1f4);}}}
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.fetchQuotedMessage=fetchQuotedMessage,exports.queryDingUser=queryDingUser,exports.queryUserIdByMobile=queryUserIdByMobile,exports.filterToolUseContent=filterToolUseContent,exports.splitMessage=splitMessage,exports.sendDingMessage=sendDingMessage,exports.sendClaudeResponseToDing=sendClaudeResponseToDing,exports.sendMessageToUser=sendMessageToUser,exports.sendOwnerMessage=sendOwnerMessage;const utils_ok_1=require("utils-ok"),urllib_1=__importDefault(require("urllib")),DING_API_BASE="https://api.dingtalk.com",DING_OAPI_BASE="https://oapi.dingtalk.com";async function fetchQuotedMessage(e,t){try{const r=await e.dingStreamClient.getAccessToken(),s=`${DING_API_BASE}/v1.0/im/api/messages/${encodeURIComponent(t)}`,n=await urllib_1.default.request(s,{method:"GET",headers:{"x-acs-dingtalk-access-token":r},dataType:"json",timeout:5e3});if(n.status!==200||!n.data)return e.debugLog(`fetchQuotedMessage API \u8FD4\u56DE\u975E200: status=${n.status}, data=${JSON.stringify(n.data)}`),null;const o=n.data;if(o.text&&typeof o.text=="object"){const a=o.text.content;if(typeof a=="string"&&a)return a.trim()}if(typeof o.content=="string"&&o.content)try{const a=JSON.parse(o.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 o.content.trim()}if(o.body&&typeof o.body=="object"){const a=o.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(o).join(",")}`),null}catch(r){return console.warn("fetchQuotedMessage \u8BF7\u6C42\u5931\u8D25:",r),null}}async function queryDingUser(e,t){try{const r=await e.dingStreamClient.getAccessToken(),s=`${DING_OAPI_BASE}/topapi/v2/user/get?access_token=${r}`,n=await urllib_1.default.request(s,{method:"POST",data:{userid:t},contentType:"json",dataType:"json",timeout:5e3});if(n.status!==200||!n.data)return e.debugLog(`queryDingUser API \u8FD4\u56DE\u975E200: status=${n.status}, data=${JSON.stringify(n.data)}`),null;const o=n.data;return o.errcode!==0?(console.warn(`queryDingUser \u63A5\u53E3\u8FD4\u56DE\u9519\u8BEF: errcode=${o.errcode}, errmsg=${o.errmsg}`),null):o.result||null}catch(r){return console.warn("queryDingUser \u8BF7\u6C42\u5931\u8D25:",r),null}}async function queryUserIdByMobile(e,t){try{const r=await e.dingStreamClient.getAccessToken(),s=`${DING_OAPI_BASE}/topapi/v2/user/getbymobile?access_token=${r}`,n=await urllib_1.default.request(s,{method:"POST",data:{mobile:t},contentType:"json",dataType:"json",timeout:5e3});if(n.status!==200||!n.data)return e.debugLog(`queryUserIdByMobile API \u8FD4\u56DE\u975E200: status=${n.status}, data=${JSON.stringify(n.data)}`),null;const o=n.data;return o.errcode!==0?(console.warn(`queryUserIdByMobile \u63A5\u53E3\u8FD4\u56DE\u9519\u8BEF: errcode=${o.errcode}, errmsg=${o.errmsg}`),null):o.result?.userid||null}catch(r){return console.warn("queryUserIdByMobile \u8BF7\u6C42\u5931\u8D25:",r),null}}const TOOL_TAGS=["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("|"),TOOL_USE_SELF_CLOSE_RE=new RegExp(`<(${TOOL_TAGS})[^>]*\\/>`,"g"),TOOL_USE_OPEN_CLOSE_RE=new RegExp(`<(${TOOL_TAGS})[^>]*>[\\s\\S]*?<\\/\\1>`,"g"),MULTI_NEWLINE_RE=/\n{3,}/g;function filterToolUseContent(e){let t=e.replace(TOOL_USE_SELF_CLOSE_RE,"");return t=t.replace(TOOL_USE_OPEN_CLOSE_RE,""),t=t.replace(MULTI_NEWLINE_RE,`
2
+
3
+ `),t.trim()}function splitMessage(e,t){const r=[];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,r.push(e.substring(0,s).trim()),e=e.substring(s).trim()}return e.length>0&&r.push(e),r}async function sendDingMessage(e,t){const{conversationId:r,sessionWebhook:s,atUserId:n,content:o,msgType:a="text"}=t,i=e.config.conversations.find(d=>d.conversationId===r);let c=n;(i?.atSender===!1||i?.conversationType==="1")&&(c=void 0);const l=c?[c]:[],p=i?.dingToken;let g=o;c&&a==="markdown"&&(g=`${o}
5
+ @${c}`);const f=a==="markdown"?{msgtype:"markdown",markdown:{title:g,text:g},at:{atUserIds:l,isAtAll:!1}}:{msgtype:"text",text:{content:o},at:{atUserIds:l,isAtAll:!1}};if(p){const d=await e.dingStreamClient.getAccessToken(),u=`https://oapi.dingtalk.com/robot/send?access_token=${p}`;try{await urllib_1.default.request(u,{method:"POST",data:f,contentType:"json",headers:{"x-acs-dingtalk-access-token":d},dataType:"json"})}catch(y){console.error("\u901A\u8FC7 dingToken \u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",y)}}else if(s){const d=await e.dingStreamClient.getAccessToken();try{await urllib_1.default.request(s,{method:"POST",data:f,contentType:"json",headers:{"x-acs-dingtalk-access-token":d},dataType:"json"})}catch(u){console.error("\u901A\u8FC7 sessionWebhook \u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",u)}}else if(e.config.defaultDingToken){const d=await e.dingStreamClient.getAccessToken(),u=`https://oapi.dingtalk.com/robot/send?access_token=${e.config.defaultDingToken}`;try{await urllib_1.default.request(u,{method:"POST",data:f,contentType:"json",headers:{"x-acs-dingtalk-access-token":d},dataType:"json"})}catch(y){console.error("\u901A\u8FC7 defaultDingToken \u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",y)}}else console.error("\u672A\u80FD\u83B7\u53D6\u673A\u5668\u4EBA\u4FE1\u606F\u53D1\u9001\u9014\u5F84")}async function sendClaudeResponseToDing(e,t,r,s,n){const a=filterToolUseContent(n);if(!a){e.debugLog("\u8FC7\u6EE4\u540E\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u8DF3\u8FC7\u53D1\u9001");return}if(a.length<=18e3)await sendDingMessage(e,{conversationId:t,sessionWebhook:r,atUserId:s,content:a,msgType:"markdown"});else{const i=splitMessage(a,18e3);for(let c=0;c<i.length;c++){const l=i.length>1?`**[${c+1}/${i.length}]**
6
+ `:"";await sendDingMessage(e,{conversationId:t,sessionWebhook:r,atUserId:c===i.length-1?s:"",content:l+i[c],msgType:"markdown"}),c<i.length-1&&await utils_ok_1.baseUtil.sleep(500)}}}async function sendMessageToUser(e,t,r,s="text"){try{const n=await e.dingStreamClient.getAccessToken(),o=s==="markdown"?"sampleMarkdown":"sampleText",a=JSON.stringify(s==="markdown"?{title:"notification",text:r}:{content:r}),i=await urllib_1.default.request(`${DING_API_BASE}/v1.0/robot/oToMessages/batchSend`,{method:"POST",data:{robotCode:e.clientId,userIds:[t],msgKey:o,msgParam:a},contentType:"json",headers:{"x-acs-dingtalk-access-token":n},dataType:"json"});return i.status===200?!0:(console.error(`sendMessageToUser API \u8FD4\u56DE\u975E200: status=${i.status}, userId=${t}`),!1)}catch(n){return console.error(`sendMessageToUser \u5931\u8D25 (userId=${t}):`,n),!1}}async function sendOwnerMessage(e,t,r="text"){const{ownerConversationId:s,owner:n}=e.config;return!s||!n?!1:sendMessageToUser(e,n,t,r)}
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(s){return s&&s.__esModule?s:{default:s}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.sendNotify=sendNotify;const fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),urllib_1=__importDefault(require("urllib")),session_1=require("./session");async function sendNotify(s){const{clientId:p,message:l,conversationIds:r,atUserIds:n=[],markdown:y=!1}=s,_=path_1.default.join((0,session_1.getHomeDir)(),".cc-ding",p),c=path_1.default.join(_,"config.json");if(!fs_1.default.existsSync(c))return console.error(`\u274C \u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728: ${c}`),{success:0,fail:r.length};let i;try{i=JSON.parse(fs_1.default.readFileSync(c,"utf-8"))}catch(e){return console.error(`\u274C \u914D\u7F6E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${e instanceof Error?e.message:e}`),{success:0,fail:r.length}}let u=0,o=0;for(const e of r){const f=i.conversations.find(t=>t.conversationId===e),d=f?.dingToken||i.defaultDingToken;if(!d){console.error(` \u2717 \u4F1A\u8BDD ${e}: \u65E0 dingToken \u53EF\u7528`),o++;continue}try{const t=n.length>0?`${l} ${n.map(a=>`@${a}`).join(" ")}`:l,$=y?{msgtype:"markdown",markdown:{title:t,text:t},at:{atUserIds:n,isAtAll:!1}}:{msgtype:"text",text:{content:t},at:{atUserIds:n,isAtAll:!1}},h=`https://oapi.dingtalk.com/robot/send?access_token=${d}`,g=await urllib_1.default.request(h,{method:"POST",data:$,contentType:"json",dataType:"json"});if(g.status===200){const a=f?.conversationTitle||e;console.log(` \u2713 ${a}`),u++}else console.error(` \u2717 ${e}: HTTP ${g.status}`),o++}catch(t){console.error(` \u2717 ${e}: ${t instanceof Error?t.message:t}`),o++}}return{success:u,fail:o}}
@@ -1 +1,5 @@
1
- 'use strict';const a10_0x4dcc85=a10_0x300a;function a10_0x4011(){const _0x47eca4=['1527326yNLPUx','\x20──\x0a','quoteSenderNick','repliedMsg','603748etavUV','string','msgId','1015764QJGlDr','trim','quoteText','defineProperty','──\x20引用消息','5kZRtNH','extractQuoteInfo','text','formatPromptWithQuote','\x20(来自:\x20','16777608kFWAZz','__esModule','1277911GLLsnY','content','6464696yfVEEQ','12732LrsFMV'];a10_0x4011=function(){return _0x47eca4;};return a10_0x4011();}(function(_0x2b8b75,_0x2ee20f){const _0x3c3edd=a10_0x300a,_0x481a5d=_0x2b8b75();while(!![]){try{const _0x2ef975=-parseInt(_0x3c3edd(0x11b))/0x1+-parseInt(_0x3c3edd(0x11f))/0x2+-parseInt(_0x3c3edd(0x11e))/0x3+-parseInt(_0x3c3edd(0x123))/0x4+-parseInt(_0x3c3edd(0x114))/0x5*(parseInt(_0x3c3edd(0x126))/0x6)+parseInt(_0x3c3edd(0x11d))/0x7+parseInt(_0x3c3edd(0x119))/0x8;if(_0x2ef975===_0x2ee20f)break;else _0x481a5d['push'](_0x481a5d['shift']());}catch(_0x17bfff){_0x481a5d['push'](_0x481a5d['shift']());}}}(a10_0x4011,0x9fd58));Object[a10_0x4dcc85(0x129)](exports,a10_0x4dcc85(0x11a),{'value':!![]}),exports[a10_0x4dcc85(0x115)]=extractQuoteInfo,exports[a10_0x4dcc85(0x117)]=formatPromptWithQuote;function extractQuoteInfo(_0x4aa23e){const _0x3017c4=a10_0x4dcc85,_0x582221=_0x4aa23e[_0x3017c4(0x116)];if(!_0x582221?.[_0x3017c4(0x122)])return null;const _0x552c91=_0x582221[_0x3017c4(0x122)];let _0x22cabe='';const _0x51db04=_0x552c91[_0x3017c4(0x125)],_0x272175=_0x552c91['senderNick'];if(_0x552c91[_0x3017c4(0x11c)]){if(typeof _0x552c91[_0x3017c4(0x11c)][_0x3017c4(0x116)]==='string')_0x22cabe=_0x552c91[_0x3017c4(0x11c)][_0x3017c4(0x116)]['trim']();else typeof _0x552c91['content']===_0x3017c4(0x124)&&(_0x22cabe=_0x552c91[_0x3017c4(0x11c)][_0x3017c4(0x127)]());}if(!_0x22cabe&&!_0x51db04)return null;return{'quoteText':_0x22cabe,'quoteMessageId':_0x51db04,'quoteSenderNick':_0x272175};}function a10_0x300a(_0x36dd55,_0x588ffd){_0x36dd55=_0x36dd55-0x113;const _0x4011cd=a10_0x4011();let _0x300a0b=_0x4011cd[_0x36dd55];return _0x300a0b;}function formatPromptWithQuote(_0x5794be,_0x50af09){const _0x1be5f3=a10_0x4dcc85;if(!_0x50af09[_0x1be5f3(0x128)])return _0x5794be;const _0x13fafe=_0x50af09[_0x1be5f3(0x121)]?_0x1be5f3(0x118)+_0x50af09[_0x1be5f3(0x121)]+')':'';return _0x1be5f3(0x113)+_0x13fafe+_0x1be5f3(0x120)+_0x50af09['quoteText']+'\x0a──\x20引用结束\x20──\x0a\x0a'+_0x5794be;}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.extractQuoteInfo=extractQuoteInfo,exports.formatPromptWithQuote=formatPromptWithQuote;function extractQuoteInfo(n){const e=n.text;if(!e?.repliedMsg)return null;const t=e.repliedMsg;let r="";const o=t.msgId,i=t.senderNick;return t.content&&(typeof t.content.text=="string"?r=t.content.text.trim():typeof t.content=="string"&&(r=t.content.trim())),!r&&!o?null:{quoteText:r,quoteMessageId:o,quoteSenderNick:i}}function formatPromptWithQuote(n,e){return e.quoteText?`\u2500\u2500 \u5F15\u7528\u6D88\u606F${e.quoteSenderNick?` (\u6765\u81EA: ${e.quoteSenderNick})`:""} \u2500\u2500
2
+ ${e.quoteText}
3
+ \u2500\u2500 \u5F15\u7528\u7ED3\u675F \u2500\u2500
4
+
5
+ ${n}`:n}
@@ -0,0 +1,9 @@
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getRecorderDir=getRecorderDir,exports.recordMessage=recordMessage;const fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),utils_ok_1=require("utils-ok"),image_1=require("./image"),session_1=require("./session");function getRecorderDir(t,e){return t.config.recorderCfg?.dist?t.config.recorderCfg.dist:path_1.default.join((0,session_1.getConversationDir)(t,e),".recorder")}function fileTimestamp(t=Date.now()){return utils_ok_1.dateUtil.mm(t).format("YYYY-MM-DD_HH-mm-ss")}function buildFrontmatter(t,e,d,r){return["---",`msgType: ${t}`,`sender: ${e} (${d})`,`time: ${utils_ok_1.dateUtil.mm(r).format("YYYY-MM-DD HH:mm:ss")}`,"---",""].join(`
2
+ `)}function saveRecordFile(t,e,d){const r=path_1.default.join(t,e);fs_1.default.mkdirSync(r,{recursive:!0});const c=`${fileTimestamp()}.md`,o=path_1.default.join(r,c);return fs_1.default.writeFileSync(o,d,"utf-8"),o}async function downloadAttachment(t,e,d,r,c=""){try{const o=await(0,image_1.getImageDownloadUrl)(t,e,d);if(!o)return null;const n=await(0,image_1.downloadImageBuffer)(o);if(!n)return null;const i=path_1.default.join(r,"attachments");fs_1.default.mkdirSync(i,{recursive:!0});const s=c?`.${c}`:detectExtFromBuffer(n),l=`${fileTimestamp()}-${e.slice(-8)}${s}`,u=path_1.default.join(i,l);return fs_1.default.writeFileSync(u,n),console.log(`[${(0,session_1.timestamp)()}] [recorder] \u9644\u4EF6\u5DF2\u4FDD\u5B58: ${u} (${n.length} bytes)`),u}catch(o){return console.warn(`[${(0,session_1.timestamp)()}] [recorder] \u9644\u4EF6\u4E0B\u8F7D\u5931\u8D25:`,o),null}}function detectExtFromBuffer(t){return t.length<4?"":t[0]===137&&t[1]===80&&t[2]===78&&t[3]===71?".png":t[0]===255&&t[1]===216&&t[2]===255?".jpg":t[0]===71&&t[1]===73&&t[2]===70?".gif":t[0]===82&&t[1]===73&&t[2]===70&&t[3]===70?".webp":t[0]===37&&t[1]===80&&t[2]===68&&t[3]===70?".pdf":""}function extractDownloadCode(t){const e=t;if(e.pictureDownloadCode)return e.pictureDownloadCode;if(e.extensions&&typeof e.extensions=="object"){const r=e.extensions;if(r.downloadCode)return r.downloadCode}const d=["image_content","file_content","video_content","audio_content"];for(const r of d){const c=e[r];if(c&&typeof c=="object"){const o=c;if(o.download_code)return o.download_code;if(o.downloadCode)return o.downloadCode}}return null}function recordText(t,e,d,r){const c=Date.now(),o=t.text?.content?.trim()??"",n=buildFrontmatter("text",d,r,c)+o;return saveRecordFile(e,"text",n)}async function recordPicture(t,e,d,r,c){const o=Date.now(),n=e.pictureDownloadCode||extractDownloadCode(e),i=[buildFrontmatter("picture",r,c,o)];if(n){const s=await downloadAttachment(t,n,e.robotCode,d);s?i.push(`![image](${s})`):i.push(`[\u56FE\u7247\u4E0B\u8F7D\u5931\u8D25] downloadCode: ${n}`)}else i.push("[\u56FE\u7247\u6D88\u606F - \u65E0\u6CD5\u83B7\u53D6\u4E0B\u8F7D\u7801]"),i.push("","```json",JSON.stringify(e,null,2),"```");return saveRecordFile(d,"picture",i.join(`
3
+ `))}async function recordFileMessage(t,e,d,r,c,o){const n=Date.now(),i=extractDownloadCode(e),s=[buildFrontmatter(o,r,c,n)];if(i){const l=await downloadAttachment(t,i,e.robotCode,d);l?s.push(`[${o}] ${l}`):s.push(`[${o}\u4E0B\u8F7D\u5931\u8D25] downloadCode: ${i}`)}else s.push(`[${o}\u6D88\u606F - \u65E0\u6CD5\u83B7\u53D6\u4E0B\u8F7D\u7801\uFF0C\u5DF2\u4FDD\u5B58\u539F\u59CB\u6570\u636E]`),s.push("","```json",JSON.stringify(e,null,2),"```");return saveRecordFile(d,o,s.join(`
4
+ `))}function recordChatRecord(t,e,d,r){const c=Date.now(),o=[buildFrontmatter("chatRecord",d,r,c)],n=t;let i=null;if(n.chatRecords&&Array.isArray(n.chatRecords))i=n.chatRecords;else if(n.extensions&&typeof n.extensions=="object"){const s=n.extensions;s.chatRecords&&Array.isArray(s.chatRecords)&&(i=s.chatRecords)}if(i&&i.length>0){o.push(`\u5171 ${i.length} \u6761\u6D88\u606F:
5
+ `);for(const s of i){const l=s.senderNick??s.senderName??"\u672A\u77E5",u=s.content??s.text??"",a=s.msgtype??s.msgType??"text";o.push(`**${l}** (${a}):`),o.push(u),o.push("")}}else o.push("[\u804A\u5929\u8BB0\u5F55 - \u5DF2\u4FDD\u5B58\u539F\u59CB\u6570\u636E]"),o.push("","```json",JSON.stringify(t,null,2),"```");return saveRecordFile(e,"chatRecord",o.join(`
6
+ `))}async function recordRichText(t,e,d,r,c){const o=Date.now(),n=[buildFrontmatter("richText",r,c,o)],i=e.content?.richText;if(i&&Array.isArray(i)){const s=i,l=await Promise.all(s.map(async u=>{if(u.type!=="picture")return null;const a=u.downloadCode||u.pictureDownloadCode;return a?downloadAttachment(t,a,e.robotCode,d):null}));for(let u=0;u<s.length;u++){const a=s[u];if(a.type==="text"&&a.text)n.push(a.text);else if(a.type==="picture"){if(a.downloadCode||a.pictureDownloadCode){const p=l[u];p?n.push(`![image](${p})`):n.push("[\u5185\u5D4C\u56FE\u7247\u4E0B\u8F7D\u5931\u8D25]")}}else a.type==="mention"&&a.userId&&n.push(`@${a.userId}`)}}else n.push("[\u5BCC\u6587\u672C\u6D88\u606F - \u5DF2\u4FDD\u5B58\u539F\u59CB\u6570\u636E]"),n.push("","```json",JSON.stringify(e,null,2),"```");return saveRecordFile(d,"richText",n.join(`
7
+ `))}function recordCard(t,e,d,r,c){const o=Date.now(),n=[buildFrontmatter(c,d,r,o)],i=t,s=i.actionCard??i.interactiveCard??i.content??i;return typeof s.text=="string"?n.push(s.text):typeof s.title=="string"&&(n.push(`**${s.title}**`),typeof s.markdown=="string"&&n.push(s.markdown)),n.push("","---","\u539F\u59CB\u6570\u636E:","```json",JSON.stringify(t,null,2),"```"),saveRecordFile(e,c,n.join(`
8
+ `))}function recordUnknown(t,e,d,r,c){const o=Date.now(),n=[buildFrontmatter(c,d,r,o)];return n.push(`[\u672A\u77E5\u6D88\u606F\u7C7B\u578B: ${c}]`),n.push("","```json",JSON.stringify(t,null,2),"```"),saveRecordFile(e,"unknown",n.join(`
9
+ `))}async function recordMessage(t,e,d){const r=getRecorderDir(t,d),c=e.msgtype||"unknown",o=e.senderNick??"\u672A\u77E5",n=e.senderStaffId??"";switch(console.log(`[${(0,session_1.timestamp)()}] [recorder] \u8BB0\u5F55\u6D88\u606F: type=${c}, sender=${o}(${n})`),c){case"text":return recordText(e,r,o,n);case"picture":return recordPicture(t,e,r,o,n);case"file":case"video":case"audio":return recordFileMessage(t,e,r,o,n,c);case"chatRecord":return recordChatRecord(e,r,o,n);case"richText":return recordRichText(t,e,r,o,n);case"actionCard":case"interactiveCard":return recordCard(e,r,o,n,c);default:return recordUnknown(e,r,o,n,c)}}
@@ -1 +1,13 @@
1
- 'use strict';const a11_0x20ed59=a11_0x2403;(function(_0x34a1e8,_0x413a44){const _0x56f2fb=a11_0x2403,_0x41ee02=_0x34a1e8();while(!![]){try{const _0x52fd85=parseInt(_0x56f2fb(0x14d))/0x1+-parseInt(_0x56f2fb(0x141))/0x2+parseInt(_0x56f2fb(0x150))/0x3*(parseInt(_0x56f2fb(0x157))/0x4)+-parseInt(_0x56f2fb(0x19b))/0x5*(-parseInt(_0x56f2fb(0x18f))/0x6)+parseInt(_0x56f2fb(0x1ee))/0x7+-parseInt(_0x56f2fb(0x190))/0x8*(-parseInt(_0x56f2fb(0x189))/0x9)+-parseInt(_0x56f2fb(0x18a))/0xa;if(_0x52fd85===_0x413a44)break;else _0x41ee02['push'](_0x41ee02['shift']());}catch(_0x1bd5e4){_0x41ee02['push'](_0x41ee02['shift']());}}}(a11_0x5afa,0x94cab));var __importDefault=this&&this['__importDefault']||function(_0x2090c2){const _0x3f0a25=a11_0x2403;return _0x2090c2&&_0x2090c2[_0x3f0a25(0x19f)]?_0x2090c2:{'default':_0x2090c2};};Object['defineProperty'](exports,'__esModule',{'value':!![]}),exports[a11_0x20ed59(0x1b8)]=timestamp,exports[a11_0x20ed59(0x120)]=getHomeDir,exports[a11_0x20ed59(0x197)]=getClientDir,exports['initClientDir']=initClientDir,exports[a11_0x20ed59(0x126)]=ensureClientDir,exports['getClientConfig']=getClientConfig,exports[a11_0x20ed59(0x14c)]=resolveToUserId,exports[a11_0x20ed59(0x1db)]=authCheck,exports[a11_0x20ed59(0x14a)]=isOwner,exports['debugLog']=debugLog,exports['isMobile']=isMobile,exports[a11_0x20ed59(0x160)]=getPhoneMapFile,exports[a11_0x20ed59(0x17a)]=loadPhoneMap,exports['savePhoneMap']=savePhoneMap,exports[a11_0x20ed59(0x1e6)]=userIdToPhone,exports[a11_0x20ed59(0x1e8)]=resolveUserId,exports[a11_0x20ed59(0x119)]=resolveAllPhonesInConfig,exports[a11_0x20ed59(0x1a5)]=hashConversationId,exports['getReplyWebhook']=getReplyWebhook,exports[a11_0x20ed59(0x13c)]=getReplyConversationId,exports[a11_0x20ed59(0x187)]=findActiveSession,exports[a11_0x20ed59(0x176)]=getConversationConfig,exports[a11_0x20ed59(0x196)]=getConversationDir,exports[a11_0x20ed59(0x1b7)]=getSessionsDir,exports[a11_0x20ed59(0x1e7)]=getTasksDir,exports[a11_0x20ed59(0x1d0)]=getImagesDir,exports['getSessionDir']=getSessionDir,exports[a11_0x20ed59(0x167)]=getSessionId,exports['formatSessionInfo']=formatSessionInfo,exports[a11_0x20ed59(0x19a)]=readSessionLogTail,exports[a11_0x20ed59(0x156)]=findHistorySession,exports[a11_0x20ed59(0x122)]=findLatestSession,exports[a11_0x20ed59(0x16e)]=updateSessionFile,exports[a11_0x20ed59(0x1a1)]=appendSessionLog,exports['getActiveSessionsFile']=getActiveSessionsFile,exports[a11_0x20ed59(0x193)]=saveActiveSession,exports[a11_0x20ed59(0x145)]=loadActiveSessions,exports['endSession']=endSession,exports[a11_0x20ed59(0x182)]=switchToSession,exports['startNewSession']=startNewSession,exports[a11_0x20ed59(0x1e1)]=processMessageQueue,exports[a11_0x20ed59(0x195)]=handleSessionMessage,exports[a11_0x20ed59(0x168)]=cleanCache;const utils_ok_1=require(a11_0x20ed59(0x13b)),fs_1=__importDefault(require('fs')),os_1=__importDefault(require('os')),assert_1=__importDefault(require(a11_0x20ed59(0x12c))),crypto_1=__importDefault(require(a11_0x20ed59(0x11a))),path_1=__importDefault(require(a11_0x20ed59(0x12b))),commands_1=require(a11_0x20ed59(0x186)),messaging_1=require(a11_0x20ed59(0x13f)),claude_process_1=require('./claude-process');function a11_0x5afa(){const _0x3ebc68=[',结束当前会话\x0a','-\x20**开始时间:**\x20','loadActiveSessions','md5','interruptClaudeProcess','join','<兜底钉钉机器人Token>','isOwner','format','resolveToUserId','940700XOgDSN','startTimeStr','parse','3174SnOEWu','claudeSessionId','startTime','⚠️\x20该会话无历史上下文,将从头开始',']\x20客户端目录未初始化:\x20','\x20条)','findHistorySession','904RkTMzB',']\x20已生成默认配置文件:\x20','agent','conversationId','\x20条新解析)','executeClaudeQuery','/session.json','💬\x20会话已结束\x0a📋\x20会话ID:\x20','conversations','getPhoneMapFile','errors','YYYY-MM-DD\x20HH:mm:ss','读取tasks目录失败:\x20','-\x20**会话ID:**\x20','达到最大并发数\x20(','readFileSync','getSessionId','cleanCache','rmSync','startNickName','now','name','exit','updateSessionFile','utf-8',']\x20[','\x0a💡\x20回复\x20/end\x20可结束本轮对话','session.json','imagesDeleted','❌\x20未找到会话\x20','shift','getConversationConfig','活跃会话目录已不存在,清理持久化文件:\x20','\x20->\x20','tasksDeleted','loadPhoneMap','basename','length','sessionsDeleted','createHash','/.tasks','message','🔄\x20已恢复对话上下文','switchToSession','messageQueue','执行\x20Claude\x20查询失败:','🤯\x20当前繁忙,请稍后再试...','./commands','findActiveSession','log','9kbQtMt','27273850NLVWpL','delete',']\x20[SYSTEM]:\x20用户请求结束会话\x0a','linkConversationId','currentWebhook','3372NJxanN','4080760ZVlvpj','活跃会话已持久化:\x20群=','parseEndCommand','saveActiveSession','push','handleSessionMessage','getConversationDir','getClientDir','digest','sessionMaxConcurrency','readSessionLogTail','6455rEgFlO','/.images','\x20条记录\x20(','appendFileSync','__esModule','[WARN]\x20owner\x20必须为手机号,当前值无效:\x20','appendSessionLog','删除任务目录失败:\x20','dateUtil','skill','hashConversationId','isProcessing','get','已切换到历史会话:\x20群=','❌\x20处理消息时发生错误:\x20',',\x20路径=','slice','set','),拒绝新会话:\x20群=','toUpperCase','切换会话时中断正在执行的\x20Claude\x20进程','[WARN]\x20无法解析\x20whiteUserList\x20手机号:\x20','删除图片失败:\x20','debug','receiveReply','更新\x20session.json\x20失败:','/session.log','切换会话,先结束当前会话:\x20','getSessionsDir','timestamp',',\x20当前并发=',']\x20会话文件已保存:\x20','resolvedPhones','map','\x20无活跃会话',']\x20[SYSTEM]:\x20结束会话时中断\x20Claude\x20进程\x0a','会话\x20','key','catch','保存\x20phone-map.json\x20失败:','.cc-ding','update','✅\x20收到,我来处理...','find','\x20消息已入队,排队第\x20','currentConversationId','[WARN]\x20无法解析\x20owner\x20手机号:\x20','error','session','renameSync','-\x20**最后发送者:**\x20','结束会话:\x20群=','YYYY-MM-DD-HH-mm-ss','getImagesDir','lastSenderStaffId','clientId','taskCfg','追加消息到活跃会话:\x20群=',',该会话可能已被清理,请发送新消息开始新会话','phone-map.json','<clientSecret-钉钉Stream连接密钥>','queryUserIdByMobile','创建新会话:\x20群=','(关联群,会话归属=','authCheck','fileUtil','isDirectory','default','读取sessions目录失败:\x20','/.sessions','processMessageQueue','\x20的数据已被清理,无法恢复,请发送新消息开始新会话',',\x20会话ID=','Could\x20not\x20find\x20client\x20config\x20file:\x20','/active.json','userIdToPhone','getTasksDir','resolveUserId','writeFileSync','readdirSync','删除活跃会话文件失败:\x20','mkdirSync','has','7599396HBFhGb','existsSync','resolveAllPhonesInConfig','crypto','sendDingMessage',']:\x20','❌\x20会话\x20','some','startStaffId','getHomeDir','结束会话时中断正在执行的\x20Claude\x20进程','findLatestSession','conversationConfig','size','whiteUserList','ensureClientDir','恢复活跃会话:\x20群=','owner','getJSON','stringify','path','assert','object','entries','/config.json','活跃会话文件无效,跳过:\x20','-\x20**排队消息:**\x20','sessionWebhook','-\x20**发起者:**\x20','dirname','持久化活跃会话失败:\x20群=','clientSecret',']\x20[SYSTEM]:\x20会话被切换到\x20',']\x20会话目录重命名:\x20','activeSessions','homedir','utils-ok','getReplyConversationId','会话目录已重建:\x20群=','config','./messaging','unlinkSync','328474KZWAOU','warn'];a11_0x5afa=function(){return _0x3ebc68;};return a11_0x5afa();}function timestamp(){const _0x508ac6=a11_0x20ed59;return utils_ok_1[_0x508ac6(0x1a3)]['mm'](Date[_0x508ac6(0x16b)]())[_0x508ac6(0x14b)](_0x508ac6(0x162));}function getHomeDir(){const _0x119ae7=a11_0x20ed59;return os_1[_0x119ae7(0x1de)][_0x119ae7(0x13a)]();}function getClientDir(_0x4942a3){const _0x2fc4a2=a11_0x20ed59;return path_1[_0x2fc4a2(0x1de)][_0x2fc4a2(0x148)](getHomeDir(),_0x2fc4a2(0x1c3),_0x4942a3[_0x2fc4a2(0x1d2)]);}function initClientDir(_0x1c7ae7,_0xf9f56f){const _0x18bf23=a11_0x20ed59,_0x2e8b3f=path_1['default'][_0x18bf23(0x148)](getHomeDir(),_0x18bf23(0x1c3),_0x1c7ae7),_0x35ad54=path_1['default'][_0x18bf23(0x148)](_0x2e8b3f,'config.json');return fs_1[_0x18bf23(0x1de)][_0x18bf23(0x1ec)](_0x2e8b3f,{'recursive':!![]}),fs_1[_0x18bf23(0x1de)][_0x18bf23(0x1e9)](_0x35ad54,JSON[_0x18bf23(0x12a)](_0xf9f56f,null,0x2),_0x18bf23(0x16f)),_0x35ad54;}function ensureClientDir(_0x34473f){const _0x2711c1=a11_0x20ed59,_0x5aa84b=path_1[_0x2711c1(0x1de)]['join'](getHomeDir(),_0x2711c1(0x1c3),_0x34473f),_0x3f0826=path_1[_0x2711c1(0x1de)][_0x2711c1(0x148)](_0x5aa84b,'config.json');if(fs_1[_0x2711c1(0x1de)][_0x2711c1(0x118)](_0x3f0826))return;console[_0x2711c1(0x188)]('['+timestamp()+_0x2711c1(0x154)+_0x5aa84b),console['log']('['+timestamp()+']\x20正在自动初始化...');const _0x44de16={'clientName':'cc助手','owner':'<owner手机号>','whiteUserList':[],'clientSecret':_0x2711c1(0x1d7),'defaultDingToken':_0x2711c1(0x149),'conversations':[]};initClientDir(_0x34473f,_0x44de16),console[_0x2711c1(0x188)]('['+timestamp()+_0x2711c1(0x158)+_0x3f0826),console[_0x2711c1(0x188)]('['+timestamp()+']\x20请编辑\x20config.json\x20填写必要的配置项后重新启动'),process[_0x2711c1(0x16d)](0x1);}function getClientConfig(_0x492269){const _0x1daaea=a11_0x20ed59,_0x4c50ea=getClientDir(_0x492269)+_0x1daaea(0x12f);(0x0,assert_1['default'])(fs_1[_0x1daaea(0x1de)][_0x1daaea(0x118)](_0x4c50ea),_0x1daaea(0x1e4)+_0x4c50ea);const _0x2ff54e=utils_ok_1[_0x1daaea(0x1dc)]['getJSON'](_0x4c50ea);return(0x0,assert_1[_0x1daaea(0x1de)])(_0x2ff54e[_0x1daaea(0x136)],'config.json\x20missing\x20required\x20field:\x20clientSecret'),(0x0,assert_1[_0x1daaea(0x1de)])(_0x2ff54e[_0x1daaea(0x125)],'config.json\x20missing\x20required\x20field:\x20whiteUserList'),_0x2ff54e;}function resolveToUserId(_0x400655,_0x3c8893){const _0x3b24e5=a11_0x20ed59;return isMobile(_0x3c8893)?_0x400655[_0x3b24e5(0x1bb)][_0x3c8893]||_0x3c8893:_0x3c8893;}function authCheck(_0x1036f7,_0x2bd705,_0x4f1e32){const _0x1e5ebd=a11_0x20ed59;if(isOwner(_0x1036f7,_0x2bd705))return!![];if(_0x4f1e32){const _0x49f1cf=_0x1036f7[_0x1e5ebd(0x13e)][_0x1e5ebd(0x15f)][_0x1e5ebd(0x1c6)](_0x1d6e35=>_0x1d6e35[_0x1e5ebd(0x15a)]===_0x4f1e32);if(_0x49f1cf?.[_0x1e5ebd(0x125)]&&_0x49f1cf['whiteUserList'][_0x1e5ebd(0x17c)]>0x0)return _0x49f1cf[_0x1e5ebd(0x125)][_0x1e5ebd(0x11e)](_0x2cdb6c=>resolveToUserId(_0x1036f7,_0x2cdb6c)===_0x2bd705);}return _0x1036f7['config']['whiteUserList'][_0x1e5ebd(0x11e)](_0x29510f=>resolveToUserId(_0x1036f7,_0x29510f)===_0x2bd705);}function isOwner(_0x133071,_0x3a4b09){const _0x4c5dca=a11_0x20ed59,_0x175f75=_0x133071[_0x4c5dca(0x13e)][_0x4c5dca(0x128)];if(!_0x175f75||!isMobile(_0x175f75))return![];const _0x19755f=_0x133071[_0x4c5dca(0x1bb)][_0x175f75];return!!_0x19755f&&_0x19755f===_0x3a4b09;}function debugLog(_0x33c523,_0x5260a6,..._0x1ca0b1){const _0x4bf000=a11_0x20ed59;_0x33c523[_0x4bf000(0x13e)][_0x4bf000(0x1b2)]&&console['log']('[DEBUG]\x20'+_0x5260a6,..._0x1ca0b1);}const PHONE_RE=/^1\d{10}$/;function isMobile(_0x36d99c){return PHONE_RE['test'](_0x36d99c);}function getPhoneMapFile(_0x5a7d58){const _0x5da341=a11_0x20ed59;return path_1[_0x5da341(0x1de)][_0x5da341(0x148)](getClientDir(_0x5a7d58),_0x5da341(0x1d6));}function loadPhoneMap(_0x4a2f30){const _0xb9aaeb=a11_0x20ed59,_0x5a4c2a=getPhoneMapFile(_0x4a2f30);if(!fs_1[_0xb9aaeb(0x1de)][_0xb9aaeb(0x118)](_0x5a4c2a))return{};try{const _0xdd6c63=JSON[_0xb9aaeb(0x14f)](fs_1['default'][_0xb9aaeb(0x166)](_0x5a4c2a,_0xb9aaeb(0x16f)));if(typeof _0xdd6c63===_0xb9aaeb(0x12d)&&_0xdd6c63!==null)return _0xdd6c63;}catch{}return{};}function savePhoneMap(_0x1c051f,_0x2e58bf){const _0x340384=a11_0x20ed59,_0x40fd9d=getPhoneMapFile(_0x1c051f);try{fs_1[_0x340384(0x1de)]['writeFileSync'](_0x40fd9d,JSON[_0x340384(0x12a)](_0x2e58bf,null,0x2),'utf-8');}catch(_0xe51374){console[_0x340384(0x1ca)](_0x340384(0x1c2),_0xe51374);}}function userIdToPhone(_0x213f99,_0x2818dc){const _0x4093d3=a11_0x20ed59;for(const [_0x3e1f01,_0x29ce19]of Object[_0x4093d3(0x12e)](_0x213f99[_0x4093d3(0x1bb)])){if(_0x29ce19===_0x2818dc)return _0x3e1f01;}return null;}async function resolveUserId(_0x25dd27,_0x78a82){const _0x45b751=a11_0x20ed59;if(!_0x78a82)return null;if(!isMobile(_0x78a82))return _0x78a82;if(_0x25dd27[_0x45b751(0x1bb)][_0x78a82])return _0x25dd27['resolvedPhones'][_0x78a82];const _0x3374de=await(0x0,messaging_1[_0x45b751(0x1d8)])(_0x25dd27,_0x78a82);return _0x3374de&&(_0x25dd27[_0x45b751(0x1bb)][_0x78a82]=_0x3374de,savePhoneMap(_0x25dd27,_0x25dd27[_0x45b751(0x1bb)])),_0x3374de;}async function resolveAllPhonesInConfig(_0x5e357a){const _0x5c2594=a11_0x20ed59;_0x5e357a['resolvedPhones']=loadPhoneMap(_0x5e357a);const _0x201ac5=[],_0x108bb2=async _0x380f23=>{const _0x2ef30=a11_0x2403;if(_0x5e357a['resolvedPhones'][_0x380f23])return;const _0x45a2a5=await(0x0,messaging_1[_0x2ef30(0x1d8)])(_0x5e357a,_0x380f23);_0x45a2a5&&(_0x5e357a[_0x2ef30(0x1bb)][_0x380f23]=_0x45a2a5,_0x201ac5[_0x2ef30(0x194)](_0x380f23));};_0x5e357a[_0x5c2594(0x13e)][_0x5c2594(0x128)]&&(isMobile(_0x5e357a[_0x5c2594(0x13e)][_0x5c2594(0x128)])?(await _0x108bb2(_0x5e357a[_0x5c2594(0x13e)]['owner']),!_0x5e357a[_0x5c2594(0x1bb)][_0x5e357a[_0x5c2594(0x13e)]['owner']]&&console[_0x5c2594(0x142)](_0x5c2594(0x1c9)+_0x5e357a['config'][_0x5c2594(0x128)])):console[_0x5c2594(0x142)](_0x5c2594(0x1a0)+_0x5e357a['config']['owner']));for(const _0x5ee578 of _0x5e357a[_0x5c2594(0x13e)][_0x5c2594(0x125)]){isMobile(_0x5ee578)&&(await _0x108bb2(_0x5ee578),!_0x5e357a[_0x5c2594(0x1bb)][_0x5ee578]&&console[_0x5c2594(0x142)](_0x5c2594(0x1b0)+_0x5ee578));}for(const _0x1822c6 of _0x5e357a['config'][_0x5c2594(0x15f)]){if(_0x1822c6[_0x5c2594(0x125)])for(const _0x1b3692 of _0x1822c6[_0x5c2594(0x125)]){isMobile(_0x1b3692)&&(await _0x108bb2(_0x1b3692),!_0x5e357a[_0x5c2594(0x1bb)][_0x1b3692]&&console[_0x5c2594(0x142)]('[WARN]\x20无法解析群白名单手机号:\x20'+_0x1b3692));}}_0x201ac5[_0x5c2594(0x17c)]>0x0&&savePhoneMap(_0x5e357a,_0x5e357a[_0x5c2594(0x1bb)]),console[_0x5c2594(0x188)]('[手机解析]\x20已加载\x20'+Object['keys'](_0x5e357a[_0x5c2594(0x1bb)])['length']+_0x5c2594(0x19d)+_0x201ac5[_0x5c2594(0x17c)]+_0x5c2594(0x15b));}function hashConversationId(_0x32d049,_0x845010){const _0x2097f1=a11_0x20ed59,_0x2b7142=getConversationConfig(_0x32d049,_0x845010),_0x394881=_0x2b7142?.[_0x2097f1(0x18d)]||_0x845010;return crypto_1['default'][_0x2097f1(0x17e)](_0x2097f1(0x146))[_0x2097f1(0x1c4)](_0x394881)[_0x2097f1(0x198)]('hex');}function getReplyWebhook(_0x5d0b32){return _0x5d0b32['currentWebhook']||_0x5d0b32['sessionWebhook'];}function getReplyConversationId(_0x5238fe){const _0x481491=a11_0x20ed59;return _0x5238fe[_0x481491(0x1c8)]||_0x5238fe['conversationId'];}function findActiveSession(_0x3c5dab,_0x3cd543){const _0xeed230=a11_0x20ed59,_0x1f9e64=_0x3c5dab['activeSessions'][_0xeed230(0x1a7)](_0x3cd543);if(_0x1f9e64)return{'key':_0x3cd543,'session':_0x1f9e64};const _0x342e4f=getConversationConfig(_0x3c5dab,_0x3cd543);if(_0x342e4f?.[_0xeed230(0x18d)])for(const _0x26537c of _0x3c5dab[_0xeed230(0x139)]){const _0x5d75da=getConversationConfig(_0x3c5dab,_0x26537c[0x0]);if(_0x5d75da?.['linkConversationId']===_0x342e4f['linkConversationId'])return{'key':_0x26537c[0x0],'session':_0x26537c[0x1]};}return undefined;}function getConversationConfig(_0x490126,_0x9ba1b){const _0x588d22=a11_0x20ed59;return _0x490126[_0x588d22(0x13e)]['conversations'][_0x588d22(0x1c6)](_0x16e4fe=>_0x16e4fe[_0x588d22(0x15a)]===_0x9ba1b);}function getConversationDir(_0xf3c055,_0x1be805){const _0x679685=hashConversationId(_0xf3c055,_0x1be805);return getClientDir(_0xf3c055)+'/'+_0x679685;}function getSessionsDir(_0x1c5982,_0x578c30){const _0x191b48=a11_0x20ed59;return getConversationDir(_0x1c5982,_0x578c30)+_0x191b48(0x1e0);}function a11_0x2403(_0x4bfdd4,_0xa7ff22){_0x4bfdd4=_0x4bfdd4-0x118;const _0x5afa69=a11_0x5afa();let _0x240348=_0x5afa69[_0x4bfdd4];return _0x240348;}function getTasksDir(_0x7793b8,_0x19d970){const _0x3ed13a=a11_0x20ed59;return getConversationDir(_0x7793b8,_0x19d970)+_0x3ed13a(0x17f);}function getImagesDir(_0x492a41,_0x416e73){const _0x1f5169=a11_0x20ed59;return getConversationDir(_0x492a41,_0x416e73)+_0x1f5169(0x19c);}function getSessionDir(_0xfb82f6,_0xd161f8){const _0x949730=a11_0x20ed59,_0x3c0970=_0xd161f8[_0x949730(0x151)]||_0xd161f8['startTimeStr'];return getSessionsDir(_0xfb82f6,_0xd161f8['conversationId'])+'/'+_0x3c0970;}function getSessionId(_0x4e2dc5){const _0x1f20dc=a11_0x20ed59;return _0x4e2dc5[_0x1f20dc(0x151)]||_0x4e2dc5[_0x1f20dc(0x14e)];}function formatSessionInfo(_0x1f7070,_0x40e92f){const _0x2a5d97=a11_0x20ed59,_0x559779=findActiveSession(_0x1f7070,_0x40e92f);if(!_0x559779)return null;const {session:_0x39fd42,isProcessing:_0x1dd112,messageQueue:_0x4d952a}=_0x559779[_0x2a5d97(0x1cb)],_0x73540a=[_0x2a5d97(0x164)+getSessionId(_0x39fd42),_0x2a5d97(0x133)+_0x39fd42[_0x2a5d97(0x16a)]+'('+_0x39fd42[_0x2a5d97(0x11f)]+')',_0x2a5d97(0x144)+_0x39fd42['startTimeStr'],_0x2a5d97(0x1cd)+_0x559779['session'][_0x2a5d97(0x1d1)],'-\x20**处理中:**\x20'+_0x1dd112,_0x2a5d97(0x131)+(_0x4d952a?.['length']||0x0)+'\x20条'];return _0x73540a[_0x2a5d97(0x148)]('\x0a');}function readSessionLogTail(_0x3d78e4,_0x2098f7,_0x26e9ea){const _0x4d9a7b=a11_0x20ed59,_0x215691=findActiveSession(_0x3d78e4,_0x2098f7);if(!_0x215691)return null;const _0x35a3db=_0x215691[_0x4d9a7b(0x1cb)],_0x25ccf6=getSessionDir(_0x3d78e4,_0x35a3db[_0x4d9a7b(0x1cb)])+_0x4d9a7b(0x1b5);if(!fs_1[_0x4d9a7b(0x1de)][_0x4d9a7b(0x118)](_0x25ccf6))return null;try{const _0x52a133=fs_1[_0x4d9a7b(0x1de)][_0x4d9a7b(0x166)](_0x25ccf6,_0x4d9a7b(0x16f)),_0x353ef5=_0x52a133['split']('\x0a')['filter'](_0x2e14e0=>_0x2e14e0[_0x4d9a7b(0x17c)]>0x0);return _0x353ef5[_0x4d9a7b(0x1ab)](-_0x26e9ea)[_0x4d9a7b(0x148)]('\x0a');}catch{return null;}}function findHistorySession(_0x1a8a5c,_0x853a09,_0x510b40){const _0xea5101=a11_0x20ed59,_0x3b77bd=getSessionsDir(_0x1a8a5c,_0x853a09),_0x2ff6d9=_0x3b77bd+'/'+_0x510b40+_0xea5101(0x15d);try{return utils_ok_1['fileUtil'][_0xea5101(0x129)](_0x2ff6d9);}catch{}const _0x464716=parseInt(_0x510b40,0xa);if(!isNaN(_0x464716)&&_0x464716>0x0){const _0xcd6881=utils_ok_1[_0xea5101(0x1a3)]['mm'](_0x464716)[_0xea5101(0x14b)](_0xea5101(0x1cf)),_0x39b13d=_0x3b77bd+'/'+_0xcd6881+_0xea5101(0x15d);try{return utils_ok_1[_0xea5101(0x1dc)][_0xea5101(0x129)](_0x39b13d);}catch{}}return null;}function findLatestSession(_0x28cb88,_0x9582c8){const _0x139025=a11_0x20ed59,_0x10f4f3=getSessionsDir(_0x28cb88,_0x9582c8);if(!fs_1[_0x139025(0x1de)][_0x139025(0x118)](_0x10f4f3))return null;const _0x88cc2d=findActiveSession(_0x28cb88,_0x9582c8),_0x1af087=_0x88cc2d?getSessionId(_0x88cc2d[_0x139025(0x1cb)][_0x139025(0x1cb)]):null;let _0x2067a1=null,_0x86a56b=0x0;try{const _0x2d7ab0=fs_1[_0x139025(0x1de)][_0x139025(0x1ea)](_0x10f4f3,{'withFileTypes':!![]});for(const _0x539526 of _0x2d7ab0){if(!_0x539526[_0x139025(0x1dd)]())continue;const _0x837f2c=path_1[_0x139025(0x1de)][_0x139025(0x148)](_0x10f4f3,_0x539526[_0x139025(0x16c)],_0x139025(0x172));if(!fs_1['default'][_0x139025(0x118)](_0x837f2c))continue;try{const _0x5b1123=utils_ok_1[_0x139025(0x1dc)][_0x139025(0x129)](_0x837f2c);if(_0x1af087&&getSessionId(_0x5b1123)===_0x1af087)continue;_0x5b1123[_0x139025(0x152)]>_0x86a56b&&(_0x86a56b=_0x5b1123[_0x139025(0x152)],_0x2067a1=_0x5b1123);}catch{continue;}}}catch{}return _0x2067a1;}function updateSessionFile(_0x451aaa,_0x2c37f6,_0x444352){const _0x5c62c3=a11_0x20ed59;if(_0x444352[_0x5c62c3(0x151)]&&!_0x2c37f6['claudeSessionId']){const _0x59e9c6=getSessionDir(_0x451aaa,_0x2c37f6);_0x2c37f6[_0x5c62c3(0x151)]=_0x444352[_0x5c62c3(0x151)];const _0x32b0c5=getSessionDir(_0x451aaa,_0x2c37f6);_0x59e9c6!==_0x32b0c5&&fs_1['default']['existsSync'](_0x59e9c6)&&(fs_1[_0x5c62c3(0x1de)][_0x5c62c3(0x1cc)](_0x59e9c6,_0x32b0c5),console[_0x5c62c3(0x188)]('['+timestamp()+_0x5c62c3(0x138)+path_1[_0x5c62c3(0x1de)][_0x5c62c3(0x17b)](_0x59e9c6)+_0x5c62c3(0x178)+path_1[_0x5c62c3(0x1de)][_0x5c62c3(0x17b)](_0x32b0c5)));}const _0x1b09bf=getSessionDir(_0x451aaa,_0x2c37f6)+_0x5c62c3(0x15d);try{if(_0x444352[_0x5c62c3(0x132)])_0x2c37f6[_0x5c62c3(0x132)]=_0x444352['sessionWebhook'];if(_0x444352[_0x5c62c3(0x18e)]!==undefined)_0x2c37f6[_0x5c62c3(0x18e)]=_0x444352[_0x5c62c3(0x18e)]||undefined;if(_0x444352[_0x5c62c3(0x1c8)]!==undefined)_0x2c37f6[_0x5c62c3(0x1c8)]=_0x444352['currentConversationId']||undefined;fs_1[_0x5c62c3(0x1de)][_0x5c62c3(0x1e9)](_0x1b09bf,JSON[_0x5c62c3(0x12a)](_0x2c37f6,null,0x2),_0x5c62c3(0x16f));const _0x5d39bb=_0x444352['claudeSessionId']?_0x5c62c3(0x151):_0x444352[_0x5c62c3(0x18e)]!==undefined?_0x5c62c3(0x18e):_0x5c62c3(0x132);console[_0x5c62c3(0x188)]('['+timestamp()+_0x5c62c3(0x1ba)+_0x5d39bb),saveActiveSession(_0x451aaa,_0x2c37f6[_0x5c62c3(0x15a)]);}catch(_0x22f3d5){console['error'](_0x5c62c3(0x1b4),_0x22f3d5);}}function appendSessionLog(_0x397c39,_0x1fe698,_0x249978){const _0x41de23=a11_0x20ed59,_0xd5205e=_0x397c39+_0x41de23(0x1b5),_0x1d8c00=timestamp(),_0x734e0f='['+_0x1d8c00+_0x41de23(0x170)+_0x1fe698[_0x41de23(0x1ae)]()+_0x41de23(0x11c)+_0x249978+'\x0a';try{fs_1[_0x41de23(0x1de)]['appendFileSync'](_0xd5205e,_0x734e0f,_0x41de23(0x16f));}catch{}}function getActiveSessionsFile(_0x3a4017,_0xaa906c){const _0x526ae5=a11_0x20ed59;return getSessionsDir(_0x3a4017,_0xaa906c)+_0x526ae5(0x1e5);}function saveActiveSession(_0x68ff2b,_0x8e1959){const _0x1b2e3d=a11_0x20ed59,_0x18552e=_0x68ff2b[_0x1b2e3d(0x139)][_0x1b2e3d(0x1a7)](_0x8e1959),_0x2c8fed=getActiveSessionsFile(_0x68ff2b,_0x8e1959);try{if(!_0x18552e){if(fs_1[_0x1b2e3d(0x1de)][_0x1b2e3d(0x118)](_0x2c8fed))fs_1[_0x1b2e3d(0x1de)][_0x1b2e3d(0x140)](_0x2c8fed);return;}const _0x278b7d={'session':_0x18552e['session'],'lastSenderStaffId':_0x18552e[_0x1b2e3d(0x1d1)],'conversationConfig':_0x18552e[_0x1b2e3d(0x123)]};fs_1[_0x1b2e3d(0x1de)][_0x1b2e3d(0x1ec)](path_1['default'][_0x1b2e3d(0x134)](_0x2c8fed),{'recursive':!![]}),fs_1[_0x1b2e3d(0x1de)]['writeFileSync'](_0x2c8fed,JSON[_0x1b2e3d(0x12a)](_0x278b7d,null,0x2),'utf-8'),debugLog(_0x68ff2b,_0x1b2e3d(0x191)+_0x8e1959);}catch(_0x5d6107){console[_0x1b2e3d(0x1ca)](_0x1b2e3d(0x135)+_0x8e1959,_0x5d6107);}}function loadActiveSessions(_0x25296e){const _0x4b2a82=a11_0x20ed59;for(const _0x372c71 of _0x25296e[_0x4b2a82(0x13e)]['conversations']){const _0x3eac85=getActiveSessionsFile(_0x25296e,_0x372c71[_0x4b2a82(0x15a)]);if(!fs_1['default'][_0x4b2a82(0x118)](_0x3eac85))continue;try{const _0x2fefe0=utils_ok_1[_0x4b2a82(0x1dc)][_0x4b2a82(0x129)](_0x3eac85);if(!_0x2fefe0?.[_0x4b2a82(0x1cb)]){console[_0x4b2a82(0x188)](_0x4b2a82(0x130)+_0x3eac85);continue;}const _0x39ac9a=getSessionDir(_0x25296e,_0x2fefe0[_0x4b2a82(0x1cb)]);if(!fs_1[_0x4b2a82(0x1de)][_0x4b2a82(0x118)](_0x39ac9a)){console[_0x4b2a82(0x188)](_0x4b2a82(0x177)+_0x3eac85),fs_1[_0x4b2a82(0x1de)][_0x4b2a82(0x140)](_0x3eac85);continue;}_0x25296e[_0x4b2a82(0x139)][_0x4b2a82(0x1ac)](_0x372c71[_0x4b2a82(0x15a)],{'session':_0x2fefe0[_0x4b2a82(0x1cb)],'lastSenderStaffId':_0x2fefe0[_0x4b2a82(0x1d1)]||_0x2fefe0[_0x4b2a82(0x1cb)][_0x4b2a82(0x11f)],'isProcessing':![],'messageQueue':[],'conversationConfig':_0x2fefe0['conversationConfig']}),console[_0x4b2a82(0x188)](_0x4b2a82(0x127)+_0x372c71[_0x4b2a82(0x15a)]+',\x20会话ID='+getSessionId(_0x2fefe0[_0x4b2a82(0x1cb)]));}catch(_0x3a015e){console[_0x4b2a82(0x1ca)]('加载活跃会话失败:\x20'+_0x3eac85,_0x3a015e);}}}async function endSession(_0x54b5b0,_0x4d8e08,_0x36256e){const _0x5c7fb8=a11_0x20ed59,_0x14160d=findActiveSession(_0x54b5b0,_0x4d8e08);if(!_0x14160d){console[_0x5c7fb8(0x188)]('群\x20'+_0x4d8e08+_0x5c7fb8(0x1bd));return;}const {key:_0x584a8b,session:_0x333274}=_0x14160d,{session:_0x1d3bae}=_0x333274,_0x370017=getSessionDir(_0x54b5b0,_0x1d3bae),_0x140831=getSessionId(_0x1d3bae);console['log'](_0x5c7fb8(0x1ce)+_0x4d8e08+_0x5c7fb8(0x1e3)+_0x140831),(0x0,claude_process_1[_0x5c7fb8(0x147)])(_0x333274,_0x5c7fb8(0x121))&&fs_1[_0x5c7fb8(0x1de)]['appendFileSync'](_0x370017+_0x5c7fb8(0x1b5),'['+timestamp()+_0x5c7fb8(0x1be),_0x5c7fb8(0x16f)),await(0x0,messaging_1['sendDingMessage'])(_0x54b5b0,{'conversationId':_0x4d8e08,'sessionWebhook':_0x36256e,'atUserId':_0x1d3bae['startStaffId'],'content':_0x5c7fb8(0x15e)+_0x140831}),_0x54b5b0['activeSessions'][_0x5c7fb8(0x18b)](_0x584a8b),saveActiveSession(_0x54b5b0,_0x584a8b),fs_1[_0x5c7fb8(0x1de)][_0x5c7fb8(0x19e)](_0x370017+'/session.log','['+timestamp()+_0x5c7fb8(0x18c),_0x5c7fb8(0x16f));}async function switchToSession(_0x2c9f9c,_0x4973fe,_0x43d769,_0x529426,_0x5cbbc0,_0x31c5c2){const _0x2ab9e3=a11_0x20ed59,_0x3ed405=findHistorySession(_0x2c9f9c,_0x4973fe,_0x529426);if(!_0x3ed405)return await(0x0,messaging_1[_0x2ab9e3(0x11b)])(_0x2c9f9c,{'conversationId':_0x4973fe,'sessionWebhook':_0x43d769,'atUserId':_0x5cbbc0,'content':_0x2ab9e3(0x174)+_0x529426+_0x2ab9e3(0x1d5)}),![];const _0x2446b0=getSessionDir(_0x2c9f9c,_0x3ed405);if(!fs_1[_0x2ab9e3(0x1de)][_0x2ab9e3(0x118)](_0x2446b0))return await(0x0,messaging_1[_0x2ab9e3(0x11b)])(_0x2c9f9c,{'conversationId':_0x4973fe,'sessionWebhook':_0x43d769,'atUserId':_0x5cbbc0,'content':_0x2ab9e3(0x11d)+_0x529426+_0x2ab9e3(0x1e2)}),![];const _0x229e74=findActiveSession(_0x2c9f9c,_0x4973fe);_0x229e74&&(console[_0x2ab9e3(0x188)](_0x2ab9e3(0x1b6)+getSessionId(_0x229e74[_0x2ab9e3(0x1cb)][_0x2ab9e3(0x1cb)])),(0x0,claude_process_1[_0x2ab9e3(0x147)])(_0x229e74[_0x2ab9e3(0x1cb)],_0x2ab9e3(0x1af)),_0x2c9f9c[_0x2ab9e3(0x139)][_0x2ab9e3(0x18b)](_0x229e74[_0x2ab9e3(0x1c0)]),saveActiveSession(_0x2c9f9c,_0x229e74[_0x2ab9e3(0x1c0)]),fs_1[_0x2ab9e3(0x1de)][_0x2ab9e3(0x19e)](getSessionDir(_0x2c9f9c,_0x229e74['session'][_0x2ab9e3(0x1cb)])+_0x2ab9e3(0x1b5),'['+timestamp()+_0x2ab9e3(0x137)+_0x529426+_0x2ab9e3(0x143),_0x2ab9e3(0x16f)));_0x2c9f9c[_0x2ab9e3(0x139)][_0x2ab9e3(0x1ac)](_0x4973fe,{'session':_0x3ed405,'lastSenderStaffId':_0x5cbbc0,'isProcessing':![],'messageQueue':[],'conversationConfig':_0x31c5c2}),saveActiveSession(_0x2c9f9c,_0x4973fe);const _0x5731bd=!!_0x3ed405[_0x2ab9e3(0x151)],_0x434c65=getSessionId(_0x3ed405);return await(0x0,messaging_1[_0x2ab9e3(0x11b)])(_0x2c9f9c,{'conversationId':_0x4973fe,'sessionWebhook':_0x43d769,'atUserId':_0x5cbbc0,'content':'✅\x20已切换到历史会话\x20(会话ID:\x20'+_0x434c65+')\x0a'+(_0x5731bd?_0x2ab9e3(0x181):_0x2ab9e3(0x153))+_0x2ab9e3(0x171)}),console[_0x2ab9e3(0x188)](_0x2ab9e3(0x1a8)+_0x4973fe+_0x2ab9e3(0x1e3)+_0x434c65+',\x20有Claude上下文='+_0x5731bd),!![];}async function startNewSession(_0x1f4b0d,_0x2afdd5){const _0x56aa85=a11_0x20ed59,{conversationId:_0x45f3f4,sessionWebhook:_0x2527b4,senderStaffId:_0x3639ef,senderNick:_0x34dc3f,message:_0x2a5a17,conversationConfig:_0x3659cc}=_0x2afdd5,_0x1811ac=_0x1f4b0d[_0x56aa85(0x13e)][_0x56aa85(0x199)]??_0x1f4b0d['DEFAULT_SESSION_MAX_CONCURRENCY'];if(_0x1f4b0d[_0x56aa85(0x139)]['size']>=_0x1811ac){console['log'](_0x56aa85(0x165)+_0x1811ac+_0x56aa85(0x1ad)+_0x45f3f4),await(0x0,messaging_1['sendDingMessage'])(_0x1f4b0d,{'conversationId':_0x45f3f4,'sessionWebhook':_0x2527b4,'atUserId':_0x3639ef,'content':_0x56aa85(0x185)});return;}const _0x4b9f86=Date[_0x56aa85(0x16b)](),_0x5f233b={'conversationId':_0x45f3f4,'sessionWebhook':_0x2527b4,'startTime':_0x4b9f86,'startTimeStr':utils_ok_1['dateUtil']['mm'](_0x4b9f86)[_0x56aa85(0x14b)](_0x56aa85(0x1cf)),'startStaffId':_0x3639ef,'startNickName':_0x34dc3f};console[_0x56aa85(0x188)](_0x56aa85(0x1d9)+_0x45f3f4+',\x20会话ID='+getSessionId(_0x5f233b)+',\x20发起者='+_0x3639ef+_0x56aa85(0x1b9)+(_0x1f4b0d[_0x56aa85(0x139)][_0x56aa85(0x124)]+0x1)+'/'+_0x1811ac);const _0x1591c8=getSessionDir(_0x1f4b0d,_0x5f233b);fs_1[_0x56aa85(0x1de)][_0x56aa85(0x1ec)](_0x1591c8,{'recursive':!![]}),fs_1['default']['writeFileSync'](_0x1591c8+_0x56aa85(0x15d),JSON[_0x56aa85(0x12a)](_0x5f233b,null,0x2),'utf-8'),_0x1f4b0d[_0x56aa85(0x139)][_0x56aa85(0x1ac)](_0x45f3f4,{'session':_0x5f233b,'lastSenderStaffId':_0x3639ef,'isProcessing':!![],'messageQueue':[],'conversationConfig':_0x3659cc}),saveActiveSession(_0x1f4b0d,_0x45f3f4);_0x3659cc['receiveReply']!==![]&&await(0x0,messaging_1[_0x56aa85(0x11b)])(_0x1f4b0d,{'conversationId':_0x45f3f4,'sessionWebhook':_0x2527b4,'atUserId':_0x3639ef,'content':'🚀\x20会话已开始!\x0a处理中...\x0a💡\x20回复\x20/end\x20可结束本轮对话'});try{await(0x0,claude_process_1['executeClaudeQuery'])(_0x1f4b0d,_0x5f233b,_0x2a5a17,{'skill':_0x3659cc['taskCfg']?.[_0x56aa85(0x1a4)],'agent':_0x3659cc[_0x56aa85(0x159)],'senderNick':_0x34dc3f,'senderStaffId':_0x3639ef});}catch(_0x2cd8f9){console[_0x56aa85(0x1ca)](_0x56aa85(0x184),_0x2cd8f9),await(0x0,messaging_1[_0x56aa85(0x11b)])(_0x1f4b0d,{'conversationId':_0x45f3f4,'sessionWebhook':_0x2527b4,'atUserId':_0x3639ef,'content':'❌\x20处理消息时发生错误:\x20'+(_0x2cd8f9 instanceof Error?_0x2cd8f9[_0x56aa85(0x180)]:String(_0x2cd8f9))});}finally{const _0x11cab5=_0x1f4b0d[_0x56aa85(0x139)][_0x56aa85(0x1a7)](_0x45f3f4);_0x11cab5&&(_0x11cab5['isProcessing']=![]);}await processMessageQueue(_0x1f4b0d,_0x45f3f4);}async function processMessageQueue(_0x49ea69,_0x339f3e){const _0x2305b4=a11_0x20ed59,_0x5a1b5c=_0x49ea69[_0x2305b4(0x139)]['get'](_0x339f3e);if(!_0x5a1b5c||_0x5a1b5c[_0x2305b4(0x183)][_0x2305b4(0x17c)]===0x0)return;const _0x5a9d82=_0x5a1b5c['messageQueue'][_0x2305b4(0x175)](),{message:_0x3954a0,senderStaffId:_0x35e547,senderNick:_0x2db144}=_0x5a9d82,_0x3e8c0e=_0x5a1b5c['session'][_0x2305b4(0x132)];console[_0x2305b4(0x188)]('处理队列消息:\x20群='+_0x339f3e+',\x20剩余\x20'+_0x5a1b5c[_0x2305b4(0x183)][_0x2305b4(0x17c)]+'\x20条'),_0x5a1b5c[_0x2305b4(0x1a6)]=!![],_0x5a1b5c[_0x2305b4(0x1d1)]=_0x35e547,saveActiveSession(_0x49ea69,_0x339f3e);_0x5a1b5c[_0x2305b4(0x123)][_0x2305b4(0x1b3)]!==![]&&await(0x0,messaging_1[_0x2305b4(0x11b)])(_0x49ea69,{'conversationId':_0x339f3e,'sessionWebhook':_0x3e8c0e,'atUserId':_0x35e547,'content':_0x2305b4(0x1c5)})[_0x2305b4(0x1c1)](()=>{});try{await(0x0,claude_process_1[_0x2305b4(0x15c)])(_0x49ea69,_0x5a1b5c[_0x2305b4(0x1cb)],_0x3954a0,{'skill':_0x5a1b5c[_0x2305b4(0x123)][_0x2305b4(0x1d3)]?.[_0x2305b4(0x1a4)],'agent':_0x5a1b5c[_0x2305b4(0x123)]['agent'],'senderNick':_0x2db144,'senderStaffId':_0x35e547});}catch(_0x1cfb96){console['error']('执行队列\x20Claude\x20查询失败:',_0x1cfb96),await(0x0,messaging_1[_0x2305b4(0x11b)])(_0x49ea69,{'conversationId':_0x339f3e,'sessionWebhook':_0x3e8c0e,'atUserId':_0x35e547,'content':_0x2305b4(0x1a9)+(_0x1cfb96 instanceof Error?_0x1cfb96[_0x2305b4(0x180)]:String(_0x1cfb96))});}finally{_0x5a1b5c['isProcessing']=![];}_0x5a1b5c[_0x2305b4(0x183)][_0x2305b4(0x17c)]>0x0&&await processMessageQueue(_0x49ea69,_0x339f3e);}async function handleSessionMessage(_0x364cf2,_0x51fd36){const _0x153395=a11_0x20ed59,{conversationId:_0x561808,sessionWebhook:_0x574b46,senderStaffId:_0x5e882f,senderNick:_0x2d6c0d,message:_0xa8be00,conversationConfig:_0x242f19}=_0x51fd36;if((0x0,commands_1[_0x153395(0x192)])(_0xa8be00)){await endSession(_0x364cf2,_0x561808,_0x574b46);return;}const _0x1118ba=findActiveSession(_0x364cf2,_0x561808),_0x556e66=_0x1118ba?.[_0x153395(0x1cb)];if(_0x556e66){const _0x5f497a=getSessionDir(_0x364cf2,_0x556e66['session']);!fs_1[_0x153395(0x1de)][_0x153395(0x118)](_0x5f497a)&&(fs_1[_0x153395(0x1de)][_0x153395(0x1ec)](_0x5f497a,{'recursive':!![]}),fs_1[_0x153395(0x1de)][_0x153395(0x1e9)](_0x5f497a+_0x153395(0x15d),JSON[_0x153395(0x12a)](_0x556e66[_0x153395(0x1cb)],null,0x2),_0x153395(0x16f)),console[_0x153395(0x188)](_0x153395(0x13d)+_0x561808+_0x153395(0x1aa)+_0x5f497a));if(_0x556e66[_0x153395(0x1a6)]){const _0x4e1496={'message':_0xa8be00,'senderStaffId':_0x5e882f,'senderNick':_0x2d6c0d};_0x556e66[_0x153395(0x183)][_0x153395(0x194)](_0x4e1496);const _0x33a8bf=_0x556e66[_0x153395(0x183)][_0x153395(0x17c)];console[_0x153395(0x188)](_0x153395(0x1bf)+_0x561808+_0x153395(0x1c7)+_0x33a8bf+'\x20条'),await(0x0,messaging_1['sendDingMessage'])(_0x364cf2,{'conversationId':_0x561808,'sessionWebhook':_0x574b46,'atUserId':_0x5e882f,'content':'⏳\x20正在处理中,已加入队列(排队第\x20'+_0x33a8bf+_0x153395(0x155)});return;}const _0x2d6036=_0x556e66[_0x153395(0x1cb)][_0x153395(0x15a)]===_0x561808;console[_0x153395(0x188)](_0x153395(0x1d4)+_0x561808+',\x20会话ID='+getSessionId(_0x556e66['session'])+(_0x2d6036?'':_0x153395(0x1da)+_0x556e66[_0x153395(0x1cb)][_0x153395(0x15a)]+')')),_0x556e66[_0x153395(0x1d1)]=_0x5e882f,_0x556e66[_0x153395(0x1a6)]=!![],saveActiveSession(_0x364cf2,_0x1118ba[_0x153395(0x1c0)]);_0x2d6036&&_0x574b46!==_0x556e66[_0x153395(0x1cb)]['sessionWebhook']&&(_0x556e66['session'][_0x153395(0x132)]=_0x574b46,updateSessionFile(_0x364cf2,_0x556e66[_0x153395(0x1cb)],{'sessionWebhook':_0x574b46}));_0x556e66[_0x153395(0x1cb)][_0x153395(0x18e)]=_0x574b46,_0x556e66[_0x153395(0x1cb)][_0x153395(0x1c8)]=_0x561808,updateSessionFile(_0x364cf2,_0x556e66[_0x153395(0x1cb)],{'currentWebhook':_0x574b46,'currentConversationId':_0x561808});_0x242f19[_0x153395(0x1b3)]!==![]&&await(0x0,messaging_1[_0x153395(0x11b)])(_0x364cf2,{'conversationId':_0x561808,'sessionWebhook':_0x574b46,'atUserId':_0x5e882f,'content':_0x153395(0x1c5)});try{await(0x0,claude_process_1[_0x153395(0x15c)])(_0x364cf2,_0x556e66[_0x153395(0x1cb)],_0xa8be00,{'skill':_0x242f19['taskCfg']?.[_0x153395(0x1a4)],'agent':_0x242f19[_0x153395(0x159)],'senderNick':_0x2d6c0d,'senderStaffId':_0x5e882f});}catch(_0x57b4d1){if(_0x556e66[_0x153395(0x1cb)][_0x153395(0x151)]){console[_0x153395(0x188)]('[会话恢复失败]\x20清除\x20claudeSessionId\x20并重新发起:\x20'+_0x556e66[_0x153395(0x1cb)][_0x153395(0x151)]),_0x556e66['session'][_0x153395(0x151)]=undefined,_0x364cf2[_0x153395(0x16e)](_0x556e66[_0x153395(0x1cb)],{});try{await(0x0,claude_process_1[_0x153395(0x15c)])(_0x364cf2,_0x556e66[_0x153395(0x1cb)],_0xa8be00,{'skill':_0x242f19[_0x153395(0x1d3)]?.[_0x153395(0x1a4)],'agent':_0x242f19['agent'],'senderNick':_0x2d6c0d,'senderStaffId':_0x5e882f});return;}catch(_0x4718e8){console[_0x153395(0x1ca)]('重试执行\x20Claude\x20查询失败:',_0x4718e8),await(0x0,messaging_1[_0x153395(0x11b)])(_0x364cf2,{'conversationId':_0x561808,'sessionWebhook':_0x574b46,'atUserId':_0x5e882f,'content':'❌\x20处理消息时发生错误:\x20'+(_0x4718e8 instanceof Error?_0x4718e8[_0x153395(0x180)]:String(_0x4718e8))}),_0x556e66[_0x153395(0x1a6)]=![],await processMessageQueue(_0x364cf2,_0x561808);return;}}console[_0x153395(0x1ca)]('执行\x20Claude\x20查询失败:',_0x57b4d1),await(0x0,messaging_1[_0x153395(0x11b)])(_0x364cf2,{'conversationId':_0x561808,'sessionWebhook':_0x574b46,'atUserId':_0x5e882f,'content':'❌\x20处理消息时发生错误:\x20'+(_0x57b4d1 instanceof Error?_0x57b4d1[_0x153395(0x180)]:String(_0x57b4d1))});}finally{_0x556e66['isProcessing']=![];}await processMessageQueue(_0x364cf2,_0x561808);}else await startNewSession(_0x364cf2,{'conversationId':_0x561808,'sessionWebhook':_0x574b46,'senderStaffId':_0x5e882f,'senderNick':_0x2d6c0d,'message':_0xa8be00,'conversationConfig':_0x242f19});}function cleanCache(_0x37963f,_0x25f650,_0x576d05=!![]){const _0x32e963=a11_0x20ed59,_0x3abf34={'sessionsDeleted':0x0,'tasksDeleted':0x0,'imagesDeleted':0x0,'errors':[]},_0x5ead16=_0x25f650?[_0x25f650]:_0x37963f['config'][_0x32e963(0x15f)][_0x32e963(0x1bc)](_0xd8320b=>_0xd8320b[_0x32e963(0x15a)]);for(const _0x1d2fb0 of _0x5ead16){let _0xb5eb6c=null;if(_0x576d05){const _0x2d2c25=findActiveSession(_0x37963f,_0x1d2fb0);_0x2d2c25&&(_0xb5eb6c=getSessionId(_0x2d2c25[_0x32e963(0x1cb)][_0x32e963(0x1cb)]));}const _0x1444ce=getSessionsDir(_0x37963f,_0x1d2fb0);if(fs_1[_0x32e963(0x1de)][_0x32e963(0x118)](_0x1444ce))try{const _0x315a4a=fs_1[_0x32e963(0x1de)][_0x32e963(0x1ea)](_0x1444ce,{'withFileTypes':!![]});for(const _0xa66d9b of _0x315a4a){if(!_0xa66d9b[_0x32e963(0x1dd)]())continue;if(_0xb5eb6c&&_0xa66d9b['name']===_0xb5eb6c)continue;const _0x21a56b=path_1[_0x32e963(0x1de)]['join'](_0x1444ce,_0xa66d9b[_0x32e963(0x16c)]);try{fs_1[_0x32e963(0x1de)][_0x32e963(0x169)](_0x21a56b,{'recursive':!![],'force':!![]}),_0x3abf34[_0x32e963(0x17d)]++;}catch(_0x55c4a2){_0x3abf34[_0x32e963(0x161)][_0x32e963(0x194)]('删除会话目录失败:\x20'+_0x21a56b);}}}catch(_0x3338f4){_0x3abf34[_0x32e963(0x161)]['push'](_0x32e963(0x1df)+_0x1444ce);}const _0x1fca47=getTasksDir(_0x37963f,_0x1d2fb0);if(fs_1[_0x32e963(0x1de)][_0x32e963(0x118)](_0x1fca47))try{const _0x66b224=fs_1['default'][_0x32e963(0x1ea)](_0x1fca47,{'withFileTypes':!![]});for(const _0x266dd3 of _0x66b224){if(!_0x266dd3[_0x32e963(0x1dd)]())continue;const _0x6b0eab=path_1[_0x32e963(0x1de)][_0x32e963(0x148)](_0x1fca47,_0x266dd3[_0x32e963(0x16c)]);try{fs_1[_0x32e963(0x1de)][_0x32e963(0x169)](_0x6b0eab,{'recursive':!![],'force':!![]}),_0x3abf34[_0x32e963(0x179)]++;}catch(_0x406ff5){_0x3abf34[_0x32e963(0x161)][_0x32e963(0x194)](_0x32e963(0x1a2)+_0x6b0eab);}}}catch(_0xe466f5){_0x3abf34[_0x32e963(0x161)][_0x32e963(0x194)](_0x32e963(0x163)+_0x1fca47);}const _0x57b4c0=getImagesDir(_0x37963f,_0x1d2fb0);if(fs_1[_0x32e963(0x1de)]['existsSync'](_0x57b4c0))try{const _0x11c118=fs_1[_0x32e963(0x1de)]['readdirSync'](_0x57b4c0,{'withFileTypes':!![]});for(const _0x41bae8 of _0x11c118){const _0x5dfafd=path_1[_0x32e963(0x1de)][_0x32e963(0x148)](_0x57b4c0,_0x41bae8[_0x32e963(0x16c)]);try{fs_1['default'][_0x32e963(0x140)](_0x5dfafd),_0x3abf34[_0x32e963(0x173)]++;}catch(_0x47e54b){_0x3abf34[_0x32e963(0x161)]['push'](_0x32e963(0x1b1)+_0x5dfafd);}}}catch(_0x1f891e){_0x3abf34[_0x32e963(0x161)][_0x32e963(0x194)]('读取images目录失败:\x20'+_0x57b4c0);}if(!_0x576d05){const _0x157366=getActiveSessionsFile(_0x37963f,_0x1d2fb0);if(fs_1[_0x32e963(0x1de)][_0x32e963(0x118)](_0x157366))try{fs_1['default'][_0x32e963(0x140)](_0x157366);}catch(_0x5ef95a){_0x3abf34['errors'][_0x32e963(0x194)](_0x32e963(0x1eb)+_0x157366);}_0x37963f[_0x32e963(0x139)][_0x32e963(0x1ed)](_0x1d2fb0)&&_0x37963f['activeSessions']['delete'](_0x1d2fb0);}}return _0x3abf34;}
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.timestamp=timestamp,exports.getHomeDir=getHomeDir,exports.getClientDir=getClientDir,exports.initClientDir=initClientDir,exports.ensureClientDir=ensureClientDir,exports.getClientConfig=getClientConfig,exports.resolveToUserId=resolveToUserId,exports.authCheck=authCheck,exports.isOwner=isOwner,exports.debugLog=debugLog,exports.isMobile=isMobile,exports.getPhoneMapFile=getPhoneMapFile,exports.loadPhoneMap=loadPhoneMap,exports.savePhoneMap=savePhoneMap,exports.userIdToPhone=userIdToPhone,exports.resolveUserId=resolveUserId,exports.resolveAllPhonesInConfig=resolveAllPhonesInConfig,exports.hashConversationId=hashConversationId,exports.getReplyWebhook=getReplyWebhook,exports.getReplyConversationId=getReplyConversationId,exports.findActiveSession=findActiveSession,exports.getConversationConfig=getConversationConfig,exports.getConversationDir=getConversationDir,exports.getSessionsDir=getSessionsDir,exports.getTasksDir=getTasksDir,exports.getImagesDir=getImagesDir,exports.getSessionDir=getSessionDir,exports.getSessionId=getSessionId,exports.formatSessionInfo=formatSessionInfo,exports.readSessionLogTail=readSessionLogTail,exports.findHistorySession=findHistorySession,exports.findLatestSession=findLatestSession,exports.updateSessionFile=updateSessionFile,exports.appendSessionLog=appendSessionLog,exports.getActiveSessionsFile=getActiveSessionsFile,exports.saveActiveSession=saveActiveSession,exports.loadActiveSessions=loadActiveSessions,exports.endSession=endSession,exports.switchToSession=switchToSession,exports.startNewSession=startNewSession,exports.processMessageQueue=processMessageQueue,exports.handleSessionMessage=handleSessionMessage,exports.cleanCache=cleanCache;const utils_ok_1=require("utils-ok"),fs_1=__importDefault(require("fs")),os_1=__importDefault(require("os")),assert_1=__importDefault(require("assert")),crypto_1=__importDefault(require("crypto")),path_1=__importDefault(require("path")),commands_1=require("./commands"),messaging_1=require("./messaging"),claude_process_1=require("./claude-process");function timestamp(){return utils_ok_1.dateUtil.mm(Date.now()).format("YYYY-MM-DD HH:mm:ss")}function getHomeDir(){return os_1.default.homedir()}function getClientDir(e){return path_1.default.join(getHomeDir(),".cc-ding",e.clientId)}function initClientDir(e,n){const s=path_1.default.join(getHomeDir(),".cc-ding",e),t=path_1.default.join(s,"config.json");return fs_1.default.mkdirSync(s,{recursive:!0}),fs_1.default.writeFileSync(t,JSON.stringify(n,null,2),"utf-8"),t}function ensureClientDir(e){const n=path_1.default.join(getHomeDir(),".cc-ding",e),s=path_1.default.join(n,"config.json");if(fs_1.default.existsSync(s))return;console.log(`[${timestamp()}] \u5BA2\u6237\u7AEF\u76EE\u5F55\u672A\u521D\u59CB\u5316: ${n}`),console.log(`[${timestamp()}] \u6B63\u5728\u81EA\u52A8\u521D\u59CB\u5316...`),initClientDir(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(`[${timestamp()}] \u5DF2\u751F\u6210\u9ED8\u8BA4\u914D\u7F6E\u6587\u4EF6: ${s}`),console.log(`[${timestamp()}] \u8BF7\u7F16\u8F91 config.json \u586B\u5199\u5FC5\u8981\u7684\u914D\u7F6E\u9879\u540E\u91CD\u65B0\u542F\u52A8`),process.exit(1)}function getClientConfig(e){const n=`${getClientDir(e)}/config.json`;(0,assert_1.default)(fs_1.default.existsSync(n),`Could not find client config file: ${n}`);const s=utils_ok_1.fileUtil.getJSON(n);return(0,assert_1.default)(s.clientSecret,"config.json missing required field: clientSecret"),(0,assert_1.default)(s.whiteUserList,"config.json missing required field: whiteUserList"),s}function resolveToUserId(e,n){return isMobile(n)&&e.resolvedPhones[n]||n}function authCheck(e,n,s){if(isOwner(e,n))return!0;if(s){const t=e.config.conversations.find(o=>o.conversationId===s);if(t?.whiteUserList&&t.whiteUserList.length>0)return t.whiteUserList.some(o=>resolveToUserId(e,o)===n)}return e.config.whiteUserList.some(t=>resolveToUserId(e,t)===n)}function isOwner(e,n){const s=e.config.owner;if(!s||!isMobile(s))return!1;const t=e.resolvedPhones[s];return!!t&&t===n}function debugLog(e,n,...s){e.config.debug&&console.log(`[DEBUG] ${n}`,...s)}const PHONE_RE=/^1\d{10}$/;function isMobile(e){return PHONE_RE.test(e)}function getPhoneMapFile(e){return path_1.default.join(getClientDir(e),"phone-map.json")}function loadPhoneMap(e){const n=getPhoneMapFile(e);if(!fs_1.default.existsSync(n))return{};try{const s=JSON.parse(fs_1.default.readFileSync(n,"utf-8"));if(typeof s=="object"&&s!==null)return s}catch{}return{}}function savePhoneMap(e,n){const s=getPhoneMapFile(e);try{fs_1.default.writeFileSync(s,JSON.stringify(n,null,2),"utf-8")}catch(t){console.error("\u4FDD\u5B58 phone-map.json \u5931\u8D25:",t)}}function userIdToPhone(e,n){for(const[s,t]of Object.entries(e.resolvedPhones))if(t===n)return s;return null}async function resolveUserId(e,n){if(!n)return null;if(!isMobile(n))return n;if(e.resolvedPhones[n])return e.resolvedPhones[n];const s=await(0,messaging_1.queryUserIdByMobile)(e,n);return s&&(e.resolvedPhones[n]=s,savePhoneMap(e,e.resolvedPhones)),s}async function resolveAllPhonesInConfig(e){e.resolvedPhones=loadPhoneMap(e);const n=[],s=async t=>{if(e.resolvedPhones[t])return;const o=await(0,messaging_1.queryUserIdByMobile)(e,t);o&&(e.resolvedPhones[t]=o,n.push(t))};e.config.owner&&(isMobile(e.config.owner)?(await s(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)isMobile(t)&&(await s(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 o of t.whiteUserList)isMobile(o)&&(await s(o),e.resolvedPhones[o]||console.warn(`[WARN] \u65E0\u6CD5\u89E3\u6790\u7FA4\u767D\u540D\u5355\u624B\u673A\u53F7: ${o}`));n.length>0&&savePhoneMap(e,e.resolvedPhones),console.log(`[\u624B\u673A\u89E3\u6790] \u5DF2\u52A0\u8F7D ${Object.keys(e.resolvedPhones).length} \u6761\u8BB0\u5F55 (${n.length} \u6761\u65B0\u89E3\u6790)`)}function hashConversationId(e,n){const t=getConversationConfig(e,n)?.linkConversationId||n;return crypto_1.default.createHash("md5").update(t).digest("hex")}function getReplyWebhook(e){return e.currentWebhook||e.sessionWebhook}function getReplyConversationId(e){return e.currentConversationId||e.conversationId}function findActiveSession(e,n){const s=e.activeSessions.get(n);if(s)return{key:n,session:s};const t=getConversationConfig(e,n);if(t?.linkConversationId){for(const o of e.activeSessions)if(getConversationConfig(e,o[0])?.linkConversationId===t.linkConversationId)return{key:o[0],session:o[1]}}}function getConversationConfig(e,n){return e.config.conversations.find(s=>s.conversationId===n)}function getConversationDir(e,n){const s=hashConversationId(e,n);return`${getClientDir(e)}/${s}`}function getSessionsDir(e,n){return`${getConversationDir(e,n)}/.sessions`}function getTasksDir(e,n){return`${getConversationDir(e,n)}/.tasks`}function getImagesDir(e,n){return`${getConversationDir(e,n)}/.images`}function getSessionDir(e,n){const s=n.claudeSessionId||n.startTimeStr;return`${getSessionsDir(e,n.conversationId)}/${s}`}function getSessionId(e){return e.claudeSessionId||e.startTimeStr}function formatSessionInfo(e,n){const s=findActiveSession(e,n);if(!s)return null;const{session:t,isProcessing:o,messageQueue:i}=s.session;return[`- **\u4F1A\u8BDDID:** ${getSessionId(t)}`,`- **\u53D1\u8D77\u8005:** ${t.startNickName}(${t.startStaffId})`,`- **\u5F00\u59CB\u65F6\u95F4:** ${t.startTimeStr}`,`- **\u6700\u540E\u53D1\u9001\u8005:** ${s.session.lastSenderStaffId}`,`- **\u5904\u7406\u4E2D:** ${o}`,`- **\u6392\u961F\u6D88\u606F:** ${i?.length||0} \u6761`].join(`
2
+ `)}function readSessionLogTail(e,n,s){const t=findActiveSession(e,n);if(!t)return null;const o=t.session,i=`${getSessionDir(e,o.session)}/session.log`;if(!fs_1.default.existsSync(i))return null;try{return fs_1.default.readFileSync(i,"utf-8").split(`
3
+ `).filter(c=>c.length>0).slice(-s).join(`
4
+ `)}catch{return null}}function findHistorySession(e,n,s){const t=getSessionsDir(e,n),o=`${t}/${s}/session.json`;try{return utils_ok_1.fileUtil.getJSON(o)}catch{}const i=parseInt(s,10);if(!isNaN(i)&&i>0){const a=utils_ok_1.dateUtil.mm(i).format("YYYY-MM-DD-HH-mm-ss"),u=`${t}/${a}/session.json`;try{return utils_ok_1.fileUtil.getJSON(u)}catch{}}return null}function findLatestSession(e,n){const s=getSessionsDir(e,n);if(!fs_1.default.existsSync(s))return null;const t=findActiveSession(e,n),o=t?getSessionId(t.session.session):null;let i=null,a=0;try{const u=fs_1.default.readdirSync(s,{withFileTypes:!0});for(const c of u){if(!c.isDirectory())continue;const r=path_1.default.join(s,c.name,"session.json");if(fs_1.default.existsSync(r))try{const d=utils_ok_1.fileUtil.getJSON(r);if(o&&getSessionId(d)===o)continue;d.startTime>a&&(a=d.startTime,i=d)}catch{continue}}}catch{}return i}function updateSessionFile(e,n,s){if(s.claudeSessionId&&!n.claudeSessionId){const o=getSessionDir(e,n);n.claudeSessionId=s.claudeSessionId;const i=getSessionDir(e,n);o!==i&&fs_1.default.existsSync(o)&&(fs_1.default.renameSync(o,i),console.log(`[${timestamp()}] \u4F1A\u8BDD\u76EE\u5F55\u91CD\u547D\u540D: ${path_1.default.basename(o)} -> ${path_1.default.basename(i)}`))}const t=`${getSessionDir(e,n)}/session.json`;try{s.sessionWebhook&&(n.sessionWebhook=s.sessionWebhook),s.currentWebhook!==void 0&&(n.currentWebhook=s.currentWebhook||void 0),s.currentConversationId!==void 0&&(n.currentConversationId=s.currentConversationId||void 0),fs_1.default.writeFileSync(t,JSON.stringify(n,null,2),"utf-8");const o=s.claudeSessionId?"claudeSessionId":s.currentWebhook!==void 0?"currentWebhook":"sessionWebhook";console.log(`[${timestamp()}] \u4F1A\u8BDD\u6587\u4EF6\u5DF2\u4FDD\u5B58: ${o}`),saveActiveSession(e,n.conversationId)}catch(o){console.error("\u66F4\u65B0 session.json \u5931\u8D25:",o)}}function appendSessionLog(e,n,s){const t=`${e}/session.log`,i=`[${timestamp()}] [${n.toUpperCase()}]: ${s}
5
+ `;try{fs_1.default.appendFileSync(t,i,"utf-8")}catch{}}function getActiveSessionsFile(e,n){return`${getSessionsDir(e,n)}/active.json`}function saveActiveSession(e,n){const s=e.activeSessions.get(n),t=getActiveSessionsFile(e,n);try{if(!s){fs_1.default.existsSync(t)&&fs_1.default.unlinkSync(t);return}const o={session:s.session,lastSenderStaffId:s.lastSenderStaffId,conversationConfig:s.conversationConfig};fs_1.default.mkdirSync(path_1.default.dirname(t),{recursive:!0}),fs_1.default.writeFileSync(t,JSON.stringify(o,null,2),"utf-8"),debugLog(e,`\u6D3B\u8DC3\u4F1A\u8BDD\u5DF2\u6301\u4E45\u5316: \u7FA4=${n}`)}catch(o){console.error(`\u6301\u4E45\u5316\u6D3B\u8DC3\u4F1A\u8BDD\u5931\u8D25: \u7FA4=${n}`,o)}}function loadActiveSessions(e){for(const n of e.config.conversations){const s=getActiveSessionsFile(e,n.conversationId);if(fs_1.default.existsSync(s))try{const t=utils_ok_1.fileUtil.getJSON(s);if(!t?.session){console.log(`\u6D3B\u8DC3\u4F1A\u8BDD\u6587\u4EF6\u65E0\u6548\uFF0C\u8DF3\u8FC7: ${s}`);continue}const o=getSessionDir(e,t.session);if(!fs_1.default.existsSync(o)){console.log(`\u6D3B\u8DC3\u4F1A\u8BDD\u76EE\u5F55\u5DF2\u4E0D\u5B58\u5728\uFF0C\u6E05\u7406\u6301\u4E45\u5316\u6587\u4EF6: ${s}`),fs_1.default.unlinkSync(s);continue}e.activeSessions.set(n.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=${n.conversationId}, \u4F1A\u8BDDID=${getSessionId(t.session)}`)}catch(t){console.error(`\u52A0\u8F7D\u6D3B\u8DC3\u4F1A\u8BDD\u5931\u8D25: ${s}`,t)}}}async function endSession(e,n,s){const t=findActiveSession(e,n);if(!t){console.log(`\u7FA4 ${n} \u65E0\u6D3B\u8DC3\u4F1A\u8BDD`);return}const{key:o,session:i}=t,{session:a}=i,u=getSessionDir(e,a),c=getSessionId(a);console.log(`\u7ED3\u675F\u4F1A\u8BDD: \u7FA4=${n}, \u4F1A\u8BDDID=${c}`),(0,claude_process_1.interruptClaudeProcess)(i,"\u7ED3\u675F\u4F1A\u8BDD\u65F6\u4E2D\u65AD\u6B63\u5728\u6267\u884C\u7684 Claude \u8FDB\u7A0B")&&fs_1.default.appendFileSync(`${u}/session.log`,`[${timestamp()}] [SYSTEM]: \u7ED3\u675F\u4F1A\u8BDD\u65F6\u4E2D\u65AD Claude \u8FDB\u7A0B
6
+ `,"utf-8"),await(0,messaging_1.sendDingMessage)(e,{conversationId:n,sessionWebhook:s,atUserId:a.startStaffId,content:`\u{1F4AC} \u4F1A\u8BDD\u5DF2\u7ED3\u675F
7
+ \u{1F4CB} \u4F1A\u8BDDID: ${c}`}),e.activeSessions.delete(o),saveActiveSession(e,o),fs_1.default.appendFileSync(`${u}/session.log`,`[${timestamp()}] [SYSTEM]: \u7528\u6237\u8BF7\u6C42\u7ED3\u675F\u4F1A\u8BDD
8
+ `,"utf-8")}async function switchToSession(e,n,s,t,o,i){const a=findHistorySession(e,n,t);if(!a)return await(0,messaging_1.sendDingMessage)(e,{conversationId:n,sessionWebhook:s,atUserId:o,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 u=getSessionDir(e,a);if(!fs_1.default.existsSync(u))return await(0,messaging_1.sendDingMessage)(e,{conversationId:n,sessionWebhook:s,atUserId:o,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 c=findActiveSession(e,n);c&&(console.log(`\u5207\u6362\u4F1A\u8BDD\uFF0C\u5148\u7ED3\u675F\u5F53\u524D\u4F1A\u8BDD: ${getSessionId(c.session.session)}`),(0,claude_process_1.interruptClaudeProcess)(c.session,"\u5207\u6362\u4F1A\u8BDD\u65F6\u4E2D\u65AD\u6B63\u5728\u6267\u884C\u7684 Claude \u8FDB\u7A0B"),e.activeSessions.delete(c.key),saveActiveSession(e,c.key),fs_1.default.appendFileSync(`${getSessionDir(e,c.session.session)}/session.log`,`[${timestamp()}] [SYSTEM]: \u4F1A\u8BDD\u88AB\u5207\u6362\u5230 ${t}\uFF0C\u7ED3\u675F\u5F53\u524D\u4F1A\u8BDD
9
+ `,"utf-8")),e.activeSessions.set(n,{session:a,lastSenderStaffId:o,isProcessing:!1,messageQueue:[],conversationConfig:i}),saveActiveSession(e,n);const r=!!a.claudeSessionId,d=getSessionId(a);return await(0,messaging_1.sendDingMessage)(e,{conversationId:n,sessionWebhook:s,atUserId:o,content:`\u2705 \u5DF2\u5207\u6362\u5230\u5386\u53F2\u4F1A\u8BDD (\u4F1A\u8BDDID: ${d})
10
+ ${r?"\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"}
11
+ \u{1F4A1} \u56DE\u590D /end \u53EF\u7ED3\u675F\u672C\u8F6E\u5BF9\u8BDD`}),console.log(`\u5DF2\u5207\u6362\u5230\u5386\u53F2\u4F1A\u8BDD: \u7FA4=${n}, \u4F1A\u8BDDID=${d}, \u6709Claude\u4E0A\u4E0B\u6587=${r}`),!0}async function startNewSession(e,n){const{conversationId:s,sessionWebhook:t,senderStaffId:o,senderNick:i,message:a,conversationConfig:u}=n,c=e.config.sessionMaxConcurrency??e.DEFAULT_SESSION_MAX_CONCURRENCY;if(e.activeSessions.size>=c){console.log(`\u8FBE\u5230\u6700\u5927\u5E76\u53D1\u6570 (${c})\uFF0C\u62D2\u7EDD\u65B0\u4F1A\u8BDD: \u7FA4=${s}`),await(0,messaging_1.sendDingMessage)(e,{conversationId:s,sessionWebhook:t,atUserId:o,content:"\u{1F92F} \u5F53\u524D\u7E41\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5..."});return}const r=Date.now(),d={conversationId:s,sessionWebhook:t,startTime:r,startTimeStr:utils_ok_1.dateUtil.mm(r).format("YYYY-MM-DD-HH-mm-ss"),startStaffId:o,startNickName:i};console.log(`\u521B\u5EFA\u65B0\u4F1A\u8BDD: \u7FA4=${s}, \u4F1A\u8BDDID=${getSessionId(d)}, \u53D1\u8D77\u8005=${o}, \u5F53\u524D\u5E76\u53D1=${e.activeSessions.size+1}/${c}`);const f=getSessionDir(e,d);fs_1.default.mkdirSync(f,{recursive:!0}),fs_1.default.writeFileSync(`${f}/session.json`,JSON.stringify(d,null,2),"utf-8"),e.activeSessions.set(s,{session:d,lastSenderStaffId:o,isProcessing:!0,messageQueue:[],conversationConfig:u}),saveActiveSession(e,s),u.receiveReply!==!1&&await(0,messaging_1.sendDingMessage)(e,{conversationId:s,sessionWebhook:t,atUserId:o,content:`\u{1F680} \u4F1A\u8BDD\u5DF2\u5F00\u59CB\uFF01
12
+ \u5904\u7406\u4E2D...
13
+ \u{1F4A1} \u56DE\u590D /end \u53EF\u7ED3\u675F\u672C\u8F6E\u5BF9\u8BDD`});try{await(0,claude_process_1.executeClaudeQuery)(e,d,a,{skill:u.taskCfg?.skill,agent:u.agent,senderNick:i,senderStaffId:o})}catch(l){console.error("\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",l),await(0,messaging_1.sendDingMessage)(e,{conversationId:s,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(s);l&&(l.isProcessing=!1)}await processMessageQueue(e,s)}async function processMessageQueue(e,n){const s=e.activeSessions.get(n);if(!s||s.messageQueue.length===0)return;const t=s.messageQueue.shift(),{message:o,senderStaffId:i,senderNick:a}=t,u=s.session.sessionWebhook;console.log(`\u5904\u7406\u961F\u5217\u6D88\u606F: \u7FA4=${n}, \u5269\u4F59 ${s.messageQueue.length} \u6761`),s.isProcessing=!0,s.lastSenderStaffId=i,saveActiveSession(e,n),s.conversationConfig.receiveReply!==!1&&await(0,messaging_1.sendDingMessage)(e,{conversationId:n,sessionWebhook:u,atUserId:i,content:"\u2705 \u6536\u5230\uFF0C\u6211\u6765\u5904\u7406..."}).catch(()=>{});try{await(0,claude_process_1.executeClaudeQuery)(e,s.session,o,{skill:s.conversationConfig.taskCfg?.skill,agent:s.conversationConfig.agent,senderNick:a,senderStaffId:i})}catch(c){console.error("\u6267\u884C\u961F\u5217 Claude \u67E5\u8BE2\u5931\u8D25:",c),await(0,messaging_1.sendDingMessage)(e,{conversationId:n,sessionWebhook:u,atUserId:i,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${c instanceof Error?c.message:String(c)}`})}finally{s.isProcessing=!1}if(s.goonPending){s.goonPending=!1,s.isProcessing=!0;try{await(0,claude_process_1.executeClaudeQuery)(e,s.session,"\u7EE7\u7EED",{senderNick:s.session.startNickName,senderStaffId:s.lastSenderStaffId})}catch(c){console.error("goonPending \u6062\u590D\u6267\u884C\u5931\u8D25:",c)}finally{s.isProcessing=!1}}s.messageQueue.length>0&&await processMessageQueue(e,n)}async function handleSessionMessage(e,n){const{conversationId:s,sessionWebhook:t,senderStaffId:o,senderNick:i,message:a,conversationConfig:u}=n;if((0,commands_1.parseEndCommand)(a)){await endSession(e,s,t);return}const c=findActiveSession(e,s),r=c?.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=${s}, \u8DEF\u5F84=${d}`)),r.isProcessing){const l={message:a,senderStaffId:o,senderNick:i};r.messageQueue.push(l);const g=r.messageQueue.length;console.log(`\u4F1A\u8BDD ${s} \u6D88\u606F\u5DF2\u5165\u961F\uFF0C\u6392\u961F\u7B2C ${g} \u6761`),await(0,messaging_1.sendDingMessage)(e,{conversationId:s,sessionWebhook:t,atUserId:o,content:`\u23F3 \u6B63\u5728\u5904\u7406\u4E2D\uFF0C\u5DF2\u52A0\u5165\u961F\u5217\uFF08\u6392\u961F\u7B2C ${g} \u6761\uFF09`});return}const f=r.session.conversationId===s;console.log(`\u8FFD\u52A0\u6D88\u606F\u5230\u6D3B\u8DC3\u4F1A\u8BDD: \u7FA4=${s}, \u4F1A\u8BDDID=${getSessionId(r.session)}${f?"":`(\u5173\u8054\u7FA4,\u4F1A\u8BDD\u5F52\u5C5E=${r.session.conversationId})`}`),r.lastSenderStaffId=o,r.isProcessing=!0,saveActiveSession(e,c.key),f&&t!==r.session.sessionWebhook&&(r.session.sessionWebhook=t,updateSessionFile(e,r.session,{sessionWebhook:t})),r.session.currentWebhook=t,r.session.currentConversationId=s,updateSessionFile(e,r.session,{currentWebhook:t,currentConversationId:s}),u.receiveReply!==!1&&await(0,messaging_1.sendDingMessage)(e,{conversationId:s,sessionWebhook:t,atUserId:o,content:"\u2705 \u6536\u5230\uFF0C\u6211\u6765\u5904\u7406..."});try{await(0,claude_process_1.executeClaudeQuery)(e,r.session,a,{skill:u.taskCfg?.skill,agent:u.agent,senderNick:i,senderStaffId:o})}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,a,{skill:u.taskCfg?.skill,agent:u.agent,senderNick:i,senderStaffId:o});return}catch(g){console.error("\u91CD\u8BD5\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",g),await(0,messaging_1.sendDingMessage)(e,{conversationId:s,sessionWebhook:t,atUserId:o,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${g instanceof Error?g.message:String(g)}`}),r.isProcessing=!1,await processMessageQueue(e,s);return}}console.error("\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",l),await(0,messaging_1.sendDingMessage)(e,{conversationId:s,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,s)}else await startNewSession(e,{conversationId:s,sessionWebhook:t,senderStaffId:o,senderNick:i,message:a,conversationConfig:u})}function cleanCache(e,n,s=!0){const t={sessionsDeleted:0,tasksDeleted:0,imagesDeleted:0,errors:[]},o=n?[n]:e.config.conversations.map(i=>i.conversationId);for(const i of o){let a=null;if(s){const f=findActiveSession(e,i);f&&(a=getSessionId(f.session.session))}const u=getSessionsDir(e,i);if(fs_1.default.existsSync(u))try{const f=fs_1.default.readdirSync(u,{withFileTypes:!0});for(const l of f){if(!l.isDirectory()||a&&l.name===a)continue;const g=path_1.default.join(u,l.name);try{fs_1.default.rmSync(g,{recursive:!0,force:!0}),t.sessionsDeleted++}catch{t.errors.push(`\u5220\u9664\u4F1A\u8BDD\u76EE\u5F55\u5931\u8D25: ${g}`)}}}catch{t.errors.push(`\u8BFB\u53D6sessions\u76EE\u5F55\u5931\u8D25: ${u}`)}const c=getTasksDir(e,i);if(fs_1.default.existsSync(c))try{const f=fs_1.default.readdirSync(c,{withFileTypes:!0});for(const l of f){if(!l.isDirectory())continue;const g=path_1.default.join(c,l.name);try{fs_1.default.rmSync(g,{recursive:!0,force:!0}),t.tasksDeleted++}catch{t.errors.push(`\u5220\u9664\u4EFB\u52A1\u76EE\u5F55\u5931\u8D25: ${g}`)}}}catch{t.errors.push(`\u8BFB\u53D6tasks\u76EE\u5F55\u5931\u8D25: ${c}`)}const r=getImagesDir(e,i);if(fs_1.default.existsSync(r))try{const f=fs_1.default.readdirSync(r,{withFileTypes:!0});for(const l of f){const g=path_1.default.join(r,l.name);try{fs_1.default.unlinkSync(g),t.imagesDeleted++}catch{t.errors.push(`\u5220\u9664\u56FE\u7247\u5931\u8D25: ${g}`)}}}catch{t.errors.push(`\u8BFB\u53D6images\u76EE\u5F55\u5931\u8D25: ${r}`)}const d=path_1.default.join(getConversationDir(e,i),".playwright-cli");if(fs_1.default.existsSync(d))try{fs_1.default.rmSync(d,{recursive:!0,force:!0})}catch{t.errors.push(`\u5220\u9664 playwright-cli \u7F13\u5B58\u5931\u8D25: ${d}`)}if(!s){const f=getActiveSessionsFile(e,i);if(fs_1.default.existsSync(f))try{fs_1.default.unlinkSync(f)}catch{t.errors.push(`\u5220\u9664\u6D3B\u8DC3\u4F1A\u8BDD\u6587\u4EF6\u5931\u8D25: ${f}`)}e.activeSessions.has(i)&&e.activeSessions.delete(i)}}return t}
@@ -1 +1,24 @@
1
- 'use strict';function a12_0x201e(){const _0x3ac912=['formatTaskInfo','task-failed.json','./session','bypassPermissions','isRetryableApiError',']\x20任务预处理结果已更新:\x20','catch',']\x20检测到\x20FORCE_ENABLE,强制使用\x20settings-ding.json','child_process','-done.json',',\x20需求:\x20','senderNickName',']\x20超时(',']\x20已取消任务:\x20#','parse','baseUtil','--print','ensureSettingsWithApiKey','resolveClaudeSettingsPath','执行失败(退出码:\x20','filter','data','getFileStr','stderr','replace','❌\x20任务失败:\x20','getConversationConfig','push','then','进程执行错误:','task','/task.json',']\x20切换到\x20API\x20Key\x20模式','\x20(已重试','debugLog','../common','rotateApiKey','102miNoLs','sort','splice','spawn','),\x20','settings.json','**✅\x20最近完成**\x0a无','stdout','basename','5360660DuAPgV','getOneTodoTask',']\x20无可用配额,任务重置为待办','./messaging',']\x20检测到\x20TPM\x20限流(快速失败),','length','pipe','type','promptSimply','default','🔄\x20开始处理任务:\x20','1736wKuXJR','writeFileSync','\x0a...共取消\x20','task-done.json','**✅\x20最近完成\x20(top\x20','14791jSPiOL','path','未发现待办任务...',']\x20自动检测到\x20settings.json:\x20','\x20用户:\x20','ignore','sendDingMessage','getConversationDir','--permission-mode',']\x20任务预处理失败(退出码:','/task-doing.json',']\x20任务预处理进程错误:','existsSync',']\x20退出码:\x20','elapsed','finishTask','apiKey','kill','task-doing.json','senderStaffId','output','1281136NGtEie',']\x20更新任务预处理结果失败:','**⏳\x20处理中**\x0a无','slice','--settings','/result.md','1NdNOFq','\x20次,切换到新\x20Key:\x20','join','fileUtil','__esModule','format','任务执行超时(10分钟),终止进程','markdown','runTaskHandlerLoop',']\x20任务处理中:\x20','toString','执行超时',']\x20执行命令:\x20','/task.log','countTodoTask','now','dirWalker','执行命令:\x20claude\x20','conversationId','agent','-doing.json','cancelTask','直接返回JSON,不要markdown代码块或其他内容。',']\x20任务预处理返回格式不正确,使用原始prompt','pickValidApiKey','YYYY-MM-DD-HH-mm-ss','抱歉,任务处理异常...','isAuthenticationError',']\x20更新任务重试计数失败:','),使用原始prompt',']\x20任务预处理完成:\x20title=\x22','includes','未找到匹配的待办任务:\x20','SIGTERM','10107RRnLlA','prompt',']\x20任务预处理异常:','sleep','apiKeyCfg','unlinkSync','taskCfg','startTime',']\x20TPM\x20限流快速失败连续','rename','任务已保存:\x20','getForceEnabledSettingsPath','294624GFruZy',']\x20API\x20Key\x20配额耗尽(429),切换到新\x20Key:\x20','次,重置任务为待办','-doing','handleTask','claude','./claude-process','s\x20后重试','289375QMffKU','log','**📋\x20待办队列**\x0a无',']\x20检测到\x20TPM\x20限流(进程已运行一段时间),重置快速失败计数,','retryCount','timestamp','map','无可用配额(429)','stringify','unknown','命令执行失败,\x20退出码:\x20','未生成结果文件','utf-8','skill','close','settingLabel','match',']\x20任务执行超时,重置为待办','__importDefault','\x0a原因:\x20','格式:\x20{\x22title\x22:\x22简短标题(15字以内)\x22,\x22promptSimply\x22:\x22优化后的需求描述,保留原始需求的所有关键信息,使描述更清晰、结构化\x22}','getJSON','认证失败(401),API\x20Key\x20无效或服务未授权','读取任务文件失败:\x20','getTasksDir','),标记为失败:\x20','config','trim','task.json','**📋\x20待办队列\x20(','-failed.json','timedOut','s\x20后重试\x20(','463846BWyGgB','title','sessionWebhook','write',']\x20任务处理完成','exitCode',')**\x0a','--agent','请对以下任务需求进行预处理,生成简短标题和优化后的需求描述。','conversations','TPM限流快速失败次数过多','**⏳\x20处理中\x20(','...','error'];a12_0x201e=function(){return _0x3ac912;};return a12_0x201e();}const a12_0x19a7e8=a12_0xcd42;(function(_0x3f7e1c,_0x23ad2e){const _0x1a9393=a12_0xcd42,_0x41f360=_0x3f7e1c();while(!![]){try{const _0x4dbf4a=parseInt(_0x1a9393(0x1a3))/0x1*(parseInt(_0x1a9393(0x1fa))/0x2)+-parseInt(_0x1a9393(0x1d1))/0x3+-parseInt(_0x1a9393(0x19d))/0x4+parseInt(_0x1a9393(0x1d9))/0x5+-parseInt(_0x1a9393(0x16f))/0x6*(-parseInt(_0x1a9393(0x188))/0x7)+-parseInt(_0x1a9393(0x183))/0x8*(parseInt(_0x1a9393(0x1c5))/0x9)+parseInt(_0x1a9393(0x178))/0xa;if(_0x4dbf4a===_0x23ad2e)break;else _0x41f360['push'](_0x41f360['shift']());}catch(_0x4bf931){_0x41f360['push'](_0x41f360['shift']());}}}(a12_0x201e,0x30bb2));function a12_0xcd42(_0x1cd13f,_0x2bc1ca){_0x1cd13f=_0x1cd13f-0x150;const _0x201e7b=a12_0x201e();let _0xcd42e=_0x201e7b[_0x1cd13f];return _0xcd42e;}var __importDefault=this&&this[a12_0x19a7e8(0x1eb)]||function(_0x1156f2){return _0x1156f2&&_0x1156f2['__esModule']?_0x1156f2:{'default':_0x1156f2};};Object['defineProperty'](exports,a12_0x19a7e8(0x1a7),{'value':!![]}),exports[a12_0x19a7e8(0x208)]=formatTaskInfo,exports[a12_0x19a7e8(0x1b1)]=countTodoTask,exports[a12_0x19a7e8(0x179)]=getOneTodoTask,exports[a12_0x19a7e8(0x197)]=finishTask,exports[a12_0x19a7e8(0x1b8)]=cancelTask,exports['parseTaskCancelCommand']=parseTaskCancelCommand,exports[a12_0x19a7e8(0x1d5)]=handleTask,exports[a12_0x19a7e8(0x1ab)]=runTaskHandlerLoop,exports['saveTask']=saveTask;const utils_ok_1=require('utils-ok'),fs_1=__importDefault(require('fs')),path_1=__importDefault(require(a12_0x19a7e8(0x189))),child_process_1=require(a12_0x19a7e8(0x152)),common_1=require(a12_0x19a7e8(0x16d)),messaging_1=require(a12_0x19a7e8(0x17b)),claude_process_1=require(a12_0x19a7e8(0x1d7)),session_1=require(a12_0x19a7e8(0x20a)),api_key_manager_1=require('./api-key-manager'),MAX_RETRY_COUNT=0x3;function formatTaskInfo(_0x34f1b2){const _0x398de1=a12_0x19a7e8,_0x529f8c=[],_0x5af42a=[],_0x4c4e28=[],_0x35cf5a=[];for(const _0x40fa46 of _0x34f1b2[_0x398de1(0x1f3)][_0x398de1(0x203)]){const _0x471111=(0x0,session_1[_0x398de1(0x1f1)])(_0x34f1b2,_0x40fa46[_0x398de1(0x1b5)]);if(!fs_1[_0x398de1(0x181)][_0x398de1(0x194)](_0x471111))continue;const _0x14ea1e=utils_ok_1[_0x398de1(0x1a6)]['dirWalker'](_0x471111);for(const _0x124bb7 of _0x14ea1e){const _0x30d429=path_1['default'][_0x398de1(0x177)](_0x124bb7);try{const _0x1d45d2=utils_ok_1[_0x398de1(0x1a6)][_0x398de1(0x1ee)](_0x124bb7);if(!_0x1d45d2)continue;if(_0x30d429===_0x398de1(0x1f5))_0x529f8c[_0x398de1(0x165)](_0x1d45d2);else{if(_0x30d429===_0x398de1(0x19a))_0x5af42a[_0x398de1(0x165)](_0x1d45d2);else{if(_0x30d429===_0x398de1(0x186))_0x4c4e28[_0x398de1(0x165)](_0x1d45d2);else _0x30d429===_0x398de1(0x209)&&_0x35cf5a[_0x398de1(0x165)](_0x1d45d2);}}}catch{}}}_0x529f8c[_0x398de1(0x170)]((_0x11e20f,_0x33302c)=>_0x11e20f[_0x398de1(0x1cc)]-_0x33302c[_0x398de1(0x1cc)]),_0x5af42a[_0x398de1(0x170)]((_0x3f7962,_0x19f6ab)=>_0x3f7962[_0x398de1(0x1cc)]-_0x19f6ab['startTime']),_0x4c4e28[_0x398de1(0x170)]((_0x557dd4,_0x590c90)=>_0x590c90[_0x398de1(0x1cc)]-_0x557dd4[_0x398de1(0x1cc)]),_0x35cf5a['sort']((_0x13bf5c,_0x453d93)=>_0x453d93[_0x398de1(0x1cc)]-_0x13bf5c[_0x398de1(0x1cc)]);const _0x2e5acc=[];if(_0x5af42a['length']>0x0){const _0x4ff34a=_0x5af42a[_0x398de1(0x1df)](_0x4ac0c5=>'#'+_0x4ac0c5['startTime']+'\x20'+(_0x4ac0c5[_0x398de1(0x155)]||_0x4ac0c5['senderStaffId'])+':\x20'+taskDisplayName(_0x4ac0c5));_0x2e5acc[_0x398de1(0x165)](_0x398de1(0x205)+_0x5af42a['length']+_0x398de1(0x200)+_0x4ff34a[_0x398de1(0x1a5)]('\x0a'));}else _0x2e5acc['push'](_0x398de1(0x19f));if(_0x529f8c['length']>0x0){const _0x2fc189=_0x529f8c[_0x398de1(0x1df)](_0x7fd398=>'#'+_0x7fd398['startTime']+'\x20'+(_0x7fd398[_0x398de1(0x155)]||_0x7fd398['senderStaffId'])+':\x20'+taskDisplayName(_0x7fd398));_0x2e5acc[_0x398de1(0x165)](_0x398de1(0x1f6)+_0x529f8c['length']+_0x398de1(0x200)+_0x2fc189[_0x398de1(0x1a5)]('\x0a'));}else _0x2e5acc['push'](_0x398de1(0x1db));const _0x4f257d=_0x4c4e28[_0x398de1(0x1a0)](0x0,0x5);if(_0x4f257d[_0x398de1(0x17d)]>0x0){const _0x15e690=_0x4f257d[_0x398de1(0x1df)](_0x3ad271=>'#'+_0x3ad271['startTime']+'\x20'+(_0x3ad271[_0x398de1(0x155)]||_0x3ad271[_0x398de1(0x19b)])+':\x20'+taskDisplayName(_0x3ad271));_0x2e5acc[_0x398de1(0x165)](_0x398de1(0x187)+_0x4f257d[_0x398de1(0x17d)]+'/'+_0x4c4e28[_0x398de1(0x17d)]+_0x398de1(0x200)+_0x15e690[_0x398de1(0x1a5)]('\x0a'));}else _0x2e5acc[_0x398de1(0x165)](_0x398de1(0x175));if(_0x35cf5a[_0x398de1(0x17d)]>0x0){const _0x298803=_0x35cf5a[_0x398de1(0x1df)](_0x56fe79=>'#'+_0x56fe79[_0x398de1(0x1cc)]+'\x20'+(_0x56fe79[_0x398de1(0x155)]||_0x56fe79[_0x398de1(0x19b)])+':\x20'+taskDisplayName(_0x56fe79)+(_0x56fe79['retryCount']?'\x20(重试'+_0x56fe79[_0x398de1(0x1dd)]+'次)':''));_0x2e5acc['push']('**❌\x20失败\x20('+_0x35cf5a['length']+_0x398de1(0x200)+_0x298803['join']('\x0a'));}return _0x2e5acc['join']('\x0a\x0a');}function truncatePrompt(_0x264e94,_0x76a3f3=0x50){const _0x5bf51f=a12_0x19a7e8,_0x2ca3c5=_0x264e94[_0x5bf51f(0x162)](/\n/g,'\x20')[_0x5bf51f(0x1f4)]();return _0x2ca3c5[_0x5bf51f(0x17d)]>_0x76a3f3?_0x2ca3c5['slice'](0x0,_0x76a3f3)+_0x5bf51f(0x206):_0x2ca3c5;}function taskDisplayName(_0x520492){const _0x3feb46=a12_0x19a7e8;if(_0x520492['title'])return _0x520492[_0x3feb46(0x1fb)];return truncatePrompt(_0x520492[_0x3feb46(0x1c6)]);}async function preprocessTask(_0x5670a2,_0x503c00,_0x535689){const _0x1dda6f=a12_0x19a7e8,_0x39ffd1=(0x0,session_1[_0x1dda6f(0x18f)])(_0x5670a2,_0x503c00),_0x32673d='claude',_0x21309c=['--permission-mode',_0x1dda6f(0x20b),_0x1dda6f(0x15a)],_0x48cd3a=(0x0,claude_process_1[_0x1dda6f(0x15c)])(_0x5670a2,_0x39ffd1);_0x48cd3a&&_0x21309c['push'](_0x1dda6f(0x1a1),_0x48cd3a);const _0x227ae1=[_0x1dda6f(0x202),_0x1dda6f(0x1b9),_0x1dda6f(0x1ed),'','原始需求:\x20'+_0x535689]['join']('\x0a');_0x21309c[_0x1dda6f(0x165)](_0x227ae1);const _0xff898=0x7530;return new Promise(_0x3004e9=>{const _0x24312c=_0x1dda6f;let _0xba314c='';const _0xcf69f1=(0x0,child_process_1['spawn'])(_0x32673d,_0x21309c,{'cwd':_0x39ffd1,'stdio':['ignore','pipe',_0x24312c(0x17e)]}),_0xd0896f=setTimeout(()=>{const _0x1e441a=_0x24312c;_0xcf69f1[_0x1e441a(0x199)](_0x1e441a(0x1c4)),setTimeout(()=>{const _0x2afca5=_0x1e441a;try{_0xcf69f1[_0x2afca5(0x199)]('SIGKILL');}catch{}},0xbb8);},_0xff898);_0xcf69f1[_0x24312c(0x176)]['on'](_0x24312c(0x15f),_0x55b09c=>{const _0x2f55cc=_0x24312c;_0xba314c+=_0x55b09c[_0x2f55cc(0x1ad)]();}),_0xcf69f1[_0x24312c(0x161)]['on']('data',()=>{}),_0xcf69f1['on']('close',_0x3a0144=>{const _0x4f16ba=_0x24312c;clearTimeout(_0xd0896f);if(_0x3a0144!==0x0||!_0xba314c[_0x4f16ba(0x1f4)]()){console[_0x4f16ba(0x1da)]('['+(0x0,session_1[_0x4f16ba(0x1de)])()+_0x4f16ba(0x191)+_0x3a0144+_0x4f16ba(0x1c0)),_0x3004e9(null);return;}try{let _0x25dd09=_0xba314c[_0x4f16ba(0x1f4)]();const _0x290ce0=_0x25dd09['match'](/\{[\s\S]*\}/);if(_0x290ce0)_0x25dd09=_0x290ce0[0x0];const _0x4bf96e=JSON[_0x4f16ba(0x158)](_0x25dd09);_0x4bf96e[_0x4f16ba(0x1fb)]&&_0x4bf96e[_0x4f16ba(0x180)]?(console[_0x4f16ba(0x1da)]('['+(0x0,session_1[_0x4f16ba(0x1de)])()+_0x4f16ba(0x1c1)+_0x4bf96e[_0x4f16ba(0x1fb)]+'\x22'),_0x3004e9({'title':String(_0x4bf96e['title']),'promptSimply':String(_0x4bf96e[_0x4f16ba(0x180)])})):(console['log']('['+(0x0,session_1[_0x4f16ba(0x1de)])()+_0x4f16ba(0x1ba)),_0x3004e9(null));}catch(_0x17ef39){console[_0x4f16ba(0x1da)]('['+(0x0,session_1['timestamp'])()+']\x20任务预处理JSON解析失败,使用原始prompt:\x20'+_0x17ef39),_0x3004e9(null);}}),_0xcf69f1['on'](_0x24312c(0x207),_0x5b2da2=>{const _0x3ec705=_0x24312c;clearTimeout(_0xd0896f),console[_0x3ec705(0x207)]('['+(0x0,session_1['timestamp'])()+_0x3ec705(0x193),_0x5b2da2),_0x3004e9(null);});});}function countTodoTask(_0xb0304d){const _0x1439aa=a12_0x19a7e8;let _0xbc02d8=0x0;for(const _0x479188 of _0xb0304d[_0x1439aa(0x1f3)][_0x1439aa(0x203)]){const _0x2a05e2=(0x0,session_1[_0x1439aa(0x1f1)])(_0xb0304d,_0x479188['conversationId']);if(fs_1['default'][_0x1439aa(0x194)](_0x2a05e2)){const _0x506ef1=utils_ok_1[_0x1439aa(0x1a6)][_0x1439aa(0x1b3)](_0x2a05e2),_0x5341a7=_0x506ef1[_0x1439aa(0x15e)](_0xd6ca92=>path_1[_0x1439aa(0x181)][_0x1439aa(0x177)](_0xd6ca92)===_0x1439aa(0x1f5));_0xbc02d8+=_0x5341a7[_0x1439aa(0x17d)];}}return _0xbc02d8;}async function getOneTodoTask(_0x33b00c){const _0x4fe41c=a12_0x19a7e8;for(const _0x523571 of _0x33b00c['config'][_0x4fe41c(0x203)]){const _0x35cb8d=(0x0,session_1['getTasksDir'])(_0x33b00c,_0x523571[_0x4fe41c(0x1b5)]);if(!fs_1['default'][_0x4fe41c(0x194)](_0x35cb8d))continue;const _0x300ab8=utils_ok_1[_0x4fe41c(0x1a6)][_0x4fe41c(0x1b3)](_0x35cb8d),_0x4f98af=_0x300ab8['filter'](_0x3d19d5=>path_1[_0x4fe41c(0x181)][_0x4fe41c(0x177)](_0x3d19d5)==='task.json');if(_0x4f98af['length']===0x0)continue;const _0x3546f7=_0x4f98af['map'](_0x3676e1=>{try{const _0xd66b8f=utils_ok_1['fileUtil']['getJSON'](_0x3676e1);return _0xd66b8f?{'file':_0x3676e1,'task':_0xd66b8f}:null;}catch{return console['error']('任务文件解析失败,跳过:\x20'+_0x3676e1),null;}})[_0x4fe41c(0x15e)](_0x3f1613=>_0x3f1613!==null)[_0x4fe41c(0x170)]((_0x36aa80,_0xf0671e)=>_0x36aa80[_0x4fe41c(0x168)][_0x4fe41c(0x1cc)]-_0xf0671e[_0x4fe41c(0x168)][_0x4fe41c(0x1cc)]);if(_0x3546f7[_0x4fe41c(0x17d)]>0x0){const {file:_0x537c5c,task:_0x2746b9}=_0x3546f7[0x0];return common_1['utils']['addSuffixToFile'](_0x537c5c,_0x4fe41c(0x1d4)),_0x2746b9;}}return undefined;}async function finishTask(_0x1206e6,_0x4f786d){const _0x59c3cd=a12_0x19a7e8,_0x44bdf4=_0x4f786d+'/task-doing.json';let _0x179143;try{_0x179143=utils_ok_1['fileUtil']['getJSON'](_0x44bdf4);}catch(_0x240fb1){console[_0x59c3cd(0x207)](_0x59c3cd(0x1f0)+_0x44bdf4,_0x240fb1);return;}const _0x30a122=_0x4f786d+_0x59c3cd(0x1a2),_0x21c1d5=fs_1[_0x59c3cd(0x181)][_0x59c3cd(0x194)](_0x30a122)?utils_ok_1[_0x59c3cd(0x1a6)][_0x59c3cd(0x160)](_0x30a122):_0x59c3cd(0x1bd);await(0x0,messaging_1[_0x59c3cd(0x18e)])(_0x1206e6,{'conversationId':_0x179143['conversationId'],'sessionWebhook':_0x179143['sessionWebhook'],'atUserId':_0x179143[_0x59c3cd(0x19b)],'content':_0x21c1d5,'msgType':_0x59c3cd(0x1aa)});const _0x2bb7eb=_0x44bdf4[_0x59c3cd(0x162)]('-doing.json',_0x59c3cd(0x153));utils_ok_1[_0x59c3cd(0x1a6)][_0x59c3cd(0x1ce)](_0x44bdf4,_0x2bb7eb);}async function failTask(_0x5683a6,_0x1c0b4d,_0x4c565e){const _0x2bb2e4=a12_0x19a7e8,_0x1bf270=_0x1c0b4d+_0x2bb2e4(0x192);let _0x11fa22;try{_0x11fa22=utils_ok_1[_0x2bb2e4(0x1a6)][_0x2bb2e4(0x1ee)](_0x1bf270);}catch(_0x897a10){console[_0x2bb2e4(0x207)](_0x2bb2e4(0x1f0)+_0x1bf270,_0x897a10);return;}await(0x0,messaging_1['sendDingMessage'])(_0x5683a6,{'conversationId':_0x11fa22['conversationId'],'sessionWebhook':_0x11fa22[_0x2bb2e4(0x1fc)],'atUserId':_0x11fa22[_0x2bb2e4(0x19b)],'content':_0x2bb2e4(0x163)+taskDisplayName(_0x11fa22)+_0x2bb2e4(0x1ec)+_0x4c565e,'msgType':'markdown'});const _0x4f18b1=_0x1bf270[_0x2bb2e4(0x162)](_0x2bb2e4(0x1b7),_0x2bb2e4(0x1f7));utils_ok_1[_0x2bb2e4(0x1a6)]['rename'](_0x1bf270,_0x4f18b1);}async function resetTaskToTodo(_0x2b8bd5,_0x1bd2dc,_0x5400ea){const _0xb5bb19=a12_0x19a7e8,_0xf94e75=_0x1bd2dc+_0xb5bb19(0x192),_0x506539=_0x1bd2dc+_0xb5bb19(0x169);if(!fs_1['default'][_0xb5bb19(0x194)](_0xf94e75))return![];try{const _0x38f6f4=utils_ok_1[_0xb5bb19(0x1a6)][_0xb5bb19(0x1ee)](_0xf94e75),_0x5ee5ae=(_0x38f6f4[_0xb5bb19(0x1dd)]||0x0)+0x1;if(_0x5ee5ae>=MAX_RETRY_COUNT)return console[_0xb5bb19(0x1da)]('['+(0x0,session_1[_0xb5bb19(0x1de)])()+']\x20任务重试次数已达上限('+_0x5ee5ae+'/'+MAX_RETRY_COUNT+_0xb5bb19(0x1f2)+(_0x38f6f4[_0xb5bb19(0x1fb)]||_0x38f6f4[_0xb5bb19(0x1c6)])),_0x38f6f4[_0xb5bb19(0x1dd)]=_0x5ee5ae,fs_1['default'][_0xb5bb19(0x184)](_0xf94e75,JSON[_0xb5bb19(0x1e1)](_0x38f6f4,null,0x2),_0xb5bb19(0x1e5)),await failTask(_0x2b8bd5,_0x1bd2dc,_0x5400ea+_0xb5bb19(0x16b)+_0x5ee5ae+'次)'),![];_0x38f6f4['retryCount']=_0x5ee5ae,fs_1[_0xb5bb19(0x181)][_0xb5bb19(0x184)](_0xf94e75,JSON[_0xb5bb19(0x1e1)](_0x38f6f4,null,0x2),_0xb5bb19(0x1e5)),console[_0xb5bb19(0x1da)]('['+(0x0,session_1[_0xb5bb19(0x1de)])()+']\x20任务重置为待办\x20(重试'+_0x5ee5ae+'/'+MAX_RETRY_COUNT+'):\x20'+(_0x38f6f4[_0xb5bb19(0x1fb)]||_0x38f6f4['prompt']));}catch(_0xdc868a){console[_0xb5bb19(0x207)]('['+(0x0,session_1[_0xb5bb19(0x1de)])()+_0xb5bb19(0x1bf),_0xdc868a);}return fs_1[_0xb5bb19(0x181)][_0xb5bb19(0x194)](_0xf94e75)&&utils_ok_1[_0xb5bb19(0x1a6)][_0xb5bb19(0x1ce)](_0xf94e75,_0x506539),!![];}function cancelTask(_0x267bbd,_0x55788b,_0x15caaf){const _0x765826=a12_0x19a7e8,_0x40621c=[],_0x2bb12b=_0x55788b[_0x765826(0x1f4)](),_0x482212=_0x15caaf?_0x267bbd[_0x765826(0x1f3)][_0x765826(0x203)]['filter'](_0x4e4dad=>_0x4e4dad[_0x765826(0x1b5)]===_0x15caaf):_0x267bbd[_0x765826(0x1f3)][_0x765826(0x203)];for(const _0x6ab51a of _0x482212){const _0x52f1e9=(0x0,session_1['getTasksDir'])(_0x267bbd,_0x6ab51a['conversationId']);if(!fs_1[_0x765826(0x181)][_0x765826(0x194)](_0x52f1e9))continue;const _0x4a3030=utils_ok_1[_0x765826(0x1a6)]['dirWalker'](_0x52f1e9),_0x30fcd4=_0x4a3030[_0x765826(0x15e)](_0x43d40d=>path_1['default']['basename'](_0x43d40d)===_0x765826(0x1f5));for(const _0x428049 of _0x30fcd4){try{const _0x33ef82=utils_ok_1['fileUtil'][_0x765826(0x1ee)](_0x428049);if(!_0x33ef82)continue;if(String(_0x33ef82[_0x765826(0x1cc)])===_0x2bb12b){_0x40621c['push']({'file':_0x428049,'task':_0x33ef82});continue;}if(_0x33ef82[_0x765826(0x1fb)]&&_0x33ef82['title'][_0x765826(0x1c2)](_0x2bb12b)){_0x40621c[_0x765826(0x165)]({'file':_0x428049,'task':_0x33ef82});continue;}}catch{}}}if(_0x40621c['length']===0x0)return _0x765826(0x1c3)+_0x2bb12b;let _0x49a2b3=0x0;for(const {file:_0x414cce,task:_0xf6ffeb}of _0x40621c){try{fs_1['default'][_0x765826(0x1ca)](_0x414cce),_0x49a2b3++,console['log']('['+(0x0,session_1[_0x765826(0x1de)])()+_0x765826(0x157)+_0xf6ffeb[_0x765826(0x1cc)]+'\x20'+(_0xf6ffeb[_0x765826(0x1fb)]||_0xf6ffeb[_0x765826(0x1c6)]));}catch(_0x47e6e2){console[_0x765826(0x207)]('['+(0x0,session_1[_0x765826(0x1de)])()+']\x20取消任务失败:\x20'+_0x414cce,_0x47e6e2);}}const _0x3f9dbb=_0x40621c[_0x765826(0x1a0)](0x0,0x5)[_0x765826(0x1df)](_0x331e05=>'#'+_0x331e05['task'][_0x765826(0x1cc)]+'\x20'+taskDisplayName(_0x331e05[_0x765826(0x168)]))['join']('\x0a'),_0x30897=_0x49a2b3>0x5?_0x765826(0x185)+_0x49a2b3+'\x20个任务':'';return'已取消\x20'+_0x49a2b3+'\x20个待办任务:\x0a'+_0x3f9dbb+_0x30897;}function parseTaskCancelCommand(_0xeccfce){const _0xa9a11e=a12_0x19a7e8,_0x555d8f=_0xeccfce[_0xa9a11e(0x1f4)](),_0x453149=_0x555d8f[_0xa9a11e(0x1e9)](/^\/task\s+cancel\s+(.+)$/i);return _0x453149?_0x453149[0x1][_0xa9a11e(0x1f4)]():null;}function updateCmdArgsSettings(_0x3549a0,_0xdef00a){const _0x40ed4b=a12_0x19a7e8,_0x3f1463=_0x3549a0['indexOf'](_0x40ed4b(0x1a1));_0x3f1463!==-0x1&&_0x3549a0[_0x40ed4b(0x171)](_0x3f1463,0x2),_0xdef00a&&_0x3549a0[_0x40ed4b(0x165)](_0x40ed4b(0x1a1),_0xdef00a);}async function handleTask(_0x2b6bd8){const _0x32e757=a12_0x19a7e8,_0x130ede=await getOneTodoTask(_0x2b6bd8);if(!_0x130ede){(0x0,session_1[_0x32e757(0x16c)])(_0x2b6bd8,_0x32e757(0x18a));return;}const _0x791860=(0x0,session_1[_0x32e757(0x164)])(_0x2b6bd8,_0x130ede[_0x32e757(0x1b5)]),_0x2724da=(0x0,session_1[_0x32e757(0x18f)])(_0x2b6bd8,_0x130ede['conversationId']),_0x1c4897=(0x0,session_1[_0x32e757(0x1f1)])(_0x2b6bd8,_0x130ede['conversationId'])+'/'+_0x130ede['startTimeStr'];if(!fs_1[_0x32e757(0x181)][_0x32e757(0x194)](_0x1c4897)){console['error']('任务目录不存在:\x20'+_0x1c4897);return;}_0x130ede[_0x32e757(0x17f)]!=='cron'&&await(0x0,messaging_1[_0x32e757(0x18e)])(_0x2b6bd8,{'conversationId':_0x130ede[_0x32e757(0x1b5)],'sessionWebhook':_0x130ede['sessionWebhook'],'atUserId':_0x130ede[_0x32e757(0x19b)],'content':_0x32e757(0x182)+taskDisplayName(_0x130ede)});const _0x4d9298=_0x1c4897+_0x32e757(0x1a2),_0x651dbd=_0x1c4897+_0x32e757(0x1b0);console[_0x32e757(0x1da)]('['+(0x0,session_1['timestamp'])()+_0x32e757(0x1ac)+(_0x130ede[_0x32e757(0x1fb)]||_0x130ede['prompt']));const _0x59e8c5=_0x130ede[_0x32e757(0x155)]&&_0x130ede[_0x32e757(0x19b)]?_0x130ede[_0x32e757(0x155)]+'('+_0x130ede['senderStaffId']+_0x32e757(0x173):_0x32e757(0x1e2),_0x8bea9c=_0x2b6bd8[_0x32e757(0x1f3)][_0x32e757(0x1c9)],_0x59cb67=(0x0,api_key_manager_1[_0x32e757(0x1d0)])(_0x2724da);let _0x571b66=![],_0x21880b=null;if(_0x59cb67)console[_0x32e757(0x1da)]('['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x151));else{if(_0x8bea9c){_0x21880b=(0x0,api_key_manager_1[_0x32e757(0x1bb)])(_0x2b6bd8);if(!_0x21880b){console[_0x32e757(0x1da)]('['+(0x0,session_1['timestamp'])()+_0x32e757(0x17a)),await resetTaskToTodo(_0x2b6bd8,_0x1c4897,'无可用配额');return;}_0x571b66=!![],console['log']('['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x16a));}}const _0x21a7eb=_0x791860?.[_0x32e757(0x1cb)]?.[_0x32e757(0x1e6)],_0x3140e5=_0x791860?.[_0x32e757(0x1b6)],_0x4c948c=_0x130ede[_0x32e757(0x180)]||_0x130ede[_0x32e757(0x1c6)],_0x557ca7=((_0x21a7eb?'/'+_0x21a7eb:'')+_0x32e757(0x18c)+_0x59e8c5+_0x32e757(0x154)+_0x4c948c+';\x20最后将回复内容保存至:\x20'+_0x4d9298)[_0x32e757(0x1f4)](),_0xd81539=[_0x32e757(0x190),_0x32e757(0x20b),_0x32e757(0x15a),_0x557ca7];if(_0x59cb67)_0xd81539['push'](_0x32e757(0x1a1),_0x59cb67);else{if(_0x571b66&&_0x21880b){const _0x3396b4=(0x0,api_key_manager_1[_0x32e757(0x15b)])(_0x2724da,_0x21880b);_0xd81539[_0x32e757(0x165)](_0x32e757(0x1a1),_0x3396b4);}else{if(!_0x8bea9c){const _0x27cb92=path_1[_0x32e757(0x181)][_0x32e757(0x1a5)](_0x2724da,'.claude',_0x32e757(0x174));fs_1[_0x32e757(0x181)][_0x32e757(0x194)](_0x27cb92)&&(_0xd81539[_0x32e757(0x165)](_0x32e757(0x1a1),_0x27cb92),console[_0x32e757(0x1da)]('['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x18b)+_0x27cb92));}}}_0x3140e5&&_0xd81539[_0x32e757(0x165)](_0x32e757(0x201),_0x3140e5);(0x0,session_1[_0x32e757(0x16c)])(_0x2b6bd8,_0x32e757(0x1b4)+_0xd81539['join']('\x20'));const _0x337d3d=0xa*0x3c*0x3e8,_0x550566=0x14,_0x4a3ac0=0x2710,_0x22a372=0x2710,_0xa813f4=_0x32e757(0x1d6),_0xdd728=_0x5eaf46=>{const _0x3b3ad5=_0x32e757,_0x14f410=Date[_0x3b3ad5(0x1b2)]();return new Promise(_0x424cb6=>{const _0x2c1051=_0x3b3ad5,_0x1bec90=[];let _0x353f56=![],_0x5a27fb=![];const _0x2dadaa=(0x0,child_process_1[_0x2c1051(0x172)])(_0xa813f4,_0x5eaf46,{'cwd':_0x2724da,'stdio':[_0x2c1051(0x18d),_0x2c1051(0x17e),_0x2c1051(0x17e)]}),_0xe563ab=setTimeout(()=>{const _0x28eb1d=_0x2c1051;!_0x353f56&&(_0x5a27fb=!![],console[_0x28eb1d(0x207)](_0x28eb1d(0x1a9)),_0x2dadaa['kill'](_0x28eb1d(0x1c4)),setTimeout(()=>{const _0x8966ff=_0x28eb1d;if(!_0x353f56)_0x2dadaa[_0x8966ff(0x199)]('SIGKILL');},0x1388));},_0x337d3d);_0x2dadaa[_0x2c1051(0x176)]['on'](_0x2c1051(0x15f),_0xa889bc=>{const _0x22a98b=_0x2c1051,_0x1bd92c=_0xa889bc[_0x22a98b(0x1ad)]();process[_0x22a98b(0x176)][_0x22a98b(0x1fd)](_0x1bd92c),_0x1bec90[_0x22a98b(0x165)](_0x1bd92c);}),_0x2dadaa['stderr']['on'](_0x2c1051(0x15f),_0x5c5f90=>{const _0x7f8959=_0x2c1051,_0x1f80d7=_0x5c5f90[_0x7f8959(0x1ad)]();process[_0x7f8959(0x161)]['write'](_0x1f80d7),_0x1bec90[_0x7f8959(0x165)](_0x1f80d7);}),_0x2dadaa['on'](_0x2c1051(0x1e7),_0x135a32=>{const _0x2dfbf1=_0x2c1051;_0x353f56=!![],clearTimeout(_0xe563ab),_0x424cb6({'exitCode':_0x135a32??0x1,'output':_0x1bec90[_0x2dfbf1(0x1a5)](''),'elapsed':Date[_0x2dfbf1(0x1b2)]()-_0x14f410,'timedOut':_0x5a27fb});}),_0x2dadaa['on'](_0x2c1051(0x207),_0x3db169=>{const _0x206c00=_0x2c1051;console[_0x206c00(0x207)](_0x206c00(0x167),_0x3db169),_0x1bec90['push']('进程执行错误:\x20'+_0x3db169['message']);});});};let _0x539091,_0x3daf43,_0x1bb703=![],_0x3e6c04=0x0;while(!![]){const _0x39dd4d=await _0xdd728(_0xd81539);_0x539091=_0x39dd4d[_0x32e757(0x1ff)],_0x3daf43=_0x39dd4d[_0x32e757(0x19c)],_0x1bb703=_0x39dd4d[_0x32e757(0x1f8)];if(_0x539091!==0x0){if(_0x1bb703){console['log']('['+(0x0,session_1['timestamp'])()+_0x32e757(0x1ea));const _0x1a21d6=['['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x1af)+_0xa813f4+'\x20'+_0xd81539[_0x32e757(0x1a5)]('\x20'),'['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x156)+_0x337d3d/0x3e8+'s)',_0x3daf43][_0x32e757(0x1a5)]('\x0a');fs_1[_0x32e757(0x181)][_0x32e757(0x184)](_0x651dbd,_0x1a21d6),await resetTaskToTodo(_0x2b6bd8,_0x1c4897,_0x32e757(0x1ae));return;}if((0x0,api_key_manager_1['isQuotaExhaustedError'])(_0x3daf43)&&_0x8bea9c){if(!_0x571b66){_0x21880b=(0x0,api_key_manager_1['pickValidApiKey'])(_0x2b6bd8);if(_0x21880b){_0x571b66=!![],_0x3e6c04=0x0;const _0x2cdc59=(0x0,api_key_manager_1[_0x32e757(0x15b)])(_0x2724da,_0x21880b);updateCmdArgsSettings(_0xd81539,_0x2cdc59),console[_0x32e757(0x1da)]('['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x16a));continue;}}else{if(_0x21880b){const _0x2611c8=(0x0,api_key_manager_1[_0x32e757(0x16e)])(_0x2b6bd8,_0x21880b[_0x32e757(0x198)]);if(_0x2611c8){_0x21880b=_0x2611c8,_0x3e6c04=0x0;const _0x9c42f=(0x0,api_key_manager_1[_0x32e757(0x15b)])(_0x2724da,_0x21880b);updateCmdArgsSettings(_0xd81539,_0x9c42f),console[_0x32e757(0x1da)]('['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x1d2)+(0x0,api_key_manager_1[_0x32e757(0x1e8)])(_0x2611c8));continue;}}}console['log']('['+(0x0,session_1[_0x32e757(0x1de)])()+']\x20无可用配额,任务重置为待办');const _0x5f4b9f=['['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x1af)+_0xa813f4+'\x20'+_0xd81539[_0x32e757(0x1a5)]('\x20'),'['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x195)+_0x539091,_0x3daf43][_0x32e757(0x1a5)]('\x0a');fs_1[_0x32e757(0x181)][_0x32e757(0x184)](_0x651dbd,_0x5f4b9f),await resetTaskToTodo(_0x2b6bd8,_0x1c4897,_0x32e757(0x1e0));return;}if((0x0,api_key_manager_1[_0x32e757(0x1be)])(_0x3daf43)){console['log']('['+(0x0,session_1[_0x32e757(0x1de)])()+']\x20检测到认证错误(401),标记任务失败');const _0x4cdb26=['['+(0x0,session_1[_0x32e757(0x1de)])()+']\x20执行命令:\x20'+_0xa813f4+'\x20'+_0xd81539[_0x32e757(0x1a5)]('\x20'),'['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x195)+_0x539091,_0x3daf43][_0x32e757(0x1a5)]('\x0a');fs_1['default'][_0x32e757(0x184)](_0x651dbd,_0x4cdb26),await failTask(_0x2b6bd8,_0x1c4897,_0x32e757(0x1ef));return;}if((0x0,claude_process_1[_0x32e757(0x20c)])(_0x3daf43)){if(_0x39dd4d['elapsed']<_0x22a372&&_0x571b66&&_0x21880b&&_0x8bea9c){_0x3e6c04++;if(_0x3e6c04>=_0x550566){const _0x13bec1=(0x0,api_key_manager_1[_0x32e757(0x16e)])(_0x2b6bd8,_0x21880b['apiKey']);if(_0x13bec1){_0x21880b=_0x13bec1,_0x3e6c04=0x0;const _0x8ecc52=(0x0,api_key_manager_1[_0x32e757(0x15b)])(_0x2724da,_0x21880b);updateCmdArgsSettings(_0xd81539,_0x8ecc52),console['log']('['+(0x0,session_1['timestamp'])()+']\x20TPM\x20限流连续快速失败\x20'+_0x550566+_0x32e757(0x1a4)+(0x0,api_key_manager_1['settingLabel'])(_0x13bec1)),await utils_ok_1[_0x32e757(0x159)]['sleep'](_0x4a3ac0);continue;}}}else{if(_0x39dd4d[_0x32e757(0x196)]<_0x22a372){_0x3e6c04++;if(_0x3e6c04>=_0x550566){console[_0x32e757(0x1da)]('['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x1cd)+_0x550566+_0x32e757(0x1d3));const _0x4e5624=['['+(0x0,session_1[_0x32e757(0x1de)])()+']\x20执行命令:\x20'+_0xa813f4+'\x20'+_0xd81539[_0x32e757(0x1a5)]('\x20'),'['+(0x0,session_1['timestamp'])()+_0x32e757(0x195)+_0x539091,_0x3daf43]['join']('\x0a');fs_1[_0x32e757(0x181)][_0x32e757(0x184)](_0x651dbd,_0x4e5624),await resetTaskToTodo(_0x2b6bd8,_0x1c4897,_0x32e757(0x204));return;}console[_0x32e757(0x1da)]('['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x17c)+_0x4a3ac0/0x3e8+_0x32e757(0x1f9)+_0x3e6c04+'/'+_0x550566+')');}else _0x3e6c04=0x0,console[_0x32e757(0x1da)]('['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x1dc)+_0x4a3ac0/0x3e8+_0x32e757(0x1d8));}await utils_ok_1[_0x32e757(0x159)][_0x32e757(0x1c8)](_0x4a3ac0);continue;}}break;}const _0x3f3257=['['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x1af)+_0xa813f4+'\x20'+_0xd81539[_0x32e757(0x1a5)]('\x20'),'['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x195)+_0x539091,_0x3daf43][_0x32e757(0x1a5)]('\x0a');fs_1[_0x32e757(0x181)][_0x32e757(0x184)](_0x651dbd,_0x3f3257);if(_0x539091!==0x0){console[_0x32e757(0x207)](_0x32e757(0x1e3)+_0x539091),await failTask(_0x2b6bd8,_0x1c4897,_0x32e757(0x15d)+_0x539091+')');return;}if(fs_1[_0x32e757(0x181)]['existsSync'](_0x4d9298))console[_0x32e757(0x1da)]('['+(0x0,session_1[_0x32e757(0x1de)])()+_0x32e757(0x1fe));else{console[_0x32e757(0x207)]('任务未按预期处理'),await failTask(_0x2b6bd8,_0x1c4897,_0x32e757(0x1e4));return;}await finishTask(_0x2b6bd8,_0x1c4897);}async function runTaskHandlerLoop(_0x59002e){const _0x4ae193=a12_0x19a7e8;while(!![]){await handleTask(_0x59002e)['catch'](_0x4903c2=>console[_0x4ae193(0x207)](_0x4903c2)),await utils_ok_1[_0x4ae193(0x159)][_0x4ae193(0x1c8)](0x2710);}}async function saveTask(_0x510f7c,_0x255924){const _0x4ddb49=a12_0x19a7e8,{conversationId:_0x3151c5,prompt:_0x22b543,senderStaffId:_0x15a18c,senderNickName:_0x5b1401,sessionWebhook:_0x17fb13,type:type='normal'}=_0x255924,_0x111c9a=Date[_0x4ddb49(0x1b2)](),_0xbd029=utils_ok_1['dateUtil']['mm'](_0x111c9a)[_0x4ddb49(0x1a8)](_0x4ddb49(0x1bc)),_0x3580f9=(0x0,session_1[_0x4ddb49(0x1f1)])(_0x510f7c,_0x3151c5)+'/'+_0xbd029,_0x4fc590=_0x3580f9+'/task.json',_0x45a7e2={'conversationId':_0x3151c5,'startTime':_0x111c9a,'startTimeStr':_0xbd029,'prompt':_0x22b543,'senderStaffId':_0x15a18c,'senderNickName':_0x5b1401||'','sessionWebhook':_0x17fb13,'type':type};await utils_ok_1['fileUtil']['saveFileStr'](JSON[_0x4ddb49(0x1e1)](_0x45a7e2,null,0x2),_0x4fc590),(0x0,session_1[_0x4ddb49(0x16c)])(_0x510f7c,_0x4ddb49(0x1cf)+_0x4fc590),preprocessTask(_0x510f7c,_0x3151c5,_0x22b543)[_0x4ddb49(0x166)](_0x329e49=>{const _0x366096=_0x4ddb49;if(!_0x329e49)return;try{const _0x5b86ab=_0x3580f9+_0x366096(0x192),_0xbfb15b=fs_1[_0x366096(0x181)]['existsSync'](_0x5b86ab)?_0x5b86ab:fs_1[_0x366096(0x181)]['existsSync'](_0x4fc590)?_0x4fc590:null;if(!_0xbfb15b){console[_0x366096(0x1da)]('['+(0x0,session_1[_0x366096(0x1de)])()+']\x20预处理完成但任务文件已不存在:\x20'+_0x3580f9);return;}const _0x26e4ab=utils_ok_1[_0x366096(0x1a6)][_0x366096(0x1ee)](_0xbfb15b);_0x26e4ab[_0x366096(0x1fb)]=_0x329e49['title'],_0x26e4ab[_0x366096(0x180)]=_0x329e49[_0x366096(0x180)],fs_1[_0x366096(0x181)]['writeFileSync'](_0xbfb15b,JSON[_0x366096(0x1e1)](_0x26e4ab,null,0x2),_0x366096(0x1e5)),console[_0x366096(0x1da)]('['+(0x0,session_1[_0x366096(0x1de)])()+_0x366096(0x20d)+_0x329e49['title']);}catch(_0x34cf98){console[_0x366096(0x207)]('['+(0x0,session_1[_0x366096(0x1de)])()+_0x366096(0x19e),_0x34cf98);}})[_0x4ddb49(0x150)](_0x4de53e=>{const _0x2916d2=_0x4ddb49;console[_0x2916d2(0x207)]('['+(0x0,session_1[_0x2916d2(0x1de)])()+_0x2916d2(0x1c7),_0x4de53e);});}
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.formatTaskInfo=formatTaskInfo,exports.countTodoTask=countTodoTask,exports.getOneTodoTask=getOneTodoTask,exports.finishTask=finishTask,exports.cancelTask=cancelTask,exports.parseTaskCancelCommand=parseTaskCancelCommand,exports.handleTask=handleTask,exports.runTaskHandlerLoop=runTaskHandlerLoop,exports.saveTask=saveTask;const utils_ok_1=require("utils-ok"),fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),child_process_1=require("child_process"),common_1=require("../common"),messaging_1=require("./messaging"),claude_process_1=require("./claude-process"),session_1=require("./session"),api_key_manager_1=require("./api-key-manager"),MAX_RETRY_COUNT=3;function formatTaskInfo(t){const e=[],i=[],s=[],r=[];for(const l of t.config.conversations){const o=(0,session_1.getTasksDir)(t,l.conversationId);if(!fs_1.default.existsSync(o))continue;const u=utils_ok_1.fileUtil.dirWalker(o);for(const p of u){const c=path_1.default.basename(p);try{const g=utils_ok_1.fileUtil.getJSON(p);if(!g)continue;c==="task.json"?e.push(g):c==="task-doing.json"?i.push(g):c==="task-done.json"?s.push(g):c==="task-failed.json"&&r.push(g)}catch{}}}e.sort((l,o)=>l.startTime-o.startTime),i.sort((l,o)=>l.startTime-o.startTime),s.sort((l,o)=>o.startTime-l.startTime),r.sort((l,o)=>o.startTime-l.startTime);const a=[];if(i.length>0){const l=i.map(o=>`#${o.startTime} ${o.senderNickName||o.senderStaffId}: ${taskDisplayName(o)}`);a.push(`**\u23F3 \u5904\u7406\u4E2D (${i.length})**
2
+ ${l.join(`
3
+ `)}`)}else a.push(`**\u23F3 \u5904\u7406\u4E2D**
4
+ \u65E0`);if(e.length>0){const l=e.map(o=>`#${o.startTime} ${o.senderNickName||o.senderStaffId}: ${taskDisplayName(o)}`);a.push(`**\u{1F4CB} \u5F85\u529E\u961F\u5217 (${e.length})**
5
+ ${l.join(`
6
+ `)}`)}else a.push(`**\u{1F4CB} \u5F85\u529E\u961F\u5217**
7
+ \u65E0`);const n=s.slice(0,5);if(n.length>0){const l=n.map(o=>`#${o.startTime} ${o.senderNickName||o.senderStaffId}: ${taskDisplayName(o)}`);a.push(`**\u2705 \u6700\u8FD1\u5B8C\u6210 (top ${n.length}/${s.length})**
8
+ ${l.join(`
9
+ `)}`)}else a.push(`**\u2705 \u6700\u8FD1\u5B8C\u6210**
10
+ \u65E0`);if(r.length>0){const l=r.map(o=>`#${o.startTime} ${o.senderNickName||o.senderStaffId}: ${taskDisplayName(o)}${o.retryCount?` (\u91CD\u8BD5${o.retryCount}\u6B21)`:""}`);a.push(`**\u274C \u5931\u8D25 (${r.length})**
11
+ ${l.join(`
12
+ `)}`)}return a.join(`
13
+
14
+ `)}function truncatePrompt(t,e=80){const i=t.replace(/\n/g," ").trim();return i.length>e?i.slice(0,e)+"...":i}function taskDisplayName(t){return t.title?t.title:truncatePrompt(t.prompt)}async function preprocessTask(t,e,i){const s=(0,session_1.getConversationDir)(t,e),r="claude",a=["--permission-mode","bypassPermissions","--print"],n=(0,claude_process_1.resolveClaudeSettingsPath)(t,s);n&&a.push("--settings",n);const l=["\u8BF7\u5BF9\u4EE5\u4E0B\u4EFB\u52A1\u9700\u6C42\u8FDB\u884C\u9884\u5904\u7406\uFF0C\u751F\u6210\u7B80\u77ED\u6807\u9898\u548C\u4F18\u5316\u540E\u7684\u9700\u6C42\u63CF\u8FF0\u3002","\u76F4\u63A5\u8FD4\u56DEJSON\uFF0C\u4E0D\u8981markdown\u4EE3\u7801\u5757\u6216\u5176\u4ED6\u5185\u5BB9\u3002",'\u683C\u5F0F: {"title":"\u7B80\u77ED\u6807\u9898(15\u5B57\u4EE5\u5185)","promptSimply":"\u4F18\u5316\u540E\u7684\u9700\u6C42\u63CF\u8FF0\uFF0C\u4FDD\u7559\u539F\u59CB\u9700\u6C42\u7684\u6240\u6709\u5173\u952E\u4FE1\u606F\uFF0C\u4F7F\u63CF\u8FF0\u66F4\u6E05\u6670\u3001\u7ED3\u6784\u5316"}',"",`\u539F\u59CB\u9700\u6C42: ${i}`].join(`
15
+ `);a.push(l);const o=3e4;return new Promise(u=>{let p="";const c=(0,child_process_1.spawn)(r,a,{cwd:s,stdio:["ignore","pipe","pipe"]}),g=setTimeout(()=>{c.kill("SIGTERM"),setTimeout(()=>{try{c.kill("SIGKILL")}catch{}},3e3)},o);c.stdout.on("data",f=>{p+=f.toString()}),c.stderr.on("data",()=>{}),c.on("close",f=>{if(clearTimeout(g),f!==0||!p.trim()){console.log(`[${(0,session_1.timestamp)()}] \u4EFB\u52A1\u9884\u5904\u7406\u5931\u8D25(\u9000\u51FA\u7801:${f})\uFF0C\u4F7F\u7528\u539F\u59CBprompt`),u(null);return}try{let d=p.trim();const j=d.match(/\{[\s\S]*\}/);j&&(d=j[0]);const m=JSON.parse(d);m.title&&m.promptSimply?(console.log(`[${(0,session_1.timestamp)()}] \u4EFB\u52A1\u9884\u5904\u7406\u5B8C\u6210: title="${m.title}"`),u({title:String(m.title),promptSimply:String(m.promptSimply)})):(console.log(`[${(0,session_1.timestamp)()}] \u4EFB\u52A1\u9884\u5904\u7406\u8FD4\u56DE\u683C\u5F0F\u4E0D\u6B63\u786E\uFF0C\u4F7F\u7528\u539F\u59CBprompt`),u(null))}catch(d){console.log(`[${(0,session_1.timestamp)()}] \u4EFB\u52A1\u9884\u5904\u7406JSON\u89E3\u6790\u5931\u8D25\uFF0C\u4F7F\u7528\u539F\u59CBprompt: ${d}`),u(null)}}),c.on("error",f=>{clearTimeout(g),console.error(`[${(0,session_1.timestamp)()}] \u4EFB\u52A1\u9884\u5904\u7406\u8FDB\u7A0B\u9519\u8BEF:`,f),u(null)})})}function countTodoTask(t){let e=0;for(const i of t.config.conversations){const s=(0,session_1.getTasksDir)(t,i.conversationId);if(fs_1.default.existsSync(s)){const a=utils_ok_1.fileUtil.dirWalker(s).filter(n=>path_1.default.basename(n)==="task.json");e+=a.length}}return e}async function getOneTodoTask(t){for(const e of t.config.conversations){const i=(0,session_1.getTasksDir)(t,e.conversationId);if(!fs_1.default.existsSync(i))continue;const r=utils_ok_1.fileUtil.dirWalker(i).filter(n=>path_1.default.basename(n)==="task.json");if(r.length===0)continue;const a=r.map(n=>{try{const l=utils_ok_1.fileUtil.getJSON(n);return l?{file:n,task:l}:null}catch{return console.error(`\u4EFB\u52A1\u6587\u4EF6\u89E3\u6790\u5931\u8D25\uFF0C\u8DF3\u8FC7: ${n}`),null}}).filter(n=>n!==null).sort((n,l)=>n.task.startTime-l.task.startTime);if(a.length>0){const{file:n,task:l}=a[0];return common_1.utils.addSuffixToFile(n,"-doing"),l}}}async function finishTask(t,e){const i=`${e}/task-doing.json`;let s;try{s=utils_ok_1.fileUtil.getJSON(i)}catch(l){console.error(`\u8BFB\u53D6\u4EFB\u52A1\u6587\u4EF6\u5931\u8D25: ${i}`,l);return}const r=`${e}/result.md`,a=fs_1.default.existsSync(r)?utils_ok_1.fileUtil.getFileStr(r):"\u62B1\u6B49,\u4EFB\u52A1\u5904\u7406\u5F02\u5E38...";await(0,messaging_1.sendDingMessage)(t,{conversationId:s.conversationId,sessionWebhook:s.sessionWebhook,atUserId:s.senderStaffId,content:a,msgType:"markdown"});const n=i.replace("-doing.json","-done.json");utils_ok_1.fileUtil.rename(i,n)}async function failTask(t,e,i){const s=`${e}/task-doing.json`;let r;try{r=utils_ok_1.fileUtil.getJSON(s)}catch(n){console.error(`\u8BFB\u53D6\u4EFB\u52A1\u6587\u4EF6\u5931\u8D25: ${s}`,n);return}await(0,messaging_1.sendDingMessage)(t,{conversationId:r.conversationId,sessionWebhook:r.sessionWebhook,atUserId:r.senderStaffId,content:`\u274C \u4EFB\u52A1\u5931\u8D25: ${taskDisplayName(r)}
16
+ \u539F\u56E0: ${i}`,msgType:"markdown"});const a=s.replace("-doing.json","-failed.json");utils_ok_1.fileUtil.rename(s,a)}async function resetTaskToTodo(t,e,i){const s=`${e}/task-doing.json`,r=`${e}/task.json`;if(!fs_1.default.existsSync(s))return!1;try{const a=utils_ok_1.fileUtil.getJSON(s),n=(a.retryCount||0)+1;if(n>=MAX_RETRY_COUNT)return console.log(`[${(0,session_1.timestamp)()}] \u4EFB\u52A1\u91CD\u8BD5\u6B21\u6570\u5DF2\u8FBE\u4E0A\u9650(${n}/${MAX_RETRY_COUNT})\uFF0C\u6807\u8BB0\u4E3A\u5931\u8D25: ${a.title||a.prompt}`),a.retryCount=n,fs_1.default.writeFileSync(s,JSON.stringify(a,null,2),"utf-8"),await failTask(t,e,`${i} (\u5DF2\u91CD\u8BD5${n}\u6B21)`),!1;a.retryCount=n,fs_1.default.writeFileSync(s,JSON.stringify(a,null,2),"utf-8"),console.log(`[${(0,session_1.timestamp)()}] \u4EFB\u52A1\u91CD\u7F6E\u4E3A\u5F85\u529E (\u91CD\u8BD5${n}/${MAX_RETRY_COUNT}): ${a.title||a.prompt}`)}catch(a){console.error(`[${(0,session_1.timestamp)()}] \u66F4\u65B0\u4EFB\u52A1\u91CD\u8BD5\u8BA1\u6570\u5931\u8D25:`,a)}return fs_1.default.existsSync(s)&&utils_ok_1.fileUtil.rename(s,r),!0}function cancelTask(t,e,i){const s=[],r=e.trim(),a=i?t.config.conversations.filter(u=>u.conversationId===i):t.config.conversations;for(const u of a){const p=(0,session_1.getTasksDir)(t,u.conversationId);if(!fs_1.default.existsSync(p))continue;const g=utils_ok_1.fileUtil.dirWalker(p).filter(f=>path_1.default.basename(f)==="task.json");for(const f of g)try{const d=utils_ok_1.fileUtil.getJSON(f);if(!d)continue;if(String(d.startTime)===r){s.push({file:f,task:d});continue}if(d.title&&d.title.includes(r)){s.push({file:f,task:d});continue}}catch{}}if(s.length===0)return`\u672A\u627E\u5230\u5339\u914D\u7684\u5F85\u529E\u4EFB\u52A1: ${r}`;let n=0;for(const{file:u,task:p}of s)try{fs_1.default.unlinkSync(u),n++,console.log(`[${(0,session_1.timestamp)()}] \u5DF2\u53D6\u6D88\u4EFB\u52A1: #${p.startTime} ${p.title||p.prompt}`)}catch(c){console.error(`[${(0,session_1.timestamp)()}] \u53D6\u6D88\u4EFB\u52A1\u5931\u8D25: ${u}`,c)}const l=s.slice(0,5).map(u=>`#${u.task.startTime} ${taskDisplayName(u.task)}`).join(`
17
+ `),o=n>5?`
18
+ ...\u5171\u53D6\u6D88 ${n} \u4E2A\u4EFB\u52A1`:"";return`\u5DF2\u53D6\u6D88 ${n} \u4E2A\u5F85\u529E\u4EFB\u52A1:
19
+ ${l}${o}`}function parseTaskCancelCommand(t){const i=t.trim().match(/^\/task\s+cancel\s+(.+)$/i);return i?i[1].trim():null}function updateCmdArgsSettings(t,e){const i=t.indexOf("--settings");i!==-1&&t.splice(i,2),e&&t.push("--settings",e)}async function handleTask(t){const e=await getOneTodoTask(t);if(!e){(0,session_1.debugLog)(t,"\u672A\u53D1\u73B0\u5F85\u529E\u4EFB\u52A1...");return}const i=(0,session_1.getConversationConfig)(t,e.conversationId),s=(0,session_1.getConversationDir)(t,e.conversationId),r=`${(0,session_1.getTasksDir)(t,e.conversationId)}/${e.startTimeStr}`;if(!fs_1.default.existsSync(r)){console.error(`\u4EFB\u52A1\u76EE\u5F55\u4E0D\u5B58\u5728: ${r}`);return}e.type!=="cron"&&await(0,messaging_1.sendDingMessage)(t,{conversationId:e.conversationId,sessionWebhook:e.sessionWebhook,atUserId:e.senderStaffId,content:`\u{1F504} \u5F00\u59CB\u5904\u7406\u4EFB\u52A1: ${taskDisplayName(e)}`});const a=`${r}/result.md`,n=`${r}/task.log`;console.log(`[${(0,session_1.timestamp)()}] \u4EFB\u52A1\u5904\u7406\u4E2D: ${e.title||e.prompt}`);const l=e.senderNickName&&e.senderStaffId?`${e.senderNickName}(${e.senderStaffId}), `:"unknown",o=t.config.apiKeyCfg,u=(0,api_key_manager_1.getForceEnabledSettingsPath)(s);let p=!1,c=null;if(u)console.log(`[${(0,session_1.timestamp)()}] \u68C0\u6D4B\u5230 FORCE_ENABLE\uFF0C\u5F3A\u5236\u4F7F\u7528 settings-ding.json`);else if(o){if(c=(0,api_key_manager_1.pickValidApiKey)(t),!c){console.log(`[${(0,session_1.timestamp)()}] \u65E0\u53EF\u7528\u914D\u989D\uFF0C\u4EFB\u52A1\u91CD\u7F6E\u4E3A\u5F85\u529E`),await resetTaskToTodo(t,r,"\u65E0\u53EF\u7528\u914D\u989D");return}p=!0,console.log(`[${(0,session_1.timestamp)()}] \u5207\u6362\u5230 API Key \u6A21\u5F0F`)}const g=i?.taskCfg?.skill,f=i?.agent,d=e.promptSimply||e.prompt,m=["--permission-mode","bypassPermissions","--print",`${g?`/${g}`:""} \u7528\u6237: ${l}, \u9700\u6C42: ${d}; \u6700\u540E\u5C06\u56DE\u590D\u5185\u5BB9\u4FDD\u5B58\u81F3: ${a}`.trim()];if(u)m.push("--settings",u);else if(p&&c){const $=(0,api_key_manager_1.ensureSettingsWithApiKey)(s,c);m.push("--settings",$)}else if(!o){const $=path_1.default.join(s,".claude","settings.json");fs_1.default.existsSync($)&&(m.push("--settings",$),console.log(`[${(0,session_1.timestamp)()}] \u81EA\u52A8\u68C0\u6D4B\u5230 settings.json: ${$}`))}f&&m.push("--agent",f),(0,session_1.debugLog)(t,`\u6267\u884C\u547D\u4EE4: claude ${m.join(" ")}`);const O=600*1e3,N=20,x=1e4,D=1e4,I="claude",M=$=>{const k=Date.now();return new Promise(y=>{const _=[];let F=!1,P=!1;const C=(0,child_process_1.spawn)(I,$,{cwd:s,stdio:["ignore","pipe","pipe"]}),A=setTimeout(()=>{F||(P=!0,console.error("\u4EFB\u52A1\u6267\u884C\u8D85\u65F6(10\u5206\u949F)\uFF0C\u7EC8\u6B62\u8FDB\u7A0B"),C.kill("SIGTERM"),setTimeout(()=>{F||C.kill("SIGKILL")},5e3))},O);C.stdout.on("data",w=>{const v=w.toString();process.stdout.write(v),_.push(v)}),C.stderr.on("data",w=>{const v=w.toString();process.stderr.write(v),_.push(v)}),C.on("close",w=>{F=!0,clearTimeout(A),y({exitCode:w??1,output:_.join(""),elapsed:Date.now()-k,timedOut:P})}),C.on("error",w=>{console.error("\u8FDB\u7A0B\u6267\u884C\u9519\u8BEF:",w),_.push(`\u8FDB\u7A0B\u6267\u884C\u9519\u8BEF: ${w.message}`)})})};let h,S,b=!1,T=0;for(;;){const $=await M(m);if(h=$.exitCode,S=$.output,b=$.timedOut,h!==0){if(b){console.log(`[${(0,session_1.timestamp)()}] \u4EFB\u52A1\u6267\u884C\u8D85\u65F6\uFF0C\u91CD\u7F6E\u4E3A\u5F85\u529E`);const k=[`[${(0,session_1.timestamp)()}] \u6267\u884C\u547D\u4EE4: ${I} ${m.join(" ")}`,`[${(0,session_1.timestamp)()}] \u8D85\u65F6(${O/1e3}s)`,S].join(`
20
+ `);fs_1.default.writeFileSync(n,k),await resetTaskToTodo(t,r,"\u6267\u884C\u8D85\u65F6");return}if((0,api_key_manager_1.isQuotaExhaustedError)(S)&&o){if(p){if(c){const y=(0,api_key_manager_1.rotateApiKey)(t,c.apiKey);if(y){c=y,T=0;const _=(0,api_key_manager_1.ensureSettingsWithApiKey)(s,c);updateCmdArgsSettings(m,_),console.log(`[${(0,session_1.timestamp)()}] API Key \u914D\u989D\u8017\u5C3D(429)\uFF0C\u5207\u6362\u5230\u65B0 Key: ${(0,api_key_manager_1.settingLabel)(y)}`);continue}}}else if(c=(0,api_key_manager_1.pickValidApiKey)(t),c){p=!0,T=0;const y=(0,api_key_manager_1.ensureSettingsWithApiKey)(s,c);updateCmdArgsSettings(m,y),console.log(`[${(0,session_1.timestamp)()}] \u5207\u6362\u5230 API Key \u6A21\u5F0F`);continue}console.log(`[${(0,session_1.timestamp)()}] \u65E0\u53EF\u7528\u914D\u989D\uFF0C\u4EFB\u52A1\u91CD\u7F6E\u4E3A\u5F85\u529E`);const k=[`[${(0,session_1.timestamp)()}] \u6267\u884C\u547D\u4EE4: ${I} ${m.join(" ")}`,`[${(0,session_1.timestamp)()}] \u9000\u51FA\u7801: ${h}`,S].join(`
21
+ `);fs_1.default.writeFileSync(n,k),await resetTaskToTodo(t,r,"\u65E0\u53EF\u7528\u914D\u989D(429)");return}if((0,api_key_manager_1.isAuthenticationError)(S)){console.log(`[${(0,session_1.timestamp)()}] \u68C0\u6D4B\u5230\u8BA4\u8BC1\u9519\u8BEF(401)\uFF0C\u6807\u8BB0\u4EFB\u52A1\u5931\u8D25`);const k=[`[${(0,session_1.timestamp)()}] \u6267\u884C\u547D\u4EE4: ${I} ${m.join(" ")}`,`[${(0,session_1.timestamp)()}] \u9000\u51FA\u7801: ${h}`,S].join(`
22
+ `);fs_1.default.writeFileSync(n,k),await failTask(t,r,"\u8BA4\u8BC1\u5931\u8D25(401)\uFF0CAPI Key \u65E0\u6548\u6216\u670D\u52A1\u672A\u6388\u6743");return}if((0,claude_process_1.isRetryableApiError)(S)){if($.elapsed<D&&p&&c&&o){if(T++,T>=N){const k=(0,api_key_manager_1.rotateApiKey)(t,c.apiKey);if(k){c=k,T=0;const y=(0,api_key_manager_1.ensureSettingsWithApiKey)(s,c);updateCmdArgsSettings(m,y),console.log(`[${(0,session_1.timestamp)()}] TPM \u9650\u6D41\u8FDE\u7EED\u5FEB\u901F\u5931\u8D25 ${N} \u6B21\uFF0C\u5207\u6362\u5230\u65B0 Key: ${(0,api_key_manager_1.settingLabel)(k)}`),await utils_ok_1.baseUtil.sleep(x);continue}}}else if($.elapsed<D){if(T++,T>=N){console.log(`[${(0,session_1.timestamp)()}] TPM \u9650\u6D41\u5FEB\u901F\u5931\u8D25\u8FDE\u7EED${N}\u6B21\uFF0C\u91CD\u7F6E\u4EFB\u52A1\u4E3A\u5F85\u529E`);const k=[`[${(0,session_1.timestamp)()}] \u6267\u884C\u547D\u4EE4: ${I} ${m.join(" ")}`,`[${(0,session_1.timestamp)()}] \u9000\u51FA\u7801: ${h}`,S].join(`
23
+ `);fs_1.default.writeFileSync(n,k),await resetTaskToTodo(t,r,"TPM\u9650\u6D41\u5FEB\u901F\u5931\u8D25\u6B21\u6570\u8FC7\u591A");return}console.log(`[${(0,session_1.timestamp)()}] \u68C0\u6D4B\u5230 TPM \u9650\u6D41(\u5FEB\u901F\u5931\u8D25)\uFF0C${x/1e3}s \u540E\u91CD\u8BD5 (${T}/${N})`)}else T=0,console.log(`[${(0,session_1.timestamp)()}] \u68C0\u6D4B\u5230 TPM \u9650\u6D41(\u8FDB\u7A0B\u5DF2\u8FD0\u884C\u4E00\u6BB5\u65F6\u95F4)\uFF0C\u91CD\u7F6E\u5FEB\u901F\u5931\u8D25\u8BA1\u6570\uFF0C${x/1e3}s \u540E\u91CD\u8BD5`);await utils_ok_1.baseUtil.sleep(x);continue}}break}const U=[`[${(0,session_1.timestamp)()}] \u6267\u884C\u547D\u4EE4: ${I} ${m.join(" ")}`,`[${(0,session_1.timestamp)()}] \u9000\u51FA\u7801: ${h}`,S].join(`
24
+ `);if(fs_1.default.writeFileSync(n,U),h!==0){console.error(`\u547D\u4EE4\u6267\u884C\u5931\u8D25, \u9000\u51FA\u7801: ${h}`),await failTask(t,r,`\u6267\u884C\u5931\u8D25(\u9000\u51FA\u7801: ${h})`);return}if(fs_1.default.existsSync(a))console.log(`[${(0,session_1.timestamp)()}] \u4EFB\u52A1\u5904\u7406\u5B8C\u6210`);else{console.error("\u4EFB\u52A1\u672A\u6309\u9884\u671F\u5904\u7406"),await failTask(t,r,"\u672A\u751F\u6210\u7ED3\u679C\u6587\u4EF6");return}await finishTask(t,r)}async function runTaskHandlerLoop(t){for(;;)await handleTask(t).catch(e=>console.error(e)),await utils_ok_1.baseUtil.sleep(1e4)}async function saveTask(t,e){const{conversationId:i,prompt:s,senderStaffId:r,senderNickName:a,sessionWebhook:n,type:l="normal"}=e,o=Date.now(),u=utils_ok_1.dateUtil.mm(o).format("YYYY-MM-DD-HH-mm-ss"),p=`${(0,session_1.getTasksDir)(t,i)}/${u}`,c=`${p}/task.json`,g={conversationId:i,startTime:o,startTimeStr:u,prompt:s,senderStaffId:r,senderNickName:a||"",sessionWebhook:n,type:l};await utils_ok_1.fileUtil.saveFileStr(JSON.stringify(g,null,2),c),(0,session_1.debugLog)(t,`\u4EFB\u52A1\u5DF2\u4FDD\u5B58: ${c}`),preprocessTask(t,i,s).then(f=>{if(f)try{const d=`${p}/task-doing.json`,j=fs_1.default.existsSync(d)?d:fs_1.default.existsSync(c)?c:null;if(!j){console.log(`[${(0,session_1.timestamp)()}] \u9884\u5904\u7406\u5B8C\u6210\u4F46\u4EFB\u52A1\u6587\u4EF6\u5DF2\u4E0D\u5B58\u5728: ${p}`);return}const m=utils_ok_1.fileUtil.getJSON(j);m.title=f.title,m.promptSimply=f.promptSimply,fs_1.default.writeFileSync(j,JSON.stringify(m,null,2),"utf-8"),console.log(`[${(0,session_1.timestamp)()}] \u4EFB\u52A1\u9884\u5904\u7406\u7ED3\u679C\u5DF2\u66F4\u65B0: ${f.title}`)}catch(d){console.error(`[${(0,session_1.timestamp)()}] \u66F4\u65B0\u4EFB\u52A1\u9884\u5904\u7406\u7ED3\u679C\u5931\u8D25:`,d)}}).catch(f=>{console.error(`[${(0,session_1.timestamp)()}] \u4EFB\u52A1\u9884\u5904\u7406\u5F02\u5E38:`,f)})}
@@ -1 +1 @@
1
- 'use strict';var a13_0x3365b0=a13_0x2575;(function(_0x333f75,_0x4068d6){var _0x1bf37=a13_0x2575,_0x291c90=_0x333f75();while(!![]){try{var _0x234510=-parseInt(_0x1bf37(0x1f1))/0x1*(parseInt(_0x1bf37(0x1ed))/0x2)+parseInt(_0x1bf37(0x1ee))/0x3+parseInt(_0x1bf37(0x1ec))/0x4*(parseInt(_0x1bf37(0x1e9))/0x5)+-parseInt(_0x1bf37(0x1eb))/0x6*(-parseInt(_0x1bf37(0x1ea))/0x7)+-parseInt(_0x1bf37(0x1ef))/0x8+-parseInt(_0x1bf37(0x1e5))/0x9*(parseInt(_0x1bf37(0x1f0))/0xa)+parseInt(_0x1bf37(0x1e7))/0xb;if(_0x234510===_0x4068d6)break;else _0x291c90['push'](_0x291c90['shift']());}catch(_0x40b97e){_0x291c90['push'](_0x291c90['shift']());}}}(a13_0x9478,0x520d1));Object[a13_0x3365b0(0x1e8)](exports,a13_0x3365b0(0x1e6),{'value':!![]});function a13_0x2575(_0x7d1612,_0x2cb6a1){_0x7d1612=_0x7d1612-0x1e5;var _0x9478ff=a13_0x9478();var _0x25759f=_0x9478ff[_0x7d1612];return _0x25759f;}function a13_0x9478(){var _0x4dba55=['42694xaiCwP','1733775iQjNoH','1254344xrvInp','2652310qzvrqw','5uPSLcf','18NsaMSj','__esModule','2258641yEFGBz','defineProperty','5BsFLUO','588TdEOGO','18234JkJSUh','366156oYZwNZ'];a13_0x9478=function(){return _0x4dba55;};return a13_0x9478();}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});
@@ -1 +1 @@
1
- 'use strict';const a14_0x2e9f68=a14_0x306f;(function(_0x19ecbd,_0x41166b){const _0xaa40e5=a14_0x306f,_0x425c8d=_0x19ecbd();while(!![]){try{const _0x1459eb=parseInt(_0xaa40e5(0x198))/0x1+-parseInt(_0xaa40e5(0x18e))/0x2*(-parseInt(_0xaa40e5(0x197))/0x3)+-parseInt(_0xaa40e5(0x195))/0x4*(parseInt(_0xaa40e5(0x1a0))/0x5)+-parseInt(_0xaa40e5(0x199))/0x6*(parseInt(_0xaa40e5(0x189))/0x7)+parseInt(_0xaa40e5(0x19d))/0x8*(-parseInt(_0xaa40e5(0x187))/0x9)+-parseInt(_0xaa40e5(0x1a2))/0xa+-parseInt(_0xaa40e5(0x192))/0xb*(-parseInt(_0xaa40e5(0x19c))/0xc);if(_0x1459eb===_0x41166b)break;else _0x425c8d['push'](_0x425c8d['shift']());}catch(_0x24683f){_0x425c8d['push'](_0x425c8d['shift']());}}}(a14_0x2b38,0x4642c));var __importDefault=this&&this[a14_0x2e9f68(0x18a)]||function(_0x4fb83a){const _0x401c09=a14_0x2e9f68;return _0x4fb83a&&_0x4fb83a[_0x401c09(0x19b)]?_0x4fb83a:{'default':_0x4fb83a};};Object[a14_0x2e9f68(0x185)](exports,a14_0x2e9f68(0x19b),{'value':!![]}),exports[a14_0x2e9f68(0x18c)]=exports[a14_0x2e9f68(0x18d)]=exports[a14_0x2e9f68(0x18b)]=void 0x0,exports['loadEnv']=loadEnv;const utils_ok_1=require('utils-ok'),path_1=__importDefault(require(a14_0x2e9f68(0x186))),assert_1=__importDefault(require(a14_0x2e9f68(0x18f))),fs_1=__importDefault(require('fs'));function a14_0x306f(_0x295c36,_0x3aa82f){_0x295c36=_0x295c36-0x184;const _0x2b3881=a14_0x2b38();let _0x306f81=_0x2b3881[_0x295c36];return _0x306f81;}function loadEnv(){const _0x188832=a14_0x2e9f68;fs_1['default'][_0x188832(0x19f)](process.env.HOME+_0x188832(0x194))&&require('dotenv')[_0x188832(0x184)]({'path':process.env.HOME+'/.cc-ding/.env'}),require('dotenv')[_0x188832(0x184)]();}exports[a14_0x2e9f68(0x18b)]=((()=>{let _0x50898c;return()=>{const _0x34b54c=a14_0x306f;return!_0x50898c&&(_0x50898c=new utils_ok_1['ProjUtil'](path_1[_0x34b54c(0x1a3)][_0x34b54c(0x1a1)](__dirname,_0x34b54c(0x190)))),_0x50898c;};})()),exports[a14_0x2e9f68(0x18d)]={'getCookiesByFile'(_0x5ccdcb){const _0x3d5b52=a14_0x2e9f68;(0x0,assert_1[_0x3d5b52(0x1a3)])(fs_1[_0x3d5b52(0x1a3)][_0x3d5b52(0x19f)](_0x5ccdcb),_0x3d5b52(0x19a)+_0x5ccdcb);const _0x2e09c3=utils_ok_1[_0x3d5b52(0x19e)][_0x3d5b52(0x193)](_0x5ccdcb);return _0x2e09c3[_0x3d5b52(0x191)];}},exports[a14_0x2e9f68(0x18c)]={'addSuffixToFile'(_0x22c78f,_0x45c1e5){const _0x241c71=a14_0x2e9f68,_0x37e68b=path_1['default'][_0x241c71(0x188)](_0x22c78f),_0x48ddfd=path_1[_0x241c71(0x1a3)][_0x241c71(0x196)](_0x22c78f),_0x70f819=path_1[_0x241c71(0x1a3)]['basename'](_0x22c78f,_0x48ddfd),_0x4346fd=''+_0x70f819+_0x45c1e5+_0x48ddfd,_0x195691=path_1[_0x241c71(0x1a3)][_0x241c71(0x1a4)](_0x37e68b,_0x4346fd);fs_1[_0x241c71(0x1a3)]['renameSync'](_0x22c78f,_0x195691);}};function a14_0x2b38(){const _0x4c25d9=['config','defineProperty','path','1510119TrPRMl','dirname','7FxddWL','__importDefault','projUtil','utils','helper','160738eONbLQ','assert','../','cookies','11sYKVHb','getJSON','/.cc-ding/.env','89536raBOym','extname','6cZKXAP','64324Cvrjxg','2032890NLSISM','cookie缓存文件不存在:\x20','__esModule','14913408iBRmua','24fnyWkF','fileUtil','existsSync','25BdSjMd','resolve','2259500wOhwTr','default','join'];a14_0x2b38=function(){return _0x4c25d9;};return a14_0x2b38();}
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.utils=exports.helper=exports.projUtil=void 0,exports.loadEnv=loadEnv;const utils_ok_1=require("utils-ok"),path_1=__importDefault(require("path")),assert_1=__importDefault(require("assert")),fs_1=__importDefault(require("fs"));function loadEnv(){fs_1.default.existsSync(`${process.env.HOME}/.cc-ding/.env`)&&require("dotenv").config({path:`${process.env.HOME}/.cc-ding/.env`}),require("dotenv").config()}exports.projUtil=(()=>{let e;return()=>(e||(e=new utils_ok_1.ProjUtil(path_1.default.resolve(__dirname,"../"))),e)})(),exports.helper={getCookiesByFile(e){return(0,assert_1.default)(fs_1.default.existsSync(e),`cookie\u7F13\u5B58\u6587\u4EF6\u4E0D\u5B58\u5728: ${e}`),utils_ok_1.fileUtil.getJSON(e).cookies}},exports.utils={addSuffixToFile(e,t){const s=path_1.default.dirname(e),r=path_1.default.extname(e),o=`${path_1.default.basename(e,r)}${t}${r}`,n=path_1.default.join(s,o);fs_1.default.renameSync(e,n)}};
@@ -1 +1 @@
1
- 'use strict';const a15_0x34d9d0=a15_0x3ac5;(function(_0x42eb0d,_0x420f55){const _0x1bb485=a15_0x3ac5,_0x2e6a5e=_0x42eb0d();while(!![]){try{const _0x135cdf=-parseInt(_0x1bb485(0xe6))/0x1+parseInt(_0x1bb485(0xe8))/0x2*(-parseInt(_0x1bb485(0xed))/0x3)+-parseInt(_0x1bb485(0xf3))/0x4+-parseInt(_0x1bb485(0xe7))/0x5+-parseInt(_0x1bb485(0xe4))/0x6*(parseInt(_0x1bb485(0xea))/0x7)+-parseInt(_0x1bb485(0xe9))/0x8*(-parseInt(_0x1bb485(0xf4))/0x9)+parseInt(_0x1bb485(0xeb))/0xa;if(_0x135cdf===_0x420f55)break;else _0x2e6a5e['push'](_0x2e6a5e['shift']());}catch(_0x3c0934){_0x2e6a5e['push'](_0x2e6a5e['shift']());}}}(a15_0x3ac1,0xcfcb2));function a15_0x3ac1(){const _0x1a6ec2=['9611928aeJlHQ','6irRuvV','DEV','1276383xiMvQS','1843480RIKWbA','59792QUQWAS','8kLAQWM','66409mIROYi','30035220dMtQuq','platform','135lQQUMW','defineProperty','safeBoolean','__esModule','darwin','DEBUG','882024Qamkgm'];a15_0x3ac1=function(){return _0x1a6ec2;};return a15_0x3ac1();}function a15_0x3ac5(_0x12e3b2,_0x53017){_0x12e3b2=_0x12e3b2-0xe4;const _0x3ac1e6=a15_0x3ac1();let _0x3ac538=_0x3ac1e6[_0x12e3b2];return _0x3ac538;}Object[a15_0x34d9d0(0xee)](exports,a15_0x34d9d0(0xf0),{'value':!![]}),exports['DEV']=exports[a15_0x34d9d0(0xf2)]=void 0x0;const utils_ok_1=require('utils-ok'),platform=require('os')[a15_0x34d9d0(0xec)](),isOSX=platform===a15_0x34d9d0(0xf1);exports[a15_0x34d9d0(0xf2)]=utils_ok_1['strUtil'][a15_0x34d9d0(0xef)](process.env.DEBUG||''),exports[a15_0x34d9d0(0xe5)]=isOSX;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DEV=exports.DEBUG=void 0;const utils_ok_1=require("utils-ok"),platform=require("os").platform(),isOSX=platform==="darwin";exports.DEBUG=utils_ok_1.strUtil.safeBoolean(process.env.DEBUG||""),exports.DEV=isOSX;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cc-ding",
3
- "version": "0.0.5",
4
- "description": "钉钉机器人对接本地Claude工具",
3
+ "version": "0.1.0",
4
+ "description": "本地Claude对接钉钉机器人工具套件",
5
5
  "keywords": [
6
6
  "cli",
7
7
  "claude",
@@ -26,7 +26,7 @@
26
26
  "eslint-config-egg": "^14.1.0",
27
27
  "globals": "^17.6.0",
28
28
  "husky": "^8.0.3",
29
- "javascript-obfuscator": "^5.4.2",
29
+ "esbuild": "^0.28.0",
30
30
  "mocha": "^8.4.0",
31
31
  "ts-node": "^10.9.2",
32
32
  "typescript": "^5.9.3"
@@ -48,11 +48,13 @@
48
48
  "prepublishOnly": "npm run build"
49
49
  },
50
50
  "files": [
51
- "dist"
51
+ "dist",
52
+ "resource"
52
53
  ],
53
54
  "husky": {
54
55
  "hooks": {
55
56
  "pre-commit": "npm run lint"
56
57
  }
57
- }
58
+ },
59
+ "repository": "https://github.com/yihuineng/cc-ding.git"
58
60
  }
Binary file
Binary file