cc-ding 0.0.4 → 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.
- package/dist/bin/cc-ding.js +36 -1
- package/dist/resource/ocr-arm64 +0 -0
- package/dist/resource/ocr-x64 +0 -0
- package/dist/src/biz/api-key-manager.js +3 -1
- package/dist/src/biz/cc-ding-cli.js +85 -1
- package/dist/src/biz/claude-process.js +39 -1
- package/dist/src/biz/commands.js +6 -1
- package/dist/src/biz/cron.js +21 -1
- package/dist/src/biz/doctor.js +2 -1
- package/dist/src/biz/image.js +12 -1
- package/dist/src/biz/lock.js +1 -1
- package/dist/src/biz/messaging.js +6 -1
- package/dist/src/biz/notify.js +1 -0
- package/dist/src/biz/quote.js +5 -1
- package/dist/src/biz/recorder.js +9 -0
- package/dist/src/biz/session.js +13 -1
- package/dist/src/biz/task.js +24 -1
- package/dist/src/biz/types.js +1 -1
- package/dist/src/common.js +1 -1
- package/dist/src/constants.js +1 -1
- package/package.json +7 -5
- package/resource/ocr-arm64 +0 -0
- package/resource/ocr-x64 +0 -0
|
@@ -1 +1,6 @@
|
|
|
1
|
-
'use strict';const a9_0x192281=a9_0x3698;(function(_0x135970,_0x2ebc65){const _0x42604f=a9_0x3698,_0x7f376f=_0x135970();while(!![]){try{const _0x1ad12f=-parseInt(_0x42604f(0x1d8))/0x1*(-parseInt(_0x42604f(0x1ad))/0x2)+parseInt(_0x42604f(0x1e3))/0x3*(-parseInt(_0x42604f(0x1ca))/0x4)+parseInt(_0x42604f(0x1f0))/0x5+-parseInt(_0x42604f(0x1ed))/0x6*(-parseInt(_0x42604f(0x1e0))/0x7)+-parseInt(_0x42604f(0x1af))/0x8*(parseInt(_0x42604f(0x1b9))/0x9)+-parseInt(_0x42604f(0x1ea))/0xa+parseInt(_0x42604f(0x1f9))/0xb*(parseInt(_0x42604f(0x1bb))/0xc);if(_0x1ad12f===_0x2ebc65)break;else _0x7f376f['push'](_0x7f376f['shift']());}catch(_0x13e31a){_0x7f376f['push'](_0x7f376f['shift']());}}}(a9_0xd309,0x93902));var __importDefault=this&&this['__importDefault']||function(_0x3519f3){const _0x524b5d=a9_0x3698;return _0x3519f3&&_0x3519f3[_0x524b5d(0x1d5)]?_0x3519f3:{'default':_0x3519f3};};Object[a9_0x192281(0x1ec)](exports,a9_0x192281(0x1d5),{'value':!![]}),exports[a9_0x192281(0x1b2)]=fetchQuotedMessage,exports[a9_0x192281(0x1ae)]=queryDingUser,exports[a9_0x192281(0x1a8)]=queryUserIdByMobile,exports[a9_0x192281(0x1d1)]=filterToolUseContent,exports[a9_0x192281(0x1c3)]=splitMessage,exports['sendDingMessage']=sendDingMessage,exports[a9_0x192281(0x1e4)]=sendClaudeResponseToDing;const utils_ok_1=require(a9_0x192281(0x1d0)),urllib_1=__importDefault(require('urllib')),DING_API_BASE=a9_0x192281(0x1bc),DING_OAPI_BASE=a9_0x192281(0x1b0);async function fetchQuotedMessage(_0x53442f,_0x340496){const _0x2e10e5=a9_0x192281;try{const _0x15ab06=await _0x53442f[_0x2e10e5(0x1c7)][_0x2e10e5(0x202)](),_0x9ddb17=DING_API_BASE+'/v1.0/im/api/messages/'+encodeURIComponent(_0x340496),_0x2a928e=await urllib_1[_0x2e10e5(0x1db)][_0x2e10e5(0x1f4)](_0x9ddb17,{'method':_0x2e10e5(0x1da),'headers':{'x-acs-dingtalk-access-token':_0x15ab06},'dataType':_0x2e10e5(0x1dd),'timeout':0x1388});if(_0x2a928e[_0x2e10e5(0x1f3)]!==0xc8||!_0x2a928e[_0x2e10e5(0x1df)])return _0x53442f[_0x2e10e5(0x1e9)](_0x2e10e5(0x1ab)+_0x2a928e[_0x2e10e5(0x1f3)]+',\x20data='+JSON[_0x2e10e5(0x1eb)](_0x2a928e[_0x2e10e5(0x1df)])),null;const _0x307cb6=_0x2a928e[_0x2e10e5(0x1df)];if(_0x307cb6['text']&&typeof _0x307cb6[_0x2e10e5(0x1be)]==='object'){const _0x2dc492=_0x307cb6[_0x2e10e5(0x1be)]['content'];if(typeof _0x2dc492===_0x2e10e5(0x1ff)&&_0x2dc492)return _0x2dc492['trim']();}if(typeof _0x307cb6['content']===_0x2e10e5(0x1ff)&&_0x307cb6['content'])try{const _0x29ddd3=JSON['parse'](_0x307cb6[_0x2e10e5(0x204)]);if(typeof _0x29ddd3===_0x2e10e5(0x1ff))return _0x29ddd3[_0x2e10e5(0x1bf)]();if(_0x29ddd3['text'])return String(_0x29ddd3['text'])[_0x2e10e5(0x1bf)]();if(_0x29ddd3['content'])return String(_0x29ddd3[_0x2e10e5(0x204)])[_0x2e10e5(0x1bf)]();}catch{return _0x307cb6['content'][_0x2e10e5(0x1bf)]();}if(_0x307cb6[_0x2e10e5(0x1cc)]&&typeof _0x307cb6[_0x2e10e5(0x1cc)]==='object'){const _0x199d0b=_0x307cb6[_0x2e10e5(0x1cc)];if(typeof _0x199d0b[_0x2e10e5(0x204)]===_0x2e10e5(0x1ff)&&_0x199d0b[_0x2e10e5(0x204)])return _0x199d0b[_0x2e10e5(0x204)]['trim']();}return _0x53442f[_0x2e10e5(0x1e9)](_0x2e10e5(0x1e7)+Object[_0x2e10e5(0x200)](_0x307cb6)['join'](',')),null;}catch(_0x10e856){return console[_0x2e10e5(0x1c2)]('fetchQuotedMessage\x20请求失败:',_0x10e856),null;}}async function queryDingUser(_0x5912e3,_0x3ba1ea){const _0x2cac73=a9_0x192281;try{const _0x4f58ae=await _0x5912e3[_0x2cac73(0x1c7)]['getAccessToken'](),_0x2229be=DING_OAPI_BASE+_0x2cac73(0x1e2)+_0x4f58ae,_0x2be740=await urllib_1[_0x2cac73(0x1db)]['request'](_0x2229be,{'method':_0x2cac73(0x1b5),'data':{'userid':_0x3ba1ea},'contentType':_0x2cac73(0x1dd),'dataType':_0x2cac73(0x1dd),'timeout':0x1388});if(_0x2be740['status']!==0xc8||!_0x2be740[_0x2cac73(0x1df)])return _0x5912e3[_0x2cac73(0x1e9)]('queryDingUser\x20API\x20返回非200:\x20status='+_0x2be740[_0x2cac73(0x1f3)]+_0x2cac73(0x1ef)+JSON[_0x2cac73(0x1eb)](_0x2be740['data'])),null;const _0x2cf51b=_0x2be740['data'];if(_0x2cf51b[_0x2cac73(0x1bd)]!==0x0)return console[_0x2cac73(0x1c2)](_0x2cac73(0x1b4)+_0x2cf51b[_0x2cac73(0x1bd)]+_0x2cac73(0x1f5)+_0x2cf51b[_0x2cac73(0x1b6)]),null;return _0x2cf51b[_0x2cac73(0x1cb)]||null;}catch(_0x323e7b){return console['warn'](_0x2cac73(0x1f7),_0x323e7b),null;}}async function queryUserIdByMobile(_0x327e08,_0x2b838f){const _0xb9a0cc=a9_0x192281;try{const _0x382e99=await _0x327e08[_0xb9a0cc(0x1c7)]['getAccessToken'](),_0x21873e=DING_OAPI_BASE+_0xb9a0cc(0x1ba)+_0x382e99,_0x1823e3=await urllib_1['default'][_0xb9a0cc(0x1f4)](_0x21873e,{'method':_0xb9a0cc(0x1b5),'data':{'mobile':_0x2b838f},'contentType':_0xb9a0cc(0x1dd),'dataType':_0xb9a0cc(0x1dd),'timeout':0x1388});if(_0x1823e3[_0xb9a0cc(0x1f3)]!==0xc8||!_0x1823e3[_0xb9a0cc(0x1df)])return _0x327e08[_0xb9a0cc(0x1e9)](_0xb9a0cc(0x1f8)+_0x1823e3[_0xb9a0cc(0x1f3)]+_0xb9a0cc(0x1ef)+JSON['stringify'](_0x1823e3[_0xb9a0cc(0x1df)])),null;const _0x155e88=_0x1823e3['data'];if(_0x155e88['errcode']!==0x0)return console[_0xb9a0cc(0x1c2)](_0xb9a0cc(0x1ce)+_0x155e88[_0xb9a0cc(0x1bd)]+_0xb9a0cc(0x1f5)+_0x155e88[_0xb9a0cc(0x1b6)]),null;const _0x45a0a0=_0x155e88[_0xb9a0cc(0x1cb)];return _0x45a0a0?.[_0xb9a0cc(0x1f1)]||null;}catch(_0x152b52){return console['warn'](_0xb9a0cc(0x1ee),_0x152b52),null;}}const TOOL_TAGS=['Write',a9_0x192281(0x1f6),'Edit',a9_0x192281(0x1fe),a9_0x192281(0x1aa),'Glob',a9_0x192281(0x1cf),a9_0x192281(0x1c8),'WebFetch',a9_0x192281(0x1dc),a9_0x192281(0x1d7),a9_0x192281(0x1d9),a9_0x192281(0x1b1),'ExitPlanMode',a9_0x192281(0x203),a9_0x192281(0x1d6),a9_0x192281(0x1c0),a9_0x192281(0x1c6),a9_0x192281(0x1b7),a9_0x192281(0x1fd),'CronCreate',a9_0x192281(0x1e6),a9_0x192281(0x1a9),a9_0x192281(0x1c4),a9_0x192281(0x1c1)][a9_0x192281(0x1b3)]('|'),TOOL_USE_SELF_CLOSE_RE=new RegExp('<('+TOOL_TAGS+')[^>]*\x5c/>','g'),TOOL_USE_OPEN_CLOSE_RE=new RegExp('<('+TOOL_TAGS+a9_0x192281(0x1c9),'g'),MULTI_NEWLINE_RE=/\n{3,}/g;function filterToolUseContent(_0x52aafa){const _0x323003=a9_0x192281;let _0x5bf2ab=_0x52aafa[_0x323003(0x201)](TOOL_USE_SELF_CLOSE_RE,'');return _0x5bf2ab=_0x5bf2ab[_0x323003(0x201)](TOOL_USE_OPEN_CLOSE_RE,''),_0x5bf2ab=_0x5bf2ab[_0x323003(0x201)](MULTI_NEWLINE_RE,'\x0a\x0a'),_0x5bf2ab[_0x323003(0x1bf)]();}function splitMessage(_0x32bd4c,_0x4aac76){const _0x1ad41a=a9_0x192281,_0x56bda6=[];while(_0x32bd4c[_0x1ad41a(0x1fb)]>_0x4aac76){let _0x5ca7fa=_0x32bd4c[_0x1ad41a(0x1d2)]('\x0a',_0x4aac76);(_0x5ca7fa===-0x1||_0x5ca7fa<_0x4aac76*0.5)&&(_0x5ca7fa=_0x32bd4c[_0x1ad41a(0x1d2)]('。',_0x4aac76)),(_0x5ca7fa===-0x1||_0x5ca7fa<_0x4aac76*0.5)&&(_0x5ca7fa=_0x32bd4c[_0x1ad41a(0x1d2)]('\x20',_0x4aac76)),_0x5ca7fa===-0x1||_0x5ca7fa<_0x4aac76*0.5?_0x5ca7fa=_0x4aac76:_0x5ca7fa+=0x1,_0x56bda6['push'](_0x32bd4c[_0x1ad41a(0x1fa)](0x0,_0x5ca7fa)[_0x1ad41a(0x1bf)]()),_0x32bd4c=_0x32bd4c[_0x1ad41a(0x1fa)](_0x5ca7fa)[_0x1ad41a(0x1bf)]();}return _0x32bd4c['length']>0x0&&_0x56bda6[_0x1ad41a(0x1f2)](_0x32bd4c),_0x56bda6;}function a9_0xd309(){const _0x126894=['warn','splitMessage','LSP','https://oapi.dingtalk.com/robot/send?access_token=','TaskList','dingStreamClient','Skill',')[^>]*>[\x5cs\x5cS]*?<\x5c/\x5c1>','148doMUJj','result','body','conversationId','queryUserIdByMobile\x20接口返回错误:\x20errcode=','Agent','utils-ok','filterToolUseContent','lastIndexOf','config','find','__esModule','TaskGet','TaskOutput','397EMhzut','AskUserQuestion','GET','default','WebSearch','json','通过\x20sessionWebhook\x20发送钉钉消息失败:','data','2086KltCXe','baseUtil','/topapi/v2/user/get?access_token=','40557DEfCet','sendClaudeResponseToDing','通过\x20dingToken\x20发送钉钉消息失败:','CronDelete','fetchQuotedMessage\x20无法从响应中提取文本:\x20keys=','markdown','debugLog','4471100vcJnVM','stringify','defineProperty','22662YsYwgr','queryUserIdByMobile\x20请求失败:',',\x20data=','613730mmbkCf','userid','push','status','request',',\x20errmsg=','Read','queryDingUser\x20请求失败:','queryUserIdByMobile\x20API\x20返回非200:\x20status=','10168565YNUhUQ','substring','length','error','ExitWorktree','Bash','string','keys','replace','getAccessToken','TaskCreate','content','queryUserIdByMobile','CronList','Grep','fetchQuotedMessage\x20API\x20返回非200:\x20status=','conversations','914lSlueL','queryDingUser','6419240JYzkcV','https://oapi.dingtalk.com','EnterPlanMode','fetchQuotedMessage','join','queryDingUser\x20接口返回错误:\x20errcode=','POST','errmsg','EnterWorktree',']**\x0a','9lQMsiT','/topapi/v2/user/getbymobile?access_token=','12bIOFEe','https://api.dingtalk.com','errcode','text','trim','TaskUpdate','NotebookEdit'];a9_0xd309=function(){return _0x126894;};return a9_0xd309();}function a9_0x3698(_0x2a4f0b,_0x147cc7){_0x2a4f0b=_0x2a4f0b-0x1a8;const _0xd30918=a9_0xd309();let _0x3698a1=_0xd30918[_0x2a4f0b];return _0x3698a1;}async function sendDingMessage(_0x14f6d4,_0x154878){const _0x50cdce=a9_0x192281,{conversationId:_0x5d40d1,sessionWebhook:_0x2352ae,atUserId:_0x4fcead,content:_0x42d292,msgType:msgType=_0x50cdce(0x1be)}=_0x154878,_0x580395=_0x14f6d4[_0x50cdce(0x1d3)][_0x50cdce(0x1ac)][_0x50cdce(0x1d4)](_0x22087e=>_0x22087e[_0x50cdce(0x1cd)]===_0x5d40d1);let _0x42af10=_0x4fcead;_0x580395?.['atSender']===![]&&(_0x42af10=undefined);const _0x31fad1=_0x42af10?[_0x42af10]:[],_0x479a39=_0x580395?.['dingToken'];let _0x13c84e=_0x42d292;_0x42af10&&msgType===_0x50cdce(0x1e8)&&(_0x13c84e=_0x42d292+'\x0a@'+_0x42af10);const _0x5c9a5f=msgType==='markdown'?{'msgtype':_0x50cdce(0x1e8),'markdown':{'title':_0x13c84e,'text':_0x13c84e},'at':{'atUserIds':_0x31fad1,'isAtAll':![]}}:{'msgtype':_0x50cdce(0x1be),'text':{'content':_0x42d292},'at':{'atUserIds':_0x31fad1,'isAtAll':![]}};if(_0x479a39){const _0x11f2d3=await _0x14f6d4[_0x50cdce(0x1c7)][_0x50cdce(0x202)](),_0x250ad3=_0x50cdce(0x1c5)+_0x479a39;try{await urllib_1[_0x50cdce(0x1db)][_0x50cdce(0x1f4)](_0x250ad3,{'method':_0x50cdce(0x1b5),'data':_0x5c9a5f,'contentType':_0x50cdce(0x1dd),'headers':{'x-acs-dingtalk-access-token':_0x11f2d3},'dataType':_0x50cdce(0x1dd)});}catch(_0x2887e5){console['error'](_0x50cdce(0x1e5),_0x2887e5);}}else{if(_0x2352ae){const _0x34199b=await _0x14f6d4['dingStreamClient']['getAccessToken']();try{await urllib_1['default'][_0x50cdce(0x1f4)](_0x2352ae,{'method':_0x50cdce(0x1b5),'data':_0x5c9a5f,'contentType':_0x50cdce(0x1dd),'headers':{'x-acs-dingtalk-access-token':_0x34199b},'dataType':'json'});}catch(_0x3a5190){console[_0x50cdce(0x1fc)](_0x50cdce(0x1de),_0x3a5190);}}else{if(_0x14f6d4[_0x50cdce(0x1d3)]['defaultDingToken']){const _0xa9f9cf=await _0x14f6d4[_0x50cdce(0x1c7)]['getAccessToken'](),_0x11d2fc=_0x50cdce(0x1c5)+_0x14f6d4[_0x50cdce(0x1d3)]['defaultDingToken'];try{await urllib_1[_0x50cdce(0x1db)][_0x50cdce(0x1f4)](_0x11d2fc,{'method':'POST','data':_0x5c9a5f,'contentType':_0x50cdce(0x1dd),'headers':{'x-acs-dingtalk-access-token':_0xa9f9cf},'dataType':_0x50cdce(0x1dd)});}catch(_0x418da1){console[_0x50cdce(0x1fc)]('通过\x20defaultDingToken\x20发送钉钉消息失败:',_0x418da1);}}else console[_0x50cdce(0x1fc)]('未能获取机器人信息发送途径');}}}async function sendClaudeResponseToDing(_0x483493,_0x2f3398,_0x15ffe6,_0x32c8db,_0x2e80cc){const _0x3210bb=a9_0x192281,_0x2ebeb7=0x4650,_0x4b9439=filterToolUseContent(_0x2e80cc);if(!_0x4b9439){_0x483493[_0x3210bb(0x1e9)]('过滤后内容为空,跳过发送');return;}if(_0x4b9439[_0x3210bb(0x1fb)]<=_0x2ebeb7)await sendDingMessage(_0x483493,{'conversationId':_0x2f3398,'sessionWebhook':_0x15ffe6,'atUserId':_0x32c8db,'content':_0x4b9439,'msgType':_0x3210bb(0x1e8)});else{const _0x3dd20a=splitMessage(_0x4b9439,_0x2ebeb7);for(let _0x87a3e2=0x0;_0x87a3e2<_0x3dd20a[_0x3210bb(0x1fb)];_0x87a3e2++){const _0xae5182=_0x3dd20a['length']>0x1?'**['+(_0x87a3e2+0x1)+'/'+_0x3dd20a[_0x3210bb(0x1fb)]+_0x3210bb(0x1b8):'';await sendDingMessage(_0x483493,{'conversationId':_0x2f3398,'sessionWebhook':_0x15ffe6,'atUserId':_0x87a3e2===_0x3dd20a[_0x3210bb(0x1fb)]-0x1?_0x32c8db:'','content':_0xae5182+_0x3dd20a[_0x87a3e2],'msgType':_0x3210bb(0x1e8)}),_0x87a3e2<_0x3dd20a['length']-0x1&&await utils_ok_1[_0x3210bb(0x1e1)]['sleep'](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}}
|
package/dist/src/biz/quote.js
CHANGED
|
@@ -1 +1,5 @@
|
|
|
1
|
-
|
|
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(``):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(``):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)}}
|
package/dist/src/biz/session.js
CHANGED
|
@@ -1 +1,13 @@
|
|
|
1
|
-
'use strict';const a11_0x4bb000=a11_0x28f2;(function(_0x5f5515,_0x37b79a){const _0x7f4be4=a11_0x28f2,_0x2d58be=_0x5f5515();while(!![]){try{const _0x211f26=parseInt(_0x7f4be4(0x26f))/0x1*(parseInt(_0x7f4be4(0x1ef))/0x2)+parseInt(_0x7f4be4(0x244))/0x3*(-parseInt(_0x7f4be4(0x1ff))/0x4)+-parseInt(_0x7f4be4(0x1db))/0x5*(-parseInt(_0x7f4be4(0x229))/0x6)+-parseInt(_0x7f4be4(0x205))/0x7+-parseInt(_0x7f4be4(0x215))/0x8+parseInt(_0x7f4be4(0x21d))/0x9*(-parseInt(_0x7f4be4(0x201))/0xa)+parseInt(_0x7f4be4(0x1ae))/0xb*(parseInt(_0x7f4be4(0x1b5))/0xc);if(_0x211f26===_0x37b79a)break;else _0x2d58be['push'](_0x2d58be['shift']());}catch(_0x4bb0e7){_0x2d58be['push'](_0x2d58be['shift']());}}}(a11_0x1418,0x8e66a));var __importDefault=this&&this[a11_0x4bb000(0x227)]||function(_0x437fa0){const _0x3de30f=a11_0x4bb000;return _0x437fa0&&_0x437fa0[_0x3de30f(0x1dd)]?_0x437fa0:{'default':_0x437fa0};};Object[a11_0x4bb000(0x253)](exports,a11_0x4bb000(0x1dd),{'value':!![]}),exports['timestamp']=timestamp,exports[a11_0x4bb000(0x1d0)]=getHomeDir,exports[a11_0x4bb000(0x1e8)]=getClientDir,exports[a11_0x4bb000(0x206)]=initClientDir,exports[a11_0x4bb000(0x1d5)]=ensureClientDir,exports['getClientConfig']=getClientConfig,exports[a11_0x4bb000(0x1df)]=resolveToUserId,exports[a11_0x4bb000(0x1f6)]=authCheck,exports[a11_0x4bb000(0x1bc)]=isOwner,exports[a11_0x4bb000(0x249)]=debugLog,exports['isMobile']=isMobile,exports['getPhoneMapFile']=getPhoneMapFile,exports['loadPhoneMap']=loadPhoneMap,exports['savePhoneMap']=savePhoneMap,exports[a11_0x4bb000(0x23c)]=userIdToPhone,exports['resolveUserId']=resolveUserId,exports[a11_0x4bb000(0x276)]=resolveAllPhonesInConfig,exports[a11_0x4bb000(0x275)]=hashConversationId,exports['getReplyWebhook']=getReplyWebhook,exports[a11_0x4bb000(0x23e)]=getReplyConversationId,exports[a11_0x4bb000(0x1e0)]=findActiveSession,exports['getConversationConfig']=getConversationConfig,exports[a11_0x4bb000(0x27a)]=getConversationDir,exports['getSessionsDir']=getSessionsDir,exports[a11_0x4bb000(0x1f4)]=getTasksDir,exports[a11_0x4bb000(0x219)]=getImagesDir,exports[a11_0x4bb000(0x1c1)]=getSessionDir,exports[a11_0x4bb000(0x255)]=getSessionId,exports[a11_0x4bb000(0x270)]=formatSessionInfo,exports[a11_0x4bb000(0x20e)]=readSessionLogTail,exports[a11_0x4bb000(0x1c0)]=findHistorySession,exports['findLatestSession']=findLatestSession,exports[a11_0x4bb000(0x267)]=updateSessionFile,exports[a11_0x4bb000(0x20c)]=appendSessionLog,exports[a11_0x4bb000(0x1fc)]=getActiveSessionsFile,exports[a11_0x4bb000(0x248)]=saveActiveSession,exports[a11_0x4bb000(0x23b)]=loadActiveSessions,exports[a11_0x4bb000(0x1e7)]=endSession,exports['switchToSession']=switchToSession,exports[a11_0x4bb000(0x1fb)]=startNewSession,exports[a11_0x4bb000(0x1e1)]=processMessageQueue,exports[a11_0x4bb000(0x1a9)]=handleSessionMessage,exports['cleanCache']=cleanCache;const utils_ok_1=require(a11_0x4bb000(0x26a)),fs_1=__importDefault(require('fs')),os_1=__importDefault(require('os')),assert_1=__importDefault(require(a11_0x4bb000(0x217))),crypto_1=__importDefault(require('crypto')),path_1=__importDefault(require(a11_0x4bb000(0x24f))),commands_1=require(a11_0x4bb000(0x24e)),messaging_1=require(a11_0x4bb000(0x1c2)),claude_process_1=require(a11_0x4bb000(0x1b2));function timestamp(){const _0x30c34a=a11_0x4bb000;return utils_ok_1[_0x30c34a(0x265)]['mm'](Date[_0x30c34a(0x23f)]())[_0x30c34a(0x21a)](_0x30c34a(0x22b));}function getHomeDir(){const _0xf1fb39=a11_0x4bb000;return os_1[_0xf1fb39(0x1d1)][_0xf1fb39(0x25d)]();}function getClientDir(_0x193764){const _0x47ee6e=a11_0x4bb000;return path_1[_0x47ee6e(0x1d1)][_0x47ee6e(0x250)](getHomeDir(),_0x47ee6e(0x1fa),_0x193764[_0x47ee6e(0x273)]);}function initClientDir(_0x32a589,_0x537bd9){const _0x16afd0=a11_0x4bb000,_0x1d9d30=path_1['default'][_0x16afd0(0x250)](getHomeDir(),'.cc-ding',_0x32a589),_0x5e41db=path_1[_0x16afd0(0x1d1)]['join'](_0x1d9d30,_0x16afd0(0x1d6));return fs_1[_0x16afd0(0x1d1)][_0x16afd0(0x26b)](_0x1d9d30,{'recursive':!![]}),fs_1['default'][_0x16afd0(0x225)](_0x5e41db,JSON[_0x16afd0(0x1a6)](_0x537bd9,null,0x2),_0x16afd0(0x26c)),_0x5e41db;}function ensureClientDir(_0xfd3e3a){const _0x26df85=a11_0x4bb000,_0x13e073=path_1[_0x26df85(0x1d1)][_0x26df85(0x250)](getHomeDir(),'.cc-ding',_0xfd3e3a),_0x3574cf=path_1[_0x26df85(0x1d1)]['join'](_0x13e073,'config.json');if(fs_1[_0x26df85(0x1d1)][_0x26df85(0x235)](_0x3574cf))return;console[_0x26df85(0x1da)]('['+timestamp()+']\x20客户端目录未初始化:\x20'+_0x13e073),console[_0x26df85(0x1da)]('['+timestamp()+_0x26df85(0x264));const _0x5f2e9c={'clientName':_0x26df85(0x241),'owner':_0x26df85(0x1c3),'whiteUserList':[],'clientSecret':'<clientSecret-钉钉Stream连接密钥>','defaultDingToken':_0x26df85(0x1b9),'conversations':[]};initClientDir(_0xfd3e3a,_0x5f2e9c),console['log']('['+timestamp()+']\x20已生成默认配置文件:\x20'+_0x3574cf),console[_0x26df85(0x1da)]('['+timestamp()+_0x26df85(0x1f5)),process['exit'](0x1);}function getClientConfig(_0x37a7b1){const _0x26ab7a=a11_0x4bb000,_0x5b2270=getClientDir(_0x37a7b1)+'/config.json';(0x0,assert_1['default'])(fs_1[_0x26ab7a(0x1d1)][_0x26ab7a(0x235)](_0x5b2270),_0x26ab7a(0x221)+_0x5b2270);const _0x9a7df9=utils_ok_1['fileUtil'][_0x26ab7a(0x1b3)](_0x5b2270);return(0x0,assert_1[_0x26ab7a(0x1d1)])(_0x9a7df9['clientSecret'],_0x26ab7a(0x1be)),(0x0,assert_1['default'])(_0x9a7df9[_0x26ab7a(0x1b8)],_0x26ab7a(0x24d)),_0x9a7df9;}function resolveToUserId(_0x20e5ac,_0x5e3bbb){const _0x1721ae=a11_0x4bb000;return isMobile(_0x5e3bbb)?_0x20e5ac[_0x1721ae(0x22a)][_0x5e3bbb]||_0x5e3bbb:_0x5e3bbb;}function authCheck(_0x1cb04d,_0x349e47,_0x1e2252){const _0xe12da5=a11_0x4bb000;if(isOwner(_0x1cb04d,_0x349e47))return!![];if(_0x1e2252){const _0x157c3c=_0x1cb04d[_0xe12da5(0x1dc)]['conversations'][_0xe12da5(0x1d8)](_0x47a071=>_0x47a071[_0xe12da5(0x228)]===_0x1e2252);if(_0x157c3c?.[_0xe12da5(0x1b8)]&&_0x157c3c[_0xe12da5(0x1b8)][_0xe12da5(0x220)]>0x0)return _0x157c3c[_0xe12da5(0x1b8)][_0xe12da5(0x247)](_0x258bcb=>resolveToUserId(_0x1cb04d,_0x258bcb)===_0x349e47);}return _0x1cb04d[_0xe12da5(0x1dc)]['whiteUserList'][_0xe12da5(0x247)](_0x5ae56c=>resolveToUserId(_0x1cb04d,_0x5ae56c)===_0x349e47);}function isOwner(_0x38289e,_0x5ae4a0){const _0x47606b=a11_0x4bb000,_0x3e038f=_0x38289e[_0x47606b(0x1dc)][_0x47606b(0x240)];if(!_0x3e038f||!isMobile(_0x3e038f))return![];const _0x5f3dea=_0x38289e[_0x47606b(0x22a)][_0x3e038f];return!!_0x5f3dea&&_0x5f3dea===_0x5ae4a0;}function debugLog(_0x12537e,_0x3139d5,..._0x568e3a){const _0x281e0c=a11_0x4bb000;_0x12537e[_0x281e0c(0x1dc)][_0x281e0c(0x1c4)]&&console[_0x281e0c(0x1da)](_0x281e0c(0x226)+_0x3139d5,..._0x568e3a);}function a11_0x28f2(_0xc55523,_0x5536b1){_0xc55523=_0xc55523-0x1a6;const _0x14189d=a11_0x1418();let _0x28f224=_0x14189d[_0xc55523];return _0x28f224;}const PHONE_RE=/^1\d{10}$/;function isMobile(_0x39ebeb){const _0x4e3e3b=a11_0x4bb000;return PHONE_RE[_0x4e3e3b(0x214)](_0x39ebeb);}function getPhoneMapFile(_0x54111f){const _0x4ae53e=a11_0x4bb000;return path_1[_0x4ae53e(0x1d1)][_0x4ae53e(0x250)](getClientDir(_0x54111f),_0x4ae53e(0x1ea));}function loadPhoneMap(_0x4d65de){const _0x1c3100=a11_0x4bb000,_0x1e8e4a=getPhoneMapFile(_0x4d65de);if(!fs_1[_0x1c3100(0x1d1)][_0x1c3100(0x235)](_0x1e8e4a))return{};try{const _0x1f0d4d=JSON[_0x1c3100(0x1a8)](fs_1['default'][_0x1c3100(0x1ba)](_0x1e8e4a,_0x1c3100(0x26c)));if(typeof _0x1f0d4d==='object'&&_0x1f0d4d!==null)return _0x1f0d4d;}catch{}return{};}function savePhoneMap(_0x2d2802,_0x120b97){const _0xa6803e=a11_0x4bb000,_0x159b5f=getPhoneMapFile(_0x2d2802);try{fs_1['default']['writeFileSync'](_0x159b5f,JSON[_0xa6803e(0x1a6)](_0x120b97,null,0x2),_0xa6803e(0x26c));}catch(_0x13b20e){console['error']('保存\x20phone-map.json\x20失败:',_0x13b20e);}}function userIdToPhone(_0xbcaa4c,_0x31de5d){const _0x5d3670=a11_0x4bb000;for(const [_0x29cb11,_0x581b35]of Object[_0x5d3670(0x22c)](_0xbcaa4c[_0x5d3670(0x22a)])){if(_0x581b35===_0x31de5d)return _0x29cb11;}return null;}async function resolveUserId(_0x462388,_0x50e309){const _0x3808f5=a11_0x4bb000;if(!_0x50e309)return null;if(!isMobile(_0x50e309))return _0x50e309;if(_0x462388[_0x3808f5(0x22a)][_0x50e309])return _0x462388[_0x3808f5(0x22a)][_0x50e309];const _0x5085ab=await(0x0,messaging_1['queryUserIdByMobile'])(_0x462388,_0x50e309);return _0x5085ab&&(_0x462388[_0x3808f5(0x22a)][_0x50e309]=_0x5085ab,savePhoneMap(_0x462388,_0x462388[_0x3808f5(0x22a)])),_0x5085ab;}async function resolveAllPhonesInConfig(_0xac84dd){const _0x4f19b0=a11_0x4bb000;_0xac84dd[_0x4f19b0(0x22a)]=loadPhoneMap(_0xac84dd);const _0x651eab=[],_0xb61c12=async _0x1d9354=>{const _0x5203cc=_0x4f19b0;if(_0xac84dd[_0x5203cc(0x22a)][_0x1d9354])return;const _0x198af8=await(0x0,messaging_1[_0x5203cc(0x279)])(_0xac84dd,_0x1d9354);_0x198af8&&(_0xac84dd[_0x5203cc(0x22a)][_0x1d9354]=_0x198af8,_0x651eab[_0x5203cc(0x211)](_0x1d9354));};_0xac84dd['config'][_0x4f19b0(0x240)]&&(isMobile(_0xac84dd[_0x4f19b0(0x1dc)]['owner'])?(await _0xb61c12(_0xac84dd[_0x4f19b0(0x1dc)][_0x4f19b0(0x240)]),!_0xac84dd['resolvedPhones'][_0xac84dd[_0x4f19b0(0x1dc)][_0x4f19b0(0x240)]]&&console['warn'](_0x4f19b0(0x1a7)+_0xac84dd['config']['owner'])):console[_0x4f19b0(0x1cf)]('[WARN]\x20owner\x20必须为手机号,当前值无效:\x20'+_0xac84dd[_0x4f19b0(0x1dc)][_0x4f19b0(0x240)]));for(const _0x5e43fa of _0xac84dd[_0x4f19b0(0x1dc)]['whiteUserList']){isMobile(_0x5e43fa)&&(await _0xb61c12(_0x5e43fa),!_0xac84dd[_0x4f19b0(0x22a)][_0x5e43fa]&&console[_0x4f19b0(0x1cf)]('[WARN]\x20无法解析\x20whiteUserList\x20手机号:\x20'+_0x5e43fa));}for(const _0x4976f0 of _0xac84dd[_0x4f19b0(0x1dc)]['conversations']){if(_0x4976f0[_0x4f19b0(0x1b8)])for(const _0x29d380 of _0x4976f0[_0x4f19b0(0x1b8)]){isMobile(_0x29d380)&&(await _0xb61c12(_0x29d380),!_0xac84dd[_0x4f19b0(0x22a)][_0x29d380]&&console['warn']('[WARN]\x20无法解析群白名单手机号:\x20'+_0x29d380));}}_0x651eab[_0x4f19b0(0x220)]>0x0&&savePhoneMap(_0xac84dd,_0xac84dd[_0x4f19b0(0x22a)]),console[_0x4f19b0(0x1da)](_0x4f19b0(0x21e)+Object[_0x4f19b0(0x230)](_0xac84dd['resolvedPhones'])[_0x4f19b0(0x220)]+'\x20条记录\x20('+_0x651eab[_0x4f19b0(0x220)]+_0x4f19b0(0x1b6));}function hashConversationId(_0x82110e,_0x21e5ec){const _0x53ad6b=a11_0x4bb000,_0x56e1df=getConversationConfig(_0x82110e,_0x21e5ec),_0x3e66ab=_0x56e1df?.[_0x53ad6b(0x21b)]||_0x21e5ec;return crypto_1[_0x53ad6b(0x1d1)]['createHash'](_0x53ad6b(0x20a))[_0x53ad6b(0x25e)](_0x3e66ab)[_0x53ad6b(0x1ee)](_0x53ad6b(0x20d));}function getReplyWebhook(_0x4a07fd){const _0x52421d=a11_0x4bb000;return _0x4a07fd[_0x52421d(0x261)]||_0x4a07fd[_0x52421d(0x1ed)];}function getReplyConversationId(_0x5d2fd0){const _0x3f9544=a11_0x4bb000;return _0x5d2fd0[_0x3f9544(0x269)]||_0x5d2fd0[_0x3f9544(0x228)];}function findActiveSession(_0x3caae2,_0xc3274b){const _0x4e8ad6=a11_0x4bb000,_0x96bc7a=_0x3caae2[_0x4e8ad6(0x232)][_0x4e8ad6(0x245)](_0xc3274b);if(_0x96bc7a)return{'key':_0xc3274b,'session':_0x96bc7a};const _0x17ffee=getConversationConfig(_0x3caae2,_0xc3274b);if(_0x17ffee?.['linkConversationId'])for(const _0xec563f of _0x3caae2[_0x4e8ad6(0x232)]){const _0x23ba7b=getConversationConfig(_0x3caae2,_0xec563f[0x0]);if(_0x23ba7b?.[_0x4e8ad6(0x21b)]===_0x17ffee['linkConversationId'])return{'key':_0xec563f[0x0],'session':_0xec563f[0x1]};}return undefined;}function getConversationConfig(_0x25d0e4,_0x3161ec){const _0x52d006=a11_0x4bb000;return _0x25d0e4['config']['conversations'][_0x52d006(0x1d8)](_0x2d5419=>_0x2d5419[_0x52d006(0x228)]===_0x3161ec);}function getConversationDir(_0x5269b9,_0x2682b2){const _0x132767=hashConversationId(_0x5269b9,_0x2682b2);return getClientDir(_0x5269b9)+'/'+_0x132767;}function getSessionsDir(_0x48bb2f,_0x56339d){return getConversationDir(_0x48bb2f,_0x56339d)+'/.sessions';}function getTasksDir(_0x3541b0,_0x534db8){return getConversationDir(_0x3541b0,_0x534db8)+'/.tasks';}function getImagesDir(_0x5abbc6,_0x2e1c2c){const _0x2bc921=a11_0x4bb000;return getConversationDir(_0x5abbc6,_0x2e1c2c)+_0x2bc921(0x1e5);}function getSessionDir(_0x15b972,_0x359228){const _0x5b7ada=a11_0x4bb000,_0x344cec=_0x359228[_0x5b7ada(0x277)]||_0x359228[_0x5b7ada(0x1eb)];return getSessionsDir(_0x15b972,_0x359228[_0x5b7ada(0x228)])+'/'+_0x344cec;}function getSessionId(_0x44e013){const _0x21e422=a11_0x4bb000;return _0x44e013['claudeSessionId']||_0x44e013[_0x21e422(0x1eb)];}function formatSessionInfo(_0x1b601c,_0x3953a3){const _0x5852a6=a11_0x4bb000,_0x324a14=findActiveSession(_0x1b601c,_0x3953a3);if(!_0x324a14)return null;const {session:_0x521ff2,isProcessing:_0x408453,messageQueue:_0x326e89}=_0x324a14[_0x5852a6(0x22d)],_0x497218=[_0x5852a6(0x1ca)+getSessionId(_0x521ff2),_0x5852a6(0x21c)+_0x521ff2[_0x5852a6(0x26e)]+'('+_0x521ff2['startStaffId']+')',_0x5852a6(0x21f)+_0x521ff2['startTimeStr'],_0x5852a6(0x1c9)+_0x324a14['session'][_0x5852a6(0x1f8)],_0x5852a6(0x200)+_0x408453,_0x5852a6(0x1f0)+(_0x326e89?.[_0x5852a6(0x220)]||0x0)+'\x20条'];return _0x497218[_0x5852a6(0x250)]('\x0a');}function readSessionLogTail(_0x18c989,_0x569f61,_0xcb09d9){const _0xdc029b=a11_0x4bb000,_0x5e312e=findActiveSession(_0x18c989,_0x569f61);if(!_0x5e312e)return null;const _0x4eb577=_0x5e312e[_0xdc029b(0x22d)],_0x1dd72a=getSessionDir(_0x18c989,_0x4eb577[_0xdc029b(0x22d)])+'/session.log';if(!fs_1[_0xdc029b(0x1d1)][_0xdc029b(0x235)](_0x1dd72a))return null;try{const _0x417eeb=fs_1[_0xdc029b(0x1d1)][_0xdc029b(0x1ba)](_0x1dd72a,_0xdc029b(0x26c)),_0x5d02c3=_0x417eeb[_0xdc029b(0x23a)]('\x0a')[_0xdc029b(0x262)](_0x54e4a9=>_0x54e4a9[_0xdc029b(0x220)]>0x0);return _0x5d02c3[_0xdc029b(0x1c5)](-_0xcb09d9)['join']('\x0a');}catch{return null;}}function findHistorySession(_0x37699e,_0x228b48,_0x18255f){const _0x450b2a=a11_0x4bb000,_0x1c7284=getSessionsDir(_0x37699e,_0x228b48),_0x425a14=_0x1c7284+'/'+_0x18255f+'/session.json';try{return utils_ok_1['fileUtil'][_0x450b2a(0x1b3)](_0x425a14);}catch{}const _0x2f9e4f=parseInt(_0x18255f,0xa);if(!isNaN(_0x2f9e4f)&&_0x2f9e4f>0x0){const _0x14f0aa=utils_ok_1['dateUtil']['mm'](_0x2f9e4f)[_0x450b2a(0x21a)](_0x450b2a(0x266)),_0x201320=_0x1c7284+'/'+_0x14f0aa+_0x450b2a(0x25c);try{return utils_ok_1[_0x450b2a(0x1e9)]['getJSON'](_0x201320);}catch{}}return null;}function findLatestSession(_0xc4a4b7,_0x29cf70){const _0x42ddc0=a11_0x4bb000,_0x43efc9=getSessionsDir(_0xc4a4b7,_0x29cf70);if(!fs_1[_0x42ddc0(0x1d1)][_0x42ddc0(0x235)](_0x43efc9))return null;const _0xb58599=findActiveSession(_0xc4a4b7,_0x29cf70),_0x11e6f0=_0xb58599?getSessionId(_0xb58599[_0x42ddc0(0x22d)][_0x42ddc0(0x22d)]):null;let _0x25e7d8=null,_0x336588=0x0;try{const _0x469e9e=fs_1['default'][_0x42ddc0(0x1fd)](_0x43efc9,{'withFileTypes':!![]});for(const _0x2eec5e of _0x469e9e){if(!_0x2eec5e[_0x42ddc0(0x238)]())continue;const _0x2565ff=path_1[_0x42ddc0(0x1d1)][_0x42ddc0(0x250)](_0x43efc9,_0x2eec5e[_0x42ddc0(0x233)],_0x42ddc0(0x234));if(!fs_1[_0x42ddc0(0x1d1)][_0x42ddc0(0x235)](_0x2565ff))continue;try{const _0x42a2f3=utils_ok_1[_0x42ddc0(0x1e9)][_0x42ddc0(0x1b3)](_0x2565ff);if(_0x11e6f0&&getSessionId(_0x42a2f3)===_0x11e6f0)continue;_0x42a2f3[_0x42ddc0(0x242)]>_0x336588&&(_0x336588=_0x42a2f3[_0x42ddc0(0x242)],_0x25e7d8=_0x42a2f3);}catch{continue;}}}catch{}return _0x25e7d8;}function updateSessionFile(_0x4fa108,_0x491339,_0x51c1e1){const _0x406733=a11_0x4bb000;if(_0x51c1e1[_0x406733(0x277)]&&!_0x491339[_0x406733(0x277)]){const _0x45c6f4=getSessionDir(_0x4fa108,_0x491339);_0x491339[_0x406733(0x277)]=_0x51c1e1[_0x406733(0x277)];const _0x139ca4=getSessionDir(_0x4fa108,_0x491339);_0x45c6f4!==_0x139ca4&&fs_1[_0x406733(0x1d1)][_0x406733(0x235)](_0x45c6f4)&&(fs_1['default'][_0x406733(0x1ce)](_0x45c6f4,_0x139ca4),console[_0x406733(0x1da)]('['+timestamp()+_0x406733(0x1e6)+path_1[_0x406733(0x1d1)][_0x406733(0x20f)](_0x45c6f4)+_0x406733(0x1b0)+path_1[_0x406733(0x1d1)][_0x406733(0x20f)](_0x139ca4)));}const _0x45b348=getSessionDir(_0x4fa108,_0x491339)+_0x406733(0x25c);try{if(_0x51c1e1[_0x406733(0x1ed)])_0x491339[_0x406733(0x1ed)]=_0x51c1e1['sessionWebhook'];if(_0x51c1e1[_0x406733(0x261)]!==undefined)_0x491339[_0x406733(0x261)]=_0x51c1e1[_0x406733(0x261)]||undefined;if(_0x51c1e1['currentConversationId']!==undefined)_0x491339[_0x406733(0x269)]=_0x51c1e1[_0x406733(0x269)]||undefined;fs_1[_0x406733(0x1d1)]['writeFileSync'](_0x45b348,JSON[_0x406733(0x1a6)](_0x491339,null,0x2),'utf-8');const _0x19a955=_0x51c1e1[_0x406733(0x277)]?_0x406733(0x277):_0x51c1e1[_0x406733(0x261)]!==undefined?'currentWebhook':_0x406733(0x1ed);console[_0x406733(0x1da)]('['+timestamp()+']\x20会话文件已保存:\x20'+_0x19a955),saveActiveSession(_0x4fa108,_0x491339[_0x406733(0x228)]);}catch(_0x486c1a){console[_0x406733(0x1cc)](_0x406733(0x25b),_0x486c1a);}}function appendSessionLog(_0xc67de3,_0x27ca2f,_0x14cb36){const _0xc4f65e=a11_0x4bb000,_0x38031e=_0xc67de3+_0xc4f65e(0x222),_0x29da18=timestamp(),_0x2d5c9b='['+_0x29da18+_0xc4f65e(0x25a)+_0x27ca2f['toUpperCase']()+_0xc4f65e(0x223)+_0x14cb36+'\x0a';try{fs_1['default'][_0xc4f65e(0x1c6)](_0x38031e,_0x2d5c9b,'utf-8');}catch{}}function getActiveSessionsFile(_0x11d07d,_0x517a84){const _0x2fa542=a11_0x4bb000;return getSessionsDir(_0x11d07d,_0x517a84)+_0x2fa542(0x1e3);}function saveActiveSession(_0x15a570,_0x1c9ed3){const _0x11dafe=a11_0x4bb000,_0x4fc383=_0x15a570[_0x11dafe(0x232)]['get'](_0x1c9ed3),_0x1d0b6f=getActiveSessionsFile(_0x15a570,_0x1c9ed3);try{if(!_0x4fc383){if(fs_1['default']['existsSync'](_0x1d0b6f))fs_1['default']['unlinkSync'](_0x1d0b6f);return;}const _0x1abbd3={'session':_0x4fc383[_0x11dafe(0x22d)],'lastSenderStaffId':_0x4fc383[_0x11dafe(0x1f8)],'conversationConfig':_0x4fc383[_0x11dafe(0x1f7)]};fs_1['default'][_0x11dafe(0x26b)](path_1[_0x11dafe(0x1d1)][_0x11dafe(0x203)](_0x1d0b6f),{'recursive':!![]}),fs_1[_0x11dafe(0x1d1)]['writeFileSync'](_0x1d0b6f,JSON[_0x11dafe(0x1a6)](_0x1abbd3,null,0x2),_0x11dafe(0x26c)),debugLog(_0x15a570,_0x11dafe(0x1c8)+_0x1c9ed3);}catch(_0x5c611f){console[_0x11dafe(0x1cc)](_0x11dafe(0x252)+_0x1c9ed3,_0x5c611f);}}function a11_0x1418(){const _0x4cba63=['/active.json','catch','/.images',']\x20会话目录重命名:\x20','endSession','getClientDir','fileUtil','phone-map.json','startTimeStr','unlinkSync','sessionWebhook','digest','1736674ANFtfq','-\x20**排队消息:**\x20',',结束当前会话\x0a','读取images目录失败:\x20','恢复活跃会话:\x20群=','getTasksDir',']\x20请编辑\x20config.json\x20填写必要的配置项后重新启动','authCheck','conversationConfig','lastSenderStaffId','has','.cc-ding','startNewSession','getActiveSessionsFile','readdirSync','[会话恢复失败]\x20清除\x20claudeSessionId\x20并重新发起:\x20','68Gldduc','-\x20**处理中:**\x20','6740YVPBHD',',\x20当前并发=','dirname','会话\x20','4932900uRJSKL','initClientDir','读取tasks目录失败:\x20','\x0a💡\x20回复\x20/end\x20可结束本轮对话',']\x20[SYSTEM]:\x20结束会话时中断\x20Claude\x20进程\x0a','md5','interruptClaudeProcess','appendSessionLog','hex','readSessionLogTail','basename','isProcessing','push','messageQueue',',\x20会话ID=','test','8507752yFaLie','结束会话时中断正在执行的\x20Claude\x20进程','assert','imagesDeleted','getImagesDir','format','linkConversationId','-\x20**发起者:**\x20','3600uqWzoc','[手机解析]\x20已加载\x20','-\x20**开始时间:**\x20','length','Could\x20not\x20find\x20client\x20config\x20file:\x20','/session.log',']:\x20','sessionMaxConcurrency','writeFileSync','[DEBUG]\x20','__importDefault','conversationId','294bfPeCh','resolvedPhones','YYYY-MM-DD\x20HH:mm:ss','entries','session','切换会话时中断正在执行的\x20Claude\x20进程','set','keys','✅\x20收到,我来处理...','activeSessions','name','session.json','existsSync','\x20消息已入队,排队第\x20','结束会话:\x20群=','isDirectory','receiveReply','split','loadActiveSessions','userIdToPhone','❌\x20处理消息时发生错误:\x20','getReplyConversationId','now','owner','cc助手','startTime','🔄\x20已恢复对话上下文','35898RXIWUP','get','rmSync','some','saveActiveSession','debugLog','重试执行\x20Claude\x20查询失败:','执行队列\x20Claude\x20查询失败:','message','config.json\x20missing\x20required\x20field:\x20whiteUserList','./commands','path','join','✅\x20已切换到历史会话\x20(会话ID:\x20','持久化活跃会话失败:\x20群=','defineProperty','切换会话,先结束当前会话:\x20','getSessionId','创建新会话:\x20群=','key','map','\x20条)',']\x20[','更新\x20session.json\x20失败:','/session.json','homedir','update','delete',']\x20[SYSTEM]:\x20用户请求结束会话\x0a','currentWebhook','filter','taskCfg',']\x20正在自动初始化...','dateUtil','YYYY-MM-DD-HH-mm-ss','updateSessionFile',']\x20[SYSTEM]:\x20会话被切换到\x20','currentConversationId','utils-ok','mkdirSync','utf-8','shift','startNickName','1IRdEtr','formatSessionInfo','删除任务目录失败:\x20','💬\x20会话已结束\x0a📋\x20会话ID:\x20','clientId','executeClaudeQuery','hashConversationId','resolveAllPhonesInConfig','claudeSessionId','⏳\x20正在处理中,已加入队列(排队第\x20','queryUserIdByMobile','getConversationDir','stringify','[WARN]\x20无法解析\x20owner\x20手机号:\x20','parse','handleSessionMessage','⚠️\x20该会话无历史上下文,将从头开始','size','🚀\x20会话已开始!\x0a处理中...\x0a💡\x20回复\x20/end\x20可结束本轮对话','agent','18666637SlEDjN','conversations','\x20->\x20','读取sessions目录失败:\x20','./claude-process','getJSON','sendDingMessage','12hjivHX','\x20条新解析)','DEFAULT_SESSION_MAX_CONCURRENCY','whiteUserList','<兜底钉钉机器人Token>','readFileSync','skill','isOwner','errors','config.json\x20missing\x20required\x20field:\x20clientSecret','执行\x20Claude\x20查询失败:','findHistorySession','getSessionDir','./messaging','<owner手机号>','debug','slice','appendFileSync',',\x20发起者=','活跃会话已持久化:\x20群=','-\x20**最后发送者:**\x20','-\x20**会话ID:**\x20','startStaffId','error','会话目录已重建:\x20群=','renameSync','warn','getHomeDir','default','\x20无活跃会话','parseEndCommand','🤯\x20当前繁忙,请稍后再试...','ensureClientDir','config.json','达到最大并发数\x20(','find','删除会话目录失败:\x20','log','26445FfKyBD','config','__esModule','sessionsDeleted','resolveToUserId','findActiveSession','processMessageQueue','❌\x20会话\x20'];a11_0x1418=function(){return _0x4cba63;};return a11_0x1418();}function loadActiveSessions(_0x354254){const _0x5d0e89=a11_0x4bb000;for(const _0x1ac5a8 of _0x354254['config'][_0x5d0e89(0x1af)]){const _0xa046d1=getActiveSessionsFile(_0x354254,_0x1ac5a8[_0x5d0e89(0x228)]);if(!fs_1[_0x5d0e89(0x1d1)][_0x5d0e89(0x235)](_0xa046d1))continue;try{const _0x3834ff=utils_ok_1[_0x5d0e89(0x1e9)]['getJSON'](_0xa046d1);if(!_0x3834ff?.[_0x5d0e89(0x22d)]){console[_0x5d0e89(0x1da)]('活跃会话文件无效,跳过:\x20'+_0xa046d1);continue;}const _0x4d6c6e=getSessionDir(_0x354254,_0x3834ff[_0x5d0e89(0x22d)]);if(!fs_1[_0x5d0e89(0x1d1)]['existsSync'](_0x4d6c6e)){console[_0x5d0e89(0x1da)]('活跃会话目录已不存在,清理持久化文件:\x20'+_0xa046d1),fs_1[_0x5d0e89(0x1d1)][_0x5d0e89(0x1ec)](_0xa046d1);continue;}_0x354254[_0x5d0e89(0x232)]['set'](_0x1ac5a8['conversationId'],{'session':_0x3834ff['session'],'lastSenderStaffId':_0x3834ff[_0x5d0e89(0x1f8)]||_0x3834ff[_0x5d0e89(0x22d)][_0x5d0e89(0x1cb)],'isProcessing':![],'messageQueue':[],'conversationConfig':_0x3834ff[_0x5d0e89(0x1f7)]}),console['log'](_0x5d0e89(0x1f3)+_0x1ac5a8['conversationId']+',\x20会话ID='+getSessionId(_0x3834ff[_0x5d0e89(0x22d)]));}catch(_0x3f1261){console['error']('加载活跃会话失败:\x20'+_0xa046d1,_0x3f1261);}}}async function endSession(_0x24ce63,_0x465572,_0x4e0a90){const _0x591de9=a11_0x4bb000,_0x15b3e3=findActiveSession(_0x24ce63,_0x465572);if(!_0x15b3e3){console[_0x591de9(0x1da)]('群\x20'+_0x465572+_0x591de9(0x1d2));return;}const {key:_0x1ec1a1,session:_0x11fdc3}=_0x15b3e3,{session:_0x2f733a}=_0x11fdc3,_0x15fd43=getSessionDir(_0x24ce63,_0x2f733a),_0x55df86=getSessionId(_0x2f733a);console[_0x591de9(0x1da)](_0x591de9(0x237)+_0x465572+_0x591de9(0x213)+_0x55df86),(0x0,claude_process_1[_0x591de9(0x20b)])(_0x11fdc3,_0x591de9(0x216))&&fs_1[_0x591de9(0x1d1)]['appendFileSync'](_0x15fd43+'/session.log','['+timestamp()+_0x591de9(0x209),'utf-8'),await(0x0,messaging_1[_0x591de9(0x1b4)])(_0x24ce63,{'conversationId':_0x465572,'sessionWebhook':_0x4e0a90,'atUserId':_0x2f733a[_0x591de9(0x1cb)],'content':_0x591de9(0x272)+_0x55df86}),_0x24ce63[_0x591de9(0x232)][_0x591de9(0x25f)](_0x1ec1a1),saveActiveSession(_0x24ce63,_0x1ec1a1),fs_1[_0x591de9(0x1d1)][_0x591de9(0x1c6)](_0x15fd43+_0x591de9(0x222),'['+timestamp()+_0x591de9(0x260),'utf-8');}async function switchToSession(_0x3d4801,_0x35de71,_0x494725,_0x1403ef,_0x8e2a42,_0x5809cd){const _0x44a182=a11_0x4bb000,_0x496a95=findHistorySession(_0x3d4801,_0x35de71,_0x1403ef);if(!_0x496a95)return await(0x0,messaging_1['sendDingMessage'])(_0x3d4801,{'conversationId':_0x35de71,'sessionWebhook':_0x494725,'atUserId':_0x8e2a42,'content':'❌\x20未找到会话\x20'+_0x1403ef+',该会话可能已被清理,请发送新消息开始新会话'}),![];const _0x501789=getSessionDir(_0x3d4801,_0x496a95);if(!fs_1[_0x44a182(0x1d1)]['existsSync'](_0x501789))return await(0x0,messaging_1['sendDingMessage'])(_0x3d4801,{'conversationId':_0x35de71,'sessionWebhook':_0x494725,'atUserId':_0x8e2a42,'content':_0x44a182(0x1e2)+_0x1403ef+'\x20的数据已被清理,无法恢复,请发送新消息开始新会话'}),![];const _0xc6431=findActiveSession(_0x3d4801,_0x35de71);_0xc6431&&(console['log'](_0x44a182(0x254)+getSessionId(_0xc6431[_0x44a182(0x22d)][_0x44a182(0x22d)])),(0x0,claude_process_1['interruptClaudeProcess'])(_0xc6431['session'],_0x44a182(0x22e)),_0x3d4801['activeSessions'][_0x44a182(0x25f)](_0xc6431['key']),saveActiveSession(_0x3d4801,_0xc6431[_0x44a182(0x257)]),fs_1[_0x44a182(0x1d1)][_0x44a182(0x1c6)](getSessionDir(_0x3d4801,_0xc6431[_0x44a182(0x22d)][_0x44a182(0x22d)])+'/session.log','['+timestamp()+_0x44a182(0x268)+_0x1403ef+_0x44a182(0x1f1),_0x44a182(0x26c)));_0x3d4801[_0x44a182(0x232)][_0x44a182(0x22f)](_0x35de71,{'session':_0x496a95,'lastSenderStaffId':_0x8e2a42,'isProcessing':![],'messageQueue':[],'conversationConfig':_0x5809cd}),saveActiveSession(_0x3d4801,_0x35de71);const _0x2dcf46=!!_0x496a95['claudeSessionId'],_0x157905=getSessionId(_0x496a95);return await(0x0,messaging_1['sendDingMessage'])(_0x3d4801,{'conversationId':_0x35de71,'sessionWebhook':_0x494725,'atUserId':_0x8e2a42,'content':_0x44a182(0x251)+_0x157905+')\x0a'+(_0x2dcf46?_0x44a182(0x243):_0x44a182(0x1aa))+_0x44a182(0x208)}),console['log']('已切换到历史会话:\x20群='+_0x35de71+_0x44a182(0x213)+_0x157905+',\x20有Claude上下文='+_0x2dcf46),!![];}async function startNewSession(_0x19c9aa,_0x24e79b){const _0x3a12f3=a11_0x4bb000,{conversationId:_0x9caed,sessionWebhook:_0x1bc830,senderStaffId:_0x361245,senderNick:_0x8e37be,message:_0x4ed624,conversationConfig:_0x3e05ee}=_0x24e79b,_0x2d892e=_0x19c9aa[_0x3a12f3(0x1dc)][_0x3a12f3(0x224)]??_0x19c9aa[_0x3a12f3(0x1b7)];if(_0x19c9aa[_0x3a12f3(0x232)][_0x3a12f3(0x1ab)]>=_0x2d892e){console[_0x3a12f3(0x1da)](_0x3a12f3(0x1d7)+_0x2d892e+'),拒绝新会话:\x20群='+_0x9caed),await(0x0,messaging_1[_0x3a12f3(0x1b4)])(_0x19c9aa,{'conversationId':_0x9caed,'sessionWebhook':_0x1bc830,'atUserId':_0x361245,'content':_0x3a12f3(0x1d4)});return;}const _0x288565=Date[_0x3a12f3(0x23f)](),_0x23bf18={'conversationId':_0x9caed,'sessionWebhook':_0x1bc830,'startTime':_0x288565,'startTimeStr':utils_ok_1[_0x3a12f3(0x265)]['mm'](_0x288565)[_0x3a12f3(0x21a)]('YYYY-MM-DD-HH-mm-ss'),'startStaffId':_0x361245,'startNickName':_0x8e37be};console[_0x3a12f3(0x1da)](_0x3a12f3(0x256)+_0x9caed+_0x3a12f3(0x213)+getSessionId(_0x23bf18)+_0x3a12f3(0x1c7)+_0x361245+_0x3a12f3(0x202)+(_0x19c9aa['activeSessions'][_0x3a12f3(0x1ab)]+0x1)+'/'+_0x2d892e);const _0x4627c4=getSessionDir(_0x19c9aa,_0x23bf18);fs_1['default'][_0x3a12f3(0x26b)](_0x4627c4,{'recursive':!![]}),fs_1['default'][_0x3a12f3(0x225)](_0x4627c4+_0x3a12f3(0x25c),JSON[_0x3a12f3(0x1a6)](_0x23bf18,null,0x2),_0x3a12f3(0x26c)),_0x19c9aa[_0x3a12f3(0x232)][_0x3a12f3(0x22f)](_0x9caed,{'session':_0x23bf18,'lastSenderStaffId':_0x361245,'isProcessing':!![],'messageQueue':[],'conversationConfig':_0x3e05ee}),saveActiveSession(_0x19c9aa,_0x9caed);_0x3e05ee[_0x3a12f3(0x239)]!==![]&&await(0x0,messaging_1[_0x3a12f3(0x1b4)])(_0x19c9aa,{'conversationId':_0x9caed,'sessionWebhook':_0x1bc830,'atUserId':_0x361245,'content':_0x3a12f3(0x1ac)});try{await(0x0,claude_process_1[_0x3a12f3(0x274)])(_0x19c9aa,_0x23bf18,_0x4ed624,{'skill':_0x3e05ee['taskCfg']?.[_0x3a12f3(0x1bb)],'agent':_0x3e05ee[_0x3a12f3(0x1ad)],'senderNick':_0x8e37be,'senderStaffId':_0x361245});}catch(_0x327653){console['error'](_0x3a12f3(0x1bf),_0x327653),await(0x0,messaging_1['sendDingMessage'])(_0x19c9aa,{'conversationId':_0x9caed,'sessionWebhook':_0x1bc830,'atUserId':_0x361245,'content':_0x3a12f3(0x23d)+(_0x327653 instanceof Error?_0x327653[_0x3a12f3(0x24c)]:String(_0x327653))});}finally{const _0x22758f=_0x19c9aa[_0x3a12f3(0x232)][_0x3a12f3(0x245)](_0x9caed);_0x22758f&&(_0x22758f['isProcessing']=![]);}await processMessageQueue(_0x19c9aa,_0x9caed);}async function processMessageQueue(_0x552c94,_0x2119b6){const _0x57fcb4=a11_0x4bb000,_0x29f4c2=_0x552c94['activeSessions']['get'](_0x2119b6);if(!_0x29f4c2||_0x29f4c2[_0x57fcb4(0x212)][_0x57fcb4(0x220)]===0x0)return;const _0x5390b1=_0x29f4c2[_0x57fcb4(0x212)][_0x57fcb4(0x26d)](),{message:_0x431a01,senderStaffId:_0xf9b626,senderNick:_0x5c07a4}=_0x5390b1,_0x13b9dd=_0x29f4c2['session'][_0x57fcb4(0x1ed)];console[_0x57fcb4(0x1da)]('处理队列消息:\x20群='+_0x2119b6+',\x20剩余\x20'+_0x29f4c2[_0x57fcb4(0x212)][_0x57fcb4(0x220)]+'\x20条'),_0x29f4c2[_0x57fcb4(0x210)]=!![],_0x29f4c2[_0x57fcb4(0x1f8)]=_0xf9b626,saveActiveSession(_0x552c94,_0x2119b6);_0x29f4c2[_0x57fcb4(0x1f7)][_0x57fcb4(0x239)]!==![]&&await(0x0,messaging_1[_0x57fcb4(0x1b4)])(_0x552c94,{'conversationId':_0x2119b6,'sessionWebhook':_0x13b9dd,'atUserId':_0xf9b626,'content':_0x57fcb4(0x231)})[_0x57fcb4(0x1e4)](()=>{});try{await(0x0,claude_process_1[_0x57fcb4(0x274)])(_0x552c94,_0x29f4c2[_0x57fcb4(0x22d)],_0x431a01,{'skill':_0x29f4c2[_0x57fcb4(0x1f7)][_0x57fcb4(0x263)]?.[_0x57fcb4(0x1bb)],'agent':_0x29f4c2[_0x57fcb4(0x1f7)]['agent'],'senderNick':_0x5c07a4,'senderStaffId':_0xf9b626});}catch(_0x3ad536){console[_0x57fcb4(0x1cc)](_0x57fcb4(0x24b),_0x3ad536),await(0x0,messaging_1[_0x57fcb4(0x1b4)])(_0x552c94,{'conversationId':_0x2119b6,'sessionWebhook':_0x13b9dd,'atUserId':_0xf9b626,'content':_0x57fcb4(0x23d)+(_0x3ad536 instanceof Error?_0x3ad536['message']:String(_0x3ad536))});}finally{_0x29f4c2['isProcessing']=![];}_0x29f4c2['messageQueue']['length']>0x0&&await processMessageQueue(_0x552c94,_0x2119b6);}async function handleSessionMessage(_0xd1459c,_0x5328c9){const _0x4cf34f=a11_0x4bb000,{conversationId:_0x322d4a,sessionWebhook:_0x2c75c7,senderStaffId:_0x1892a2,senderNick:_0x4a5c0f,message:_0x52b3c7,conversationConfig:_0x256099}=_0x5328c9;if((0x0,commands_1[_0x4cf34f(0x1d3)])(_0x52b3c7)){await endSession(_0xd1459c,_0x322d4a,_0x2c75c7);return;}const _0x22cbb6=findActiveSession(_0xd1459c,_0x322d4a),_0x5c1826=_0x22cbb6?.['session'];if(_0x5c1826){const _0x3a6243=getSessionDir(_0xd1459c,_0x5c1826[_0x4cf34f(0x22d)]);!fs_1[_0x4cf34f(0x1d1)][_0x4cf34f(0x235)](_0x3a6243)&&(fs_1[_0x4cf34f(0x1d1)]['mkdirSync'](_0x3a6243,{'recursive':!![]}),fs_1[_0x4cf34f(0x1d1)][_0x4cf34f(0x225)](_0x3a6243+_0x4cf34f(0x25c),JSON[_0x4cf34f(0x1a6)](_0x5c1826[_0x4cf34f(0x22d)],null,0x2),_0x4cf34f(0x26c)),console[_0x4cf34f(0x1da)](_0x4cf34f(0x1cd)+_0x322d4a+',\x20路径='+_0x3a6243));if(_0x5c1826[_0x4cf34f(0x210)]){const _0x298f75={'message':_0x52b3c7,'senderStaffId':_0x1892a2,'senderNick':_0x4a5c0f};_0x5c1826[_0x4cf34f(0x212)][_0x4cf34f(0x211)](_0x298f75);const _0x62ad89=_0x5c1826[_0x4cf34f(0x212)]['length'];console['log'](_0x4cf34f(0x204)+_0x322d4a+_0x4cf34f(0x236)+_0x62ad89+'\x20条'),await(0x0,messaging_1[_0x4cf34f(0x1b4)])(_0xd1459c,{'conversationId':_0x322d4a,'sessionWebhook':_0x2c75c7,'atUserId':_0x1892a2,'content':_0x4cf34f(0x278)+_0x62ad89+_0x4cf34f(0x259)});return;}const _0x2ac126=_0x5c1826[_0x4cf34f(0x22d)][_0x4cf34f(0x228)]===_0x322d4a;console['log']('追加消息到活跃会话:\x20群='+_0x322d4a+_0x4cf34f(0x213)+getSessionId(_0x5c1826[_0x4cf34f(0x22d)])+(_0x2ac126?'':'(关联群,会话归属='+_0x5c1826[_0x4cf34f(0x22d)]['conversationId']+')')),_0x5c1826[_0x4cf34f(0x1f8)]=_0x1892a2,_0x5c1826[_0x4cf34f(0x210)]=!![],saveActiveSession(_0xd1459c,_0x22cbb6['key']);_0x2ac126&&_0x2c75c7!==_0x5c1826[_0x4cf34f(0x22d)][_0x4cf34f(0x1ed)]&&(_0x5c1826[_0x4cf34f(0x22d)]['sessionWebhook']=_0x2c75c7,updateSessionFile(_0xd1459c,_0x5c1826[_0x4cf34f(0x22d)],{'sessionWebhook':_0x2c75c7}));_0x5c1826[_0x4cf34f(0x22d)]['currentWebhook']=_0x2c75c7,_0x5c1826[_0x4cf34f(0x22d)][_0x4cf34f(0x269)]=_0x322d4a,updateSessionFile(_0xd1459c,_0x5c1826[_0x4cf34f(0x22d)],{'currentWebhook':_0x2c75c7,'currentConversationId':_0x322d4a});_0x256099['receiveReply']!==![]&&await(0x0,messaging_1['sendDingMessage'])(_0xd1459c,{'conversationId':_0x322d4a,'sessionWebhook':_0x2c75c7,'atUserId':_0x1892a2,'content':'✅\x20收到,我来处理...'});try{await(0x0,claude_process_1[_0x4cf34f(0x274)])(_0xd1459c,_0x5c1826[_0x4cf34f(0x22d)],_0x52b3c7,{'skill':_0x256099['taskCfg']?.[_0x4cf34f(0x1bb)],'agent':_0x256099['agent'],'senderNick':_0x4a5c0f,'senderStaffId':_0x1892a2});}catch(_0x632984){if(_0x5c1826[_0x4cf34f(0x22d)]['claudeSessionId']){console[_0x4cf34f(0x1da)](_0x4cf34f(0x1fe)+_0x5c1826['session'][_0x4cf34f(0x277)]),_0x5c1826[_0x4cf34f(0x22d)]['claudeSessionId']=undefined,_0xd1459c[_0x4cf34f(0x267)](_0x5c1826[_0x4cf34f(0x22d)],{});try{await(0x0,claude_process_1[_0x4cf34f(0x274)])(_0xd1459c,_0x5c1826[_0x4cf34f(0x22d)],_0x52b3c7,{'skill':_0x256099[_0x4cf34f(0x263)]?.[_0x4cf34f(0x1bb)],'agent':_0x256099[_0x4cf34f(0x1ad)],'senderNick':_0x4a5c0f,'senderStaffId':_0x1892a2});return;}catch(_0x3336b){console[_0x4cf34f(0x1cc)](_0x4cf34f(0x24a),_0x3336b),await(0x0,messaging_1[_0x4cf34f(0x1b4)])(_0xd1459c,{'conversationId':_0x322d4a,'sessionWebhook':_0x2c75c7,'atUserId':_0x1892a2,'content':_0x4cf34f(0x23d)+(_0x3336b instanceof Error?_0x3336b[_0x4cf34f(0x24c)]:String(_0x3336b))}),_0x5c1826['isProcessing']=![],await processMessageQueue(_0xd1459c,_0x322d4a);return;}}console[_0x4cf34f(0x1cc)]('执行\x20Claude\x20查询失败:',_0x632984),await(0x0,messaging_1['sendDingMessage'])(_0xd1459c,{'conversationId':_0x322d4a,'sessionWebhook':_0x2c75c7,'atUserId':_0x1892a2,'content':_0x4cf34f(0x23d)+(_0x632984 instanceof Error?_0x632984[_0x4cf34f(0x24c)]:String(_0x632984))});}finally{_0x5c1826[_0x4cf34f(0x210)]=![];}await processMessageQueue(_0xd1459c,_0x322d4a);}else await startNewSession(_0xd1459c,{'conversationId':_0x322d4a,'sessionWebhook':_0x2c75c7,'senderStaffId':_0x1892a2,'senderNick':_0x4a5c0f,'message':_0x52b3c7,'conversationConfig':_0x256099});}function cleanCache(_0xd8df35,_0x2ffd34,_0x582dcd=!![]){const _0x1fdbab=a11_0x4bb000,_0x201f2d={'sessionsDeleted':0x0,'tasksDeleted':0x0,'imagesDeleted':0x0,'errors':[]},_0x3a0694=_0x2ffd34?[_0x2ffd34]:_0xd8df35[_0x1fdbab(0x1dc)]['conversations'][_0x1fdbab(0x258)](_0x3fec77=>_0x3fec77[_0x1fdbab(0x228)]);for(const _0xf6b94 of _0x3a0694){let _0x4cc7c0=null;if(_0x582dcd){const _0x4d1d98=findActiveSession(_0xd8df35,_0xf6b94);_0x4d1d98&&(_0x4cc7c0=getSessionId(_0x4d1d98['session'][_0x1fdbab(0x22d)]));}const _0x483416=getSessionsDir(_0xd8df35,_0xf6b94);if(fs_1['default'][_0x1fdbab(0x235)](_0x483416))try{const _0x3923ab=fs_1[_0x1fdbab(0x1d1)][_0x1fdbab(0x1fd)](_0x483416,{'withFileTypes':!![]});for(const _0x49b67c of _0x3923ab){if(!_0x49b67c[_0x1fdbab(0x238)]())continue;if(_0x4cc7c0&&_0x49b67c[_0x1fdbab(0x233)]===_0x4cc7c0)continue;const _0x2620af=path_1[_0x1fdbab(0x1d1)][_0x1fdbab(0x250)](_0x483416,_0x49b67c['name']);try{fs_1[_0x1fdbab(0x1d1)][_0x1fdbab(0x246)](_0x2620af,{'recursive':!![],'force':!![]}),_0x201f2d[_0x1fdbab(0x1de)]++;}catch(_0x37790f){_0x201f2d[_0x1fdbab(0x1bd)][_0x1fdbab(0x211)](_0x1fdbab(0x1d9)+_0x2620af);}}}catch(_0x42a558){_0x201f2d[_0x1fdbab(0x1bd)][_0x1fdbab(0x211)](_0x1fdbab(0x1b1)+_0x483416);}const _0x869fd7=getTasksDir(_0xd8df35,_0xf6b94);if(fs_1[_0x1fdbab(0x1d1)][_0x1fdbab(0x235)](_0x869fd7))try{const _0x29f913=fs_1[_0x1fdbab(0x1d1)][_0x1fdbab(0x1fd)](_0x869fd7,{'withFileTypes':!![]});for(const _0x1807f8 of _0x29f913){if(!_0x1807f8['isDirectory']())continue;const _0x20dbcf=path_1[_0x1fdbab(0x1d1)]['join'](_0x869fd7,_0x1807f8['name']);try{fs_1['default'][_0x1fdbab(0x246)](_0x20dbcf,{'recursive':!![],'force':!![]}),_0x201f2d['tasksDeleted']++;}catch(_0x3d8ae7){_0x201f2d[_0x1fdbab(0x1bd)][_0x1fdbab(0x211)](_0x1fdbab(0x271)+_0x20dbcf);}}}catch(_0x24e582){_0x201f2d['errors']['push'](_0x1fdbab(0x207)+_0x869fd7);}const _0x149567=getImagesDir(_0xd8df35,_0xf6b94);if(fs_1['default'][_0x1fdbab(0x235)](_0x149567))try{const _0x1677f7=fs_1['default'][_0x1fdbab(0x1fd)](_0x149567,{'withFileTypes':!![]});for(const _0x2bbad3 of _0x1677f7){const _0x5d8ab1=path_1[_0x1fdbab(0x1d1)][_0x1fdbab(0x250)](_0x149567,_0x2bbad3[_0x1fdbab(0x233)]);try{fs_1[_0x1fdbab(0x1d1)][_0x1fdbab(0x1ec)](_0x5d8ab1),_0x201f2d[_0x1fdbab(0x218)]++;}catch(_0xd372b){_0x201f2d[_0x1fdbab(0x1bd)][_0x1fdbab(0x211)]('删除图片失败:\x20'+_0x5d8ab1);}}}catch(_0x4fe073){_0x201f2d['errors'][_0x1fdbab(0x211)](_0x1fdbab(0x1f2)+_0x149567);}if(!_0x582dcd){const _0x59facf=getActiveSessionsFile(_0xd8df35,_0xf6b94);if(fs_1[_0x1fdbab(0x1d1)][_0x1fdbab(0x235)](_0x59facf))try{fs_1['default']['unlinkSync'](_0x59facf);}catch(_0x10e9d1){_0x201f2d[_0x1fdbab(0x1bd)]['push']('删除活跃会话文件失败:\x20'+_0x59facf);}_0xd8df35[_0x1fdbab(0x232)][_0x1fdbab(0x1f9)](_0xf6b94)&&_0xd8df35[_0x1fdbab(0x232)][_0x1fdbab(0x25f)](_0xf6b94);}}return _0x201f2d;}
|
|
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}
|
package/dist/src/biz/task.js
CHANGED
|
@@ -1 +1,24 @@
|
|
|
1
|
-
'use strict';const a12_0x2e7d1b=a12_0x36aa;(function(_0x19110b,_0xc5a211){const _0x52e947=a12_0x36aa,_0x516576=_0x19110b();while(!![]){try{const _0x5dfb1d=parseInt(_0x52e947(0x120))/0x1*(-parseInt(_0x52e947(0xca))/0x2)+parseInt(_0x52e947(0xf9))/0x3+-parseInt(_0x52e947(0xe4))/0x4+-parseInt(_0x52e947(0x12a))/0x5+parseInt(_0x52e947(0x134))/0x6+-parseInt(_0x52e947(0xff))/0x7*(-parseInt(_0x52e947(0x105))/0x8)+-parseInt(_0x52e947(0x160))/0x9*(parseInt(_0x52e947(0x147))/0xa);if(_0x5dfb1d===_0xc5a211)break;else _0x516576['push'](_0x516576['shift']());}catch(_0x38724b){_0x516576['push'](_0x516576['shift']());}}}(a12_0x16a0,0xf046c));var __importDefault=this&&this[a12_0x2e7d1b(0x135)]||function(_0x55d547){const _0x4ff7ee=a12_0x2e7d1b;return _0x55d547&&_0x55d547[_0x4ff7ee(0x165)]?_0x55d547:{'default':_0x55d547};};Object[a12_0x2e7d1b(0xb3)](exports,a12_0x2e7d1b(0x165),{'value':!![]}),exports['formatTaskInfo']=formatTaskInfo,exports[a12_0x2e7d1b(0xd5)]=countTodoTask,exports[a12_0x2e7d1b(0x133)]=getOneTodoTask,exports[a12_0x2e7d1b(0xcf)]=finishTask,exports['cancelTask']=cancelTask,exports[a12_0x2e7d1b(0xce)]=parseTaskCancelCommand,exports[a12_0x2e7d1b(0xb2)]=handleTask,exports['runTaskHandlerLoop']=runTaskHandlerLoop,exports[a12_0x2e7d1b(0x163)]=saveTask;function a12_0x36aa(_0x51d7c2,_0x26b6be){_0x51d7c2=_0x51d7c2-0xae;const _0x16a0b1=a12_0x16a0();let _0x36aa31=_0x16a0b1[_0x51d7c2];return _0x36aa31;}const utils_ok_1=require(a12_0x2e7d1b(0x112)),fs_1=__importDefault(require('fs')),path_1=__importDefault(require(a12_0x2e7d1b(0x119))),child_process_1=require('child_process'),common_1=require(a12_0x2e7d1b(0x122)),messaging_1=require(a12_0x2e7d1b(0x15b)),claude_process_1=require('./claude-process'),session_1=require(a12_0x2e7d1b(0x153)),api_key_manager_1=require(a12_0x2e7d1b(0x123)),MAX_RETRY_COUNT=0x3;function formatTaskInfo(_0x2df6e9){const _0x5ee83a=a12_0x2e7d1b,_0x3f6489=[],_0x37d841=[],_0x2fa9b7=[],_0x69bfe7=[];for(const _0x549e8d of _0x2df6e9['config'][_0x5ee83a(0xc0)]){const _0x40f04a=(0x0,session_1[_0x5ee83a(0x116)])(_0x2df6e9,_0x549e8d['conversationId']);if(!fs_1['default'][_0x5ee83a(0x110)](_0x40f04a))continue;const _0x3f4ec8=utils_ok_1['fileUtil'][_0x5ee83a(0xdd)](_0x40f04a);for(const _0xfa38be of _0x3f4ec8){const _0x4ee91c=path_1['default'][_0x5ee83a(0xda)](_0xfa38be);try{const _0x53374b=utils_ok_1[_0x5ee83a(0x10c)][_0x5ee83a(0x103)](_0xfa38be);if(!_0x53374b)continue;if(_0x4ee91c===_0x5ee83a(0xc1))_0x3f6489[_0x5ee83a(0x145)](_0x53374b);else{if(_0x4ee91c===_0x5ee83a(0xbf))_0x37d841[_0x5ee83a(0x145)](_0x53374b);else{if(_0x4ee91c===_0x5ee83a(0x16b))_0x2fa9b7[_0x5ee83a(0x145)](_0x53374b);else _0x4ee91c===_0x5ee83a(0xf7)&&_0x69bfe7['push'](_0x53374b);}}}catch{}}}_0x3f6489[_0x5ee83a(0x11a)]((_0x10646f,_0x61fa71)=>_0x10646f['startTime']-_0x61fa71[_0x5ee83a(0xd0)]),_0x37d841[_0x5ee83a(0x11a)]((_0x18b703,_0x303e90)=>_0x18b703[_0x5ee83a(0xd0)]-_0x303e90[_0x5ee83a(0xd0)]),_0x2fa9b7[_0x5ee83a(0x11a)]((_0x1478c8,_0x1f3cbf)=>_0x1f3cbf[_0x5ee83a(0xd0)]-_0x1478c8[_0x5ee83a(0xd0)]),_0x69bfe7[_0x5ee83a(0x11a)]((_0x3ffc70,_0x586164)=>_0x586164[_0x5ee83a(0xd0)]-_0x3ffc70[_0x5ee83a(0xd0)]);const _0x18d068=[];if(_0x37d841[_0x5ee83a(0xed)]>0x0){const _0x92e721=_0x37d841['map'](_0xc9342d=>'#'+_0xc9342d[_0x5ee83a(0xd0)]+'\x20'+(_0xc9342d[_0x5ee83a(0xc4)]||_0xc9342d[_0x5ee83a(0x130)])+':\x20'+taskDisplayName(_0xc9342d));_0x18d068[_0x5ee83a(0x145)](_0x5ee83a(0xb9)+_0x37d841['length']+_0x5ee83a(0xf5)+_0x92e721[_0x5ee83a(0x143)]('\x0a'));}else _0x18d068['push'](_0x5ee83a(0x104));if(_0x3f6489[_0x5ee83a(0xed)]>0x0){const _0x9475df=_0x3f6489[_0x5ee83a(0xe1)](_0x555329=>'#'+_0x555329['startTime']+'\x20'+(_0x555329[_0x5ee83a(0xc4)]||_0x555329[_0x5ee83a(0x130)])+':\x20'+taskDisplayName(_0x555329));_0x18d068['push'](_0x5ee83a(0x13b)+_0x3f6489[_0x5ee83a(0xed)]+_0x5ee83a(0xf5)+_0x9475df[_0x5ee83a(0x143)]('\x0a'));}else _0x18d068[_0x5ee83a(0x145)]('**📋\x20待办队列**\x0a无');const _0x510815=_0x2fa9b7[_0x5ee83a(0xdb)](0x0,0x5);if(_0x510815['length']>0x0){const _0x2e3dd1=_0x510815[_0x5ee83a(0xe1)](_0x5ac895=>'#'+_0x5ac895[_0x5ee83a(0xd0)]+'\x20'+(_0x5ac895[_0x5ee83a(0xc4)]||_0x5ac895[_0x5ee83a(0x130)])+':\x20'+taskDisplayName(_0x5ac895));_0x18d068[_0x5ee83a(0x145)](_0x5ee83a(0x132)+_0x510815[_0x5ee83a(0xed)]+'/'+_0x2fa9b7[_0x5ee83a(0xed)]+_0x5ee83a(0xf5)+_0x2e3dd1[_0x5ee83a(0x143)]('\x0a'));}else _0x18d068[_0x5ee83a(0x145)](_0x5ee83a(0x139));if(_0x69bfe7[_0x5ee83a(0xed)]>0x0){const _0x3c9e86=_0x69bfe7['map'](_0x2e1cf1=>'#'+_0x2e1cf1[_0x5ee83a(0xd0)]+'\x20'+(_0x2e1cf1[_0x5ee83a(0xc4)]||_0x2e1cf1[_0x5ee83a(0x130)])+':\x20'+taskDisplayName(_0x2e1cf1)+(_0x2e1cf1[_0x5ee83a(0x14a)]?_0x5ee83a(0x14f)+_0x2e1cf1['retryCount']+'次)':''));_0x18d068[_0x5ee83a(0x145)](_0x5ee83a(0x129)+_0x69bfe7['length']+_0x5ee83a(0xf5)+_0x3c9e86[_0x5ee83a(0x143)]('\x0a'));}return _0x18d068['join']('\x0a\x0a');}function a12_0x16a0(){const _0x20e502=[']\x20任务预处理完成:\x20title=\x22',',\x20需求:\x20','❌\x20任务失败:\x20','7tcypMq','filter','getForceEnabledSettingsPath','output','getJSON','**⏳\x20处理中**\x0a无','12431728SabgyC','normal','parse','pipe',']\x20任务执行超时,重置为待办','sendDingMessage','抱歉,任务处理异常...','fileUtil','原始需求:\x20','stdout','getConversationDir','existsSync','config','utils-ok','已取消\x20','任务执行超时(10分钟),终止进程','taskCfg','getTasksDir','),使用原始prompt','unknown','path','sort',']\x20TPM\x20限流连续快速失败\x20','task',']\x20任务处理完成','--print','直接返回JSON,不要markdown代码块或其他内容。','48969jAUSMO','data','../common','./api-key-manager','indexOf','--agent','exitCode',']\x20执行命令:\x20','TPM限流快速失败次数过多','**❌\x20失败\x20(','424725QRATtL','addSuffixToFile',';\x20最后将回复内容保存至:\x20',']\x20任务预处理异常:','-failed.json','),\x20','senderStaffId','sessionWebhook','**✅\x20最近完成\x20(top\x20','getOneTodoTask','228792yQVEHs','__importDefault','dateUtil','/task-doing.json','--settings','**✅\x20最近完成**\x0a无','saveFileStr','**📋\x20待办队列\x20(','match','bypassPermissions','\x0a...共取消\x20','/task.json','.claude','-doing','resolveClaudeSettingsPath','join',']\x20预处理完成但任务文件已不存在:\x20','push',']\x20取消任务失败:\x20','676150lABCLG',']\x20更新任务重试计数失败:','timedOut','retryCount',']\x20检测到认证错误(401),标记任务失败','/result.md','ignore','title','\x20(重试','apiKey','pickValidApiKey','prompt','./session','cron','catch','kill','...','sleep','trim','isQuotaExhaustedError','./messaging','rename',']\x20无可用配额,任务重置为待办','markdown','close','171Tjbqrg','conversationId','s\x20后重试\x20(','saveTask',']\x20检测到\x20TPM\x20限流(进程已运行一段时间),重置快速失败计数,','__esModule','write','\x0a原因:\x20','认证失败(401),API\x20Key\x20无效或服务未授权','apiKeyCfg','SIGKILL','task-done.json','YYYY-MM-DD-HH-mm-ss',']\x20API\x20Key\x20配额耗尽(429),切换到新\x20Key:\x20','promptSimply','error',']\x20任务预处理结果已更新:\x20','handleTask','defineProperty','splice','skill','\x20用户:\x20','stderr','\x20个待办任务:\x0a','**⏳\x20处理中\x20(','stringify','):\x20','settings.json','进程执行错误:\x20','未发现待办任务...','task-doing.json','conversations','task.json','格式:\x20{\x22title\x22:\x22简短标题(15字以内)\x22,\x22promptSimply\x22:\x22优化后的需求描述,保留原始需求的所有关键信息,使描述更清晰、结构化\x22}','无可用配额','senderNickName','任务已保存:\x20','baseUtil',']\x20退出码:\x20','rotateApiKey','message','8WHKcNj',']\x20TPM\x20限流快速失败连续','🔄\x20开始处理任务:\x20','default','parseTaskCancelCommand','finishTask','startTime','debugLog','writeFileSync','utf-8','getConversationConfig','countTodoTask','任务未按预期处理','settingLabel','now','format','basename','slice','timestamp','dirWalker','toString',']\x20任务预处理失败(退出码:',']\x20任务处理中:\x20','map','type',']\x20任务预处理进程错误:','1457456CGlkIJ','elapsed','任务文件解析失败,跳过:\x20',']\x20切换到\x20API\x20Key\x20模式','spawn',']\x20任务重置为待办\x20(重试','任务目录不存在:\x20','getFileStr','未找到匹配的待办任务:\x20','length','log','-doing.json',']\x20已取消任务:\x20#','\x20个任务','SIGTERM','读取任务文件失败:\x20','replace',')**\x0a',']\x20任务预处理JSON解析失败,使用原始prompt:\x20','task-failed.json',']\x20任务重试次数已达上限(','3965832HytBOF',']\x20任务预处理返回格式不正确,使用原始prompt','ensureSettingsWithApiKey'];a12_0x16a0=function(){return _0x20e502;};return a12_0x16a0();}function truncatePrompt(_0x5b7279,_0x15519e=0x50){const _0x53dcc2=a12_0x2e7d1b,_0x4f1455=_0x5b7279[_0x53dcc2(0xf4)](/\n/g,'\x20')[_0x53dcc2(0x159)]();return _0x4f1455[_0x53dcc2(0xed)]>_0x15519e?_0x4f1455[_0x53dcc2(0xdb)](0x0,_0x15519e)+_0x53dcc2(0x157):_0x4f1455;}function taskDisplayName(_0x2e3197){const _0x42b83=a12_0x2e7d1b;if(_0x2e3197['title'])return _0x2e3197[_0x42b83(0x14e)];return truncatePrompt(_0x2e3197['prompt']);}async function preprocessTask(_0x7dd3e,_0x571428,_0x1d4df7){const _0x238a40=a12_0x2e7d1b,_0x4cf799=(0x0,session_1['getConversationDir'])(_0x7dd3e,_0x571428),_0x331cbe='claude',_0x53c362=['--permission-mode','bypassPermissions',_0x238a40(0x11e)],_0x5da332=(0x0,claude_process_1[_0x238a40(0x142)])(_0x7dd3e,_0x4cf799);_0x5da332&&_0x53c362[_0x238a40(0x145)](_0x238a40(0x138),_0x5da332);const _0x174d8b=['请对以下任务需求进行预处理,生成简短标题和优化后的需求描述。',_0x238a40(0x11f),_0x238a40(0xc2),'',_0x238a40(0x10d)+_0x1d4df7]['join']('\x0a');_0x53c362['push'](_0x174d8b);const _0x2b69cc=0x7530;return new Promise(_0x2005af=>{const _0x254409=_0x238a40;let _0x1df5e7='';const _0x1b33f9=(0x0,child_process_1[_0x254409(0xe8)])(_0x331cbe,_0x53c362,{'cwd':_0x4cf799,'stdio':[_0x254409(0x14d),_0x254409(0x108),_0x254409(0x108)]}),_0x2a1e22=setTimeout(()=>{const _0x579186=_0x254409;_0x1b33f9[_0x579186(0x156)](_0x579186(0xf2)),setTimeout(()=>{const _0x5e70b6=_0x579186;try{_0x1b33f9['kill'](_0x5e70b6(0x16a));}catch{}},0xbb8);},_0x2b69cc);_0x1b33f9[_0x254409(0x10e)]['on'](_0x254409(0x121),_0x325273=>{const _0x2605e8=_0x254409;_0x1df5e7+=_0x325273[_0x2605e8(0xde)]();}),_0x1b33f9['stderr']['on'](_0x254409(0x121),()=>{}),_0x1b33f9['on'](_0x254409(0x15f),_0x291c7c=>{const _0x10ac02=_0x254409;clearTimeout(_0x2a1e22);if(_0x291c7c!==0x0||!_0x1df5e7[_0x10ac02(0x159)]()){console[_0x10ac02(0xee)]('['+(0x0,session_1[_0x10ac02(0xdc)])()+_0x10ac02(0xdf)+_0x291c7c+_0x10ac02(0x117)),_0x2005af(null);return;}try{let _0x9ba4dd=_0x1df5e7[_0x10ac02(0x159)]();const _0x1a74fa=_0x9ba4dd[_0x10ac02(0x13c)](/\{[\s\S]*\}/);if(_0x1a74fa)_0x9ba4dd=_0x1a74fa[0x0];const _0x191109=JSON[_0x10ac02(0x107)](_0x9ba4dd);_0x191109[_0x10ac02(0x14e)]&&_0x191109[_0x10ac02(0xaf)]?(console[_0x10ac02(0xee)]('['+(0x0,session_1[_0x10ac02(0xdc)])()+_0x10ac02(0xfc)+_0x191109['title']+'\x22'),_0x2005af({'title':String(_0x191109[_0x10ac02(0x14e)]),'promptSimply':String(_0x191109[_0x10ac02(0xaf)])})):(console[_0x10ac02(0xee)]('['+(0x0,session_1[_0x10ac02(0xdc)])()+_0x10ac02(0xfa)),_0x2005af(null));}catch(_0x2cf787){console['log']('['+(0x0,session_1['timestamp'])()+_0x10ac02(0xf6)+_0x2cf787),_0x2005af(null);}}),_0x1b33f9['on'](_0x254409(0xb0),_0x265873=>{const _0x5bfe4e=_0x254409;clearTimeout(_0x2a1e22),console['error']('['+(0x0,session_1[_0x5bfe4e(0xdc)])()+_0x5bfe4e(0xe3),_0x265873),_0x2005af(null);});});}function countTodoTask(_0x4ae3c5){const _0x24114e=a12_0x2e7d1b;let _0x25f10a=0x0;for(const _0x1b5f42 of _0x4ae3c5[_0x24114e(0x111)][_0x24114e(0xc0)]){const _0x3553bd=(0x0,session_1[_0x24114e(0x116)])(_0x4ae3c5,_0x1b5f42[_0x24114e(0x161)]);if(fs_1[_0x24114e(0xcd)]['existsSync'](_0x3553bd)){const _0x2e6097=utils_ok_1['fileUtil'][_0x24114e(0xdd)](_0x3553bd),_0x4386bf=_0x2e6097[_0x24114e(0x100)](_0x37c39b=>path_1[_0x24114e(0xcd)][_0x24114e(0xda)](_0x37c39b)===_0x24114e(0xc1));_0x25f10a+=_0x4386bf[_0x24114e(0xed)];}}return _0x25f10a;}async function getOneTodoTask(_0x3bd48c){const _0x573a70=a12_0x2e7d1b;for(const _0x52bacc of _0x3bd48c['config'][_0x573a70(0xc0)]){const _0x564be3=(0x0,session_1[_0x573a70(0x116)])(_0x3bd48c,_0x52bacc['conversationId']);if(!fs_1[_0x573a70(0xcd)][_0x573a70(0x110)](_0x564be3))continue;const _0x2a0c42=utils_ok_1[_0x573a70(0x10c)][_0x573a70(0xdd)](_0x564be3),_0x4c9dfd=_0x2a0c42[_0x573a70(0x100)](_0x5ed639=>path_1[_0x573a70(0xcd)]['basename'](_0x5ed639)==='task.json');if(_0x4c9dfd[_0x573a70(0xed)]===0x0)continue;const _0x3ed1ad=_0x4c9dfd[_0x573a70(0xe1)](_0x153462=>{const _0x46c435=_0x573a70;try{const _0x2d4c96=utils_ok_1[_0x46c435(0x10c)][_0x46c435(0x103)](_0x153462);return _0x2d4c96?{'file':_0x153462,'task':_0x2d4c96}:null;}catch{return console['error'](_0x46c435(0xe6)+_0x153462),null;}})[_0x573a70(0x100)](_0x329add=>_0x329add!==null)[_0x573a70(0x11a)]((_0x5e89cd,_0x117813)=>_0x5e89cd[_0x573a70(0x11c)][_0x573a70(0xd0)]-_0x117813[_0x573a70(0x11c)][_0x573a70(0xd0)]);if(_0x3ed1ad[_0x573a70(0xed)]>0x0){const {file:_0x320b21,task:_0x110d35}=_0x3ed1ad[0x0];return common_1['utils'][_0x573a70(0x12b)](_0x320b21,_0x573a70(0x141)),_0x110d35;}}return undefined;}async function finishTask(_0x16def5,_0x2349ae){const _0x22044e=a12_0x2e7d1b,_0x7f7eea=_0x2349ae+_0x22044e(0x137);let _0x4ef465;try{_0x4ef465=utils_ok_1[_0x22044e(0x10c)]['getJSON'](_0x7f7eea);}catch(_0x560ea8){console['error'](_0x22044e(0xf3)+_0x7f7eea,_0x560ea8);return;}const _0x12a599=_0x2349ae+_0x22044e(0x14c),_0xb02f7f=fs_1['default'][_0x22044e(0x110)](_0x12a599)?utils_ok_1[_0x22044e(0x10c)][_0x22044e(0xeb)](_0x12a599):_0x22044e(0x10b);await(0x0,messaging_1[_0x22044e(0x10a)])(_0x16def5,{'conversationId':_0x4ef465[_0x22044e(0x161)],'sessionWebhook':_0x4ef465[_0x22044e(0x131)],'atUserId':_0x4ef465[_0x22044e(0x130)],'content':_0xb02f7f,'msgType':_0x22044e(0x15e)});const _0x4f4f22=_0x7f7eea['replace']('-doing.json','-done.json');utils_ok_1[_0x22044e(0x10c)]['rename'](_0x7f7eea,_0x4f4f22);}async function failTask(_0x41d2c5,_0x417e69,_0x30cc74){const _0x4fbcb4=a12_0x2e7d1b,_0x316e49=_0x417e69+_0x4fbcb4(0x137);let _0x4d4499;try{_0x4d4499=utils_ok_1['fileUtil'][_0x4fbcb4(0x103)](_0x316e49);}catch(_0x50307a){console['error'](_0x4fbcb4(0xf3)+_0x316e49,_0x50307a);return;}await(0x0,messaging_1['sendDingMessage'])(_0x41d2c5,{'conversationId':_0x4d4499[_0x4fbcb4(0x161)],'sessionWebhook':_0x4d4499['sessionWebhook'],'atUserId':_0x4d4499['senderStaffId'],'content':_0x4fbcb4(0xfe)+taskDisplayName(_0x4d4499)+_0x4fbcb4(0x167)+_0x30cc74,'msgType':_0x4fbcb4(0x15e)});const _0x1c48d2=_0x316e49['replace'](_0x4fbcb4(0xef),_0x4fbcb4(0x12e));utils_ok_1[_0x4fbcb4(0x10c)][_0x4fbcb4(0x15c)](_0x316e49,_0x1c48d2);}async function resetTaskToTodo(_0x1fad9a,_0x1c936c,_0x58a089){const _0x3b0329=a12_0x2e7d1b,_0x5b7986=_0x1c936c+_0x3b0329(0x137),_0x3eaf7b=_0x1c936c+_0x3b0329(0x13f);if(!fs_1[_0x3b0329(0xcd)][_0x3b0329(0x110)](_0x5b7986))return![];try{const _0x3c7643=utils_ok_1['fileUtil']['getJSON'](_0x5b7986),_0x3b4663=(_0x3c7643['retryCount']||0x0)+0x1;if(_0x3b4663>=MAX_RETRY_COUNT)return console[_0x3b0329(0xee)]('['+(0x0,session_1['timestamp'])()+_0x3b0329(0xf8)+_0x3b4663+'/'+MAX_RETRY_COUNT+'),标记为失败:\x20'+(_0x3c7643['title']||_0x3c7643[_0x3b0329(0x152)])),_0x3c7643[_0x3b0329(0x14a)]=_0x3b4663,fs_1[_0x3b0329(0xcd)]['writeFileSync'](_0x5b7986,JSON[_0x3b0329(0xba)](_0x3c7643,null,0x2),_0x3b0329(0xd3)),await failTask(_0x1fad9a,_0x1c936c,_0x58a089+'\x20(已重试'+_0x3b4663+'次)'),![];_0x3c7643[_0x3b0329(0x14a)]=_0x3b4663,fs_1[_0x3b0329(0xcd)][_0x3b0329(0xd2)](_0x5b7986,JSON[_0x3b0329(0xba)](_0x3c7643,null,0x2),_0x3b0329(0xd3)),console['log']('['+(0x0,session_1[_0x3b0329(0xdc)])()+_0x3b0329(0xe9)+_0x3b4663+'/'+MAX_RETRY_COUNT+_0x3b0329(0xbb)+(_0x3c7643[_0x3b0329(0x14e)]||_0x3c7643['prompt']));}catch(_0x717337){console[_0x3b0329(0xb0)]('['+(0x0,session_1[_0x3b0329(0xdc)])()+_0x3b0329(0x148),_0x717337);}return fs_1['default'][_0x3b0329(0x110)](_0x5b7986)&&utils_ok_1[_0x3b0329(0x10c)][_0x3b0329(0x15c)](_0x5b7986,_0x3eaf7b),!![];}function cancelTask(_0x1e742e,_0x120fd0,_0x59d0a8){const _0xd93c83=a12_0x2e7d1b,_0x4c6f69=[],_0x3d0e30=_0x120fd0[_0xd93c83(0x159)](),_0x2bb5ad=_0x59d0a8?_0x1e742e[_0xd93c83(0x111)][_0xd93c83(0xc0)][_0xd93c83(0x100)](_0x294087=>_0x294087[_0xd93c83(0x161)]===_0x59d0a8):_0x1e742e[_0xd93c83(0x111)][_0xd93c83(0xc0)];for(const _0x505431 of _0x2bb5ad){const _0x3171c7=(0x0,session_1[_0xd93c83(0x116)])(_0x1e742e,_0x505431[_0xd93c83(0x161)]);if(!fs_1[_0xd93c83(0xcd)][_0xd93c83(0x110)](_0x3171c7))continue;const _0xfe54d6=utils_ok_1[_0xd93c83(0x10c)][_0xd93c83(0xdd)](_0x3171c7),_0x14f7b1=_0xfe54d6[_0xd93c83(0x100)](_0x1c6b59=>path_1[_0xd93c83(0xcd)]['basename'](_0x1c6b59)===_0xd93c83(0xc1));for(const _0x5f3c2c of _0x14f7b1){try{const _0x335ea0=utils_ok_1[_0xd93c83(0x10c)]['getJSON'](_0x5f3c2c);if(!_0x335ea0)continue;if(String(_0x335ea0[_0xd93c83(0xd0)])===_0x3d0e30){_0x4c6f69['push']({'file':_0x5f3c2c,'task':_0x335ea0});continue;}if(_0x335ea0['title']&&_0x335ea0[_0xd93c83(0x14e)]['includes'](_0x3d0e30)){_0x4c6f69[_0xd93c83(0x145)]({'file':_0x5f3c2c,'task':_0x335ea0});continue;}}catch{}}}if(_0x4c6f69[_0xd93c83(0xed)]===0x0)return _0xd93c83(0xec)+_0x3d0e30;let _0x1557d3=0x0;for(const {file:_0x3e2e49,task:_0x248a04}of _0x4c6f69){try{fs_1[_0xd93c83(0xcd)]['unlinkSync'](_0x3e2e49),_0x1557d3++,console[_0xd93c83(0xee)]('['+(0x0,session_1[_0xd93c83(0xdc)])()+_0xd93c83(0xf0)+_0x248a04[_0xd93c83(0xd0)]+'\x20'+(_0x248a04[_0xd93c83(0x14e)]||_0x248a04[_0xd93c83(0x152)]));}catch(_0x402559){console[_0xd93c83(0xb0)]('['+(0x0,session_1[_0xd93c83(0xdc)])()+_0xd93c83(0x146)+_0x3e2e49,_0x402559);}}const _0x869ec4=_0x4c6f69[_0xd93c83(0xdb)](0x0,0x5)[_0xd93c83(0xe1)](_0x502e5e=>'#'+_0x502e5e['task'][_0xd93c83(0xd0)]+'\x20'+taskDisplayName(_0x502e5e[_0xd93c83(0x11c)]))[_0xd93c83(0x143)]('\x0a'),_0x22d048=_0x1557d3>0x5?_0xd93c83(0x13e)+_0x1557d3+_0xd93c83(0xf1):'';return _0xd93c83(0x113)+_0x1557d3+_0xd93c83(0xb8)+_0x869ec4+_0x22d048;}function parseTaskCancelCommand(_0xebea2){const _0x32fb27=a12_0x2e7d1b,_0x367d1b=_0xebea2[_0x32fb27(0x159)](),_0x48945d=_0x367d1b[_0x32fb27(0x13c)](/^\/task\s+cancel\s+(.+)$/i);return _0x48945d?_0x48945d[0x1]['trim']():null;}function updateCmdArgsSettings(_0x26fafe,_0x2aad57){const _0x4078d9=a12_0x2e7d1b,_0x244692=_0x26fafe[_0x4078d9(0x124)]('--settings');_0x244692!==-0x1&&_0x26fafe[_0x4078d9(0xb4)](_0x244692,0x2),_0x2aad57&&_0x26fafe[_0x4078d9(0x145)]('--settings',_0x2aad57);}async function handleTask(_0x498fb4){const _0x39e939=a12_0x2e7d1b,_0x9a094=await getOneTodoTask(_0x498fb4);if(!_0x9a094){(0x0,session_1[_0x39e939(0xd1)])(_0x498fb4,_0x39e939(0xbe));return;}const _0x4de60f=(0x0,session_1[_0x39e939(0xd4)])(_0x498fb4,_0x9a094[_0x39e939(0x161)]),_0x339ce8=(0x0,session_1[_0x39e939(0x10f)])(_0x498fb4,_0x9a094[_0x39e939(0x161)]),_0xe7fd5=(0x0,session_1['getTasksDir'])(_0x498fb4,_0x9a094['conversationId'])+'/'+_0x9a094['startTimeStr'];if(!fs_1['default'][_0x39e939(0x110)](_0xe7fd5)){console['error'](_0x39e939(0xea)+_0xe7fd5);return;}_0x9a094[_0x39e939(0xe2)]!==_0x39e939(0x154)&&await(0x0,messaging_1[_0x39e939(0x10a)])(_0x498fb4,{'conversationId':_0x9a094['conversationId'],'sessionWebhook':_0x9a094[_0x39e939(0x131)],'atUserId':_0x9a094[_0x39e939(0x130)],'content':_0x39e939(0xcc)+taskDisplayName(_0x9a094)});const _0x13c297=_0xe7fd5+_0x39e939(0x14c),_0x1c5a09=_0xe7fd5+'/task.log';console[_0x39e939(0xee)]('['+(0x0,session_1[_0x39e939(0xdc)])()+_0x39e939(0xe0)+(_0x9a094[_0x39e939(0x14e)]||_0x9a094[_0x39e939(0x152)]));const _0x4e0037=_0x9a094[_0x39e939(0xc4)]&&_0x9a094[_0x39e939(0x130)]?_0x9a094[_0x39e939(0xc4)]+'('+_0x9a094[_0x39e939(0x130)]+_0x39e939(0x12f):_0x39e939(0x118),_0x22f9df=_0x498fb4[_0x39e939(0x111)][_0x39e939(0x169)],_0x1aa2aa=(0x0,api_key_manager_1[_0x39e939(0x101)])(_0x339ce8);let _0x5ba62f=![],_0x2d34c3=null;if(_0x1aa2aa)console['log']('['+(0x0,session_1[_0x39e939(0xdc)])()+']\x20检测到\x20FORCE_ENABLE,强制使用\x20settings-ding.json');else{if(_0x22f9df){_0x2d34c3=(0x0,api_key_manager_1[_0x39e939(0x151)])(_0x498fb4);if(!_0x2d34c3){console[_0x39e939(0xee)]('['+(0x0,session_1[_0x39e939(0xdc)])()+_0x39e939(0x15d)),await resetTaskToTodo(_0x498fb4,_0xe7fd5,_0x39e939(0xc3));return;}_0x5ba62f=!![],console[_0x39e939(0xee)]('['+(0x0,session_1['timestamp'])()+_0x39e939(0xe7));}}const _0x430ffd=_0x4de60f?.[_0x39e939(0x115)]?.[_0x39e939(0xb5)],_0x380f78=_0x4de60f?.['agent'],_0x286ef1=_0x9a094[_0x39e939(0xaf)]||_0x9a094['prompt'],_0x5c5173=((_0x430ffd?'/'+_0x430ffd:'')+_0x39e939(0xb6)+_0x4e0037+_0x39e939(0xfd)+_0x286ef1+_0x39e939(0x12c)+_0x13c297)[_0x39e939(0x159)](),_0x546169=['--permission-mode',_0x39e939(0x13d),'--print',_0x5c5173];if(_0x1aa2aa)_0x546169[_0x39e939(0x145)]('--settings',_0x1aa2aa);else{if(_0x5ba62f&&_0x2d34c3){const _0x1d8955=(0x0,api_key_manager_1['ensureSettingsWithApiKey'])(_0x339ce8,_0x2d34c3);_0x546169[_0x39e939(0x145)](_0x39e939(0x138),_0x1d8955);}else{if(!_0x22f9df){const _0x39e4ff=path_1[_0x39e939(0xcd)]['join'](_0x339ce8,_0x39e939(0x140),_0x39e939(0xbc));fs_1[_0x39e939(0xcd)][_0x39e939(0x110)](_0x39e4ff)&&(_0x546169[_0x39e939(0x145)]('--settings',_0x39e4ff),console['log']('['+(0x0,session_1[_0x39e939(0xdc)])()+']\x20自动检测到\x20settings.json:\x20'+_0x39e4ff));}}}_0x380f78&&_0x546169[_0x39e939(0x145)](_0x39e939(0x125),_0x380f78);(0x0,session_1[_0x39e939(0xd1)])(_0x498fb4,'执行命令:\x20claude\x20'+_0x546169[_0x39e939(0x143)]('\x20'));const _0x39f159=0xa*0x3c*0x3e8,_0x4b9c80=0x14,_0x3beacf=0x2710,_0x1f42b6=0x2710,_0x5149c3='claude',_0x546417=_0x28fd19=>{const _0xf61af5=_0x39e939,_0x4c52af=Date[_0xf61af5(0xd8)]();return new Promise(_0x33f507=>{const _0x42db81=_0xf61af5,_0x3c3f7=[];let _0xbca95b=![],_0x12d047=![];const _0x1728c3=(0x0,child_process_1[_0x42db81(0xe8)])(_0x5149c3,_0x28fd19,{'cwd':_0x339ce8,'stdio':[_0x42db81(0x14d),'pipe',_0x42db81(0x108)]}),_0x14a1b7=setTimeout(()=>{const _0x2e79e0=_0x42db81;!_0xbca95b&&(_0x12d047=!![],console['error'](_0x2e79e0(0x114)),_0x1728c3[_0x2e79e0(0x156)]('SIGTERM'),setTimeout(()=>{const _0x55ee04=_0x2e79e0;if(!_0xbca95b)_0x1728c3['kill'](_0x55ee04(0x16a));},0x1388));},_0x39f159);_0x1728c3['stdout']['on'](_0x42db81(0x121),_0x3b8a5c=>{const _0x4f84fb=_0x42db81,_0x2d632a=_0x3b8a5c[_0x4f84fb(0xde)]();process['stdout'][_0x4f84fb(0x166)](_0x2d632a),_0x3c3f7[_0x4f84fb(0x145)](_0x2d632a);}),_0x1728c3['stderr']['on'](_0x42db81(0x121),_0x40feb7=>{const _0x4cfd13=_0x42db81,_0x2df737=_0x40feb7[_0x4cfd13(0xde)]();process[_0x4cfd13(0xb7)][_0x4cfd13(0x166)](_0x2df737),_0x3c3f7[_0x4cfd13(0x145)](_0x2df737);}),_0x1728c3['on']('close',_0x476aab=>{const _0x2d4c37=_0x42db81;_0xbca95b=!![],clearTimeout(_0x14a1b7),_0x33f507({'exitCode':_0x476aab??0x1,'output':_0x3c3f7['join'](''),'elapsed':Date[_0x2d4c37(0xd8)]()-_0x4c52af,'timedOut':_0x12d047});}),_0x1728c3['on']('error',_0x3a08d1=>{const _0x4a9112=_0x42db81;console[_0x4a9112(0xb0)]('进程执行错误:',_0x3a08d1),_0x3c3f7[_0x4a9112(0x145)](_0x4a9112(0xbd)+_0x3a08d1[_0x4a9112(0xc9)]);});});};let _0x334fde,_0x942b1f,_0x1787b1=![],_0x71aaf4=0x0;while(!![]){const _0x233345=await _0x546417(_0x546169);_0x334fde=_0x233345[_0x39e939(0x126)],_0x942b1f=_0x233345[_0x39e939(0x102)],_0x1787b1=_0x233345[_0x39e939(0x149)];if(_0x334fde!==0x0){if(_0x1787b1){console[_0x39e939(0xee)]('['+(0x0,session_1[_0x39e939(0xdc)])()+_0x39e939(0x109));const _0x2ba18c=['['+(0x0,session_1[_0x39e939(0xdc)])()+']\x20执行命令:\x20'+_0x5149c3+'\x20'+_0x546169[_0x39e939(0x143)]('\x20'),'['+(0x0,session_1[_0x39e939(0xdc)])()+']\x20超时('+_0x39f159/0x3e8+'s)',_0x942b1f]['join']('\x0a');fs_1[_0x39e939(0xcd)][_0x39e939(0xd2)](_0x1c5a09,_0x2ba18c),await resetTaskToTodo(_0x498fb4,_0xe7fd5,'执行超时');return;}if((0x0,api_key_manager_1[_0x39e939(0x15a)])(_0x942b1f)&&_0x22f9df){if(!_0x5ba62f){_0x2d34c3=(0x0,api_key_manager_1[_0x39e939(0x151)])(_0x498fb4);if(_0x2d34c3){_0x5ba62f=!![],_0x71aaf4=0x0;const _0x5eae94=(0x0,api_key_manager_1[_0x39e939(0xfb)])(_0x339ce8,_0x2d34c3);updateCmdArgsSettings(_0x546169,_0x5eae94),console[_0x39e939(0xee)]('['+(0x0,session_1['timestamp'])()+_0x39e939(0xe7));continue;}}else{if(_0x2d34c3){const _0x50f15a=(0x0,api_key_manager_1[_0x39e939(0xc8)])(_0x498fb4,_0x2d34c3[_0x39e939(0x150)]);if(_0x50f15a){_0x2d34c3=_0x50f15a,_0x71aaf4=0x0;const _0x388525=(0x0,api_key_manager_1[_0x39e939(0xfb)])(_0x339ce8,_0x2d34c3);updateCmdArgsSettings(_0x546169,_0x388525),console[_0x39e939(0xee)]('['+(0x0,session_1['timestamp'])()+_0x39e939(0xae)+(0x0,api_key_manager_1['settingLabel'])(_0x50f15a));continue;}}}console[_0x39e939(0xee)]('['+(0x0,session_1[_0x39e939(0xdc)])()+_0x39e939(0x15d));const _0xde9558=['['+(0x0,session_1['timestamp'])()+']\x20执行命令:\x20'+_0x5149c3+'\x20'+_0x546169[_0x39e939(0x143)]('\x20'),'['+(0x0,session_1[_0x39e939(0xdc)])()+_0x39e939(0xc7)+_0x334fde,_0x942b1f][_0x39e939(0x143)]('\x0a');fs_1['default'][_0x39e939(0xd2)](_0x1c5a09,_0xde9558),await resetTaskToTodo(_0x498fb4,_0xe7fd5,'无可用配额(429)');return;}if((0x0,api_key_manager_1['isAuthenticationError'])(_0x942b1f)){console['log']('['+(0x0,session_1[_0x39e939(0xdc)])()+_0x39e939(0x14b));const _0xc31041=['['+(0x0,session_1[_0x39e939(0xdc)])()+_0x39e939(0x127)+_0x5149c3+'\x20'+_0x546169[_0x39e939(0x143)]('\x20'),'['+(0x0,session_1['timestamp'])()+']\x20退出码:\x20'+_0x334fde,_0x942b1f]['join']('\x0a');fs_1[_0x39e939(0xcd)][_0x39e939(0xd2)](_0x1c5a09,_0xc31041),await failTask(_0x498fb4,_0xe7fd5,_0x39e939(0x168));return;}if((0x0,claude_process_1['isRetryableApiError'])(_0x942b1f)){if(_0x233345[_0x39e939(0xe5)]<_0x1f42b6&&_0x5ba62f&&_0x2d34c3&&_0x22f9df){_0x71aaf4++;if(_0x71aaf4>=_0x4b9c80){const _0x1b2865=(0x0,api_key_manager_1[_0x39e939(0xc8)])(_0x498fb4,_0x2d34c3[_0x39e939(0x150)]);if(_0x1b2865){_0x2d34c3=_0x1b2865,_0x71aaf4=0x0;const _0x216aed=(0x0,api_key_manager_1[_0x39e939(0xfb)])(_0x339ce8,_0x2d34c3);updateCmdArgsSettings(_0x546169,_0x216aed),console[_0x39e939(0xee)]('['+(0x0,session_1[_0x39e939(0xdc)])()+_0x39e939(0x11b)+_0x4b9c80+'\x20次,切换到新\x20Key:\x20'+(0x0,api_key_manager_1[_0x39e939(0xd7)])(_0x1b2865)),await utils_ok_1[_0x39e939(0xc6)][_0x39e939(0x158)](_0x3beacf);continue;}}}else{if(_0x233345['elapsed']<_0x1f42b6){_0x71aaf4++;if(_0x71aaf4>=_0x4b9c80){console[_0x39e939(0xee)]('['+(0x0,session_1[_0x39e939(0xdc)])()+_0x39e939(0xcb)+_0x4b9c80+'次,重置任务为待办');const _0x104dc7=['['+(0x0,session_1[_0x39e939(0xdc)])()+_0x39e939(0x127)+_0x5149c3+'\x20'+_0x546169['join']('\x20'),'['+(0x0,session_1[_0x39e939(0xdc)])()+']\x20退出码:\x20'+_0x334fde,_0x942b1f]['join']('\x0a');fs_1[_0x39e939(0xcd)][_0x39e939(0xd2)](_0x1c5a09,_0x104dc7),await resetTaskToTodo(_0x498fb4,_0xe7fd5,_0x39e939(0x128));return;}console[_0x39e939(0xee)]('['+(0x0,session_1[_0x39e939(0xdc)])()+']\x20检测到\x20TPM\x20限流(快速失败),'+_0x3beacf/0x3e8+_0x39e939(0x162)+_0x71aaf4+'/'+_0x4b9c80+')');}else _0x71aaf4=0x0,console[_0x39e939(0xee)]('['+(0x0,session_1[_0x39e939(0xdc)])()+_0x39e939(0x164)+_0x3beacf/0x3e8+'s\x20后重试');}await utils_ok_1[_0x39e939(0xc6)][_0x39e939(0x158)](_0x3beacf);continue;}}break;}const _0x3a69ac=['['+(0x0,session_1[_0x39e939(0xdc)])()+']\x20执行命令:\x20'+_0x5149c3+'\x20'+_0x546169[_0x39e939(0x143)]('\x20'),'['+(0x0,session_1[_0x39e939(0xdc)])()+_0x39e939(0xc7)+_0x334fde,_0x942b1f][_0x39e939(0x143)]('\x0a');fs_1[_0x39e939(0xcd)]['writeFileSync'](_0x1c5a09,_0x3a69ac);if(_0x334fde!==0x0){console[_0x39e939(0xb0)]('命令执行失败,\x20退出码:\x20'+_0x334fde),await failTask(_0x498fb4,_0xe7fd5,'执行失败(退出码:\x20'+_0x334fde+')');return;}if(fs_1['default'][_0x39e939(0x110)](_0x13c297))console[_0x39e939(0xee)]('['+(0x0,session_1[_0x39e939(0xdc)])()+_0x39e939(0x11d));else{console[_0x39e939(0xb0)](_0x39e939(0xd6)),await failTask(_0x498fb4,_0xe7fd5,'未生成结果文件');return;}await finishTask(_0x498fb4,_0xe7fd5);}async function runTaskHandlerLoop(_0x5f1a2f){const _0xd3a4b9=a12_0x2e7d1b;while(!![]){await handleTask(_0x5f1a2f)['catch'](_0x5c497a=>console['error'](_0x5c497a)),await utils_ok_1[_0xd3a4b9(0xc6)][_0xd3a4b9(0x158)](0x2710);}}async function saveTask(_0x24f64a,_0x49a3a1){const _0x4c67f7=a12_0x2e7d1b,{conversationId:_0x5b4fcd,prompt:_0x4606f5,senderStaffId:_0x5d8636,senderNickName:_0x2d0063,sessionWebhook:_0x4f87fc,type:type=_0x4c67f7(0x106)}=_0x49a3a1,_0x2cf293=Date['now'](),_0x30b070=utils_ok_1[_0x4c67f7(0x136)]['mm'](_0x2cf293)[_0x4c67f7(0xd9)](_0x4c67f7(0x16c)),_0xadf4c7=(0x0,session_1['getTasksDir'])(_0x24f64a,_0x5b4fcd)+'/'+_0x30b070,_0xe73409=_0xadf4c7+'/task.json',_0x1f69f9={'conversationId':_0x5b4fcd,'startTime':_0x2cf293,'startTimeStr':_0x30b070,'prompt':_0x4606f5,'senderStaffId':_0x5d8636,'senderNickName':_0x2d0063||'','sessionWebhook':_0x4f87fc,'type':type};await utils_ok_1[_0x4c67f7(0x10c)][_0x4c67f7(0x13a)](JSON[_0x4c67f7(0xba)](_0x1f69f9,null,0x2),_0xe73409),(0x0,session_1['debugLog'])(_0x24f64a,_0x4c67f7(0xc5)+_0xe73409),preprocessTask(_0x24f64a,_0x5b4fcd,_0x4606f5)['then'](_0x3e438a=>{const _0x10b2d7=_0x4c67f7;if(!_0x3e438a)return;try{const _0x395afa=_0xadf4c7+'/task-doing.json',_0x45bfff=fs_1['default'][_0x10b2d7(0x110)](_0x395afa)?_0x395afa:fs_1['default'][_0x10b2d7(0x110)](_0xe73409)?_0xe73409:null;if(!_0x45bfff){console[_0x10b2d7(0xee)]('['+(0x0,session_1['timestamp'])()+_0x10b2d7(0x144)+_0xadf4c7);return;}const _0x1b8298=utils_ok_1[_0x10b2d7(0x10c)][_0x10b2d7(0x103)](_0x45bfff);_0x1b8298['title']=_0x3e438a[_0x10b2d7(0x14e)],_0x1b8298[_0x10b2d7(0xaf)]=_0x3e438a['promptSimply'],fs_1['default'][_0x10b2d7(0xd2)](_0x45bfff,JSON[_0x10b2d7(0xba)](_0x1b8298,null,0x2),_0x10b2d7(0xd3)),console[_0x10b2d7(0xee)]('['+(0x0,session_1['timestamp'])()+_0x10b2d7(0xb1)+_0x3e438a['title']);}catch(_0xf31941){console[_0x10b2d7(0xb0)]('['+(0x0,session_1[_0x10b2d7(0xdc)])()+']\x20更新任务预处理结果失败:',_0xf31941);}})[_0x4c67f7(0x155)](_0x4911ba=>{const _0x269732=_0x4c67f7;console[_0x269732(0xb0)]('['+(0x0,session_1[_0x269732(0xdc)])()+_0x269732(0x12d),_0x4911ba);});}
|
|
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)})}
|
package/dist/src/biz/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
package/dist/src/common.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
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)}};
|
package/dist/src/constants.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
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
|
|
4
|
-
"description": "
|
|
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
|
-
"
|
|
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
|
package/resource/ocr-x64
ADDED
|
Binary file
|