cc-ding 0.0.5 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1,6 @@
1
- 'use strict';const a4_0x2c04fa=a4_0x4b4e;(function(_0x113ccc,_0x532c2d){const _0x217ba3=a4_0x4b4e,_0x3d0b40=_0x113ccc();while(!![]){try{const _0x56d54b=-parseInt(_0x217ba3(0x210))/0x1+parseInt(_0x217ba3(0x1bc))/0x2+-parseInt(_0x217ba3(0x1f3))/0x3+parseInt(_0x217ba3(0x18b))/0x4*(-parseInt(_0x217ba3(0x1af))/0x5)+parseInt(_0x217ba3(0x231))/0x6+-parseInt(_0x217ba3(0x225))/0x7*(parseInt(_0x217ba3(0x19e))/0x8)+-parseInt(_0x217ba3(0x1dd))/0x9;if(_0x56d54b===_0x532c2d)break;else _0x3d0b40['push'](_0x3d0b40['shift']());}catch(_0x4907ec){_0x3d0b40['push'](_0x3d0b40['shift']());}}}(a4_0x52ea,0x8f374));var __importDefault=this&&this['__importDefault']||function(_0x233b21){const _0x17c293=a4_0x4b4e;return _0x233b21&&_0x233b21[_0x17c293(0x186)]?_0x233b21:{'default':_0x233b21};};Object['defineProperty'](exports,'__esModule',{'value':!![]}),exports[a4_0x2c04fa(0x1f0)]=parseHelpCommand,exports[a4_0x2c04fa(0x1cb)]=parseCommandHelp,exports['getCommandByName']=getCommandByName,exports['formatHelpOverview']=formatHelpOverview,exports['formatCommandHelp']=formatCommandHelp,exports[a4_0x2c04fa(0x1c8)]=parseEndCommand,exports['parseInfoCommand']=parseInfoCommand,exports['formatConversationInfo']=formatConversationInfo,exports[a4_0x2c04fa(0x235)]=formatGlobalConfig,exports[a4_0x2c04fa(0x19d)]=parseLogCommand,exports['parseLsCommand']=parseLsCommand,exports[a4_0x2c04fa(0x19b)]=findSubdirByName,exports[a4_0x2c04fa(0x1ae)]=getDirectoryStructure,exports[a4_0x2c04fa(0x20a)]=parseContinueSessionCommand,exports[a4_0x2c04fa(0x207)]=parseCronCommand,exports['parsePwdCommand']=parsePwdCommand,exports[a4_0x2c04fa(0x21a)]=parseVersionCommand,exports['parseMkdirCommand']=parseMkdirCommand,exports['parseTouchCommand']=parseTouchCommand,exports[a4_0x2c04fa(0x1d3)]=parseRmCommand,exports['parseOpenCommand']=parseOpenCommand,exports[a4_0x2c04fa(0x1ea)]=parseCleanCommand,exports[a4_0x2c04fa(0x245)]=parseResetApiKeyCfgCommand,exports['parseCfgCommand']=parseCfgCommand,exports[a4_0x2c04fa(0x1c4)]=parseBashCommand,exports[a4_0x2c04fa(0x19a)]=parseMqCommand,exports[a4_0x2c04fa(0x1ee)]=parseAuthCommand;const fs_1=__importDefault(require('fs')),path_1=__importDefault(require(a4_0x2c04fa(0x221))),COMMAND_REGISTRY=[{'name':a4_0x2c04fa(0x229),'description':a4_0x2c04fa(0x197),'usage':a4_0x2c04fa(0x229),'examples':[a4_0x2c04fa(0x229)],'category':'系统'},{'name':a4_0x2c04fa(0x1c3),'description':a4_0x2c04fa(0x1cf),'usage':'/info\x20[robot|session|task]','examples':[a4_0x2c04fa(0x1c3),a4_0x2c04fa(0x1bb),a4_0x2c04fa(0x1db),a4_0x2c04fa(0x1ce)],'category':'系统'},{'name':a4_0x2c04fa(0x21c),'description':a4_0x2c04fa(0x243),'usage':a4_0x2c04fa(0x1bf),'examples':['/log',a4_0x2c04fa(0x1d4)],'category':'会话'},{'name':a4_0x2c04fa(0x17c),'description':a4_0x2c04fa(0x1be),'usage':'/new\x20[初始消息]','examples':['/new','/new\x20帮我分析一下这个项目'],'category':'会话'},{'name':a4_0x2c04fa(0x1d9),'description':a4_0x2c04fa(0x1d1),'usage':'/resume\x20[会话ID]','examples':[a4_0x2c04fa(0x1d9),'/resume\x20abc123'],'category':'会话'},{'name':a4_0x2c04fa(0x217),'description':a4_0x2c04fa(0x192),'usage':a4_0x2c04fa(0x217),'examples':['/end'],'category':'会话'},{'name':a4_0x2c04fa(0x244),'description':a4_0x2c04fa(0x236),'usage':'/task\x20<任务描述>','examples':[a4_0x2c04fa(0x23b)],'category':'任务'},{'name':a4_0x2c04fa(0x1e9),'description':a4_0x2c04fa(0x1b4),'usage':a4_0x2c04fa(0x1cd),'examples':[a4_0x2c04fa(0x1e9),'/mq\x20-n\x201','/mq\x20-n\x203',a4_0x2c04fa(0x1a5)],'category':'任务'},{'name':a4_0x2c04fa(0x234),'description':a4_0x2c04fa(0x18c),'usage':a4_0x2c04fa(0x23f),'examples':[a4_0x2c04fa(0x1e2),'/cron\x200\x209\x20*\x20*\x20*\x20查看dima任务','/cron\x20list',a4_0x2c04fa(0x1a7),a4_0x2c04fa(0x1b2)],'category':'任务'},{'name':a4_0x2c04fa(0x1aa),'description':a4_0x2c04fa(0x21e),'usage':a4_0x2c04fa(0x1aa),'examples':[a4_0x2c04fa(0x1aa)],'category':'文件'},{'name':a4_0x2c04fa(0x1b8),'description':'查看工作目录结构','usage':a4_0x2c04fa(0x1e7),'examples':['/ls',a4_0x2c04fa(0x18a),a4_0x2c04fa(0x205)],'category':'文件'},{'name':'/mkdir','description':'在工作目录下创建文件夹(支持相对路径,不能超出工作目录范围)','usage':a4_0x2c04fa(0x1e5),'examples':[a4_0x2c04fa(0x17a),a4_0x2c04fa(0x201),a4_0x2c04fa(0x18d)],'category':'文件'},{'name':'/touch','description':'在工作目录下创建空文件(支持相对路径,不能超出工作目录范围)','usage':a4_0x2c04fa(0x187),'examples':[a4_0x2c04fa(0x20b),a4_0x2c04fa(0x188),a4_0x2c04fa(0x179)],'category':'文件'},{'name':a4_0x2c04fa(0x212),'description':'删除工作目录下的文件或目录(支持相对路径,不能超出工作目录范围)','usage':a4_0x2c04fa(0x1ca),'examples':[a4_0x2c04fa(0x18f),'/rm\x20src/old.ts',a4_0x2c04fa(0x184)],'category':'文件'},{'name':'/version','description':a4_0x2c04fa(0x228),'usage':a4_0x2c04fa(0x226),'examples':['/version'],'category':'系统'},{'name':a4_0x2c04fa(0x1a8),'description':a4_0x2c04fa(0x194),'usage':a4_0x2c04fa(0x1f8),'examples':[a4_0x2c04fa(0x1a8),a4_0x2c04fa(0x1da)],'category':'管理','ownerOnly':!![]},{'name':a4_0x2c04fa(0x1c9),'description':a4_0x2c04fa(0x181),'usage':a4_0x2c04fa(0x1c9),'examples':[a4_0x2c04fa(0x1c9)],'category':'管理','ownerOnly':!![]},{'name':a4_0x2c04fa(0x1ad),'description':a4_0x2c04fa(0x22a),'usage':a4_0x2c04fa(0x1ad),'examples':[a4_0x2c04fa(0x1ad)],'category':'管理','ownerOnly':!![]},{'name':a4_0x2c04fa(0x230),'description':a4_0x2c04fa(0x1ef),'usage':'/cfg\x20[--conversationId\x20xxx]\x20[--dingToken\x20xxx]\x20[--linkConversationId\x20yyy]\x20[--whiteUserList\x20138xxxx,139xxxx]\x20[--conversationTitle\x20名称]\x20[--atSender\x20true|false]\x20[--receiveReply\x20true|false]\x20[--preBash\x20\x22命令\x22]','examples':[a4_0x2c04fa(0x230),a4_0x2c04fa(0x19c),a4_0x2c04fa(0x1e4),a4_0x2c04fa(0x1e3),a4_0x2c04fa(0x242),'/cfg\x20--receiveReply\x20false',a4_0x2c04fa(0x191),a4_0x2c04fa(0x223)],'category':'管理','ownerOnly':!![]},{'name':a4_0x2c04fa(0x185),'description':a4_0x2c04fa(0x21b),'usage':'/bash\x20<命令>','examples':[a4_0x2c04fa(0x21d),a4_0x2c04fa(0x209),a4_0x2c04fa(0x219)],'category':'文件'},{'name':'/auth','description':a4_0x2c04fa(0x1e0),'usage':'/auth\x20[add|del\x20<手机号或userId>]','examples':[a4_0x2c04fa(0x1fd),a4_0x2c04fa(0x22e),a4_0x2c04fa(0x183)],'category':'管理','ownerOnly':!![]}],CATEGORY_DISPLAY=[{'category':'会话','icon':'💬'},{'category':'任务','icon':'📋'},{'category':'文件','icon':'📂'},{'category':'系统','icon':'⚙️'},{'category':'管理','icon':'🔧'}];function parseHelpCommand(_0x1ab63e){const _0x39c70f=a4_0x2c04fa;return _0x1ab63e[_0x39c70f(0x1a6)]()[_0x39c70f(0x22b)]()===_0x39c70f(0x229);}function parseCommandHelp(_0x464c74){const _0x39334b=a4_0x2c04fa,_0x4f95f6=_0x464c74[_0x39334b(0x1a6)](),_0x257881=_0x4f95f6[_0x39334b(0x233)](/^(\/\w+)\s+--help$/i);if(!_0x257881)return null;return _0x257881[0x1][_0x39334b(0x22b)]();}function getCommandByName(_0x1e78fe){const _0x25cda7=a4_0x2c04fa,_0x470eb4=_0x1e78fe['toLowerCase']();return COMMAND_REGISTRY[_0x25cda7(0x1fe)](_0xe5490d=>_0xe5490d['name'][_0x25cda7(0x22b)]()===_0x470eb4||_0xe5490d[_0x25cda7(0x216)]?.[_0x25cda7(0x1c2)](_0x39b13f=>_0x39b13f[_0x25cda7(0x22b)]()===_0x470eb4));}function formatHelpOverview(_0x494260,_0x4df8d9){const _0x44a026=a4_0x2c04fa,_0x21d83d=COMMAND_REGISTRY[_0x44a026(0x1a0)](_0x36017f=>_0x4df8d9||!_0x36017f[_0x44a026(0x1c1)]),_0x3810bb=[_0x44a026(0x1ed),'----',_0x44a026(0x1d0)+_0x494260,'-\x20**作者:**\x20yihuineng','-\x20**Github:**\x20https://github.com/yihuineng/cc-ding',_0x44a026(0x196)];for(const {category:_0x2c5487,icon:_0x4227a6}of CATEGORY_DISPLAY){const _0x4446d2=_0x21d83d['filter'](_0x1e73a8=>_0x1e73a8[_0x44a026(0x1f7)]===_0x2c5487);if(_0x4446d2[_0x44a026(0x1a9)]===0x0)continue;_0x3810bb['push'](_0x4227a6+'\x20**'+_0x2c5487+'**');for(const _0x54dffa of _0x4446d2){_0x3810bb[_0x44a026(0x1f9)](_0x44a026(0x1f1)+_0x54dffa[_0x44a026(0x195)]+'`\x20'+_0x54dffa['description']);}_0x3810bb['push']('');}return _0x3810bb[_0x44a026(0x1f9)](_0x44a026(0x204)),_0x3810bb[_0x44a026(0x1dc)]('\x0a');}function formatCommandHelp(_0x2f3141){const _0x396e86=a4_0x2c04fa,_0x4b2b50=[_0x396e86(0x175)+_0x2f3141[_0x396e86(0x195)],'','**描述:**\x20'+_0x2f3141[_0x396e86(0x1f5)],'',_0x396e86(0x1eb)+_0x2f3141[_0x396e86(0x239)]+'`'];_0x2f3141[_0x396e86(0x216)]?.[_0x396e86(0x1a9)]&&_0x4b2b50['push']('',_0x396e86(0x240)+_0x2f3141[_0x396e86(0x216)][_0x396e86(0x1dc)](',\x20'));_0x4b2b50[_0x396e86(0x1f9)]('',_0x396e86(0x199));for(const _0x46810b of _0x2f3141[_0x396e86(0x17b)]){_0x4b2b50[_0x396e86(0x1f9)]('-\x20`'+_0x46810b+'`');}return _0x4b2b50[_0x396e86(0x1dc)]('\x0a');}function parseEndCommand(_0x2c4c98){const _0xda1585=a4_0x2c04fa;return _0x2c4c98[_0xda1585(0x1a6)]()[_0xda1585(0x22b)]()===_0xda1585(0x217);}function parseInfoCommand(_0x426a6c){const _0x2ce0fe=a4_0x2c04fa,_0x5d9ebd=_0x426a6c['trim']()[_0x2ce0fe(0x22b)]();if(_0x5d9ebd===_0x2ce0fe(0x1c3))return _0x2ce0fe(0x211);if(_0x5d9ebd==='/info\x20robot')return _0x2ce0fe(0x1e6);if(_0x5d9ebd==='/info\x20session')return _0x2ce0fe(0x17f);if(_0x5d9ebd==='/info\x20task')return'task';return null;}function formatConversationInfo(_0x1351b4,_0x4b0ee0,_0x3803b0,_0x49d006){const _0x3fc88d=a4_0x2c04fa,_0x2ca17a=[_0x3fc88d(0x20d)+_0x4b0ee0];if(_0x1351b4['conversationTitle'])_0x2ca17a['push'](_0x3fc88d(0x215)+_0x1351b4['conversationTitle']);if(_0x1351b4[_0x3fc88d(0x180)])_0x2ca17a['push'](_0x3fc88d(0x1ac)+(_0x1351b4[_0x3fc88d(0x180)]==='1'?'单聊':_0x1351b4[_0x3fc88d(0x180)]==='2'?'群聊':_0x1351b4[_0x3fc88d(0x180)]));if(_0x49d006)_0x2ca17a['push'](_0x3fc88d(0x1e8)+_0x49d006+'`');if(_0x1351b4[_0x3fc88d(0x1f2)])_0x2ca17a[_0x3fc88d(0x1f9)](_0x3fc88d(0x1e1)+_0x1351b4[_0x3fc88d(0x1f2)]);if(_0x1351b4['agent'])_0x2ca17a[_0x3fc88d(0x1f9)](_0x3fc88d(0x19f)+_0x1351b4[_0x3fc88d(0x238)]);if(_0x1351b4[_0x3fc88d(0x1ba)])_0x2ca17a[_0x3fc88d(0x1f9)](_0x3fc88d(0x220)+_0x1351b4[_0x3fc88d(0x1ba)][_0x3fc88d(0x1fc)](0x0,0x8)+_0x3fc88d(0x178));if(_0x1351b4[_0x3fc88d(0x1ec)]?.[_0x3fc88d(0x1a9)]){const _0x15320f=_0x1351b4[_0x3fc88d(0x1ec)][_0x3fc88d(0x1d6)](_0x1442d2=>{const _0x55c082=_0x3803b0?.(_0x1442d2);return _0x55c082||_0x1442d2;})['join'](',\x20');_0x2ca17a[_0x3fc88d(0x1f9)](_0x3fc88d(0x173)+_0x15320f);}if(_0x1351b4[_0x3fc88d(0x1df)]===![])_0x2ca17a[_0x3fc88d(0x1f9)]('-\x20**atSender:**\x20false');if(_0x1351b4[_0x3fc88d(0x213)]===![])_0x2ca17a[_0x3fc88d(0x1f9)](_0x3fc88d(0x218));if(_0x1351b4[_0x3fc88d(0x176)]===![])_0x2ca17a[_0x3fc88d(0x1f9)](_0x3fc88d(0x20f));if(_0x1351b4[_0x3fc88d(0x232)]?.[_0x3fc88d(0x174)])_0x2ca17a[_0x3fc88d(0x1f9)](_0x3fc88d(0x172)+_0x1351b4[_0x3fc88d(0x232)][_0x3fc88d(0x174)]);if(_0x1351b4[_0x3fc88d(0x1fa)])_0x2ca17a[_0x3fc88d(0x1f9)](_0x3fc88d(0x1a2)+_0x1351b4[_0x3fc88d(0x1fa)]+'`');return _0x2ca17a['join']('\x0a');}function formatGlobalConfig(_0x4f1ba3){const _0x3e94a1=a4_0x2c04fa,_0x582cee=['-\x20**clientName:**\x20'+(_0x4f1ba3[_0x3e94a1(0x1b0)]||'-'),_0x3e94a1(0x227)+(_0x4f1ba3[_0x3e94a1(0x1d2)]??0x5),_0x3e94a1(0x1fb)+(_0x4f1ba3['taskHandlerCount']??0x1),_0x3e94a1(0x23a)+(_0x4f1ba3['taskQueueSize']??0x32),_0x3e94a1(0x177)+(_0x4f1ba3['includeThinking']??![]),'-\x20**resultOnly:**\x20'+(_0x4f1ba3[_0x3e94a1(0x1d8)]??!![])];if(_0x4f1ba3[_0x3e94a1(0x193)])_0x582cee[_0x3e94a1(0x1f9)](_0x3e94a1(0x20c)+_0x4f1ba3[_0x3e94a1(0x193)][_0x3e94a1(0x1fc)](0x0,0x8)+_0x3e94a1(0x178));if(_0x4f1ba3[_0x3e94a1(0x1d7)])_0x582cee[_0x3e94a1(0x1f9)](_0x3e94a1(0x1b5)+_0x4f1ba3[_0x3e94a1(0x1d7)]);if(_0x4f1ba3[_0x3e94a1(0x1ec)]?.[_0x3e94a1(0x1a9)])_0x582cee[_0x3e94a1(0x1f9)](_0x3e94a1(0x171)+_0x4f1ba3['whiteUserList']['join'](',\x20'));if(_0x4f1ba3[_0x3e94a1(0x222)]){const _0x4320df=_0x4f1ba3[_0x3e94a1(0x222)][_0x3e94a1(0x1c6)][_0x3e94a1(0x1a0)](_0x17c651=>_0x17c651['isValid'])[_0x3e94a1(0x1a9)];_0x582cee[_0x3e94a1(0x1f9)]('-\x20**apiKeyCfg:**\x20'+_0x4320df+'/'+_0x4f1ba3['apiKeyCfg']['claudeSettings']['length']+_0x3e94a1(0x203)),_0x582cee[_0x3e94a1(0x1f9)]('\x20\x20-\x20**最近重置:**\x20'+(_0x4f1ba3[_0x3e94a1(0x222)][_0x3e94a1(0x1b9)]||'-'));}return _0x582cee[_0x3e94a1(0x1dc)]('\x0a');}function parseLogCommand(_0x1802f2){const _0x249850=_0x1802f2['trim'](),_0x246caa=_0x249850['match'](/^\/log(?:\s+(\d+))?$/i);if(!_0x246caa)return null;const _0x41b842=parseInt(_0x246caa[0x1],0xa);return isNaN(_0x41b842)||_0x41b842<=0x0?0xa:_0x41b842;}function parseLsCommand(_0x13ba37){const _0x360fbf=a4_0x2c04fa,_0x20ebdb=_0x13ba37[_0x360fbf(0x1a6)](),_0x5b7fa1=_0x20ebdb[_0x360fbf(0x233)](/^\/ls(?:\s+(.+))?$/i);if(!_0x5b7fa1)return null;if(_0x5b7fa1[0x1]===undefined)return{'target':'','depth':0x1};const _0x527262=_0x5b7fa1[0x1][_0x360fbf(0x1a6)]()[_0x360fbf(0x1c5)](/\s+/),_0x5879ef=_0x527262[0x0]||'',_0x15ee6c=_0x527262[0x1]?parseInt(_0x527262[0x1],0xa):0x1;return{'target':_0x5879ef,'depth':isNaN(_0x15ee6c)||_0x15ee6c<0x0?0x1:Math[_0x360fbf(0x22d)](_0x15ee6c,0x5)};}function findSubdirByName(_0x57772f,_0x268790,_0x35974e=0x3){const _0x312764=a4_0x2c04fa,_0x510a95=[{'dir':_0x57772f,'depth':0x0}];while(_0x510a95[_0x312764(0x1a9)]>0x0){const {dir:_0x19b53c,depth:_0x87a3be}=_0x510a95[_0x312764(0x20e)]();if(_0x87a3be>_0x35974e)continue;try{const _0x28dca1=fs_1[_0x312764(0x17d)]['readdirSync'](_0x19b53c,{'withFileTypes':!![]});for(const _0x272351 of _0x28dca1){if(!_0x272351[_0x312764(0x1cc)]()||_0x272351['name']['startsWith']('.'))continue;if(_0x272351['name']===_0x268790)return path_1[_0x312764(0x17d)][_0x312764(0x1dc)](_0x19b53c,_0x272351['name']);_0x510a95[_0x312764(0x1f9)]({'dir':path_1[_0x312764(0x17d)][_0x312764(0x1dc)](_0x19b53c,_0x272351[_0x312764(0x195)]),'depth':_0x87a3be+0x1});}}catch{continue;}}return null;}function getDirectoryStructure(_0x394490,_0xec51e1=0x0,_0x6170f1=0x1){const _0x239bcb=a4_0x2c04fa;try{const _0x2e5a92=fs_1[_0x239bcb(0x17d)][_0x239bcb(0x23c)](_0x394490,{'withFileTypes':!![]})['filter'](_0x5e2171=>!_0x5e2171['name']['startsWith']('.'));if(_0x2e5a92[_0x239bcb(0x1a9)]===0x0)return _0xec51e1===0x0?'📂\x20目录为空':'';_0x2e5a92[_0x239bcb(0x23e)]((_0x52c4bb,_0x8fc557)=>{const _0x592e28=_0x239bcb;if(_0x52c4bb['isDirectory']()!==_0x8fc557[_0x592e28(0x1cc)]())return _0x52c4bb[_0x592e28(0x1cc)]()?-0x1:0x1;return _0x52c4bb[_0x592e28(0x195)][_0x592e28(0x21f)](_0x8fc557['name']);});const _0x295727=[],_0x4bbdc5='.\x20'[_0x239bcb(0x200)](_0xec51e1);for(const _0x4d6966 of _0x2e5a92){const _0x3c2329=_0x4d6966['isDirectory']()?_0x239bcb(0x1b3):_0x239bcb(0x190),_0x33e359=_0x4d6966[_0x239bcb(0x1cc)]()?'/':'';_0x295727[_0x239bcb(0x1f9)](''+_0x4bbdc5+_0x3c2329+_0x4d6966[_0x239bcb(0x195)]+_0x33e359);if(_0x4d6966[_0x239bcb(0x1cc)]()&&_0xec51e1<_0x6170f1){const _0x13e57f=path_1[_0x239bcb(0x17d)][_0x239bcb(0x1dc)](_0x394490,_0x4d6966[_0x239bcb(0x195)]),_0x4b8ddf=getDirectoryStructure(_0x13e57f,_0xec51e1+0x1,_0x6170f1);_0x4b8ddf&&_0x295727[_0x239bcb(0x1f9)](_0x4b8ddf);}}return _0x295727[_0x239bcb(0x1dc)]('\x0a');}catch{return _0xec51e1===0x0?_0x239bcb(0x1d5):'';}}function parseContinueSessionCommand(_0x2922d1){const _0x2b64cb=a4_0x2c04fa,_0x19d28b=_0x2922d1[_0x2b64cb(0x1a6)]()['match'](/^\/resume(?:\s+(\S+))?$/i);if(!_0x19d28b)return null;return _0x19d28b[0x1]!==undefined?_0x19d28b[0x1]:'';}function looksLikeCronExpression(_0x14bc67){const _0x400e73=a4_0x2c04fa,_0x4041a8=_0x14bc67[_0x400e73(0x1a6)]()['split'](/\s+/);if(_0x4041a8[_0x400e73(0x1a9)]!==0x5)return![];return _0x4041a8[_0x400e73(0x1bd)](_0x9aedce=>/^[\d*/\-]+$/['test'](_0x9aedce));}function parseCronCommand(_0x106d08){const _0x3ab9c1=a4_0x2c04fa,_0x4adcb9=_0x106d08[_0x3ab9c1(0x1a6)]();if(!_0x4adcb9[_0x3ab9c1(0x22b)]()[_0x3ab9c1(0x198)](_0x3ab9c1(0x234)))return null;const _0x3007d2=_0x4adcb9[_0x3ab9c1(0x1fc)](0x5)[_0x3ab9c1(0x1a6)]();if(!_0x3007d2)return null;if(/^(list|ls)$/i[_0x3ab9c1(0x202)](_0x3007d2))return{'type':_0x3ab9c1(0x208)};const _0x3a5f2c=_0x3007d2[_0x3ab9c1(0x233)](/^(?:delete|rm)\s+(\S+)$/i);if(_0x3a5f2c)return{'type':_0x3ab9c1(0x206),'id':_0x3a5f2c[0x1]};const _0x5dffce=_0x3007d2[_0x3ab9c1(0x233)](/^pause\s+(\S+)$/i);if(_0x5dffce)return{'type':_0x3ab9c1(0x237),'id':_0x5dffce[0x1]};const _0x4e056e=_0x3007d2['match'](/^resume\s+(\S+)$/i);if(_0x4e056e)return{'type':_0x3ab9c1(0x22f),'id':_0x4e056e[0x1]};const _0x556597=_0x3007d2[_0x3ab9c1(0x233)](/^(\S+\s+\S+\s+\S+\s+\S+\s+\S+)\s+(.+)$/);if(_0x556597&&looksLikeCronExpression(_0x556597[0x1]))return{'type':_0x3ab9c1(0x22c),'cronExpression':_0x556597[0x1],'prompt':_0x556597[0x2]};return{'type':_0x3ab9c1(0x1ff),'input':_0x3007d2};}function parsePwdCommand(_0x42b1f9){return _0x42b1f9['trim']()==='/pwd';}function a4_0x4b4e(_0xba8c06,_0x53aee4){_0xba8c06=_0xba8c06-0x171;const _0x52eaeb=a4_0x52ea();let _0x4b4eea=_0x52eaeb[_0xba8c06];return _0x4b4eea;}function parseVersionCommand(_0x524f89){const _0x105147=a4_0x2c04fa;return _0x524f89['trim']()===_0x105147(0x226);}function parsePathCommand(_0x416f0b,_0x114e7c){const _0x8addb6=a4_0x2c04fa,_0x34e62b=_0x416f0b[_0x8addb6(0x1a6)](),_0xfb288d=_0x34e62b['match'](new RegExp(_0x8addb6(0x214)+_0x114e7c+'\x5cs+(.+)$'));if(!_0xfb288d)return null;const _0x2059b7=_0xfb288d[0x1][_0x8addb6(0x1a6)]();return _0x2059b7||null;}function parseMkdirCommand(_0x2e170d){const _0x53666f=a4_0x2c04fa;return parsePathCommand(_0x2e170d,_0x53666f(0x1ab));}function parseTouchCommand(_0x17ce71){const _0x166756=a4_0x2c04fa;return parsePathCommand(_0x17ce71,_0x166756(0x224));}function parseRmCommand(_0x27f467){return parsePathCommand(_0x27f467,'rm');}function a4_0x52ea(){const _0xfa9cff=['filter','/clean\x20all','-\x20**preBash:**\x20`','add','--atSender','/mq\x20-all','trim','/cron\x20pause\x20cron_123','/open','length','/pwd','mkdir','-\x20**会话类型:**\x20','/reset-apikeycfg','getDirectoryStructure','4835eoXbMV','clientName','conversationTitle','/cron\x20delete\x20cron_123','📁\x20','查看和管理当前会话消息队列(排队中的消息)','-\x20**owner:**\x20','current','replace','/ls','resetTime','dingToken','/info\x20robot','1260502CeJwzW','every','开始新的对话会话(结束当前会话)','/log\x20[行数]','cancel','ownerOnly','some','/info','parseBashCommand','split','claudeSettings','yes','parseEndCommand','/clean','/rm\x20<相对路径>','parseCommandHelp','isDirectory','/mq\x20|\x20/mq\x20-n\x20<数量>\x20|\x20/mq\x20-all','/info\x20task','查看群配置、会话和任务信息','-\x20**版本:**\x20','继续指定的历史会话(可指定会话ID,不指定则恢复最近一个)','sessionMaxConcurrency','parseRmCommand','/log\x2020','❌\x20无法读取目录','map','owner','resultOnly','/resume','/open\x20shell','/info\x20session','join','229311XbiyMV','true','atSender','管理当前群白名单(add/del,默认list)','-\x20**关联会话ID:**\x20','/cron\x20每天早上9点查看dima任务','/cfg\x20--whiteUserList\x2013800138000','/cfg\x20--conversationTitle\x20工作群','/mkdir\x20<相对路径>','robot','/ls\x20[目标目录]\x20[展开层数]','-\x20**工作目录:**\x20`','/mq','parseCleanCommand','**用法:**\x20`','whiteUserList','###\x20🤗','parseAuthCommand','注册当前群到配置,或刷新指定字段(已注册群)','parseHelpCommand','-\x20`','linkConversationId','1624077TTvdXV','shell','description','--dingToken','category','/open\x20[shell]','push','preBash','-\x20**taskHandlerCount:**\x20','substring','/auth','find','create_nl','repeat','/mkdir\x20src/components','test','\x20有效','💡\x20输入\x20`/{命令}\x20--help`\x20查看命令详细用法','/ls\x20product\x201','delete','parseCronCommand','list','/bash\x20pwd','parseContinueSessionCommand','/touch\x20README.md','-\x20**defaultDingToken:**\x20','-\x20**群ID:**\x20','shift','-\x20**本地OCR:**\x20关闭','260307mGklSQ','all','/rm','receiveReply','^\x5c/','-\x20**群名称:**\x20','aliases','/end','-\x20**receiveReply:**\x20false\x20(不回复确认消息)','/bash\x20git\x20status','parseVersionCommand','在工作目录执行\x20bash\x20命令(如配置了\x20preBash\x20全局/群级别,将叠加前置执行)','/log','/bash\x20ls\x20-la','显示当前工作目录的绝对路径','localeCompare','-\x20**dingToken:**\x20','path','apiKeyCfg','/cfg\x20--conversationId\x20targetConvId\x20--dingToken\x20xxx\x20--conversationTitle\x20目标群','touch','14UlRYPW','/version','-\x20**sessionMaxConcurrency:**\x20','查看工具版本信息','/help','重置API\x20Key配置(将所有Key标记为有效)','toLowerCase','create_cron','min','/auth\x20add\x2013800138000','resume','/cfg','5274612YmbEYq','taskCfg','match','/cron','formatGlobalConfig','提交任务到队列','pause','agent','usage','-\x20**taskQueueSize:**\x20','/task\x20帮我重构登录模块','readdirSync','del','sort','/cron\x20<自然语言描述>\x20|\x20/cron\x20<cron表达式>\x20<任务描述>\x20|\x20/cron\x20list|pause|resume|delete\x20<id>','**别名:**\x20','--conversationTitle','/cfg\x20--atSender\x20false','查看最近会话日志','/task','parseResetApiKeyCfgCommand','conversationId','--preBash','-\x20**全局白名单:**\x20','-\x20**taskSkill:**\x20','-\x20**群白名单:**\x20','skill','###\x20📖\x20','useLocalOcr','-\x20**includeThinking:**\x20','...','/touch\x20./config.json','/mkdir\x20src','examples','/new','default','--conversationId','session','conversationType','清除历史会话和缓存(.sessions/.tasks/.images)','folder','/auth\x20del\x2013800138000','/rm\x20./docs/obsolete/','/bash','__esModule','/touch\x20<相对路径>','/touch\x20src/cc-ding-cli.ts','--whiteUserList','/ls\x20root\x202','8CpoaYR','创建和管理定时任务(Claude自动分析自然语言)','/mkdir\x20./docs','--receiveReply','/rm\x20temp.txt','📄\x20','/cfg\x20--preBash\x20\x22source\x20.env\x22','结束当前会话','defaultDingToken','在文件管理器或终端中打开工作目录','name','----','查看所有可用命令','startsWith','**示例:**','parseMqCommand','findSubdirByName','/cfg\x20--dingToken\x20myToken\x20--whiteUserList\x2013800138000,13900139000','parseLogCommand','374648pqyLiY','-\x20**agent:**\x20'];a4_0x52ea=function(){return _0xfa9cff;};return a4_0x52ea();}function parseOpenCommand(_0x24768d){const _0x2b6e01=a4_0x2c04fa,_0x4ada47=_0x24768d[_0x2b6e01(0x1a6)]()[_0x2b6e01(0x22b)]();if(_0x4ada47==='/open')return _0x2b6e01(0x182);if(_0x4ada47==='/open\x20shell')return _0x2b6e01(0x1f4);return null;}function parseCleanCommand(_0x4f82e3){const _0x12c3d2=a4_0x2c04fa,_0x589daf=_0x4f82e3['trim']()[_0x12c3d2(0x22b)]();if(_0x589daf===_0x12c3d2(0x1c9))return _0x12c3d2(0x1b6);if(_0x589daf===_0x12c3d2(0x1a1))return _0x12c3d2(0x211);return null;}function parseResetApiKeyCfgCommand(_0x2de0a7){const _0x5de75d=a4_0x2c04fa;return _0x2de0a7['trim']()[_0x5de75d(0x22b)]()==='/reset-apikeycfg';}function parseCfgCommand(_0x4f1c7d){const _0x624d84=a4_0x2c04fa,_0x27fadc=_0x4f1c7d['trim']();if(!/^\/cfg(?:\s|$)/i[_0x624d84(0x202)](_0x27fadc))return null;const _0x56a233=_0x27fadc[_0x624d84(0x1fc)](0x4)[_0x624d84(0x1a6)]();if(!_0x56a233)return{};if(/^--help$/i[_0x624d84(0x202)](_0x56a233))return null;const _0x3c430d={},_0x64a4=_0x56a233[_0x624d84(0x1c5)](/\s+/);for(let _0x3ec26d=0x0;_0x3ec26d<_0x64a4[_0x624d84(0x1a9)];_0x3ec26d++){const _0x2fa933=_0x64a4[_0x3ec26d];if(_0x2fa933===_0x624d84(0x1f6)&&_0x64a4[_0x3ec26d+0x1])_0x3c430d[_0x624d84(0x1ba)]=_0x64a4[++_0x3ec26d];else{if(_0x2fa933==='--linkConversationId'&&_0x64a4[_0x3ec26d+0x1])_0x3c430d['linkConversationId']=_0x64a4[++_0x3ec26d];else{if(_0x2fa933===_0x624d84(0x17e)&&_0x64a4[_0x3ec26d+0x1])_0x3c430d[_0x624d84(0x246)]=_0x64a4[++_0x3ec26d];else{if(_0x2fa933===_0x624d84(0x189)&&_0x64a4[_0x3ec26d+0x1])_0x3c430d[_0x624d84(0x1ec)]=_0x64a4[++_0x3ec26d][_0x624d84(0x1c5)](',')['map'](_0x4ab01b=>_0x4ab01b[_0x624d84(0x1a6)]())[_0x624d84(0x1a0)](Boolean);else{if(_0x2fa933===_0x624d84(0x241)&&_0x64a4[_0x3ec26d+0x1]){const _0x48154c=[];while(_0x3ec26d+0x1<_0x64a4[_0x624d84(0x1a9)]&&!_0x64a4[_0x3ec26d+0x1][_0x624d84(0x198)]('--')){_0x48154c['push'](_0x64a4[++_0x3ec26d]);}_0x48154c[_0x624d84(0x1a9)]>0x0&&(_0x3c430d[_0x624d84(0x1b1)]=_0x48154c['join']('\x20'));}else{if(_0x2fa933===_0x624d84(0x1a4)&&_0x64a4[_0x3ec26d+0x1]){const _0x4ef25a=_0x64a4[++_0x3ec26d][_0x624d84(0x22b)]();_0x3c430d[_0x624d84(0x1df)]=_0x4ef25a==='true'||_0x4ef25a==='1'||_0x4ef25a===_0x624d84(0x1c7);}else{if(_0x2fa933===_0x624d84(0x18e)&&_0x64a4[_0x3ec26d+0x1]){const _0x942419=_0x64a4[++_0x3ec26d][_0x624d84(0x22b)]();_0x3c430d['receiveReply']=_0x942419===_0x624d84(0x1de)||_0x942419==='1'||_0x942419==='yes';}else{if(_0x2fa933===_0x624d84(0x247)&&_0x64a4[_0x3ec26d+0x1]){const _0x3189b2=[];while(_0x3ec26d+0x1<_0x64a4['length']&&!_0x64a4[_0x3ec26d+0x1]['startsWith']('--')){_0x3189b2[_0x624d84(0x1f9)](_0x64a4[++_0x3ec26d]);}_0x3189b2[_0x624d84(0x1a9)]>0x0&&(_0x3c430d[_0x624d84(0x1fa)]=_0x3189b2[_0x624d84(0x1dc)]('\x20')[_0x624d84(0x1b7)](/^["']|["']$/g,''));}}}}}}}}}return _0x3c430d;}function parseBashCommand(_0x22c1bb){const _0x566869=a4_0x2c04fa,_0x2aae48=_0x22c1bb[_0x566869(0x1a6)](),_0x4a4f37=_0x2aae48[_0x566869(0x233)](/^\/bash\s+(.+)$/i);if(!_0x4a4f37)return null;const _0x709973=_0x4a4f37[0x1]['trim']();return _0x709973||null;}function parseMqCommand(_0x554b65){const _0x1b69c7=a4_0x2c04fa,_0x53c51a=_0x554b65['trim']();if(!/^\/mq(?:\s|$)/i[_0x1b69c7(0x202)](_0x53c51a)&&_0x53c51a['toLowerCase']()!==_0x1b69c7(0x1e9))return null;const _0x2821a8=_0x53c51a[_0x1b69c7(0x1fc)](0x3)[_0x1b69c7(0x1a6)]();if(!_0x2821a8)return{'type':'list'};const _0x110caa=_0x2821a8[_0x1b69c7(0x233)](/^-n\s+(\d+)$/i);if(_0x110caa){const _0x5990b8=parseInt(_0x110caa[0x1],0xa);return _0x5990b8>0x0?{'type':_0x1b69c7(0x1c0),'count':_0x5990b8}:{'type':_0x1b69c7(0x208)};}if(/^-all$/i['test'](_0x2821a8))return{'type':'cancelAll'};return null;}function parseAuthCommand(_0x2da8df){const _0x3daf68=a4_0x2c04fa,_0x38aca6=_0x2da8df[_0x3daf68(0x1a6)](),_0x300933=_0x38aca6[_0x3daf68(0x233)](/^\/auth\s+add\s+(\S+)$/i);if(_0x300933)return{'type':_0x3daf68(0x1a3),'staffId':_0x300933[0x1]};const _0x3ff06b=_0x38aca6[_0x3daf68(0x233)](/^\/auth\s+del(?:ete)?\s+(\S+)$/i);if(_0x3ff06b)return{'type':_0x3daf68(0x23d),'staffId':_0x3ff06b[0x1]};if(/^\/auth(?:\s+list)?$/i[_0x3daf68(0x202)](_0x38aca6))return{'type':_0x3daf68(0x208)};return null;}
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseHelpCommand=parseHelpCommand,exports.parseCommandHelp=parseCommandHelp,exports.getCommandByName=getCommandByName,exports.formatHelpOverview=formatHelpOverview,exports.formatCommandHelp=formatCommandHelp,exports.parseEndCommand=parseEndCommand,exports.parseInfoCommand=parseInfoCommand,exports.formatConversationInfo=formatConversationInfo,exports.formatGlobalConfig=formatGlobalConfig,exports.parseLogCommand=parseLogCommand,exports.parseLsCommand=parseLsCommand,exports.findSubdirByName=findSubdirByName,exports.getDirectoryStructure=getDirectoryStructure,exports.parseContinueSessionCommand=parseContinueSessionCommand,exports.parseCronCommand=parseCronCommand,exports.parsePwdCommand=parsePwdCommand,exports.parseVersionCommand=parseVersionCommand,exports.parseMkdirCommand=parseMkdirCommand,exports.parseTouchCommand=parseTouchCommand,exports.parseRmCommand=parseRmCommand,exports.parseOpenCommand=parseOpenCommand,exports.parseCleanCommand=parseCleanCommand,exports.parseResetApiKeyCfgCommand=parseResetApiKeyCfgCommand,exports.parseCfgCommand=parseCfgCommand,exports.parseBashCommand=parseBashCommand,exports.parseMqCommand=parseMqCommand,exports.parseAuthCommand=parseAuthCommand,exports.parseRecorderCommand=parseRecorderCommand,exports.parseGoonCommand=parseGoonCommand,exports.parseCcCommand=parseCcCommand,exports.parseClaudeMdCommand=parseClaudeMdCommand,exports.parseInterruptCommand=parseInterruptCommand,exports.parseTodoCommand=parseTodoCommand,exports.parseMenuCommand=parseMenuCommand,exports.parseRebootCommand=parseRebootCommand,exports.parseRecorderCommandEnhanced=parseRecorderCommandEnhanced;const fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),COMMAND_REGISTRY=[{name:"/help",description:"\u67E5\u770B\u6240\u6709\u53EF\u7528\u547D\u4EE4",usage:"/help",examples:["/help"],category:"\u7CFB\u7EDF"},{name:"/info",description:"\u67E5\u770B\u7FA4\u914D\u7F6E\u3001\u4F1A\u8BDD\u548C\u4EFB\u52A1\u4FE1\u606F",usage:"/info [robot|session|task]",examples:["/info","/info robot","/info session","/info task"],category:"\u7CFB\u7EDF"},{name:"/log",description:"\u67E5\u770B\u6700\u8FD1\u4F1A\u8BDD\u65E5\u5FD7",usage:"/log [\u884C\u6570]",examples:["/log","/log 20"],category:"\u4F1A\u8BDD"},{name:"/new",description:"\u5F00\u59CB\u65B0\u7684\u5BF9\u8BDD\u4F1A\u8BDD(\u7ED3\u675F\u5F53\u524D\u4F1A\u8BDD)",usage:"/new [\u521D\u59CB\u6D88\u606F]",examples:["/new","/new \u5E2E\u6211\u5206\u6790\u4E00\u4E0B\u8FD9\u4E2A\u9879\u76EE"],category:"\u4F1A\u8BDD"},{name:"/resume",description:"\u7EE7\u7EED\u6307\u5B9A\u7684\u5386\u53F2\u4F1A\u8BDD(\u53EF\u6307\u5B9A\u4F1A\u8BDDID,\u4E0D\u6307\u5B9A\u5219\u6062\u590D\u6700\u8FD1\u4E00\u4E2A)",usage:"/resume [\u4F1A\u8BDDID]",examples:["/resume","/resume abc123"],category:"\u4F1A\u8BDD"},{name:"/end",description:"\u7ED3\u675F\u5F53\u524D\u4F1A\u8BDD",usage:"/end",examples:["/end"],category:"\u4F1A\u8BDD"},{name:"/goon",description:'\u5F3A\u5236\u91CD\u542F Claude \u8FDB\u7A0B\u5E76\u53D1\u9001"\u7EE7\u7EED"\u6062\u590D\u6267\u884C',usage:"/goon",examples:["/goon"],category:"\u4F1A\u8BDD"},{name:"/cc",description:"\u76F4\u63A5\u900F\u4F20\u6D88\u606F\u7ED9 Claude\uFF08\u4E0D\u9644\u52A0\u53D1\u9001\u4EBA\u4FE1\u606F\uFF09",usage:"/cc <\u6D88\u606F>",examples:["/cc \u7EE7\u7EED","/cc /compact"],category:"\u4F1A\u8BDD"},{name:"/task",description:"\u63D0\u4EA4\u4EFB\u52A1\u5230\u961F\u5217",usage:"/task <\u4EFB\u52A1\u63CF\u8FF0>",examples:["/task \u5E2E\u6211\u91CD\u6784\u767B\u5F55\u6A21\u5757"],category:"\u4EFB\u52A1"},{name:"/mq",description:"\u67E5\u770B\u548C\u7BA1\u7406\u5F53\u524D\u4F1A\u8BDD\u6D88\u606F\u961F\u5217",usage:"/mq | /mq front | /mq rm <\u5E8F\u53F7> | /mq rm <1-3> | /mq -n <\u6570\u91CF> | /mq -all",examples:["/mq","/mq front","/mq rm 1","/mq rm 1-3","/mq rm 1 3 5","/mq -n 1","/mq -all"],category:"\u4EFB\u52A1"},{name:"/cron",description:"\u521B\u5EFA\u548C\u7BA1\u7406\u5B9A\u65F6\u4EFB\u52A1(Claude\u81EA\u52A8\u5206\u6790\u81EA\u7136\u8BED\u8A00)",usage:"/cron <\u81EA\u7136\u8BED\u8A00\u63CF\u8FF0> | /cron <cron\u8868\u8FBE\u5F0F> <\u4EFB\u52A1\u63CF\u8FF0> | /cron list|pause|resume|delete <id>",examples:["/cron \u6BCF\u5929\u65E9\u4E0A9\u70B9\u67E5\u770Bdima\u4EFB\u52A1","/cron 0 9 * * * \u67E5\u770Bdima\u4EFB\u52A1","/cron list","/cron pause cron_123","/cron delete cron_123"],category:"\u4EFB\u52A1"},{name:"/pwd",description:"\u663E\u793A\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u7684\u7EDD\u5BF9\u8DEF\u5F84",usage:"/pwd",examples:["/pwd"],category:"\u6587\u4EF6"},{name:"/ls",description:"\u67E5\u770B\u5DE5\u4F5C\u76EE\u5F55\u7ED3\u6784",usage:"/ls [\u76EE\u6807\u76EE\u5F55] [\u5C55\u5F00\u5C42\u6570]",examples:["/ls","/ls root 2","/ls product 1"],category:"\u6587\u4EF6"},{name:"/mkdir",description:"\u5728\u5DE5\u4F5C\u76EE\u5F55\u4E0B\u521B\u5EFA\u6587\u4EF6\u5939\uFF08\u652F\u6301\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u4E0D\u80FD\u8D85\u51FA\u5DE5\u4F5C\u76EE\u5F55\u8303\u56F4\uFF09",usage:"/mkdir <\u76F8\u5BF9\u8DEF\u5F84>",examples:["/mkdir src","/mkdir src/components","/mkdir ./docs"],category:"\u6587\u4EF6"},{name:"/touch",description:"\u5728\u5DE5\u4F5C\u76EE\u5F55\u4E0B\u521B\u5EFA\u7A7A\u6587\u4EF6\uFF08\u652F\u6301\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u4E0D\u80FD\u8D85\u51FA\u5DE5\u4F5C\u76EE\u5F55\u8303\u56F4\uFF09",usage:"/touch <\u76F8\u5BF9\u8DEF\u5F84>",examples:["/touch README.md","/touch src/cc-ding-cli.ts","/touch ./config.json"],category:"\u6587\u4EF6"},{name:"/rm",description:"\u5220\u9664\u5DE5\u4F5C\u76EE\u5F55\u4E0B\u7684\u6587\u4EF6\u6216\u76EE\u5F55\uFF08\u652F\u6301\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u4E0D\u80FD\u8D85\u51FA\u5DE5\u4F5C\u76EE\u5F55\u8303\u56F4\uFF09",usage:"/rm <\u76F8\u5BF9\u8DEF\u5F84>",examples:["/rm temp.txt","/rm src/old.ts","/rm ./docs/obsolete/"],category:"\u6587\u4EF6"},{name:"/claude.md",description:"\u67E5\u770B\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u7684 CLAUDE.md \u6587\u4EF6\u5185\u5BB9",usage:"/claude.md",examples:["/claude.md"],category:"\u6587\u4EF6"},{name:"/version",description:"\u67E5\u770B\u5DE5\u5177\u7248\u672C\u4FE1\u606F",usage:"/version",examples:["/version"],category:"\u7CFB\u7EDF"},{name:"/open",description:"\u5728\u6587\u4EF6\u7BA1\u7406\u5668\u3001\u7EC8\u7AEF\u6216VS Code\u4E2D\u6253\u5F00\u5DE5\u4F5C\u76EE\u5F55",usage:"/open [shell|code]",examples:["/open","/open shell","/open code"],category:"\u7BA1\u7406",ownerOnly:!0},{name:"/clean",description:"\u6E05\u9664\u5386\u53F2\u4F1A\u8BDD\u548C\u7F13\u5B58(.sessions/.tasks/.images/.playwright-cli)",usage:"/clean",examples:["/clean"],category:"\u7BA1\u7406",ownerOnly:!0},{name:"/reset-apikeycfg",description:"\u91CD\u7F6EAPI Key\u914D\u7F6E(\u5C06\u6240\u6709Key\u6807\u8BB0\u4E3A\u6709\u6548)",usage:"/reset-apikeycfg",examples:["/reset-apikeycfg"],category:"\u7BA1\u7406",ownerOnly:!0},{name:"/cfg",description:"\u6CE8\u518C\u5F53\u524D\u7FA4\u5230\u914D\u7F6E\uFF0C\u6216\u5237\u65B0\u6307\u5B9A\u5B57\u6BB5(\u5DF2\u6CE8\u518C\u7FA4)",usage:'/cfg [--conversationId xxx] [--dingToken xxx] [--linkConversationId yyy] [--whiteUserList 138xxxx,139xxxx] [--conversationTitle \u540D\u79F0] [--atSender true|false] [--receiveReply true|false] [--preBash "\u547D\u4EE4"]',examples:["/cfg","/cfg --dingToken myToken --whiteUserList 13800138000,13900139000","/cfg --conversationTitle \u5DE5\u4F5C\u7FA4","/cfg --whiteUserList 13800138000","/cfg --atSender false","/cfg --receiveReply false",'/cfg --preBash "source .env"',"/cfg --conversationId targetConvId --dingToken xxx --conversationTitle \u76EE\u6807\u7FA4"],category:"\u7BA1\u7406",ownerOnly:!0},{name:"/bash",description:"\u5728\u5DE5\u4F5C\u76EE\u5F55\u6267\u884C bash \u547D\u4EE4\uFF08\u5982\u914D\u7F6E\u4E86 preBash \u5168\u5C40/\u7FA4\u7EA7\u522B\uFF0C\u5C06\u53E0\u52A0\u524D\u7F6E\u6267\u884C\uFF09",usage:"/bash <\u547D\u4EE4>",examples:["/bash ls -la","/bash pwd","/bash git status"],category:"\u6587\u4EF6"},{name:"/auth",description:"\u7BA1\u7406\u767D\u540D\u5355\u548C\u7BA1\u7406\u5458(add/del/rm/admin,\u9ED8\u8BA4list)",usage:"/auth [add|del|rm <\u624B\u673A\u53F7\u6216userId>] | /auth admin [add|rm <\u624B\u673A\u53F7\u6216userId>] | /auth [approve|reject <requestId>]",examples:["/auth","/auth add 13800138000","/auth rm 13800138000","/auth admin add 13800138000","/auth admin rm 13800138000","/auth admin","/auth approve r1234"],category:"\u7BA1\u7406",ownerOnly:!0},{name:"/recorder",aliases:["/r"],description:"Recorder \u6A21\u5F0F\uFF1A\u8BB0\u5F55\u6240\u6709\u6D88\u606F\u5230\u672C\u5730\uFF08\u4EC5 owner \u5355\u804A\uFF09",usage:"/recorder [on|exit]",examples:["/recorder on","/recorder exit","/r on","/r exit"],category:"\u7BA1\u7406",ownerOnly:!0},{name:"/todo",description:"\u5F85\u529E\u7BA1\u7406\uFF1A\u6DFB\u52A0/\u5B8C\u6210/\u5220\u9664/\u5217\u8868/\u63D0\u9192",usage:"/todo <\u5185\u5BB9> [@\u4EBA] [ddl \u622A\u6B62\u65F6\u95F4] | /todo done <\u5E8F\u53F7> | /todo rm <\u5E8F\u53F7|all> | /todo list | /todo remind <0-23>",examples:["/todo \u5B8C\u6210\u62A5\u544A ddl \u660E\u5929","/todo \u4FEE\u590Dbug @\u5F20\u4E09 ddl \u4E0B\u5468\u4E94","/todo done 1","/todo rm 2","/todo rm all","/todo list","/todo remind 9","/todo remind -1"],category:"\u4EFB\u52A1"},{name:"/menu",description:"\u5FEB\u6377\u6307\u4EE4\u83DC\u5355\uFF1A\u81EA\u5B9A\u4E49\u5E38\u7528\u6307\u4EE4\uFF0C\u56DE\u590D\u5E8F\u53F7\u6267\u884C",usage:"/menu add <\u6307\u4EE4> | /menu del <\u5E8F\u53F7> | /menu list | /menu trigger <\u8BCD> | /menu -g add/del/list",examples:["/menu add /help","/menu add /cron \u6BCF\u5929\u65E9\u4E0A9\u70B9\u67E5\u770Bdima","/menu del 1","/menu list","/menu trigger go","/menu -g add /info robot","/menu -g del 1"],category:"\u7CFB\u7EDF"},{name:"/!",description:"\u4E2D\u65AD\u5F53\u524D\u4EFB\u52A1\u5E76\u7ACB\u5373\u5904\u7406\u65B0\u6D88\u606F",usage:"/!",examples:["/!"],category:"\u4F1A\u8BDD"},{name:"/reboot",description:"\u91CD\u542F cc-ding \u5E94\u7528\uFF08\u9700 pm2 \u90E8\u7F72\uFF09",usage:"/reboot [--update [tag]]",examples:["/reboot","/reboot --update","/reboot --update beta"],category:"\u7BA1\u7406",ownerOnly:!0}],CATEGORY_DISPLAY=[{category:"\u4F1A\u8BDD",icon:"\u{1F4AC}"},{category:"\u4EFB\u52A1",icon:"\u{1F4CB}"},{category:"\u6587\u4EF6",icon:"\u{1F4C2}"},{category:"\u7CFB\u7EDF",icon:"\u2699\uFE0F"},{category:"\u7BA1\u7406",icon:"\u{1F527}"}];function parseHelpCommand(e){return e.trim().toLowerCase()==="/help"}function parseCommandHelp(e){const r=e.trim().match(/^(\/\w+)\s+--help$/i);return r?r[1].toLowerCase():null}function getCommandByName(e){const t=e.toLowerCase();return COMMAND_REGISTRY.find(r=>r.name.toLowerCase()===t||r.aliases?.some(s=>s.toLowerCase()===t))}function formatHelpOverview(e,t){const r=COMMAND_REGISTRY.filter(n=>t||!n.ownerOnly),s=["### \u{1F917}","----",`- **\u7248\u672C:** ${e}`,"- **\u4F5C\u8005:** yihuineng","- **Github:** https://github.com/yihuineng/cc-ding","----"];for(const{category:n,icon:o}of CATEGORY_DISPLAY){const i=r.filter(a=>a.category===n);if(i.length!==0){s.push(`${o} **${n}**`);for(const a of i)s.push(`- \`${a.name}\` ${a.description}`);s.push("")}}return s.push("\u{1F4A1} \u8F93\u5165 `/{\u547D\u4EE4} --help` \u67E5\u770B\u547D\u4EE4\u8BE6\u7EC6\u7528\u6CD5"),s.join(`
2
+ `)}function formatCommandHelp(e){const t=[`### \u{1F4D6} ${e.name}`,"",`**\u63CF\u8FF0:** ${e.description}`,"",`**\u7528\u6CD5:** \`${e.usage}\``];e.aliases?.length&&t.push("",`**\u522B\u540D:** ${e.aliases.join(", ")}`),t.push("","**\u793A\u4F8B:**");for(const r of e.examples)t.push(`- \`${r}\``);return t.join(`
3
+ `)}function parseEndCommand(e){return e.trim().toLowerCase()==="/end"}function parseInfoCommand(e){const t=e.trim().toLowerCase();return t==="/info"?"all":t==="/info robot"?"robot":t==="/info session"?"session":t==="/info task"?"task":null}function formatConversationInfo(e,t,r,s){const n=[`- **\u7FA4ID:** ${t}`];if(e.conversationTitle&&n.push(`- **\u7FA4\u540D\u79F0:** ${e.conversationTitle}`),e.conversationType&&n.push(`- **\u4F1A\u8BDD\u7C7B\u578B:** ${e.conversationType==="1"?"\u5355\u804A":e.conversationType==="2"?"\u7FA4\u804A":e.conversationType}`),s&&n.push(`- **\u5DE5\u4F5C\u76EE\u5F55:** \`${s}\``),e.linkConversationId&&n.push(`- **\u5173\u8054\u4F1A\u8BDDID:** ${e.linkConversationId}`),e.agent&&n.push(`- **agent:** ${e.agent}`),e.dingToken&&n.push(`- **dingToken:** ${e.dingToken.substring(0,8)}...`),e.whiteUserList?.length){const o=e.whiteUserList.map(i=>r?.(i)||i).join(", ");n.push(`- **\u7FA4\u767D\u540D\u5355:** ${o}`)}return e.atSender===!1&&n.push("- **atSender:** false"),e.receiveReply===!1&&n.push("- **receiveReply:** false (\u4E0D\u56DE\u590D\u786E\u8BA4\u6D88\u606F)"),e.useLocalOcr===!1&&n.push("- **\u672C\u5730OCR:** \u5173\u95ED"),e.taskCfg?.skill&&n.push(`- **taskSkill:** ${e.taskCfg.skill}`),e.preBash&&n.push(`- **preBash:** \`${e.preBash}\``),n.join(`
4
+ `)}function formatGlobalConfig(e){const t=[`- **clientName:** ${e.clientName||"-"}`,`- **sessionMaxConcurrency:** ${e.sessionMaxConcurrency??5}`,`- **taskHandlerCount:** ${e.taskHandlerCount??1}`,`- **taskQueueSize:** ${e.taskQueueSize??50}`,`- **includeThinking:** ${e.includeThinking??!1}`,`- **resultOnly:** ${e.resultOnly??!0}`];if(e.defaultDingToken&&t.push(`- **defaultDingToken:** ${e.defaultDingToken.substring(0,8)}...`),e.owner&&t.push(`- **owner:** ${e.owner}`),e.whiteUserList?.length&&t.push(`- **\u5168\u5C40\u767D\u540D\u5355:** ${e.whiteUserList.join(", ")}`),e.apiKeyCfg){const r=e.apiKeyCfg.claudeSettings.filter(s=>s.isValid).length;t.push(`- **apiKeyCfg:** ${r}/${e.apiKeyCfg.claudeSettings.length} \u6709\u6548`),t.push(` - **\u6700\u8FD1\u91CD\u7F6E:** ${e.apiKeyCfg.resetTime||"-"}`)}return t.join(`
5
+ `)}function parseLogCommand(e){const r=e.trim().match(/^\/log(?:\s+(\d+))?$/i);if(!r)return null;const s=parseInt(r[1],10);return isNaN(s)||s<=0?10:s}function parseLsCommand(e){const r=e.trim().match(/^\/ls(?:\s+(.+))?$/i);if(!r)return null;if(r[1]===void 0)return{target:"",depth:1};const s=r[1].trim().split(/\s+/),n=s[0]||"",o=s[1]?parseInt(s[1],10):1;return{target:n,depth:isNaN(o)||o<0?1:Math.min(o,5)}}function findSubdirByName(e,t,r=3){const s=[{dir:e,depth:0}];for(;s.length>0;){const{dir:n,depth:o}=s.shift();if(!(o>r))try{const i=fs_1.default.readdirSync(n,{withFileTypes:!0});for(const a of i)if(!(!a.isDirectory()||a.name.startsWith("."))){if(a.name===t)return path_1.default.join(n,a.name);s.push({dir:path_1.default.join(n,a.name),depth:o+1})}}catch{continue}}return null}function getDirectoryStructure(e,t=0,r=1){try{const s=fs_1.default.readdirSync(e,{withFileTypes:!0}).filter(i=>!i.name.startsWith("."));if(s.length===0)return t===0?"\u{1F4C2} \u76EE\u5F55\u4E3A\u7A7A":"";s.sort((i,a)=>i.isDirectory()!==a.isDirectory()?i.isDirectory()?-1:1:i.name.localeCompare(a.name));const n=[],o=". ".repeat(t);for(const i of s){const a=i.isDirectory()?"\u{1F4C1} ":"\u{1F4C4} ",d=i.isDirectory()?"/":"";if(n.push(`${o}${a}${i.name}${d}`),i.isDirectory()&&t<r){const c=path_1.default.join(e,i.name),m=getDirectoryStructure(c,t+1,r);m&&n.push(m)}}return n.join(`
6
+ `)}catch{return t===0?"\u274C \u65E0\u6CD5\u8BFB\u53D6\u76EE\u5F55":""}}function parseContinueSessionCommand(e){const t=e.trim().match(/^\/resume(?:\s+(\S+))?$/i);return t?t[1]!==void 0?t[1]:"":null}function looksLikeCronExpression(e){const t=e.trim().split(/\s+/);return t.length!==5?!1:t.every(r=>/^[\d*/\-]+$/.test(r))}function parseCronCommand(e){const t=e.trim();if(!t.toLowerCase().startsWith("/cron"))return null;const r=t.substring(5).trim();if(!r)return null;if(/^(list|ls)$/i.test(r))return{type:"list"};const s=r.match(/^(?:delete|rm)\s+(\S+)$/i);if(s)return{type:"delete",id:s[1]};const n=r.match(/^pause\s+(\S+)$/i);if(n)return{type:"pause",id:n[1]};const o=r.match(/^resume\s+(\S+)$/i);if(o)return{type:"resume",id:o[1]};const i=r.match(/^(\S+\s+\S+\s+\S+\s+\S+\s+\S+)\s+(.+)$/);return i&&looksLikeCronExpression(i[1])?{type:"create_cron",cronExpression:i[1],prompt:i[2]}:{type:"create_nl",input:r}}function parsePwdCommand(e){return e.trim()==="/pwd"}function parseVersionCommand(e){return e.trim()==="/version"}function parsePathCommand(e,t){const s=e.trim().match(new RegExp(`^\\/${t}\\s+(.+)$`));return s&&s[1].trim()||null}function parseMkdirCommand(e){return parsePathCommand(e,"mkdir")}function parseTouchCommand(e){return parsePathCommand(e,"touch")}function parseRmCommand(e){return parsePathCommand(e,"rm")}function parseOpenCommand(e){const t=e.trim().toLowerCase();return t==="/open"?"folder":t==="/open shell"?"shell":t==="/open code"?"code":null}function parseCleanCommand(e){const t=e.trim().toLowerCase();return t==="/clean"?"current":t==="/clean all"?"all":null}function parseResetApiKeyCfgCommand(e){return e.trim().toLowerCase()==="/reset-apikeycfg"}function parseCfgCommand(e){const t=e.trim();if(!/^\/cfg(?:\s|$)/i.test(t))return null;const r=t.substring(4).trim();if(!r)return{};if(/^--help$/i.test(r))return null;const s={},n=r.split(/\s+/);for(let o=0;o<n.length;o++){const i=n[o];if(i==="--dingToken"&&n[o+1])s.dingToken=n[++o];else if(i==="--linkConversationId"&&n[o+1])s.linkConversationId=n[++o];else if(i==="--conversationId"&&n[o+1])s.conversationId=n[++o];else if(i==="--whiteUserList"&&n[o+1])s.whiteUserList=n[++o].split(",").map(a=>a.trim()).filter(Boolean);else if(i==="--conversationTitle"&&n[o+1]){const a=[];for(;o+1<n.length&&!n[o+1].startsWith("--");)a.push(n[++o]);a.length>0&&(s.conversationTitle=a.join(" "))}else if(i==="--atSender"&&n[o+1]){const a=n[++o].toLowerCase();s.atSender=a==="true"||a==="1"||a==="yes"}else if(i==="--receiveReply"&&n[o+1]){const a=n[++o].toLowerCase();s.receiveReply=a==="true"||a==="1"||a==="yes"}else if(i==="--preBash"&&n[o+1]){const a=[];for(;o+1<n.length&&!n[o+1].startsWith("--");)a.push(n[++o]);a.length>0&&(s.preBash=a.join(" ").replace(/^["']|["']$/g,""))}}return s}function parseBashCommand(e){const r=e.trim().match(/^\/bash\s+(.+)$/i);return r&&r[1].trim()||null}function parseMqCommand(e){const t=e.trim();if(!/^\/mq(?:\s|$)/i.test(t)&&t.toLowerCase()!=="/mq")return null;const r=t.substring(3).trim();if(!r)return{type:"list"};if(/^front$/i.test(r))return{type:"front"};const s=r.match(/^rm\s+(.+)$/i);if(s){const o=s[1].trim();if(/^all$/i.test(o))return{type:"cancelAll"};const i=[],a=o.match(/^(\d+)\s*-\s*(\d+)$/);if(a){const c=parseInt(a[1],10),m=parseInt(a[2],10);if(c>0&&m>=c){for(let u=c;u<=m;u++)i.push(u);return{type:"rm",indices:i}}}const d=o.split(/\s+/);for(const c of d){const m=parseInt(c,10);m>0&&i.push(m)}if(i.length>0)return{type:"rm",indices:i}}const n=r.match(/^-n\s+(\d+)$/i);if(n){const o=parseInt(n[1],10);return o>0?{type:"cancel",count:o}:{type:"list"}}return/^-all$/i.test(r)?{type:"cancelAll"}:null}function parseAuthCommand(e){const t=e.trim(),r=t.match(/^\/auth\s+admin\s+add\s+(\S+)$/i);if(r)return{type:"adminAdd",staffId:r[1]};const s=t.match(/^\/auth\s+admin\s+(?:rm|del)\s+(\S+)$/i);if(s)return{type:"adminRm",staffId:s[1]};if(/^\/auth\s+admin(?:\s+list)?$/i.test(t))return{type:"adminList"};const n=t.match(/^\/auth\s+add\s+(\S+)$/i);if(n)return{type:"add",staffId:n[1]};const o=t.match(/^\/auth\s+(?:del(?:ete)?|rm)\s+(\S+)$/i);if(o)return{type:"del",staffId:o[1]};const i=t.match(/^\/auth\s+approve\s+(\S+)$/i);if(i)return{type:"approve",requestId:i[1]};const a=t.match(/^\/auth\s+reject\s+(\S+)$/i);return a?{type:"reject",requestId:a[1]}:/^\/auth(?:\s+list)?$/i.test(t)?{type:"list"}:null}function parseRecorderCommand(e){const t=e.trim();return/^\/recorder\s+on$/i.test(t)?"on":/^\/recorder\s+exit$/i.test(t)?"exit":null}function parseGoonCommand(e){return/^\/goon$/i.test(e.trim())}function parseCcCommand(e){const r=e.trim().match(/^\/cc\s+(.+)$/i);if(!r)return null;const s=r[1].trim();return s.startsWith("/")?s:`/${s}`}function parseClaudeMdCommand(e){return/^\/claude\.md$/i.test(e.trim())}function parseInterruptCommand(e){return e.trim()==="/!"}function parseTodoCommand(e){const t=e.trim();if(!/^\/todo(?:\s|$)/i.test(t)&&t.toLowerCase()!=="/todo")return null;const r=t.substring(5).trim();if(/^list$/i.test(r))return{type:"list"};if(!r)return{type:"list"};const s=r.match(/^done\s+(\d+)$/i);if(s)return{type:"done",index:parseInt(s[1],10)};if(/^rm\s+all$/i.test(r))return{type:"remove",index:"all"};const n=r.match(/^rm\s+(\d+)$/i);if(n)return{type:"remove",index:parseInt(n[1],10)};if(/^remind\s+-1$/i.test(r))return{type:"remind",hour:null};const o=r.match(/^remind\s+(\d+)$/i);if(o){const u=parseInt(o[1],10);return u>=0&&u<=23?{type:"remind",hour:u}:null}let i=r,a,d;const c=i.match(/@(\S+)/);c&&(a=c[1],i=i.replace(/@\S+/,"").trim());const m=i.match(/\bddl\s+(.+)$/i);return m&&(d=m[1].trim(),i=i.replace(/\bddl\s+.+$/i,"").trim()),i?{type:"add",content:i,assigneeStaffId:a,deadline:d}:null}function parseMenuCommand(e){const t=e.trim();if(!/^\/menu(?:\s|$)/i.test(t)&&t.toLowerCase()!=="/menu")return null;const r=t.substring(5).trim(),s=r.startsWith("-g "),n=s?r.substring(3).trim():r;if(!r)return{type:"show"};if(s&&!n)return{type:"list",isGlobal:!0};const o=n.match(/^trigger\s+(\S+)$/i);if(o&&!s)return{type:"trigger",word:o[1]};const i=n.match(/^add\s+(.+)$/i);if(i)return{type:"add",command:i[1].trim(),isGlobal:s};const a=n.match(/^del(?:ete)?\s+(\d+)$/i);return a?{type:"del",index:parseInt(a[1],10),isGlobal:s}:/^list$/i.test(n)?{type:"list",isGlobal:s}:s?null:{type:"show"}}function parseRebootCommand(e){const t=e.trim();if(!/^\/reboot(?:\s|$)/i.test(t))return null;const r=t.substring(7).trim();if(!r)return{update:!1};const s=r.match(/^--update(?:\s+(\S+))?$/i);return s?{update:!0,tag:s[1]}:null}function parseRecorderCommandEnhanced(e){const t=e.trim().toLowerCase();return/^\/(?:recorder|r)\s+on$/i.test(t)?"on":/^\/(?:recorder|r)\s+(?:exit|e)$/i.test(t)||/^\/(?:exit|e)$/i.test(t)?"exit":null}
@@ -1 +1,21 @@
1
- 'use strict';const a5_0x59dbf1=a5_0x382f;(function(_0x4abce1,_0x263d11){const _0x1d6797=a5_0x382f,_0x33f3b6=_0x4abce1();while(!![]){try{const _0x20bf76=-parseInt(_0x1d6797(0x106))/0x1+-parseInt(_0x1d6797(0x116))/0x2*(-parseInt(_0x1d6797(0x8f))/0x3)+-parseInt(_0x1d6797(0xd3))/0x4*(parseInt(_0x1d6797(0x123))/0x5)+parseInt(_0x1d6797(0xa1))/0x6*(parseInt(_0x1d6797(0xf3))/0x7)+-parseInt(_0x1d6797(0x8e))/0x8*(parseInt(_0x1d6797(0xc9))/0x9)+-parseInt(_0x1d6797(0x10b))/0xa*(-parseInt(_0x1d6797(0x11d))/0xb)+-parseInt(_0x1d6797(0xf1))/0xc*(-parseInt(_0x1d6797(0xdd))/0xd);if(_0x20bf76===_0x263d11)break;else _0x33f3b6['push'](_0x33f3b6['shift']());}catch(_0x443bf8){_0x33f3b6['push'](_0x33f3b6['shift']());}}}(a5_0x1834,0xbaeb7));var __importDefault=this&&this[a5_0x59dbf1(0x83)]||function(_0x3a452a){return _0x3a452a&&_0x3a452a['__esModule']?_0x3a452a:{'default':_0x3a452a};};Object[a5_0x59dbf1(0xf2)](exports,a5_0x59dbf1(0x10a),{'value':!![]}),exports[a5_0x59dbf1(0xf0)]=void 0x0,exports[a5_0x59dbf1(0x10f)]=isValidCronExpression,exports[a5_0x59dbf1(0xef)]=formatCronJobList,exports['formatCronJobInfo']=formatCronJobInfo;const fs_1=__importDefault(require('fs')),readline_1=__importDefault(require(a5_0x59dbf1(0xc0))),child_process_1=require(a5_0x59dbf1(0xc3)),utils_ok_1=require(a5_0x59dbf1(0x11e)),messaging_1=require('./messaging'),claude_process_1=require(a5_0x59dbf1(0xeb)),task_1=require(a5_0x59dbf1(0xc8)),session_1=require('./session');function getCronFile(_0x24b578){const _0x490937=a5_0x59dbf1;return(0x0,session_1[_0x490937(0x128)])(_0x24b578)+_0x490937(0xd7);}function a5_0x1834(){const _0x2efadf=['resolveClaudeSettingsPath','map','MAX_CONCURRENT_JOBS','getJob','skill','executeJob','💡\x20`/cron\x20pause\x20<id>`\x20暂停\x20|\x20`/cron\x20resume\x20<id>`\x20恢复\x20|\x20`/cron\x20delete\x20<id>`\x20删除','getSessionDir','senderNick',']\x20定时任务\x20','error','Claude\x20配额已耗尽(429),请稍后重试或明天再试','set','-\x20**创建时间:**\x20','data','claude','cron_','\x20的会话配置不存在,\x20跳过执行','cronExpression','getConversationDir','some','stringify','parse','includes','-\x20**Cron:**\x20`',']\x20Cron分析:\x20','getDate','readline','YYYY-MM-DD-HH-mm-ss','split','child_process','every','trim',']\x20新增定时任务:\x20','-\x20**创建者:**\x20','./task','114651kXmTJl','JSON\x20解析失败',']\x20删除定时任务:\x20','format','filter','checkJobsAt','已恢复',']\x20Cron执行失败:\x20','destroy','tick','188JMrrMC','\x20的会话有活跃session,\x20降级到任务队列','stopScheduler','activeSessions','/cron.json','replace','timestamp','message','prompt','warn','11863813aiaMex','-\x20任务:\x20','pipe','-\x20**状态:**\x20','\x20无通知能力(无dingToken且无defaultDingToken),\x20跳过执行','delete','-\x20上次执行:\x20','findIndex',']\x20Cron任务\x20','log','defaultDingToken','startScheduler','createdAt','-\x20创建者:\x20','./claude-process','getHours','has','timer','formatCronJobList','CronEngine','12rWBbRV','defineProperty','4305JtapPF',']\x20Cron引擎已启动,\x20共\x20','Claude\x20认证失败(401),请检查\x20API\x20Key\x20配置','/session.json','\x20启用)','getMinutes','--permission-mode','findActiveSession','enqueueAsTask','--output-format','lastCheckedTime','listJobs','utf-8','\x20已降级到任务队列:\x20','default','分析以下定时任务描述,提取cron表达式和任务内容。\x0a\x0a用户输入:\x20{INPUT}\x0a\x0a请严格返回以下JSON格式(不要返回其他任何内容):\x0a{\x22cron\x22:\x225位cron表达式(分\x20时\x20日\x20月\x20周)\x22,\x22prompt\x22:\x22要执行的任务提示词\x22,\x22desc\x22:\x22简短的中文描述\x22}\x0a\x0a常见cron格式:\x0a-\x20每天早上9点:\x20\x220\x209\x20*\x20*\x20*\x22\x0a-\x20每周一早上9点:\x20\x220\x209\x20*\x20*\x201\x22\x0a-\x20工作日早上9点:\x20\x220\x209\x20*\x20*\x201-5\x22\x0a-\x20每小时:\x20\x220\x20*\x20*\x20*\x20*\x22\x0a-\x20每30分钟:\x20\x22*/30\x20*\x20*\x20*\x20*\x22\x0a-\x20每天中午12点:\x20\x220\x2012\x20*\x20*\x20*\x22\x0a-\x20每月1号早上9点:\x20\x220\x209\x201\x20*\x20*\x22\x0a-\x20每周五下午3点:\x20\x220\x2015\x20*\x20*\x205\x22','\x20降级到任务队列失败:','desc','spawn','330865dBaeLm','agent','getConversationConfig','\x20个任务\x20(','__esModule','12680bUmhty','toString','line','stdout','isValidCronExpression','[cron]','--verbose','/session.log','-\x20**任务:**\x20','),\x20跳过\x20','{INPUT}','10AGFPYz','getMonth','content','splice','readFileSync','saveActiveSession','###\x20⏰\x20定时任务\x20','5412OyyBkF','utils-ok','writeFileSync','--print','find','persist','106940rxcvss','removeJob','stdin','enabled','runningJobIds','getClientDir','description','分析超时(60s)','write',']\x20[SYSTEM]:\x20定时任务触发:\x20','push','type','isArray','start','analyzeAndCreate','__importDefault','✅\x20启用','Claude\x20返回格式不正确','mkdirSync','-\x20**上次执行:**\x20','result','now','saveTask','lastRunAt','conversationId','length','696YXNuEn','669453cEmYgg','jobs','Claude\x20TPM\x20限流(422),请稍后重试','add','match','size','senderStaffId','createInterface','addJob','-\x20Cron:\x20`','toggleJob','dingToken','-\x20描述:\x20','⏸️\x20暂停','substring','executeClaudeQuery','###\x20⏰\x20定时任务列表\x0a','test','5442LGMxlj','end','分析失败\x20(退出码:\x20','cron'];a5_0x1834=function(){return _0x2efadf;};return a5_0x1834();}function loadCronJobs(_0x316fbe){const _0x501350=a5_0x59dbf1,_0x29d0ff=getCronFile(_0x316fbe);try{const _0x55c0eb=JSON['parse'](fs_1[_0x501350(0x101)][_0x501350(0x11a)](_0x29d0ff,_0x501350(0xff)));return Array[_0x501350(0x12f)](_0x55c0eb)?_0x55c0eb:_0x55c0eb[_0x501350(0x90)]||[];}catch{return[];}}function saveCronJobs(_0x809671,_0x40e2bd){const _0x478616=a5_0x59dbf1,_0x57048f=getCronFile(_0x809671);fs_1['default'][_0x478616(0x11f)](_0x57048f,JSON[_0x478616(0xba)](_0x40e2bd,null,0x2),'utf-8');}function matchesCronField(_0x147d46,_0x449ac0,_0x157100,_0xbc0f75){const _0x143902=a5_0x59dbf1;if(_0x147d46==='*')return!![];if(_0x147d46['includes'](','))return _0x147d46['split'](',')[_0x143902(0xb9)](_0x1be736=>matchesCronField(_0x1be736[_0x143902(0xc5)](),_0x449ac0,_0x157100,_0xbc0f75));if(_0x147d46[_0x143902(0xbc)]('/')){const _0x219f1a=_0x147d46['indexOf']('/'),_0xae628c=_0x147d46['substring'](0x0,_0x219f1a),_0x13281a=parseInt(_0x147d46[_0x143902(0x9d)](_0x219f1a+0x1),0xa);if(isNaN(_0x13281a)||_0x13281a<=0x0)return![];let _0x2958b0=_0x157100,_0x140ffa=_0xbc0f75;if(_0xae628c!=='*'){if(_0xae628c[_0x143902(0xbc)]('-')){const _0x270bf3=_0xae628c[_0x143902(0xc2)]('-')['map'](Number);_0x2958b0=_0x270bf3[0x0],_0x140ffa=_0x270bf3[0x1];}else _0x2958b0=parseInt(_0xae628c,0xa),_0x140ffa=_0xbc0f75;}if(_0x449ac0<_0x2958b0||_0x449ac0>_0x140ffa)return![];return(_0x449ac0-_0x2958b0)%_0x13281a===0x0;}if(_0x147d46[_0x143902(0xbc)]('-')){const _0x245c61=_0x147d46[_0x143902(0xc2)]('-')[_0x143902(0xa6)](Number);return _0x449ac0>=_0x245c61[0x0]&&_0x449ac0<=_0x245c61[0x1];}const _0x4c263f=parseInt(_0x147d46,0xa);return!isNaN(_0x4c263f)&&_0x449ac0===_0x4c263f;}function matchesCron(_0x5cf30e,_0x1f43a7){const _0x4476c3=a5_0x59dbf1,_0x255f18=_0x5cf30e['trim']()['split'](/\s+/);if(_0x255f18[_0x4476c3(0x8d)]!==0x5)return![];const _0x1f9122=_0x1f43a7[_0x4476c3(0xf8)](),_0x6d3fe2=_0x1f43a7[_0x4476c3(0xec)](),_0x46b939=_0x1f43a7[_0x4476c3(0xbf)](),_0x4a13b6=_0x1f43a7[_0x4476c3(0x117)]()+0x1,_0x722b01=_0x1f43a7['getDay']();if(!matchesCronField(_0x255f18[0x0],_0x1f9122,0x0,0x3b))return![];if(!matchesCronField(_0x255f18[0x1],_0x6d3fe2,0x0,0x17))return![];if(!matchesCronField(_0x255f18[0x3],_0x4a13b6,0x1,0xc))return![];const _0xda065e=matchesCronField(_0x255f18[0x2],_0x46b939,0x1,0x1f),_0x24a04b=matchesCronField(_0x255f18[0x4],_0x722b01,0x0,0x7)||_0x722b01===0x0&&matchesCronField(_0x255f18[0x4],0x7,0x0,0x7),_0xba3034=_0x255f18[0x2]==='*',_0x4685b2=_0x255f18[0x4]==='*';if(_0xba3034&&_0x4685b2)return!![];if(_0xba3034)return _0x24a04b;if(_0x4685b2)return _0xda065e;return _0xda065e||_0x24a04b;}function isValidCronExpression(_0x51ac30){const _0x3cecc5=a5_0x59dbf1,_0x34a57b=_0x51ac30[_0x3cecc5(0xc5)]()[_0x3cecc5(0xc2)](/\s+/);if(_0x34a57b[_0x3cecc5(0x8d)]!==0x5)return![];const _0x50eb09=/^(\*|\d+|\d+-\d+|\*\/\d+|\d+\/\d+|\d+-\d+\/\d+|\d+(,\d+)+)$/;return _0x34a57b[_0x3cecc5(0xc4)](_0x440c8f=>_0x50eb09[_0x3cecc5(0xa0)](_0x440c8f));}function a5_0x382f(_0x524585,_0x1d1ffc){_0x524585=_0x524585-0x83;const _0x183444=a5_0x1834();let _0x382f41=_0x183444[_0x524585];return _0x382f41;}const ANALYSIS_PROMPT=a5_0x59dbf1(0x102);async function analyzeCronWithClaude(_0x209126,_0x5925d8,_0x328279){const _0xc8f6dd=a5_0x59dbf1,_0x5486d1=_0x209126[_0xc8f6dd(0xb8)](_0x5925d8),_0x49108d=_0xc8f6dd(0xb4),_0x1c4310=ANALYSIS_PROMPT[_0xc8f6dd(0xd8)](_0xc8f6dd(0x115),_0x328279),_0x1a9dfe=[_0xc8f6dd(0xf9),'bypassPermissions',_0xc8f6dd(0x120),_0xc8f6dd(0xfc),'stream-json',_0xc8f6dd(0x111)],_0x717bc6=(0x0,claude_process_1[_0xc8f6dd(0xa5)])(_0x209126,_0x5486d1);return _0x717bc6&&_0x1a9dfe['push']('--settings',_0x717bc6),console[_0xc8f6dd(0xe6)]('['+(0x0,session_1[_0xc8f6dd(0xd9)])()+_0xc8f6dd(0xbe)+_0x49108d+'\x20'+_0x1a9dfe['join']('\x20')),new Promise((_0x56b5d4,_0x5c59ae)=>{const _0x3bfdac=_0xc8f6dd,_0x2ff4f9=(0x0,child_process_1[_0x3bfdac(0x105)])(_0x49108d,_0x1a9dfe,{'cwd':_0x5486d1,'stdio':[_0x3bfdac(0xdf),'pipe','pipe']});_0x2ff4f9[_0x3bfdac(0x125)]?.[_0x3bfdac(0x12b)](_0x1c4310+'\x0a'),_0x2ff4f9['stdin']?.[_0x3bfdac(0xa2)]();let _0x54c052='',_0x8619dd='';const _0xc8b1b9=readline_1['default'][_0x3bfdac(0x96)]({'input':_0x2ff4f9[_0x3bfdac(0x10e)]});_0xc8b1b9['on'](_0x3bfdac(0x10d),_0x230037=>{const _0x1ae422=_0x3bfdac,_0x351780=(0x0,claude_process_1['parseClaudeStreamLine'])(_0x230037);_0x351780?.[_0x1ae422(0x12e)]===_0x1ae422(0x88)&&_0x351780['content']&&(_0x54c052=_0x351780[_0x1ae422(0x118)]);}),_0x2ff4f9['stderr']?.['on'](_0x3bfdac(0xb3),_0x5abbb0=>{const _0x4b3e9c=_0x3bfdac;_0x8619dd+=_0x5abbb0[_0x4b3e9c(0x10c)]();});const _0x12e37f=setTimeout(()=>{const _0x1aa08c=_0x3bfdac;_0x2ff4f9['kill'](),_0x5c59ae(new Error(_0x1aa08c(0x12a)));},0xea60);_0x2ff4f9['on']('close',_0x5c9401=>{const _0x85e6af=_0x3bfdac;clearTimeout(_0x12e37f);if(_0x5c9401===0x0&&_0x54c052)try{const _0x1ab5c5=_0x54c052[_0x85e6af(0x93)](/\{[\s\S]*\}/);if(_0x1ab5c5){const _0x3ffdcc=JSON[_0x85e6af(0xbb)](_0x1ab5c5[0x0]);if(_0x3ffdcc[_0x85e6af(0xa4)]&&_0x3ffdcc[_0x85e6af(0xdb)]){_0x56b5d4(_0x3ffdcc);return;}}_0x5c59ae(new Error(_0x85e6af(0x85)));}catch{_0x5c59ae(new Error(_0x85e6af(0xca)));}else{const _0x1ae31e=_0x8619dd[_0x85e6af(0xc5)]()?'\x20('+_0x8619dd[_0x85e6af(0xc5)]()['substring'](0x0,0xc8)+')':'';console[_0x85e6af(0xaf)]('['+(0x0,session_1['timestamp'])()+']\x20Cron分析进程退出('+_0x5c9401+')'+_0x1ae31e);const _0x26a3a3=_0x8619dd;if(/\b429\b/[_0x85e6af(0xa0)](_0x26a3a3))_0x5c59ae(new Error(_0x85e6af(0xb0)));else{if(/\b422\b/['test'](_0x26a3a3)||/TPM|额度超限/i['test'](_0x26a3a3))_0x5c59ae(new Error(_0x85e6af(0x91)));else{if(/\b401\b/[_0x85e6af(0xa0)](_0x26a3a3)||/auth|认证|permission/i['test'](_0x26a3a3))_0x5c59ae(new Error(_0x85e6af(0xf5)));else _0x5c9401===0x1&&!_0x54c052&&!_0x8619dd[_0x85e6af(0xc5)]()?_0x5c59ae(new Error('Claude\x20进程异常退出,无输出。请检查\x20claude\x20命令是否可用')):_0x5c59ae(new Error(_0x85e6af(0xa3)+_0x5c9401+')'+_0x1ae31e));}}}}),_0x2ff4f9['on'](_0x3bfdac(0xaf),_0x317587=>{const _0x1a4941=_0x3bfdac;clearTimeout(_0x12e37f),_0x5c59ae(new Error('启动\x20Claude\x20进程失败:\x20'+_0x317587[_0x1a4941(0xda)]));});});}function formatCronJobList(_0x527bfa){const _0x5d1f24=a5_0x59dbf1;if(_0x527bfa[_0x5d1f24(0x8d)]===0x0)return'📭\x20暂无定时任务';const _0x287044=[_0x5d1f24(0x9f)];for(const _0x107e04 of _0x527bfa){const _0x2ee181=_0x107e04[_0x5d1f24(0x126)]?'✅':'⏸️',_0xccbd14=_0x107e04[_0x5d1f24(0x8b)]||'-';_0x287044[_0x5d1f24(0x12d)]('**'+_0x2ee181+'\x20'+_0x107e04['id']+'**'),_0x287044['push'](_0x5d1f24(0x98)+_0x107e04[_0x5d1f24(0xb7)]+'`'),_0x287044[_0x5d1f24(0x12d)](_0x5d1f24(0x9b)+_0x107e04[_0x5d1f24(0x129)]),_0x287044[_0x5d1f24(0x12d)](_0x5d1f24(0xde)+_0x107e04[_0x5d1f24(0xdb)]),_0x287044[_0x5d1f24(0x12d)](_0x5d1f24(0xea)+_0x107e04[_0x5d1f24(0xad)]),_0x287044[_0x5d1f24(0x12d)](_0x5d1f24(0xe3)+_0xccbd14),_0x287044[_0x5d1f24(0x12d)]('');}return _0x287044[_0x5d1f24(0x12d)](_0x5d1f24(0xab)),_0x287044['join']('\x0a');}function formatCronJobInfo(_0x250a99){const _0x5a23c4=a5_0x59dbf1,_0xcf4e06=_0x250a99[_0x5a23c4(0x126)]?_0x5a23c4(0x84):_0x5a23c4(0x9c);return[_0x5a23c4(0x11c)+_0x250a99['id'],'',_0x5a23c4(0xe0)+_0xcf4e06,_0x5a23c4(0xbd)+_0x250a99['cronExpression']+'`','-\x20**描述:**\x20'+_0x250a99['description'],_0x5a23c4(0x113)+_0x250a99[_0x5a23c4(0xdb)],_0x5a23c4(0xc7)+_0x250a99[_0x5a23c4(0xad)],_0x5a23c4(0xb2)+_0x250a99[_0x5a23c4(0xe9)],_0x5a23c4(0x87)+(_0x250a99[_0x5a23c4(0x8b)]||'-')]['join']('\x0a');}class CronEngine{constructor(_0xfda968){const _0x130317=a5_0x59dbf1;this[_0x130317(0x90)]=[],this[_0x130317(0xee)]=null,this['lastCheckedTime']=-0x1,this['runningJobIds']=new Set(),this[_0x130317(0xa7)]=0x3,this['dc']=_0xfda968,this[_0x130317(0x90)]=loadCronJobs(_0xfda968);}[a5_0x59dbf1(0x130)](){const _0xf88d23=a5_0x59dbf1;this[_0xf88d23(0xe8)]();const _0x1381dd=this[_0xf88d23(0x90)][_0xf88d23(0xcd)](_0x49d061=>_0x49d061['enabled'])[_0xf88d23(0x8d)];console[_0xf88d23(0xe6)]('['+(0x0,session_1[_0xf88d23(0xd9)])()+_0xf88d23(0xf4)+this[_0xf88d23(0x90)][_0xf88d23(0x8d)]+_0xf88d23(0x109)+_0x1381dd+_0xf88d23(0xf7));}[a5_0x59dbf1(0xd1)](){const _0x50804f=a5_0x59dbf1;this[_0x50804f(0xd5)]();}[a5_0x59dbf1(0x97)](_0x33ba57){const _0x261cbb=a5_0x59dbf1,_0x1c0023={'id':_0x261cbb(0xb5)+Date[_0x261cbb(0x89)](),'conversationId':_0x33ba57['conversationId'],'cronExpression':_0x33ba57[_0x261cbb(0xb7)],'description':_0x33ba57[_0x261cbb(0x129)],'prompt':_0x33ba57[_0x261cbb(0xdb)],'enabled':!![],'createdAt':(0x0,session_1[_0x261cbb(0xd9)])(),'senderStaffId':_0x33ba57[_0x261cbb(0x95)],'senderNick':_0x33ba57['senderNick']};return this['jobs'][_0x261cbb(0x12d)](_0x1c0023),this['persist'](),console[_0x261cbb(0xe6)]('['+(0x0,session_1[_0x261cbb(0xd9)])()+_0x261cbb(0xc6)+_0x1c0023['id']+'\x20['+_0x1c0023[_0x261cbb(0xb7)]+']\x20'+_0x1c0023['description']),_0x1c0023;}[a5_0x59dbf1(0x124)](_0x4a1bef){const _0x37f317=a5_0x59dbf1,_0x3c5cc5=this[_0x37f317(0x90)][_0x37f317(0xe4)](_0xfa8122=>_0xfa8122['id']===_0x4a1bef);if(_0x3c5cc5===-0x1)return![];const _0x34a2c3=this[_0x37f317(0x90)][_0x37f317(0x119)](_0x3c5cc5,0x1)[0x0];return this[_0x37f317(0x122)](),console['log']('['+(0x0,session_1[_0x37f317(0xd9)])()+_0x37f317(0xcb)+_0x34a2c3['id']),!![];}[a5_0x59dbf1(0x99)](_0x4a2568,_0x15f091){const _0x5f4587=a5_0x59dbf1,_0x53d620=this[_0x5f4587(0x90)][_0x5f4587(0x121)](_0x35faca=>_0x35faca['id']===_0x4a2568);if(!_0x53d620)return![];return _0x53d620[_0x5f4587(0x126)]=_0x15f091,this[_0x5f4587(0x122)](),console[_0x5f4587(0xe6)]('['+(0x0,session_1['timestamp'])()+_0x5f4587(0xae)+_0x53d620['id']+'\x20'+(_0x15f091?_0x5f4587(0xcf):'已暂停')),!![];}[a5_0x59dbf1(0xfe)](_0x626f2f){const _0x2c9700=a5_0x59dbf1;if(_0x626f2f)return this[_0x2c9700(0x90)]['filter'](_0x594667=>_0x594667[_0x2c9700(0x8c)]===_0x626f2f);return[...this[_0x2c9700(0x90)]];}[a5_0x59dbf1(0xa8)](_0x1cd453){const _0x24670b=a5_0x59dbf1;return this[_0x24670b(0x90)][_0x24670b(0x121)](_0x2cc681=>_0x2cc681['id']===_0x1cd453);}async[a5_0x59dbf1(0x131)](_0x5e9ee2,_0x2a80bb,_0xdbe967,_0x5b71bf){const _0x27910b=a5_0x59dbf1;try{const _0x592dea=await analyzeCronWithClaude(this['dc'],_0x5e9ee2,_0x2a80bb);if(!isValidCronExpression(_0x592dea[_0x27910b(0xa4)]))return{'error':'Claude\x20返回的cron表达式无效:\x20'+_0x592dea[_0x27910b(0xa4)]};const _0x575149=this[_0x27910b(0x97)]({'conversationId':_0x5e9ee2,'cronExpression':_0x592dea[_0x27910b(0xa4)],'description':_0x592dea[_0x27910b(0x104)]||_0x2a80bb['substring'](0x0,0x32),'prompt':_0x592dea[_0x27910b(0xdb)],'senderStaffId':_0xdbe967,'senderNick':_0x5b71bf});return{'job':_0x575149};}catch(_0x5cd2f3){return{'error':_0x5cd2f3 instanceof Error?_0x5cd2f3[_0x27910b(0xda)]:String(_0x5cd2f3)};}}[a5_0x59dbf1(0x122)](){const _0x4671ad=a5_0x59dbf1;saveCronJobs(this['dc'],this[_0x4671ad(0x90)]);}[a5_0x59dbf1(0xe8)](){const _0x1f0ca6=a5_0x59dbf1,_0x159acf=Date[_0x1f0ca6(0x89)](),_0x4d5847=0xea60-_0x159acf%0xea60;setTimeout(()=>{const _0x41fd2f=_0x1f0ca6;this[_0x41fd2f(0xd2)](),this['timer']=setInterval(()=>this[_0x41fd2f(0xd2)](),0xea60);},_0x4d5847);}[a5_0x59dbf1(0xd5)](){const _0x30093d=a5_0x59dbf1;this[_0x30093d(0xee)]&&(clearInterval(this[_0x30093d(0xee)]),this[_0x30093d(0xee)]=null);}[a5_0x59dbf1(0xd2)](){const _0x6ee405=a5_0x59dbf1,_0x4e3b61=Date['now'](),_0x222cfa=this[_0x6ee405(0xfd)]<0x0?_0x4e3b61-_0x4e3b61%0xea60:this[_0x6ee405(0xfd)]+0xea60-this[_0x6ee405(0xfd)]%0xea60,_0x347d54=_0x4e3b61-_0x4e3b61%0xea60;for(let _0x1ab54a=_0x222cfa;_0x1ab54a<=_0x347d54;_0x1ab54a+=0xea60){const _0x513302=new Date(_0x1ab54a);if(!this[_0x6ee405(0xce)](_0x513302))break;}this['lastCheckedTime']=_0x4e3b61;}['checkJobsAt'](_0x5de139){const _0x3f2cb3=a5_0x59dbf1;if(this[_0x3f2cb3(0x127)][_0x3f2cb3(0x94)]>=this[_0x3f2cb3(0xa7)])return console[_0x3f2cb3(0xdc)]('['+(0x0,session_1[_0x3f2cb3(0xd9)])()+']\x20Cron并发上限('+this[_0x3f2cb3(0xa7)]+_0x3f2cb3(0x114)+_0x5de139['toISOString']()+'\x20的检查'),![];for(const _0x4d65d3 of this[_0x3f2cb3(0x90)]){if(!_0x4d65d3[_0x3f2cb3(0x126)])continue;if(this['runningJobIds'][_0x3f2cb3(0xed)](_0x4d65d3['id']))continue;if(this[_0x3f2cb3(0x127)][_0x3f2cb3(0x94)]>=this[_0x3f2cb3(0xa7)])break;if(!matchesCron(_0x4d65d3[_0x3f2cb3(0xb7)],_0x5de139))continue;console[_0x3f2cb3(0xe6)]('['+(0x0,session_1[_0x3f2cb3(0xd9)])()+']\x20Cron触发:\x20'+_0x4d65d3['id']+'\x20['+_0x4d65d3['cronExpression']+']\x20'+_0x4d65d3[_0x3f2cb3(0x129)]),this[_0x3f2cb3(0xaa)](_0x4d65d3)['catch'](_0x1289c2=>{const _0x53356e=_0x3f2cb3;console[_0x53356e(0xaf)]('['+(0x0,session_1[_0x53356e(0xd9)])()+_0x53356e(0xd0)+_0x4d65d3['id'],_0x1289c2);});}return!![];}async[a5_0x59dbf1(0xaa)](_0x1dbf74){const _0x1445cb=a5_0x59dbf1;this['runningJobIds'][_0x1445cb(0x92)](_0x1dbf74['id']);try{const _0x35615a=this['dc'][_0x1445cb(0x108)](_0x1dbf74[_0x1445cb(0x8c)]);if(!_0x35615a){console[_0x1445cb(0xdc)]('['+(0x0,session_1[_0x1445cb(0xd9)])()+_0x1445cb(0xe5)+_0x1dbf74['id']+_0x1445cb(0xb6));return;}const _0x5e6683=!!(_0x35615a[_0x1445cb(0x9a)]||this['dc']['config'][_0x1445cb(0xe7)]);if(!_0x5e6683){console['warn']('['+(0x0,session_1[_0x1445cb(0xd9)])()+']\x20Cron任务\x20'+_0x1dbf74['id']+_0x1445cb(0xe1));return;}const _0x2b4deb=(0x0,session_1[_0x1445cb(0xfa)])(this['dc'],_0x1dbf74[_0x1445cb(0x8c)]);if(_0x2b4deb){console['log']('['+(0x0,session_1[_0x1445cb(0xd9)])()+_0x1445cb(0xe5)+_0x1dbf74['id']+_0x1445cb(0xd4)),await this[_0x1445cb(0xfb)](_0x1dbf74);return;}const _0x4f68e1=Date[_0x1445cb(0x89)](),_0x2ac028={'conversationId':_0x1dbf74['conversationId'],'sessionWebhook':'','startTime':_0x4f68e1,'startTimeStr':utils_ok_1['dateUtil']['mm'](_0x4f68e1)[_0x1445cb(0xcc)](_0x1445cb(0xc1)),'startStaffId':_0x1dbf74[_0x1445cb(0x95)],'startNickName':_0x1445cb(0x110)+_0x1dbf74[_0x1445cb(0xad)]},_0x3f6177=(0x0,session_1[_0x1445cb(0xac)])(this['dc'],_0x2ac028);fs_1[_0x1445cb(0x101)][_0x1445cb(0x86)](_0x3f6177,{'recursive':!![]}),fs_1['default']['writeFileSync'](_0x3f6177+_0x1445cb(0xf6),JSON[_0x1445cb(0xba)](_0x2ac028,null,0x2),_0x1445cb(0xff)),this['dc']['activeSessions'][_0x1445cb(0xb1)](_0x1dbf74[_0x1445cb(0x8c)],{'session':_0x2ac028,'lastSenderStaffId':_0x1dbf74[_0x1445cb(0x95)],'isProcessing':!![],'messageQueue':[],'conversationConfig':_0x35615a}),(0x0,session_1[_0x1445cb(0x11b)])(this['dc'],_0x1dbf74[_0x1445cb(0x8c)]),console[_0x1445cb(0xe6)]('['+(0x0,session_1[_0x1445cb(0xd9)])()+_0x1445cb(0xe5)+_0x1dbf74['id']+'\x20开始执行:\x20'+_0x1dbf74['description']),fs_1['default']['appendFileSync'](_0x3f6177+_0x1445cb(0x112),'['+(0x0,session_1['timestamp'])()+_0x1445cb(0x12c)+_0x1dbf74[_0x1445cb(0x129)]+'\x0a',_0x1445cb(0xff));try{await(0x0,claude_process_1[_0x1445cb(0x9e)])(this['dc'],_0x2ac028,_0x1dbf74[_0x1445cb(0xdb)],{'skill':_0x35615a['taskCfg']?.[_0x1445cb(0xa9)],'agent':_0x35615a[_0x1445cb(0x107)],'senderNick':_0x1dbf74[_0x1445cb(0xad)],'senderStaffId':_0x1dbf74[_0x1445cb(0x95)]});}catch(_0x3b4dca){console[_0x1445cb(0xaf)]('['+(0x0,session_1[_0x1445cb(0xd9)])()+']\x20Cron执行Claude查询失败:\x20'+_0x1dbf74['id'],_0x3b4dca),await(0x0,messaging_1['sendDingMessage'])(this['dc'],{'conversationId':_0x1dbf74[_0x1445cb(0x8c)],'sessionWebhook':'','atUserId':_0x1dbf74['senderStaffId'],'content':'❌\x20定时任务执行失败:\x20'+(_0x3b4dca instanceof Error?_0x3b4dca[_0x1445cb(0xda)]:String(_0x3b4dca))});}finally{this['dc'][_0x1445cb(0xd6)][_0x1445cb(0xe2)](_0x1dbf74[_0x1445cb(0x8c)]),(0x0,session_1[_0x1445cb(0x11b)])(this['dc'],_0x1dbf74[_0x1445cb(0x8c)]);}_0x1dbf74[_0x1445cb(0x8b)]=(0x0,session_1[_0x1445cb(0xd9)])(),this[_0x1445cb(0x122)]();}finally{this[_0x1445cb(0x127)][_0x1445cb(0xe2)](_0x1dbf74['id']);}}async[a5_0x59dbf1(0xfb)](_0x45340f){const _0xd0af65=a5_0x59dbf1;try{await(0x0,task_1[_0xd0af65(0x8a)])(this['dc'],{'conversationId':_0x45340f[_0xd0af65(0x8c)],'prompt':_0x45340f[_0xd0af65(0xdb)],'senderStaffId':_0x45340f[_0xd0af65(0x95)],'senderNickName':_0xd0af65(0x110)+_0x45340f['senderNick'],'sessionWebhook':'','type':_0xd0af65(0xa4)}),console[_0xd0af65(0xe6)]('['+(0x0,session_1['timestamp'])()+_0xd0af65(0xe5)+_0x45340f['id']+_0xd0af65(0x100)+_0x45340f['description']);}catch(_0x28b57c){console[_0xd0af65(0xaf)]('['+(0x0,session_1[_0xd0af65(0xd9)])()+_0xd0af65(0xe5)+_0x45340f['id']+_0xd0af65(0x103),_0x28b57c);}_0x45340f['lastRunAt']=(0x0,session_1[_0xd0af65(0xd9)])(),this[_0xd0af65(0x122)]();}}exports[a5_0x59dbf1(0xf0)]=CronEngine;
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(s){return s&&s.__esModule?s:{default:s}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.CronEngine=void 0,exports.isValidCronExpression=isValidCronExpression,exports.formatCronJobList=formatCronJobList,exports.formatCronJobInfo=formatCronJobInfo;const fs_1=__importDefault(require("fs")),readline_1=__importDefault(require("readline")),child_process_1=require("child_process"),utils_ok_1=require("utils-ok"),messaging_1=require("./messaging"),claude_process_1=require("./claude-process"),task_1=require("./task"),session_1=require("./session");function getCronFile(s){return`${(0,session_1.getClientDir)(s)}/cron.json`}function loadCronJobs(s){const t=getCronFile(s);try{const e=JSON.parse(fs_1.default.readFileSync(t,"utf-8"));return Array.isArray(e)?e:e.jobs||[]}catch{return[]}}function saveCronJobs(s,t){const e=getCronFile(s);fs_1.default.writeFileSync(e,JSON.stringify(t,null,2),"utf-8")}function matchesCronField(s,t,e,r){if(s==="*")return!0;if(s.includes(","))return s.split(",").some(n=>matchesCronField(n.trim(),t,e,r));if(s.includes("/")){const n=s.indexOf("/"),o=s.substring(0,n),d=parseInt(s.substring(n+1),10);if(isNaN(d)||d<=0)return!1;let a=e,c=r;if(o!=="*")if(o.includes("-")){const u=o.split("-").map(Number);a=u[0],c=u[1]}else a=parseInt(o,10),c=r;return t<a||t>c?!1:(t-a)%d===0}if(s.includes("-")){const n=s.split("-").map(Number);return t>=n[0]&&t<=n[1]}const i=parseInt(s,10);return!isNaN(i)&&t===i}function matchesCron(s,t){const e=s.trim().split(/\s+/);if(e.length!==5)return!1;const r=t.getMinutes(),i=t.getHours(),n=t.getDate(),o=t.getMonth()+1,d=t.getDay();if(!matchesCronField(e[0],r,0,59)||!matchesCronField(e[1],i,0,23)||!matchesCronField(e[3],o,1,12))return!1;const a=matchesCronField(e[2],n,1,31),c=matchesCronField(e[4],d,0,7)||d===0&&matchesCronField(e[4],7,0,7),u=e[2]==="*",h=e[4]==="*";return u&&h?!0:u?c:h?a:a||c}function isValidCronExpression(s){const t=s.trim().split(/\s+/);if(t.length!==5)return!1;const e=/^(\*|\d+|\d+-\d+|\*\/\d+|\d+\/\d+|\d+-\d+\/\d+|\d+(,\d+)+)$/;return t.every(r=>e.test(r))}const ANALYSIS_PROMPT=`\u5206\u6790\u4EE5\u4E0B\u5B9A\u65F6\u4EFB\u52A1\u63CF\u8FF0\uFF0C\u63D0\u53D6cron\u8868\u8FBE\u5F0F\u548C\u4EFB\u52A1\u5185\u5BB9\u3002
2
+
3
+ \u7528\u6237\u8F93\u5165: {INPUT}
4
+
5
+ \u8BF7\u4E25\u683C\u8FD4\u56DE\u4EE5\u4E0BJSON\u683C\u5F0F\uFF08\u4E0D\u8981\u8FD4\u56DE\u5176\u4ED6\u4EFB\u4F55\u5185\u5BB9\uFF09\uFF1A
6
+ {"cron":"5\u4F4Dcron\u8868\u8FBE\u5F0F(\u5206 \u65F6 \u65E5 \u6708 \u5468)","prompt":"\u8981\u6267\u884C\u7684\u4EFB\u52A1\u63D0\u793A\u8BCD","desc":"\u7B80\u77ED\u7684\u4E2D\u6587\u63CF\u8FF0"}
7
+
8
+ \u5E38\u89C1cron\u683C\u5F0F\uFF1A
9
+ - \u6BCF\u5929\u65E9\u4E0A9\u70B9: "0 9 * * *"
10
+ - \u6BCF\u5468\u4E00\u65E9\u4E0A9\u70B9: "0 9 * * 1"
11
+ - \u5DE5\u4F5C\u65E5\u65E9\u4E0A9\u70B9: "0 9 * * 1-5"
12
+ - \u6BCF\u5C0F\u65F6: "0 * * * *"
13
+ - \u6BCF30\u5206\u949F: "*/30 * * * *"
14
+ - \u6BCF\u5929\u4E2D\u534812\u70B9: "0 12 * * *"
15
+ - \u6BCF\u67081\u53F7\u65E9\u4E0A9\u70B9: "0 9 1 * *"
16
+ - \u6BCF\u5468\u4E94\u4E0B\u53483\u70B9: "0 15 * * 5"`;async function analyzeCronWithClaude(s,t,e){const r=s.getConversationDir(t),i="claude",n=ANALYSIS_PROMPT.replace("{INPUT}",e),o=["--permission-mode","bypassPermissions","--print","--output-format","stream-json","--verbose"],d=(0,claude_process_1.resolveClaudeSettingsPath)(s,r);return d&&o.push("--settings",d),console.log(`[${(0,session_1.timestamp)()}] Cron\u5206\u6790: ${i} ${o.join(" ")}`),new Promise((a,c)=>{const u=(0,child_process_1.spawn)(i,o,{cwd:r,stdio:["pipe","pipe","pipe"]});u.stdin?.write(`${n}
17
+ `),u.stdin?.end();let h="",m="";readline_1.default.createInterface({input:u.stdout}).on("line",l=>{const f=(0,claude_process_1.parseClaudeStreamLine)(l);f?.type==="result"&&f.content&&(h=f.content)}),u.stderr?.on("data",l=>{m+=l.toString()});const g=setTimeout(()=>{u.kill(),c(new Error("\u5206\u6790\u8D85\u65F6(60s)"))},6e4);u.on("close",l=>{if(clearTimeout(g),l===0&&h)try{const f=h.match(/\{[\s\S]*\}/);if(f){const p=JSON.parse(f[0]);if(p.cron&&p.prompt){a(p);return}}c(new Error("Claude \u8FD4\u56DE\u683C\u5F0F\u4E0D\u6B63\u786E"))}catch{c(new Error("JSON \u89E3\u6790\u5931\u8D25"))}else{const f=m.trim()?` (${m.trim().substring(0,200)})`:"";console.error(`[${(0,session_1.timestamp)()}] Cron\u5206\u6790\u8FDB\u7A0B\u9000\u51FA(${l})${f}`);const p=m;/\b429\b/.test(p)?c(new Error("Claude \u914D\u989D\u5DF2\u8017\u5C3D(429)\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u6216\u660E\u5929\u518D\u8BD5")):/\b422\b/.test(p)||/TPM|额度超限/i.test(p)?c(new Error("Claude TPM \u9650\u6D41(422)\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5")):/\b401\b/.test(p)||/auth|认证|permission/i.test(p)?c(new Error("Claude \u8BA4\u8BC1\u5931\u8D25(401)\uFF0C\u8BF7\u68C0\u67E5 API Key \u914D\u7F6E")):l===1&&!h&&!m.trim()?c(new Error("Claude \u8FDB\u7A0B\u5F02\u5E38\u9000\u51FA\uFF0C\u65E0\u8F93\u51FA\u3002\u8BF7\u68C0\u67E5 claude \u547D\u4EE4\u662F\u5426\u53EF\u7528")):c(new Error(`\u5206\u6790\u5931\u8D25 (\u9000\u51FA\u7801: ${l})${f}`))}}),u.on("error",l=>{clearTimeout(g),c(new Error(`\u542F\u52A8 Claude \u8FDB\u7A0B\u5931\u8D25: ${l.message}`))})})}function formatCronJobList(s){if(s.length===0)return"\u{1F4ED} \u6682\u65E0\u5B9A\u65F6\u4EFB\u52A1";const t=[`### \u23F0 \u5B9A\u65F6\u4EFB\u52A1\u5217\u8868
18
+ `];for(const e of s){const r=e.enabled?"\u2705":"\u23F8\uFE0F",i=e.lastRunAt||"-";t.push(`**${r} ${e.id}**`),t.push(`- Cron: \`${e.cronExpression}\``),t.push(`- \u63CF\u8FF0: ${e.description}`),t.push(`- \u4EFB\u52A1: ${e.prompt}`),t.push(`- \u521B\u5EFA\u8005: ${e.senderNick}`),t.push(`- \u4E0A\u6B21\u6267\u884C: ${i}`),t.push("")}return t.push("\u{1F4A1} `/cron pause <id>` \u6682\u505C | `/cron resume <id>` \u6062\u590D | `/cron delete <id>` \u5220\u9664"),t.join(`
19
+ `)}function formatCronJobInfo(s){const t=s.enabled?"\u2705 \u542F\u7528":"\u23F8\uFE0F \u6682\u505C";return[`### \u23F0 \u5B9A\u65F6\u4EFB\u52A1 ${s.id}`,"",`- **\u72B6\u6001:** ${t}`,`- **Cron:** \`${s.cronExpression}\``,`- **\u63CF\u8FF0:** ${s.description}`,`- **\u4EFB\u52A1:** ${s.prompt}`,`- **\u521B\u5EFA\u8005:** ${s.senderNick}`,`- **\u521B\u5EFA\u65F6\u95F4:** ${s.createdAt}`,`- **\u4E0A\u6B21\u6267\u884C:** ${s.lastRunAt||"-"}`].join(`
20
+ `)}class CronEngine{constructor(t){this.jobs=[],this.timer=null,this.lastCheckedTime=-1,this.runningJobIds=new Set,this.MAX_CONCURRENT_JOBS=3,this.dc=t,this.jobs=loadCronJobs(t)}start(){this.startScheduler();const t=this.jobs.filter(e=>e.enabled).length;console.log(`[${(0,session_1.timestamp)()}] Cron\u5F15\u64CE\u5DF2\u542F\u52A8, \u5171 ${this.jobs.length} \u4E2A\u4EFB\u52A1 (${t} \u542F\u7528)`)}destroy(){this.stopScheduler()}addJob(t){const e={id:`cron_${Date.now()}`,conversationId:t.conversationId,cronExpression:t.cronExpression,description:t.description,prompt:t.prompt,enabled:!0,createdAt:(0,session_1.timestamp)(),senderStaffId:t.senderStaffId,senderNick:t.senderNick};return this.jobs.push(e),this.persist(),console.log(`[${(0,session_1.timestamp)()}] \u65B0\u589E\u5B9A\u65F6\u4EFB\u52A1: ${e.id} [${e.cronExpression}] ${e.description}`),e}removeJob(t){const e=this.jobs.findIndex(i=>i.id===t);if(e===-1)return!1;const r=this.jobs.splice(e,1)[0];return this.persist(),console.log(`[${(0,session_1.timestamp)()}] \u5220\u9664\u5B9A\u65F6\u4EFB\u52A1: ${r.id}`),!0}toggleJob(t,e){const r=this.jobs.find(i=>i.id===t);return r?(r.enabled=e,this.persist(),console.log(`[${(0,session_1.timestamp)()}] \u5B9A\u65F6\u4EFB\u52A1 ${r.id} ${e?"\u5DF2\u6062\u590D":"\u5DF2\u6682\u505C"}`),!0):!1}listJobs(t){return t?this.jobs.filter(e=>e.conversationId===t):[...this.jobs]}getJob(t){return this.jobs.find(e=>e.id===t)}async analyzeAndCreate(t,e,r,i){try{const n=await analyzeCronWithClaude(this.dc,t,e);return isValidCronExpression(n.cron)?{job:this.addJob({conversationId:t,cronExpression:n.cron,description:n.desc||e.substring(0,50),prompt:n.prompt,senderStaffId:r,senderNick:i})}:{error:`Claude \u8FD4\u56DE\u7684cron\u8868\u8FBE\u5F0F\u65E0\u6548: ${n.cron}`}}catch(n){return{error:n instanceof Error?n.message:String(n)}}}persist(){saveCronJobs(this.dc,this.jobs)}startScheduler(){const e=6e4-Date.now()%6e4;setTimeout(()=>{this.tick(),this.timer=setInterval(()=>this.tick(),6e4)},e)}stopScheduler(){this.timer&&(clearInterval(this.timer),this.timer=null)}tick(){const t=Date.now(),e=this.lastCheckedTime<0?t-t%6e4:this.lastCheckedTime+6e4-this.lastCheckedTime%6e4,r=t-t%6e4;for(let i=e;i<=r;i+=6e4){const n=new Date(i);if(!this.checkJobsAt(n))break}this.lastCheckedTime=t}checkJobsAt(t){if(this.runningJobIds.size>=this.MAX_CONCURRENT_JOBS)return console.warn(`[${(0,session_1.timestamp)()}] Cron\u5E76\u53D1\u4E0A\u9650(${this.MAX_CONCURRENT_JOBS}), \u8DF3\u8FC7 ${t.toISOString()} \u7684\u68C0\u67E5`),!1;for(const e of this.jobs)if(e.enabled&&!this.runningJobIds.has(e.id)){if(this.runningJobIds.size>=this.MAX_CONCURRENT_JOBS)break;matchesCron(e.cronExpression,t)&&(console.log(`[${(0,session_1.timestamp)()}] Cron\u89E6\u53D1: ${e.id} [${e.cronExpression}] ${e.description}`),this.executeJob(e).catch(r=>{console.error(`[${(0,session_1.timestamp)()}] Cron\u6267\u884C\u5931\u8D25: ${e.id}`,r)}))}return!0}async executeJob(t){this.runningJobIds.add(t.id);try{const e=this.dc.getConversationConfig(t.conversationId);if(!e){console.warn(`[${(0,session_1.timestamp)()}] Cron\u4EFB\u52A1 ${t.id} \u7684\u4F1A\u8BDD\u914D\u7F6E\u4E0D\u5B58\u5728, \u8DF3\u8FC7\u6267\u884C`);return}if(!!!(e.dingToken||this.dc.config.defaultDingToken)){console.warn(`[${(0,session_1.timestamp)()}] Cron\u4EFB\u52A1 ${t.id} \u65E0\u901A\u77E5\u80FD\u529B(\u65E0dingToken\u4E14\u65E0defaultDingToken), \u8DF3\u8FC7\u6267\u884C`);return}if((0,session_1.findActiveSession)(this.dc,t.conversationId)){console.log(`[${(0,session_1.timestamp)()}] Cron\u4EFB\u52A1 ${t.id} \u7684\u4F1A\u8BDD\u6709\u6D3B\u8DC3session, \u964D\u7EA7\u5230\u4EFB\u52A1\u961F\u5217`),await this.enqueueAsTask(t);return}const n=Date.now(),o={conversationId:t.conversationId,sessionWebhook:"",startTime:n,startTimeStr:utils_ok_1.dateUtil.mm(n).format("YYYY-MM-DD-HH-mm-ss"),startStaffId:t.senderStaffId,startNickName:`[cron]${t.senderNick}`},d=(0,session_1.getSessionDir)(this.dc,o);fs_1.default.mkdirSync(d,{recursive:!0}),fs_1.default.writeFileSync(`${d}/session.json`,JSON.stringify(o,null,2),"utf-8"),this.dc.activeSessions.set(t.conversationId,{session:o,lastSenderStaffId:t.senderStaffId,isProcessing:!0,messageQueue:[],conversationConfig:e}),(0,session_1.saveActiveSession)(this.dc,t.conversationId),console.log(`[${(0,session_1.timestamp)()}] Cron\u4EFB\u52A1 ${t.id} \u5F00\u59CB\u6267\u884C: ${t.description}`),fs_1.default.appendFileSync(`${d}/session.log`,`[${(0,session_1.timestamp)()}] [SYSTEM]: \u5B9A\u65F6\u4EFB\u52A1\u89E6\u53D1: ${t.description}
21
+ `,"utf-8");try{await(0,claude_process_1.executeClaudeQuery)(this.dc,o,t.prompt,{skill:e.taskCfg?.skill,agent:e.agent,senderNick:t.senderNick,senderStaffId:t.senderStaffId})}catch(a){console.error(`[${(0,session_1.timestamp)()}] Cron\u6267\u884CClaude\u67E5\u8BE2\u5931\u8D25: ${t.id}`,a),await(0,messaging_1.sendDingMessage)(this.dc,{conversationId:t.conversationId,sessionWebhook:"",atUserId:t.senderStaffId,content:`\u274C \u5B9A\u65F6\u4EFB\u52A1\u6267\u884C\u5931\u8D25: ${a instanceof Error?a.message:String(a)}`})}finally{this.dc.activeSessions.delete(t.conversationId),(0,session_1.saveActiveSession)(this.dc,t.conversationId)}t.lastRunAt=(0,session_1.timestamp)(),this.persist()}finally{this.runningJobIds.delete(t.id)}}async enqueueAsTask(t){try{await(0,task_1.saveTask)(this.dc,{conversationId:t.conversationId,prompt:t.prompt,senderStaffId:t.senderStaffId,senderNickName:`[cron]${t.senderNick}`,sessionWebhook:"",type:"cron"}),console.log(`[${(0,session_1.timestamp)()}] Cron\u4EFB\u52A1 ${t.id} \u5DF2\u964D\u7EA7\u5230\u4EFB\u52A1\u961F\u5217: ${t.description}`)}catch(e){console.error(`[${(0,session_1.timestamp)()}] Cron\u4EFB\u52A1 ${t.id} \u964D\u7EA7\u5230\u4EFB\u52A1\u961F\u5217\u5931\u8D25:`,e)}t.lastRunAt=(0,session_1.timestamp)(),this.persist()}}exports.CronEngine=CronEngine;
@@ -1 +1,2 @@
1
- 'use strict';function a6_0x544a(){const _0x25c12e=['5298552KYwVSG','缺少必填字段:\x20','__esModule','dingToken','keys','test','cron.json\x20共\x20','2177472mMGAhA','push','model','getHomeDir','split','\x20警告,\x20','\x20apiKey\x20重复:\x20','.doctor-check','cron.json\x20格式异常,无法解析为任务数组','客户端目录不可写:\x20','conversations\x20应为数组','whiteUserList','settings-tpl.json','\x20启用)','config.json\x20不存在','default','settings-tpl.json\x20缺少\x20env\x20字段','./session','PASS','config.json','(空)','claudeSettings','readFileSync','====================================\x0a','settings-tpl.json\x20不存在,创建\x20settings-ding.json\x20时将使用空模板','客户端目录存在:\x20','clientSecret','object',']\x20缺少\x20prompt','kill','.cc-ding','config.json\x20解析成功','join','utf-8','claude\x20命令不可用,请确认\x20Claude\x20Code\x20CLI\x20已安装','conversationId','进程运行中\x20(PID:\x20','Node\x20版本:','defineProperty','execSync','slice','exit','\x20仍为占位符:\x20','level','cronExpression','owner:\x20','1851292UzNjNI','\x20缺少\x20conversationId','isValid','settings-tpl.json\x20解析失败:\x20','boolean','isArray','has','settingLabel','cron.json','version','\x20为空数组','./api-key-manager',']\x20conversationId\x20\x22','apiKeyCfg.claudeSettings\x20不是数组','apiKeyCfg\x20未配置,无法使用\x20API\x20Key\x20池化轮换',']\x20缺少\x20id','string','settings-tpl.json\x20有效,env\x20包含:\x20','length','existsSync','WARN','7SujfPf','11915320zyVAzR','trim','12LITSim','30243590uLpoUK','2424505YjPrGT','some','resetTime',']\x20缺少\x20cronExpression','settings-tpl.json\x20根元素不是对象','runDoctor','which\x20claude','apiKeyCfg.claudeSettings\x20为空,无备用\x20Key','owner','defaultDingToken','PID\x20锁文件读取异常:\x20','conversations\x20为空数组,可通过\x20/reg\x20命令动态注册','add','enabled','\x20缺少\x20model','\x20个定时任务\x20(','conversations[','\x20linkConversationId\x20\x22','baseUrl','env','cron.json[','unlinkSync','\x20通过,\x20','\x20\x20❌\x20存在致命问题,请修复后重新运行','------------------------------------','jobs','\x20\x20✅\x20所有检查通过','filter','\x20项,有效\x20','apiKeyCfg','message','conversations','apiKey','\x20个群配置','9AhrxeS','path','log','prompt','cron.json\x20不存在\x20(无定时任务)','\x20缺少\x20baseUrl','\x20致命','\x22\x20未在\x20conversations\x20中找到','apiKeyCfg.claudeSettings[','1253209afdfNt','parse','printDoctorResults','FATAL','无运行中的进程','linkConversationId','startsWith','owner\x20未配置,管理命令(/clean,\x20/open,\x20/reset-apikeycfg,\x20/reg,\x20/auth)不可用','apiKeyCfg.resetTime:\x20','\x20conversationId\x20仍为占位符:\x20','claude\x20命令可用','\x20isValid\x20类型异常:\x20'];a6_0x544a=function(){return _0x25c12e;};return a6_0x544a();}const a6_0x3a40ed=a6_0x13b7;(function(_0x48f8b4,_0x13739b){const _0x3dc24b=a6_0x13b7,_0xe595c5=_0x48f8b4();while(!![]){try{const _0x44b77e=parseInt(_0x3dc24b(0xd2))/0x1+parseInt(_0x3dc24b(0xe5))/0x2+-parseInt(_0x3dc24b(0xc9))/0x3*(-parseInt(_0x3dc24b(0x8d))/0x4)+-parseInt(_0x3dc24b(0xa7))/0x5*(-parseInt(_0x3dc24b(0xa5))/0x6)+-parseInt(_0x3dc24b(0xa2))/0x7*(parseInt(_0x3dc24b(0xa3))/0x8)+parseInt(_0x3dc24b(0xde))/0x9+-parseInt(_0x3dc24b(0xa6))/0xa;if(_0x44b77e===_0x13739b)break;else _0xe595c5['push'](_0xe595c5['shift']());}catch(_0x3d9213){_0xe595c5['push'](_0xe595c5['shift']());}}}(a6_0x544a,0xbd402));var __importDefault=this&&this['__importDefault']||function(_0x4e9f65){const _0x34cca0=a6_0x13b7;return _0x4e9f65&&_0x4e9f65[_0x34cca0(0xe0)]?_0x4e9f65:{'default':_0x4e9f65};};function a6_0x13b7(_0x1519f4,_0xbc0dcf){_0x1519f4=_0x1519f4-0x6f;const _0x544aa1=a6_0x544a();let _0x13b7a2=_0x544aa1[_0x1519f4];return _0x13b7a2;}Object[a6_0x3a40ed(0x85)](exports,a6_0x3a40ed(0xe0),{'value':!![]}),exports[a6_0x3a40ed(0xd4)]=printDoctorResults,exports[a6_0x3a40ed(0xac)]=runDoctor;const session_1=require(a6_0x3a40ed(0x70)),api_key_manager_1=require(a6_0x3a40ed(0x98)),fs_1=__importDefault(require('fs')),path_1=__importDefault(require(a6_0x3a40ed(0xca))),child_process_1=require('child_process');function printDoctorResults(_0x570f49){const _0x1f9ace=a6_0x3a40ed;console['log'](''),console[_0x1f9ace(0xcb)]('==========\x20cc-ding\x20doctor\x20==========');const _0x22d4c8=_0x570f49[_0x1f9ace(0xa8)](_0x5f49e6=>_0x5f49e6[_0x1f9ace(0x8a)]==='FATAL');for(const _0x4788a0 of _0x570f49){const _0x235fa5=_0x4788a0[_0x1f9ace(0x8a)]===_0x1f9ace(0x71)?'✓':_0x4788a0[_0x1f9ace(0x8a)]===_0x1f9ace(0xd5)?'✗':'⚠',_0x47eb56=_0x4788a0[_0x1f9ace(0x8a)]===_0x1f9ace(0x71)?'':'['+_0x4788a0['level']+']\x20';console['log']('\x20\x20'+_0x235fa5+'\x20'+_0x47eb56+_0x4788a0[_0x1f9ace(0xc5)]);}const _0x22d544=_0x570f49[_0x1f9ace(0xc2)](_0x4bbb1c=>_0x4bbb1c[_0x1f9ace(0x8a)]===_0x1f9ace(0x71))[_0x1f9ace(0x9f)],_0x3a815a=_0x570f49[_0x1f9ace(0xc2)](_0x47bfe2=>_0x47bfe2['level']==='WARN')[_0x1f9ace(0x9f)],_0x1775a5=_0x570f49[_0x1f9ace(0xc2)](_0x5dda35=>_0x5dda35[_0x1f9ace(0x8a)]===_0x1f9ace(0xd5))[_0x1f9ace(0x9f)];console['log'](_0x1f9ace(0xbf)),console[_0x1f9ace(0xcb)]('\x20\x20合计:\x20'+_0x22d544+_0x1f9ace(0xbd)+_0x3a815a+_0x1f9ace(0xea)+_0x1775a5+_0x1f9ace(0xcf));_0x22d4c8?console['log'](_0x1f9ace(0xbe)):console['log'](_0x1f9ace(0xc1));console[_0x1f9ace(0xcb)](_0x1f9ace(0x76));if(_0x22d4c8)process[_0x1f9ace(0x88)](0x1);}function runDoctor(_0x10accd){const _0x203b71=a6_0x3a40ed,_0xd47475=[],_0x293ae1=process[_0x203b71(0x96)][_0x203b71(0x87)](0x1),_0x354108=parseInt(_0x293ae1[_0x203b71(0xe9)]('.')[0x0],0xa);_0x354108<0x18?_0xd47475[_0x203b71(0xe6)](check('FATAL','Node\x20版本过低:'+_0x293ae1+',要求\x20Node\x20>=\x2024')):_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0x71),_0x203b71(0x84)+_0x293ae1));if(!fs_1[_0x203b71(0xf4)][_0x203b71(0xa0)](_0x10accd))return _0xd47475[_0x203b71(0xe6)](check('FATAL','客户端目录不存在:\x20'+_0x10accd)),_0xd47475;_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0x71),_0x203b71(0x78)+_0x10accd));const _0x42a453=path_1['default'][_0x203b71(0x7f)](_0x10accd,'.pid.lock');if(fs_1[_0x203b71(0xf4)][_0x203b71(0xa0)](_0x42a453))try{const _0x2d592d=parseInt(fs_1['default']['readFileSync'](_0x42a453,_0x203b71(0x80))[_0x203b71(0xa4)](),0xa);if(!isNaN(_0x2d592d))try{process[_0x203b71(0x7c)](_0x2d592d,0x0),_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0x71),_0x203b71(0x83)+_0x2d592d+')'));}catch{_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xa1),'锁文件存在但进程\x20'+_0x2d592d+'\x20已退出(过期锁文件)'));}}catch{_0xd47475[_0x203b71(0xe6)](check('WARN',_0x203b71(0xb1)+_0x42a453));}else _0xd47475[_0x203b71(0xe6)](check(_0x203b71(0x71),_0x203b71(0xd6)));const _0x4e10c8=path_1['default'][_0x203b71(0x7f)](_0x10accd,_0x203b71(0x72));if(!fs_1[_0x203b71(0xf4)]['existsSync'](_0x4e10c8))return _0xd47475['push'](check(_0x203b71(0xd5),_0x203b71(0xf3))),_0xd47475;let _0x321b32;try{_0x321b32=JSON[_0x203b71(0xd3)](fs_1[_0x203b71(0xf4)][_0x203b71(0x75)](_0x4e10c8,_0x203b71(0x80)));}catch(_0x16803f){return _0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xd5),'config.json\x20解析失败:\x20'+(_0x16803f instanceof Error?_0x16803f['message']:_0x16803f))),_0xd47475;}_0xd47475[_0x203b71(0xe6)](check('PASS',_0x203b71(0x7e)));const _0x6b5c08=[{'key':_0x203b71(0x79),'label':'clientSecret'},{'key':_0x203b71(0xb0),'label':_0x203b71(0xb0)},{'key':_0x203b71(0xf0),'label':_0x203b71(0xf0),'isArr':!![]},{'key':_0x203b71(0xaf),'label':'owner'}];for(const {key:_0x53cc43,label:_0x560667,isArr:_0x50d9b9}of _0x6b5c08){const _0x3e78b0=_0x321b32[_0x53cc43];if(_0x3e78b0===undefined||_0x3e78b0===null||_0x3e78b0==='')_0xd47475['push'](check(_0x203b71(0xd5),_0x203b71(0xdf)+_0x560667));else{if(_0x50d9b9&&!Array[_0x203b71(0x92)](_0x3e78b0))_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xd5),_0x560667+'\x20应为数组'));else{if(_0x53cc43!==_0x203b71(0xc6)&&_0x50d9b9&&_0x3e78b0[_0x203b71(0x9f)]===0x0)_0xd47475[_0x203b71(0xe6)](check('WARN',_0x560667+_0x203b71(0x97)));else!_0x50d9b9&&typeof _0x3e78b0==='string'&&_0x3e78b0[_0x203b71(0xd8)]('<')?_0xd47475['push'](check(_0x203b71(0xd5),_0x560667+_0x203b71(0x89)+_0x3e78b0)):_0xd47475['push'](check(_0x203b71(0x71),_0x560667+'\x20✓'));}}}_0x321b32[_0x203b71(0xaf)]?_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0x71),_0x203b71(0x8c)+_0x321b32[_0x203b71(0xaf)])):_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xd5),_0x203b71(0xd9)));const _0x82ea59=[_0x203b71(0x79),_0x203b71(0xb0)];for(const _0x5bbedf of _0x82ea59){const _0x2dc0a4=_0x321b32[_0x5bbedf];typeof _0x2dc0a4===_0x203b71(0x9d)&&/^<.*>$/[_0x203b71(0xe3)](_0x2dc0a4[_0x203b71(0xa4)]())&&_0xd47475['push'](check(_0x203b71(0xd5),_0x5bbedf+_0x203b71(0x89)+_0x2dc0a4));}const _0x28a875=new Set();if(!Array['isArray'](_0x321b32[_0x203b71(0xc6)]))_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xd5),_0x203b71(0xef)));else{if(_0x321b32[_0x203b71(0xc6)][_0x203b71(0x9f)]===0x0)_0xd47475[_0x203b71(0xe6)](check('PASS',_0x203b71(0xb2)));else{for(let _0x57e361=0x0;_0x57e361<_0x321b32[_0x203b71(0xc6)]['length'];_0x57e361++){const _0x2f3516=_0x321b32[_0x203b71(0xc6)][_0x57e361],_0x45e63a=_0x203b71(0xb7)+_0x57e361+']';if(!_0x2f3516[_0x203b71(0x82)])_0xd47475[_0x203b71(0xe6)](check('FATAL',_0x45e63a+_0x203b71(0x8e)));else{if(typeof _0x2f3516['conversationId']===_0x203b71(0x9d)&&/^<.*>$/['test'](_0x2f3516[_0x203b71(0x82)][_0x203b71(0xa4)]()))_0xd47475[_0x203b71(0xe6)](check('FATAL',_0x45e63a+_0x203b71(0xdb)+_0x2f3516['conversationId']));else _0x28a875[_0x203b71(0x93)](_0x2f3516[_0x203b71(0x82)])?_0xd47475[_0x203b71(0xe6)](check('WARN',_0x45e63a+'\x20conversationId\x20重复:\x20'+_0x2f3516[_0x203b71(0x82)])):_0x28a875[_0x203b71(0xb3)](_0x2f3516['conversationId']);}_0x2f3516[_0x203b71(0xd7)]&&!_0x321b32[_0x203b71(0xc6)][_0x203b71(0xa8)](_0x103f23=>_0x103f23[_0x203b71(0x82)]===_0x2f3516['linkConversationId'])&&_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xa1),_0x45e63a+_0x203b71(0xb8)+_0x2f3516[_0x203b71(0xd7)]+_0x203b71(0xd0))),_0x2f3516[_0x203b71(0xe1)]&&typeof _0x2f3516[_0x203b71(0xe1)]===_0x203b71(0x9d)&&/^<.*>$/[_0x203b71(0xe3)](_0x2f3516[_0x203b71(0xe1)]['trim']())&&_0xd47475['push'](check(_0x203b71(0xa1),_0x45e63a+'\x20dingToken\x20仍为占位符'));}_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0x71),'conversations\x20共\x20'+_0x321b32[_0x203b71(0xc6)][_0x203b71(0x9f)]+_0x203b71(0xc8)));}}if(_0x321b32[_0x203b71(0xc4)]){const _0x3aa5e5=_0x321b32[_0x203b71(0xc4)];_0x3aa5e5[_0x203b71(0xa9)]&&_0xd47475['push'](check(_0x203b71(0x71),_0x203b71(0xda)+_0x3aa5e5[_0x203b71(0xa9)]));if(!Array[_0x203b71(0x92)](_0x3aa5e5['claudeSettings']))_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xa1),_0x203b71(0x9a)));else{if(_0x3aa5e5[_0x203b71(0x74)][_0x203b71(0x9f)]===0x0)_0xd47475[_0x203b71(0xe6)](check('WARN',_0x203b71(0xae)));else{const _0x478b2d=new Set();for(let _0x5ccbf9=0x0;_0x5ccbf9<_0x3aa5e5[_0x203b71(0x74)][_0x203b71(0x9f)];_0x5ccbf9++){const _0x2f5cc0=_0x3aa5e5['claudeSettings'][_0x5ccbf9],_0x19afb4=_0x203b71(0xd1)+_0x5ccbf9+']';if(!_0x2f5cc0[_0x203b71(0xc7)])_0xd47475['push'](check(_0x203b71(0xd5),_0x19afb4+'\x20缺少\x20apiKey'));else _0x478b2d['has'](_0x2f5cc0[_0x203b71(0xc7)])?_0xd47475['push'](check(_0x203b71(0xa1),_0x19afb4+_0x203b71(0xeb)+(0x0,api_key_manager_1[_0x203b71(0x94)])(_0x2f5cc0))):_0x478b2d[_0x203b71(0xb3)](_0x2f5cc0[_0x203b71(0xc7)]);if(!_0x2f5cc0[_0x203b71(0xb9)])_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xa1),_0x19afb4+_0x203b71(0xce)));if(!_0x2f5cc0[_0x203b71(0xe7)])_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xa1),_0x19afb4+_0x203b71(0xb5)));if(typeof _0x2f5cc0[_0x203b71(0x8f)]!==_0x203b71(0x91))_0xd47475[_0x203b71(0xe6)](check('WARN',_0x19afb4+_0x203b71(0xdd)+typeof _0x2f5cc0['isValid']));}const _0x276cbf=_0x3aa5e5[_0x203b71(0x74)][_0x203b71(0xc2)](_0x15c027=>_0x15c027[_0x203b71(0x8f)])[_0x203b71(0x9f)];_0xd47475[_0x203b71(0xe6)](check('PASS','apiKeyCfg.claudeSettings\x20共\x20'+_0x3aa5e5[_0x203b71(0x74)]['length']+_0x203b71(0xc3)+_0x276cbf));}}}else _0xd47475['push'](check(_0x203b71(0xa1),_0x203b71(0x9b)));const _0x207dbb=path_1[_0x203b71(0xf4)][_0x203b71(0x7f)](_0x10accd,_0x203b71(0x95));if(fs_1[_0x203b71(0xf4)]['existsSync'](_0x207dbb))try{const _0x5693d4=JSON['parse'](fs_1[_0x203b71(0xf4)]['readFileSync'](_0x207dbb,_0x203b71(0x80))),_0x2be6ed=Array[_0x203b71(0x92)](_0x5693d4)?_0x5693d4:_0x5693d4[_0x203b71(0xc0)];if(Array['isArray'](_0x2be6ed)){const _0x18d8a4=_0x2be6ed['filter'](_0x197da5=>_0x197da5[_0x203b71(0xb4)]!==![])[_0x203b71(0x9f)];_0xd47475[_0x203b71(0xe6)](check('PASS',_0x203b71(0xe4)+_0x2be6ed[_0x203b71(0x9f)]+_0x203b71(0xb6)+_0x18d8a4+_0x203b71(0xf2)));for(let _0x59b5e2=0x0;_0x59b5e2<_0x2be6ed[_0x203b71(0x9f)];_0x59b5e2++){const _0x6869ce=_0x2be6ed[_0x59b5e2];if(!_0x6869ce['id'])_0xd47475[_0x203b71(0xe6)](check('WARN',_0x203b71(0xbb)+_0x59b5e2+_0x203b71(0x9c)));if(!_0x6869ce[_0x203b71(0x8b)])_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xa1),_0x203b71(0xbb)+_0x59b5e2+_0x203b71(0xaa)));if(!_0x6869ce[_0x203b71(0xcc)])_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xa1),_0x203b71(0xbb)+_0x59b5e2+_0x203b71(0x7b)));if(!_0x6869ce[_0x203b71(0x82)])_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xa1),_0x203b71(0xbb)+_0x59b5e2+']\x20缺少\x20conversationId'));else!_0x28a875[_0x203b71(0x93)](_0x6869ce[_0x203b71(0x82)])&&_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xa1),'cron.json['+_0x59b5e2+_0x203b71(0x99)+_0x6869ce[_0x203b71(0x82)]+'\x22\x20未在\x20config.json\x20conversations\x20中找到'));}}else _0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xa1),_0x203b71(0xed)));}catch(_0x477636){_0xd47475['push'](check('WARN','cron.json\x20解析失败:\x20'+(_0x477636 instanceof Error?_0x477636[_0x203b71(0xc5)]:_0x477636)));}else _0xd47475[_0x203b71(0xe6)](check('PASS',_0x203b71(0xcd)));const _0x3af983=path_1[_0x203b71(0xf4)][_0x203b71(0x7f)]((0x0,session_1[_0x203b71(0xe8)])(),_0x203b71(0x7d),_0x203b71(0xf1));if(fs_1[_0x203b71(0xf4)][_0x203b71(0xa0)](_0x3af983))try{const _0x5df39a=JSON['parse'](fs_1[_0x203b71(0xf4)][_0x203b71(0x75)](_0x3af983,_0x203b71(0x80)));if(typeof _0x5df39a!=='object'||_0x5df39a===null)_0xd47475['push'](check(_0x203b71(0xa1),_0x203b71(0xab)));else{if(!_0x5df39a[_0x203b71(0xba)]||typeof _0x5df39a[_0x203b71(0xba)]!==_0x203b71(0x7a))_0xd47475['push'](check(_0x203b71(0xa1),_0x203b71(0x6f)));else{const _0x387cae=Object[_0x203b71(0xe2)](_0x5df39a[_0x203b71(0xba)]);_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0x71),_0x203b71(0x9e)+(_0x387cae[_0x203b71(0x7f)](',\x20')||_0x203b71(0x73))));}}}catch(_0x114b9b){_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xa1),_0x203b71(0x90)+(_0x114b9b instanceof Error?_0x114b9b['message']:_0x114b9b)));}else _0xd47475[_0x203b71(0xe6)](check(_0x203b71(0xa1),_0x203b71(0x77)));try{(0x0,child_process_1[_0x203b71(0x86)])(_0x203b71(0xad),{'stdio':'pipe'}),_0xd47475[_0x203b71(0xe6)](check(_0x203b71(0x71),_0x203b71(0xdc)));}catch{_0xd47475['push'](check(_0x203b71(0xd5),_0x203b71(0x81)));}try{const _0x5b772f=path_1[_0x203b71(0xf4)][_0x203b71(0x7f)](_0x10accd,_0x203b71(0xec));fs_1['default']['writeFileSync'](_0x5b772f,'ok',_0x203b71(0x80)),fs_1[_0x203b71(0xf4)][_0x203b71(0xbc)](_0x5b772f),_0xd47475['push'](check(_0x203b71(0x71),'客户端目录可写'));}catch(_0x1e2f04){_0xd47475['push'](check('FATAL',_0x203b71(0xee)+(_0x1e2f04 instanceof Error?_0x1e2f04['message']:_0x1e2f04)));}return _0xd47475;}function check(_0x11bd06,_0x5c2349){return{'level':_0x11bd06,'message':_0x5c2349};}
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.printDoctorResults=printDoctorResults,exports.runDoctor=runDoctor;const session_1=require("./session"),api_key_manager_1=require("./api-key-manager"),fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),child_process_1=require("child_process");function printDoctorResults(t){console.log(""),console.log("========== cc-ding doctor ==========");const e=t.some(i=>i.level==="FATAL");for(const i of t){const r=i.level==="PASS"?"\u2713":i.level==="FATAL"?"\u2717":"\u26A0",f=i.level==="PASS"?"":`[${i.level}] `;console.log(` ${r} ${f}${i.message}`)}const a=t.filter(i=>i.level==="PASS").length,h=t.filter(i=>i.level==="WARN").length,u=t.filter(i=>i.level==="FATAL").length;console.log("------------------------------------"),console.log(` \u5408\u8BA1: ${a} \u901A\u8FC7, ${h} \u8B66\u544A, ${u} \u81F4\u547D`),console.log(e?" \u274C \u5B58\u5728\u81F4\u547D\u95EE\u9898\uFF0C\u8BF7\u4FEE\u590D\u540E\u91CD\u65B0\u8FD0\u884C":" \u2705 \u6240\u6709\u68C0\u67E5\u901A\u8FC7"),console.log(`====================================
2
+ `),e&&process.exit(1)}function runDoctor(t){const e=[],a=process.version.slice(1);if(parseInt(a.split(".")[0],10)<24?e.push(check("FATAL",`Node \u7248\u672C\u8FC7\u4F4E\uFF1A${a}\uFF0C\u8981\u6C42 Node >= 24`)):e.push(check("PASS",`Node \u7248\u672C\uFF1A${a}`)),!fs_1.default.existsSync(t))return e.push(check("FATAL",`\u5BA2\u6237\u7AEF\u76EE\u5F55\u4E0D\u5B58\u5728: ${t}`)),e;e.push(check("PASS",`\u5BA2\u6237\u7AEF\u76EE\u5F55\u5B58\u5728: ${t}`));const u=path_1.default.join(t,".pid.lock");if(fs_1.default.existsSync(u))try{const s=parseInt(fs_1.default.readFileSync(u,"utf-8").trim(),10);if(!isNaN(s))try{process.kill(s,0),e.push(check("PASS",`\u8FDB\u7A0B\u8FD0\u884C\u4E2D (PID: ${s})`))}catch{e.push(check("WARN",`\u9501\u6587\u4EF6\u5B58\u5728\u4F46\u8FDB\u7A0B ${s} \u5DF2\u9000\u51FA\uFF08\u8FC7\u671F\u9501\u6587\u4EF6\uFF09`))}}catch{e.push(check("WARN",`PID \u9501\u6587\u4EF6\u8BFB\u53D6\u5F02\u5E38: ${u}`))}else e.push(check("PASS","\u65E0\u8FD0\u884C\u4E2D\u7684\u8FDB\u7A0B"));const i=path_1.default.join(t,"config.json");if(!fs_1.default.existsSync(i))return e.push(check("FATAL","config.json \u4E0D\u5B58\u5728")),e;let r;try{r=JSON.parse(fs_1.default.readFileSync(i,"utf-8"))}catch(s){return e.push(check("FATAL",`config.json \u89E3\u6790\u5931\u8D25: ${s instanceof Error?s.message:s}`)),e}e.push(check("PASS","config.json \u89E3\u6790\u6210\u529F"));const f=[{key:"clientSecret",label:"clientSecret"},{key:"defaultDingToken",label:"defaultDingToken"},{key:"whiteUserList",label:"whiteUserList",isArr:!0},{key:"owner",label:"owner"}];for(const{key:s,label:n,isArr:l}of f){const o=r[s];o==null||o===""?e.push(check("FATAL",`\u7F3A\u5C11\u5FC5\u586B\u5B57\u6BB5: ${n}`)):l&&!Array.isArray(o)?e.push(check("FATAL",`${n} \u5E94\u4E3A\u6570\u7EC4`)):s!=="conversations"&&l&&o.length===0?e.push(check("WARN",`${n} \u4E3A\u7A7A\u6570\u7EC4`)):!l&&typeof o=="string"&&o.startsWith("<")?e.push(check("FATAL",`${n} \u4ECD\u4E3A\u5360\u4F4D\u7B26: ${o}`)):e.push(check("PASS",`${n} \u2713`))}r.owner?e.push(check("PASS",`owner: ${r.owner}`)):e.push(check("FATAL","owner \u672A\u914D\u7F6E\uFF0C\u7BA1\u7406\u547D\u4EE4\uFF08/clean, /open, /reset-apikeycfg, /reg, /auth\uFF09\u4E0D\u53EF\u7528"));const S=["clientSecret","defaultDingToken"];for(const s of S){const n=r[s];typeof n=="string"&&/^<.*>$/.test(n.trim())&&e.push(check("FATAL",`${s} \u4ECD\u4E3A\u5360\u4F4D\u7B26: ${n}`))}const d=new Set;if(!Array.isArray(r.conversations))e.push(check("FATAL","conversations \u5E94\u4E3A\u6570\u7EC4"));else if(r.conversations.length===0)e.push(check("PASS","conversations \u4E3A\u7A7A\u6570\u7EC4\uFF0C\u53EF\u901A\u8FC7 /reg \u547D\u4EE4\u52A8\u6001\u6CE8\u518C"));else{for(let s=0;s<r.conversations.length;s++){const n=r.conversations[s],l=`conversations[${s}]`;n.conversationId?typeof n.conversationId=="string"&&/^<.*>$/.test(n.conversationId.trim())?e.push(check("FATAL",`${l} conversationId \u4ECD\u4E3A\u5360\u4F4D\u7B26: ${n.conversationId}`)):d.has(n.conversationId)?e.push(check("WARN",`${l} conversationId \u91CD\u590D: ${n.conversationId}`)):d.add(n.conversationId):e.push(check("FATAL",`${l} \u7F3A\u5C11 conversationId`)),n.linkConversationId&&!r.conversations.some(o=>o.conversationId===n.linkConversationId)&&e.push(check("WARN",`${l} linkConversationId "${n.linkConversationId}" \u672A\u5728 conversations \u4E2D\u627E\u5230`)),n.dingToken&&typeof n.dingToken=="string"&&/^<.*>$/.test(n.dingToken.trim())&&e.push(check("WARN",`${l} dingToken \u4ECD\u4E3A\u5360\u4F4D\u7B26`))}e.push(check("PASS",`conversations \u5171 ${r.conversations.length} \u4E2A\u7FA4\u914D\u7F6E`))}if(r.apiKeyCfg){const s=r.apiKeyCfg;if(s.resetTime&&e.push(check("PASS",`apiKeyCfg.resetTime: ${s.resetTime}`)),!Array.isArray(s.claudeSettings))e.push(check("WARN","apiKeyCfg.claudeSettings \u4E0D\u662F\u6570\u7EC4"));else if(s.claudeSettings.length===0)e.push(check("WARN","apiKeyCfg.claudeSettings \u4E3A\u7A7A\uFF0C\u65E0\u5907\u7528 Key"));else{const n=new Set;for(let o=0;o<s.claudeSettings.length;o++){const c=s.claudeSettings[o],p=`apiKeyCfg.claudeSettings[${o}]`;c.apiKey?n.has(c.apiKey)?e.push(check("WARN",`${p} apiKey \u91CD\u590D: ${(0,api_key_manager_1.settingLabel)(c)}`)):n.add(c.apiKey):e.push(check("FATAL",`${p} \u7F3A\u5C11 apiKey`)),c.baseUrl||e.push(check("WARN",`${p} \u7F3A\u5C11 baseUrl`)),c.model||e.push(check("WARN",`${p} \u7F3A\u5C11 model`)),typeof c.isValid!="boolean"&&e.push(check("WARN",`${p} isValid \u7C7B\u578B\u5F02\u5E38: ${typeof c.isValid}`))}const l=s.claudeSettings.filter(o=>o.isValid).length;e.push(check("PASS",`apiKeyCfg.claudeSettings \u5171 ${s.claudeSettings.length} \u9879\uFF0C\u6709\u6548 ${l}`))}}else e.push(check("WARN","apiKeyCfg \u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u4F7F\u7528 API Key \u6C60\u5316\u8F6E\u6362"));const A=path_1.default.join(t,"cron.json");if(fs_1.default.existsSync(A))try{const s=JSON.parse(fs_1.default.readFileSync(A,"utf-8")),n=Array.isArray(s)?s:s.jobs;if(Array.isArray(n)){const l=n.filter(o=>o.enabled!==!1).length;e.push(check("PASS",`cron.json \u5171 ${n.length} \u4E2A\u5B9A\u65F6\u4EFB\u52A1 (${l} \u542F\u7528)`));for(let o=0;o<n.length;o++){const c=n[o];c.id||e.push(check("WARN",`cron.json[${o}] \u7F3A\u5C11 id`)),c.cronExpression||e.push(check("WARN",`cron.json[${o}] \u7F3A\u5C11 cronExpression`)),c.prompt||e.push(check("WARN",`cron.json[${o}] \u7F3A\u5C11 prompt`)),c.conversationId?d.has(c.conversationId)||e.push(check("WARN",`cron.json[${o}] conversationId "${c.conversationId}" \u672A\u5728 config.json conversations \u4E2D\u627E\u5230`)):e.push(check("WARN",`cron.json[${o}] \u7F3A\u5C11 conversationId`))}}else e.push(check("WARN","cron.json \u683C\u5F0F\u5F02\u5E38\uFF0C\u65E0\u6CD5\u89E3\u6790\u4E3A\u4EFB\u52A1\u6570\u7EC4"))}catch(s){e.push(check("WARN",`cron.json \u89E3\u6790\u5931\u8D25: ${s instanceof Error?s.message:s}`))}else e.push(check("PASS","cron.json \u4E0D\u5B58\u5728 (\u65E0\u5B9A\u65F6\u4EFB\u52A1)"));const g=path_1.default.join((0,session_1.getHomeDir)(),".cc-ding","settings-tpl.json");if(fs_1.default.existsSync(g))try{const s=JSON.parse(fs_1.default.readFileSync(g,"utf-8"));if(typeof s!="object"||s===null)e.push(check("WARN","settings-tpl.json \u6839\u5143\u7D20\u4E0D\u662F\u5BF9\u8C61"));else if(!s.env||typeof s.env!="object")e.push(check("WARN","settings-tpl.json \u7F3A\u5C11 env \u5B57\u6BB5"));else{const n=Object.keys(s.env);e.push(check("PASS",`settings-tpl.json \u6709\u6548\uFF0Cenv \u5305\u542B: ${n.join(", ")||"(\u7A7A)"}`))}}catch(s){e.push(check("WARN",`settings-tpl.json \u89E3\u6790\u5931\u8D25: ${s instanceof Error?s.message:s}`))}else e.push(check("WARN","settings-tpl.json \u4E0D\u5B58\u5728\uFF0C\u521B\u5EFA settings-ding.json \u65F6\u5C06\u4F7F\u7528\u7A7A\u6A21\u677F"));try{(0,child_process_1.execSync)("which claude",{stdio:"pipe"}),e.push(check("PASS","claude \u547D\u4EE4\u53EF\u7528"))}catch{e.push(check("FATAL","claude \u547D\u4EE4\u4E0D\u53EF\u7528\uFF0C\u8BF7\u786E\u8BA4 Claude Code CLI \u5DF2\u5B89\u88C5"))}try{const s=path_1.default.join(t,".doctor-check");fs_1.default.writeFileSync(s,"ok","utf-8"),fs_1.default.unlinkSync(s),e.push(check("PASS","\u5BA2\u6237\u7AEF\u76EE\u5F55\u53EF\u5199"))}catch(s){e.push(check("FATAL",`\u5BA2\u6237\u7AEF\u76EE\u5F55\u4E0D\u53EF\u5199: ${s instanceof Error?s.message:s}`))}return e}function check(t,e){return{level:t,message:e}}
@@ -1 +1,13 @@
1
- 'use strict';const a7_0x41fe2d=a7_0x1b59;(function(_0x3573b3,_0x25dc4f){const _0x485875=a7_0x1b59,_0x264e3f=_0x3573b3();while(!![]){try{const _0x61788e=-parseInt(_0x485875(0x128))/0x1*(parseInt(_0x485875(0x105))/0x2)+-parseInt(_0x485875(0x139))/0x3*(parseInt(_0x485875(0xee))/0x4)+-parseInt(_0x485875(0x11b))/0x5+parseInt(_0x485875(0xdc))/0x6+parseInt(_0x485875(0xfe))/0x7+-parseInt(_0x485875(0x100))/0x8*(-parseInt(_0x485875(0xf7))/0x9)+parseInt(_0x485875(0x109))/0xa*(-parseInt(_0x485875(0x116))/0xb);if(_0x61788e===_0x25dc4f)break;else _0x264e3f['push'](_0x264e3f['shift']());}catch(_0x78aa14){_0x264e3f['push'](_0x264e3f['shift']());}}}(a7_0x226c,0x5811e));var __importDefault=this&&this[a7_0x41fe2d(0x111)]||function(_0x2752f5){const _0x476bfd=a7_0x41fe2d;return _0x2752f5&&_0x2752f5[_0x476bfd(0xe3)]?_0x2752f5:{'default':_0x2752f5};};Object['defineProperty'](exports,a7_0x41fe2d(0xe3),{'value':!![]}),exports['runOcr']=runOcr,exports[a7_0x41fe2d(0xfa)]=processPictureMessage,exports[a7_0x41fe2d(0x132)]=processRichTextMessage;const child_process_1=require(a7_0x41fe2d(0x11d)),fs_1=__importDefault(require('fs')),path_1=__importDefault(require(a7_0x41fe2d(0xe9))),urllib_1=__importDefault(require(a7_0x41fe2d(0xd9))),session_1=require(a7_0x41fe2d(0x13a)),common_1=require('../common'),MAX_IMAGE_SIZE=0xa*0x400*0x400,DING_API_BASE=a7_0x41fe2d(0x12d),OCR_PREAMBLE='以下图片\x20OCR\x20识别结果来自对用户消息中图片的预处理(非用户原始输入),如识别不准确可直接查看原图路径',OCR_BIN_DIR=(0x0,common_1['projUtil'])()[a7_0x41fe2d(0x101)](),cachedOcrBinPath=((()=>{const _0x1428f0=a7_0x41fe2d;if(process[_0x1428f0(0x129)]===_0x1428f0(0x102))return null;const _0x5259f4=process[_0x1428f0(0xf8)];if(_0x5259f4===_0x1428f0(0xd8))return path_1[_0x1428f0(0x130)][_0x1428f0(0xf9)](OCR_BIN_DIR,'ocr-arm64');if(_0x5259f4===_0x1428f0(0xea))return path_1[_0x1428f0(0x130)]['join'](OCR_BIN_DIR,_0x1428f0(0x10f));return null;})());let ocrBinExists=null;async function runOcr(_0x16e663){const _0x831bc4=a7_0x41fe2d;if(!cachedOcrBinPath)return console[_0x831bc4(0x11e)]('['+(0x0,session_1['timestamp'])()+_0x831bc4(0x112)+process[_0x831bc4(0x129)]+'/'+process[_0x831bc4(0xf8)]+_0x831bc4(0x126)),null;ocrBinExists===null&&(ocrBinExists=fs_1[_0x831bc4(0x130)][_0x831bc4(0xe4)](cachedOcrBinPath),!ocrBinExists&&console[_0x831bc4(0x12f)]('['+(0x0,session_1[_0x831bc4(0xef)])()+_0x831bc4(0x12a)+cachedOcrBinPath));if(!ocrBinExists)return null;return new Promise(_0x5889b9=>{(0x0,child_process_1['execFile'])(cachedOcrBinPath,[_0x16e663],{'timeout':0x7530,'maxBuffer':0x5*0x400*0x400},(_0xece488,_0x2e7d3a,_0x3c5e45)=>{const _0x2222f2=a7_0x1b59;if(_0xece488){console[_0x2222f2(0x12f)]('['+(0x0,session_1['timestamp'])()+_0x2222f2(0x10a)+_0xece488[_0x2222f2(0x12c)]);if(_0x3c5e45)console[_0x2222f2(0x12f)]('['+(0x0,session_1[_0x2222f2(0xef)])()+_0x2222f2(0x114)+_0x3c5e45[_0x2222f2(0x137)](0x0,0xc8));_0x5889b9(null);return;}try{const _0x577cd2=JSON[_0x2222f2(0xe8)](_0x2e7d3a);if(!Array['isArray'](_0x577cd2)||_0x577cd2[_0x2222f2(0xdf)]===0x0){console[_0x2222f2(0x11e)]('['+(0x0,session_1['timestamp'])()+_0x2222f2(0xe0)),_0x5889b9(null);return;}const _0x259ef5=_0x577cd2[_0x2222f2(0x11f)](_0x1f606e=>_0x1f606e['word'])['filter'](Boolean)[_0x2222f2(0xf9)]('\x20');console['log']('['+(0x0,session_1['timestamp'])()+_0x2222f2(0xfd)+_0x259ef5[_0x2222f2(0x137)](0x0,0xc8)+(_0x259ef5[_0x2222f2(0xdf)]>0xc8?_0x2222f2(0x133):'')),_0x5889b9(_0x259ef5||null);}catch{console[_0x2222f2(0x12f)]('['+(0x0,session_1[_0x2222f2(0xef)])()+_0x2222f2(0xe1)+_0x2e7d3a['substring'](0x0,0xc8)),_0x5889b9(null);}});});}const MAGIC_NUMBERS=[{'bytes':[0x89,0x50,0x4e,0x47],'mediaType':a7_0x41fe2d(0x121),'ext':a7_0x41fe2d(0x138)},{'bytes':[0xff,0xd8,0xff],'mediaType':a7_0x41fe2d(0x10d),'ext':a7_0x41fe2d(0x127)},{'bytes':[0x47,0x49,0x46],'mediaType':a7_0x41fe2d(0xf6),'ext':a7_0x41fe2d(0xfb)},{'bytes':[0x52,0x49,0x46,0x46],'mediaType':'image/webp','ext':a7_0x41fe2d(0x104)}];function a7_0x1b59(_0x1ab61b,_0x20e9af){_0x1ab61b=_0x1ab61b-0xd8;const _0x226c89=a7_0x226c();let _0x1b59ba=_0x226c89[_0x1ab61b];return _0x1b59ba;}function detectImageMediaType(_0x2700ca){const _0x5e24e8=a7_0x41fe2d;for(const {bytes:_0x4a8122,mediaType:_0x154743,ext:_0x4f19f7}of MAGIC_NUMBERS){if(_0x2700ca[_0x5e24e8(0xdf)]>=_0x4a8122[_0x5e24e8(0xdf)]&&_0x4a8122['every']((_0x44d15,_0x507e2a)=>_0x2700ca[_0x507e2a]===_0x44d15))return{'mediaType':_0x154743,'ext':_0x4f19f7};}return{'mediaType':_0x5e24e8(0x10d),'ext':'jpg'};}function a7_0x226c(){const _0x26ab40=['411219boxKFS','arch','join','processPictureMessage','gif','mention',']\x20OCR\x20识别结果:\x20','3661189BNsZJY','downloadCode','8rDuVGc','getResourcePath','win32',']\x20图片已保存:\x20','webp','3506jtdWeK','userId','[图片\x20OCR]','type','200OBfPzv',']\x20OCR\x20执行失败:\x20','\x0a---','set','image/jpeg','application/json','ocr-x64','POST','__importDefault',']\x20当前平台(','[图片\x20',']\x20OCR\x20stderr:\x20',']\x20downloadImageBuffer\x20下载失败:','118052ksZpFm','now','pictureDownloadCode','\x20超过限制\x20','[��片下载失败]','1420160XgCLKn','text','child_process','log','map','then','image/png','picture','get','[富文本消息内容为空]','dingStreamClient',')不支持本地OCR,使用模型识别','jpg','86eyoSFZ','platform',']\x20OCR\x20二进制不存在:\x20','\x20OCR]','message','https://api.dingtalk.com',']\x20图片大小\x20','warn','default','test','processRichTextMessage','...','all','[图片]','json','substring','png','40311cfHFen','./session',',\x20data=',']\x20downloadImageBuffer\x20下载失败:\x20status=','arm64','urllib','getImageDownloadUrl\x20响应无\x20downloadUrl:\x20','data','2729298Nbtctx','\x0a---\x0a','filePath','length',']\x20OCR\x20无识别结果',']\x20OCR\x20输出解析失败:\x20','slice','__esModule','existsSync',']\x20图片保存失败:\x20','debugLog','getAccessToken','parse','path','x64','writeFileSync','getImageDownloadUrl\x20API\x20返回非200:\x20status=','status','4oCGDYS','timestamp','trim','.images','push','request','/v1.0/robot/messageFiles/download','stringify','image/gif'];a7_0x226c=function(){return _0x26ab40;};return a7_0x226c();}async function getImageDownloadUrl(_0x522940,_0x28cff4,_0x1bc020){const _0x32c67d=a7_0x41fe2d;try{const _0x59e02c=await _0x522940[_0x32c67d(0x125)][_0x32c67d(0xe7)](),_0x2e8473=DING_API_BASE+_0x32c67d(0xf4),_0x5cbc46=await urllib_1[_0x32c67d(0x130)][_0x32c67d(0xf3)](_0x2e8473,{'method':_0x32c67d(0x110),'headers':{'x-acs-dingtalk-access-token':_0x59e02c,'Content-Type':_0x32c67d(0x10e)},'data':{'downloadCode':_0x28cff4,'robotCode':_0x1bc020},'dataType':_0x32c67d(0x136),'timeout':0x2710});if(_0x5cbc46[_0x32c67d(0xed)]!==0xc8||!_0x5cbc46[_0x32c67d(0xdb)])return _0x522940[_0x32c67d(0xe6)](_0x32c67d(0xec)+_0x5cbc46[_0x32c67d(0xed)]+_0x32c67d(0x13b)+JSON[_0x32c67d(0xf5)](_0x5cbc46[_0x32c67d(0xdb)])),null;const _0x1f4552=_0x5cbc46[_0x32c67d(0xdb)],_0x28aabe=_0x1f4552?.['downloadUrl'];if(!_0x28aabe)return _0x522940[_0x32c67d(0xe6)](_0x32c67d(0xda)+JSON['stringify'](_0x1f4552)),null;return _0x28aabe;}catch(_0x3d2e2b){return console['warn']('['+(0x0,session_1[_0x32c67d(0xef)])()+']\x20getImageDownloadUrl\x20请求失败:',_0x3d2e2b),null;}}async function downloadImageBuffer(_0x24ed98){const _0x3d502f=a7_0x41fe2d;try{const _0x416f6f=await urllib_1['default'][_0x3d502f(0xf3)](_0x24ed98,{'method':'GET','dataType':'buffer','timeout':0x7530});if(_0x416f6f[_0x3d502f(0xed)]!==0xc8)return console[_0x3d502f(0x12f)]('['+(0x0,session_1[_0x3d502f(0xef)])()+_0x3d502f(0x13c)+_0x416f6f['status']),null;const _0x103bc9=_0x416f6f['data'];if(!_0x103bc9||_0x103bc9[_0x3d502f(0xdf)]===0x0)return console[_0x3d502f(0x12f)]('['+(0x0,session_1['timestamp'])()+']\x20downloadImageBuffer\x20下载结果为空'),null;if(_0x103bc9[_0x3d502f(0xdf)]>MAX_IMAGE_SIZE)return console[_0x3d502f(0x12f)]('['+(0x0,session_1[_0x3d502f(0xef)])()+_0x3d502f(0x12e)+_0x103bc9['length']+_0x3d502f(0x119)+MAX_IMAGE_SIZE),null;return _0x103bc9;}catch(_0x3f1460){return console[_0x3d502f(0x12f)]('['+(0x0,session_1['timestamp'])()+_0x3d502f(0x115),_0x3f1460),null;}}async function downloadAndProcessImage(_0x306d96,_0x3ea299,_0x21ef65,_0x3f5515){const _0x2c2119=a7_0x41fe2d,_0x30393e=await getImageDownloadUrl(_0x306d96,_0x3ea299,_0x21ef65);if(!_0x30393e)return null;const _0x4a103a=await downloadImageBuffer(_0x30393e);if(!_0x4a103a)return null;const {mediaType:_0x42a9cb,ext:_0x2c0c9f}=detectImageMediaType(_0x4a103a),_0x229fa3=path_1[_0x2c2119(0x130)][_0x2c2119(0xf9)](_0x3f5515,_0x2c2119(0xf1)),_0x21436b=_0x3ea299[_0x2c2119(0xe2)](-0x8),_0x5276de=Date[_0x2c2119(0x117)]()+'-'+_0x21436b+'.'+_0x2c0c9f,_0x1246e0=path_1[_0x2c2119(0x130)][_0x2c2119(0xf9)](_0x229fa3,_0x5276de);try{fs_1[_0x2c2119(0x130)]['mkdirSync'](_0x229fa3,{'recursive':!![]}),fs_1['default'][_0x2c2119(0xeb)](_0x1246e0,_0x4a103a);}catch(_0x5168ef){return console[_0x2c2119(0x12f)]('['+(0x0,session_1[_0x2c2119(0xef)])()+_0x2c2119(0xe5)+_0x1246e0,_0x5168ef),null;}return console[_0x2c2119(0x11e)]('['+(0x0,session_1[_0x2c2119(0xef)])()+_0x2c2119(0x103)+_0x1246e0+'\x20('+_0x42a9cb+',\x20'+_0x4a103a[_0x2c2119(0xdf)]+'\x20bytes)'),{'mediaType':_0x42a9cb,'filePath':_0x1246e0,'sizeBytes':_0x4a103a[_0x2c2119(0xdf)]};}async function buildImagePrompt(_0x222c7e,_0x459769,_0x2b1d17){const _0x2a8221=a7_0x41fe2d,_0x4b6367=_0x2b1d17!=null?_0x2a8221(0x113)+_0x2b1d17+']':_0x2a8221(0x135);if(_0x459769){const _0x4fb720=await runOcr(_0x222c7e[_0x2a8221(0xde)]);if(_0x4fb720){const _0x3e2f2c=_0x2b1d17!=null?'[图片\x20'+_0x2b1d17+_0x2a8221(0x12b):_0x2a8221(0x107);return _0x4b6367+'\x20'+_0x222c7e[_0x2a8221(0xde)]+'\x0a'+_0x3e2f2c+_0x2a8221(0xdd)+_0x4fb720+_0x2a8221(0x10b);}console[_0x2a8221(0x12f)]('['+(0x0,session_1[_0x2a8221(0xef)])()+']\x20OCR\x20失败,仅传原图路径:\x20'+_0x222c7e[_0x2a8221(0xde)]);}return _0x4b6367+'\x20'+_0x222c7e[_0x2a8221(0xde)];}async function processPictureMessage(_0x529eea,_0x4f06b2,_0x3394e1,_0x44a2bc,_0xaaf1b5=!![],_0xe1f0bd){const _0x1a25c2=a7_0x41fe2d,_0x1cb713=await downloadAndProcessImage(_0x529eea,_0x4f06b2,_0x3394e1,_0x44a2bc);if(!_0x1cb713)return null;const _0x2a4278=await buildImagePrompt(_0x1cb713,_0xaaf1b5),_0x1588da=[];_0xaaf1b5&&_0x1588da[_0x1a25c2(0xf2)](OCR_PREAMBLE);if(_0xe1f0bd)_0x1588da[_0x1a25c2(0xf2)](_0xe1f0bd);return _0x1588da[_0x1a25c2(0xf2)](_0x2a4278),_0x1588da[_0x1a25c2(0xf9)]('\x0a');}async function processRichTextMessage(_0x45f067,_0x2dbf62,_0x180a64,_0xef99b5,_0x2b859f=!![]){const _0x4f8535=a7_0x41fe2d,_0x16cde3=_0x2dbf62['filter'](_0x2aa056=>_0x2aa056[_0x4f8535(0x108)]===_0x4f8535(0x122)&&(_0x2aa056[_0x4f8535(0xff)]||_0x2aa056['pictureDownloadCode']))[_0x4f8535(0xdf)],_0x11667b=_0x2dbf62[_0x4f8535(0x11f)](async(_0x3e5980,_0x38db71)=>{const _0x361334=_0x4f8535;if(_0x3e5980['type']==='picture'){const _0x2123bc=_0x3e5980[_0x361334(0xff)]||_0x3e5980[_0x361334(0x118)];if(_0x2123bc){const _0x48a6b2=await downloadAndProcessImage(_0x45f067,_0x2123bc,_0x180a64,_0xef99b5);return{'index':_0x38db71,'result':_0x48a6b2};}}return{'index':_0x38db71,'result':null};}),_0x52a2a4=await Promise[_0x4f8535(0x134)](_0x11667b),_0x79afda=new Map();for(const {index:_0x46bf23,result:_0x3d9da4}of _0x52a2a4){_0x79afda[_0x4f8535(0x10c)](_0x46bf23,_0x3d9da4);}const _0x580444=new Map();if(_0x2b859f&&_0x16cde3>0x0){const _0x4dea07=[];for(const [_0xab1c32,_0x1a1811]of _0x79afda){_0x1a1811&&_0x4dea07['push'](runOcr(_0x1a1811[_0x4f8535(0xde)])[_0x4f8535(0x120)](_0x5e586e=>({'index':_0xab1c32,'ocrText':_0x5e586e})));}const _0x50b6d2=await Promise[_0x4f8535(0x134)](_0x4dea07);for(const {index:_0x229a59,ocrText:_0x1020e1}of _0x50b6d2){_0x580444[_0x4f8535(0x10c)](_0x229a59,_0x1020e1);}}const _0x4006ba=[];let _0x1e6f32=0x0;for(let _0x194c8c=0x0;_0x194c8c<_0x2dbf62[_0x4f8535(0xdf)];_0x194c8c++){const _0xd1725b=_0x2dbf62[_0x194c8c];if(_0xd1725b[_0x4f8535(0x108)]===_0x4f8535(0x11c)&&_0xd1725b['text']){if(/^@\S+$/[_0x4f8535(0x131)](_0xd1725b[_0x4f8535(0x11c)][_0x4f8535(0xf0)]()))continue;_0x4006ba[_0x4f8535(0xf2)](_0xd1725b['text']);}else{if(_0xd1725b[_0x4f8535(0x108)]===_0x4f8535(0xfc)&&_0xd1725b[_0x4f8535(0x106)])_0x4006ba[_0x4f8535(0xf2)]('@'+_0xd1725b[_0x4f8535(0x106)]);else{if(_0xd1725b[_0x4f8535(0x108)]==='picture'){const _0x205eb1=_0x79afda[_0x4f8535(0x123)](_0x194c8c);if(_0x205eb1){_0x1e6f32++;const _0x1a5bec=_0x16cde3>0x1?_0x1e6f32:undefined,_0x392802=_0x2b859f?_0x580444[_0x4f8535(0x123)](_0x194c8c):null,_0x2d5a99=_0x1a5bec!=null?'[图片\x20'+_0x1a5bec+']':_0x4f8535(0x135);if(_0x392802){const _0xc03772=_0x1a5bec!=null?_0x4f8535(0x113)+_0x1a5bec+'\x20OCR]':_0x4f8535(0x107);_0x4006ba[_0x4f8535(0xf2)](_0x2d5a99+'\x20'+_0x205eb1['filePath']+'\x0a'+_0xc03772+_0x4f8535(0xdd)+_0x392802+_0x4f8535(0x10b));}else _0x4006ba[_0x4f8535(0xf2)](_0x2d5a99+'\x20'+_0x205eb1[_0x4f8535(0xde)]);}else{const _0x283a5c=_0xd1725b[_0x4f8535(0xff)]||_0xd1725b[_0x4f8535(0x118)];_0x283a5c&&_0x4006ba[_0x4f8535(0xf2)](_0x4f8535(0x11a));}}}}}const _0x1b611e=_0x4006ba[_0x4f8535(0xf9)]('\x0a')||_0x4f8535(0x124);if(_0x2b859f&&_0x1e6f32>0x0)return OCR_PREAMBLE+'\x0a'+_0x1b611e;return _0x1b611e;}
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.runOcr=runOcr,exports.getImageDownloadUrl=getImageDownloadUrl,exports.downloadImageBuffer=downloadImageBuffer,exports.processPictureMessage=processPictureMessage,exports.processRichTextMessage=processRichTextMessage,exports.detectExtFromBuffer=detectExtFromBuffer,exports.extractDownloadCode=extractDownloadCode,exports.extractFileName=extractFileName,exports.downloadToFilesDir=downloadToFilesDir,exports.processFileMessage=processFileMessage;const child_process_1=require("child_process"),fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),urllib_1=__importDefault(require("urllib")),session_1=require("./session"),common_1=require("../common"),MAX_IMAGE_SIZE=10*1024*1024,MAX_FILE_SIZE=20*1024*1024,DING_API_BASE="https://api.dingtalk.com",OCR_PREAMBLE="\u4EE5\u4E0B\u56FE\u7247 OCR \u8BC6\u522B\u7ED3\u679C\u6765\u81EA\u5BF9\u7528\u6237\u6D88\u606F\u4E2D\u56FE\u7247\u7684\u9884\u5904\u7406(\u975E\u7528\u6237\u539F\u59CB\u8F93\u5165)\uFF0C\u5982\u8BC6\u522B\u4E0D\u51C6\u786E\u53EF\u76F4\u63A5\u67E5\u770B\u539F\u56FE\u8DEF\u5F84",OCR_BIN_DIR=(0,common_1.projUtil)().getResourcePath(),cachedOcrBinPath=(()=>{if(process.platform==="win32")return null;const e=process.arch;return e==="arm64"?path_1.default.join(OCR_BIN_DIR,"ocr-arm64"):e==="x64"?path_1.default.join(OCR_BIN_DIR,"ocr-x64"):null})();let ocrBinExists=null;async function runOcr(e){return cachedOcrBinPath?(ocrBinExists===null&&(ocrBinExists=fs_1.default.existsSync(cachedOcrBinPath),ocrBinExists||console.warn(`[${(0,session_1.timestamp)()}] OCR \u4E8C\u8FDB\u5236\u4E0D\u5B58\u5728: ${cachedOcrBinPath}`)),ocrBinExists?new Promise(n=>{(0,child_process_1.execFile)(cachedOcrBinPath,[e],{timeout:3e4,maxBuffer:5*1024*1024},(r,o,t)=>{if(r){console.warn(`[${(0,session_1.timestamp)()}] OCR \u6267\u884C\u5931\u8D25: ${r.message}`),t&&console.warn(`[${(0,session_1.timestamp)()}] OCR stderr: ${t.substring(0,200)}`),n(null);return}try{const s=JSON.parse(o);if(!Array.isArray(s)||s.length===0){console.log(`[${(0,session_1.timestamp)()}] OCR \u65E0\u8BC6\u522B\u7ED3\u679C`),n(null);return}const a=s.map(u=>u.word).filter(Boolean).join(" ");console.log(`[${(0,session_1.timestamp)()}] OCR \u8BC6\u522B\u7ED3\u679C: ${a.substring(0,200)}${a.length>200?"...":""}`),n(a||null)}catch{console.warn(`[${(0,session_1.timestamp)()}] OCR \u8F93\u51FA\u89E3\u6790\u5931\u8D25: ${o.substring(0,200)}`),n(null)}})}):null):(console.log(`[${(0,session_1.timestamp)()}] \u5F53\u524D\u5E73\u53F0(${process.platform}/${process.arch})\u4E0D\u652F\u6301\u672C\u5730OCR\uFF0C\u4F7F\u7528\u6A21\u578B\u8BC6\u522B`),null)}const MAGIC_NUMBERS=[{bytes:[137,80,78,71],mediaType:"image/png",ext:"png"},{bytes:[255,216,255],mediaType:"image/jpeg",ext:"jpg"},{bytes:[71,73,70],mediaType:"image/gif",ext:"gif"},{bytes:[82,73,70,70],mediaType:"image/webp",ext:"webp"}];function detectImageMediaType(e){for(const{bytes:n,mediaType:r,ext:o}of MAGIC_NUMBERS)if(e.length>=n.length&&n.every((t,s)=>e[s]===t))return{mediaType:r,ext:o};return{mediaType:"image/jpeg",ext:"jpg"}}async function getImageDownloadUrl(e,n,r){try{const o=await e.dingStreamClient.getAccessToken(),t=`${DING_API_BASE}/v1.0/robot/messageFiles/download`,s=await urllib_1.default.request(t,{method:"POST",headers:{"x-acs-dingtalk-access-token":o,"Content-Type":"application/json"},data:{downloadCode:n,robotCode:r},dataType:"json",timeout:1e4});if(s.status!==200||!s.data)return e.debugLog(`getImageDownloadUrl API \u8FD4\u56DE\u975E200: status=${s.status}, data=${JSON.stringify(s.data)}`),null;const a=s.data,u=a?.downloadUrl;return u||(e.debugLog(`getImageDownloadUrl \u54CD\u5E94\u65E0 downloadUrl: ${JSON.stringify(a)}`),null)}catch(o){return console.warn(`[${(0,session_1.timestamp)()}] getImageDownloadUrl \u8BF7\u6C42\u5931\u8D25:`,o),null}}async function downloadImageBuffer(e,n=MAX_IMAGE_SIZE){try{const r=await urllib_1.default.request(e,{method:"GET",dataType:"buffer",timeout:3e4});if(r.status!==200)return console.warn(`[${(0,session_1.timestamp)()}] downloadImageBuffer \u4E0B\u8F7D\u5931\u8D25: status=${r.status}`),null;const o=r.data;return!o||o.length===0?(console.warn(`[${(0,session_1.timestamp)()}] downloadImageBuffer \u4E0B\u8F7D\u7ED3\u679C\u4E3A\u7A7A`),null):o.length>n?(console.warn(`[${(0,session_1.timestamp)()}] \u6587\u4EF6\u5927\u5C0F ${o.length} \u8D85\u8FC7\u9650\u5236 ${n}`),null):o}catch(r){return console.warn(`[${(0,session_1.timestamp)()}] downloadImageBuffer \u4E0B\u8F7D\u5931\u8D25:`,r),null}}async function downloadAndProcessImage(e,n,r,o){const t=await getImageDownloadUrl(e,n,r);if(!t)return null;const s=await downloadImageBuffer(t);if(!s)return null;const{mediaType:a,ext:u}=detectImageMediaType(s),f=path_1.default.join(o,".images"),d=n.slice(-8).replace(/[/\\:*?"<>|+= ]/g,"_"),m=`${Date.now()}-${d}.${u}`,c=path_1.default.join(f,m);try{fs_1.default.mkdirSync(f,{recursive:!0}),fs_1.default.writeFileSync(c,s)}catch(g){return console.warn(`[${(0,session_1.timestamp)()}] \u56FE\u7247\u4FDD\u5B58\u5931\u8D25: ${c}`,g),null}return console.log(`[${(0,session_1.timestamp)()}] \u56FE\u7247\u5DF2\u4FDD\u5B58: ${c} (${a}, ${s.length} bytes)`),{mediaType:a,filePath:c,sizeBytes:s.length}}async function buildImagePrompt(e,n,r){const o=r!=null?`[\u56FE\u7247 ${r}]`:"[\u56FE\u7247]";if(n){const t=await runOcr(e.filePath);if(t){const s=r!=null?`[\u56FE\u7247 ${r} OCR]`:"[\u56FE\u7247 OCR]";return`${o} ${e.filePath}
2
+ ${s}
3
+ ---
4
+ ${t}
5
+ ---`}console.warn(`[${(0,session_1.timestamp)()}] OCR \u5931\u8D25\uFF0C\u4EC5\u4F20\u539F\u56FE\u8DEF\u5F84: ${e.filePath}`)}return`${o} ${e.filePath}`}async function processPictureMessage(e,n,r,o,t=!0,s){const a=await downloadAndProcessImage(e,n,r,o);if(!a)return null;const u=await buildImagePrompt(a,t),f=[];return t&&f.push(OCR_PREAMBLE),s&&f.push(s),f.push(u),f.join(`
6
+ `)}async function processRichTextMessage(e,n,r,o,t=!0){const s=n.filter(i=>i.type==="picture"&&(i.downloadCode||i.pictureDownloadCode)).length,a=n.map(async(i,l)=>{if(i.type==="picture"){const x=i.downloadCode||i.pictureDownloadCode;if(x){const p=await downloadAndProcessImage(e,x,r,o);return{index:l,result:p}}}return{index:l,result:null}}),u=await Promise.all(a),f=new Map;for(const{index:i,result:l}of u)f.set(i,l);const d=new Map;if(t&&s>0){const i=[];for(const[x,p]of f)p&&i.push(runOcr(p.filePath).then($=>({index:x,ocrText:$})));const l=await Promise.all(i);for(const{index:x,ocrText:p}of l)d.set(x,p)}const m=[];let c=0;for(let i=0;i<n.length;i++){const l=n[i];if(l.type==="text"&&l.text){if(/^@\S+$/.test(l.text.trim()))continue;m.push(l.text)}else if(l.type==="mention"&&l.userId)m.push(`@${l.userId}`);else if(l.type==="picture"){const x=f.get(i);if(x){c++;const p=s>1?c:void 0,$=t?d.get(i):null,w=p!=null?`[\u56FE\u7247 ${p}]`:"[\u56FE\u7247]";if($){const y=p!=null?`[\u56FE\u7247 ${p} OCR]`:"[\u56FE\u7247 OCR]";m.push(`${w} ${x.filePath}
7
+ ${y}
8
+ ---
9
+ ${$}
10
+ ---`)}else m.push(`${w} ${x.filePath}`)}else(l.downloadCode||l.pictureDownloadCode)&&m.push("[\u56FE\u7247\u4E0B\u8F7D\u5931\u8D25]")}}const g=m.join(`
11
+ `)||"[\u5BCC\u6587\u672C\u6D88\u606F\u5185\u5BB9\u4E3A\u7A7A]";return t&&c>0?`${OCR_PREAMBLE}
12
+ ${g}`:g}const FILE_MAGIC_BYTES=[{bytes:[37,80,68,70],ext:"pdf"},{bytes:[80,75,3,4],ext:"zip"},{bytes:[80,75,5,6],ext:"zip"}];function detectExtFromBuffer(e){if((detectImageMediaType(e).mediaType!=="image/jpeg"||e.length<2||e[0]===255&&e[1]===216)&&e.length>=3&&e[0]===255&&e[1]===216&&e[2]===255)return".jpg";for(const{bytes:r,ext:o}of FILE_MAGIC_BYTES)if(e.length>=r.length&&r.every((t,s)=>e[s]===t)){if(o==="zip"&&e.length>=30){const t=e.toString("latin1",0,Math.min(e.length,2e3));if(t.includes("word/"))return".docx";if(t.includes("xl/"))return".xlsx";if(t.includes("ppt/"))return".pptx"}return`.${o}`}return""}function extractDownloadCode(e){const n=e;if(e.downloadCode)return e.downloadCode;if(n.pictureDownloadCode)return n.pictureDownloadCode;if(n.extensions&&typeof n.extensions=="object"){const o=n.extensions;if(o.downloadCode)return o.downloadCode}const r=["image_content","file_content","video_content","audio_content"];for(const o of r){const t=n[o];if(t&&typeof t=="object"){const s=t;if(s.download_code)return s.download_code;if(s.downloadCode)return s.downloadCode}}return null}function extractFileName(e){const n=e;if(e.fileName&&typeof e.fileName=="string")return e.fileName;for(const r of["content","file_content","image_content"]){const o=n[r];if(o&&typeof o=="object"){const t=o;if(t.fileName&&typeof t.fileName=="string")return t.fileName;if(t.file_name&&typeof t.file_name=="string")return t.file_name;if(t.name&&typeof t.name=="string")return t.name}}return null}async function downloadToFilesDir(e,n,r,o,t,s){const a=await getImageDownloadUrl(e,n,r);if(!a)return null;const u=await downloadImageBuffer(a);if(!u)return null;const f=path_1.default.join(o,".files",t);fs_1.default.mkdirSync(f,{recursive:!0});let d;if(s)d=s;else{const{ext:c}=detectImageMediaType(u);d=`file.${c}`}if(fs_1.default.existsSync(path_1.default.join(f,d))){const c=d.lastIndexOf("."),g=c>0?d.substring(0,c):d,i=c>0?d.substring(c):"";let l=1;for(;fs_1.default.existsSync(path_1.default.join(f,`${g}_${l}${i}`));)l++;d=`${g}_${l}${i}`}const m=path_1.default.join(f,d);try{fs_1.default.writeFileSync(m,u)}catch(c){return console.warn(`[${(0,session_1.timestamp)()}] \u6587\u4EF6\u4FDD\u5B58\u5931\u8D25: ${m}`,c),null}return console.log(`[${(0,session_1.timestamp)()}] \u6587\u4EF6\u5DF2\u4FDD\u5B58: ${m} (${u.length} bytes)`),m}async function processFileMessage(e,n,r,o,t){const s=await getImageDownloadUrl(e,n,r);if(!s)return null;const a=await downloadImageBuffer(s,MAX_FILE_SIZE);if(!a)return null;const u=detectExtFromBuffer(a),f=path_1.default.join(o,".files"),d=n.slice(-8).replace(/[/\\:*?"<>|+= ]/g,"_"),m=`${Date.now()}-${d}${u}`,c=path_1.default.join(f,m);try{fs_1.default.mkdirSync(f,{recursive:!0}),fs_1.default.writeFileSync(c,a)}catch(l){return console.warn(`[${(0,session_1.timestamp)()}] \u6587\u4EF6\u4FDD\u5B58\u5931\u8D25: ${c}`,l),null}const g=(a.length/1024).toFixed(1);console.log(`[${(0,session_1.timestamp)()}] \u6587\u4EF6\u5DF2\u4FDD\u5B58: ${c} (${g}KB${u?`, ${u}`:""})`);const i=[];return i.push(`[\u6587\u4EF6] \u6536\u5230\u4E00\u4E2A\u6587\u4EF6${u?`\uFF08${u}\uFF09`:""}\uFF0C\u5927\u5C0F ${g}KB`),t&&i.push(t),i.push(`\u6587\u4EF6\u8DEF\u5F84: ${c}`),i.push("\u4F60\u53EF\u4EE5\u4F7F\u7528 Read \u5DE5\u5177\u67E5\u770B\u6587\u4EF6\u5185\u5BB9\u3002"),i.join(`
13
+ `)}
@@ -1 +1 @@
1
- 'use strict';const a8_0x17b1e1=a8_0x2c19;(function(_0xbda18b,_0x44d8b2){const _0x56be6c=a8_0x2c19,_0x43d561=_0xbda18b();while(!![]){try{const _0x506e3a=-parseInt(_0x56be6c(0x1f5))/0x1*(-parseInt(_0x56be6c(0x1e7))/0x2)+parseInt(_0x56be6c(0x1e8))/0x3+parseInt(_0x56be6c(0x1f6))/0x4*(parseInt(_0x56be6c(0x1fe))/0x5)+-parseInt(_0x56be6c(0x1fb))/0x6*(-parseInt(_0x56be6c(0x1ed))/0x7)+-parseInt(_0x56be6c(0x1e5))/0x8*(parseInt(_0x56be6c(0x201))/0x9)+parseInt(_0x56be6c(0x1ff))/0xa*(-parseInt(_0x56be6c(0x1f2))/0xb)+parseInt(_0x56be6c(0x1f7))/0xc*(-parseInt(_0x56be6c(0x1e6))/0xd);if(_0x506e3a===_0x44d8b2)break;else _0x43d561['push'](_0x43d561['shift']());}catch(_0x1a67cb){_0x43d561['push'](_0x43d561['shift']());}}}(a8_0x8a3e,0x4d03a));function a8_0x2c19(_0xe0d3a9,_0x2344ae){_0xe0d3a9=_0xe0d3a9-0x1e0;const _0x8a3e56=a8_0x8a3e();let _0x2c199c=_0x8a3e56[_0xe0d3a9];return _0x2c199c;}var __importDefault=this&&this[a8_0x17b1e1(0x1fa)]||function(_0x2cc89c){return _0x2cc89c&&_0x2cc89c['__esModule']?_0x2cc89c:{'default':_0x2cc89c};};function a8_0x8a3e(){const _0x108161=['readFileSync','timestamp','__esModule','kill',']\x20检测到过期锁文件\x20(PID:\x20','writeFileSync','2504zlPYVs','3204643ccrNSv','44TqVDjk','1460058fVFwCs','.pid.lock','\x20已退出),自动清理','default','existsSync','3248DaTQyC','utf-8','pid','\x20\x20如需强制启动,请先停止已有进程或删除锁文件:\x20','path','55fBBuFv','unlinkSync','log','6173QDfDSB','847936vAQMhJ','24hkmxbs','exit','trim','__importDefault','246BYlAzK','error','SIGTERM','5yLUNuT','26830dZOCni','defineProperty','909YovYzV','SIGINT'];a8_0x8a3e=function(){return _0x108161;};return a8_0x8a3e();}Object[a8_0x17b1e1(0x200)](exports,a8_0x17b1e1(0x1e1),{'value':!![]}),exports['acquirePidLock']=acquirePidLock;const session_1=require('./session'),fs_1=__importDefault(require('fs')),path_1=__importDefault(require(a8_0x17b1e1(0x1f1)));function acquirePidLock(_0x44f39c,_0x147445){const _0xc3bb31=a8_0x17b1e1,_0x65ac60=path_1[_0xc3bb31(0x1eb)]['join'](_0x44f39c,_0xc3bb31(0x1e9));if(fs_1[_0xc3bb31(0x1eb)][_0xc3bb31(0x1ec)](_0x65ac60))try{const _0x362869=parseInt(fs_1[_0xc3bb31(0x1eb)][_0xc3bb31(0x203)](_0x65ac60,_0xc3bb31(0x1ee))[_0xc3bb31(0x1f9)](),0xa);if(!isNaN(_0x362869))try{process[_0xc3bb31(0x1e2)](_0x362869,0x0),console[_0xc3bb31(0x1fc)]('[FATAL]\x20clientId\x20\x22'+_0x147445+'\x22\x20已有运行中的进程\x20(PID:\x20'+_0x362869+')'),console[_0xc3bb31(0x1fc)](_0xc3bb31(0x1f0)+_0x65ac60),process[_0xc3bb31(0x1f8)](0x1);}catch{console[_0xc3bb31(0x1f4)]('['+(0x0,session_1[_0xc3bb31(0x1e0)])()+_0xc3bb31(0x1e3)+_0x362869+_0xc3bb31(0x1ea));}}catch{}fs_1[_0xc3bb31(0x1eb)][_0xc3bb31(0x1e4)](_0x65ac60,String(process[_0xc3bb31(0x1ef)]),_0xc3bb31(0x1ee));const _0xbd949d=()=>{const _0x492325=_0xc3bb31;try{fs_1['default'][_0x492325(0x1f3)](_0x65ac60);}catch{}};process['on'](_0xc3bb31(0x1f8),_0xbd949d),process['on'](_0xc3bb31(0x202),()=>{_0xbd949d(),process['exit'](0x82);}),process['on'](_0xc3bb31(0x1fd),()=>{_0xbd949d(),process['exit'](0x8f);});}
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.acquirePidLock=acquirePidLock;const session_1=require("./session"),fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path"));function acquirePidLock(e,r){const t=path_1.default.join(e,".pid.lock");if(fs_1.default.existsSync(t))try{const s=parseInt(fs_1.default.readFileSync(t,"utf-8").trim(),10);if(!isNaN(s))try{process.kill(s,0),console.error(`[FATAL] clientId "${r}" \u5DF2\u6709\u8FD0\u884C\u4E2D\u7684\u8FDB\u7A0B (PID: ${s})`),console.error(` \u5982\u9700\u5F3A\u5236\u542F\u52A8\uFF0C\u8BF7\u5148\u505C\u6B62\u5DF2\u6709\u8FDB\u7A0B\u6216\u5220\u9664\u9501\u6587\u4EF6: ${t}`),process.exit(1)}catch{console.log(`[${(0,session_1.timestamp)()}] \u68C0\u6D4B\u5230\u8FC7\u671F\u9501\u6587\u4EF6 (PID: ${s} \u5DF2\u9000\u51FA)\uFF0C\u81EA\u52A8\u6E05\u7406`)}}catch{}fs_1.default.writeFileSync(t,String(process.pid),"utf-8");const i=()=>{try{fs_1.default.unlinkSync(t)}catch{}};process.on("exit",i),process.on("SIGINT",()=>{i(),process.exit(130)}),process.on("SIGTERM",()=>{i(),process.exit(143)})}
@@ -0,0 +1,3 @@
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.loadMenuData=loadMenuData,exports.setPendingSelection=setPendingSelection,exports.getPendingSelection=getPendingSelection,exports.clearPendingSelection=clearPendingSelection,exports.hasPendingSelection=hasPendingSelection,exports.startSelectionCleanupTimer=startSelectionCleanupTimer,exports.getUserTrigger=getUserTrigger,exports.setUserTrigger=setUserTrigger,exports.getAllTriggerWords=getAllTriggerWords,exports.getMergedMenu=getMergedMenu,exports.addMenuItem=addMenuItem,exports.deleteMenuItem=deleteMenuItem,exports.formatMenuDisplay=formatMenuDisplay,exports.formatMenuList=formatMenuList;const fs_1=__importDefault(require("fs")),utils_ok_1=require("utils-ok"),session_1=require("./session");function getMenuFile(e){return`${(0,session_1.getClientDir)(e)}/menu.json`}function loadMenuData(e){const t=getMenuFile(e);try{const n=JSON.parse(fs_1.default.readFileSync(t,"utf-8"));return{global:Array.isArray(n.global)?n.global:[],user:n.user&&typeof n.user=="object"?n.user:{},triggers:n.triggers&&typeof n.triggers=="object"?n.triggers:{}}}catch{return{global:[],user:{},triggers:{}}}}function saveMenuData(e,t){const n=getMenuFile(e);fs_1.default.writeFileSync(n,JSON.stringify(t,null,2),"utf-8")}const pendingSelections=new Map,SELECTION_TIMEOUT_MS=6e4;function getPendingKey(e,t){return`${e}:${t}`}function setPendingSelection(e,t,n,r){pendingSelections.set(getPendingKey(e,t),{staffId:t,conversationId:e,sessionWebhook:n,mergedItems:r,createdAt:Date.now()})}function getPendingSelection(e,t){return pendingSelections.get(getPendingKey(e,t))}function clearPendingSelection(e,t){pendingSelections.delete(getPendingKey(e,t))}function hasPendingSelection(e,t){const n=pendingSelections.get(getPendingKey(e,t));return n?Date.now()-n.createdAt>SELECTION_TIMEOUT_MS?(pendingSelections.delete(getPendingKey(e,t)),!1):!0:!1}function startSelectionCleanupTimer(){setInterval(()=>{const e=Date.now();for(const[t,n]of pendingSelections)e-n.createdAt>SELECTION_TIMEOUT_MS&&pendingSelections.delete(t)},15e3)}function getUserTrigger(e,t){return loadMenuData(e).triggers?.[t]||"cc"}function setUserTrigger(e,t,n){const r=loadMenuData(e);r.triggers||(r.triggers={}),r.triggers[t]=n,saveMenuData(e,r)}function getAllTriggerWords(e){const t=loadMenuData(e),n=new Set(["cc"]);if(t.triggers)for(const r of Object.values(t.triggers))r&&n.add(r.toLowerCase());return n}function getUserMenuKey(e,t){return`${e}:${t}`}function generateId(){return`m_${Date.now().toString(36)}`}function getMergedMenu(e,t,n){const r=loadMenuData(e),u=getUserMenuKey(t,n),s=r.user[u]||[];return[...r.global,...s]}function addMenuItem(e,t,n,r,u,s){const o=loadMenuData(e),a=u.trim()||s.trim().substring(0,20),l={id:generateId(),label:a,command:s.trim(),createdAt:utils_ok_1.dateUtil.mm().format("YYYY-MM-DD HH:mm:ss")};if(r)o.global.push(l);else{const i=getUserMenuKey(t,n);o.user[i]||(o.user[i]=[]),o.user[i].push(l)}return saveMenuData(e,o),console.log(`[${(0,session_1.timestamp)()}] [menu] \u6DFB\u52A0\u83DC\u5355: ${r?"\u5168\u5C40":"\u4E2A\u4EBA"} label=${l.label} id=${l.id}`),l}function deleteMenuItem(e,t,n,r,u){const s=loadMenuData(e),o=parseInt(u,10);if(r){if(isNaN(o)||o<1||o>s.global.length)return{success:!1,error:`\u5E8F\u53F7\u65E0\u6548\uFF0C\u5168\u5C40\u83DC\u5355\u5171 ${s.global.length} \u9879`};const[g]=s.global.splice(o-1,1);return saveMenuData(e,s),console.log(`[${(0,session_1.timestamp)()}] [menu] \u5220\u9664\u5168\u5C40\u83DC\u5355: label=${g.label} id=${g.id}`),{success:!0,deletedItem:g}}const a=getUserMenuKey(t,n),l=s.user[a]||[];if(isNaN(o)||o<1||o>l.length)return{success:!1,error:`\u5E8F\u53F7\u65E0\u6548\uFF0C\u4E2A\u4EBA\u83DC\u5355\u5171 ${l.length} \u9879`};const[i]=l.splice(o-1,1);return l.length===0&&delete s.user[a],saveMenuData(e,s),console.log(`[${(0,session_1.timestamp)()}] [menu] \u5220\u9664\u4E2A\u4EBA\u83DC\u5355: label=${i.label} id=${i.id}`),{success:!0,deletedItem:i}}function formatMenuDisplay(e,t){if(e.length===0)return"\u{1F4ED} \u6682\u65E0\u5FEB\u6377\u6307\u4EE4\n\n\u{1F4A1} \u4F7F\u7528 `/menu add <\u6307\u4EE4>` \u6DFB\u52A0";const n=["### \u{1F4CB} \u5FEB\u6377\u6307\u4EE4",""];if(t>0){n.push("\u{1F310} **\u5168\u5C40**");for(let r=0;r<t;r++)n.push(`${r+1}. ${e[r].label}`)}if(e.length>t){t>0&&n.push(""),n.push("\u{1F464} **\u6211\u7684**");for(let r=t;r<e.length;r++)n.push(`${r+1}. ${e[r].label}`)}return n.push("","---","\u{1F4A1} \u56DE\u590D\u5E8F\u53F7\u6267\u884C (60s) | `/menu add/del/list` \u7BA1\u7406"),n.join(`
2
+ `)}function formatMenuList(e,t,n,r){const u=loadMenuData(e),s=[];if(r)if(s.push("### \u{1F4CB} \u5168\u5C40\u5FEB\u6377\u6307\u4EE4\u7BA1\u7406",""),u.global.length>0)for(let o=0;o<u.global.length;o++)s.push(`${o+1}. **${u.global[o].label}** \u2192 \`${u.global[o].command}\``);else s.push("\u{1F4ED} \u6682\u65E0\u5168\u5C40\u83DC\u5355\u9879\uFF0C\u4F7F\u7528 `/menu -g add <\u6307\u4EE4>` \u6DFB\u52A0");else{s.push("### \u{1F4CB} \u4E2A\u4EBA\u5FEB\u6377\u6307\u4EE4\u7BA1\u7406","");const o=getUserMenuKey(t,n),a=u.user[o]||[];if(a.length>0)for(let i=0;i<a.length;i++)s.push(`${i+1}. **${a[i].label}** \u2192 \`${a[i].command}\``);else s.push("\u{1F4ED} \u6682\u65E0\u4E2A\u4EBA\u83DC\u5355\u9879\uFF0C\u4F7F\u7528 `/menu add <\u6307\u4EE4>` \u6DFB\u52A0");s.push("");const l=getUserTrigger(e,n);s.push(`\u5F53\u524D\u89E6\u53D1\u8BCD: \`${l}\` (\u4F7F\u7528 \`/menu trigger <\u8BCD>\` \u4FEE\u6539)`)}return s.join(`
3
+ `)}
@@ -1 +1,6 @@
1
- 'use strict';function a9_0x1e2d(_0x46fa82,_0x9a50a1){_0x46fa82=_0x46fa82-0x109;const _0x29a6b0=a9_0x29a6();let _0x1e2dff=_0x29a6b0[_0x46fa82];return _0x1e2dff;}const a9_0x2fae45=a9_0x1e2d;(function(_0x2b95e2,_0x23aad5){const _0x2f8a81=a9_0x1e2d,_0x7fd1c2=_0x2b95e2();while(!![]){try{const _0x14c4a3=parseInt(_0x2f8a81(0x134))/0x1+parseInt(_0x2f8a81(0x154))/0x2*(-parseInt(_0x2f8a81(0x156))/0x3)+-parseInt(_0x2f8a81(0x12a))/0x4*(-parseInt(_0x2f8a81(0x161))/0x5)+-parseInt(_0x2f8a81(0x12e))/0x6+-parseInt(_0x2f8a81(0x10e))/0x7*(parseInt(_0x2f8a81(0x145))/0x8)+parseInt(_0x2f8a81(0x118))/0x9*(-parseInt(_0x2f8a81(0x10c))/0xa)+parseInt(_0x2f8a81(0x149))/0xb*(parseInt(_0x2f8a81(0x15f))/0xc);if(_0x14c4a3===_0x23aad5)break;else _0x7fd1c2['push'](_0x7fd1c2['shift']());}catch(_0x301526){_0x7fd1c2['push'](_0x7fd1c2['shift']());}}}(a9_0x29a6,0x82bfe));var __importDefault=this&&this[a9_0x2fae45(0x121)]||function(_0x53e690){const _0x2bc970=a9_0x2fae45;return _0x53e690&&_0x53e690[_0x2bc970(0x143)]?_0x53e690:{'default':_0x53e690};};Object[a9_0x2fae45(0x130)](exports,a9_0x2fae45(0x143),{'value':!![]}),exports[a9_0x2fae45(0x15e)]=fetchQuotedMessage,exports[a9_0x2fae45(0x159)]=queryDingUser,exports[a9_0x2fae45(0x115)]=queryUserIdByMobile,exports['filterToolUseContent']=filterToolUseContent,exports['splitMessage']=splitMessage,exports[a9_0x2fae45(0x109)]=sendDingMessage,exports[a9_0x2fae45(0x166)]=sendClaudeResponseToDing;const utils_ok_1=require(a9_0x2fae45(0x168)),urllib_1=__importDefault(require(a9_0x2fae45(0x147))),DING_API_BASE='https://api.dingtalk.com',DING_OAPI_BASE='https://oapi.dingtalk.com';function a9_0x29a6(){const _0x1e5e35=['userid','fetchQuotedMessage\x20API\x20返回非200:\x20status=','trim','CronCreate','**[','875968wCHPjq','EnterWorktree','过滤后内容为空,跳过发送','dingStreamClient','3271758PtUjts','object','defineProperty',')[^>]*\x5c/>','conversationId','TaskList','497137crkFNs','fetchQuotedMessage\x20无法从响应中提取文本:\x20keys=','defaultDingToken','GET','string','baseUtil','replace','default','status','通过\x20defaultDingToken\x20发送钉钉消息失败:','debugLog','TaskGet','conversationType','AskUserQuestion',',\x20errmsg=','__esModule','result','641320EqWuzM','text','urllib','TaskCreate','4366813KSusJx','TaskOutput','markdown','/topapi/v2/user/get?access_token=','join','EnterPlanMode','data','/v1.0/im/api/messages/','stringify',',\x20data=','queryUserIdByMobile\x20请求失败:','44752xpJZcn','length','66hWnRHI','ExitPlanMode','fetchQuotedMessage\x20请求失败:','queryDingUser','warn','WebFetch','substring','push','fetchQuotedMessage','36WhTBOF','POST','20sCWNTp','queryDingUser\x20API\x20返回非200:\x20status=','atSender','request','https://oapi.dingtalk.com/robot/send?access_token=','sendClaudeResponseToDing','通过\x20sessionWebhook\x20发送钉钉消息失败:','utils-ok','json','Glob','/topapi/v2/user/getbymobile?access_token=','sendDingMessage','dingToken','NotebookEdit','10tRBOMc','getAccessToken','35sXklWo','Read','parse','Bash','通过\x20dingToken\x20发送钉钉消息失败:','LSP','sleep','queryUserIdByMobile','Grep','queryUserIdByMobile\x20API\x20返回非200:\x20status=','5311026ZrATIB','lastIndexOf','conversations','body','content',']**\x0a','TaskUpdate','find','config','__importDefault','errcode','errmsg','error'];a9_0x29a6=function(){return _0x1e5e35;};return a9_0x29a6();}async function fetchQuotedMessage(_0x4e8a20,_0x2533db){const _0x5edf9d=a9_0x2fae45;try{const _0x26700c=await _0x4e8a20[_0x5edf9d(0x12d)][_0x5edf9d(0x10d)](),_0x3e1227=DING_API_BASE+_0x5edf9d(0x150)+encodeURIComponent(_0x2533db),_0xf9a334=await urllib_1[_0x5edf9d(0x13b)][_0x5edf9d(0x164)](_0x3e1227,{'method':_0x5edf9d(0x137),'headers':{'x-acs-dingtalk-access-token':_0x26700c},'dataType':_0x5edf9d(0x169),'timeout':0x1388});if(_0xf9a334[_0x5edf9d(0x13c)]!==0xc8||!_0xf9a334[_0x5edf9d(0x14f)])return _0x4e8a20[_0x5edf9d(0x13e)](_0x5edf9d(0x126)+_0xf9a334[_0x5edf9d(0x13c)]+_0x5edf9d(0x152)+JSON[_0x5edf9d(0x151)](_0xf9a334[_0x5edf9d(0x14f)])),null;const _0x8485dd=_0xf9a334[_0x5edf9d(0x14f)];if(_0x8485dd[_0x5edf9d(0x146)]&&typeof _0x8485dd[_0x5edf9d(0x146)]==='object'){const _0x185dd6=_0x8485dd[_0x5edf9d(0x146)][_0x5edf9d(0x11c)];if(typeof _0x185dd6===_0x5edf9d(0x138)&&_0x185dd6)return _0x185dd6[_0x5edf9d(0x127)]();}if(typeof _0x8485dd[_0x5edf9d(0x11c)]===_0x5edf9d(0x138)&&_0x8485dd[_0x5edf9d(0x11c)])try{const _0x3cd58b=JSON[_0x5edf9d(0x110)](_0x8485dd[_0x5edf9d(0x11c)]);if(typeof _0x3cd58b===_0x5edf9d(0x138))return _0x3cd58b['trim']();if(_0x3cd58b[_0x5edf9d(0x146)])return String(_0x3cd58b[_0x5edf9d(0x146)])[_0x5edf9d(0x127)]();if(_0x3cd58b[_0x5edf9d(0x11c)])return String(_0x3cd58b[_0x5edf9d(0x11c)])[_0x5edf9d(0x127)]();}catch{return _0x8485dd[_0x5edf9d(0x11c)][_0x5edf9d(0x127)]();}if(_0x8485dd[_0x5edf9d(0x11b)]&&typeof _0x8485dd[_0x5edf9d(0x11b)]===_0x5edf9d(0x12f)){const _0x463ad5=_0x8485dd[_0x5edf9d(0x11b)];if(typeof _0x463ad5['content']===_0x5edf9d(0x138)&&_0x463ad5[_0x5edf9d(0x11c)])return _0x463ad5['content'][_0x5edf9d(0x127)]();}return _0x4e8a20[_0x5edf9d(0x13e)](_0x5edf9d(0x135)+Object['keys'](_0x8485dd)[_0x5edf9d(0x14d)](',')),null;}catch(_0x3238b5){return console[_0x5edf9d(0x15a)](_0x5edf9d(0x158),_0x3238b5),null;}}async function queryDingUser(_0xc97b9f,_0x15117a){const _0x38edb0=a9_0x2fae45;try{const _0x1595bb=await _0xc97b9f['dingStreamClient'][_0x38edb0(0x10d)](),_0x23a8d2=DING_OAPI_BASE+_0x38edb0(0x14c)+_0x1595bb,_0x3862c3=await urllib_1[_0x38edb0(0x13b)]['request'](_0x23a8d2,{'method':_0x38edb0(0x160),'data':{'userid':_0x15117a},'contentType':_0x38edb0(0x169),'dataType':_0x38edb0(0x169),'timeout':0x1388});if(_0x3862c3[_0x38edb0(0x13c)]!==0xc8||!_0x3862c3['data'])return _0xc97b9f[_0x38edb0(0x13e)](_0x38edb0(0x162)+_0x3862c3[_0x38edb0(0x13c)]+_0x38edb0(0x152)+JSON['stringify'](_0x3862c3[_0x38edb0(0x14f)])),null;const _0x74d926=_0x3862c3['data'];if(_0x74d926[_0x38edb0(0x122)]!==0x0)return console[_0x38edb0(0x15a)]('queryDingUser\x20接口返回错误:\x20errcode='+_0x74d926[_0x38edb0(0x122)]+_0x38edb0(0x142)+_0x74d926[_0x38edb0(0x123)]),null;return _0x74d926[_0x38edb0(0x144)]||null;}catch(_0x420544){return console[_0x38edb0(0x15a)]('queryDingUser\x20请求失败:',_0x420544),null;}}async function queryUserIdByMobile(_0x79c5b4,_0x51c1fb){const _0x52b93e=a9_0x2fae45;try{const _0x3fb0a1=await _0x79c5b4[_0x52b93e(0x12d)][_0x52b93e(0x10d)](),_0x814976=DING_OAPI_BASE+_0x52b93e(0x16b)+_0x3fb0a1,_0x32c49f=await urllib_1['default'][_0x52b93e(0x164)](_0x814976,{'method':_0x52b93e(0x160),'data':{'mobile':_0x51c1fb},'contentType':'json','dataType':_0x52b93e(0x169),'timeout':0x1388});if(_0x32c49f[_0x52b93e(0x13c)]!==0xc8||!_0x32c49f['data'])return _0x79c5b4[_0x52b93e(0x13e)](_0x52b93e(0x117)+_0x32c49f[_0x52b93e(0x13c)]+_0x52b93e(0x152)+JSON[_0x52b93e(0x151)](_0x32c49f[_0x52b93e(0x14f)])),null;const _0x4447ea=_0x32c49f['data'];if(_0x4447ea[_0x52b93e(0x122)]!==0x0)return console[_0x52b93e(0x15a)]('queryUserIdByMobile\x20接口返回错误:\x20errcode='+_0x4447ea[_0x52b93e(0x122)]+',\x20errmsg='+_0x4447ea[_0x52b93e(0x123)]),null;const _0x2e52a1=_0x4447ea[_0x52b93e(0x144)];return _0x2e52a1?.[_0x52b93e(0x125)]||null;}catch(_0x481469){return console[_0x52b93e(0x15a)](_0x52b93e(0x153),_0x481469),null;}}const TOOL_TAGS=['Write',a9_0x2fae45(0x10f),'Edit',a9_0x2fae45(0x111),a9_0x2fae45(0x116),a9_0x2fae45(0x16a),'Agent','Skill',a9_0x2fae45(0x15b),'WebSearch',a9_0x2fae45(0x14a),a9_0x2fae45(0x141),a9_0x2fae45(0x14e),a9_0x2fae45(0x157),a9_0x2fae45(0x148),a9_0x2fae45(0x13f),a9_0x2fae45(0x11e),a9_0x2fae45(0x133),a9_0x2fae45(0x12b),'ExitWorktree',a9_0x2fae45(0x128),'CronDelete','CronList',a9_0x2fae45(0x113),a9_0x2fae45(0x10b)][a9_0x2fae45(0x14d)]('|'),TOOL_USE_SELF_CLOSE_RE=new RegExp('<('+TOOL_TAGS+a9_0x2fae45(0x131),'g'),TOOL_USE_OPEN_CLOSE_RE=new RegExp('<('+TOOL_TAGS+')[^>]*>[\x5cs\x5cS]*?<\x5c/\x5c1>','g'),MULTI_NEWLINE_RE=/\n{3,}/g;function filterToolUseContent(_0x238abd){const _0x3356d3=a9_0x2fae45;let _0x2118e8=_0x238abd[_0x3356d3(0x13a)](TOOL_USE_SELF_CLOSE_RE,'');return _0x2118e8=_0x2118e8[_0x3356d3(0x13a)](TOOL_USE_OPEN_CLOSE_RE,''),_0x2118e8=_0x2118e8[_0x3356d3(0x13a)](MULTI_NEWLINE_RE,'\x0a\x0a'),_0x2118e8['trim']();}function splitMessage(_0x4f29a7,_0x1ac23d){const _0x45276a=a9_0x2fae45,_0x1f5999=[];while(_0x4f29a7[_0x45276a(0x155)]>_0x1ac23d){let _0x7bacc4=_0x4f29a7[_0x45276a(0x119)]('\x0a',_0x1ac23d);(_0x7bacc4===-0x1||_0x7bacc4<_0x1ac23d*0.5)&&(_0x7bacc4=_0x4f29a7[_0x45276a(0x119)]('。',_0x1ac23d)),(_0x7bacc4===-0x1||_0x7bacc4<_0x1ac23d*0.5)&&(_0x7bacc4=_0x4f29a7[_0x45276a(0x119)]('\x20',_0x1ac23d)),_0x7bacc4===-0x1||_0x7bacc4<_0x1ac23d*0.5?_0x7bacc4=_0x1ac23d:_0x7bacc4+=0x1,_0x1f5999[_0x45276a(0x15d)](_0x4f29a7[_0x45276a(0x15c)](0x0,_0x7bacc4)['trim']()),_0x4f29a7=_0x4f29a7['substring'](_0x7bacc4)[_0x45276a(0x127)]();}return _0x4f29a7[_0x45276a(0x155)]>0x0&&_0x1f5999[_0x45276a(0x15d)](_0x4f29a7),_0x1f5999;}async function sendDingMessage(_0x3322a1,_0x2c9c40){const _0x2be7bc=a9_0x2fae45,{conversationId:_0x32655c,sessionWebhook:_0x2ab82f,atUserId:_0x27937a,content:_0x50f8ac,msgType:msgType='text'}=_0x2c9c40,_0xe724e7=_0x3322a1[_0x2be7bc(0x120)][_0x2be7bc(0x11a)][_0x2be7bc(0x11f)](_0x2541e0=>_0x2541e0[_0x2be7bc(0x132)]===_0x32655c);let _0x38ed82=_0x27937a;(_0xe724e7?.[_0x2be7bc(0x163)]===![]||_0xe724e7?.[_0x2be7bc(0x140)]==='1')&&(_0x38ed82=undefined);const _0x141ccd=_0x38ed82?[_0x38ed82]:[],_0x362dd5=_0xe724e7?.[_0x2be7bc(0x10a)];let _0x2fda86=_0x50f8ac;_0x38ed82&&msgType===_0x2be7bc(0x14b)&&(_0x2fda86=_0x50f8ac+'\x0a@'+_0x38ed82);const _0x16ed4e=msgType==='markdown'?{'msgtype':_0x2be7bc(0x14b),'markdown':{'title':_0x2fda86,'text':_0x2fda86},'at':{'atUserIds':_0x141ccd,'isAtAll':![]}}:{'msgtype':'text','text':{'content':_0x50f8ac},'at':{'atUserIds':_0x141ccd,'isAtAll':![]}};if(_0x362dd5){const _0x5e300f=await _0x3322a1[_0x2be7bc(0x12d)][_0x2be7bc(0x10d)](),_0x329311='https://oapi.dingtalk.com/robot/send?access_token='+_0x362dd5;try{await urllib_1[_0x2be7bc(0x13b)][_0x2be7bc(0x164)](_0x329311,{'method':'POST','data':_0x16ed4e,'contentType':_0x2be7bc(0x169),'headers':{'x-acs-dingtalk-access-token':_0x5e300f},'dataType':_0x2be7bc(0x169)});}catch(_0x1453a4){console[_0x2be7bc(0x124)](_0x2be7bc(0x112),_0x1453a4);}}else{if(_0x2ab82f){const _0x2875cb=await _0x3322a1[_0x2be7bc(0x12d)][_0x2be7bc(0x10d)]();try{await urllib_1[_0x2be7bc(0x13b)][_0x2be7bc(0x164)](_0x2ab82f,{'method':_0x2be7bc(0x160),'data':_0x16ed4e,'contentType':_0x2be7bc(0x169),'headers':{'x-acs-dingtalk-access-token':_0x2875cb},'dataType':_0x2be7bc(0x169)});}catch(_0x194f92){console[_0x2be7bc(0x124)](_0x2be7bc(0x167),_0x194f92);}}else{if(_0x3322a1[_0x2be7bc(0x120)][_0x2be7bc(0x136)]){const _0x209a68=await _0x3322a1[_0x2be7bc(0x12d)][_0x2be7bc(0x10d)](),_0x166a01=_0x2be7bc(0x165)+_0x3322a1[_0x2be7bc(0x120)][_0x2be7bc(0x136)];try{await urllib_1[_0x2be7bc(0x13b)]['request'](_0x166a01,{'method':'POST','data':_0x16ed4e,'contentType':_0x2be7bc(0x169),'headers':{'x-acs-dingtalk-access-token':_0x209a68},'dataType':_0x2be7bc(0x169)});}catch(_0x4398e9){console['error'](_0x2be7bc(0x13d),_0x4398e9);}}else console[_0x2be7bc(0x124)]('未能获取机器人信息发送途径');}}}async function sendClaudeResponseToDing(_0x4aca8c,_0x23a2fe,_0x10f390,_0x579335,_0x404a67){const _0x4cb0a5=a9_0x2fae45,_0xb8c9c2=0x4650,_0x3a6c29=filterToolUseContent(_0x404a67);if(!_0x3a6c29){_0x4aca8c['debugLog'](_0x4cb0a5(0x12c));return;}if(_0x3a6c29[_0x4cb0a5(0x155)]<=_0xb8c9c2)await sendDingMessage(_0x4aca8c,{'conversationId':_0x23a2fe,'sessionWebhook':_0x10f390,'atUserId':_0x579335,'content':_0x3a6c29,'msgType':'markdown'});else{const _0x5c049b=splitMessage(_0x3a6c29,_0xb8c9c2);for(let _0x38daed=0x0;_0x38daed<_0x5c049b['length'];_0x38daed++){const _0x1bc562=_0x5c049b[_0x4cb0a5(0x155)]>0x1?_0x4cb0a5(0x129)+(_0x38daed+0x1)+'/'+_0x5c049b[_0x4cb0a5(0x155)]+_0x4cb0a5(0x11d):'';await sendDingMessage(_0x4aca8c,{'conversationId':_0x23a2fe,'sessionWebhook':_0x10f390,'atUserId':_0x38daed===_0x5c049b['length']-0x1?_0x579335:'','content':_0x1bc562+_0x5c049b[_0x38daed],'msgType':'markdown'}),_0x38daed<_0x5c049b[_0x4cb0a5(0x155)]-0x1&&await utils_ok_1[_0x4cb0a5(0x139)][_0x4cb0a5(0x114)](0x1f4);}}}
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.fetchQuotedMessage=fetchQuotedMessage,exports.queryDingUser=queryDingUser,exports.queryUserIdByMobile=queryUserIdByMobile,exports.filterToolUseContent=filterToolUseContent,exports.splitMessage=splitMessage,exports.sendDingMessage=sendDingMessage,exports.sendClaudeResponseToDing=sendClaudeResponseToDing,exports.sendMessageToUser=sendMessageToUser,exports.sendOwnerMessage=sendOwnerMessage;const utils_ok_1=require("utils-ok"),urllib_1=__importDefault(require("urllib")),DING_API_BASE="https://api.dingtalk.com",DING_OAPI_BASE="https://oapi.dingtalk.com";async function fetchQuotedMessage(e,t){try{const r=await e.dingStreamClient.getAccessToken(),n=`${DING_API_BASE}/v1.0/im/api/messages/${encodeURIComponent(t)}`,o=await urllib_1.default.request(n,{method:"GET",headers:{"x-acs-dingtalk-access-token":r},dataType:"json",timeout:5e3});if(o.status!==200||!o.data)return e.debugLog(`fetchQuotedMessage API \u8FD4\u56DE\u975E200: status=${o.status}, data=${JSON.stringify(o.data)}`),null;const s=o.data;if(s.text&&typeof s.text=="object"){const a=s.text.content;if(typeof a=="string"&&a)return a.trim()}if(typeof s.content=="string"&&s.content)try{const a=JSON.parse(s.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 s.content.trim()}if(s.body&&typeof s.body=="object"){const a=s.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(s).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(),n=`${DING_OAPI_BASE}/topapi/v2/user/get?access_token=${r}`,o=await urllib_1.default.request(n,{method:"POST",data:{userid:t},contentType:"json",dataType:"json",timeout:5e3});if(o.status!==200||!o.data)return e.debugLog(`queryDingUser API \u8FD4\u56DE\u975E200: status=${o.status}, data=${JSON.stringify(o.data)}`),null;const s=o.data;return s.errcode!==0?(console.warn(`queryDingUser \u63A5\u53E3\u8FD4\u56DE\u9519\u8BEF: errcode=${s.errcode}, errmsg=${s.errmsg}`),null):s.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(),n=`${DING_OAPI_BASE}/topapi/v2/user/getbymobile?access_token=${r}`,o=await urllib_1.default.request(n,{method:"POST",data:{mobile:t},contentType:"json",dataType:"json",timeout:5e3});if(o.status!==200||!o.data)return e.debugLog(`queryUserIdByMobile API \u8FD4\u56DE\u975E200: status=${o.status}, data=${JSON.stringify(o.data)}`),null;const s=o.data;return s.errcode!==0?(console.warn(`queryUserIdByMobile \u63A5\u53E3\u8FD4\u56DE\u9519\u8BEF: errcode=${s.errcode}, errmsg=${s.errmsg}`),null):s.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 n=e.lastIndexOf(`
4
+ `,t);(n===-1||n<t*.5)&&(n=e.lastIndexOf("\u3002",t)),(n===-1||n<t*.5)&&(n=e.lastIndexOf(" ",t)),n===-1||n<t*.5?n=t:n+=1,r.push(e.substring(0,n).trim()),e=e.substring(n).trim()}return e.length>0&&r.push(e),r}async function sendDingMessage(e,t){const{conversationId:r,sessionWebhook:n,atUserId:o,content:s,msgType:a="text"}=t,i=e.config.conversations.find(d=>d.conversationId===r);let c=o;(i?.atSender===!1||i?.conversationType==="1")&&(c=void 0);const l=c?[c]:[],p=i?.dingToken;let g=s;c&&a==="markdown"&&(g=`${s}
5
+ @${c}`);const f=a==="markdown"?{msgtype:"markdown",markdown:{title:g,text:g},at:{atUserIds:l,isAtAll:!1}}:{msgtype:"text",text:{content:s},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(n){const d=await e.dingStreamClient.getAccessToken();try{await urllib_1.default.request(n,{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,n,o){const a=filterToolUseContent(o);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:n,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?n:"",content:l+i[c],msgType:"markdown"}),c<i.length-1&&await utils_ok_1.baseUtil.sleep(500)}}}async function sendMessageToUser(e,t,r,n="text"){if(!e.config.enableMsgToUser)return console.log(`[sendMessageToUser] enableMsgToUser \u672A\u5F00\u542F\uFF0C\u8DF3\u8FC7\u53D1\u9001 (userId=${t})`),!1;try{const o=await e.dingStreamClient.getAccessToken(),s=n==="markdown"?"sampleMarkdown":"sampleText",a=JSON.stringify(n==="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:s,msgParam:a},contentType:"json",headers:{"x-acs-dingtalk-access-token":o},dataType:"json"});return i.status===200?!0:(console.error(`sendMessageToUser API \u8FD4\u56DE\u975E200: status=${i.status}, userId=${t}`),!1)}catch(o){return console.error(`sendMessageToUser \u5931\u8D25 (userId=${t}):`,o),!1}}async function sendOwnerMessage(e,t,r="text"){const{ownerConversationId:n,owner:o}=e.config;if(!n||!o)return!1;const s=await queryUserIdByMobile(e,o);return s?sendMessageToUser(e,s,t,r):(console.error(`sendOwnerMessage: \u65E0\u6CD5\u5C06\u624B\u673A\u53F7 ${o} \u89E3\u6790\u4E3A Ding userId`),!1)}
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(s){return s&&s.__esModule?s:{default:s}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.sendNotify=sendNotify;const fs_1=__importDefault(require("fs")),path_1=__importDefault(require("path")),urllib_1=__importDefault(require("urllib")),session_1=require("./session");async function sendNotify(s){const{clientId:p,message:l,conversationIds:r,atUserIds:n=[],markdown:y=!1}=s,_=path_1.default.join((0,session_1.getHomeDir)(),".cc-ding",p),c=path_1.default.join(_,"config.json");if(!fs_1.default.existsSync(c))return console.error(`\u274C \u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728: ${c}`),{success:0,fail:r.length};let i;try{i=JSON.parse(fs_1.default.readFileSync(c,"utf-8"))}catch(e){return console.error(`\u274C \u914D\u7F6E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${e instanceof Error?e.message:e}`),{success:0,fail:r.length}}let u=0,o=0;for(const e of r){const f=i.conversations.find(t=>t.conversationId===e),d=f?.dingToken||i.defaultDingToken;if(!d){console.error(` \u2717 \u4F1A\u8BDD ${e}: \u65E0 dingToken \u53EF\u7528`),o++;continue}try{const t=n.length>0?`${l} ${n.map(a=>`@${a}`).join(" ")}`:l,$=y?{msgtype:"markdown",markdown:{title:t,text:t},at:{atUserIds:n,isAtAll:!1}}:{msgtype:"text",text:{content:t},at:{atUserIds:n,isAtAll:!1}},h=`https://oapi.dingtalk.com/robot/send?access_token=${d}`,g=await urllib_1.default.request(h,{method:"POST",data:$,contentType:"json",dataType:"json"});if(g.status===200){const a=f?.conversationTitle||e;console.log(` \u2713 ${a}`),u++}else console.error(` \u2717 ${e}: HTTP ${g.status}`),o++}catch(t){console.error(` \u2717 ${e}: ${t instanceof Error?t.message:t}`),o++}}return{success:u,fail:o}}
@@ -1 +1,9 @@
1
- 'use strict';const a10_0x4dcc85=a10_0x300a;function a10_0x4011(){const _0x47eca4=['1527326yNLPUx','\x20──\x0a','quoteSenderNick','repliedMsg','603748etavUV','string','msgId','1015764QJGlDr','trim','quoteText','defineProperty','──\x20引用消息','5kZRtNH','extractQuoteInfo','text','formatPromptWithQuote','\x20(来自:\x20','16777608kFWAZz','__esModule','1277911GLLsnY','content','6464696yfVEEQ','12732LrsFMV'];a10_0x4011=function(){return _0x47eca4;};return a10_0x4011();}(function(_0x2b8b75,_0x2ee20f){const _0x3c3edd=a10_0x300a,_0x481a5d=_0x2b8b75();while(!![]){try{const _0x2ef975=-parseInt(_0x3c3edd(0x11b))/0x1+-parseInt(_0x3c3edd(0x11f))/0x2+-parseInt(_0x3c3edd(0x11e))/0x3+-parseInt(_0x3c3edd(0x123))/0x4+-parseInt(_0x3c3edd(0x114))/0x5*(parseInt(_0x3c3edd(0x126))/0x6)+parseInt(_0x3c3edd(0x11d))/0x7+parseInt(_0x3c3edd(0x119))/0x8;if(_0x2ef975===_0x2ee20f)break;else _0x481a5d['push'](_0x481a5d['shift']());}catch(_0x17bfff){_0x481a5d['push'](_0x481a5d['shift']());}}}(a10_0x4011,0x9fd58));Object[a10_0x4dcc85(0x129)](exports,a10_0x4dcc85(0x11a),{'value':!![]}),exports[a10_0x4dcc85(0x115)]=extractQuoteInfo,exports[a10_0x4dcc85(0x117)]=formatPromptWithQuote;function extractQuoteInfo(_0x4aa23e){const _0x3017c4=a10_0x4dcc85,_0x582221=_0x4aa23e[_0x3017c4(0x116)];if(!_0x582221?.[_0x3017c4(0x122)])return null;const _0x552c91=_0x582221[_0x3017c4(0x122)];let _0x22cabe='';const _0x51db04=_0x552c91[_0x3017c4(0x125)],_0x272175=_0x552c91['senderNick'];if(_0x552c91[_0x3017c4(0x11c)]){if(typeof _0x552c91[_0x3017c4(0x11c)][_0x3017c4(0x116)]==='string')_0x22cabe=_0x552c91[_0x3017c4(0x11c)][_0x3017c4(0x116)]['trim']();else typeof _0x552c91['content']===_0x3017c4(0x124)&&(_0x22cabe=_0x552c91[_0x3017c4(0x11c)][_0x3017c4(0x127)]());}if(!_0x22cabe&&!_0x51db04)return null;return{'quoteText':_0x22cabe,'quoteMessageId':_0x51db04,'quoteSenderNick':_0x272175};}function a10_0x300a(_0x36dd55,_0x588ffd){_0x36dd55=_0x36dd55-0x113;const _0x4011cd=a10_0x4011();let _0x300a0b=_0x4011cd[_0x36dd55];return _0x300a0b;}function formatPromptWithQuote(_0x5794be,_0x50af09){const _0x1be5f3=a10_0x4dcc85;if(!_0x50af09[_0x1be5f3(0x128)])return _0x5794be;const _0x13fafe=_0x50af09[_0x1be5f3(0x121)]?_0x1be5f3(0x118)+_0x50af09[_0x1be5f3(0x121)]+')':'';return _0x1be5f3(0x113)+_0x13fafe+_0x1be5f3(0x120)+_0x50af09['quoteText']+'\x0a──\x20引用结束\x20──\x0a\x0a'+_0x5794be;}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.extractQuoteInfo=extractQuoteInfo,exports.enrichQuoteInfo=enrichQuoteInfo,exports.extractDownloadCode=extractDownloadCode,exports.extractFileName=extractFileName,exports.detectExtFromBuffer=detectExtFromBuffer,exports.processFileMessage=processFileMessage,exports.formatPromptWithQuote=formatPromptWithQuote;const messaging_1=require("./messaging"),image_1=require("./image");function extractTextQuote(e){return e?typeof e.text=="string"?e.text.trim():typeof e=="string"?e.trim():"":""}function extractRichTextQuote(e){if(!e?.richText||!Array.isArray(e.richText))return"";const t=[];for(const i of e.richText)i.type==="text"&&i.text?t.push(i.text):i.type==="picture"&&t.push("[\u56FE\u7247]");return t.join(`
2
+ `).trim()}function extractChatRecordQuote(e){if(!e?.chatRecords||!Array.isArray(e.chatRecords))return"";const t=e.chatRecords;if(t.length===0)return"";const i=[`[\u804A\u5929\u8BB0\u5F55 - ${t.length}\u6761]`];for(const r of t){const n=r.senderNick??r.senderName??"\u672A\u77E5",s=r.content??r.text??"",c=r.msgtype??r.msgType??"text";c!=="text"&&!s?i.push(`${n}: [${c}\u6D88\u606F]`):i.push(`${n}: ${s}`)}return i.join(`
3
+ `)}function extractCardQuote(e){if(!e)return"";const t=[];return typeof e.title=="string"&&t.push(`[\u5361\u7247: ${e.title}]`),typeof e.markdown=="string"?t.push(e.markdown):typeof e.text=="string"&&t.push(e.text),t.join(`
4
+ `).trim()}function extractQuoteInfo(e){const t=e.text;if(!t?.repliedMsg)return null;const i=t.repliedMsg,r=i.msgId,n=i.senderNick,s=i.msgType||"text",c=i.content;let o="",d,a,u;switch(s){case"text":o=extractTextQuote(c);break;case"picture":{d=c?.pictureDownloadCode||c?.downloadCode||void 0,o="[\u56FE\u7247\u6D88\u606F]";break}case"richText":{const l=c;o=extractRichTextQuote(l),o||(o="[\u5BCC\u6587\u672C\u6D88\u606F]"),l?.richText&&(u=l.richText);break}case"chatRecord":o=extractChatRecordQuote(c),o||(o="[\u804A\u5929\u8BB0\u5F55]");break;case"file":a=c?.fileName,d=c?.downloadCode||void 0,o=a?`[\u6587\u4EF6: ${a}]`:"[\u6587\u4EF6\u6D88\u606F]";break;case"video":o="[\u89C6\u9891\u6D88\u606F]",d=c?.downloadCode||void 0;break;case"audio":o="[\u8BED\u97F3\u6D88\u606F]",d=c?.downloadCode||void 0;break;case"actionCard":case"interactiveCard":o=extractCardQuote(c),o||(o=`[${s}\u6D88\u606F]`);break;default:{o=extractTextQuote(c),o||(o=`[${s}\u6D88\u606F]`);break}}return!o&&!r?null:{quoteText:o,quoteMessageId:r,quoteSenderNick:n,quoteMsgType:s,quoteDownloadCode:d,quoteFileName:a,quoteRichText:u}}async function enrichQuoteInfo(e,t,i,r,n){const s=t.quoteMsgType,c=t.quoteDownloadCode;if(s==="picture"&&c){const o=await(0,image_1.processPictureMessage)(e,c,i.robotCode,r,n);if(o){t.quoteText=o;return}}if(s==="richText"&&t.quoteRichText){const o=await(0,image_1.processRichTextMessage)(e,t.quoteRichText,i.robotCode,r,n);if(o&&o!=="[\u5BCC\u6587\u672C\u6D88\u606F\u5185\u5BB9\u4E3A\u7A7A]"){t.quoteText=o;return}}if((s==="file"||s==="video"||s==="audio")&&c){const o=await(0,image_1.downloadToFilesDir)(e,c,i.robotCode,r,s,t.quoteFileName);if(o){const d=t.quoteFileName?`[${s}: ${t.quoteFileName}]`:`[${s}]`;t.quoteText=`${d} ${o}`;return}}if(t.quoteText.startsWith("[")&&t.quoteMessageId){const o=await(0,messaging_1.fetchQuotedMessage)(e,t.quoteMessageId);o&&(t.quoteText=o)}}function extractDownloadCode(e){if(e.downloadCode)return e.downloadCode;if(e.pictureDownloadCode)return e.pictureDownloadCode;if(e.fileDownloadCode)return e.fileDownloadCode;const t=e;if(t.extensions&&typeof t.extensions=="object"){const r=t.extensions;if(r.downloadCode)return r.downloadCode}const i=["image_content","file_content","video_content","audio_content"];for(const r of i){const n=t[r];if(n&&typeof n=="object"){const s=n;if(s.download_code)return s.download_code;if(s.downloadCode)return s.downloadCode}}return null}function extractFileName(e){if(e.fileName)return e.fileName;const t=e;for(const i of["content","file_content","image_content"]){const r=t[i];if(r&&typeof r=="object"){const n=r;if(n.fileName&&typeof n.fileName=="string")return n.fileName;if(n.file_name&&typeof n.file_name=="string")return n.file_name;if(n.name&&typeof n.name=="string")return n.name}}return typeof t.fileName=="string"?t.fileName:null}function detectExtFromBuffer(e){return e.length>=5&&e[0]===37&&e[1]===80&&e[2]===68&&e[3]===70&&e[4]===45?"pdf":e.length>=4&&e[0]===80&&e[1]===75&&e[2]===3&&e[3]===4?"docx":e.length>=8&&e[0]===208&&e[1]===207&&e[2]===17&&e[3]===224?"xls":"bin"}async function processFileMessage(e,t,i){const r=extractDownloadCode(t);if(!r)return null;const n=extractFileName(t),s=await(0,image_1.downloadToFilesDir)(e,r,t.robotCode,i,"file",n||void 0);return s?`${n?`\u6587\u4EF6: ${n}`:"\u6587\u4EF6\u6D88\u606F"}
5
+ \u8DEF\u5F84: ${s}`:null}function formatPromptWithQuote(e,t){if(!t.quoteText)return e;const i=[];if(t.quoteSenderNick&&i.push(`\u6765\u81EA: ${t.quoteSenderNick}`),t.quoteMsgType&&t.quoteMsgType!=="text"){const n={picture:"\u56FE\u7247",richText:"\u5BCC\u6587\u672C",chatRecord:"\u804A\u5929\u8BB0\u5F55",file:"\u6587\u4EF6",video:"\u89C6\u9891",audio:"\u8BED\u97F3",actionCard:"\u5361\u7247",interactiveCard:"\u5361\u7247"};i.push(`\u7C7B\u578B: ${n[t.quoteMsgType]||t.quoteMsgType}`)}return`\u2500\u2500 \u5F15\u7528\u6D88\u606F${i.length>0?` (${i.join(", ")})`:""} \u2500\u2500
6
+ ${t.quoteText}
7
+ \u2500\u2500 \u5F15\u7528\u7ED3\u675F \u2500\u2500
8
+
9
+ ${e}`}
@@ -0,0 +1,9 @@
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};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(o,t){return o.config.recorderCfg?.dist?o.config.recorderCfg.dist:path_1.default.join((0,session_1.getConversationDir)(o,t),".recorder")}function fileTimestamp(o=Date.now()){return utils_ok_1.dateUtil.mm(o).format("YYYY-MM-DD_HH-mm-ss-SSS")}function buildFrontmatter(o,t,u,s){return["---",`msgType: ${o}`,`sender: ${t} (${u})`,`time: ${utils_ok_1.dateUtil.mm(s).format("YYYY-MM-DD HH:mm:ss")}`,"---",""].join(`
2
+ `)}function saveRecordFile(o,t,u){const s=path_1.default.join(o,t);fs_1.default.mkdirSync(s,{recursive:!0});const i=`${fileTimestamp()}.md`,n=path_1.default.join(s,i);return fs_1.default.writeFileSync(n,u,"utf-8"),n}async function downloadAttachment(o,t,u,s,i=""){try{const n=await(0,image_1.getImageDownloadUrl)(o,t,u);if(!n)return null;const e=await(0,image_1.downloadImageBuffer)(n);if(!e)return null;const c=path_1.default.join(s,"attachments");fs_1.default.mkdirSync(c,{recursive:!0});const r=i?`.${i}`:(0,image_1.detectExtFromBuffer)(e),l=`${fileTimestamp()}-${t.slice(-8)}${r}`,d=path_1.default.join(c,l);return fs_1.default.writeFileSync(d,e),console.log(`[${(0,session_1.timestamp)()}] [recorder] \u9644\u4EF6\u5DF2\u4FDD\u5B58: ${d} (${e.length} bytes)`),d}catch(n){return console.warn(`[${(0,session_1.timestamp)()}] [recorder] \u9644\u4EF6\u4E0B\u8F7D\u5931\u8D25:`,n),null}}function recordText(o,t,u,s){const i=Date.now(),n=o.text?.content?.trim()??"",e=buildFrontmatter("text",u,s,i)+n;return saveRecordFile(t,"text",e)}async function recordPicture(o,t,u,s,i){const n=Date.now(),e=t.pictureDownloadCode||(0,image_1.extractDownloadCode)(t),c=[buildFrontmatter("picture",s,i,n)];if(e){const r=await downloadAttachment(o,e,t.robotCode,u);r?c.push(`![image](${r})`):c.push(`[\u56FE\u7247\u4E0B\u8F7D\u5931\u8D25] downloadCode: ${e}`)}else c.push("[\u56FE\u7247\u6D88\u606F - \u65E0\u6CD5\u83B7\u53D6\u4E0B\u8F7D\u7801]"),c.push("","```json",JSON.stringify(t,null,2),"```");return saveRecordFile(u,"picture",c.join(`
3
+ `))}async function recordFileMessage(o,t,u,s,i,n){const e=Date.now(),c=(0,image_1.extractDownloadCode)(t),r=[buildFrontmatter(n,s,i,e)];if(c){const l=await downloadAttachment(o,c,t.robotCode,u);l?r.push(`[${n}] ${l}`):r.push(`[${n}\u4E0B\u8F7D\u5931\u8D25] downloadCode: ${c}`)}else r.push(`[${n}\u6D88\u606F - \u65E0\u6CD5\u83B7\u53D6\u4E0B\u8F7D\u7801\uFF0C\u5DF2\u4FDD\u5B58\u539F\u59CB\u6570\u636E]`),r.push("","```json",JSON.stringify(t,null,2),"```");return saveRecordFile(u,n,r.join(`
4
+ `))}function recordChatRecord(o,t,u,s){const i=Date.now(),n=[buildFrontmatter("chatRecord",u,s,i)],e=o;let c=null;if(e.chatRecords&&Array.isArray(e.chatRecords))c=e.chatRecords;else if(e.extensions&&typeof e.extensions=="object"){const r=e.extensions;r.chatRecords&&Array.isArray(r.chatRecords)&&(c=r.chatRecords)}if(c&&c.length>0){n.push(`\u5171 ${c.length} \u6761\u6D88\u606F:
5
+ `);for(const r of c){const l=r.senderNick??r.senderName??"\u672A\u77E5",d=r.content??r.text??"",a=r.msgtype??r.msgType??"text";n.push(`**${l}** (${a}):`),n.push(d),n.push("")}}else n.push("[\u804A\u5929\u8BB0\u5F55 - \u5DF2\u4FDD\u5B58\u539F\u59CB\u6570\u636E]"),n.push("","```json",JSON.stringify(o,null,2),"```");return saveRecordFile(t,"chatRecord",n.join(`
6
+ `))}async function recordRichText(o,t,u,s,i){const n=Date.now(),e=[buildFrontmatter("richText",s,i,n)],c=t.content?.richText;if(c&&Array.isArray(c)){const r=c,l=await Promise.all(r.map(async d=>{if(d.type!=="picture")return null;const a=d.downloadCode||d.pictureDownloadCode;return a?downloadAttachment(o,a,t.robotCode,u):null}));for(let d=0;d<r.length;d++){const a=r[d];if(a.type==="text"&&a.text)e.push(a.text);else if(a.type==="picture"){if(a.downloadCode||a.pictureDownloadCode){const f=l[d];f?e.push(`![image](${f})`):e.push("[\u5185\u5D4C\u56FE\u7247\u4E0B\u8F7D\u5931\u8D25]")}}else a.type==="mention"&&a.userId&&e.push(`@${a.userId}`)}}else e.push("[\u5BCC\u6587\u672C\u6D88\u606F - \u5DF2\u4FDD\u5B58\u539F\u59CB\u6570\u636E]"),e.push("","```json",JSON.stringify(t,null,2),"```");return saveRecordFile(u,"richText",e.join(`
7
+ `))}function recordCard(o,t,u,s,i){const n=Date.now(),e=[buildFrontmatter(i,u,s,n)],c=o,r=c.actionCard??c.interactiveCard??c.content??c;return typeof r.text=="string"?e.push(r.text):typeof r.title=="string"&&(e.push(`**${r.title}**`),typeof r.markdown=="string"&&e.push(r.markdown)),e.push("","---","\u539F\u59CB\u6570\u636E:","```json",JSON.stringify(o,null,2),"```"),saveRecordFile(t,i,e.join(`
8
+ `))}function recordUnknown(o,t,u,s,i){const n=Date.now(),e=[buildFrontmatter(i,u,s,n)];return e.push(`[\u672A\u77E5\u6D88\u606F\u7C7B\u578B: ${i}]`),e.push("","```json",JSON.stringify(o,null,2),"```"),saveRecordFile(t,"unknown",e.join(`
9
+ `))}async function recordMessage(o,t,u){const s=getRecorderDir(o,u),i=t.msgtype||"unknown",n=t.senderNick??"\u672A\u77E5",e=t.senderStaffId??"";switch(console.log(`[${(0,session_1.timestamp)()}] [recorder] \u8BB0\u5F55\u6D88\u606F: type=${i}, sender=${n}(${e})`),i){case"text":return recordText(t,s,n,e);case"picture":return recordPicture(o,t,s,n,e);case"file":case"video":case"audio":return recordFileMessage(o,t,s,n,e,i);case"chatRecord":return recordChatRecord(t,s,n,e);case"richText":return recordRichText(o,t,s,n,e);case"actionCard":case"interactiveCard":return recordCard(t,s,n,e,i);default:return recordUnknown(t,s,n,e,i)}}