cc-ding 1.0.4 → 1.0.6

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.
@@ -5,8 +5,8 @@
5
5
  Examples:
6
6
  $ cc-ding init -ci {clientId} -cs {clientSecret} -u {user} -dt {defaultDingToken}
7
7
  $ cc-ding run -ci {clientId}
8
- `).version((0,a.projUtil)().getPkgVersion()),o.command("init").description("\u521D\u59CB\u5316cc-ding\u914D\u7F6E\u6587\u4EF6, \u751F\u6210\u6700\u7B80config.json").requiredOption("-ci, --clientId <value>","clientId").requiredOption("-cs, --clientSecret <value>","clientSecret (\u9489\u9489Stream\u8FDE\u63A5\u5BC6\u94A5)").requiredOption("-u, --user <value>","user (\u81EA\u5DF1\u7684\u624B\u673A\u53F7\u6216\u5DE5\u53F7, \u81EA\u52A8\u8BBE\u4E3Aowner\u5E76\u52A0\u5165\u767D\u540D\u5355)").requiredOption("-dt, --defaultDingToken <value>","defaultDingToken (\u515C\u5E95\u9489\u9489\u673A\u5668\u4EBAToken)").option("-cn, --clientName <value>","clientName (\u673A\u5668\u4EBA\u540D\u79F0, \u53EF\u9009)").action(async e=>{const n=process.version.slice(1);parseInt(n.split(".")[0],10)<24&&(console.log(`
9
- \u274C Node \u7248\u672C\u8FC7\u4F4E\uFF0C\u65E0\u6CD5\u6267\u884C init \u547D\u4EE4`),console.log(` \u5F53\u524D\u7248\u672C\uFF1A${n}`),console.log(" \u8981\u6C42\uFF1ANode >= 24"),console.log(`
8
+ `).version((0,a.projUtil)().getPkgVersion()),o.command("init").description("\u521D\u59CB\u5316cc-ding\u914D\u7F6E\u6587\u4EF6, \u751F\u6210\u6700\u7B80config.json").requiredOption("-ci, --clientId <value>","clientId").requiredOption("-cs, --clientSecret <value>","clientSecret (\u9489\u9489Stream\u8FDE\u63A5\u5BC6\u94A5)").requiredOption("-u, --user <value>","user (\u81EA\u5DF1\u7684\u624B\u673A\u53F7\u6216\u5DE5\u53F7, \u81EA\u52A8\u8BBE\u4E3Aowner\u5E76\u52A0\u5165\u767D\u540D\u5355)").requiredOption("-dt, --defaultDingToken <value>","defaultDingToken (\u515C\u5E95\u9489\u9489\u673A\u5668\u4EBAToken)").option("-cn, --clientName <value>","clientName (\u673A\u5668\u4EBA\u540D\u79F0, \u53EF\u9009)").action(async e=>{const n=process.version.slice(1);parseInt(n.split(".")[0],10)<22&&(console.log(`
9
+ \u274C Node \u7248\u672C\u8FC7\u4F4E\uFF0C\u65E0\u6CD5\u6267\u884C init \u547D\u4EE4`),console.log(` \u5F53\u524D\u7248\u672C\uFF1A${n}`),console.log(" \u8981\u6C42\uFF1ANode >= 22"),console.log(`
10
10
  \u{1F4A1} \u8BF7\u5347\u7EA7 Node \u7248\u672C\u540E\u91CD\u65B0\u8FD0\u884C
11
11
  `),process.exit(1));const i=`${`${(0,t.getHomeDir)()}/.cc-ding/${e.clientId}`}/config.json`;p.default.existsSync(i)&&(console.log(`\u914D\u7F6E\u6587\u4EF6\u5DF2\u5B58\u5728: ${i}`),console.log("\u5982\u9700\u91CD\u65B0\u521D\u59CB\u5316, \u8BF7\u5148\u5220\u9664\u5DF2\u6709\u914D\u7F6E\u6587\u4EF6"),process.exit(1));const c={clientName:e.clientName||"cc\u52A9\u624B",owner:e.user,whiteUserList:[e.user],clientSecret:e.clientSecret,defaultDingToken:e.defaultDingToken,conversations:[],includeThinking:!1,resultOnly:!0,debug:!1,taskQueueSize:10,taskHandlerCount:1,sessionMaxConcurrency:20};(0,t.initClientDir)(e.clientId,c),console.log("\u914D\u7F6E\u6587\u4EF6\u5DF2\u751F\u6210:",i),console.log(""),console.log("\u540E\u7EED\u6B65\u9AA4:"),console.log(" 1. \u7F16\u8F91 config.json \u6DFB\u52A0 conversations \u914D\u7F6E(\u7FA4\u804A\u9700\u914D\u7F6EdingToken)"),console.log(" 2. \u542F\u52A8\u673A\u5668\u4EBA: cc-ding run -ci",e.clientId),console.log(" 3. \u63A8\u8350PM2\u542F\u52A8:"),console.log(` pm2 start --name "cc-ding-${e.clientId}" npx -- -p cc-ding cc-ding run -ci ${e.clientId}`)}),o.command("run").description(`
12
12
  - \u529F\u80FD: \u9489\u9489\u673A\u5668\u4EBA\u5BF9\u63A5\u672C\u5730Claude, \u652F\u6301\u4F1A\u8BDD\u6A21\u5F0F\u548C\u4EFB\u52A1\u961F\u5217\u6A21\u5F0F
@@ -1,48 +1,48 @@
1
- "use strict";var H=exports&&exports.__importDefault||function(N){return N&&N.__esModule?N:{default:N}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DingClaude=void 0;const B=require("child_process"),Q=require("utils-ok"),C=H(require("fs")),G=H(require("os")),R=H(require("path")),X=require("../common"),P=require("./quote"),K=require("./messaging"),O=require("./image"),$=require("./commands"),z=require("./messaging"),x=require("./claude-process"),V=require("./recorder"),L=require("./menu"),c=require("./session"),b=require("./task"),M=require("./todo"),Z=require("./commands"),S=require("./api-key-manager"),ee=require("./secrets"),I=require("./command-route"),j=require("./cron"),U=require("./platform"),J=(0,X.projUtil)().getPkgVersion();class se{constructor(d){this.resolvedPhones={},this.activeSessions=new Map,this.pendingAuthRequests=new Map,this.recorderModeConversations=new Set,this.pendingFreedomConvs=new Map,this.DEFAULT_SESSION_MAX_CONCURRENCY=5,this.DEFAULT_TASK_HANDLER_COUNT=1,this.DEFAULT_TASK_QUEUE_SIZE=50,this.sendDingMessage=i=>(0,z.sendDingMessage)(this,i),this.sendClaudeResponseToDing=(i,o,r,s)=>(0,z.sendClaudeResponseToDing)(this,i,o,r,s),this.parseClaudeStreamLine=x.parseClaudeStreamLine,this.interruptClaudeProcess=(i,o)=>(0,x.interruptClaudeProcess)(i,o),this.executeClaudeQuery=(i,o,r)=>(0,x.executeClaudeQuery)(this,i,o,r),this.getClientDir=()=>(0,c.getClientDir)(this),this.getClientConfig=()=>(0,c.getClientConfig)(this),this.authCheck=(i,o)=>(0,c.authCheck)(this,i,o),this.isOwner=i=>(0,c.isOwner)(this,i),this.isAdmin=i=>(0,c.isAdmin)(this,i),this.debugLog=(i,...o)=>(0,c.debugLog)(this,i,...o),this.hashConversationId=i=>(0,c.hashConversationId)(this,i),this.getConversationConfig=i=>(0,c.getConversationConfig)(this,i),this.getConversationDir=i=>(0,c.getConversationDir)(this,i),this.getSessionsDir=i=>(0,c.getSessionsDir)(this,i),this.getTasksDir=i=>(0,c.getTasksDir)(this,i),this.getSessionDir=i=>(0,c.getSessionDir)(this,i),this.getSessionId=c.getSessionId,this.formatSessionInfo=i=>(0,c.formatSessionInfo)(this,i),this.readSessionLogTail=(i,o)=>(0,c.readSessionLogTail)(this,i,o),this.findActiveSession=i=>(0,c.findActiveSession)(this,i),this.findHistorySession=(i,o)=>(0,c.findHistorySession)(this,i,o),this.findLatestSession=i=>(0,c.findLatestSession)(this,i),this.updateSessionFile=(i,o)=>(0,c.updateSessionFile)(this,i,o),this.appendSessionLog=c.appendSessionLog,this.getActiveSessionsFile=i=>(0,c.getActiveSessionsFile)(this,i),this.saveActiveSession=i=>(0,c.saveActiveSession)(this,i),this.loadActiveSessions=()=>(0,c.loadActiveSessions)(this),this.endSession=(i,o)=>(0,c.endSession)(this,i,o),this.switchToSession=(i,o,r,s,l)=>(0,c.switchToSession)(this,i,o,r,s,l),this.startNewSession=i=>(0,c.startNewSession)(this,i),this.handleSessionMessage=i=>(0,c.handleSessionMessage)(this,i),this.cleanCache=(i,o=!0)=>(0,c.cleanCache)(this,i,o),this.formatTaskInfo=()=>(0,b.formatTaskInfo)(this),this.cancelTask=(i,o)=>(0,b.cancelTask)(this,i,o),this.countTodoTask=()=>(0,b.countTodoTask)(this),this.getOneTodoTask=()=>(0,b.getOneTodoTask)(this),this.finishTask=i=>(0,b.finishTask)(this,i),this.handleTask=()=>(0,b.handleTask)(this),this.runTaskHandlerLoop=()=>(0,b.runTaskHandlerLoop)(this),this.saveTask=i=>(0,b.saveTask)(this,i),this.clientId=d,this.config=(0,c.getClientConfig)(this);try{this.dingStreamClient=new Q.DingStreamClient({clientId:d,clientSecret:(0,ee.resolveSecret)(this.config.clientSecret),keepAlive:!0,debug:this.config.debug??!1})}catch(i){console.error("Error: DingStreamClient init failed.",i),process.exit(1)}this.cronEngine=new j.CronEngine(this)}async requireOwnerOrAdmin(d,i,o){return this.isOwner(o)||this.isAdmin(o)?!0:(await this.sendDingMessage({conversationId:d,sessionWebhook:i,content:"\u274C \u53EA\u6709\u673A\u5668\u4EBA owner \u6216\u7BA1\u7406\u5458\u624D\u80FD\u6267\u884C\u6B64\u64CD\u4F5C",msgType:"markdown"}),!1)}appendBashAudit(d,i,o){try{const r=R.default.join(this.getClientDir(),"bash-audit.log"),s=`[${(0,c.timestamp)()}] conversation=${d} user=${i} cmd=${JSON.stringify(o)}
2
- `;C.default.appendFileSync(r,s,{encoding:"utf-8",mode:(0,U.isWindows)()?void 0:384})}catch(r){console.error("\u5199\u5165 bash \u5BA1\u8BA1\u65E5\u5FD7\u5931\u8D25:",r)}}async requireOwner(d,i,o){return this.isOwner(o)?!0:(await this.sendDingMessage({conversationId:d,sessionWebhook:i,content:"\u274C \u53EA\u6709\u673A\u5668\u4EBA owner \u624D\u80FD\u6267\u884C\u6B64\u64CD\u4F5C",msgType:"markdown"}),!1)}async requireOwnerOrSingleChat(d,i,o,r){return this.isOwner(o)||r?.conversationType==="1"?!0:(await this.sendDingMessage({conversationId:d,sessionWebhook:i,content:"\u274C \u53EA\u6709\u673A\u5668\u4EBA owner \u624D\u80FD\u6267\u884C\u6B64\u64CD\u4F5C",msgType:"markdown"}),!1)}async handleAuthRequest(d){const{senderStaffId:i,senderNick:o,conversationId:r,conversationType:s,conversationTitle:l,sessionWebhook:n}=d;if(!this.config.ownerConversationId){await this.sendDingMessage({conversationId:r,sessionWebhook:n,content:["\u62B1\u6B49,\u60A8\u6682\u65E0\u4F7F\u7528\u6743\u9650","\u8BF7\u8054\u7CFB\u673A\u5668\u4EBA owner \u7533\u8BF7\u6388\u6743"].join(`
3
- `),msgType:"markdown"});return}for(const _ of this.pendingAuthRequests.values())if(_.senderStaffId===i&&_.conversationId===r){await this.sendDingMessage({conversationId:r,sessionWebhook:n,content:"\u23F3 \u6388\u6743\u7533\u8BF7\u5DF2\u53D1\u9001\uFF0C\u8BF7\u7B49\u5F85\u7BA1\u7406\u5458\u5BA1\u6279...",msgType:"markdown"});return}const f=`r${Date.now().toString(36)}`,D={id:f,senderStaffId:i,senderNick:o,conversationId:r,conversationType:s,conversationTitle:l,requestTime:Date.now()};this.pendingAuthRequests.set(f,D),console.log(`[${(0,c.timestamp)()}] \u65B0\u6388\u6743\u7533\u8BF7: id=${f}, userId=${i}, \u6635\u79F0=${o}, \u4F1A\u8BDD=${r}`);const k=["\u{1F4CB} **\u6536\u5230\u6388\u6743\u7533\u8BF7**",`- **\u7528\u6237ID:** ${i}`,`- **\u6635\u79F0:** ${o}`,`- **\u4F1A\u8BDDID:** ${r}`,l?`- **\u4F1A\u8BDD\u6807\u9898:** ${l}`:"",`- **\u4F1A\u8BDD\u7C7B\u578B:** ${s==="1"?"\u5355\u804A":s==="2"?"\u7FA4\u804A":s||"-"}`,"",`\u56DE\u590D \`/auth approve ${f}\` \u901A\u8FC7`,`\u56DE\u590D \`/auth reject ${f}\` \u62D2\u7EDD`].filter(Boolean).join(`
4
- `);await(0,K.sendOwnerMessage)(this,k,"markdown")?await this.sendDingMessage({conversationId:r,sessionWebhook:n,content:"\u2705 \u5DF2\u5411\u7BA1\u7406\u5458\u53D1\u9001\u6388\u6743\u7533\u8BF7\uFF0C\u8BF7\u7B49\u5F85\u5BA1\u6279...",msgType:"markdown"}):(this.pendingAuthRequests.delete(f),await this.sendDingMessage({conversationId:r,sessionWebhook:n,content:"\u274C \u6388\u6743\u7533\u8BF7\u53D1\u9001\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u624B\u52A8\u6388\u6743",msgType:"markdown"}))}async handleCronCommand(d,i){const{conversationId:o,sessionWebhook:r,senderStaffId:s,senderNick:l,conversationConfig:n}=i;switch(d.type){case"list":{const f=await this.getOrCreateLogSession(o,r,s,l,n,!0),D=this.cronEngine.listJobs(o);f.sessionDir&&(this.appendSessionLog(f.sessionDir,"user","/cron list"),this.appendSessionLog(f.sessionDir,"assistant",`\u5217\u51FA ${D.length} \u4E2A\u5B9A\u65F6\u4EFB\u52A1`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:(0,j.formatCronJobList)(D),msgType:"markdown"});return}case"delete":{const f=this.cronEngine.removeJob(d.id),D=await this.getOrCreateLogSession(o,r,s,l,n);D.sessionDir&&(this.appendSessionLog(D.sessionDir,"user",`/cron delete ${d.id}`),this.appendSessionLog(D.sessionDir,"assistant",f?`\u5220\u9664\u5B9A\u65F6\u4EFB\u52A1 ${d.id}`:`\u672A\u627E\u5230\u5B9A\u65F6\u4EFB\u52A1: ${d.id}`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:f?`\u2705 \u5B9A\u65F6\u4EFB\u52A1 **${d.id}** \u5DF2\u5220\u9664`:`\u274C \u672A\u627E\u5230\u5B9A\u65F6\u4EFB\u52A1: ${d.id}`,msgType:"markdown"});return}case"pause":{const f=this.cronEngine.toggleJob(d.id,!1),D=await this.getOrCreateLogSession(o,r,s,l,n);D.sessionDir&&(this.appendSessionLog(D.sessionDir,"user",`/cron pause ${d.id}`),this.appendSessionLog(D.sessionDir,"assistant",f?`\u6682\u505C\u5B9A\u65F6\u4EFB\u52A1 ${d.id}`:`\u672A\u627E\u5230\u5B9A\u65F6\u4EFB\u52A1: ${d.id}`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:f?`\u23F8\uFE0F \u5B9A\u65F6\u4EFB\u52A1 **${d.id}** \u5DF2\u6682\u505C`:`\u274C \u672A\u627E\u5230\u5B9A\u65F6\u4EFB\u52A1: ${d.id}`,msgType:"markdown"});return}case"resume":{const f=this.cronEngine.toggleJob(d.id,!0),D=await this.getOrCreateLogSession(o,r,s,l,n);D.sessionDir&&(this.appendSessionLog(D.sessionDir,"user",`/cron resume ${d.id}`),this.appendSessionLog(D.sessionDir,"assistant",f?`\u6062\u590D\u5B9A\u65F6\u4EFB\u52A1 ${d.id}`:`\u672A\u627E\u5230\u5B9A\u65F6\u4EFB\u52A1: ${d.id}`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:f?`\u25B6\uFE0F \u5B9A\u65F6\u4EFB\u52A1 **${d.id}** \u5DF2\u6062\u590D`:`\u274C \u672A\u627E\u5230\u5B9A\u65F6\u4EFB\u52A1: ${d.id}`,msgType:"markdown"});return}case"create_cron":{if(!(0,j.isValidCronExpression)(d.cronExpression)){await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u274C \u65E0\u6548\u7684cron\u8868\u8FBE\u5F0F: \`${d.cronExpression}\`
1
+ "use strict";var B=exports&&exports.__importDefault||function(R){return R&&R.__esModule?R:{default:R}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DingClaude=void 0;const G=require("child_process"),J=require("utils-ok"),k=B(require("fs")),z=B(require("os")),N=B(require("path")),X=require("../common"),E=require("./quote"),K=require("./messaging"),W=require("./image"),C=require("./commands"),O=require("./messaging"),q=require("./claude-process"),V=require("./recorder"),L=require("./menu"),c=require("./session"),b=require("./task"),M=require("./todo"),Z=require("./commands"),S=require("./api-key-manager"),ee=require("./secrets"),$=require("./command-route"),j=require("./cron"),U=require("./platform"),Q=(0,X.projUtil)().getPkgVersion();class se{constructor(d){this.resolvedPhones={},this.activeSessions=new Map,this.pendingAuthRequests=new Map,this.recorderModeConversations=new Set,this.pendingFreedomConvs=new Map,this.DEFAULT_SESSION_MAX_CONCURRENCY=5,this.DEFAULT_TASK_HANDLER_COUNT=1,this.DEFAULT_TASK_QUEUE_SIZE=50,this.sendDingMessage=i=>(0,O.sendDingMessage)(this,i),this.sendClaudeResponseToDing=(i,o,r,s)=>(0,O.sendClaudeResponseToDing)(this,i,o,r,s),this.parseClaudeStreamLine=q.parseClaudeStreamLine,this.interruptClaudeProcess=(i,o)=>(0,q.interruptClaudeProcess)(i,o),this.executeClaudeQuery=(i,o,r)=>(0,q.executeClaudeQuery)(this,i,o,r),this.getClientDir=()=>(0,c.getClientDir)(this),this.getClientConfig=()=>(0,c.getClientConfig)(this),this.authCheck=(i,o)=>(0,c.authCheck)(this,i,o),this.isOwner=i=>(0,c.isOwner)(this,i),this.isAdmin=i=>(0,c.isAdmin)(this,i),this.debugLog=(i,...o)=>(0,c.debugLog)(this,i,...o),this.hashConversationId=i=>(0,c.hashConversationId)(this,i),this.getConversationConfig=i=>(0,c.getConversationConfig)(this,i),this.getConversationDir=i=>(0,c.getConversationDir)(this,i),this.getSessionsDir=i=>(0,c.getSessionsDir)(this,i),this.getTasksDir=i=>(0,c.getTasksDir)(this,i),this.getSessionDir=i=>(0,c.getSessionDir)(this,i),this.getSessionId=c.getSessionId,this.formatSessionInfo=i=>(0,c.formatSessionInfo)(this,i),this.readSessionLogTail=(i,o)=>(0,c.readSessionLogTail)(this,i,o),this.findActiveSession=i=>(0,c.findActiveSession)(this,i),this.findHistorySession=(i,o)=>(0,c.findHistorySession)(this,i,o),this.findLatestSession=i=>(0,c.findLatestSession)(this,i),this.updateSessionFile=(i,o)=>(0,c.updateSessionFile)(this,i,o),this.appendSessionLog=c.appendSessionLog,this.getActiveSessionsFile=i=>(0,c.getActiveSessionsFile)(this,i),this.saveActiveSession=i=>(0,c.saveActiveSession)(this,i),this.loadActiveSessions=()=>(0,c.loadActiveSessions)(this),this.endSession=(i,o)=>(0,c.endSession)(this,i,o),this.switchToSession=(i,o,r,s,l)=>(0,c.switchToSession)(this,i,o,r,s,l),this.startNewSession=i=>(0,c.startNewSession)(this,i),this.handleSessionMessage=i=>(0,c.handleSessionMessage)(this,i),this.cleanCache=(i,o=!0)=>(0,c.cleanCache)(this,i,o),this.formatTaskInfo=()=>(0,b.formatTaskInfo)(this),this.cancelTask=(i,o)=>(0,b.cancelTask)(this,i,o),this.countTodoTask=()=>(0,b.countTodoTask)(this),this.getOneTodoTask=()=>(0,b.getOneTodoTask)(this),this.finishTask=i=>(0,b.finishTask)(this,i),this.handleTask=()=>(0,b.handleTask)(this),this.runTaskHandlerLoop=()=>(0,b.runTaskHandlerLoop)(this),this.saveTask=i=>(0,b.saveTask)(this,i),this.clientId=d,this.config=(0,c.getClientConfig)(this);try{this.dingStreamClient=new J.DingStreamClient({clientId:d,clientSecret:(0,ee.resolveSecret)(this.config.clientSecret),keepAlive:!0,debug:this.config.debug??!1})}catch(i){console.error("Error: DingStreamClient init failed.",i),process.exit(1)}this.cronEngine=new j.CronEngine(this)}async requireOwnerOrAdmin(d,i,o){return this.isOwner(o)||this.isAdmin(o)?!0:(await this.sendDingMessage({conversationId:d,sessionWebhook:i,content:"\u274C \u53EA\u6709\u673A\u5668\u4EBA owner \u6216\u7BA1\u7406\u5458\u624D\u80FD\u6267\u884C\u6B64\u64CD\u4F5C",msgType:"markdown"}),!1)}appendBashAudit(d,i,o){try{const r=N.default.join(this.getClientDir(),"bash-audit.log"),s=`[${(0,c.timestamp)()}] conversation=${d} user=${i} cmd=${JSON.stringify(o)}
2
+ `;k.default.appendFileSync(r,s,{encoding:"utf-8",mode:(0,U.isWindows)()?void 0:384})}catch(r){console.error("\u5199\u5165 bash \u5BA1\u8BA1\u65E5\u5FD7\u5931\u8D25:",r)}}async requireOwner(d,i,o){return this.isOwner(o)?!0:(await this.sendDingMessage({conversationId:d,sessionWebhook:i,content:"\u274C \u53EA\u6709\u673A\u5668\u4EBA owner \u624D\u80FD\u6267\u884C\u6B64\u64CD\u4F5C",msgType:"markdown"}),!1)}async requireOwnerOrSingleChat(d,i,o,r){return this.isOwner(o)||r?.conversationType==="1"?!0:(await this.sendDingMessage({conversationId:d,sessionWebhook:i,content:"\u274C \u53EA\u6709\u673A\u5668\u4EBA owner \u624D\u80FD\u6267\u884C\u6B64\u64CD\u4F5C",msgType:"markdown"}),!1)}async handleAuthRequest(d){const{senderStaffId:i,senderNick:o,conversationId:r,conversationType:s,conversationTitle:l,sessionWebhook:n}=d;if(!this.config.ownerConversationId){await this.sendDingMessage({conversationId:r,sessionWebhook:n,content:["\u62B1\u6B49,\u60A8\u6682\u65E0\u4F7F\u7528\u6743\u9650","\u8BF7\u8054\u7CFB\u673A\u5668\u4EBA owner \u7533\u8BF7\u6388\u6743"].join(`
3
+ `),msgType:"markdown"});return}for(const x of this.pendingAuthRequests.values())if(x.senderStaffId===i&&x.conversationId===r){await this.sendDingMessage({conversationId:r,sessionWebhook:n,content:"\u23F3 \u6388\u6743\u7533\u8BF7\u5DF2\u53D1\u9001\uFF0C\u8BF7\u7B49\u5F85\u7BA1\u7406\u5458\u5BA1\u6279...",msgType:"markdown"});return}const u=`r${Date.now().toString(36)}`,D={id:u,senderStaffId:i,senderNick:o,conversationId:r,conversationType:s,conversationTitle:l,requestTime:Date.now()};this.pendingAuthRequests.set(u,D),console.log(`[${(0,c.timestamp)()}] \u65B0\u6388\u6743\u7533\u8BF7: id=${u}, userId=${i}, \u6635\u79F0=${o}, \u4F1A\u8BDD=${r}`);const I=["\u{1F4CB} **\u6536\u5230\u6388\u6743\u7533\u8BF7**",`- **\u7528\u6237ID:** ${i}`,`- **\u6635\u79F0:** ${o}`,`- **\u4F1A\u8BDDID:** ${r}`,l?`- **\u4F1A\u8BDD\u6807\u9898:** ${l}`:"",`- **\u4F1A\u8BDD\u7C7B\u578B:** ${s==="1"?"\u5355\u804A":s==="2"?"\u7FA4\u804A":s||"-"}`,"",`\u56DE\u590D \`/auth approve ${u}\` \u901A\u8FC7`,`\u56DE\u590D \`/auth reject ${u}\` \u62D2\u7EDD`].filter(Boolean).join(`
4
+ `);await(0,K.sendOwnerMessage)(this,I,"markdown")?await this.sendDingMessage({conversationId:r,sessionWebhook:n,content:"\u2705 \u5DF2\u5411\u7BA1\u7406\u5458\u53D1\u9001\u6388\u6743\u7533\u8BF7\uFF0C\u8BF7\u7B49\u5F85\u5BA1\u6279...",msgType:"markdown"}):(this.pendingAuthRequests.delete(u),await this.sendDingMessage({conversationId:r,sessionWebhook:n,content:"\u274C \u6388\u6743\u7533\u8BF7\u53D1\u9001\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u624B\u52A8\u6388\u6743",msgType:"markdown"}))}async handleCronCommand(d,i){const{conversationId:o,sessionWebhook:r,senderStaffId:s,senderNick:l,conversationConfig:n}=i;switch(d.type){case"list":{const u=await this.getOrCreateLogSession(o,r,s,l,n,!0),D=this.cronEngine.listJobs(o);u.sessionDir&&(this.appendSessionLog(u.sessionDir,"user","/cron list"),this.appendSessionLog(u.sessionDir,"assistant",`\u5217\u51FA ${D.length} \u4E2A\u5B9A\u65F6\u4EFB\u52A1`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:(0,j.formatCronJobList)(D),msgType:"markdown"});return}case"delete":{const u=this.cronEngine.removeJob(d.id),D=await this.getOrCreateLogSession(o,r,s,l,n);D.sessionDir&&(this.appendSessionLog(D.sessionDir,"user",`/cron delete ${d.id}`),this.appendSessionLog(D.sessionDir,"assistant",u?`\u5220\u9664\u5B9A\u65F6\u4EFB\u52A1 ${d.id}`:`\u672A\u627E\u5230\u5B9A\u65F6\u4EFB\u52A1: ${d.id}`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:u?`\u2705 \u5B9A\u65F6\u4EFB\u52A1 **${d.id}** \u5DF2\u5220\u9664`:`\u274C \u672A\u627E\u5230\u5B9A\u65F6\u4EFB\u52A1: ${d.id}`,msgType:"markdown"});return}case"pause":{const u=this.cronEngine.toggleJob(d.id,!1),D=await this.getOrCreateLogSession(o,r,s,l,n);D.sessionDir&&(this.appendSessionLog(D.sessionDir,"user",`/cron pause ${d.id}`),this.appendSessionLog(D.sessionDir,"assistant",u?`\u6682\u505C\u5B9A\u65F6\u4EFB\u52A1 ${d.id}`:`\u672A\u627E\u5230\u5B9A\u65F6\u4EFB\u52A1: ${d.id}`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:u?`\u23F8\uFE0F \u5B9A\u65F6\u4EFB\u52A1 **${d.id}** \u5DF2\u6682\u505C`:`\u274C \u672A\u627E\u5230\u5B9A\u65F6\u4EFB\u52A1: ${d.id}`,msgType:"markdown"});return}case"resume":{const u=this.cronEngine.toggleJob(d.id,!0),D=await this.getOrCreateLogSession(o,r,s,l,n);D.sessionDir&&(this.appendSessionLog(D.sessionDir,"user",`/cron resume ${d.id}`),this.appendSessionLog(D.sessionDir,"assistant",u?`\u6062\u590D\u5B9A\u65F6\u4EFB\u52A1 ${d.id}`:`\u672A\u627E\u5230\u5B9A\u65F6\u4EFB\u52A1: ${d.id}`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:u?`\u25B6\uFE0F \u5B9A\u65F6\u4EFB\u52A1 **${d.id}** \u5DF2\u6062\u590D`:`\u274C \u672A\u627E\u5230\u5B9A\u65F6\u4EFB\u52A1: ${d.id}`,msgType:"markdown"});return}case"create_cron":{if(!(0,j.isValidCronExpression)(d.cronExpression)){await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u274C \u65E0\u6548\u7684cron\u8868\u8FBE\u5F0F: \`${d.cronExpression}\`
5
5
 
6
- \u{1F4A1} \u683C\u5F0F: \`\u5206 \u65F6 \u65E5 \u6708 \u5468\`\uFF0C\u5982 \`0 9 * * *\``,msgType:"markdown"});return}if(!this.hasNotifyCapability(i.conversationConfig)){await this.sendCronNoNotifyError(o,r);return}const f=this.cronEngine.addJob({conversationId:o,cronExpression:d.cronExpression,description:this.sanitizeLogContent(d.prompt.substring(0,50)),prompt:d.prompt,senderStaffId:s,senderNick:l}),D=await this.getOrCreateLogSession(o,r,s,l,n);D.sessionDir&&(this.appendSessionLog(D.sessionDir,"user",`/cron ${d.cronExpression} ${this.sanitizeLogContent(d.prompt)}`),this.appendSessionLog(D.sessionDir,"assistant",`\u521B\u5EFA\u5B9A\u65F6\u4EFB\u52A1: ${f.id} [${f.cronExpression}] ${f.description}`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:(0,j.formatCronJobInfo)(f),msgType:"markdown"});return}case"create_nl":{if(!this.hasNotifyCapability(i.conversationConfig)){await this.sendCronNoNotifyError(o,r);return}await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:"\u23F3 \u6B63\u5728\u5206\u6790\u5B9A\u65F6\u4EFB\u52A1\u63CF\u8FF0..."});const f=await this.cronEngine.analyzeAndCreate(o,d.input,s,l),D=await this.getOrCreateLogSession(o,r,s,l,n);f.job?(D.sessionDir&&(this.appendSessionLog(D.sessionDir,"user",`/cron ${this.sanitizeLogContent(d.input)}`),this.appendSessionLog(D.sessionDir,"assistant",`\u521B\u5EFA\u5B9A\u65F6\u4EFB\u52A1: ${f.job.id} [${f.job.cronExpression}] ${f.job.description}`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:(0,j.formatCronJobInfo)(f.job),msgType:"markdown"})):(D.sessionDir&&(this.appendSessionLog(D.sessionDir,"user",`/cron ${this.sanitizeLogContent(d.input)}`),this.appendSessionLog(D.sessionDir,"assistant",`\u5B9A\u65F6\u4EFB\u52A1\u5206\u6790\u5931\u8D25: ${f.error}`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u274C \u5B9A\u65F6\u4EFB\u52A1\u5206\u6790\u5931\u8D25: ${f.error}
6
+ \u{1F4A1} \u683C\u5F0F: \`\u5206 \u65F6 \u65E5 \u6708 \u5468\`\uFF0C\u5982 \`0 9 * * *\``,msgType:"markdown"});return}if(!this.hasNotifyCapability(i.conversationConfig)){await this.sendCronNoNotifyError(o,r);return}const u=this.cronEngine.addJob({conversationId:o,cronExpression:d.cronExpression,description:this.sanitizeLogContent(d.prompt.substring(0,50)),prompt:d.prompt,senderStaffId:s,senderNick:l}),D=await this.getOrCreateLogSession(o,r,s,l,n);D.sessionDir&&(this.appendSessionLog(D.sessionDir,"user",`/cron ${d.cronExpression} ${this.sanitizeLogContent(d.prompt)}`),this.appendSessionLog(D.sessionDir,"assistant",`\u521B\u5EFA\u5B9A\u65F6\u4EFB\u52A1: ${u.id} [${u.cronExpression}] ${u.description}`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:(0,j.formatCronJobInfo)(u),msgType:"markdown"});return}case"create_nl":{if(!this.hasNotifyCapability(i.conversationConfig)){await this.sendCronNoNotifyError(o,r);return}await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:"\u23F3 \u6B63\u5728\u5206\u6790\u5B9A\u65F6\u4EFB\u52A1\u63CF\u8FF0..."});const u=await this.cronEngine.analyzeAndCreate(o,d.input,s,l),D=await this.getOrCreateLogSession(o,r,s,l,n);u.job?(D.sessionDir&&(this.appendSessionLog(D.sessionDir,"user",`/cron ${this.sanitizeLogContent(d.input)}`),this.appendSessionLog(D.sessionDir,"assistant",`\u521B\u5EFA\u5B9A\u65F6\u4EFB\u52A1: ${u.job.id} [${u.job.cronExpression}] ${u.job.description}`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:(0,j.formatCronJobInfo)(u.job),msgType:"markdown"})):(D.sessionDir&&(this.appendSessionLog(D.sessionDir,"user",`/cron ${this.sanitizeLogContent(d.input)}`),this.appendSessionLog(D.sessionDir,"assistant",`\u5B9A\u65F6\u4EFB\u52A1\u5206\u6790\u5931\u8D25: ${u.error}`)),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u274C \u5B9A\u65F6\u4EFB\u52A1\u5206\u6790\u5931\u8D25: ${u.error}
7
7
 
8
8
  \u{1F4A1} \u4F60\u4E5F\u53EF\u4EE5\u76F4\u63A5\u6307\u5B9Acron\u8868\u8FBE\u5F0F: \`/cron 0 9 * * * \u4EFB\u52A1\u63CF\u8FF0\``,msgType:"markdown"}));return}}}async handleMenuCommand(d,i){const{conversationId:o,sessionWebhook:r,senderStaffId:s}=i;if((d.type==="add"||d.type==="del")&&d.isGlobal&&!this.isOwner(s)){await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:"\u274C \u5168\u5C40\u83DC\u5355\u4EC5 owner \u53EF\u7BA1\u7406",msgType:"markdown"});return}switch(d.type){case"show":{const l=(0,L.getMergedMenu)(this,o,s),n=(0,L.loadMenuData)(this).global.length;l.length>0&&(0,L.setPendingSelection)(o,s,r,l),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:(0,L.formatMenuDisplay)(l,n),msgType:"markdown"});return}case"add":{const l=(0,L.addMenuItem)(this,o,s,d.isGlobal,"",d.command);await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u2705 \u5DF2\u6DFB\u52A0${d.isGlobal?"\u5168\u5C40":"\u4E2A\u4EBA"}\u5FEB\u6377\u6307\u4EE4: **${l.label}** \u2192 \`${l.command}\``,msgType:"markdown"});return}case"del":{const l=(0,L.deleteMenuItem)(this,o,s,d.isGlobal,String(d.index));await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:l.success?`\u2705 \u5DF2\u5220\u9664${d.isGlobal?"\u5168\u5C40":"\u4E2A\u4EBA"}\u5FEB\u6377\u6307\u4EE4: **${l.deletedItem.label}**`:`\u26A0\uFE0F ${l.error}`,msgType:"markdown"});return}case"list":{await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:(0,L.formatMenuList)(this,o,s,d.isGlobal),msgType:"markdown"});return}case"trigger":{(0,L.setUserTrigger)(this,s,d.word),await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u2705 \u83DC\u5355\u89E6\u53D1\u8BCD\u5DF2\u8BBE\u7F6E\u4E3A \`${d.word}\`\uFF0C\u53D1\u9001\u8BE5\u8BCD\u5373\u53EF\u5524\u8D77\u83DC\u5355`,msgType:"markdown"});return}}}async handleTodoCommand(d,i){const{conversationId:o,sessionWebhook:r,senderStaffId:s,senderNick:l}=i;if(d.type==="mode"){(0,M.setIdMode)(this,o,d.mode);const n=d.mode==="staffId"?"\u5DE5\u53F7(staffId)":"\u9489\u9489ID(dingtalkId)";await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u2705 \u7528\u6237\u6807\u8BC6\u6A21\u5F0F\u5DF2\u5207\u6362\u4E3A: **${n}**
9
9
 
10
- \u65B0\u6DFB\u52A0\u7684\u5F85\u529E\u5C06\u4F7F\u7528\u6B64\u6A21\u5F0F\u8BB0\u5F55\u8D1F\u8D23\u4EBA`,msgType:"markdown"});return}if(d.type==="list"){const n=(0,M.getSortedTodoItems)(this,o),f=(0,M.getReminderHour)(this,o),k=(0,M.getIdMode)(this,o)==="staffId"?"\u5DE5\u53F7\u6A21\u5F0F":"\u9489\u9489ID\u6A21\u5F0F",y=(0,M.formatTodoList)(n,f),_=`\u{1F4CC} \u5F53\u524D\u6807\u8BC6\u6A21\u5F0F: **${k}**
10
+ \u65B0\u6DFB\u52A0\u7684\u5F85\u529E\u5C06\u4F7F\u7528\u6B64\u6A21\u5F0F\u8BB0\u5F55\u8D1F\u8D23\u4EBA`,msgType:"markdown"});return}if(d.type==="list"){const n=(0,M.getSortedTodoItems)(this,o),u=(0,M.getReminderHour)(this,o),I=(0,M.getIdMode)(this,o)==="staffId"?"\u5DE5\u53F7\u6A21\u5F0F":"\u9489\u9489ID\u6A21\u5F0F",f=(0,M.formatTodoList)(n,u),x=`\u{1F4CC} \u5F53\u524D\u6807\u8BC6\u6A21\u5F0F: **${I}**
11
11
 
12
- ${y}`;await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:_,msgType:"markdown"});return}if(d.type==="remind"){(0,M.setReminderHour)(this,o,d.hour);const n=d.hour===null?"\u23F0 \u6BCF\u65E5\u63D0\u9192\u5DF2\u5173\u95ED":`\u23F0 \u6BCF\u65E5\u63D0\u9192\u5DF2\u8BBE\u7F6E\u4E3A ${d.hour}:00`;await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:n});return}if(d.type==="done"){const n=(0,M.doneTodoItem)(this,o,d.index);n.success&&n.item?await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u2705 \u5DF2\u5B8C\u6210: ~~${n.item.content}~~ _@${n.item.assigneeNick}_`,msgType:"markdown"}):await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u274C ${n.error}`});return}if(d.type==="remove"){if(d.index==="all"){const n=(0,M.clearAllTodoItems)(this,o);n.success?await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u{1F5D1}\uFE0F \u5DF2\u6E05\u7A7A ${n.count} \u6761\u5F85\u529E`}):await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u274C ${n.error}`})}else{const n=(0,M.deleteTodoItem)(this,o,d.index);n.success&&n.item?await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u{1F5D1}\uFE0F \u5DF2\u5220\u9664: ~~${n.item.content}~~`,msgType:"markdown"}):await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u274C ${n.error}`})}return}if(d.type==="add"){const n=(0,M.getIdMode)(this,o),f=d.assigneeId||s,D=d.assigneeNick||l,k=d.deadline&&(0,M.parseDeadline)(d.deadline)||(0,M.getDefaultDeadline)(),y=(0,M.addTodoItem)(this,o,{content:d.content,assigneeStaffId:f,assigneeNick:D,deadline:k,assigneeIdType:n}),E=(0,M.getSortedTodoItems)(this,o).findIndex(F=>F.content===y.content&&F.createdAt===y.createdAt)+1,h=(0,M.formatTodoItemCreated)(y,E);await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:h,msgType:"markdown"});return}}sanitizeLogContent(d){return d.replace(/\n/g,"\\n").replace(/\r/g,"\\r")}sanitizeOutput(d){const i=d.replace(/\r\n/g,`
12
+ ${f}`;await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:x,msgType:"markdown"});return}if(d.type==="remind"){(0,M.setReminderHour)(this,o,d.hour);const n=d.hour===null?"\u23F0 \u6BCF\u65E5\u63D0\u9192\u5DF2\u5173\u95ED":`\u23F0 \u6BCF\u65E5\u63D0\u9192\u5DF2\u8BBE\u7F6E\u4E3A ${d.hour}:00`;await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:n});return}if(d.type==="done"){const n=(0,M.doneTodoItem)(this,o,d.index);n.success&&n.item?await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u2705 \u5DF2\u5B8C\u6210: ~~${n.item.content}~~ _@${n.item.assigneeNick}_`,msgType:"markdown"}):await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u274C ${n.error}`});return}if(d.type==="remove"){if(d.index==="all"){const n=(0,M.clearAllTodoItems)(this,o);n.success?await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u{1F5D1}\uFE0F \u5DF2\u6E05\u7A7A ${n.count} \u6761\u5F85\u529E`}):await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u274C ${n.error}`})}else{const n=(0,M.deleteTodoItem)(this,o,d.index);n.success&&n.item?await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u{1F5D1}\uFE0F \u5DF2\u5220\u9664: ~~${n.item.content}~~`,msgType:"markdown"}):await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:`\u274C ${n.error}`})}return}if(d.type==="add"){const n=(0,M.getIdMode)(this,o),u=d.assigneeId||s,D=d.assigneeNick||l,I=d.deadline&&(0,M.parseDeadline)(d.deadline)||(0,M.getDefaultDeadline)(),f=(0,M.addTodoItem)(this,o,{content:d.content,assigneeStaffId:u,assigneeNick:D,deadline:I,assigneeIdType:n}),_=(0,M.getSortedTodoItems)(this,o).findIndex(F=>F.content===f.content&&F.createdAt===f.createdAt)+1,h=(0,M.formatTodoItemCreated)(f,_);await this.sendDingMessage({conversationId:o,sessionWebhook:r,content:h,msgType:"markdown"});return}}sanitizeLogContent(d){return d.replace(/\n/g,"\\n").replace(/\r/g,"\\r")}sanitizeOutput(d){const i=d.replace(/\r\n/g,`
13
13
  `),o=8e3;return i.length>o?i.substring(0,o)+`
14
- ...(\u8F93\u51FA\u5DF2\u622A\u65AD)`:i}truncateMsg(d,i=100){const o=d.replace(/\n/g," ").trim();return o.length>i?o.slice(0,i)+"...":o}async getOrCreateLogSession(d,i,o,r,s,l=!1){const n=this.findActiveSession(d);if(n)return{sessionDir:this.getSessionDir(n.session.session),isNew:!1};if(l)return{sessionDir:null,isNew:!1};const f=Date.now(),D={conversationId:d,sessionWebhook:i,startTime:f,startTimeStr:Q.dateUtil.mm(f).format("YYYY-MM-DD-HH-mm-ss"),startStaffId:o,startNickName:`[cron]${r}`},k=this.getSessionDir(D);return C.default.mkdirSync(k,{recursive:!0}),C.default.writeFileSync(`${k}/session.json`,JSON.stringify(D,null,2),"utf-8"),C.default.appendFileSync(`${k}/session.log`,`[${(0,c.timestamp)()}] [SYSTEM]: \u521B\u5EFA\u4F1A\u8BDD\u7528\u4E8E\u8BB0\u5F55 /cron \u547D\u4EE4\u64CD\u4F5C
15
- `,"utf-8"),{sessionDir:k,isNew:!0}}hasNotifyCapability(d){return!!(d.dingToken||this.config.defaultDingToken)}async sendCronNoNotifyError(d,i){await this.sendDingMessage({conversationId:d,sessionWebhook:i,content:"\u274C \u5F53\u524D\u7FA4\u672A\u914D\u7F6E dingToken \u4E14\u65E0\u5BA2\u6237\u7AEF\u7EA7 defaultDingToken, \u5B9A\u65F6\u4EFB\u52A1\u65E0\u6CD5\u4E3B\u52A8\u53D1\u9001\u6D88\u606F, \u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u914D\u7F6E",msgType:"markdown"})}async botMsgGetCallback(d){this.dingStreamClient.socketCallBackResponse(d.headers.messageId,"");const i=JSON.parse(d.data),{senderNick:o,senderStaffId:r,conversationId:s,conversationTitle:l,sessionWebhook:n,msgtype:f,conversationType:D}=i,k=i.text?.content?.trim()??"";if(this.debugLog(`\u6536\u5230\u6D88\u606F: \u7FA4=${l}(${s}), \u53D1\u9001\u8005=${o}(${r}), \u7C7B\u578B=${f}, \u5185\u5BB9=${k.substring(0,50)}`),!this.authCheck(r,s)){await this.handleAuthRequest({senderStaffId:r,senderNick:o,conversationId:s,conversationType:D,conversationTitle:i.conversationTitle,sessionWebhook:n});return}const y=this.getConversationConfig(s),_=(0,$.parseRecorderCommandEnhanced)(k);if(_!==null){if(!this.isOwner(r)||D!=="1"){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u274C Recorder \u6A21\u5F0F\u4EC5\u9650 owner \u5355\u804A\u4F7F\u7528",msgType:"markdown"});return}if(_==="on"){this.recorderModeConversations.add(s);const e=(0,V.getRecorderDir)(this,s);console.log(`[${(0,c.timestamp)()}] [recorder] \u5F00\u542F recorder \u6A21\u5F0F: conversationId=${s}, dir=${e}`),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F534} Recorder \u6A21\u5F0F\u5DF2\u5F00\u542F
14
+ ...(\u8F93\u51FA\u5DF2\u622A\u65AD)`:i}truncateMsg(d,i=100){const o=d.replace(/\n/g," ").trim();return o.length>i?o.slice(0,i)+"...":o}async getOrCreateLogSession(d,i,o,r,s,l=!1){const n=this.findActiveSession(d);if(n)return{sessionDir:this.getSessionDir(n.session.session),isNew:!1};if(l)return{sessionDir:null,isNew:!1};const u=Date.now(),D={conversationId:d,sessionWebhook:i,startTime:u,startTimeStr:J.dateUtil.mm(u).format("YYYY-MM-DD-HH-mm-ss"),startStaffId:o,startNickName:`[cron]${r}`},I=this.getSessionDir(D);return k.default.mkdirSync(I,{recursive:!0}),k.default.writeFileSync(`${I}/session.json`,JSON.stringify(D,null,2),"utf-8"),k.default.appendFileSync(`${I}/session.log`,`[${(0,c.timestamp)()}] [SYSTEM]: \u521B\u5EFA\u4F1A\u8BDD\u7528\u4E8E\u8BB0\u5F55 /cron \u547D\u4EE4\u64CD\u4F5C
15
+ `,"utf-8"),{sessionDir:I,isNew:!0}}hasNotifyCapability(d){return!!(d.dingToken||this.config.defaultDingToken)}async sendCronNoNotifyError(d,i){await this.sendDingMessage({conversationId:d,sessionWebhook:i,content:"\u274C \u5F53\u524D\u7FA4\u672A\u914D\u7F6E dingToken \u4E14\u65E0\u5BA2\u6237\u7AEF\u7EA7 defaultDingToken, \u5B9A\u65F6\u4EFB\u52A1\u65E0\u6CD5\u4E3B\u52A8\u53D1\u9001\u6D88\u606F, \u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u914D\u7F6E",msgType:"markdown"})}async botMsgGetCallback(d){this.dingStreamClient.socketCallBackResponse(d.headers.messageId,"");const i=JSON.parse(d.data),{senderNick:o,senderStaffId:r,conversationId:s,conversationTitle:l,sessionWebhook:n,msgtype:u,conversationType:D}=i,I=i.text?.content?.trim()??"";if(this.debugLog(`\u6536\u5230\u6D88\u606F: \u7FA4=${l}(${s}), \u53D1\u9001\u8005=${o}(${r}), \u7C7B\u578B=${u}, \u5185\u5BB9=${I.substring(0,50)}`),!this.authCheck(r,s)){await this.handleAuthRequest({senderStaffId:r,senderNick:o,conversationId:s,conversationType:D,conversationTitle:i.conversationTitle,sessionWebhook:n});return}const f=this.getConversationConfig(s),x=(0,C.parseRecorderCommandEnhanced)(I);if(x!==null){if(!this.isOwner(r)||D!=="1"){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u274C Recorder \u6A21\u5F0F\u4EC5\u9650 owner \u5355\u804A\u4F7F\u7528",msgType:"markdown"});return}if(x==="on"){this.recorderModeConversations.add(s);const e=(0,V.getRecorderDir)(this,s);console.log(`[${(0,c.timestamp)()}] [recorder] \u5F00\u542F recorder \u6A21\u5F0F: conversationId=${s}, dir=${e}`),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F534} Recorder \u6A21\u5F0F\u5DF2\u5F00\u542F
16
16
  - \u6240\u6709\u6D88\u606F\u5C06\u88AB\u5206\u7C7B\u8BB0\u5F55\u5230\u672C\u5730
17
17
  - \u4FDD\u5B58\u76EE\u5F55: \`${e}\`
18
- - \u53D1\u9001 \`/recorder exit\` \u5173\u95ED`,msgType:"markdown"})}else this.recorderModeConversations.delete(s),console.log(`[${(0,c.timestamp)()}] [recorder] \u5173\u95ED recorder \u6A21\u5F0F: conversationId=${s}`),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2B1C Recorder \u6A21\u5F0F\u5DF2\u5173\u95ED\uFF0C\u6062\u590D\u6B63\u5E38\u5904\u7406",msgType:"markdown"});return}const E=this.pendingFreedomConvs.get(s);if(E&&Date.now()-E<6e4){const e=k.trim().toLowerCase();if(e==="\u786E\u8BA4"||e==="confirm"){this.pendingFreedomConvs.delete(s);const a=this.getConversationConfig(s);a&&(a.freedomMode=!0,(0,S.saveClientConfig)(this)),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u81EA\u7531\u6A21\u5F0F\u5DF2\u5F00\u542F
19
- \u{1F4A1} \u6240\u6709\u7FA4\u6210\u5458\u73B0\u5728\u5747\u53EF\u4F7F\u7528\u673A\u5668\u4EBA`,msgType:"markdown"});return}}else E&&Date.now()-E>=6e4&&this.pendingFreedomConvs.delete(s);if(this.recorderModeConversations.has(s)){try{await(0,V.recordMessage)(this,i,s),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u8BB0\u5F55 ${f}`})}catch(e){console.error(`[${(0,c.timestamp)()}] [recorder] \u8BB0\u5F55\u6D88\u606F\u5931\u8D25:`,e),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u274C \u8BB0\u5F55\u5931\u8D25: ${e instanceof Error?e.message:String(e)}`})}return}let h;if(f==="picture"&&i.pictureDownloadCode){const e=this.getConversationDir(s),a=y?.useLocalOcr!==!1,t=await(0,O.processPictureMessage)(this,i.pictureDownloadCode,i.robotCode,e,a,k||void 0);if(!t){await this.sendDingMessage({conversationId:s,sessionWebhook:n,atUserId:r,content:"\u26A0\uFE0F \u56FE\u7247\u4E0B\u8F7D\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u6216\u4F7F\u7528\u6587\u5B57\u63CF\u8FF0"});return}h=t}else if(f==="richText"&&i.content?.richText){const e=this.getConversationDir(s),a=y?.useLocalOcr!==!1;h=await(0,O.processRichTextMessage)(this,i.content.richText,i.robotCode,e,a)}else if(f==="file"){const e=(0,O.extractDownloadCode)(i);if(e){const a=this.getConversationDir(s),t=await(0,O.processFileMessage)(this,e,i.robotCode,a,k||void 0);if(!t){await this.sendDingMessage({conversationId:s,sessionWebhook:n,atUserId:r,content:"\u26A0\uFE0F \u6587\u4EF6\u4E0B\u8F7D\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"});return}h=t}else{await this.sendDingMessage({conversationId:s,sessionWebhook:n,atUserId:r,content:"\u26A0\uFE0F \u65E0\u6CD5\u83B7\u53D6\u6587\u4EF6\u4E0B\u8F7D\u94FE\u63A5\uFF0C\u8BF7\u91CD\u65B0\u53D1\u9001"});return}}else{if(h=k,!h){const e=this.getConversationDir(s),a=y?.useLocalOcr!==!1,t=(0,P.extractQuoteInfo)(i);t&&(this.debugLog(`\u68C0\u6D4B\u5230\u5F15\u7528\u6D88\u606F(\u65E0\u6B63\u6587): quoteMessageId=${t.quoteMessageId}`),await(0,P.enrichQuoteInfo)(this,t,i,e,a),t.quoteText&&(h=(0,P.formatPromptWithQuote)("",t)))}if(!h)return}if(!h.startsWith("/")&&f==="text"&&k){const e=this.getConversationDir(s),a=y?.useLocalOcr!==!1,t=(0,P.extractQuoteInfo)(i);t&&(this.debugLog(`\u68C0\u6D4B\u5230\u5F15\u7528\u6D88\u606F: quoteMessageId=${t.quoteMessageId}`),await(0,P.enrichQuoteInfo)(this,t,i,e,a),t.quoteText&&(h=(0,P.formatPromptWithQuote)(h,t)))}if(f==="text"&&h&&!h.startsWith("/")){if(h.toLowerCase()===(0,L.getUserTrigger)(this,r).toLowerCase())h="/menu";else if(/^\d+$/.test(h)&&(0,L.hasPendingSelection)(s,r)){const e=(0,L.getPendingSelection)(s,r);(0,L.clearPendingSelection)(s,r);const a=parseInt(h,10);if(a<1||a>e.mergedItems.length){await this.sendDingMessage({conversationId:s,sessionWebhook:n,atUserId:r,content:`\u26A0\uFE0F \u5E8F\u53F7\u65E0\u6548\uFF0C\u83DC\u5355\u5171 ${e.mergedItems.length} \u9879`});return}const t=e.mergedItems[a-1];console.log(`[${(0,c.timestamp)()}] [menu] ${o} \u9009\u62E9\u5FEB\u6377\u6307\u4EE4: ${t.label} \u2192 ${t.command}`),h=t.command}}const F=[(0,I.route)("/cfg",()=>(0,$.parseCfgCommand)(h),async e=>{if(e.conversationId&&!this.isOwner(r)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u274C \u53EA\u6709\u673A\u5668\u4EBA owner \u624D\u80FD\u64CD\u4F5C\u5176\u4ED6\u7FA4\u7684\u914D\u7F6E",msgType:"markdown"});return}if(!await this.requireOwnerOrSingleChat(s,n,r,y))return;const a=e.conversationId||s,t=a!==s,g=t?this.config.conversations.find(v=>v.conversationId===a):y,p=!!(e.dingToken||e.linkConversationId||e.whiteUserList&&e.whiteUserList.length>0||e.conversationTitle||e.atSender!==void 0||e.receiveReply!==void 0||e.preBash!==void 0||e.permissionMode!==void 0);if(g&&p){if(e.conversationTitle&&(g.conversationTitle=e.conversationTitle),D&&!t&&(g.conversationType=D),e.dingToken&&(g.dingToken=e.dingToken),e.linkConversationId&&(g.linkConversationId=e.linkConversationId),e.atSender!==void 0&&(g.atSender=e.atSender),e.receiveReply!==void 0&&(g.receiveReply=e.receiveReply),e.preBash!==void 0&&(g.preBash=e.preBash),e.permissionMode!==void 0&&(g.permissionMode=e.permissionMode),e.whiteUserList&&e.whiteUserList.length>0){g.whiteUserList=e.whiteUserList;for(const v of e.whiteUserList)(0,c.isMobile)(v)&&await(0,c.resolveUserId)(this,v)}(0,S.saveClientConfig)(this),console.log(`[${(0,c.timestamp)()}] \u5237\u65B0\u7FA4\u914D\u7F6E: ${g.conversationTitle||a}(${a})`)}else if(!g){const v={conversationId:a,conversationType:t?"1":D,conversationTitle:e.conversationTitle||(t?"":l)};if(e.dingToken&&(v.dingToken=e.dingToken),e.linkConversationId&&(v.linkConversationId=e.linkConversationId),e.atSender!==void 0&&(v.atSender=e.atSender),e.receiveReply!==void 0&&(v.receiveReply=e.receiveReply),e.preBash!==void 0&&(v.preBash=e.preBash),e.permissionMode!==void 0&&(v.permissionMode=e.permissionMode),e.whiteUserList&&e.whiteUserList.length>0){v.whiteUserList=e.whiteUserList;for(const w of e.whiteUserList)(0,c.isMobile)(w)&&await(0,c.resolveUserId)(this,w)}this.config.conversations.push(v),(0,S.saveClientConfig)(this),console.log(`[${(0,c.timestamp)()}] \u6CE8\u518C\u65B0\u7FA4: ${v.conversationTitle||a}(${a}) \u7C7B\u578B=${v.conversationType||"-"}`)}const u=this.getConversationDir(a);C.default.existsSync(u)||(C.default.mkdirSync(u,{recursive:!0}),console.log(`[${(0,c.timestamp)()}] \u521B\u5EFA\u5DE5\u4F5C\u76EE\u5F55: ${u}`));const m=g||this.getConversationConfig(a),T=[g?"\u2705 \u7FA4\u914D\u7F6E\u5DF2\u5237\u65B0":"\u2705 \u7FA4\u5DF2\u6CE8\u518C",`- **\u7FA4\u540D\u79F0:** ${m?.conversationTitle||a}`,`- **\u7FA4ID:** ${a}`];if(m?.conversationType&&T.push(`- **\u4F1A\u8BDD\u7C7B\u578B:** ${m.conversationType==="1"?"\u5355\u804A":m.conversationType==="2"?"\u7FA4\u804A":m.conversationType}`),m?.dingToken?T.push(`- **dingToken:** ${m.dingToken.substring(0,8)}...`):T.push("- **dingToken:** (\u672A\u6307\u5B9A, \u4F7F\u7528 defaultDingToken)"),m?.linkConversationId&&T.push(`- **linkConversationId:** ${m.linkConversationId}`),m?.atSender===!1&&T.push("- **atSender:** false (\u4E0D @ \u53D1\u9001\u4EBA)"),m?.receiveReply===!1&&T.push("- **receiveReply:** false (\u4E0D\u56DE\u590D\u786E\u8BA4\u6D88\u606F)"),m?.permissionMode&&T.push(`- **permissionMode:** ${m.permissionMode}`),m?.whiteUserList?.length){const v=m.whiteUserList.map(w=>(0,c.isMobile)(w)?w:(0,c.userIdToPhone)(this,w)||w).join(", ");T.push(`- **whiteUserList:** ${v}`)}T.push(`- **\u5DE5\u4F5C\u76EE\u5F55:** ${u}`),T.push(`
18
+ - \u53D1\u9001 \`/recorder exit\` \u5173\u95ED`,msgType:"markdown"})}else this.recorderModeConversations.delete(s),console.log(`[${(0,c.timestamp)()}] [recorder] \u5173\u95ED recorder \u6A21\u5F0F: conversationId=${s}`),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2B1C Recorder \u6A21\u5F0F\u5DF2\u5173\u95ED\uFF0C\u6062\u590D\u6B63\u5E38\u5904\u7406",msgType:"markdown"});return}const _=this.pendingFreedomConvs.get(s);if(_&&Date.now()-_<6e4){const e=I.trim().toLowerCase();if(e==="\u786E\u8BA4"||e==="confirm"){this.pendingFreedomConvs.delete(s);const a=this.getConversationConfig(s);a&&(a.freedomMode=!0,(0,S.saveClientConfig)(this)),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u81EA\u7531\u6A21\u5F0F\u5DF2\u5F00\u542F
19
+ \u{1F4A1} \u6240\u6709\u7FA4\u6210\u5458\u73B0\u5728\u5747\u53EF\u4F7F\u7528\u673A\u5668\u4EBA`,msgType:"markdown"});return}}else _&&Date.now()-_>=6e4&&this.pendingFreedomConvs.delete(s);if(this.recorderModeConversations.has(s)){try{await(0,V.recordMessage)(this,i,s),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u8BB0\u5F55 ${u}`})}catch(e){console.error(`[${(0,c.timestamp)()}] [recorder] \u8BB0\u5F55\u6D88\u606F\u5931\u8D25:`,e),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u274C \u8BB0\u5F55\u5931\u8D25: ${e instanceof Error?e.message:String(e)}`})}return}let h;if(u==="picture"&&i.pictureDownloadCode){const e=this.getConversationDir(s),a=f?.useLocalOcr!==!1,t=await(0,W.processPictureMessage)(this,i.pictureDownloadCode,i.robotCode,e,a,I||void 0);if(!t){await this.sendDingMessage({conversationId:s,sessionWebhook:n,atUserId:r,content:"\u26A0\uFE0F \u56FE\u7247\u4E0B\u8F7D\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u6216\u4F7F\u7528\u6587\u5B57\u63CF\u8FF0"});return}h=t}else if(u==="richText"&&i.content?.richText){const e=this.getConversationDir(s),a=f?.useLocalOcr!==!1;h=await(0,W.processRichTextMessage)(this,i.content.richText,i.robotCode,e,a)}else if(u==="file"){const e=(0,W.extractDownloadCode)(i);if(e){const a=this.getConversationDir(s),t=await(0,W.processFileMessage)(this,e,i.robotCode,a,I||void 0);if(!t){await this.sendDingMessage({conversationId:s,sessionWebhook:n,atUserId:r,content:"\u26A0\uFE0F \u6587\u4EF6\u4E0B\u8F7D\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"});return}h=t}else{await this.sendDingMessage({conversationId:s,sessionWebhook:n,atUserId:r,content:"\u26A0\uFE0F \u65E0\u6CD5\u83B7\u53D6\u6587\u4EF6\u4E0B\u8F7D\u94FE\u63A5\uFF0C\u8BF7\u91CD\u65B0\u53D1\u9001"});return}}else{if(h=I,!h){const e=this.getConversationDir(s),a=f?.useLocalOcr!==!1,t=(0,E.extractQuoteInfo)(i);t&&(this.debugLog(`\u68C0\u6D4B\u5230\u5F15\u7528\u6D88\u606F(\u65E0\u6B63\u6587): quoteMessageId=${t.quoteMessageId}`),await(0,E.enrichQuoteInfo)(this,t,i,e,a),t.quoteText&&(h=(0,E.formatPromptWithQuote)("",t)))}if(!h)return}if(!h.startsWith("/")&&u==="text"&&I){const e=this.getConversationDir(s),a=f?.useLocalOcr!==!1,t=(0,E.extractQuoteInfo)(i);t&&(this.debugLog(`\u68C0\u6D4B\u5230\u5F15\u7528\u6D88\u606F: quoteMessageId=${t.quoteMessageId}`),await(0,E.enrichQuoteInfo)(this,t,i,e,a),t.quoteText&&(h=(0,E.formatPromptWithQuote)(h,t)))}if(u==="text"&&h&&!h.startsWith("/")){if(h.toLowerCase()===(0,L.getUserTrigger)(this,r).toLowerCase())h="/menu";else if(/^\d+$/.test(h)&&(0,L.hasPendingSelection)(s,r)){const e=(0,L.getPendingSelection)(s,r);(0,L.clearPendingSelection)(s,r);const a=parseInt(h,10);if(a<1||a>e.mergedItems.length){await this.sendDingMessage({conversationId:s,sessionWebhook:n,atUserId:r,content:`\u26A0\uFE0F \u5E8F\u53F7\u65E0\u6548\uFF0C\u83DC\u5355\u5171 ${e.mergedItems.length} \u9879`});return}const t=e.mergedItems[a-1];console.log(`[${(0,c.timestamp)()}] [menu] ${o} \u9009\u62E9\u5FEB\u6377\u6307\u4EE4: ${t.label} \u2192 ${t.command}`),h=t.command}}const F=[(0,$.route)("/cfg",()=>(0,C.parseCfgCommand)(h),async e=>{if(e.conversationId&&!this.isOwner(r)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u274C \u53EA\u6709\u673A\u5668\u4EBA owner \u624D\u80FD\u64CD\u4F5C\u5176\u4ED6\u7FA4\u7684\u914D\u7F6E",msgType:"markdown"});return}if(!await this.requireOwnerOrSingleChat(s,n,r,f))return;const a=e.conversationId||s,t=a!==s,g=t?this.config.conversations.find(v=>v.conversationId===a):f,w=!!(e.dingToken||e.linkConversationId||e.whiteUserList&&e.whiteUserList.length>0||e.conversationTitle||e.atSender!==void 0||e.receiveReply!==void 0||e.preBash!==void 0||e.permissionMode!==void 0||e.qaGitRepos?.length||e.qaDocs?.length||e.qaAutoPull!==void 0);if(g&&w){if(e.conversationTitle&&(g.conversationTitle=e.conversationTitle),D&&!t&&(g.conversationType=D),e.dingToken&&(g.dingToken=e.dingToken),e.linkConversationId&&(g.linkConversationId=e.linkConversationId),e.atSender!==void 0&&(g.atSender=e.atSender),e.receiveReply!==void 0&&(g.receiveReply=e.receiveReply),e.preBash!==void 0&&(g.preBash=e.preBash),e.permissionMode!==void 0&&(g.permissionMode=e.permissionMode),(e.qaGitRepos?.length||e.qaDocs?.length||e.qaAutoPull!==void 0)&&(g.qaCfg||(g.qaCfg={}),e.qaGitRepos?.length&&(g.qaCfg.gitRepos=e.qaGitRepos),e.qaDocs?.length&&(g.qaCfg.docs=e.qaDocs),e.qaAutoPull!==void 0&&(g.qaCfg.autoPull=e.qaAutoPull)),e.whiteUserList&&e.whiteUserList.length>0){g.whiteUserList=e.whiteUserList;for(const v of e.whiteUserList)(0,c.isMobile)(v)&&await(0,c.resolveUserId)(this,v)}(0,S.saveClientConfig)(this),console.log(`[${(0,c.timestamp)()}] \u5237\u65B0\u7FA4\u914D\u7F6E: ${g.conversationTitle||a}(${a})`)}else if(!g){const v={conversationId:a,conversationType:t?"1":D,conversationTitle:e.conversationTitle||(t?"":l)};if(e.dingToken&&(v.dingToken=e.dingToken),e.linkConversationId&&(v.linkConversationId=e.linkConversationId),e.atSender!==void 0&&(v.atSender=e.atSender),e.receiveReply!==void 0&&(v.receiveReply=e.receiveReply),e.preBash!==void 0&&(v.preBash=e.preBash),e.permissionMode!==void 0&&(v.permissionMode=e.permissionMode),(e.qaGitRepos?.length||e.qaDocs?.length||e.qaAutoPull!==void 0)&&(v.qaCfg={},e.qaGitRepos?.length&&(v.qaCfg.gitRepos=e.qaGitRepos),e.qaDocs?.length&&(v.qaCfg.docs=e.qaDocs),e.qaAutoPull!==void 0&&(v.qaCfg.autoPull=e.qaAutoPull)),e.whiteUserList&&e.whiteUserList.length>0){v.whiteUserList=e.whiteUserList;for(const y of e.whiteUserList)(0,c.isMobile)(y)&&await(0,c.resolveUserId)(this,y)}this.config.conversations.push(v),(0,S.saveClientConfig)(this),console.log(`[${(0,c.timestamp)()}] \u6CE8\u518C\u65B0\u7FA4: ${v.conversationTitle||a}(${a}) \u7C7B\u578B=${v.conversationType||"-"}`)}const m=this.getConversationDir(a);k.default.existsSync(m)||(k.default.mkdirSync(m,{recursive:!0}),console.log(`[${(0,c.timestamp)()}] \u521B\u5EFA\u5DE5\u4F5C\u76EE\u5F55: ${m}`));const p=g||this.getConversationConfig(a),T=[g?"\u2705 \u7FA4\u914D\u7F6E\u5DF2\u5237\u65B0":"\u2705 \u7FA4\u5DF2\u6CE8\u518C",`- **\u7FA4\u540D\u79F0:** ${p?.conversationTitle||a}`,`- **\u7FA4ID:** ${a}`];if(p?.conversationType&&T.push(`- **\u4F1A\u8BDD\u7C7B\u578B:** ${p.conversationType==="1"?"\u5355\u804A":p.conversationType==="2"?"\u7FA4\u804A":p.conversationType}`),p?.dingToken?T.push(`- **dingToken:** ${p.dingToken.substring(0,8)}...`):T.push("- **dingToken:** (\u672A\u6307\u5B9A, \u4F7F\u7528 defaultDingToken)"),p?.linkConversationId&&T.push(`- **linkConversationId:** ${p.linkConversationId}`),p?.atSender===!1&&T.push("- **atSender:** false (\u4E0D @ \u53D1\u9001\u4EBA)"),p?.receiveReply===!1&&T.push("- **receiveReply:** false (\u4E0D\u56DE\u590D\u786E\u8BA4\u6D88\u606F)"),p?.permissionMode&&T.push(`- **permissionMode:** ${p.permissionMode}`),p?.whiteUserList?.length){const v=p.whiteUserList.map(y=>(0,c.isMobile)(y)?y:(0,c.userIdToPhone)(this,y)||y).join(", ");T.push(`- **whiteUserList:** ${v}`)}T.push(`- **\u5DE5\u4F5C\u76EE\u5F55:** ${m}`),T.push(`
20
20
  \u{1F4A1} \u53EF\u7F16\u8F91 config.json \u8865\u5145\u66F4\u591A\u914D\u7F6E`),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:T.join(`
21
- `),msgType:"markdown"})}),(0,I.route)("/help",()=>(0,$.parseHelpCommand)(h),async()=>{await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:(0,$.formatHelpOverview)(J,this.isOwner(r)),msgType:"markdown"})}),(0,I.route)("/version",()=>(0,$.parseVersionCommand)(h),async()=>{let e="\u672A\u5B89\u88C5";try{const{stdout:t}=await new Promise((g,p)=>{(0,B.exec)("claude --version",{timeout:5e3},(u,m,T)=>{u?p(u):g({stdout:m})})});e=t.trim()||"\u672A\u77E5"}catch{}const a=["### \u{1F4E6} cc-ding \u7248\u672C\u4FE1\u606F","",`- **cc-ding:** ${J}`,`- **claude:** ${e}`,`- **os:** ${G.default.platform()} ${G.default.release()}`,`- **node:** ${process.version}`].join(`
22
- `);await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:a,msgType:"markdown"})}),(0,I.route)("cmd-help",()=>(0,$.parseCommandHelp)(h),async e=>{const a=(0,$.getCommandByName)(e);a?await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:(0,$.formatCommandHelp)(a),msgType:"markdown"}):await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u274C \u672A\u627E\u5230\u547D\u4EE4: **${e}**
21
+ `),msgType:"markdown"})}),(0,$.route)("/help",()=>(0,C.parseHelpCommand)(h),async()=>{await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:(0,C.formatHelpOverview)(Q,this.isOwner(r)),msgType:"markdown"})}),(0,$.route)("/version",()=>(0,C.parseVersionCommand)(h),async()=>{let e="\u672A\u5B89\u88C5";try{const{stdout:t}=await new Promise((g,w)=>{(0,G.exec)("claude --version",{timeout:5e3},(m,p,T)=>{m?w(m):g({stdout:p})})});e=t.trim()||"\u672A\u77E5"}catch{}const a=["### \u{1F4E6} cc-ding \u7248\u672C\u4FE1\u606F","",`- **cc-ding:** ${Q}`,`- **claude:** ${e}`,`- **os:** ${z.default.platform()} ${z.default.release()}`,`- **node:** ${process.version}`].join(`
22
+ `);await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:a,msgType:"markdown"})}),(0,$.route)("cmd-help",()=>(0,C.parseCommandHelp)(h),async e=>{const a=(0,C.getCommandByName)(e);a?await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:(0,C.formatCommandHelp)(a),msgType:"markdown"}):await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u274C \u672A\u627E\u5230\u547D\u4EE4: **${e}**
23
23
 
24
- \u{1F4A1} \u8F93\u5165 \`/help\` \u67E5\u770B\u6240\u6709\u53EF\u7528\u547D\u4EE4`,msgType:"markdown"})}),(0,I.route)("/reboot",()=>(0,$.parseRebootCommand)(h),async e=>{if(!await this.requireOwnerOrAdmin(s,n,r))return;if(e.tag&&!/^[\w.\-]+$/.test(e.tag)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u274C \u65E0\u6548\u7684 tag\uFF0C\u4EC5\u5141\u8BB8\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u70B9\u3001\u6A2A\u7EBF\u548C\u4E0B\u5212\u7EBF",msgType:"markdown"});return}const a=e.tag?`@${e.tag}`:"@latest",t=e.update?`npm install -g cc-ding${a}`:null,g=`cc-ding-${this.clientId}`;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:t?`\u2705 \u66F4\u65B0\u5E76\u91CD\u542F\uFF0C\u6B63\u5728\u6267\u884C ${t}...`:"\u2705 cc-ding \u6B63\u5728\u91CD\u542F\u4E2D...",msgType:"markdown"});const p=R.default.join(this.getClientDir(),".reboot_pending");C.default.writeFileSync(p,JSON.stringify({conversationId:s,senderStaffId:r,sessionWebhook:n,update:e.update}),"utf-8"),setTimeout(()=>{console.log(`[${(0,c.timestamp)()}] \u6267\u884C pm2 restart ${g}${t?" (\u542B\u66F4\u65B0)":""}`),(0,B.exec)(`${t?`${t} && `:""}pm2 restart "${g}"`,{timeout:6e4},u=>{u&&console.error(`[${(0,c.timestamp)()}] pm2 restart \u5931\u8D25:`,u)})},1e3)})];for(const e of F)if(await e.tryHandle())return;if(!y){console.log(`\u672A\u6CE8\u518C\u7684\u673A\u5668\u4EBA,\u7FA4:${l},${s}`),this.isOwner(r)?await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u8BE5\u7FA4\u672A\u6CE8\u518C\uFF0C\u8BF7\u5148\u4F7F\u7528 `/cfg` \u547D\u4EE4\u6CE8\u518C",msgType:"markdown"}):await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u62B1\u6B49,\u8BE5\u7FA4\u7684\u673A\u5668\u4EBA\u672A\u5728\u670D\u52A1\u7AEF\u6CE8\u518C,\u8BF7\u8054\u7CFB\u5E94\u7528\u673A\u5668\u4EBAowner\u6CE8\u518C(${s})...`});return}const Y=[(0,I.route)("/destroy",()=>(0,$.parseDestroyCommand)(h),async e=>{if(!await this.requireOwnerOrSingleChat(s,n,r,y))return;const a=e.conversationId||s;if(a!==s&&!this.isOwner(r)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u274C \u53EA\u6709 owner \u624D\u80FD\u64CD\u4F5C\u5176\u4ED6\u7FA4\u7684\u914D\u7F6E",msgType:"markdown"});return}const g=this.config.conversations.findIndex(A=>A.conversationId===a);if(g<0){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u8BE5\u7FA4\u672A\u5728\u914D\u7F6E\u4E2D\u6CE8\u518C\uFF0C\u65E0\u9700\u6CE8\u9500",msgType:"markdown"});return}const u=this.config.conversations[g].conversationTitle||a;this.config.conversations.splice(g,1);const m=this.getConversationDir(a);let T=!1;try{C.default.existsSync(m)&&(C.default.rmSync(m,{recursive:!0,force:!0}),T=!0)}catch(A){console.error(`[${(0,c.timestamp)()}] \u5220\u9664\u5DE5\u4F5C\u76EE\u5F55\u5931\u8D25:`,A)}const v=this.activeSessions.get(a);if(v?.currentProcess)try{v.currentProcess.kill("SIGTERM")}catch{}this.activeSessions.delete(a),this.recorderModeConversations.delete(a),(0,S.saveClientConfig)(this),console.log(`[${(0,c.timestamp)()}] \u5DF2\u6CE8\u9500\u7FA4: ${u}(${a})`);const w=["\u2705 \u7FA4\u673A\u5668\u4EBA\u5DF2\u6CE8\u9500",`- **\u7FA4\u540D\u79F0:** ${u}`,`- **\u7FA4ID:** ${a}`];T?w.push("- **\u5DE5\u4F5C\u76EE\u5F55:** \u5DF2\u5220\u9664"):w.push("- **\u5DE5\u4F5C\u76EE\u5F55:** (\u4E0D\u5B58\u5728\u6216\u65E0\u6CD5\u5220\u9664)"),v&&w.push("- **\u6D3B\u8DC3\u4F1A\u8BDD:** \u5DF2\u6E05\u9664"),w.push(`
25
- \u26A0\uFE0F \u8BE5\u7FA4\u4E0B\u6B21\u53D1\u9001\u6D88\u606F\u65F6\u5C06\u6536\u5230"\u672A\u6CE8\u518C"\u63D0\u793A`),w.push("\u{1F4A1} \u5982\u9700\u91CD\u65B0\u6CE8\u518C\uFF0C\u8BF7\u4F7F\u7528 `/cfg` \u547D\u4EE4"),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:w.join(`
26
- `),msgType:"markdown"})}),(0,I.route)("/freedom",()=>(0,$.parseFreedomCommand)(h),async e=>{if(await this.requireOwnerOrSingleChat(s,n,r,y)){if(e.action==="enter"){if(y?.freedomMode){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2139\uFE0F \u5F53\u524D\u5DF2\u5904\u4E8E\u81EA\u7531\u6A21\u5F0F",msgType:"markdown"});return}this.pendingFreedomConvs.set(s,Date.now()),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u5F00\u542F\u81EA\u7531\u6A21\u5F0F\u540E\uFF0C\u6240\u6709\u7FA4\u6210\u5458\u5747\u53EF\u4F7F\u7528\u673A\u5668\u4EBA\uFF08\u8DF3\u8FC7\u767D\u540D\u5355\u9650\u5236\uFF09
24
+ \u{1F4A1} \u8F93\u5165 \`/help\` \u67E5\u770B\u6240\u6709\u53EF\u7528\u547D\u4EE4`,msgType:"markdown"})}),(0,$.route)("/reboot",()=>(0,C.parseRebootCommand)(h),async e=>{if(!await this.requireOwnerOrAdmin(s,n,r))return;if(e.tag&&!/^[\w.\-]+$/.test(e.tag)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u274C \u65E0\u6548\u7684 tag\uFF0C\u4EC5\u5141\u8BB8\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u70B9\u3001\u6A2A\u7EBF\u548C\u4E0B\u5212\u7EBF",msgType:"markdown"});return}const a=e.tag?`@${e.tag}`:"@latest",t=e.update?`npm install -g cc-ding${a}`:null,g=`cc-ding-${this.clientId}`;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:t?`\u2705 \u66F4\u65B0\u5E76\u91CD\u542F\uFF0C\u6B63\u5728\u6267\u884C ${t}...`:"\u2705 cc-ding \u6B63\u5728\u91CD\u542F\u4E2D...",msgType:"markdown"});const w=N.default.join(this.getClientDir(),".reboot_pending");k.default.writeFileSync(w,JSON.stringify({conversationId:s,senderStaffId:r,sessionWebhook:n,update:e.update}),"utf-8"),setTimeout(()=>{console.log(`[${(0,c.timestamp)()}] \u6267\u884C pm2 restart ${g}${t?" (\u542B\u66F4\u65B0)":""}`),(0,G.exec)(`${t?`${t} && `:""}pm2 restart "${g}"`,{timeout:6e4},m=>{m&&console.error(`[${(0,c.timestamp)()}] pm2 restart \u5931\u8D25:`,m)})},1e3)})];for(const e of F)if(await e.tryHandle())return;if(!f){console.log(`\u672A\u6CE8\u518C\u7684\u673A\u5668\u4EBA,\u7FA4:${l},${s}`),this.isOwner(r)?await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u8BE5\u7FA4\u672A\u6CE8\u518C\uFF0C\u8BF7\u5148\u4F7F\u7528 `/cfg` \u547D\u4EE4\u6CE8\u518C",msgType:"markdown"}):await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u62B1\u6B49,\u8BE5\u7FA4\u7684\u673A\u5668\u4EBA\u672A\u5728\u670D\u52A1\u7AEF\u6CE8\u518C,\u8BF7\u8054\u7CFB\u5E94\u7528\u673A\u5668\u4EBAowner\u6CE8\u518C(${s})...`});return}const Y=[(0,$.route)("/destroy",()=>(0,C.parseDestroyCommand)(h),async e=>{if(!await this.requireOwnerOrSingleChat(s,n,r,f))return;const a=e.conversationId||s;if(a!==s&&!this.isOwner(r)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u274C \u53EA\u6709 owner \u624D\u80FD\u64CD\u4F5C\u5176\u4ED6\u7FA4\u7684\u914D\u7F6E",msgType:"markdown"});return}const g=this.config.conversations.findIndex(P=>P.conversationId===a);if(g<0){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u8BE5\u7FA4\u672A\u5728\u914D\u7F6E\u4E2D\u6CE8\u518C\uFF0C\u65E0\u9700\u6CE8\u9500",msgType:"markdown"});return}const m=this.config.conversations[g].conversationTitle||a;this.config.conversations.splice(g,1);const p=this.getConversationDir(a);let T=!1;try{k.default.existsSync(p)&&(k.default.rmSync(p,{recursive:!0,force:!0}),T=!0)}catch(P){console.error(`[${(0,c.timestamp)()}] \u5220\u9664\u5DE5\u4F5C\u76EE\u5F55\u5931\u8D25:`,P)}const v=this.activeSessions.get(a);if(v?.currentProcess)try{v.currentProcess.kill("SIGTERM")}catch{}this.activeSessions.delete(a),this.recorderModeConversations.delete(a),(0,S.saveClientConfig)(this),console.log(`[${(0,c.timestamp)()}] \u5DF2\u6CE8\u9500\u7FA4: ${m}(${a})`);const y=["\u2705 \u7FA4\u673A\u5668\u4EBA\u5DF2\u6CE8\u9500",`- **\u7FA4\u540D\u79F0:** ${m}`,`- **\u7FA4ID:** ${a}`];T?y.push("- **\u5DE5\u4F5C\u76EE\u5F55:** \u5DF2\u5220\u9664"):y.push("- **\u5DE5\u4F5C\u76EE\u5F55:** (\u4E0D\u5B58\u5728\u6216\u65E0\u6CD5\u5220\u9664)"),v&&y.push("- **\u6D3B\u8DC3\u4F1A\u8BDD:** \u5DF2\u6E05\u9664"),y.push(`
25
+ \u26A0\uFE0F \u8BE5\u7FA4\u4E0B\u6B21\u53D1\u9001\u6D88\u606F\u65F6\u5C06\u6536\u5230"\u672A\u6CE8\u518C"\u63D0\u793A`),y.push("\u{1F4A1} \u5982\u9700\u91CD\u65B0\u6CE8\u518C\uFF0C\u8BF7\u4F7F\u7528 `/cfg` \u547D\u4EE4"),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:y.join(`
26
+ `),msgType:"markdown"})}),(0,$.route)("/freedom",()=>(0,C.parseFreedomCommand)(h),async e=>{if(await this.requireOwnerOrSingleChat(s,n,r,f)){if(e.action==="enter"){if(f?.freedomMode){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2139\uFE0F \u5F53\u524D\u5DF2\u5904\u4E8E\u81EA\u7531\u6A21\u5F0F",msgType:"markdown"});return}this.pendingFreedomConvs.set(s,Date.now()),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u5F00\u542F\u81EA\u7531\u6A21\u5F0F\u540E\uFF0C\u6240\u6709\u7FA4\u6210\u5458\u5747\u53EF\u4F7F\u7528\u673A\u5668\u4EBA\uFF08\u8DF3\u8FC7\u767D\u540D\u5355\u9650\u5236\uFF09
27
27
 
28
- 60 \u79D2\u5185\u56DE\u590D\u300C\u786E\u8BA4\u300D\u6216\u300Cconfirm\u300D\u5373\u53EF\u5F00\u542F`,msgType:"markdown"})}else if(e.action==="exit"){if(!y?.freedomMode){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2139\uFE0F \u5F53\u524D\u672A\u5F00\u542F\u81EA\u7531\u6A21\u5F0F",msgType:"markdown"});return}y.freedomMode=!1,(0,S.saveClientConfig)(this),this.pendingFreedomConvs.delete(s),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u81EA\u7531\u6A21\u5F0F\u5DF2\u5173\u95ED
29
- \u{1F512} \u5DF2\u6062\u590D\u767D\u540D\u5355\u9650\u5236`,msgType:"markdown"})}}}),(0,I.route)("/clean",()=>(0,$.parseCleanCommand)(h),async e=>{if(e==="all"&&y?.conversationType!=="1"&&!this.isOwner(r)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u274C \u53EA\u6709\u673A\u5668\u4EBA owner \u624D\u80FD\u6E05\u9664\u6240\u6709\u7FA4\u7F13\u5B58",msgType:"markdown"});return}if(!await this.requireOwnerOrSingleChat(s,n,r,y))return;const a=e==="all"?null:s,t=this.cleanCache(a,!0),g=[];g.push("\u{1F9F9} \u7F13\u5B58\u6E05\u7406\u5B8C\u6210"),t.sessionsDeleted>0&&g.push(`- \u4F1A\u8BDD\u76EE\u5F55: ${t.sessionsDeleted} \u4E2A`),t.tasksDeleted>0&&g.push(`- \u4EFB\u52A1\u76EE\u5F55: ${t.tasksDeleted} \u4E2A`),t.imagesDeleted>0&&g.push(`- \u56FE\u7247\u6587\u4EF6: ${t.imagesDeleted} \u4E2A`),t.sessionsDeleted===0&&t.tasksDeleted===0&&t.imagesDeleted===0&&g.push("(\u65E0\u5386\u53F2\u6570\u636E)"),g.push(`
28
+ 60 \u79D2\u5185\u56DE\u590D\u300C\u786E\u8BA4\u300D\u6216\u300Cconfirm\u300D\u5373\u53EF\u5F00\u542F`,msgType:"markdown"})}else if(e.action==="exit"){if(!f?.freedomMode){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2139\uFE0F \u5F53\u524D\u672A\u5F00\u542F\u81EA\u7531\u6A21\u5F0F",msgType:"markdown"});return}f.freedomMode=!1,(0,S.saveClientConfig)(this),this.pendingFreedomConvs.delete(s),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u81EA\u7531\u6A21\u5F0F\u5DF2\u5173\u95ED
29
+ \u{1F512} \u5DF2\u6062\u590D\u767D\u540D\u5355\u9650\u5236`,msgType:"markdown"})}}}),(0,$.route)("/qa",()=>(0,C.parseQaCommand)(h),async e=>{if(await this.requireOwnerOrAdmin(s,n,r)){if(e.action==="enter"){if(f?.qaMode){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2139\uFE0F \u5F53\u524D\u5DF2\u5904\u4E8E\u95EE\u7B54\u6A21\u5F0F",msgType:"markdown"});return}f.qaMode=!0,(0,S.saveClientConfig)(this),(0,q.refreshSessionContext)(this,s),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2705 \u95EE\u7B54\u6A21\u5F0F\u5DF2\u5F00\u542F\n- Claude \u5C06\u4EE5\u53EA\u8BFB plan \u6A21\u5F0F\u8FD0\u884C\n- \u6240\u6709\u7FA4\u6210\u5458\u5747\u53EF\u4F7F\u7528\n- \u4F7F\u7528 `/cfg --qaGitRepos \u76EE\u5F55\u540D` \u914D\u7F6E\u8981 pull \u7684\u4ED3\u5E93\n- \u4F7F\u7528 `/cfg --qaDocs url1,url2` \u914D\u7F6E\u6587\u6863",msgType:"markdown"})}else if(e.action==="exit"){if(!f?.qaMode){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2139\uFE0F \u5F53\u524D\u672A\u5F00\u542F\u95EE\u7B54\u6A21\u5F0F",msgType:"markdown"});return}f.qaMode=!1,(0,S.saveClientConfig)(this),(0,q.refreshSessionContext)(this,s),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2705 \u95EE\u7B54\u6A21\u5F0F\u5DF2\u5173\u95ED",msgType:"markdown"})}}}),(0,$.route)("/clean",()=>(0,C.parseCleanCommand)(h),async e=>{if(e==="all"&&f?.conversationType!=="1"&&!this.isOwner(r)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u274C \u53EA\u6709\u673A\u5668\u4EBA owner \u624D\u80FD\u6E05\u9664\u6240\u6709\u7FA4\u7F13\u5B58",msgType:"markdown"});return}if(!await this.requireOwnerOrSingleChat(s,n,r,f))return;const a=e==="all"?null:s,t=this.cleanCache(a,!0),g=[];g.push("\u{1F9F9} \u7F13\u5B58\u6E05\u7406\u5B8C\u6210"),t.sessionsDeleted>0&&g.push(`- \u4F1A\u8BDD\u76EE\u5F55: ${t.sessionsDeleted} \u4E2A`),t.tasksDeleted>0&&g.push(`- \u4EFB\u52A1\u76EE\u5F55: ${t.tasksDeleted} \u4E2A`),t.imagesDeleted>0&&g.push(`- \u56FE\u7247\u6587\u4EF6: ${t.imagesDeleted} \u4E2A`),t.sessionsDeleted===0&&t.tasksDeleted===0&&t.imagesDeleted===0&&g.push("(\u65E0\u5386\u53F2\u6570\u636E)"),g.push(`
30
30
  \u{1F4A1} \u6D3B\u8DC3\u4F1A\u8BDD\u5DF2\u4FDD\u7559`),t.errors.length>0&&g.push(`
31
31
  \u26A0\uFE0F \u9519\u8BEF: ${t.errors.join("; ")}`),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:g.join(`
32
- `),msgType:"markdown"})}),(0,I.route)("/reset-apikeycfg",()=>(0,$.parseResetApiKeyCfgCommand)(h),async()=>{if(!await this.requireOwner(s,n,r))return;if(!this.config.apiKeyCfg){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u672A\u914D\u7F6E apiKeyCfg\uFF0C\u65E0\u9700\u91CD\u7F6E",msgType:"markdown"});return}(0,S.resetApiKeyCfg)(this);const e=this.config.apiKeyCfg.claudeSettings.filter(a=>a.isValid).length;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 apiKeyCfg \u5DF2\u91CD\u7F6E
32
+ `),msgType:"markdown"})}),(0,$.route)("/reset-apikeycfg",()=>(0,C.parseResetApiKeyCfgCommand)(h),async()=>{if(!await this.requireOwner(s,n,r))return;if(!this.config.apiKeyCfg){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u672A\u914D\u7F6E apiKeyCfg\uFF0C\u65E0\u9700\u91CD\u7F6E",msgType:"markdown"});return}(0,S.resetApiKeyCfg)(this);const e=this.config.apiKeyCfg.claudeSettings.filter(a=>a.isValid).length;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 apiKeyCfg \u5DF2\u91CD\u7F6E
33
33
  - \u6709\u6548 Key \u6570: ${e}/${this.config.apiKeyCfg.claudeSettings.length}
34
- - \u91CD\u7F6E\u65F6\u95F4: ${this.config.apiKeyCfg.resetTime||"-"}`,msgType:"markdown"})}),(0,I.route)("/auth",()=>(0,$.parseAuthCommand)(h),async e=>{if(!await this.requireOwner(s,n,r))return;if(e.type==="approve"||e.type==="reject"){const t=this.pendingAuthRequests.get(e.requestId);if(!t){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u274C \u672A\u627E\u5230\u6388\u6743\u7533\u8BF7: ${e.requestId}`,msgType:"markdown"});return}if(this.pendingAuthRequests.delete(e.requestId),e.type==="approve"){let g=this.config.conversations.find(p=>p.conversationId===t.conversationId);g||(g={conversationId:t.conversationId,conversationType:t.conversationType||"1",conversationTitle:t.conversationTitle},this.config.conversations.push(g)),g.whiteUserList||(g.whiteUserList=[]),g.whiteUserList.includes(t.senderStaffId)||g.whiteUserList.push(t.senderStaffId),(0,S.saveClientConfig)(this),console.log(`[${(0,c.timestamp)()}] \u6388\u6743\u7533\u8BF7\u901A\u8FC7\u5C06: id=${e.requestId}, userId=${t.senderStaffId}`),await(0,K.sendMessageToUser)(this,t.senderStaffId,"\u2705 \u60A8\u7684\u6388\u6743\u7533\u8BF7\u5DF2\u901A\u8FC7\uFF0C\u73B0\u5728\u53EF\u4EE5\u5F00\u59CB\u4F7F\u7528\u4E86","markdown"),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u901A\u8FC7\u6388\u6743\u7533\u8BF7
34
+ - \u91CD\u7F6E\u65F6\u95F4: ${this.config.apiKeyCfg.resetTime||"-"}`,msgType:"markdown"})}),(0,$.route)("/auth",()=>(0,C.parseAuthCommand)(h),async e=>{if(!await this.requireOwner(s,n,r))return;if(e.type==="approve"||e.type==="reject"){const t=this.pendingAuthRequests.get(e.requestId);if(!t){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u274C \u672A\u627E\u5230\u6388\u6743\u7533\u8BF7: ${e.requestId}`,msgType:"markdown"});return}if(this.pendingAuthRequests.delete(e.requestId),e.type==="approve"){let g=this.config.conversations.find(w=>w.conversationId===t.conversationId);g||(g={conversationId:t.conversationId,conversationType:t.conversationType||"1",conversationTitle:t.conversationTitle},this.config.conversations.push(g)),g.whiteUserList||(g.whiteUserList=[]),g.whiteUserList.includes(t.senderStaffId)||g.whiteUserList.push(t.senderStaffId),(0,S.saveClientConfig)(this),console.log(`[${(0,c.timestamp)()}] \u6388\u6743\u7533\u8BF7\u901A\u8FC7\u5C06: id=${e.requestId}, userId=${t.senderStaffId}`),await(0,K.sendMessageToUser)(this,t.senderStaffId,"\u2705 \u60A8\u7684\u6388\u6743\u7533\u8BF7\u5DF2\u901A\u8FC7\uFF0C\u73B0\u5728\u53EF\u4EE5\u5F00\u59CB\u4F7F\u7528\u4E86","markdown"),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u901A\u8FC7\u6388\u6743\u7533\u8BF7
35
35
  - **\u7528\u6237ID:** ${t.senderStaffId}
36
36
  - **\u6635\u79F0:** ${t.senderNick}
37
37
  - **\u4F1A\u8BDDID:** ${t.conversationId}`,msgType:"markdown"})}else console.log(`[${(0,c.timestamp)()}] \u6388\u6743\u7533\u8BF7\u62D2\u7EDD: id=${e.requestId}, userId=${t.senderStaffId}`),await(0,K.sendMessageToUser)(this,t.senderStaffId,"\u274C \u60A8\u7684\u6388\u6743\u7533\u8BF7\u5DF2\u88AB\u62D2\u7EDD","markdown"),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u62D2\u7EDD\u6388\u6743\u7533\u8BF7
38
38
  - **\u7528\u6237ID:** ${t.senderStaffId}
39
- - **\u6635\u79F0:** ${t.senderNick}`,msgType:"markdown"});return}const a=y.whiteUserList;if(e.type==="list"){const t=a&&a.length>0?a.map(g=>`- ${(0,c.userIdToPhone)(this,g)||g}`).join(`
39
+ - **\u6635\u79F0:** ${t.senderNick}`,msgType:"markdown"});return}const a=f.whiteUserList;if(e.type==="list"){const t=a&&a.length>0?a.map(g=>`- ${(0,c.userIdToPhone)(this,g)||g}`).join(`
40
40
  `):"(\u672A\u914D\u7F6E\u7FA4\u7EA7\u767D\u540D\u5355\uFF0C\u4F7F\u7528\u5168\u5C40\u767D\u540D\u5355)";await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F4CB} **\u5F53\u524D\u7FA4\u767D\u540D\u5355**
41
41
  ${t}`,msgType:"markdown"});return}if(e.type==="adminList"){const t=this.config.adminUserList&&this.config.adminUserList.length>0?this.config.adminUserList.map(g=>`- ${(0,c.userIdToPhone)(this,g)||g}`).join(`
42
42
  `):"(\u672A\u914D\u7F6E\u7BA1\u7406\u5458)";await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F451} **\u7BA1\u7406\u5458\u5217\u8868**
43
- ${t}`,msgType:"markdown"});return}if(e.type==="adminAdd"){let t=e.staffId;if((0,c.isMobile)(e.staffId)&&(t=await(0,c.resolveUserId)(this,e.staffId),!t)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u65E0\u6CD5\u89E3\u6790\u624B\u673A\u53F7: ${e.staffId}`,msgType:"markdown"});return}if(this.config.adminUserList?.some(u=>(0,c.resolveToUserId)(this,u)===t)){const u=(0,c.userIdToPhone)(this,t)||t;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F ${u} \u5DF2\u5728\u7BA1\u7406\u5458\u5217\u8868\u4E2D`,msgType:"markdown"});return}this.config.adminUserList||(this.config.adminUserList=[]),this.config.adminUserList.push(e.staffId),(0,S.saveClientConfig)(this);const p=(0,c.isMobile)(e.staffId)?e.staffId:(0,c.userIdToPhone)(this,e.staffId)||e.staffId;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u6DFB\u52A0 ${p} \u5230\u7BA1\u7406\u5458\u5217\u8868`,msgType:"markdown"});return}if(e.type==="adminRm"){let t=e.staffId;if((0,c.isMobile)(e.staffId)&&(t=await(0,c.resolveUserId)(this,e.staffId),!t)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u65E0\u6CD5\u89E3\u6790\u624B\u673A\u53F7: ${e.staffId}`,msgType:"markdown"});return}const g=this.config.adminUserList?.findIndex(m=>(0,c.resolveToUserId)(this,m)===t)??-1;if(g<0){const m=(0,c.userIdToPhone)(this,t)||t;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F ${m} \u4E0D\u5728\u7BA1\u7406\u5458\u5217\u8868\u4E2D`,msgType:"markdown"});return}const p=this.config.adminUserList[g];this.config.adminUserList.splice(g,1),this.config.adminUserList.length===0&&delete this.config.adminUserList,(0,S.saveClientConfig)(this);const u=(0,c.userIdToPhone)(this,t)||p;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u79FB\u9664 ${u}`,msgType:"markdown"});return}if(e.type==="add"){let t=e.staffId;if((0,c.isMobile)(e.staffId)&&(t=await(0,c.resolveUserId)(this,e.staffId),!t)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u65E0\u6CD5\u89E3\u6790\u624B\u673A\u53F7: ${e.staffId}`,msgType:"markdown"});return}if(a?.some(m=>(0,c.resolveToUserId)(this,m)===t)){const m=(0,c.userIdToPhone)(this,t)||t;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F ${m} \u5DF2\u5728\u5F53\u524D\u7FA4\u767D\u540D\u5355\u4E2D`,msgType:"markdown"});return}y.whiteUserList||(y.whiteUserList=[]),y.whiteUserList.push(e.staffId),(0,S.saveClientConfig)(this);const p=y.whiteUserList.map(m=>{const T=(0,c.resolveToUserId)(this,m);return(0,c.userIdToPhone)(this,T)||m}),u=(0,c.isMobile)(e.staffId)?e.staffId:(0,c.userIdToPhone)(this,e.staffId)||e.staffId;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u6DFB\u52A0 ${u} \u5230\u5F53\u524D\u7FA4\u767D\u540D\u5355
44
- \u5F53\u524D\u767D\u540D\u5355: ${p.join(", ")}`,msgType:"markdown"});return}if(e.type==="del"){let t=e.staffId;if((0,c.isMobile)(e.staffId)&&(t=await(0,c.resolveUserId)(this,e.staffId),!t)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u65E0\u6CD5\u89E3\u6790\u624B\u673A\u53F7: ${e.staffId}`,msgType:"markdown"});return}const g=a?.findIndex(T=>(0,c.resolveToUserId)(this,T)===t)??-1;if(g<0){const T=(0,c.userIdToPhone)(this,t)||t;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F ${T} \u4E0D\u5728\u5F53\u524D\u7FA4\u767D\u540D\u5355\u4E2D`,msgType:"markdown"});return}const p=y.whiteUserList[g];y.whiteUserList.splice(g,1),y.whiteUserList.length===0&&delete y.whiteUserList,(0,S.saveClientConfig)(this);const u=y.whiteUserList?.length?y.whiteUserList.map(T=>{const v=(0,c.resolveToUserId)(this,T);return(0,c.userIdToPhone)(this,v)||T}).join(", "):"(\u7A7A\uFF0C\u4F7F\u7528\u5168\u5C40\u767D\u540D\u5355)",m=(0,c.userIdToPhone)(this,t)||p;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u79FB\u9664 ${m}
45
- \u5F53\u524D\u767D\u540D\u5355: ${u}`,msgType:"markdown"});return}}),(0,I.route)("/open",()=>(0,$.parseOpenCommand)(h),async e=>{if(!await this.requireOwner(s,n,r))return;const a=this.getConversationDir(s),t=process.platform,g=(p,u,m)=>new Promise((T,v)=>{const w=(0,U.spawnCommand)(p,u,{cwd:m,detached:!0,stdio:"ignore"});w.once("error",v),w.once("spawn",()=>{w.unref(),T()})});try{if(e==="folder"){if(t==="darwin")await g("open",[a]);else if((0,U.isWindowsPlatform)(t))await g("explorer.exe",[a]);else if((0,U.commandExists)("xdg-open"))await g("xdg-open",[a]);else throw new Error("\u672A\u68C0\u6D4B\u5230\u53EF\u7528\u7684\u6587\u4EF6\u7BA1\u7406\u5668\u6253\u5F00\u547D\u4EE4");await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F4C2} \u5DF2\u5728\u6587\u4EF6\u7BA1\u7406\u5668\u4E2D\u6253\u5F00:
43
+ ${t}`,msgType:"markdown"});return}if(e.type==="adminAdd"){let t=e.staffId;if((0,c.isMobile)(e.staffId)&&(t=await(0,c.resolveUserId)(this,e.staffId),!t)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u65E0\u6CD5\u89E3\u6790\u624B\u673A\u53F7: ${e.staffId}`,msgType:"markdown"});return}if(this.config.adminUserList?.some(m=>(0,c.resolveToUserId)(this,m)===t)){const m=(0,c.userIdToPhone)(this,t)||t;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F ${m} \u5DF2\u5728\u7BA1\u7406\u5458\u5217\u8868\u4E2D`,msgType:"markdown"});return}this.config.adminUserList||(this.config.adminUserList=[]),this.config.adminUserList.push(e.staffId),(0,S.saveClientConfig)(this);const w=(0,c.isMobile)(e.staffId)?e.staffId:(0,c.userIdToPhone)(this,e.staffId)||e.staffId;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u6DFB\u52A0 ${w} \u5230\u7BA1\u7406\u5458\u5217\u8868`,msgType:"markdown"});return}if(e.type==="adminRm"){let t=e.staffId;if((0,c.isMobile)(e.staffId)&&(t=await(0,c.resolveUserId)(this,e.staffId),!t)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u65E0\u6CD5\u89E3\u6790\u624B\u673A\u53F7: ${e.staffId}`,msgType:"markdown"});return}const g=this.config.adminUserList?.findIndex(p=>(0,c.resolveToUserId)(this,p)===t)??-1;if(g<0){const p=(0,c.userIdToPhone)(this,t)||t;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F ${p} \u4E0D\u5728\u7BA1\u7406\u5458\u5217\u8868\u4E2D`,msgType:"markdown"});return}const w=this.config.adminUserList[g];this.config.adminUserList.splice(g,1),this.config.adminUserList.length===0&&delete this.config.adminUserList,(0,S.saveClientConfig)(this);const m=(0,c.userIdToPhone)(this,t)||w;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u79FB\u9664 ${m}`,msgType:"markdown"});return}if(e.type==="add"){let t=e.staffId;if((0,c.isMobile)(e.staffId)&&(t=await(0,c.resolveUserId)(this,e.staffId),!t)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u65E0\u6CD5\u89E3\u6790\u624B\u673A\u53F7: ${e.staffId}`,msgType:"markdown"});return}if(a?.some(p=>(0,c.resolveToUserId)(this,p)===t)){const p=(0,c.userIdToPhone)(this,t)||t;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F ${p} \u5DF2\u5728\u5F53\u524D\u7FA4\u767D\u540D\u5355\u4E2D`,msgType:"markdown"});return}f.whiteUserList||(f.whiteUserList=[]),f.whiteUserList.push(e.staffId),(0,S.saveClientConfig)(this);const w=f.whiteUserList.map(p=>{const T=(0,c.resolveToUserId)(this,p);return(0,c.userIdToPhone)(this,T)||p}),m=(0,c.isMobile)(e.staffId)?e.staffId:(0,c.userIdToPhone)(this,e.staffId)||e.staffId;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u6DFB\u52A0 ${m} \u5230\u5F53\u524D\u7FA4\u767D\u540D\u5355
44
+ \u5F53\u524D\u767D\u540D\u5355: ${w.join(", ")}`,msgType:"markdown"});return}if(e.type==="del"){let t=e.staffId;if((0,c.isMobile)(e.staffId)&&(t=await(0,c.resolveUserId)(this,e.staffId),!t)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u65E0\u6CD5\u89E3\u6790\u624B\u673A\u53F7: ${e.staffId}`,msgType:"markdown"});return}const g=a?.findIndex(T=>(0,c.resolveToUserId)(this,T)===t)??-1;if(g<0){const T=(0,c.userIdToPhone)(this,t)||t;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F ${T} \u4E0D\u5728\u5F53\u524D\u7FA4\u767D\u540D\u5355\u4E2D`,msgType:"markdown"});return}const w=f.whiteUserList[g];f.whiteUserList.splice(g,1),f.whiteUserList.length===0&&delete f.whiteUserList,(0,S.saveClientConfig)(this);const m=f.whiteUserList?.length?f.whiteUserList.map(T=>{const v=(0,c.resolveToUserId)(this,T);return(0,c.userIdToPhone)(this,v)||T}).join(", "):"(\u7A7A\uFF0C\u4F7F\u7528\u5168\u5C40\u767D\u540D\u5355)",p=(0,c.userIdToPhone)(this,t)||w;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u79FB\u9664 ${p}
45
+ \u5F53\u524D\u767D\u540D\u5355: ${m}`,msgType:"markdown"});return}}),(0,$.route)("/open",()=>(0,C.parseOpenCommand)(h),async e=>{if(!await this.requireOwner(s,n,r))return;const a=this.getConversationDir(s),t=process.platform,g=(w,m,p)=>new Promise((T,v)=>{const y=(0,U.spawnCommand)(w,m,{cwd:p,detached:!0,stdio:"ignore"});y.once("error",v),y.once("spawn",()=>{y.unref(),T()})});try{if(e==="folder"){if(t==="darwin")await g("open",[a]);else if((0,U.isWindowsPlatform)(t))await g("explorer.exe",[a]);else if((0,U.commandExists)("xdg-open"))await g("xdg-open",[a]);else throw new Error("\u672A\u68C0\u6D4B\u5230\u53EF\u7528\u7684\u6587\u4EF6\u7BA1\u7406\u5668\u6253\u5F00\u547D\u4EE4");await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F4C2} \u5DF2\u5728\u6587\u4EF6\u7BA1\u7406\u5668\u4E2D\u6253\u5F00:
46
46
  \`\`\`
47
47
  ${a}
48
48
  \`\`\``,msgType:"markdown"})}else if(e==="code"){if(!(0,U.commandExists)("code")){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u274C \u672A\u68C0\u6D4B\u5230 VS Code `code` \u547D\u4EE4\n\u8BF7\u5B89\u88C5 VS Code \u5E76\u786E\u8BA4 `code` \u5DF2\u52A0\u5165 PATH",msgType:"markdown"});return}await g("code",[a]),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F4BB} \u5DF2\u5728 VS Code \u4E2D\u6253\u5F00:
@@ -51,45 +51,45 @@ ${a}
51
51
  \`\`\``,msgType:"markdown"})}else{if(t==="darwin")await g("open",["-a","Terminal",a]);else if((0,U.isWindowsPlatform)(t))await g("cmd.exe",["/K","cd","/d",a]);else if((0,U.commandExists)("x-terminal-emulator"))await g("x-terminal-emulator",[],a);else throw new Error("\u672A\u68C0\u6D4B\u5230\u53EF\u7528\u7684\u7EC8\u7AEF\u6253\u5F00\u547D\u4EE4");await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F4BB} \u5DF2\u5728\u7EC8\u7AEF\u4E2D\u6253\u5F00:
52
52
  \`\`\`
53
53
  ${a}
54
- \`\`\``,msgType:"markdown"})}}catch(p){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u274C \u6253\u5F00\u5931\u8D25: ${p instanceof Error?p.message:String(p)}`,msgType:"markdown"})}}),(0,I.route)("/cron",()=>(0,$.parseCronCommand)(h),async e=>{await this.handleCronCommand(e,{conversationId:s,sessionWebhook:n,senderStaffId:r,senderNick:o,conversationConfig:y})}),(0,I.route)("/todo",()=>(0,Z.parseTodoCommand)(h,i.atUsers),async e=>{await this.handleTodoCommand(e,{conversationId:s,sessionWebhook:n,senderStaffId:r,senderNick:o})}),(0,I.route)("/menu",()=>(0,$.parseMenuCommand)(h),async e=>{await this.handleMenuCommand(e,{conversationId:s,sessionWebhook:n,senderStaffId:r})}),(0,I.route)("/bash",()=>(0,$.parseBashCommand)(h),async e=>{if(!await this.requireOwnerOrAdmin(s,n,r))return;this.appendBashAudit(s,r,e);const a=this.getConversationDir(s),t=[];this.config.preBash&&t.push(this.config.preBash),y?.preBash&&t.push(y.preBash);const g=(0,U.isWindowsPlatform)()?" && ":" ; ",p=t.length>0?[...t,e].join(g):e,u=this;(0,B.exec)(p,{cwd:a,timeout:3e4,maxBuffer:1024*1024},async(m,T,v)=>{try{let w;if(m)w=`\u274C \u547D\u4EE4\u6267\u884C\u5931\u8D25
54
+ \`\`\``,msgType:"markdown"})}}catch(w){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u274C \u6253\u5F00\u5931\u8D25: ${w instanceof Error?w.message:String(w)}`,msgType:"markdown"})}}),(0,$.route)("/cron",()=>(0,C.parseCronCommand)(h),async e=>{await this.handleCronCommand(e,{conversationId:s,sessionWebhook:n,senderStaffId:r,senderNick:o,conversationConfig:f})}),(0,$.route)("/todo",()=>(0,Z.parseTodoCommand)(h,i.atUsers),async e=>{await this.handleTodoCommand(e,{conversationId:s,sessionWebhook:n,senderStaffId:r,senderNick:o})}),(0,$.route)("/menu",()=>(0,C.parseMenuCommand)(h),async e=>{await this.handleMenuCommand(e,{conversationId:s,sessionWebhook:n,senderStaffId:r})}),(0,$.route)("/bash",()=>(0,C.parseBashCommand)(h),async e=>{if(!await this.requireOwnerOrAdmin(s,n,r))return;this.appendBashAudit(s,r,e);const a=this.getConversationDir(s),t=[];this.config.preBash&&t.push(this.config.preBash),f?.preBash&&t.push(f.preBash);const g=(0,U.isWindowsPlatform)()?" && ":" ; ",w=t.length>0?[...t,e].join(g):e,m=this;(0,G.exec)(w,{cwd:a,timeout:3e4,maxBuffer:1024*1024},async(p,T,v)=>{try{let y;if(p)y=`\u274C \u547D\u4EE4\u6267\u884C\u5931\u8D25
55
55
  \`\`\`
56
- ${m.message}
57
- \`\`\``,v&&(w+=`
56
+ ${p.message}
57
+ \`\`\``,v&&(y+=`
58
58
 
59
59
  **stderr:**
60
60
  \`\`\`
61
- ${u.sanitizeOutput(v)}
62
- \`\`\``);else{const A=T||"(\u65E0\u8F93\u51FA)";w=`\u2705 \u6267\u884C\u6210\u529F
61
+ ${m.sanitizeOutput(v)}
62
+ \`\`\``);else{const P=T||"(\u65E0\u8F93\u51FA)";y=`\u2705 \u6267\u884C\u6210\u529F
63
63
  \`\`\`
64
- ${u.sanitizeOutput(A)}
65
- \`\`\``,v&&(w+=`
64
+ ${m.sanitizeOutput(P)}
65
+ \`\`\``,v&&(y+=`
66
66
 
67
67
  **stderr:**
68
68
  \`\`\`
69
- ${u.sanitizeOutput(v)}
70
- \`\`\``)}await u.sendDingMessage({conversationId:s,sessionWebhook:n,content:w,msgType:"markdown"})}catch(w){console.error("[bash] \u53D1\u9001\u6D88\u606F\u5931\u8D25:",w)}})}),(0,I.route)("/new",()=>/^\/new(?:\s|$)/i.test(h),async()=>{const e=this.findActiveSession(s);e&&(console.log(`\u6536\u5230\u65B0\u4F1A\u8BDD\u547D\u4EE4\uFF0C\u7ED3\u675F\u65E7\u4F1A\u8BDD: \u7FA4=${e.session.session.conversationId}, \u4F1A\u8BDDID=${this.getSessionId(e.session.session)}`),this.interruptClaudeProcess(e.session,"\u65B0\u4F1A\u8BDD\u547D\u4EE4\u4E2D\u65AD\u6B63\u5728\u6267\u884C\u7684 Claude \u8FDB\u7A0B"),this.activeSessions.delete(e.key),this.saveActiveSession(e.key));const a=h.replace(/^\/new\s*/i,"").trim();a?await this.startNewSession({conversationId:s,sessionWebhook:n,senderStaffId:r,senderNick:o,message:a,conversationConfig:y}):await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F680} \u8BF7\u8F93\u5165\u60A8\u7684\u95EE\u9898\u5F00\u59CB\u65B0\u4F1A\u8BDD"})}),(0,I.route)("/resume",()=>(0,$.parseContinueSessionCommand)(h),async e=>{let a=e;if(!a){const t=(0,c.findLatestSession)(this,s);if(!t){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u672A\u627E\u5230\u5DF2\u7ED3\u675F\u7684\u4F1A\u8BDD",msgType:"markdown"});return}a=(0,c.getSessionId)(t)}await this.switchToSession(s,n,a,r,y)}),(0,I.route)("/log",()=>(0,$.parseLogCommand)(h),async e=>{const a=this.readSessionLogTail(s,e);a?await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F4CB} \u6700\u8FD1 ${e} \u884C\u65E5\u5FD7:
69
+ ${m.sanitizeOutput(v)}
70
+ \`\`\``)}await m.sendDingMessage({conversationId:s,sessionWebhook:n,content:y,msgType:"markdown"})}catch(y){console.error("[bash] \u53D1\u9001\u6D88\u606F\u5931\u8D25:",y)}})}),(0,$.route)("/new",()=>/^\/new(?:\s|$)/i.test(h),async()=>{const e=this.findActiveSession(s);e&&(console.log(`\u6536\u5230\u65B0\u4F1A\u8BDD\u547D\u4EE4\uFF0C\u7ED3\u675F\u65E7\u4F1A\u8BDD: \u7FA4=${e.session.session.conversationId}, \u4F1A\u8BDDID=${this.getSessionId(e.session.session)}`),this.interruptClaudeProcess(e.session,"\u65B0\u4F1A\u8BDD\u547D\u4EE4\u4E2D\u65AD\u6B63\u5728\u6267\u884C\u7684 Claude \u8FDB\u7A0B"),this.activeSessions.delete(e.key),this.saveActiveSession(e.key));const a=h.replace(/^\/new\s*/i,"").trim();a?await this.startNewSession({conversationId:s,sessionWebhook:n,senderStaffId:r,senderNick:o,message:a,conversationConfig:f}):await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F680} \u8BF7\u8F93\u5165\u60A8\u7684\u95EE\u9898\u5F00\u59CB\u65B0\u4F1A\u8BDD"})}),(0,$.route)("/resume",()=>(0,C.parseContinueSessionCommand)(h),async e=>{let a=e;if(!a){const t=(0,c.findLatestSession)(this,s);if(!t){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u672A\u627E\u5230\u5DF2\u7ED3\u675F\u7684\u4F1A\u8BDD",msgType:"markdown"});return}a=(0,c.getSessionId)(t)}await this.switchToSession(s,n,a,r,f)}),(0,$.route)("/log",()=>(0,C.parseLogCommand)(h),async e=>{const a=this.readSessionLogTail(s,e);a?await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F4CB} \u6700\u8FD1 ${e} \u884C\u65E5\u5FD7:
71
71
  \`\`\`
72
72
  ${a}
73
- \`\`\``,msgType:"markdown"}):await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u5F53\u524D\u65E0\u6D3B\u8DC3\u4F1A\u8BDD\u6216\u6682\u65E0\u65E5\u5FD7"})}),(0,I.route)("/info",()=>(0,$.parseInfoCommand)(h),async e=>{const a=[],t=this.getConversationDir(s);if((e==="all"||e==="robot")&&(a.push(`### \u{1F310} \u5168\u5C40\u6838\u5FC3\u914D\u7F6E
74
- `+(0,$.formatGlobalConfig)(this.config)),a.push(`### \u{1F916} \u7FA4\u914D\u7F6E\u4FE1\u606F
75
- `+(0,$.formatConversationInfo)(y,s,g=>(0,c.userIdToPhone)(this,g),t))),e==="all"||e==="session"){const g=this.formatSessionInfo(s);g?a.push(`### \u{1F4AC} \u5F53\u524D\u4F1A\u8BDD\u4FE1\u606F
73
+ \`\`\``,msgType:"markdown"}):await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u5F53\u524D\u65E0\u6D3B\u8DC3\u4F1A\u8BDD\u6216\u6682\u65E0\u65E5\u5FD7"})}),(0,$.route)("/info",()=>(0,C.parseInfoCommand)(h),async e=>{const a=[],t=this.getConversationDir(s);if((e==="all"||e==="robot")&&(a.push(`### \u{1F310} \u5168\u5C40\u6838\u5FC3\u914D\u7F6E
74
+ `+(0,C.formatGlobalConfig)(this.config)),a.push(`### \u{1F916} \u7FA4\u914D\u7F6E\u4FE1\u606F
75
+ `+(0,C.formatConversationInfo)(f,s,g=>(0,c.userIdToPhone)(this,g),t))),e==="all"||e==="session"){const g=this.formatSessionInfo(s);g?a.push(`### \u{1F4AC} \u5F53\u524D\u4F1A\u8BDD\u4FE1\u606F
76
76
  `+g):a.push(`### \u{1F4AC} \u5F53\u524D\u4F1A\u8BDD\u4FE1\u606F
77
77
  \u65E0\u6D3B\u8DC3\u4F1A\u8BDD`)}(e==="all"||e==="task")&&a.push(`### \u{1F4DD} \u4EFB\u52A1\u961F\u5217\u4FE1\u606F
78
78
  `+this.formatTaskInfo()),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:a.join(`
79
79
 
80
- `),msgType:"markdown"})}),(0,I.route)("/ls",()=>(0,$.parseLsCommand)(h),async e=>{const{target:a,depth:t}=e,g=this.getConversationDir(s);let p=g,u="\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55";if(a&&a!=="root")if(a.startsWith("./")||a.startsWith("../")||a.startsWith("/")){const T=R.default.resolve(g,a);if(C.default.existsSync(T)&&C.default.statSync(T).isDirectory()){if(!T.startsWith(g)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u274C \u8DEF\u5F84\u8D85\u51FA\u5DE5\u4F5C\u76EE\u5F55\u8303\u56F4",msgType:"markdown"});return}p=T,u=a}else{await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u274C \u8DEF\u5F84\u4E0D\u5B58\u5728\u6216\u4E0D\u662F\u76EE\u5F55: **${a}**`,msgType:"markdown"});return}}else{const T=(0,$.findSubdirByName)(g,a);if(T)p=T,u=a;else{await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u274C \u672A\u627E\u5230\u540D\u4E3A **${a}** \u7684\u76EE\u5F55`,msgType:"markdown"});return}}const m=(0,$.getDirectoryStructure)(p,0,t);await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F4C2} ${u} (\u5C55\u5F00${t}\u5C42):
80
+ `),msgType:"markdown"})}),(0,$.route)("/ls",()=>(0,C.parseLsCommand)(h),async e=>{const{target:a,depth:t}=e,g=this.getConversationDir(s);let w=g,m="\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55";if(a&&a!=="root")if(a.startsWith("./")||a.startsWith("../")||a.startsWith("/")){const T=N.default.resolve(g,a);if(k.default.existsSync(T)&&k.default.statSync(T).isDirectory()){if(!T.startsWith(g)){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u274C \u8DEF\u5F84\u8D85\u51FA\u5DE5\u4F5C\u76EE\u5F55\u8303\u56F4",msgType:"markdown"});return}w=T,m=a}else{await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u274C \u8DEF\u5F84\u4E0D\u5B58\u5728\u6216\u4E0D\u662F\u76EE\u5F55: **${a}**`,msgType:"markdown"});return}}else{const T=(0,C.findSubdirByName)(g,a);if(T)w=T,m=a;else{await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u274C \u672A\u627E\u5230\u540D\u4E3A **${a}** \u7684\u76EE\u5F55`,msgType:"markdown"});return}}const p=(0,C.getDirectoryStructure)(w,0,t);await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F4C2} ${m} (\u5C55\u5F00${t}\u5C42):
81
81
  \`\`\`
82
- ${m}
83
- \`\`\``,msgType:"markdown"})}),(0,I.route)("/task cancel",()=>(0,b.parseTaskCancelCommand)(h)||null,async e=>{const a=this.cancelTask(e,s);await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:a,msgType:"markdown"})}),(0,I.route)("/task",()=>h.startsWith("/task ")||null,async()=>{const e=h.substring(6).trim();e&&(await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F4CB} \u4EFB\u52A1\u5DF2\u6536\u5230,\u5B8C\u6210\u540E\u6211\u4F1A\u56DE\u590D"}),await this.saveTask({conversationId:s,prompt:e,senderStaffId:r,senderNickName:o,sessionWebhook:n}))}),(0,I.route)("/mq",()=>(0,$.parseMqCommand)(h),async e=>{const t=this.findActiveSession(s)?.session.messageQueue??[];switch(e.type){case"list":{if(t.length===0)await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F4ED} \u5F53\u524D\u65E0\u6392\u961F\u6D88\u606F",msgType:"markdown"});else{const g=t.map((p,u)=>`${u+1}. **${p.senderNick||p.senderStaffId}:** ${this.truncateMsg(p.message)}`);await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F4E8} \u6D88\u606F\u961F\u5217 (${t.length} \u6761)
82
+ ${p}
83
+ \`\`\``,msgType:"markdown"})}),(0,$.route)("/task cancel",()=>(0,b.parseTaskCancelCommand)(h)||null,async e=>{const a=this.cancelTask(e,s);await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:a,msgType:"markdown"})}),(0,$.route)("/task",()=>h.startsWith("/task ")||null,async()=>{const e=h.substring(6).trim();e&&(await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F4CB} \u4EFB\u52A1\u5DF2\u6536\u5230,\u5B8C\u6210\u540E\u6211\u4F1A\u56DE\u590D"}),await this.saveTask({conversationId:s,prompt:e,senderStaffId:r,senderNickName:o,sessionWebhook:n}))}),(0,$.route)("/mq",()=>(0,C.parseMqCommand)(h),async e=>{const t=this.findActiveSession(s)?.session.messageQueue??[];switch(e.type){case"list":{if(t.length===0)await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F4ED} \u5F53\u524D\u65E0\u6392\u961F\u6D88\u606F",msgType:"markdown"});else{const g=t.map((w,m)=>`${m+1}. **${w.senderNick||w.senderStaffId}:** ${this.truncateMsg(w.message)}`);await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F4E8} \u6D88\u606F\u961F\u5217 (${t.length} \u6761)
84
84
  ${g.join(`
85
- `)}`,msgType:"markdown"})}return}case"front":{if(t.length===0){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F4ED} \u5F53\u524D\u65E0\u6392\u961F\u6D88\u606F",msgType:"markdown"});return}let g=t.length-1;for(let u=t.length-1;u>=0;u--)if(t[u].senderStaffId===r){g=u;break}if(g===0){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2139\uFE0F \u8BE5\u6D88\u606F\u5DF2\u5728\u961F\u9996\uFF0C\u65E0\u9700\u63D2\u961F",msgType:"markdown"});return}const[p]=t.splice(g,1);t.unshift(p),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u63D2\u961F\u5230\u961F\u9996
86
- 1. **${p.senderNick||p.senderStaffId}:** ${this.truncateMsg(p.message)}`,msgType:"markdown"});return}case"rm":{if(t.length===0){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F4ED} \u5F53\u524D\u65E0\u6392\u961F\u6D88\u606F",msgType:"markdown"});return}if(e.all){const w=t.length;t.length=0,await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u6E05\u7A7A\u6D88\u606F\u961F\u5217\uFF0C\u5171\u79FB\u9664 ${w} \u6761\u6D88\u606F`,msgType:"markdown"});return}const g=[...new Set(e.indices)],p=g.filter(w=>w>=1&&w<=t.length).sort((w,A)=>A-w),u=g.filter(w=>w<1||w>t.length);if(p.length===0){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u5E8F\u53F7\u65E0\u6548\uFF0C\u5F53\u524D\u961F\u5217\u5171 ${t.length} \u6761`,msgType:"markdown"});return}const m=[];for(const w of p)m.unshift(t.splice(w-1,1)[0]);const T=m.map(w=>`- **${w.senderNick||w.senderStaffId}:** ${this.truncateMsg(w.message)}`);let v=`\u2705 \u5DF2\u5220\u9664 ${m.length} \u6761\u6D88\u606F
85
+ `)}`,msgType:"markdown"})}return}case"front":{if(t.length===0){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F4ED} \u5F53\u524D\u65E0\u6392\u961F\u6D88\u606F",msgType:"markdown"});return}let g=t.length-1;for(let m=t.length-1;m>=0;m--)if(t[m].senderStaffId===r){g=m;break}if(g===0){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2139\uFE0F \u8BE5\u6D88\u606F\u5DF2\u5728\u961F\u9996\uFF0C\u65E0\u9700\u63D2\u961F",msgType:"markdown"});return}const[w]=t.splice(g,1);t.unshift(w),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u63D2\u961F\u5230\u961F\u9996
86
+ 1. **${w.senderNick||w.senderStaffId}:** ${this.truncateMsg(w.message)}`,msgType:"markdown"});return}case"rm":{if(t.length===0){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F4ED} \u5F53\u524D\u65E0\u6392\u961F\u6D88\u606F",msgType:"markdown"});return}if(e.all){const y=t.length;t.length=0,await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u6E05\u7A7A\u6D88\u606F\u961F\u5217\uFF0C\u5171\u79FB\u9664 ${y} \u6761\u6D88\u606F`,msgType:"markdown"});return}const g=[...new Set(e.indices)],w=g.filter(y=>y>=1&&y<=t.length).sort((y,P)=>P-y),m=g.filter(y=>y<1||y>t.length);if(w.length===0){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u5E8F\u53F7\u65E0\u6548\uFF0C\u5F53\u524D\u961F\u5217\u5171 ${t.length} \u6761`,msgType:"markdown"});return}const p=[];for(const y of w)p.unshift(t.splice(y-1,1)[0]);const T=p.map(y=>`- **${y.senderNick||y.senderStaffId}:** ${this.truncateMsg(y.message)}`);let v=`\u2705 \u5DF2\u5220\u9664 ${p.length} \u6761\u6D88\u606F
87
87
  ${T.join(`
88
- `)}`;u.length>0&&(v+=`
89
- \u26A0\uFE0F \u5DF2\u5FFD\u7565\u65E0\u6548\u5E8F\u53F7: ${u.join(", ")}`),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:v,msgType:"markdown"});return}}}),(0,I.route)("/!",()=>(0,$.parseInterruptCommand)(h),async()=>{const e=this.findActiveSession(s);if(!e){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u5F53\u524D\u6CA1\u6709\u6D3B\u8DC3\u4F1A\u8BDD"});return}const a=e.session;if(!a.currentProcess){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2139\uFE0F \u5F53\u524D\u6CA1\u6709\u6B63\u5728\u6267\u884C\u7684\u4EFB\u52A1"});return}(0,x.interruptClaudeProcess)(a,`/!: ${o} \u4E2D\u65AD\u5F53\u524D\u4EFB\u52A1`);const t=a.messageQueue.length;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:t>0?`\u23F9 \u5DF2\u4E2D\u65AD\u5F53\u524D\u4EFB\u52A1\uFF0C\u5F00\u59CB\u5904\u7406\u961F\u5217\u4E2D\u7684 ${t} \u6761\u6D88\u606F`:"\u23F9 \u5DF2\u4E2D\u65AD\u5F53\u524D\u4EFB\u52A1"})}),(0,I.route)("/goon",()=>(0,$.parseGoonCommand)(h),async()=>{const e=this.activeSessions.get(s);if(!e){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u5F53\u524D\u6CA1\u6709\u6D3B\u8DC3\u4F1A\u8BDD"});return}if(e.currentProcess){console.log(`[${(0,c.timestamp)()}] /goon: \u7EC8\u6B62\u5F53\u524D Claude \u8FDB\u7A0B`),e.interrupted=!0,(0,U.isWindows)()?e.currentProcess.kill():e.currentProcess.kill("SIGINT"),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F504} \u6B63\u5728\u91CD\u542F Claude \u8FDB\u7A0B..."}),e.goonPending=!1,e.isProcessing=!0;try{await(0,x.executeClaudeQuery)(this,e.session,"\u7EE7\u7EED",{senderNick:e.session.startNickName,senderStaffId:e.lastSenderStaffId,permissionMode:e.conversationConfig.permissionMode})}finally{e.isProcessing=!1}}else{console.log(`[${(0,c.timestamp)()}] /goon: \u65E0\u8FD0\u884C\u4E2D\u8FDB\u7A0B\uFF0C\u76F4\u63A5\u53D1\u9001"\u7EE7\u7EED"`),e.isProcessing=!0;try{await(0,x.executeClaudeQuery)(this,e.session,"\u7EE7\u7EED",{senderNick:o,senderStaffId:r,permissionMode:e.conversationConfig.permissionMode})}finally{e.isProcessing=!1}}}),(0,I.route)("/cc",()=>(0,$.parseCcCommand)(h),async e=>{const a=this.activeSessions.get(s);if(!a){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u5F53\u524D\u6CA1\u6709\u6D3B\u8DC3\u4F1A\u8BDD\uFF0C\u8BF7\u5148\u53D1\u9001\u6D88\u606F\u5F00\u59CB\u4F1A\u8BDD"});return}if(a.isProcessing){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u23F3 \u6B63\u5728\u5904\u7406\u4E2D\uFF0C\u8BF7\u7A0D\u7B49..."});return}a.isProcessing=!0;try{a.conversationConfig.receiveReply!==!1&&await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F4E5} \u5DF2\u6536\u5230\uFF0C\u6B63\u5728\u5904\u7406..."}).catch(()=>{}),await(0,x.executeClaudeQuery)(this,a.session,e,{senderNick:o,senderStaffId:r,permissionMode:a.conversationConfig.permissionMode})}finally{a.isProcessing=!1}}),(0,I.route)("/claude.md",()=>(0,$.parseClaudeMdCommand)(h),async()=>{const e=this.getConversationDir(s),a=R.default.join(e,".claude","CLAUDE.md");if(C.default.existsSync(a)){const t=C.default.readFileSync(a,"utf-8"),g=t.length>8e3?t.substring(0,8e3)+`
88
+ `)}`;m.length>0&&(v+=`
89
+ \u26A0\uFE0F \u5DF2\u5FFD\u7565\u65E0\u6548\u5E8F\u53F7: ${m.join(", ")}`),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:v,msgType:"markdown"});return}}}),(0,$.route)("/!",()=>(0,C.parseInterruptCommand)(h),async()=>{const e=this.findActiveSession(s);if(!e){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u5F53\u524D\u6CA1\u6709\u6D3B\u8DC3\u4F1A\u8BDD"});return}const a=e.session;if(!a.currentProcess){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u2139\uFE0F \u5F53\u524D\u6CA1\u6709\u6B63\u5728\u6267\u884C\u7684\u4EFB\u52A1"});return}(0,q.interruptClaudeProcess)(a,`/!: ${o} \u4E2D\u65AD\u5F53\u524D\u4EFB\u52A1`);const t=a.messageQueue.length;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:t>0?`\u23F9 \u5DF2\u4E2D\u65AD\u5F53\u524D\u4EFB\u52A1\uFF0C\u5F00\u59CB\u5904\u7406\u961F\u5217\u4E2D\u7684 ${t} \u6761\u6D88\u606F`:"\u23F9 \u5DF2\u4E2D\u65AD\u5F53\u524D\u4EFB\u52A1"})}),(0,$.route)("/goon",()=>(0,C.parseGoonCommand)(h),async()=>{const e=this.activeSessions.get(s);if(!e){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u5F53\u524D\u6CA1\u6709\u6D3B\u8DC3\u4F1A\u8BDD"});return}if(e.currentProcess){console.log(`[${(0,c.timestamp)()}] /goon: \u7EC8\u6B62\u5F53\u524D Claude \u8FDB\u7A0B`),e.interrupted=!0,(0,U.isWindows)()?e.currentProcess.kill():e.currentProcess.kill("SIGINT"),await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F504} \u6B63\u5728\u91CD\u542F Claude \u8FDB\u7A0B..."}),e.goonPending=!1,e.isProcessing=!0;try{await(0,q.executeClaudeQuery)(this,e.session,"\u7EE7\u7EED",{senderNick:e.session.startNickName,senderStaffId:e.lastSenderStaffId,permissionMode:e.conversationConfig.permissionMode})}finally{e.isProcessing=!1}}else{console.log(`[${(0,c.timestamp)()}] /goon: \u65E0\u8FD0\u884C\u4E2D\u8FDB\u7A0B\uFF0C\u76F4\u63A5\u53D1\u9001"\u7EE7\u7EED"`),e.isProcessing=!0;try{await(0,q.executeClaudeQuery)(this,e.session,"\u7EE7\u7EED",{senderNick:o,senderStaffId:r,permissionMode:e.conversationConfig.permissionMode})}finally{e.isProcessing=!1}}}),(0,$.route)("/cc",()=>(0,C.parseCcCommand)(h),async e=>{const a=this.activeSessions.get(s);if(!a){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u26A0\uFE0F \u5F53\u524D\u6CA1\u6709\u6D3B\u8DC3\u4F1A\u8BDD\uFF0C\u8BF7\u5148\u53D1\u9001\u6D88\u606F\u5F00\u59CB\u4F1A\u8BDD"});return}if(a.isProcessing){await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u23F3 \u6B63\u5728\u5904\u7406\u4E2D\uFF0C\u8BF7\u7A0D\u7B49..."});return}a.isProcessing=!0;try{a.conversationConfig.receiveReply!==!1&&await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:"\u{1F4E5} \u5DF2\u6536\u5230\uFF0C\u6B63\u5728\u5904\u7406..."}).catch(()=>{}),await(0,q.executeClaudeQuery)(this,a.session,e,{senderNick:o,senderStaffId:r,permissionMode:a.conversationConfig.permissionMode})}finally{a.isProcessing=!1}}),(0,$.route)("/claude.md",()=>(0,C.parseClaudeMdCommand)(h),async()=>{const e=this.getConversationDir(s),a=N.default.join(e,".claude","CLAUDE.md");if(k.default.existsSync(a)){const t=k.default.readFileSync(a,"utf-8"),g=t.length>8e3?t.substring(0,8e3)+`
90
90
  ...(\u5185\u5BB9\u8FC7\u957F\u5DF2\u622A\u65AD)`:t;await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u{1F4C4} **CLAUDE.md**
91
91
  \`\`\`
92
92
  ${g}
93
93
  \`\`\``,msgType:"markdown"})}else await this.sendDingMessage({conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u672A\u627E\u5230 CLAUDE.md
94
- \u8DEF\u5F84: \`${a}\``,msgType:"markdown"})})];for(const e of Y)if(await e.tryHandle())return;let q=h;const W=[];if(i.atUsers&&i.atUsers.length>0){const e=i.chatbotUserId;for(const a of i.atUsers){const t=a.staffId||a.dingtalkId;!t||t===r||t===e||t.startsWith("$:LWCP_v1:")||W.push(t)}}if(W.length>0)for(const e of W){const a=await(0,c.resolveUserIdName)(this,e),t=a?`${a}(${e})`:e;q=q.replace(/\u200b/g,t)}q.startsWith("/")&&!q.startsWith("/cc ")&&(q=` ${q}`),await this.handleSessionMessage({conversationId:s,sessionWebhook:n,senderStaffId:r,senderNick:o,message:q,conversationConfig:y})}async notifyPendingReboot(){const d=R.default.join(this.getClientDir(),".reboot_pending");if(C.default.existsSync(d))try{const i=JSON.parse(C.default.readFileSync(d,"utf-8"));C.default.unlinkSync(d);let o="\u2705 cc-ding \u5DF2\u91CD\u542F\u5B8C\u6210";i.update&&(o+=`
95
- **\u7248\u672C:** ${J}`);let r;const s=this.activeSessions.get(i.conversationId);if(s)r=s.session.sessionWebhook;else if(i.sessionWebhook)r=i.sessionWebhook,console.log(`[${(0,c.timestamp)()}] \u91CD\u542F\u540E\u672A\u627E\u5230\u6D3B\u8DC3\u4F1A\u8BDD\uFF0C\u4F7F\u7528\u4FDD\u5B58\u7684 sessionWebhook \u53D1\u9001\u901A\u77E5`);else{console.log(`[${(0,c.timestamp)()}] \u91CD\u542F\u540E\u672A\u627E\u5230\u6D3B\u8DC3\u4F1A\u8BDD\u4E14\u65E0\u4FDD\u5B58\u7684 webhook\uFF0C\u8DF3\u8FC7\u901A\u77E5`);return}await this.sendDingMessage({conversationId:i.conversationId,sessionWebhook:r,content:o,msgType:"markdown",atUserId:i.senderStaffId}),console.log(`[${(0,c.timestamp)()}] \u91CD\u542F\u5B8C\u6210\u901A\u77E5\u5DF2\u53D1\u9001`)}catch(i){try{const o=C.default.readFileSync(d,"utf-8");console.error(`[${(0,c.timestamp)()}] .reboot_pending \u5185\u5BB9:`,o)}catch{}console.error(`[${(0,c.timestamp)()}] \u5904\u7406\u91CD\u542F\u901A\u77E5\u5931\u8D25:`,i);try{C.default.unlinkSync(d)}catch{}}}startConnectionWatchdog(){let o=Date.now();setInterval(()=>{const r=this.dingStreamClient;if(r.connected){o=Date.now();return}const s=Date.now()-o;if(s>=6e4){console.log(`[${(0,c.timestamp)()}] \u8FDE\u63A5\u76D1\u63A7: \u5DF2\u65AD\u5F00 ${s/1e3}s\uFF0C\u5F3A\u5236\u91CD\u65B0\u8FDE\u63A5`),o=Date.now();try{r.disconnect()}catch{}r.connect().catch(l=>{console.error(`[${(0,c.timestamp)()}] \u5F3A\u5236\u91CD\u8FDE\u5931\u8D25:`,l)})}else this.debugLog(`\u8FDE\u63A5\u76D1\u63A7: \u5DF2\u65AD\u5F00 ${s/1e3}s\uFF0C\u7B49\u5F85\u81EA\u52A8\u91CD\u8FDE...`)},3e4)}async run(){const d=Array.isArray(this.config.conversations)?this.config.conversations:[],i=this.config.taskHandlerCount??this.DEFAULT_TASK_HANDLER_COUNT,o=d.length>0;console.log(`[${(0,c.timestamp)()}] \u9489\u9489\u673A\u5668\u4EBA\u670D\u52A1\u542F\u52A8\uFF0CclientId: ${this.clientId}`),console.log(`[${(0,c.timestamp)()}] \u7FA4\u914D\u7F6E: ${d.map(l=>l.conversationTitle||l.conversationId).join(", ")}`),(0,S.startupCheck)(this),await(0,c.resolveAllPhonesInConfig)(this),this.config.apiKeyCfg&&((0,S.resetApiKeyCfg)(this),(0,S.scheduleApiKeyCfgDailyReset)(this)),this.loadActiveSessions(),(0,x.injectStartupContexts)(this),await this.notifyPendingReboot(),this.cronEngine.start(),(0,L.startSelectionCleanupTimer)(),this.startConnectionWatchdog(),o&&console.log(`[${(0,c.timestamp)()}] \u4EFB\u52A1\u5904\u7406\u5668\u6570\u91CF: ${i}`),this.dingStreamClient.registerCallbackListener("/v1.0/im/bot/messages/get",async l=>{await this.botMsgGetCallback(l)});const r=[];if(o)for(let l=0;l<i;l++)console.log(`[${(0,c.timestamp)()}] \u542F\u52A8\u4EFB\u52A1\u5904\u7406\u5668 #${l+1}`),r.push(this.runTaskHandlerLoop().catch(n=>console.error(`\u4EFB\u52A1\u5904\u7406\u5668 #${l+1} \u9519\u8BEF:`,n)));const s=this.dingStreamClient.connect().catch(l=>{console.error("Fatal error",l),process.exit(1)});await Promise.all([s,...r])}}exports.DingClaude=se;
94
+ \u8DEF\u5F84: \`${a}\``,msgType:"markdown"})})];for(const e of Y)if(await e.tryHandle())return;let A=h;const H=[];if(i.atUsers&&i.atUsers.length>0){const e=i.chatbotUserId;for(const a of i.atUsers){const t=a.staffId||a.dingtalkId;!t||t===r||t===e||t.startsWith("$:LWCP_v1:")||H.push(t)}}if(H.length>0)for(const e of H){const a=await(0,c.resolveUserIdName)(this,e),t=a?`${a}(${e})`:e;A=A.replace(/\u200b/g,t)}A.startsWith("/")&&!A.startsWith("/cc ")&&(A=` ${A}`),await this.handleSessionMessage({conversationId:s,sessionWebhook:n,senderStaffId:r,senderNick:o,message:A,conversationConfig:f})}async notifyPendingReboot(){const d=N.default.join(this.getClientDir(),".reboot_pending");if(k.default.existsSync(d))try{const i=JSON.parse(k.default.readFileSync(d,"utf-8"));k.default.unlinkSync(d);let o="\u2705 cc-ding \u5DF2\u91CD\u542F\u5B8C\u6210";i.update&&(o+=`
95
+ **\u7248\u672C:** ${Q}`);let r;const s=this.activeSessions.get(i.conversationId);if(s)r=s.session.sessionWebhook;else if(i.sessionWebhook)r=i.sessionWebhook,console.log(`[${(0,c.timestamp)()}] \u91CD\u542F\u540E\u672A\u627E\u5230\u6D3B\u8DC3\u4F1A\u8BDD\uFF0C\u4F7F\u7528\u4FDD\u5B58\u7684 sessionWebhook \u53D1\u9001\u901A\u77E5`);else{console.log(`[${(0,c.timestamp)()}] \u91CD\u542F\u540E\u672A\u627E\u5230\u6D3B\u8DC3\u4F1A\u8BDD\u4E14\u65E0\u4FDD\u5B58\u7684 webhook\uFF0C\u8DF3\u8FC7\u901A\u77E5`);return}await this.sendDingMessage({conversationId:i.conversationId,sessionWebhook:r,content:o,msgType:"markdown",atUserId:i.senderStaffId}),console.log(`[${(0,c.timestamp)()}] \u91CD\u542F\u5B8C\u6210\u901A\u77E5\u5DF2\u53D1\u9001`)}catch(i){try{const o=k.default.readFileSync(d,"utf-8");console.error(`[${(0,c.timestamp)()}] .reboot_pending \u5185\u5BB9:`,o)}catch{}console.error(`[${(0,c.timestamp)()}] \u5904\u7406\u91CD\u542F\u901A\u77E5\u5931\u8D25:`,i);try{k.default.unlinkSync(d)}catch{}}}startConnectionWatchdog(){let o=Date.now();setInterval(()=>{const r=this.dingStreamClient;if(r.connected){o=Date.now();return}const s=Date.now()-o;if(s>=6e4){console.log(`[${(0,c.timestamp)()}] \u8FDE\u63A5\u76D1\u63A7: \u5DF2\u65AD\u5F00 ${s/1e3}s\uFF0C\u5F3A\u5236\u91CD\u65B0\u8FDE\u63A5`),o=Date.now();try{r.disconnect()}catch{}r.connect().catch(l=>{console.error(`[${(0,c.timestamp)()}] \u5F3A\u5236\u91CD\u8FDE\u5931\u8D25:`,l)})}else this.debugLog(`\u8FDE\u63A5\u76D1\u63A7: \u5DF2\u65AD\u5F00 ${s/1e3}s\uFF0C\u7B49\u5F85\u81EA\u52A8\u91CD\u8FDE...`)},3e4)}async run(){const d=Array.isArray(this.config.conversations)?this.config.conversations:[],i=this.config.taskHandlerCount??this.DEFAULT_TASK_HANDLER_COUNT,o=d.length>0;console.log(`[${(0,c.timestamp)()}] \u9489\u9489\u673A\u5668\u4EBA\u670D\u52A1\u542F\u52A8\uFF0CclientId: ${this.clientId}`),console.log(`[${(0,c.timestamp)()}] \u7FA4\u914D\u7F6E: ${d.map(l=>l.conversationTitle||l.conversationId).join(", ")}`),(0,S.startupCheck)(this),await(0,c.resolveAllPhonesInConfig)(this),this.config.apiKeyCfg&&((0,S.resetApiKeyCfg)(this),(0,S.scheduleApiKeyCfgDailyReset)(this)),this.loadActiveSessions(),(0,q.injectStartupContexts)(this),await this.notifyPendingReboot(),this.cronEngine.start(),(0,L.startSelectionCleanupTimer)(),this.startConnectionWatchdog(),o&&console.log(`[${(0,c.timestamp)()}] \u4EFB\u52A1\u5904\u7406\u5668\u6570\u91CF: ${i}`),this.dingStreamClient.registerCallbackListener("/v1.0/im/bot/messages/get",async l=>{await this.botMsgGetCallback(l)});const r=[];if(o)for(let l=0;l<i;l++)console.log(`[${(0,c.timestamp)()}] \u542F\u52A8\u4EFB\u52A1\u5904\u7406\u5668 #${l+1}`),r.push(this.runTaskHandlerLoop().catch(n=>console.error(`\u4EFB\u52A1\u5904\u7406\u5668 #${l+1} \u9519\u8BEF:`,n)));const s=this.dingStreamClient.connect().catch(l=>{console.error("Fatal error",l),process.exit(1)});await Promise.all([s,...r])}}exports.DingClaude=se;
@@ -1,43 +1,57 @@
1
- "use strict";var q=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveClaudeSettingsPath=H,exports.isRetryableApiError=J,exports.parseClaudeStreamLine=ne,exports.interruptClaudeProcess=ye,exports.injectStartupContexts=Se,exports.injectSessionContextIfChanged=ae,exports.executeClaudeQuery=$e;const a=q(require("fs")),j=q(require("path")),ce=q(require("readline")),de=require("crypto"),E=require("./messaging"),n=require("./session"),$=require("./api-key-manager"),X=require("./secrets"),N=require("./platform"),P=20,K=1e4,G=1e4,B=10,Z=300*1e3,U=300*1e3,ue=30*1e3,Q=new Map;function H(e,t,o){const i=(0,$.getForceEnabledSettingsPath)(t);if(i)return i;if(e.config.apiKeyCfg){const f=(0,$.readApiKeyFromSettings)(t);let h=null;if(f&&(h=e.config.apiKeyCfg.claudeSettings.find(m=>(0,X.resolveSecret)(m.apiKey)===f&&m.isValid)||null),h||(h=(0,$.pickValidApiKey)(e)),h)return(0,$.ensureSettingsWithApiKey)(t,h)}if(e.config.apiKeyCfg)return;if(o)return o;const y=j.default.join(t,".claude","settings.json");if(a.default.existsSync(y))return console.log(`[${(0,n.timestamp)()}] \u81EA\u52A8\u68C0\u6D4B\u5230 settings.json: ${y}`),y}function J(e){if(/\b429\b/.test(e)&&!(0,$.isQuotaExhaustedError)(e)||/API\s*Error.*422/i.test(e)||/\b422\b.*(?:TPM|额度超限|rate\s*limit|tokens?\s*per\s*minute)/i.test(e)||/(?:TPM|额度超限).*\b422\b/i.test(e))return!0;const t=e.toLowerCase();return["rate limit","rate_limit","ratelimit","too many requests","tokens per minute","requests per minute","rpm limit","overloaded","capacity","temporarily unavailable"].some(i=>t.includes(i))}function le(e){return new Promise(t=>setTimeout(t,e))}class V extends Error{constructor(t,o=""){super(`Retryable API error (TPM limit etc.)${t?" [fast fail]":""}`),this.name="RetryableApiError",this.isFastFail=t,this.output=o}}class ee extends Error{constructor(){super("Claude conversation not found"),this.name="ConversationNotFoundError"}}class te extends Error{constructor(){super("Context window exceeded: prompt tokens exceed maximum context window"),this.name="ContextWindowExceededError"}}function pe(e,t){try{return a.default.readFileSync(e,"utf-8").split(`
1
+ "use strict";var B=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveClaudeSettingsPath=J,exports.isRetryableApiError=V,exports.parseClaudeStreamLine=ie,exports.interruptClaudeProcess=Ce,exports.injectStartupContexts=Ie,exports.injectSessionContextIfChanged=ce,exports.refreshSessionContext=ve,exports.executeClaudeQuery=we;const a=B(require("fs")),O=B(require("path")),de=B(require("readline")),ue=require("child_process"),le=require("util"),pe=require("crypto"),fe=(0,le.promisify)(ue.exec),R=require("./messaging"),n=require("./session"),y=require("./api-key-manager"),Z=require("./secrets"),j=require("./platform"),F=20,L=1e4,ee=1e4,H=10,te=300*1e3,Y=300*1e3,ge=30*1e3,Q=new Map;function J(e,t,o){const s=(0,y.getForceEnabledSettingsPath)(t);if(s)return s;if(e.config.apiKeyCfg){const u=(0,y.readApiKeyFromSettings)(t);let $=null;if(u&&($=e.config.apiKeyCfg.claudeSettings.find(p=>(0,Z.resolveSecret)(p.apiKey)===u&&p.isValid)||null),$||($=(0,y.pickValidApiKey)(e)),$)return(0,y.ensureSettingsWithApiKey)(t,$)}if(e.config.apiKeyCfg)return;if(o)return o;const l=O.default.join(t,".claude","settings.json");if(a.default.existsSync(l))return console.log(`[${(0,n.timestamp)()}] \u81EA\u52A8\u68C0\u6D4B\u5230 settings.json: ${l}`),l}function V(e){if(/\b429\b/.test(e)&&!(0,y.isQuotaExhaustedError)(e)||/API\s*Error.*422/i.test(e)||/\b422\b.*(?:TPM|额度超限|rate\s*limit|tokens?\s*per\s*minute)/i.test(e)||/(?:TPM|额度超限).*\b422\b/i.test(e))return!0;const t=e.toLowerCase();return["rate limit","rate_limit","ratelimit","too many requests","tokens per minute","requests per minute","rpm limit","overloaded","capacity","temporarily unavailable"].some(s=>t.includes(s))}function me(e){return new Promise(t=>setTimeout(t,e))}class z extends Error{constructor(t,o=""){super(`Retryable API error (TPM limit etc.)${t?" [fast fail]":""}`),this.name="RetryableApiError",this.isFastFail=t,this.output=o}}class ne extends Error{constructor(){super("Claude conversation not found"),this.name="ConversationNotFoundError"}}class oe extends Error{constructor(){super("Context window exceeded: prompt tokens exceed maximum context window"),this.name="ContextWindowExceededError"}}function ye(e,t){try{return a.default.readFileSync(e,"utf-8").split(`
2
2
  `).filter(Boolean).slice(-t).join(`
3
- `)}catch{return""}}function fe(e){return/prompt tokens?\s*\(\s*\d+\s*\)\s*exceeds/i.test(e)||/exceeds?.*maximum context window/i.test(e)}function me(e){const t=e.toLowerCase();return["permission denied","permission_required","needs permission","requires permission","authorization required","authorize","not authorized","access denied","\u9700\u8981\u6388\u6743","\u6743\u9650\u4E0D\u8DB3","\u6CA1\u6709\u6743\u9650"].some(i=>t.includes(i))}function ge(e){return/no conversation found with session id/i.test(e)}function ne(e,t=!1){if(!e.trim())return null;try{const o=JSON.parse(e);if(o.type==="system"&&o.subtype==="init"&&o.session_id)return{type:"system",sessionId:o.session_id};if(o.type==="assistant"){const i=o.message?.content;if(Array.isArray(i)){const y=[];for(const f of i)f.type==="text"&&f.text?y.push(f.text):f.type==="thinking"&&f.thinking&&t&&y.push(`\u{1F4AD} **\u601D\u8003\u8FC7\u7A0B**
3
+ `)}catch{return""}}function Se(e){return/prompt tokens?\s*\(\s*\d+\s*\)\s*exceeds/i.test(e)||/exceeds?.*maximum context window/i.test(e)}function $e(e){const t=e.toLowerCase();return["permission denied","permission_required","needs permission","requires permission","authorization required","authorize","not authorized","access denied","\u9700\u8981\u6388\u6743","\u6743\u9650\u4E0D\u8DB3","\u6CA1\u6709\u6743\u9650"].some(s=>t.includes(s))}function he(e){return/no conversation found with session id/i.test(e)}function ie(e,t=!1){if(!e.trim())return null;try{const o=JSON.parse(e);if(o.type==="system"&&o.subtype==="init"&&o.session_id)return{type:"system",sessionId:o.session_id};if(o.type==="assistant"){const s=o.message?.content;if(Array.isArray(s)){const l=[];for(const u of s)u.type==="text"&&u.text?l.push(u.text):u.type==="thinking"&&u.thinking&&t&&l.push(`\u{1F4AD} **\u601D\u8003\u8FC7\u7A0B**
4
4
  \`\`\`
5
- ${f.thinking}
6
- \`\`\``);if(y.length>0)return{type:"assistant",content:y.join(`
7
- `)}}else if(o.content)return{type:"assistant",content:typeof o.content=="string"?o.content:JSON.stringify(o.content)};return{type:"assistant"}}if(o.type==="result"){const i=o.result||"";return{type:"result",content:typeof i=="string"?i:JSON.stringify(i)}}return{type:o.type||"unknown"}}catch{return{type:"text",content:e}}}function ye(e,t){return e.currentProcess?(console.log(`[${(0,n.timestamp)()}] ${t}`),e.interrupted=!0,(0,N.isWindows)()?e.currentProcess.kill():e.currentProcess.kill("SIGINT"),!0):!1}function oe(e,t,o,i,y,f,h){let m=e.getSessionDir(t),I=`${m}/session.log`;a.default.existsSync(m)||a.default.mkdirSync(m,{recursive:!0});const T=Date.now();return new Promise((g,C)=>{const S=(0,N.spawnCommand)(i,o,{cwd:y,stdio:["pipe","pipe","pipe"]}),A=e.activeSessions.get(t.conversationId);A&&(A.currentProcess=S,A.lastActivityTime=Date.now()),a.default.appendFileSync(I,`[${(0,n.timestamp)()}] [SYSTEM]: Claude \u67E5\u8BE2\u542F\u52A8${h?" (\u91CD\u8BD5)":""}
8
- `,"utf-8"),S.stdin?.write(`${f}
9
- `),S.stdin?.end();let Y=!h&&!!t.claudeSessionId,M=[],x="",O="",D=!1,W=!1,l=null;const k=new Set,R=()=>{A&&(A.lastActivityTime=Date.now())};l=setInterval(()=>{if(W){l&&clearInterval(l);return}const p=A?.lastActivityTime??T;if(Date.now()-p>=U){console.warn(`[${(0,n.timestamp)()}] Watchdog: Claude \u8FDB\u7A0B ${U/1e3}s \u65E0\u6D3B\u52A8\uFF0C\u901A\u77E5\u7528\u6237`);try{a.default.appendFileSync(I,`[${(0,n.timestamp)()}] [SYSTEM]: Watchdog \u8D85\u65F6\uFF0C${U/1e3}s \u65E0\u6D3B\u52A8\uFF0C\u5DF2\u901A\u77E5\u7528\u6237
10
- `,"utf-8")}catch{}l&&clearInterval(l),l=null;const c=A?.lastSenderStaffId||t.startStaffId;(0,E.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:c,content:`\u23F0 Claude \u8FDB\u7A0B\u8D85\u8FC7 ${U/1e3}s \u65E0\u54CD\u5E94\uFF0C\u53EF\u53D1\u9001 /goon \u5F3A\u5236\u91CD\u542F\u6062\u590D\uFF0C\u6216 /end \u7ED3\u675F\u4F1A\u8BDD`}).catch(d=>console.error("\u53D1\u9001 Watchdog \u901A\u77E5\u5931\u8D25:",d))}},ue),ce.default.createInterface({input:S.stdout}).on("line",p=>{if(O+=p+`
11
- `,R(),e.debugLog(`Claude stdout: ${p.substring(0,200)}${p.length>200?"...":""}`),e.config.debug)try{a.default.appendFileSync(I,`[${(0,n.timestamp)()}] [RAW]: ${p}
12
- `,"utf-8")}catch{}const r=ne(p,e.config.includeThinking??!1);if(r){if(r.type==="system"&&r.sessionId&&!Y&&(e.updateSessionFile(t,{claudeSessionId:r.sessionId}),Y=!0,m=e.getSessionDir(t),I=`${m}/session.log`),r.type==="assistant"){try{const d=JSON.parse(p)?.message?.content;if(Array.isArray(d)){for(const s of d)if(s.type==="tool_use"&&s.id&&!k.has(s.id)){k.add(s.id);const v=s.name||"unknown";let u="";s.input&&(s.input.command?u=s.input.command.substring(0,200):s.input.file_path?u=s.input.file_path:s.input.pattern?u=s.input.pattern:s.input.query?u=s.input.query:s.input.description?u=s.input.description:s.input.prompt?u=s.input.prompt.substring(0,200):u=JSON.stringify(s.input).substring(0,200)),e.appendSessionLog(m,"tool",`${v}${u?": "+u:""}`)}}}catch{}r.content&&M.push(r.content)}if(r.type==="result"){const c=e.config.resultOnly??!0,d=(r.content||"").trim(),s=M.join(`
13
- `).trim(),v=c&&d||s;if(v&&!A?.interrupted){try{e.appendSessionLog(m,"assistant",v)}catch{}const w=e.activeSessions.get(t.conversationId)?.lastSenderStaffId||t.startStaffId;D=!0,(0,E.sendClaudeResponseToDing)(e,(0,n.getReplyConversationId)(t),(0,n.getReplyWebhook)(t),w,v).catch(b=>console.error("\u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",b))}else console.warn(`[${(0,n.timestamp)()}] Claude \u8FD4\u56DE\u4E86\u7A7A\u7684 result \u4E14 responseBuffer \u4E5F\u4E3A\u7A7A\uFF0C\u65E0\u5185\u5BB9\u53EF\u53D1\u9001`);M=[]}}}),S.stderr?.on("data",p=>{const r=p.toString();if(x+=r,R(),(0,$.isQuotaExhaustedError)(r)){console.log(`[${(0,n.timestamp)()}] [Claude stderr] \u914D\u989D\u8017\u5C3D\u9519\u8BEF(429): ${r.trim()}`);try{a.default.appendFileSync(I,`[${(0,n.timestamp)()}] [WARN]: ${r}`,"utf-8")}catch{}}else if(J(r)){console.log(`[${(0,n.timestamp)()}] [Claude stderr] \u53EF\u91CD\u8BD5API\u9519\u8BEF(422 TPM\u9650\u6D41): ${r.trim()}`);try{a.default.appendFileSync(I,`[${(0,n.timestamp)()}] [WARN]: ${r}`,"utf-8")}catch{}}else{console.error(`[Claude stderr]: ${r}`);try{a.default.appendFileSync(I,`[${(0,n.timestamp)()}] [ERROR]: ${r}`,"utf-8")}catch{}}}),S.on("close",p=>{W=!0,l&&(clearInterval(l),l=null),console.log(`[${(0,n.timestamp)()}] Claude \u8FDB\u7A0B\u9000\u51FA\uFF0C\u4EE3\u7801: ${p}`);try{a.default.appendFileSync(I,`[${(0,n.timestamp)()}] [SYSTEM]: Claude \u67E5\u8BE2\u7ED3\u675F\uFF0C\u9000\u51FA\u7801: ${p}
14
- `,"utf-8")}catch{}const r=e.activeSessions.get(t.conversationId);if(r&&(r.currentProcess=void 0),r?.interrupted){console.log(`[${(0,n.timestamp)()}] \u7528\u6237\u4E3B\u52A8\u4E2D\u65AD\uFF0C\u4E22\u5F03 responseBuffer (${M.length} \u6BB5)`),r.interrupted=!1,M=[],g(0);return}if(M.length>0){const d=M.join(`
15
- `).trim();if(d){try{e.appendSessionLog(m,"assistant",d)}catch{}const s=r?.lastSenderStaffId||t.startStaffId;D=!0,(0,E.sendClaudeResponseToDing)(e,(0,n.getReplyConversationId)(t),(0,n.getReplyWebhook)(t),s,d).catch(v=>console.error("\u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",v))}}if(p===0&&!D&&!r?.interrupted){console.warn(`[${(0,n.timestamp)()}] Claude \u8FDB\u7A0B\u6B63\u5E38\u9000\u51FA\u4F46\u672A\u4EA7\u751F\u4EFB\u4F55\u56DE\u590D\u5185\u5BB9`);try{a.default.appendFileSync(I,`[${(0,n.timestamp)()}] [WARN]: Claude \u8FDB\u7A0B\u6B63\u5E38\u9000\u51FA\u4F46\u672A\u4EA7\u751F\u4EFB\u4F55\u56DE\u590D\u5185\u5BB9
16
- `,"utf-8")}catch{}const d=r?.lastSenderStaffId||t.startStaffId;(0,E.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:d,content:"\u26A0\uFE0F Claude \u5904\u7406\u5B8C\u6210\u4F46\u672A\u8FD4\u56DE\u4EFB\u4F55\u5185\u5BB9"}).catch(s=>console.error("\u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",s))}if(p===0){g(0);return}const c=x+`
17
- `+O;if((0,$.isQuotaExhaustedError)(c)){const s=Date.now()-T<G;console.log(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230\u914D\u989D\u8017\u5C3D\u9519\u8BEF(429)\uFF0Cstdout\u5339\u914D=${(0,$.isQuotaExhaustedError)(O)}, stderr\u5339\u914D=${(0,$.isQuotaExhaustedError)(x)}`),C(new V(s,c));return}if((0,$.isAuthenticationError)(c)){console.log(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230\u8BA4\u8BC1\u9519\u8BEF(401)\uFF0C\u901A\u77E5\u7528\u6237`);const d=r?.lastSenderStaffId||t.startStaffId;(0,E.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:d,content:"\u26A0\uFE0F \u8BA4\u8BC1\u5931\u8D25(401)\uFF0CAPI Key \u65E0\u6548\u6216\u670D\u52A1\u672A\u6388\u6743\uFF0C\u8BF7\u68C0\u67E5\u914D\u7F6E"}).catch(s=>console.error("\u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",s)),g(p??1);return}if(J(c)){const s=Date.now()-T<G;C(new V(s,c));return}if(me(c)){console.log(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230\u9700\u8981\u6388\u6743\uFF0C\u901A\u77E5\u7528\u6237`);const d=r?.lastSenderStaffId||t.startStaffId;(0,E.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:d,content:"\u26A0\uFE0F Claude \u9700\u8981\u6388\u6743\uFF0C\u8BF7\u4EBA\u5DE5\u4ECB\u5165"}).catch(s=>console.error("\u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",s)),g(p??1);return}if(t.claudeSessionId&&ge(c)){console.log(`[${(0,n.timestamp)()}] Claude \u4F1A\u8BDD\u5DF2\u5931\u6548: ${t.claudeSessionId}\uFF0C\u901A\u77E5\u5916\u5C42\u91CD\u65B0\u53D1\u8D77\u65B0\u4F1A\u8BDD`),C(new ee);return}if(fe(c)){console.log(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230\u4E0A\u4E0B\u6587\u7A97\u53E3\u8D85\u957F\u9519\u8BEF(400)\uFF0C\u5C06\u81EA\u52A8\u53D1\u9001 /compact \u538B\u7F29\u4E0A\u4E0B\u6587`);try{a.default.appendFileSync(I,`[${(0,n.timestamp)()}] [SYSTEM]: \u4E0A\u4E0B\u6587\u7A97\u53E3\u8D85\u957F\uFF0C\u5C06\u81EA\u52A8 /compact
18
- `,"utf-8")}catch{}C(new te);return}C(new Error(`Claude \u8FDB\u7A0B\u9000\u51FA\uFF0C\u4EE3\u7801: ${p}`))}),S.on("error",p=>{W=!0,l&&(clearInterval(l),l=null),console.error("Claude \u8FDB\u7A0B\u9519\u8BEF:",p),a.default.appendFileSync(I,`[${(0,n.timestamp)()}] [ERROR]: \u8FDB\u7A0B\u9519\u8BEF: ${p.message}
19
- `,"utf-8"),C(p)})})}const ie="<!-- cc-ding:session-context-start (DO NOT EDIT) -->",z="<!-- cc-ding:session-context-end (DO NOT EDIT) -->";function se(e,t){const o=e.getConversationConfig(t),i=e.config;return[ie,"# cc-ding Session Context","","## Client",`- clientId: \`${e.clientId}\``,i.clientName?`- clientName: ${i.clientName}`:"",`- owner: ${i.owner}`,"","## Conversation",`- conversationId: \`${t}\``,o?.conversationType?`- conversationType: ${o.conversationType==="1"?"\u5355\u804A":"\u7FA4\u804A"}`:"",o?.conversationTitle?`- conversationTitle: ${o.conversationTitle}`:"",o?.linkConversationId?`- linkConversationId: \`${o.linkConversationId}\` (\u5173\u8054\u7FA4\uFF0C\u5171\u4EAB\u5DE5\u4F5C\u76EE\u5F55)`:"","","## Settings",o?.permissionMode?`- permissionMode: ${o.permissionMode}`:"",o?.agent?`- agent: ${o.agent}`:"",o?.taskCfg?.skill?`- taskCfg.skill: ${o.taskCfg.skill}`:"",i.resultOnly!==void 0?`- resultOnly: ${i.resultOnly}`:"",i.includeThinking!==void 0?`- includeThinking: ${i.includeThinking}`:"",i.preBash?`- preBash(\u5168\u5C40): \`${i.preBash}\``:"",o?.preBash?`- preBash(\u7FA4): \`${o.preBash}\``:"","","## DingTalk Context",'\u5F53 prompt \u4E2D\u5305\u542B "\u6D88\u606F\u6765\u81EA: xxx(\u7528\u6237ID)" \u65F6\uFF0C\u8BF4\u660E\u6D88\u606F\u6765\u81EA\u9489\u9489\u7528\u6237\u3002',"- \u56DE\u7B54\u65F6\u8981\u8003\u8651\u7528\u6237\u7684\u4F7F\u7528\u573A\u666F\uFF08\u9489\u9489\u804A\u5929\u754C\u9762\uFF0C\u975E\u7EC8\u7AEF\u73AF\u5883\uFF09","- \u7528\u6237\u4E00\u822C\u60C5\u51B5\u4E0B\u53EA\u80FD\u901A\u8FC7 cc-ding \u8FDB\u884C\u64CD\u4F5C","- cc-ding \u6587\u6863: https://github.com/yihuineng/cc-ding",z].filter(Boolean).join(`
5
+ ${u.thinking}
6
+ \`\`\``);if(l.length>0)return{type:"assistant",content:l.join(`
7
+ `)}}else if(o.content)return{type:"assistant",content:typeof o.content=="string"?o.content:JSON.stringify(o.content)};return{type:"assistant"}}if(o.type==="result"){const s=o.result||"";return{type:"result",content:typeof s=="string"?s:JSON.stringify(s)}}return{type:o.type||"unknown"}}catch{return{type:"text",content:e}}}function Ce(e,t){return e.currentProcess?(console.log(`[${(0,n.timestamp)()}] ${t}`),e.interrupted=!0,(0,j.isWindows)()?e.currentProcess.kill():e.currentProcess.kill("SIGINT"),!0):!1}function se(e,t,o,s,l,u,$){let p=e.getSessionDir(t),h=`${p}/session.log`;a.default.existsSync(p)||a.default.mkdirSync(p,{recursive:!0});const T=Date.now();return new Promise((A,f)=>{const w=(0,j.spawnCommand)(s,o,{cwd:l,stdio:["pipe","pipe","pipe"]}),g=e.activeSessions.get(t.conversationId);g&&(g.currentProcess=w,g.lastActivityTime=Date.now()),a.default.appendFileSync(h,`[${(0,n.timestamp)()}] [SYSTEM]: Claude \u67E5\u8BE2\u542F\u52A8${$?" (\u91CD\u8BD5)":""}
8
+ `,"utf-8"),w.stdin?.write(`${u}
9
+ `),w.stdin?.end();let q=!$&&!!t.claudeSessionId,P=[],_="",k="",W=!1,N=!1,C=null;const E=new Set,b=()=>{g&&(g.lastActivityTime=Date.now())};C=setInterval(()=>{if(N){C&&clearInterval(C);return}const d=g?.lastActivityTime??T;if(Date.now()-d>=Y){console.warn(`[${(0,n.timestamp)()}] Watchdog: Claude \u8FDB\u7A0B ${Y/1e3}s \u65E0\u6D3B\u52A8\uFF0C\u901A\u77E5\u7528\u6237`);try{a.default.appendFileSync(h,`[${(0,n.timestamp)()}] [SYSTEM]: Watchdog \u8D85\u65F6\uFF0C${Y/1e3}s \u65E0\u6D3B\u52A8\uFF0C\u5DF2\u901A\u77E5\u7528\u6237
10
+ `,"utf-8")}catch{}C&&clearInterval(C),C=null;const I=g?.lastSenderStaffId||t.startStaffId;(0,R.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:I,content:`\u23F0 Claude \u8FDB\u7A0B\u8D85\u8FC7 ${Y/1e3}s \u65E0\u54CD\u5E94\uFF0C\u53EF\u53D1\u9001 /goon \u5F3A\u5236\u91CD\u542F\u6062\u590D\uFF0C\u6216 /end \u7ED3\u675F\u4F1A\u8BDD`}).catch(r=>console.error("\u53D1\u9001 Watchdog \u901A\u77E5\u5931\u8D25:",r))}},ge),de.default.createInterface({input:w.stdout}).on("line",d=>{if(k+=d+`
11
+ `,b(),e.debugLog(`Claude stdout: ${d.substring(0,200)}${d.length>200?"...":""}`),e.config.debug)try{a.default.appendFileSync(h,`[${(0,n.timestamp)()}] [RAW]: ${d}
12
+ `,"utf-8")}catch{}const c=ie(d,e.config.includeThinking??!1);if(c){if(c.type==="system"&&c.sessionId&&!q&&(e.updateSessionFile(t,{claudeSessionId:c.sessionId}),q=!0,p=e.getSessionDir(t),h=`${p}/session.log`),c.type==="assistant"){try{const r=JSON.parse(d)?.message?.content;if(Array.isArray(r)){for(const i of r)if(i.type==="tool_use"&&i.id&&!E.has(i.id)){E.add(i.id);const S=i.name||"unknown";let m="";i.input&&(i.input.command?m=i.input.command.substring(0,200):i.input.file_path?m=i.input.file_path:i.input.pattern?m=i.input.pattern:i.input.query?m=i.input.query:i.input.description?m=i.input.description:i.input.prompt?m=i.input.prompt.substring(0,200):m=JSON.stringify(i.input).substring(0,200)),e.appendSessionLog(p,"tool",`${S}${m?": "+m:""}`)}}}catch{}c.content&&P.push(c.content)}if(c.type==="result"){const I=e.config.resultOnly??!0,r=(c.content||"").trim(),i=P.join(`
13
+ `).trim(),S=I&&r||i;if(S&&!g?.interrupted){try{e.appendSessionLog(p,"assistant",S)}catch{}const v=e.activeSessions.get(t.conversationId)?.lastSenderStaffId||t.startStaffId;W=!0,(0,R.sendClaudeResponseToDing)(e,(0,n.getReplyConversationId)(t),(0,n.getReplyWebhook)(t),v,S).catch(M=>console.error("\u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",M))}else console.warn(`[${(0,n.timestamp)()}] Claude \u8FD4\u56DE\u4E86\u7A7A\u7684 result \u4E14 responseBuffer \u4E5F\u4E3A\u7A7A\uFF0C\u65E0\u5185\u5BB9\u53EF\u53D1\u9001`);P=[]}}}),w.stderr?.on("data",d=>{const c=d.toString();if(_+=c,b(),(0,y.isQuotaExhaustedError)(c)){console.log(`[${(0,n.timestamp)()}] [Claude stderr] \u914D\u989D\u8017\u5C3D\u9519\u8BEF(429): ${c.trim()}`);try{a.default.appendFileSync(h,`[${(0,n.timestamp)()}] [WARN]: ${c}`,"utf-8")}catch{}}else if(V(c)){console.log(`[${(0,n.timestamp)()}] [Claude stderr] \u53EF\u91CD\u8BD5API\u9519\u8BEF(422 TPM\u9650\u6D41): ${c.trim()}`);try{a.default.appendFileSync(h,`[${(0,n.timestamp)()}] [WARN]: ${c}`,"utf-8")}catch{}}else{console.error(`[Claude stderr]: ${c}`);try{a.default.appendFileSync(h,`[${(0,n.timestamp)()}] [ERROR]: ${c}`,"utf-8")}catch{}}}),w.on("close",d=>{N=!0,C&&(clearInterval(C),C=null),console.log(`[${(0,n.timestamp)()}] Claude \u8FDB\u7A0B\u9000\u51FA\uFF0C\u4EE3\u7801: ${d}`);try{a.default.appendFileSync(h,`[${(0,n.timestamp)()}] [SYSTEM]: Claude \u67E5\u8BE2\u7ED3\u675F\uFF0C\u9000\u51FA\u7801: ${d}
14
+ `,"utf-8")}catch{}const c=e.activeSessions.get(t.conversationId);if(c&&(c.currentProcess=void 0),c?.interrupted){console.log(`[${(0,n.timestamp)()}] \u7528\u6237\u4E3B\u52A8\u4E2D\u65AD\uFF0C\u4E22\u5F03 responseBuffer (${P.length} \u6BB5)`),c.interrupted=!1,P=[],A(0);return}if(P.length>0){const r=P.join(`
15
+ `).trim();if(r){try{e.appendSessionLog(p,"assistant",r)}catch{}const i=c?.lastSenderStaffId||t.startStaffId;W=!0,(0,R.sendClaudeResponseToDing)(e,(0,n.getReplyConversationId)(t),(0,n.getReplyWebhook)(t),i,r).catch(S=>console.error("\u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",S))}}if(d===0&&!W&&!c?.interrupted){console.warn(`[${(0,n.timestamp)()}] Claude \u8FDB\u7A0B\u6B63\u5E38\u9000\u51FA\u4F46\u672A\u4EA7\u751F\u4EFB\u4F55\u56DE\u590D\u5185\u5BB9`);try{a.default.appendFileSync(h,`[${(0,n.timestamp)()}] [WARN]: Claude \u8FDB\u7A0B\u6B63\u5E38\u9000\u51FA\u4F46\u672A\u4EA7\u751F\u4EFB\u4F55\u56DE\u590D\u5185\u5BB9
16
+ `,"utf-8")}catch{}const r=c?.lastSenderStaffId||t.startStaffId;(0,R.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:r,content:"\u26A0\uFE0F Claude \u5904\u7406\u5B8C\u6210\u4F46\u672A\u8FD4\u56DE\u4EFB\u4F55\u5185\u5BB9"}).catch(i=>console.error("\u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",i))}if(d===0){A(0);return}const I=_+`
17
+ `+k;if((0,y.isQuotaExhaustedError)(I)){const i=Date.now()-T<ee;console.log(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230\u914D\u989D\u8017\u5C3D\u9519\u8BEF(429)\uFF0Cstdout\u5339\u914D=${(0,y.isQuotaExhaustedError)(k)}, stderr\u5339\u914D=${(0,y.isQuotaExhaustedError)(_)}`),f(new z(i,I));return}if((0,y.isAuthenticationError)(I)){console.log(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230\u8BA4\u8BC1\u9519\u8BEF(401)\uFF0C\u901A\u77E5\u7528\u6237`);const r=c?.lastSenderStaffId||t.startStaffId;(0,R.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:r,content:"\u26A0\uFE0F \u8BA4\u8BC1\u5931\u8D25(401)\uFF0CAPI Key \u65E0\u6548\u6216\u670D\u52A1\u672A\u6388\u6743\uFF0C\u8BF7\u68C0\u67E5\u914D\u7F6E"}).catch(i=>console.error("\u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",i)),A(d??1);return}if(V(I)){const i=Date.now()-T<ee;f(new z(i,I));return}if($e(I)){console.log(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230\u9700\u8981\u6388\u6743\uFF0C\u901A\u77E5\u7528\u6237`);const r=c?.lastSenderStaffId||t.startStaffId;(0,R.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:r,content:"\u26A0\uFE0F Claude \u9700\u8981\u6388\u6743\uFF0C\u8BF7\u4EBA\u5DE5\u4ECB\u5165"}).catch(i=>console.error("\u53D1\u9001\u9489\u9489\u6D88\u606F\u5931\u8D25:",i)),A(d??1);return}if(t.claudeSessionId&&he(I)){console.log(`[${(0,n.timestamp)()}] Claude \u4F1A\u8BDD\u5DF2\u5931\u6548: ${t.claudeSessionId}\uFF0C\u901A\u77E5\u5916\u5C42\u91CD\u65B0\u53D1\u8D77\u65B0\u4F1A\u8BDD`),f(new ne);return}if(Se(I)){console.log(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230\u4E0A\u4E0B\u6587\u7A97\u53E3\u8D85\u957F\u9519\u8BEF(400)\uFF0C\u5C06\u81EA\u52A8\u53D1\u9001 /compact \u538B\u7F29\u4E0A\u4E0B\u6587`);try{a.default.appendFileSync(h,`[${(0,n.timestamp)()}] [SYSTEM]: \u4E0A\u4E0B\u6587\u7A97\u53E3\u8D85\u957F\uFF0C\u5C06\u81EA\u52A8 /compact
18
+ `,"utf-8")}catch{}f(new oe);return}f(new Error(`Claude \u8FDB\u7A0B\u9000\u51FA\uFF0C\u4EE3\u7801: ${d}`))}),w.on("error",d=>{N=!0,C&&(clearInterval(C),C=null),console.error("Claude \u8FDB\u7A0B\u9519\u8BEF:",d),a.default.appendFileSync(h,`[${(0,n.timestamp)()}] [ERROR]: \u8FDB\u7A0B\u9519\u8BEF: ${d.message}
19
+ `,"utf-8"),f(d)})})}const re="<!-- cc-ding:session-context-start (DO NOT EDIT) -->",G="<!-- cc-ding:session-context-end (DO NOT EDIT) -->";function X(e,t){const o=e.getConversationConfig(t),s=e.config;return[re,"# cc-ding Session Context","## Client",`- clientId: \`${e.clientId}\``,s.clientName?`- clientName: ${s.clientName}`:"",`- owner: ${s.owner}`,"## Conversation",`- conversationId: \`${t}\``,o?.conversationType?`- conversationType: ${o.conversationType==="1"?"\u5355\u804A":"\u7FA4\u804A"}`:"",o?.conversationTitle?`- conversationTitle: ${o.conversationTitle}`:"",o?.linkConversationId?`- linkConversationId: \`${o.linkConversationId}\` (\u5173\u8054\u7FA4\uFF0C\u5171\u4EAB\u5DE5\u4F5C\u76EE\u5F55)`:"","## Settings",o?.permissionMode?`- permissionMode: ${o.permissionMode}`:"",o?.agent?`- agent: ${o.agent}`:"",o?.taskCfg?.skill?`- taskCfg.skill: ${o.taskCfg.skill}`:"",s.resultOnly!==void 0?`- resultOnly: ${s.resultOnly}`:"",s.includeThinking!==void 0?`- includeThinking: ${s.includeThinking}`:"",s.preBash?`- preBash(\u5168\u5C40): \`${s.preBash}\``:"",o?.preBash?`- preBash(\u7FA4): \`${o.preBash}\``:"",o?.qaMode?"- qaMode: true (\u95EE\u7B54\u6A21\u5F0F\uFF0C\u4EC5\u56DE\u7B54\u95EE\u9898\uFF0C\u7981\u6B62\u6267\u884C\u547D\u4EE4\u3001\u5199\u5165\u6587\u4EF6\u6216\u8FD0\u884C\u4EE3\u7801)":"",o?.qaMode&&o.qaCfg?.docs?.length?`- qaDocs: ${o.qaCfg.docs.join(", ")}`:"","## DingTalk Context",'\u5F53 prompt \u4E2D\u5305\u542B "\u6D88\u606F\u6765\u81EA: xxx(\u7528\u6237ID)" \u65F6\uFF0C\u8BF4\u660E\u6D88\u606F\u6765\u81EA\u9489\u9489\u7528\u6237\u3002',"- \u56DE\u7B54\u65F6\u8981\u8003\u8651\u7528\u6237\u7684\u4F7F\u7528\u573A\u666F\uFF08\u9489\u9489\u804A\u5929\u754C\u9762\uFF0C\u975E\u7EC8\u7AEF\u73AF\u5883\uFF09","- \u7528\u6237\u4E00\u822C\u60C5\u51B5\u4E0B\u53EA\u80FD\u901A\u8FC7 cc-ding \u8FDB\u884C\u64CD\u4F5C","- cc-ding \u6587\u6863: https://github.com/yihuineng/cc-ding",G].filter(Boolean).join(`
20
20
  `)+`
21
- `}function re(e,t,o){const i=e.getConversationDir(t),y=j.default.join(i,".claude");a.default.existsSync(y)||a.default.mkdirSync(y,{recursive:!0});const f=j.default.join(y,"CLAUDE.md");if(!a.default.existsSync(f)){a.default.writeFileSync(f,o,"utf-8"),console.log(`[${(0,n.timestamp)()}] cc-ding \u4E0A\u4E0B\u6587\u5DF2\u6CE8\u5165 CLAUDE.md: ${f}`);return}const h=a.default.readFileSync(f,"utf-8"),m=h.indexOf(ie),I=h.indexOf(z);if(m!==-1&&I!==-1&&I>m){const T=h.substring(0,m),g=h.substring(I+z.length),C=T+o+g;a.default.writeFileSync(f,C,"utf-8"),console.log(`[${(0,n.timestamp)()}] cc-ding \u4E0A\u4E0B\u6587\u5DF2\u66F4\u65B0: ${f}`)}else a.default.writeFileSync(f,o+`
22
- `+h,"utf-8"),console.log(`[${(0,n.timestamp)()}] cc-ding \u4E0A\u4E0B\u6587\u5DF2\u8FFD\u52A0\u5230\u73B0\u6709 CLAUDE.md: ${f}`)}function Se(e){const t=Array.isArray(e.config.conversations)?e.config.conversations:[];for(const o of t){const i=se(e,o.conversationId);Q.set(o.conversationId,i),re(e,o.conversationId,i)}}function ae(e,t){const o=t.conversationId,i=se(e,o);Q.get(o)!==i&&(Q.set(o,i),re(e,o,i))}async function $e(e,t,o,i){const{skill:y,agent:f,senderNick:h,senderStaffId:m,newSessionId:I}=i||{};let T=e.getSessionDir(t),g=`${T}/session.log`;const C=e.getConversationDir(t.conversationId);ae(e,t),a.default.mkdirSync(T,{recursive:!0});let S=null;const A=(0,$.readApiKeyFromSettings)(C);if(A&&e.config.apiKeyCfg&&(S=e.config.apiKeyCfg.claudeSettings.find(c=>(0,X.resolveSecret)(c.apiKey)===A&&c.isValid)||null,S&&console.log(`[${(0,n.timestamp)()}] \u4ECE settings-ding.json \u6062\u590D Claude Setting: ${(0,$.settingLabel)(S)}`)),!(0,$.getForceEnabledSettingsPath)(C)&&e.config.apiKeyCfg&&(S=(0,$.pickValidApiKey)(e),!S)){const c=m||t.startStaffId;await(0,E.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:c,content:"\u26A0\uFE0F \u5F53\u524D\u65E0\u53EF\u7528\u914D\u989D\uFF08\u65E0\u53EF\u7528 API Key\uFF09\uFF0C\u8BF7\u660E\u5929\u518D\u8BD5\u6216\u8054\u7CFB\u7BA1\u7406\u5458"});return}const M=h&&m?`${o} \u2500\u2500 \u6D88\u606F\u6765\u81EA: ${h}(${m})`:o;e.appendSessionLog(T,"user",M);const x="claude";if(!(0,N.commandExists)(x)){const c=(0,N.formatClaudeCommandMissingMessage)(x);console.error(`[${(0,n.timestamp)()}] ${c.replace(/\n/g," ")}`),a.default.appendFileSync(g,`[${(0,n.timestamp)()}] [ERROR]: ${c}
23
- `,"utf-8"),await(0,E.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:m||t.startStaffId,content:`\u274C ${c}`});return}const D=["--permission-mode",i?.permissionMode??"bypassPermissions","--print","--output-format","stream-json","--verbose"];f&&D.push("--agent",f);const W=y?`/${y} ${M}`:M;let l=0,k=0,R=0;const _=[],p=e.activeSessions.get(t.conversationId),r=c=>{const d=e.activeSessions.get(t.conversationId);return!d||d!==p?(console.log(`[${(0,n.timestamp)()}] \u4F1A\u8BDD\u5DF2\u88AB\u7EC8\u6B62\uFF0C${c}`),!1):d.goonPending?(console.log(`[${(0,n.timestamp)()}] \u6536\u5230 /goon \u8BF7\u6C42\uFF0C${c}`),!1):!0};for(;;){if(!r("\u505C\u6B62\u91CD\u8BD5"))return;const c=l>0;if(k>=B||k>=3&&R>0&&Date.now()-R>Z){const u=k>=B?`\u603B\u91CD\u8BD5\u6B21\u6570\u5DF2\u8FBE ${B} \u6B21`:`\u91CD\u8BD5\u6301\u7EED\u65F6\u95F4\u8D85\u8FC7 ${Z/1e3}s\uFF08\u5DF2\u91CD\u8BD5 ${k} \u6B21\uFF09`;console.error(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230\u65E0\u9650\u91CD\u8BD5\u5FAA\u73AF: ${u}`),a.default.appendFileSync(g,`[${(0,n.timestamp)()}] [SYSTEM]: \u68C0\u6D4B\u5230\u65E0\u9650\u91CD\u8BD5\u5FAA\u73AF\uFF0C${u}\uFF0C\u7EC8\u6B62\u91CD\u8BD5
24
- `,"utf-8");const w=pe(g,1),b=_.slice(-1)[0]||"",L=m||t.startStaffId;await(0,E.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:L,content:`\u{1F504} \u68C0\u6D4B\u5230 Claude \u9677\u5165\u65E0\u9650\u91CD\u8BD5\uFF0C\u5DF2\u7EC8\u6B62\uFF08${u}\uFF09
21
+ `}function ae(e,t,o){const s=e.getConversationDir(t),l=O.default.join(s,".claude");a.default.existsSync(l)||a.default.mkdirSync(l,{recursive:!0});const u=O.default.join(l,"CLAUDE.md");if(!a.default.existsSync(u)){a.default.writeFileSync(u,o,"utf-8"),console.log(`[${(0,n.timestamp)()}] cc-ding \u4E0A\u4E0B\u6587\u5DF2\u6CE8\u5165 CLAUDE.md: ${u}`);return}const $=a.default.readFileSync(u,"utf-8"),p=$.indexOf(re),h=$.indexOf(G);if(p!==-1&&h!==-1&&h>p){const T=$.substring(0,p),A=$.substring(h+G.length),f=T+o+A;a.default.writeFileSync(u,f,"utf-8"),console.log(`[${(0,n.timestamp)()}] cc-ding \u4E0A\u4E0B\u6587\u5DF2\u66F4\u65B0: ${u}`)}else a.default.writeFileSync(u,o+`
22
+ `+$,"utf-8"),console.log(`[${(0,n.timestamp)()}] cc-ding \u4E0A\u4E0B\u6587\u5DF2\u8FFD\u52A0\u5230\u73B0\u6709 CLAUDE.md: ${u}`)}function Ie(e){const t=Array.isArray(e.config.conversations)?e.config.conversations:[];for(const o of t){const s=X(e,o.conversationId);Q.set(o.conversationId,s),ae(e,o.conversationId,s)}}function ce(e,t){const o=t.conversationId,s=X(e,o);Q.get(o)!==s&&(Q.set(o,s),ae(e,o,s))}function ve(e,t){Q.delete(t);const o=X(e,t),s=e.getConversationDir(t),l=O.default.join(s,".claude");a.default.existsSync(l)||a.default.mkdirSync(l,{recursive:!0});const u=O.default.join(l,"CLAUDE.md");a.default.writeFileSync(u,o,"utf-8"),console.log(`[${(0,n.timestamp)()}] QA \u6A21\u5F0F\u5207\u6362\uFF0CCLAUDE.md \u5DF2\u5237\u65B0: ${u}`)}async function we(e,t,o,s){const{skill:l,agent:u,senderNick:$,senderStaffId:p,newSessionId:h,conversationConfig:T}=s||{};let A=e.getSessionDir(t),f=`${A}/session.log`;const w=e.getConversationDir(t.conversationId);ce(e,t),a.default.mkdirSync(A,{recursive:!0});let g=null;const q=(0,y.readApiKeyFromSettings)(w);if(q&&e.config.apiKeyCfg&&(g=e.config.apiKeyCfg.claudeSettings.find(r=>(0,Z.resolveSecret)(r.apiKey)===q&&r.isValid)||null,g&&console.log(`[${(0,n.timestamp)()}] \u4ECE settings-ding.json \u6062\u590D Claude Setting: ${(0,y.settingLabel)(g)}`)),!(0,y.getForceEnabledSettingsPath)(w)&&e.config.apiKeyCfg&&(g=(0,y.pickValidApiKey)(e),!g)){const r=p||t.startStaffId;await(0,R.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:r,content:"\u26A0\uFE0F \u5F53\u524D\u65E0\u53EF\u7528\u914D\u989D\uFF08\u65E0\u53EF\u7528 API Key\uFF09\uFF0C\u8BF7\u660E\u5929\u518D\u8BD5\u6216\u8054\u7CFB\u7BA1\u7406\u5458"});return}const _=$&&p?`${o} \u2500\u2500 \u6D88\u606F\u6765\u81EA: ${$}(${p})`:o;e.appendSessionLog(A,"user",_);const k="claude";if(!(0,j.commandExists)(k)){const r=(0,j.formatClaudeCommandMissingMessage)(k);console.error(`[${(0,n.timestamp)()}] ${r.replace(/\n/g," ")}`),a.default.appendFileSync(f,`[${(0,n.timestamp)()}] [ERROR]: ${r}
23
+ `,"utf-8"),await(0,R.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:p||t.startStaffId,content:`\u274C ${r}`});return}let W=l?`/${l} ${_}`:_;if(T?.qaMode){if(s.permissionMode="plan",T.qaCfg?.autoPull&&T.qaCfg.gitRepos?.length)try{for(const S of T.qaCfg.gitRepos){const m=O.default.join(w,S);a.default.existsSync(O.default.join(m,".git"))?(await fe("git pull",{cwd:m,timeout:6e4}),console.log(`[${(0,n.timestamp)()}] QA \u6A21\u5F0F git pull: ${S}`)):console.log(`[${(0,n.timestamp)()}] QA \u6A21\u5F0F\u8DF3\u8FC7\u975E git \u76EE\u5F55: ${S}`)}}catch(S){console.error(`[${(0,n.timestamp)()}] QA \u6A21\u5F0F git pull \u5931\u8D25:`,S)}const r=`\u3010\u91CD\u8981\u89C4\u5219\u3011\u5F53\u524D\u4E3A\u95EE\u7B54\u6A21\u5F0F\uFF0C\u8BF7\u4E25\u683C\u9075\u5B88\uFF1A
24
+ 1. \u4EC5\u56DE\u7B54\u95EE\u9898\uFF0C\u4E0D\u8981\u6267\u884C\u4EFB\u4F55\u547D\u4EE4
25
+ 2. \u4E0D\u8981\u4FEE\u6539\u6216\u5199\u5165\u4EFB\u4F55\u6587\u4EF6
26
+ 3. \u4E0D\u8981\u5C1D\u8BD5\u8FD0\u884C\u4EE3\u7801\u3001\u811A\u672C\u6216\u5DE5\u5177
27
+ 4. \u4E0D\u8981\u8FDB\u884C git push\u3001commit \u7B49\u5199\u64CD\u4F5C`,i=T.qaCfg?.docs?.length?`
28
+
29
+ \u3010\u53C2\u8003\u8D44\u6599\u94FE\u63A5\u3011
30
+ ${T.qaCfg.docs.map((S,m)=>`${m+1}. ${S}`).join(`
31
+ `)}
32
+ \u4F60\u53EF\u4EE5\u4F7F\u7528 WebFetch \u5DE5\u5177\u8BBF\u95EE\u4E0A\u8FF0\u94FE\u63A5\u83B7\u53D6\u8BE6\u7EC6\u5185\u5BB9`:"";W=`${r}${i}
33
+
34
+ ---
35
+
36
+ \u7528\u6237\u95EE\u9898\uFF1A
37
+ ${W}`}const C=["--permission-mode",s?.permissionMode??"bypassPermissions","--print","--output-format","stream-json","--verbose"];u&&C.push("--agent",u);let E=0,b=0,x=0;const d=[],c=e.activeSessions.get(t.conversationId),I=r=>{const i=e.activeSessions.get(t.conversationId);return!i||i!==c?(console.log(`[${(0,n.timestamp)()}] \u4F1A\u8BDD\u5DF2\u88AB\u7EC8\u6B62\uFF0C${r}`),!1):i.goonPending?(console.log(`[${(0,n.timestamp)()}] \u6536\u5230 /goon \u8BF7\u6C42\uFF0C${r}`),!1):!0};for(;;){if(!I("\u505C\u6B62\u91CD\u8BD5"))return;const r=E>0;if(b>=H||b>=3&&x>0&&Date.now()-x>te){const v=b>=H?`\u603B\u91CD\u8BD5\u6B21\u6570\u5DF2\u8FBE ${H} \u6B21`:`\u91CD\u8BD5\u6301\u7EED\u65F6\u95F4\u8D85\u8FC7 ${te/1e3}s\uFF08\u5DF2\u91CD\u8BD5 ${b} \u6B21\uFF09`;console.error(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230\u65E0\u9650\u91CD\u8BD5\u5FAA\u73AF: ${v}`),a.default.appendFileSync(f,`[${(0,n.timestamp)()}] [SYSTEM]: \u68C0\u6D4B\u5230\u65E0\u9650\u91CD\u8BD5\u5FAA\u73AF\uFF0C${v}\uFF0C\u7EC8\u6B62\u91CD\u8BD5
38
+ `,"utf-8");const M=ye(f,1),D=d.slice(-1)[0]||"",U=p||t.startStaffId;await(0,R.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:U,content:`\u{1F504} \u68C0\u6D4B\u5230 Claude \u9677\u5165\u65E0\u9650\u91CD\u8BD5\uFF0C\u5DF2\u7EC8\u6B62\uFF08${v}\uFF09
25
39
 
26
40
  \u{1F4CB} \u6700\u8FD1\u91CD\u8BD5\u8BB0\u5F55\uFF1A
27
- ${b}
41
+ ${D}
28
42
 
29
43
  \u{1F4DD} \u6700\u8FD1\u65E5\u5FD7\uFF1A
30
44
  \`\`\`
31
- ${w}
45
+ ${M}
32
46
  \`\`\`
33
47
 
34
- \u{1F4A1} \u53EF\u5C1D\u8BD5\u53D1\u9001 /new \u5F00\u59CB\u65B0\u4F1A\u8BDD\uFF0C\u6216 /end \u7ED3\u675F\u5F53\u524D\u4F1A\u8BDD`});return}const d=[...D];if(t.claudeSessionId)d.push("--resume",t.claudeSessionId),c||console.log(`[${(0,n.timestamp)()}] \u6062\u590D Claude \u4F1A\u8BDD: ${t.claudeSessionId}`);else if(!c){const u=I||(0,de.randomUUID)();d.push("--session-id",u),d.push("--name",`cc-ding-${u.substring(0,8)}`),console.log(`[${(0,n.timestamp)()}] \u521B\u5EFA Claude \u4F1A\u8BDD(\u663E\u5F0F session-id): ${u}`)}const s=H(e,C,i?.settings);s&&d.push("--settings",s);let v;c?(v="\u7EE7\u7EED",console.log(`[${(0,n.timestamp)()}] \u53D1\u9001"\u7EE7\u7EED"\u91CD\u8BD5 (\u5FEB\u901F\u5931\u8D25\u8FDE\u7EED${l}/${P}\u6B21)`),a.default.appendFileSync(g,`[${(0,n.timestamp)()}] [SYSTEM]: TPM \u9650\u6D41\uFF0C\u53D1\u9001"\u7EE7\u7EED"\u91CD\u8BD5 (\u5FEB\u901F\u5931\u8D25\u8FDE\u7EED${l}/${P})
35
- `,"utf-8")):v=W,console.log(`[${(0,n.timestamp)()}] \u6267\u884C Claude \u67E5\u8BE2[\u539F\u751Fclaude \u6A21\u5F0F]: ${x} ${d.join(" ")}`),e.debugLog(`\u53D1\u9001\u6D88\u606F: ${v.substring(0,100)}...`);try{await oe(e,t,d,x,C,v,c);return}catch(u){if(T=e.getSessionDir(t),g=`${T}/session.log`,u instanceof V){if(k++,R=R||Date.now(),(0,$.isQuotaExhaustedError)(u.output)&&e.config.apiKeyCfg){if(_.push(`[${(0,n.timestamp)()}] 429 \u914D\u989D\u8017\u5C3D\uFF0C\u5C1D\u8BD5\u8F6E\u6362 Key`),S){const b=(0,$.rotateApiKey)(e,S.apiKey);if(b){S=b,l=0,console.log(`[${(0,n.timestamp)()}] API Key \u914D\u989D\u8017\u5C3D(429)\uFF0C\u5207\u6362\u5230\u65B0 Key: ${(0,$.settingLabel)(b)}`),a.default.appendFileSync(g,`[${(0,n.timestamp)()}] [SYSTEM]: API Key \u914D\u989D\u8017\u5C3D(429)\uFF0C\u5207\u6362\u5230\u65B0 Key
36
- `,"utf-8");continue}}const w=m||t.startStaffId;await(0,E.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:w,content:"\u26A0\uFE0F \u5F53\u524D\u65E0\u53EF\u7528\u914D\u989D/API Key\uFF0C\u8BF7\u660E\u5929\u518D\u8BD5\u6216\u8054\u7CFB\u7BA1\u7406\u5458"});return}if(u.isFastFail){if(l++,l>=P){if(S&&e.config.apiKeyCfg){const w=(0,$.rotateApiKey)(e,S.apiKey);if(w){S=w,l=0,console.log(`[${(0,n.timestamp)()}] TPM \u9650\u6D41\u8FDE\u7EED\u5FEB\u901F\u5931\u8D25 ${P} \u6B21\uFF0C\u5207\u6362\u5230\u65B0 Key: ${(0,$.settingLabel)(w)}`),a.default.appendFileSync(g,`[${(0,n.timestamp)()}] [SYSTEM]: TPM \u9650\u6D41\u8FDE\u7EED\u5FEB\u901F\u5931\u8D25\uFF0C\u5207\u6362\u5230\u65B0 Key
37
- `,"utf-8");continue}}throw console.log(`[${(0,n.timestamp)()}] TPM \u9650\u6D41\u5FEB\u901F\u5931\u8D25\u8FDE\u7EED${P}\u6B21\uFF0C\u653E\u5F03`),a.default.appendFileSync(g,`[${(0,n.timestamp)()}] [SYSTEM]: TPM \u9650\u6D41\u5FEB\u901F\u5931\u8D25\u8FDE\u7EED${P}\u6B21\uFF0C\u653E\u5F03
38
- `,"utf-8"),new Error(`TPM \u9650\u6D41\uFF0C\u5FEB\u901F\u5931\u8D25\u8FDE\u7EED ${P} \u6B21`)}console.log(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230 TPM \u9650\u6D41(\u5FEB\u901F\u5931\u8D25)\uFF0C${K/1e3}s \u540E\u91CD\u8BD5 (${l}/${P})`)}else l=0,console.log(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230 TPM \u9650\u6D41(\u8FDB\u7A0B\u5DF2\u8FD0\u884C\u4E00\u6BB5\u65F6\u95F4)\uFF0C\u91CD\u7F6E\u5FEB\u901F\u5931\u8D25\u8BA1\u6570\uFF0C${K/1e3}s \u540E\u91CD\u8BD5`);if(a.default.appendFileSync(g,`[${(0,n.timestamp)()}] [SYSTEM]: TPM \u9650\u6D41\uFF0C${K/1e3}s \u540E\u91CD\u8BD5
39
- `,"utf-8"),_.push(`[${(0,n.timestamp)()}] TPM \u9650\u6D41\uFF0C${K/1e3}s \u540E\u91CD\u8BD5`),await le(K),!r("\u505C\u6B62\u5F53\u524D\u91CD\u8BD5"))return;continue}if(u instanceof ee){k++,R=R||Date.now(),_.push(`[${(0,n.timestamp)()}] \u4F1A\u8BDD\u5931\u6548\uFF0C\u6E05\u9664\u65E7\u4F1A\u8BDD`),console.log(`[${(0,n.timestamp)()}] Claude \u4F1A\u8BDD\u5931\u6548\uFF0C\u6E05\u9664 claudeSessionId \u5E76\u91CD\u65B0\u53D1\u8D77`),a.default.appendFileSync(g,`[${(0,n.timestamp)()}] [SYSTEM]: Claude \u4F1A\u8BDD\u5DF2\u5931\u6548\uFF0C\u6E05\u9664\u65E7\u4F1A\u8BDD\u5E76\u91CD\u65B0\u53D1\u8D77
40
- `,"utf-8"),t.claudeSessionId&&(t.claudeSessionId=void 0,e.updateSessionFile(t,{})),l=0;continue}if(u instanceof te){k++,R=R||Date.now(),_.push(`[${(0,n.timestamp)()}] \u4E0A\u4E0B\u6587\u7A97\u53E3\u8D85\u957F\uFF0C\u81EA\u52A8 /compact`),console.log(`[${(0,n.timestamp)()}] \u4E0A\u4E0B\u6587\u7A97\u53E3\u8D85\u957F\uFF0C\u81EA\u52A8\u53D1\u9001 /compact \u538B\u7F29\u4E0A\u4E0B\u6587`),a.default.appendFileSync(g,`[${(0,n.timestamp)()}] [SYSTEM]: \u4E0A\u4E0B\u6587\u7A97\u53E3\u8D85\u957F\uFF0C\u81EA\u52A8\u53D1\u9001 /compact \u538B\u7F29\u4E0A\u4E0B\u6587
41
- `,"utf-8");const w=m||t.startStaffId;await(0,E.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:w,content:"\u{1F4E6} \u4E0A\u4E0B\u6587\u8D85\u957F\uFF0C\u6B63\u5728\u81EA\u52A8\u538B\u7F29\u4E0A\u4E0B\u6587(/compact)\u540E\u7EE7\u7EED..."});const b=[...D];t.claudeSessionId&&b.push("--resume",t.claudeSessionId);const L=H(e,C,i?.settings);L&&b.push("--settings",L);try{await oe(e,t,b,x,C,"/compact",!1),console.log(`[${(0,n.timestamp)()}] /compact \u6267\u884C\u6210\u529F\uFF0C\u53D1\u9001"\u7EE7\u7EED"\u6062\u590D\u6267\u884C`),a.default.appendFileSync(g,`[${(0,n.timestamp)()}] [SYSTEM]: /compact \u6267\u884C\u6210\u529F\uFF0C\u53D1\u9001"\u7EE7\u7EED"\u6062\u590D\u6267\u884C
42
- `,"utf-8")}catch(F){throw console.error(`[${(0,n.timestamp)()}] /compact \u6267\u884C\u5931\u8D25:`,F),a.default.appendFileSync(g,`[${(0,n.timestamp)()}] [SYSTEM]: /compact \u6267\u884C\u5931\u8D25: ${F instanceof Error?F.message:String(F)}
43
- `,"utf-8"),await(0,E.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:w,content:"\u274C \u81EA\u52A8\u538B\u7F29\u4E0A\u4E0B\u6587(/compact)\u5931\u8D25\uFF0C\u8BF7\u624B\u52A8\u53D1\u9001 /compact \u6216 /new \u5F00\u59CB\u65B0\u4F1A\u8BDD"}),new Error(`\u4E0A\u4E0B\u6587\u8D85\u957F\u4E14 /compact \u5931\u8D25: ${F instanceof Error?F.message:String(F)}`)}l=0;continue}throw u}}}
48
+ \u{1F4A1} \u53EF\u5C1D\u8BD5\u53D1\u9001 /new \u5F00\u59CB\u65B0\u4F1A\u8BDD\uFF0C\u6216 /end \u7ED3\u675F\u5F53\u524D\u4F1A\u8BDD`});return}const i=[...C];if(t.claudeSessionId)i.push("--resume",t.claudeSessionId),r||console.log(`[${(0,n.timestamp)()}] \u6062\u590D Claude \u4F1A\u8BDD: ${t.claudeSessionId}`);else if(!r){const v=h||(0,pe.randomUUID)();i.push("--session-id",v),i.push("--name",`cc-ding-${v.substring(0,8)}`),console.log(`[${(0,n.timestamp)()}] \u521B\u5EFA Claude \u4F1A\u8BDD(\u663E\u5F0F session-id): ${v}`)}const S=J(e,w,s?.settings);S&&i.push("--settings",S);let m;r?(m="\u7EE7\u7EED",console.log(`[${(0,n.timestamp)()}] \u53D1\u9001"\u7EE7\u7EED"\u91CD\u8BD5 (\u5FEB\u901F\u5931\u8D25\u8FDE\u7EED${E}/${F}\u6B21)`),a.default.appendFileSync(f,`[${(0,n.timestamp)()}] [SYSTEM]: TPM \u9650\u6D41\uFF0C\u53D1\u9001"\u7EE7\u7EED"\u91CD\u8BD5 (\u5FEB\u901F\u5931\u8D25\u8FDE\u7EED${E}/${F})
49
+ `,"utf-8")):m=W,console.log(`[${(0,n.timestamp)()}] \u6267\u884C Claude \u67E5\u8BE2[\u539F\u751Fclaude \u6A21\u5F0F]: ${k} ${i.join(" ")}`),e.debugLog(`\u53D1\u9001\u6D88\u606F: ${m.substring(0,100)}...`);try{await se(e,t,i,k,w,m,r);return}catch(v){if(A=e.getSessionDir(t),f=`${A}/session.log`,v instanceof z){if(b++,x=x||Date.now(),(0,y.isQuotaExhaustedError)(v.output)&&e.config.apiKeyCfg){if(d.push(`[${(0,n.timestamp)()}] 429 \u914D\u989D\u8017\u5C3D\uFF0C\u5C1D\u8BD5\u8F6E\u6362 Key`),g){const D=(0,y.rotateApiKey)(e,g.apiKey);if(D){g=D,E=0,console.log(`[${(0,n.timestamp)()}] API Key \u914D\u989D\u8017\u5C3D(429)\uFF0C\u5207\u6362\u5230\u65B0 Key: ${(0,y.settingLabel)(D)}`),a.default.appendFileSync(f,`[${(0,n.timestamp)()}] [SYSTEM]: API Key \u914D\u989D\u8017\u5C3D(429)\uFF0C\u5207\u6362\u5230\u65B0 Key
50
+ `,"utf-8");continue}}const M=p||t.startStaffId;await(0,R.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:M,content:"\u26A0\uFE0F \u5F53\u524D\u65E0\u53EF\u7528\u914D\u989D/API Key\uFF0C\u8BF7\u660E\u5929\u518D\u8BD5\u6216\u8054\u7CFB\u7BA1\u7406\u5458"});return}if(v.isFastFail){if(E++,E>=F){if(g&&e.config.apiKeyCfg){const M=(0,y.rotateApiKey)(e,g.apiKey);if(M){g=M,E=0,console.log(`[${(0,n.timestamp)()}] TPM \u9650\u6D41\u8FDE\u7EED\u5FEB\u901F\u5931\u8D25 ${F} \u6B21\uFF0C\u5207\u6362\u5230\u65B0 Key: ${(0,y.settingLabel)(M)}`),a.default.appendFileSync(f,`[${(0,n.timestamp)()}] [SYSTEM]: TPM \u9650\u6D41\u8FDE\u7EED\u5FEB\u901F\u5931\u8D25\uFF0C\u5207\u6362\u5230\u65B0 Key
51
+ `,"utf-8");continue}}throw console.log(`[${(0,n.timestamp)()}] TPM \u9650\u6D41\u5FEB\u901F\u5931\u8D25\u8FDE\u7EED${F}\u6B21\uFF0C\u653E\u5F03`),a.default.appendFileSync(f,`[${(0,n.timestamp)()}] [SYSTEM]: TPM \u9650\u6D41\u5FEB\u901F\u5931\u8D25\u8FDE\u7EED${F}\u6B21\uFF0C\u653E\u5F03
52
+ `,"utf-8"),new Error(`TPM \u9650\u6D41\uFF0C\u5FEB\u901F\u5931\u8D25\u8FDE\u7EED ${F} \u6B21`)}console.log(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230 TPM \u9650\u6D41(\u5FEB\u901F\u5931\u8D25)\uFF0C${L/1e3}s \u540E\u91CD\u8BD5 (${E}/${F})`)}else E=0,console.log(`[${(0,n.timestamp)()}] \u68C0\u6D4B\u5230 TPM \u9650\u6D41(\u8FDB\u7A0B\u5DF2\u8FD0\u884C\u4E00\u6BB5\u65F6\u95F4)\uFF0C\u91CD\u7F6E\u5FEB\u901F\u5931\u8D25\u8BA1\u6570\uFF0C${L/1e3}s \u540E\u91CD\u8BD5`);if(a.default.appendFileSync(f,`[${(0,n.timestamp)()}] [SYSTEM]: TPM \u9650\u6D41\uFF0C${L/1e3}s \u540E\u91CD\u8BD5
53
+ `,"utf-8"),d.push(`[${(0,n.timestamp)()}] TPM \u9650\u6D41\uFF0C${L/1e3}s \u540E\u91CD\u8BD5`),await me(L),!I("\u505C\u6B62\u5F53\u524D\u91CD\u8BD5"))return;continue}if(v instanceof ne){b++,x=x||Date.now(),d.push(`[${(0,n.timestamp)()}] \u4F1A\u8BDD\u5931\u6548\uFF0C\u6E05\u9664\u65E7\u4F1A\u8BDD`),console.log(`[${(0,n.timestamp)()}] Claude \u4F1A\u8BDD\u5931\u6548\uFF0C\u6E05\u9664 claudeSessionId \u5E76\u91CD\u65B0\u53D1\u8D77`),a.default.appendFileSync(f,`[${(0,n.timestamp)()}] [SYSTEM]: Claude \u4F1A\u8BDD\u5DF2\u5931\u6548\uFF0C\u6E05\u9664\u65E7\u4F1A\u8BDD\u5E76\u91CD\u65B0\u53D1\u8D77
54
+ `,"utf-8"),t.claudeSessionId&&(t.claudeSessionId=void 0,e.updateSessionFile(t,{})),E=0;continue}if(v instanceof oe){b++,x=x||Date.now(),d.push(`[${(0,n.timestamp)()}] \u4E0A\u4E0B\u6587\u7A97\u53E3\u8D85\u957F\uFF0C\u81EA\u52A8 /compact`),console.log(`[${(0,n.timestamp)()}] \u4E0A\u4E0B\u6587\u7A97\u53E3\u8D85\u957F\uFF0C\u81EA\u52A8\u53D1\u9001 /compact \u538B\u7F29\u4E0A\u4E0B\u6587`),a.default.appendFileSync(f,`[${(0,n.timestamp)()}] [SYSTEM]: \u4E0A\u4E0B\u6587\u7A97\u53E3\u8D85\u957F\uFF0C\u81EA\u52A8\u53D1\u9001 /compact \u538B\u7F29\u4E0A\u4E0B\u6587
55
+ `,"utf-8");const M=p||t.startStaffId;await(0,R.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:M,content:"\u{1F4E6} \u4E0A\u4E0B\u6587\u8D85\u957F\uFF0C\u6B63\u5728\u81EA\u52A8\u538B\u7F29\u4E0A\u4E0B\u6587(/compact)\u540E\u7EE7\u7EED..."});const D=[...C];t.claudeSessionId&&D.push("--resume",t.claudeSessionId);const U=J(e,w,s?.settings);U&&D.push("--settings",U);try{await se(e,t,D,k,w,"/compact",!1),console.log(`[${(0,n.timestamp)()}] /compact \u6267\u884C\u6210\u529F\uFF0C\u53D1\u9001"\u7EE7\u7EED"\u6062\u590D\u6267\u884C`),a.default.appendFileSync(f,`[${(0,n.timestamp)()}] [SYSTEM]: /compact \u6267\u884C\u6210\u529F\uFF0C\u53D1\u9001"\u7EE7\u7EED"\u6062\u590D\u6267\u884C
56
+ `,"utf-8")}catch(K){throw console.error(`[${(0,n.timestamp)()}] /compact \u6267\u884C\u5931\u8D25:`,K),a.default.appendFileSync(f,`[${(0,n.timestamp)()}] [SYSTEM]: /compact \u6267\u884C\u5931\u8D25: ${K instanceof Error?K.message:String(K)}
57
+ `,"utf-8"),await(0,R.sendDingMessage)(e,{conversationId:(0,n.getReplyConversationId)(t),sessionWebhook:(0,n.getReplyWebhook)(t),atUserId:M,content:"\u274C \u81EA\u52A8\u538B\u7F29\u4E0A\u4E0B\u6587(/compact)\u5931\u8D25\uFF0C\u8BF7\u624B\u52A8\u53D1\u9001 /compact \u6216 /new \u5F00\u59CB\u65B0\u4F1A\u8BDD"}),new Error(`\u4E0A\u4E0B\u6587\u8D85\u957F\u4E14 /compact \u5931\u8D25: ${K instanceof Error?K.message:String(K)}`)}E=0;continue}throw v}}}
@@ -1,6 +1,6 @@
1
- "use strict";var g=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseHelpCommand=w,exports.parseCommandHelp=I,exports.getCommandByName=k,exports.formatHelpOverview=b,exports.formatCommandHelp=M,exports.parseEndCommand=S,exports.parseInfoCommand=L,exports.formatConversationInfo=v,exports.formatGlobalConfig=T,exports.parseLogCommand=q,exports.parseLsCommand=D,exports.findSubdirByName=O,exports.getDirectoryStructure=$,exports.parseContinueSessionCommand=R,exports.parseCronCommand=_,exports.parseVersionCommand=B,exports.parseOpenCommand=A,exports.parseCleanCommand=N,exports.parseResetApiKeyCfgCommand=H,exports.parseCfgCommand=U,exports.parseBashCommand=E,exports.parseMqCommand=G,exports.parseAuthCommand=K,exports.parseGoonCommand=W,exports.parseCcCommand=P,exports.parseClaudeMdCommand=F,exports.parseInterruptCommand=V,exports.parseDestroyCommand=Y,exports.parseFreedomCommand=z,exports.parseTodoCommand=Q,exports.parseMenuCommand=J,exports.parseRebootCommand=X,exports.parseRecorderCommandEnhanced=Z;const y=g(require("fs")),l=g(require("path")),C=[{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:"/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:"/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"] [--permissionMode mode]',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 --permissionMode auto","/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\u4EC5 owner/\u7BA1\u7406\u5458\uFF0C\u6267\u884C\u5C06\u8BB0\u5F55\u5BA1\u8BA1\u65E5\u5FD7\uFF1B\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",ownerOnly:!0},{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",description:"Recorder \u6A21\u5F0F\uFF1A\u8BB0\u5F55\u6240\u6709\u6D88\u606F\u5230\u672C\u5730\uFF08\u4EC5 owner \u5355\u804A\uFF0C\u53D1\u9001 /recorder exit \u9000\u51FA\uFF09",usage:"/recorder [on|exit]",examples:["/recorder on","/recorder exit"],category:"\u7BA1\u7406",ownerOnly:!0},{name:"/todo",description:"\u5F85\u529E\u7BA1\u7406\uFF1A\u6DFB\u52A0/\u5B8C\u6210/\u5220\u9664/\u5217\u8868/\u63D0\u9192/\u6A21\u5F0F\u5207\u6362",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> | /todo mode <staffId|dingtalkId>",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","/todo mode dingtalkId"],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\uFF08\u652F\u6301 /! /\uFF01 ! \uFF01\uFF09",usage:"/! | /\uFF01 | ! | \uFF01",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},{name:"/destroy",description:"\u6CE8\u9500\u5F53\u524D\u7FA4\u673A\u5668\u4EBA\uFF0C\u5220\u9664\u5DE5\u4F5C\u76EE\u5F55\u548C\u914D\u7F6E",usage:"/destroy [--conversationId xxx]",examples:["/destroy","/destroy --conversationId targetConvId"],category:"\u7BA1\u7406",ownerOnly:!0},{name:"/freedom",description:"\u81EA\u7531\u6A21\u5F0F\uFF1A\u5F00\u542F\u540E\u6240\u6709\u7FA4\u6210\u5458\u5747\u53EF\u4F7F\u7528\u673A\u5668\u4EBA\uFF08\u8DF3\u8FC7\u767D\u540D\u5355\u9650\u5236\uFF09",usage:"/freedom | /freedom exit",examples:["/freedom","/freedom exit"],category:"\u7BA1\u7406",ownerOnly:!0}],x=[{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 w(e){return e.trim().toLowerCase()==="/help"}function I(e){const s=e.trim().match(/^(\/\w+)\s+--help$/i);return s?s[1].toLowerCase():null}function k(e){const t=e.toLowerCase();return C.find(s=>s.name.toLowerCase()===t||s.aliases?.some(r=>r.toLowerCase()===t))}function b(e,t){const s=C.filter(n=>t||!n.ownerOnly),r=["### \u{1F917}","----",`- **\u7248\u672C:** ${e}`,"- **\u4F5C\u8005:** yihuineng","- **Github:** https://github.com/yihuineng/cc-ding","----"];for(const{category:n,icon:i}of x){const o=s.filter(a=>a.category===n);if(o.length!==0){r.push(`${i} **${n}**`);for(const a of o)r.push(`- \`${a.name}\` ${a.description}`);r.push("")}}return r.push("\u{1F4A1} \u8F93\u5165 `/{\u547D\u4EE4} --help` \u67E5\u770B\u547D\u4EE4\u8BE6\u7EC6\u7528\u6CD5"),r.join(`
2
- `)}function M(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 s of e.examples)t.push(`- \`${s}\``);return t.join(`
3
- `)}function S(e){return e.trim().toLowerCase()==="/end"}function L(e){const t=e.trim().toLowerCase();return t==="/info"?"all":t==="/info robot"?"robot":t==="/info session"?"session":t==="/info task"?"task":null}function v(e,t,s,r){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}`),r&&n.push(`- **\u5DE5\u4F5C\u76EE\u5F55:** \`${r}\``),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 i=e.whiteUserList.map(o=>s?.(o)||o).join(", ");n.push(`- **\u7FA4\u767D\u540D\u5355:** ${i}`)}return e.atSender===!1&&n.push("- **atSender:** false"),e.receiveReply===!1&&n.push("- **receiveReply:** false (\u4E0D\u56DE\u590D\u786E\u8BA4\u6D88\u606F)"),e.freedomMode&&n.push("- **freedomMode:** \u5DF2\u5F00\u542F\uFF08\u8DF3\u8FC7\u767D\u540D\u5355\u9650\u5236\uFF09"),e.useLocalOcr===!1&&n.push("- **\u672C\u5730OCR:** \u5173\u95ED"),e.permissionMode&&n.push(`- **permissionMode:** ${e.permissionMode}`),e.taskCfg?.skill&&n.push(`- **taskSkill:** ${e.taskCfg.skill}`),e.preBash&&n.push(`- **preBash:** \`${e.preBash}\``),n.join(`
1
+ "use strict";var g=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseHelpCommand=w,exports.parseCommandHelp=b,exports.getCommandByName=I,exports.formatHelpOverview=k,exports.formatCommandHelp=q,exports.parseEndCommand=M,exports.parseInfoCommand=S,exports.formatConversationInfo=L,exports.formatGlobalConfig=T,exports.parseLogCommand=v,exports.parseLsCommand=D,exports.findSubdirByName=R,exports.getDirectoryStructure=$,exports.parseContinueSessionCommand=O,exports.parseCronCommand=A,exports.parseVersionCommand=B,exports.parseOpenCommand=_,exports.parseCleanCommand=G,exports.parseResetApiKeyCfgCommand=N,exports.parseCfgCommand=P,exports.parseBashCommand=H,exports.parseMqCommand=U,exports.parseAuthCommand=E,exports.parseGoonCommand=K,exports.parseCcCommand=W,exports.parseClaudeMdCommand=F,exports.parseInterruptCommand=Q,exports.parseDestroyCommand=V,exports.parseFreedomCommand=Y,exports.parseQaCommand=z,exports.parseTodoCommand=J,exports.parseMenuCommand=X,exports.parseRebootCommand=Z,exports.parseRecorderCommandEnhanced=ee;const y=g(require("fs")),c=g(require("path")),C=[{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:"/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:"/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"] [--permissionMode mode] [--qaGitRepos \u76EE\u5F551,\u76EE\u5F552] [--qaDocs url1,url2] [--qaAutoPull true|false]',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 --permissionMode auto","/cfg --qaGitRepos cc-ding,my-project --qaAutoPull true","/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\u4EC5 owner/\u7BA1\u7406\u5458\uFF0C\u6267\u884C\u5C06\u8BB0\u5F55\u5BA1\u8BA1\u65E5\u5FD7\uFF1B\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",ownerOnly:!0},{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",description:"Recorder \u6A21\u5F0F\uFF1A\u8BB0\u5F55\u6240\u6709\u6D88\u606F\u5230\u672C\u5730\uFF08\u4EC5 owner \u5355\u804A\uFF0C\u53D1\u9001 /recorder exit \u9000\u51FA\uFF09",usage:"/recorder [on|exit]",examples:["/recorder on","/recorder exit"],category:"\u7BA1\u7406",ownerOnly:!0},{name:"/todo",description:"\u5F85\u529E\u7BA1\u7406\uFF1A\u6DFB\u52A0/\u5B8C\u6210/\u5220\u9664/\u5217\u8868/\u63D0\u9192/\u6A21\u5F0F\u5207\u6362",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> | /todo mode <staffId|dingtalkId>",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","/todo mode dingtalkId"],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\uFF08\u652F\u6301 /! /\uFF01 ! \uFF01\uFF09",usage:"/! | /\uFF01 | ! | \uFF01",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},{name:"/destroy",description:"\u6CE8\u9500\u5F53\u524D\u7FA4\u673A\u5668\u4EBA\uFF0C\u5220\u9664\u5DE5\u4F5C\u76EE\u5F55\u548C\u914D\u7F6E",usage:"/destroy [--conversationId xxx]",examples:["/destroy","/destroy --conversationId targetConvId"],category:"\u7BA1\u7406",ownerOnly:!0},{name:"/freedom",description:"\u81EA\u7531\u6A21\u5F0F\uFF1A\u5F00\u542F\u540E\u6240\u6709\u7FA4\u6210\u5458\u5747\u53EF\u4F7F\u7528\u673A\u5668\u4EBA\uFF08\u8DF3\u8FC7\u767D\u540D\u5355\u9650\u5236\uFF09",usage:"/freedom | /freedom exit",examples:["/freedom","/freedom exit"],category:"\u7BA1\u7406",ownerOnly:!0},{name:"/qa",description:"\u95EE\u7B54\u6A21\u5F0F\uFF1A\u5F00\u542F\u540E Claude \u4EE5\u53EA\u8BFB plan \u6A21\u5F0F\u8FD0\u884C\uFF0C\u6240\u6709\u7FA4\u6210\u5458\u5747\u53EF\u4F7F\u7528",usage:"/qa | /qa exit",examples:["/qa","/qa exit"],category:"\u7BA1\u7406"}],x=[{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 w(e){return e.trim().toLowerCase()==="/help"}function b(e){const s=e.trim().match(/^(\/\w+)\s+--help$/i);return s?s[1].toLowerCase():null}function I(e){const t=e.toLowerCase();return C.find(s=>s.name.toLowerCase()===t||s.aliases?.some(r=>r.toLowerCase()===t))}function k(e,t){const s=C.filter(n=>t||!n.ownerOnly),r=["### \u{1F917}","----",`- **\u7248\u672C:** ${e}`,"- **\u4F5C\u8005:** yihuineng","- **Github:** https://github.com/yihuineng/cc-ding","----"];for(const{category:n,icon:i}of x){const a=s.filter(o=>o.category===n);if(a.length!==0){r.push(`${i} **${n}**`);for(const o of a)r.push(`- \`${o.name}\` ${o.description}`);r.push("")}}return r.push("\u{1F4A1} \u8F93\u5165 `/{\u547D\u4EE4} --help` \u67E5\u770B\u547D\u4EE4\u8BE6\u7EC6\u7528\u6CD5"),r.join(`
2
+ `)}function q(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 s of e.examples)t.push(`- \`${s}\``);return t.join(`
3
+ `)}function M(e){return e.trim().toLowerCase()==="/end"}function S(e){const t=e.trim().toLowerCase();return t==="/info"?"all":t==="/info robot"?"robot":t==="/info session"?"session":t==="/info task"?"task":null}function L(e,t,s,r){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}`),r&&n.push(`- **\u5DE5\u4F5C\u76EE\u5F55:** \`${r}\``),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 i=e.whiteUserList.map(a=>s?.(a)||a).join(", ");n.push(`- **\u7FA4\u767D\u540D\u5355:** ${i}`)}return e.atSender===!1&&n.push("- **atSender:** false"),e.receiveReply===!1&&n.push("- **receiveReply:** false (\u4E0D\u56DE\u590D\u786E\u8BA4\u6D88\u606F)"),e.freedomMode&&n.push("- **freedomMode:** \u5DF2\u5F00\u542F\uFF08\u8DF3\u8FC7\u767D\u540D\u5355\u9650\u5236\uFF09"),e.useLocalOcr===!1&&n.push("- **\u672C\u5730OCR:** \u5173\u95ED"),e.permissionMode&&n.push(`- **permissionMode:** ${e.permissionMode}`),e.taskCfg?.skill&&n.push(`- **taskSkill:** ${e.taskCfg.skill}`),e.preBash&&n.push(`- **preBash:** \`${e.preBash}\``),e.qaMode&&n.push("- **qaMode:** \u5DF2\u5F00\u542F\uFF08\u53EA\u8BFB\u95EE\u7B54\u6A21\u5F0F\uFF0C\u6240\u6709\u7FA4\u6210\u5458\u53EF\u7528\uFF09"),e.qaCfg?.gitRepos?.length&&n.push(`- **qaGitRepos:** ${e.qaCfg.gitRepos.join(", ")}`),e.qaCfg?.docs?.length&&n.push(`- **qaDocs:** ${e.qaCfg.docs.join(", ")}`),e.qaCfg?.autoPull&&n.push("- **qaAutoPull:** \u5DF2\u5F00\u542F"),n.join(`
4
4
  `)}function T(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 s=e.apiKeyCfg.claudeSettings.filter(r=>r.isValid).length;t.push(`- **apiKeyCfg:** ${s}/${e.apiKeyCfg.claudeSettings.length} \u6709\u6548`),t.push(` - **\u6700\u8FD1\u91CD\u7F6E:** ${e.apiKeyCfg.resetTime||"-"}`)}return t.join(`
5
- `)}function q(e){const s=e.trim().match(/^\/log(?:\s+(\d+))?$/i);if(!s)return null;const r=parseInt(s[1],10);return isNaN(r)||r<=0?10:r}function D(e){const s=e.trim().match(/^\/ls(?:\s+(.+))?$/i);if(!s)return null;if(s[1]===void 0)return{target:"",depth:1};const r=s[1].trim().split(/\s+/),n=r[0]||"",i=r[1]?parseInt(r[1],10):1;return{target:n,depth:isNaN(i)||i<0?1:Math.min(i,5)}}function O(e,t,s=3){const r=[{dir:e,depth:0}];for(;r.length>0;){const{dir:n,depth:i}=r.shift();if(!(i>s))try{const o=y.default.readdirSync(n,{withFileTypes:!0});for(const a of o)if(!(!a.isDirectory()||a.name.startsWith("."))){if(a.name===t)return l.default.join(n,a.name);r.push({dir:l.default.join(n,a.name),depth:i+1})}}catch{continue}}return null}function $(e,t=0,s=1){try{const r=y.default.readdirSync(e,{withFileTypes:!0}).filter(o=>!o.name.startsWith("."));if(r.length===0)return t===0?"\u{1F4C2} \u76EE\u5F55\u4E3A\u7A7A":"";r.sort((o,a)=>o.isDirectory()!==a.isDirectory()?o.isDirectory()?-1:1:o.name.localeCompare(a.name));const n=[],i=". ".repeat(t);for(const o of r){const a=o.isDirectory()?"\u{1F4C1} ":"\u{1F4C4} ",m=o.isDirectory()?"/":"";if(n.push(`${i}${a}${o.name}${m}`),o.isDirectory()&&t<s){const d=l.default.join(e,o.name),u=$(d,t+1,s);u&&n.push(u)}}return n.join(`
6
- `)}catch{return t===0?"\u274C \u65E0\u6CD5\u8BFB\u53D6\u76EE\u5F55":""}}function R(e){const t=e.trim().match(/^\/resume(?:\s+(\S+))?$/i);return t?t[1]!==void 0?t[1]:"":null}function j(e){const t=e.trim().split(/\s+/);return t.length!==5?!1:t.every(s=>/^[\d*/\-]+$/.test(s))}function _(e){const t=e.trim();if(!t.toLowerCase().startsWith("/cron"))return null;const s=t.substring(5).trim();if(!s)return null;if(/^(list|ls)$/i.test(s))return{type:"list"};const r=s.match(/^(?:delete|rm)\s+(\S+)$/i);if(r)return{type:"delete",id:r[1]};const n=s.match(/^pause\s+(\S+)$/i);if(n)return{type:"pause",id:n[1]};const i=s.match(/^resume\s+(\S+)$/i);if(i)return{type:"resume",id:i[1]};const o=s.match(/^(\S+\s+\S+\s+\S+\s+\S+\s+\S+)\s+(.+)$/);return o&&j(o[1])?{type:"create_cron",cronExpression:o[1],prompt:o[2]}:{type:"create_nl",input:s}}function B(e){return e.trim()==="/version"}function A(e){const t=e.trim().toLowerCase();return t==="/open"?"folder":t==="/open shell"?"shell":t==="/open code"?"code":null}function N(e){const t=e.trim().toLowerCase();return t==="/clean"?"current":t==="/clean all"?"all":null}function H(e){return e.trim().toLowerCase()==="/reset-apikeycfg"}function U(e){const t=e.trim();if(!/^\/cfg(?:\s|$)/i.test(t))return null;const s=t.substring(4).trim();if(!s)return{};if(/^--help$/i.test(s))return null;const r={},n=s.split(/\s+/);for(let i=0;i<n.length;i++){const o=n[i];if(o==="--dingToken"&&n[i+1])r.dingToken=n[++i];else if(o==="--linkConversationId"&&n[i+1])r.linkConversationId=n[++i];else if(o==="--conversationId"&&n[i+1])r.conversationId=n[++i];else if(o==="--whiteUserList"&&n[i+1])r.whiteUserList=n[++i].split(",").map(a=>a.trim()).filter(Boolean);else if(o==="--conversationTitle"&&n[i+1]){const a=[];for(;i+1<n.length&&!n[i+1].startsWith("--");)a.push(n[++i]);a.length>0&&(r.conversationTitle=a.join(" "))}else if(o==="--atSender"&&n[i+1]){const a=n[++i].toLowerCase();r.atSender=a==="true"||a==="1"||a==="yes"}else if(o==="--receiveReply"&&n[i+1]){const a=n[++i].toLowerCase();r.receiveReply=a==="true"||a==="1"||a==="yes"}else if(o==="--preBash"&&n[i+1]){const a=[];for(;i+1<n.length&&!n[i+1].startsWith("--");)a.push(n[++i]);a.length>0&&(r.preBash=a.join(" ").replace(/^["']|["']$/g,""))}else o==="--permissionMode"&&n[i+1]&&(r.permissionMode=n[++i])}return r}function E(e){const s=e.trim().match(/^\/bash\s+(.+)$/i);return s&&s[1].trim()||null}function G(e){const t=e.trim();if(!/^\/mq(?:\s|$)/i.test(t)&&t.toLowerCase()!=="/mq")return null;const s=t.substring(3).trim();if(!s)return{type:"list"};if(/^front$/i.test(s))return{type:"front"};if(/^rm$/i.test(s))return{type:"rm",all:!0};const r=s.match(/^rm\s+(.+)$/i);if(r){const n=r[1].trim(),i=[],o=n.match(/^(\d+)\s*-\s*(\d+)$/);if(o){const m=parseInt(o[1],10),d=parseInt(o[2],10);if(m>0&&d>=m){for(let u=m;u<=d;u++)i.push(u);return{type:"rm",indices:i}}}const a=n.split(/\s+/);for(const m of a){const d=parseInt(m,10);d>0&&i.push(d)}if(i.length>0)return{type:"rm",indices:i}}return null}function K(e){const t=e.trim(),s=t.match(/^\/auth\s+admin\s+add\s+(\S+)$/i);if(s)return{type:"adminAdd",staffId:s[1]};const r=t.match(/^\/auth\s+admin\s+(?:rm|del)\s+(\S+)$/i);if(r)return{type:"adminRm",staffId:r[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 i=t.match(/^\/auth\s+(?:del(?:ete)?|rm)\s+(\S+)$/i);if(i)return{type:"del",staffId:i[1]};const o=t.match(/^\/auth\s+approve\s+(\S+)$/i);if(o)return{type:"approve",requestId:o[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 W(e){return/^\/goon$/i.test(e.trim())}function P(e){const s=e.trim().match(/^\/cc\s+(.+)$/i);if(!s)return null;const r=s[1].trim();return r.startsWith("/")?r:`/${r}`}function F(e){return/^\/claude\.md$/i.test(e.trim())}function V(e){const t=e.trim();return t==="/!"||t==="/\uFF01"||t==="!"||t==="\uFF01"}function Y(e){const t=e.trim();if(!/^\/destroy(\b|$)/.test(t))return null;const s=t.substring(8).trim();if(!s)return{};if(/^--help$/i.test(s))return null;const r={},n=s.split(/\s+/);for(let i=0;i<n.length;i++)n[i]==="--conversationId"&&n[i+1]&&(r.conversationId=n[++i]);return r}function z(e){const t=e.trim();if(!/^\/freedom(\b|$)/i.test(t))return null;const s=t.substring(8).trim().toLowerCase();return s?s==="exit"?{action:"exit"}:null:{action:"enter"}}function Q(e,t){const s=e.trim();if(!/^\/todo(?:\s|$)/i.test(s)&&s.toLowerCase()!=="/todo")return null;const r=s.substring(5).trim();if(/^list$/i.test(r))return{type:"list"};if(!r)return{type:"list"};const n=r.match(/^mode\s+(staffId|dingtalkId)$/i);if(n)return{type:"mode",mode:n[1]};const i=r.match(/^done\s+(\d+)$/i);if(i)return{type:"done",index:parseInt(i[1],10)};if(/^rm\s+all$/i.test(r))return{type:"remove",index:"all"};const o=r.match(/^rm\s+(\d+)$/i);if(o)return{type:"remove",index:parseInt(o[1],10)};if(/^remind\s+-1$/i.test(r))return{type:"remind",hour:null};const a=r.match(/^remind\s+(\d+)$/i);if(a){const c=parseInt(a[1],10);return c>=0&&c<=23?{type:"remind",hour:c}:null}let m=r,d,u,p;const f=m.match(/@(\S+)/);if(f){const c=f[1];m=m.replace(/@\S+/,"").trim(),d=c,u=c}const h=m.match(/\bddl\s+(.+)$/i);return h&&(p=h[1].trim(),m=m.replace(/\bddl\s+.+$/i,"").trim()),m?{type:"add",content:m,assigneeId:d,assigneeNick:u,deadline:p}:null}function J(e){const t=e.trim();if(!/^\/menu(?:\s|$)/i.test(t)&&t.toLowerCase()!=="/menu")return null;const s=t.substring(5).trim(),r=s.startsWith("-g "),n=r?s.substring(3).trim():s;if(!s)return{type:"show"};if(r&&!n)return{type:"list",isGlobal:!0};const i=n.match(/^trigger\s+(\S+)$/i);if(i&&!r)return{type:"trigger",word:i[1]};const o=n.match(/^add\s+(.+)$/i);if(o)return{type:"add",command:o[1].trim(),isGlobal:r};const a=n.match(/^del(?:ete)?\s+(\d+)$/i);return a?{type:"del",index:parseInt(a[1],10),isGlobal:r}:/^list$/i.test(n)?{type:"list",isGlobal:r}:r?null:{type:"show"}}function X(e){const t=e.trim();if(!/^\/reboot(?:\s|$)/i.test(t))return null;const s=t.substring(7).trim();if(!s)return{update:!1};const r=s.match(/^--update(?:\s+(\S+))?$/i);return r?{update:!0,tag:r[1]}:null}function Z(e){const t=e.trim();return/^\/recorder\s+on$/i.test(t)?"on":/^\/recorder\s+exit$/i.test(t)?"exit":null}
5
+ `)}function v(e){const s=e.trim().match(/^\/log(?:\s+(\d+))?$/i);if(!s)return null;const r=parseInt(s[1],10);return isNaN(r)||r<=0?10:r}function D(e){const s=e.trim().match(/^\/ls(?:\s+(.+))?$/i);if(!s)return null;if(s[1]===void 0)return{target:"",depth:1};const r=s[1].trim().split(/\s+/),n=r[0]||"",i=r[1]?parseInt(r[1],10):1;return{target:n,depth:isNaN(i)||i<0?1:Math.min(i,5)}}function R(e,t,s=3){const r=[{dir:e,depth:0}];for(;r.length>0;){const{dir:n,depth:i}=r.shift();if(!(i>s))try{const a=y.default.readdirSync(n,{withFileTypes:!0});for(const o of a)if(!(!o.isDirectory()||o.name.startsWith("."))){if(o.name===t)return c.default.join(n,o.name);r.push({dir:c.default.join(n,o.name),depth:i+1})}}catch{continue}}return null}function $(e,t=0,s=1){try{const r=y.default.readdirSync(e,{withFileTypes:!0}).filter(a=>!a.name.startsWith("."));if(r.length===0)return t===0?"\u{1F4C2} \u76EE\u5F55\u4E3A\u7A7A":"";r.sort((a,o)=>a.isDirectory()!==o.isDirectory()?a.isDirectory()?-1:1:a.name.localeCompare(o.name));const n=[],i=". ".repeat(t);for(const a of r){const o=a.isDirectory()?"\u{1F4C1} ":"\u{1F4C4} ",m=a.isDirectory()?"/":"";if(n.push(`${i}${o}${a.name}${m}`),a.isDirectory()&&t<s){const u=c.default.join(e,a.name),d=$(u,t+1,s);d&&n.push(d)}}return n.join(`
6
+ `)}catch{return t===0?"\u274C \u65E0\u6CD5\u8BFB\u53D6\u76EE\u5F55":""}}function O(e){const t=e.trim().match(/^\/resume(?:\s+(\S+))?$/i);return t?t[1]!==void 0?t[1]:"":null}function j(e){const t=e.trim().split(/\s+/);return t.length!==5?!1:t.every(s=>/^[\d*/\-]+$/.test(s))}function A(e){const t=e.trim();if(!t.toLowerCase().startsWith("/cron"))return null;const s=t.substring(5).trim();if(!s)return null;if(/^(list|ls)$/i.test(s))return{type:"list"};const r=s.match(/^(?:delete|rm)\s+(\S+)$/i);if(r)return{type:"delete",id:r[1]};const n=s.match(/^pause\s+(\S+)$/i);if(n)return{type:"pause",id:n[1]};const i=s.match(/^resume\s+(\S+)$/i);if(i)return{type:"resume",id:i[1]};const a=s.match(/^(\S+\s+\S+\s+\S+\s+\S+\s+\S+)\s+(.+)$/);return a&&j(a[1])?{type:"create_cron",cronExpression:a[1],prompt:a[2]}:{type:"create_nl",input:s}}function B(e){return e.trim()==="/version"}function _(e){const t=e.trim().toLowerCase();return t==="/open"?"folder":t==="/open shell"?"shell":t==="/open code"?"code":null}function G(e){const t=e.trim().toLowerCase();return t==="/clean"?"current":t==="/clean all"?"all":null}function N(e){return e.trim().toLowerCase()==="/reset-apikeycfg"}function P(e){const t=e.trim();if(!/^\/cfg(?:\s|$)/i.test(t))return null;const s=t.substring(4).trim();if(!s)return{};if(/^--help$/i.test(s))return null;const r={},n=s.split(/\s+/);for(let i=0;i<n.length;i++){const a=n[i];if(a==="--dingToken"&&n[i+1])r.dingToken=n[++i];else if(a==="--linkConversationId"&&n[i+1])r.linkConversationId=n[++i];else if(a==="--conversationId"&&n[i+1])r.conversationId=n[++i];else if(a==="--whiteUserList"&&n[i+1])r.whiteUserList=n[++i].split(",").map(o=>o.trim()).filter(Boolean);else if(a==="--conversationTitle"&&n[i+1]){const o=[];for(;i+1<n.length&&!n[i+1].startsWith("--");)o.push(n[++i]);o.length>0&&(r.conversationTitle=o.join(" "))}else if(a==="--atSender"&&n[i+1]){const o=n[++i].toLowerCase();r.atSender=o==="true"||o==="1"||o==="yes"}else if(a==="--receiveReply"&&n[i+1]){const o=n[++i].toLowerCase();r.receiveReply=o==="true"||o==="1"||o==="yes"}else if(a==="--preBash"&&n[i+1]){const o=[];for(;i+1<n.length&&!n[i+1].startsWith("--");)o.push(n[++i]);o.length>0&&(r.preBash=o.join(" ").replace(/^["']|["']$/g,""))}else if(a==="--permissionMode"&&n[i+1])r.permissionMode=n[++i];else if(a==="--qaGitRepos"&&n[i+1])r.qaGitRepos=n[++i].split(",").map(o=>o.trim()).filter(Boolean);else if(a==="--qaDocs"&&n[i+1])r.qaDocs=n[++i].split(",").map(o=>o.trim()).filter(Boolean);else if(a==="--qaAutoPull"&&n[i+1]){const o=n[++i].toLowerCase();r.qaAutoPull=o==="true"||o==="1"||o==="yes"}}return r}function H(e){const s=e.trim().match(/^\/bash\s+(.+)$/i);return s&&s[1].trim()||null}function U(e){const t=e.trim();if(!/^\/mq(?:\s|$)/i.test(t)&&t.toLowerCase()!=="/mq")return null;const s=t.substring(3).trim();if(!s)return{type:"list"};if(/^front$/i.test(s))return{type:"front"};if(/^rm$/i.test(s))return{type:"rm",all:!0};const r=s.match(/^rm\s+(.+)$/i);if(r){const n=r[1].trim(),i=[],a=n.match(/^(\d+)\s*-\s*(\d+)$/);if(a){const m=parseInt(a[1],10),u=parseInt(a[2],10);if(m>0&&u>=m){for(let d=m;d<=u;d++)i.push(d);return{type:"rm",indices:i}}}const o=n.split(/\s+/);for(const m of o){const u=parseInt(m,10);u>0&&i.push(u)}if(i.length>0)return{type:"rm",indices:i}}return null}function E(e){const t=e.trim(),s=t.match(/^\/auth\s+admin\s+add\s+(\S+)$/i);if(s)return{type:"adminAdd",staffId:s[1]};const r=t.match(/^\/auth\s+admin\s+(?:rm|del)\s+(\S+)$/i);if(r)return{type:"adminRm",staffId:r[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 i=t.match(/^\/auth\s+(?:del(?:ete)?|rm)\s+(\S+)$/i);if(i)return{type:"del",staffId:i[1]};const a=t.match(/^\/auth\s+approve\s+(\S+)$/i);if(a)return{type:"approve",requestId:a[1]};const o=t.match(/^\/auth\s+reject\s+(\S+)$/i);return o?{type:"reject",requestId:o[1]}:/^\/auth(?:\s+list)?$/i.test(t)?{type:"list"}:null}function K(e){return/^\/goon$/i.test(e.trim())}function W(e){const s=e.trim().match(/^\/cc\s+(.+)$/i);if(!s)return null;const r=s[1].trim();return r.startsWith("/")?r:`/${r}`}function F(e){return/^\/claude\.md$/i.test(e.trim())}function Q(e){const t=e.trim();return t==="/!"||t==="/\uFF01"||t==="!"||t==="\uFF01"}function V(e){const t=e.trim();if(!/^\/destroy(\b|$)/.test(t))return null;const s=t.substring(8).trim();if(!s)return{};if(/^--help$/i.test(s))return null;const r={},n=s.split(/\s+/);for(let i=0;i<n.length;i++)n[i]==="--conversationId"&&n[i+1]&&(r.conversationId=n[++i]);return r}function Y(e){const t=e.trim();if(!/^\/freedom(\b|$)/i.test(t))return null;const s=t.substring(8).trim().toLowerCase();return s?s==="exit"?{action:"exit"}:null:{action:"enter"}}function z(e){const t=e.trim();if(!/^\/qa(\b|$)/i.test(t))return null;const s=t.substring(3).trim().toLowerCase();return s?s==="exit"?{action:"exit"}:null:{action:"enter"}}function J(e,t){const s=e.trim();if(!/^\/todo(?:\s|$)/i.test(s)&&s.toLowerCase()!=="/todo")return null;const r=s.substring(5).trim();if(/^list$/i.test(r))return{type:"list"};if(!r)return{type:"list"};const n=r.match(/^mode\s+(staffId|dingtalkId)$/i);if(n)return{type:"mode",mode:n[1]};const i=r.match(/^done\s+(\d+)$/i);if(i)return{type:"done",index:parseInt(i[1],10)};if(/^rm\s+all$/i.test(r))return{type:"remove",index:"all"};const a=r.match(/^rm\s+(\d+)$/i);if(a)return{type:"remove",index:parseInt(a[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 l=parseInt(o[1],10);return l>=0&&l<=23?{type:"remind",hour:l}:null}let m=r,u,d,p;const f=m.match(/@(\S+)/);if(f){const l=f[1];m=m.replace(/@\S+/,"").trim(),u=l,d=l}const h=m.match(/\bddl\s+(.+)$/i);return h&&(p=h[1].trim(),m=m.replace(/\bddl\s+.+$/i,"").trim()),m?{type:"add",content:m,assigneeId:u,assigneeNick:d,deadline:p}:null}function X(e){const t=e.trim();if(!/^\/menu(?:\s|$)/i.test(t)&&t.toLowerCase()!=="/menu")return null;const s=t.substring(5).trim(),r=s.startsWith("-g "),n=r?s.substring(3).trim():s;if(!s)return{type:"show"};if(r&&!n)return{type:"list",isGlobal:!0};const i=n.match(/^trigger\s+(\S+)$/i);if(i&&!r)return{type:"trigger",word:i[1]};const a=n.match(/^add\s+(.+)$/i);if(a)return{type:"add",command:a[1].trim(),isGlobal:r};const o=n.match(/^del(?:ete)?\s+(\d+)$/i);return o?{type:"del",index:parseInt(o[1],10),isGlobal:r}:/^list$/i.test(n)?{type:"list",isGlobal:r}:r?null:{type:"show"}}function Z(e){const t=e.trim();if(!/^\/reboot(?:\s|$)/i.test(t))return null;const s=t.substring(7).trim();if(!s)return{update:!1};const r=s.match(/^--update(?:\s+(\S+))?$/i);return r?{update:!0,tag:r[1]}:null}function ee(e){const t=e.trim();return/^\/recorder\s+on$/i.test(t)?"on":/^\/recorder\s+exit$/i.test(t)?"exit":null}
@@ -1,14 +1,14 @@
1
- "use strict";var N=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.timestamp=$,exports.getHomeDir=F,exports.getClientDir=U,exports.initClientDir=J,exports.ensureClientDir=oe,exports.getClientConfig=re,exports.resolveToUserId=T,exports.authCheck=ce,exports.isOwner=Y,exports.isAdmin=R,exports.isOwnerOrAdmin=H,exports.debugLog=B,exports.isMobile=p,exports.isJobNumber=M,exports.getPhoneMapFile=W,exports.loadPhoneMap=z,exports.savePhoneMap=L,exports.userIdToPhone=ue,exports.getUserIdNameMapFile=A,exports.loadUserIdNameMap=G,exports.saveUserIdNameMap=K,exports.resolveUserIdName=de,exports.resolveUserId=le,exports.resolveAllPhonesInConfig=fe,exports.hashConversationId=X,exports.getReplyWebhook=ge,exports.getReplyConversationId=Se,exports.findActiveSession=D,exports.getConversationConfig=O,exports.getConversationDir=j,exports.getSessionsDir=P,exports.getTasksDir=Z,exports.getImagesDir=V,exports.getSessionDir=w,exports.getSessionId=v,exports.formatSessionInfo=ye,exports.readSessionLogTail=he,exports.findHistorySession=ee,exports.findLatestSession=me,exports.updateSessionFile=q,exports.appendSessionLog=$e,exports.getActiveSessionsFile=x,exports.saveActiveSession=I,exports.loadActiveSessions=we,exports.endSession=ne,exports.switchToSession=ve,exports.startNewSession=se,exports.processMessageQueue=b,exports.handleSessionMessage=pe,exports.cleanCache=Ce;const C=require("utils-ok"),r=N(require("fs")),te=N(require("os")),_=N(require("assert")),Q=N(require("crypto")),g=N(require("path")),ie=require("./commands"),S=require("./messaging"),k=require("./claude-process"),E=require("./platform");function $(){return C.dateUtil.mm(Date.now()).format("YYYY-MM-DD HH:mm:ss")}function F(){return te.default.homedir()}function U(e){return g.default.join(F(),".cc-ding",e.clientId)}function J(e,s){const n=g.default.join(F(),".cc-ding",e),t=g.default.join(n,"config.json");return r.default.mkdirSync(n,{recursive:!0}),r.default.writeFileSync(t,JSON.stringify(s,null,2),{encoding:"utf-8",mode:(0,E.isWindows)()?void 0:384}),(0,E.isWindows)()||r.default.chmodSync(t,384),t}function oe(e){const s=g.default.join(F(),".cc-ding",e),n=g.default.join(s,"config.json");if(r.default.existsSync(n))return;console.log(`[${$()}] \u5BA2\u6237\u7AEF\u76EE\u5F55\u672A\u521D\u59CB\u5316: ${s}`),console.log(`[${$()}] \u6B63\u5728\u81EA\u52A8\u521D\u59CB\u5316...`),J(e,{clientName:"cc\u52A9\u624B",owner:"<owner\u624B\u673A\u53F7>",whiteUserList:[],clientSecret:"<clientSecret-\u9489\u9489Stream\u8FDE\u63A5\u5BC6\u94A5>",defaultDingToken:"<\u515C\u5E95\u9489\u9489\u673A\u5668\u4EBAToken>",conversations:[]}),console.log(`[${$()}] \u5DF2\u751F\u6210\u9ED8\u8BA4\u914D\u7F6E\u6587\u4EF6: ${n}`),console.log(`[${$()}] \u8BF7\u7F16\u8F91 config.json \u586B\u5199\u5FC5\u8981\u7684\u914D\u7F6E\u9879\u540E\u91CD\u65B0\u542F\u52A8`),process.exit(1)}function re(e){const s=g.default.join(U(e),"config.json");(0,_.default)(r.default.existsSync(s),`Could not find client config file: ${s}`);const n=C.fileUtil.getJSON(s);return(0,_.default)(n.clientSecret,"config.json missing required field: clientSecret"),(0,_.default)(n.whiteUserList,"config.json missing required field: whiteUserList"),n}function T(e,s){return p(s)&&e.resolvedPhones[s]||s}function ce(e,s,n){if(H(e,s))return!0;if(n){const t=e.config.conversations.find(i=>i.conversationId===n);if(t?.freedomMode)return!0;if(t?.whiteUserList&&t.whiteUserList.length>0)return t.whiteUserList.some(i=>T(e,i)===s)}return e.config.whiteUserList.some(t=>T(e,t)===s)}function Y(e,s){const n=e.config.owner;if(!n)return!1;const t=e.resolvedPhones[n];return!!t&&t===s}function R(e,s){return e.config.adminUserList?.length?e.config.adminUserList.some(n=>T(e,n)===s):!1}function H(e,s){return Y(e,s)||R(e,s)}function B(e,s,...n){e.config.debug&&console.log(`[DEBUG] ${s}`,...n)}const ae=/^1\d{10}$/;function p(e){return ae.test(e)}function M(e){return!p(e)&&!e.includes("_")&&/^[A-Za-z0-9]+$/.test(e)}function W(e){return g.default.join(U(e),"user-map.json")}function z(e){const s=W(e);if(!r.default.existsSync(s))return{};try{const n=JSON.parse(r.default.readFileSync(s,"utf-8"));if(typeof n=="object"&&n!==null)return n}catch{}return{}}function L(e,s){const n=W(e);try{r.default.writeFileSync(n,JSON.stringify(s,null,2),"utf-8")}catch(t){console.error("\u4FDD\u5B58 user-map.json \u5931\u8D25:",t)}}function ue(e,s){for(const[n,t]of Object.entries(e.resolvedPhones))if(t===s)return n;return null}function A(e){return g.default.join(U(e),"user-id-name-map.json")}function G(e){const s=A(e);if(!r.default.existsSync(s))return{};try{const n=JSON.parse(r.default.readFileSync(s,"utf-8"));if(typeof n=="object"&&n!==null)return n}catch{}return{}}function K(e,s){const n=A(e);try{r.default.writeFileSync(n,JSON.stringify(s,null,2),"utf-8")}catch(t){console.error("\u4FDD\u5B58 user-id-name-map.json \u5931\u8D25:",t)}}async function de(e,s){if(!s)return null;const n=G(e);if(n[s])return n[s];const t=await(0,S.queryDingUser)(e,s);return t&&t.name?(n[s]=t.name,K(e,n),t.name):null}async function le(e,s){if(!s)return null;if(!p(s)&&!M(s))return s;if(e.resolvedPhones[s])return e.resolvedPhones[s];let n=null;return p(s)?n=await(0,S.queryUserIdByMobile)(e,s):M(s)&&(n=await(0,S.queryUserIdByJobNumber)(e,s)),n&&(e.resolvedPhones[s]=n,L(e,e.resolvedPhones)),n}async function fe(e){e.resolvedPhones=z(e);const s=[],n=async t=>{if(e.resolvedPhones[t])return;let i=null;p(t)?i=await(0,S.queryUserIdByMobile)(e,t):M(t)&&(i=await(0,S.queryUserIdByJobNumber)(e,t)),i&&(e.resolvedPhones[t]=i,s.push(t))};e.config.owner&&(p(e.config.owner)||M(e.config.owner)?(await n(e.config.owner),e.resolvedPhones[e.config.owner]||console.warn(`[WARN] \u65E0\u6CD5\u89E3\u6790 owner: ${e.config.owner}`)):console.warn(`[WARN] owner \u683C\u5F0F\u65E0\u6548(\u9700\u4E3A\u624B\u673A\u53F7\u6216\u5DE5\u53F7): ${e.config.owner}`));for(const t of e.config.whiteUserList)(p(t)||M(t))&&(await n(t),e.resolvedPhones[t]||console.warn(`[WARN] \u65E0\u6CD5\u89E3\u6790 whiteUserList: ${t}`));for(const t of e.config.conversations)if(t.whiteUserList)for(const i of t.whiteUserList)(p(i)||M(i))&&(await n(i),e.resolvedPhones[i]||console.warn(`[WARN] \u65E0\u6CD5\u89E3\u6790\u7FA4\u767D\u540D\u5355: ${i}`));s.length>0&&L(e,e.resolvedPhones),console.log(`[\u7528\u6237\u89E3\u6790] \u5DF2\u52A0\u8F7D ${Object.keys(e.resolvedPhones).length} \u6761\u8BB0\u5F55 (${s.length} \u6761\u65B0\u89E3\u6790)`)}function X(e,s){const t=O(e,s)?.linkConversationId||s;return Q.default.createHash("md5").update(t).digest("hex")}function ge(e){return e.currentWebhook||e.sessionWebhook}function Se(e){return e.currentConversationId||e.conversationId}function D(e,s){const n=e.activeSessions.get(s);if(n)return{key:s,session:n};const t=O(e,s);if(t?.linkConversationId){for(const i of e.activeSessions)if(O(e,i[0])?.linkConversationId===t.linkConversationId)return{key:i[0],session:i[1]}}}function O(e,s){return e.config.conversations.find(n=>n.conversationId===s)}function j(e,s){const n=X(e,s);return g.default.join(U(e),n)}function P(e,s){return g.default.join(j(e,s),".sessions")}function Z(e,s){return g.default.join(j(e,s),".tasks")}function V(e,s){return g.default.join(j(e,s),".images")}function w(e,s){const n=s.claudeSessionId||s.startTimeStr;return g.default.join(P(e,s.conversationId),n)}function v(e){return e.claudeSessionId||e.startTimeStr}function ye(e,s){const n=D(e,s);if(!n)return null;const{session:t,isProcessing:i,messageQueue:o}=n.session;return[`- **\u4F1A\u8BDDID:** ${v(t)}`,`- **\u53D1\u8D77\u8005:** ${t.startNickName}(${t.startStaffId})`,`- **\u5F00\u59CB\u65F6\u95F4:** ${t.startTimeStr}`,`- **\u6700\u540E\u53D1\u9001\u8005:** ${n.session.lastSenderStaffId}`,`- **\u5904\u7406\u4E2D:** ${i}`,`- **\u6392\u961F\u6D88\u606F:** ${o?.length||0} \u6761`].join(`
1
+ "use strict";var N=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.timestamp=$,exports.getHomeDir=F,exports.getClientDir=U,exports.initClientDir=J,exports.ensureClientDir=oe,exports.getClientConfig=re,exports.resolveToUserId=T,exports.authCheck=ce,exports.isOwner=Y,exports.isAdmin=R,exports.isOwnerOrAdmin=H,exports.debugLog=B,exports.isMobile=C,exports.isJobNumber=M,exports.getPhoneMapFile=W,exports.loadPhoneMap=z,exports.savePhoneMap=L,exports.userIdToPhone=ue,exports.getUserIdNameMapFile=q,exports.loadUserIdNameMap=G,exports.saveUserIdNameMap=K,exports.resolveUserIdName=de,exports.resolveUserId=le,exports.resolveAllPhonesInConfig=fe,exports.hashConversationId=X,exports.getReplyWebhook=ge,exports.getReplyConversationId=Se,exports.findActiveSession=D,exports.getConversationConfig=O,exports.getConversationDir=j,exports.getSessionsDir=P,exports.getTasksDir=Z,exports.getImagesDir=V,exports.getSessionDir=w,exports.getSessionId=v,exports.formatSessionInfo=ye,exports.readSessionLogTail=he,exports.findHistorySession=ee,exports.findLatestSession=me,exports.updateSessionFile=A,exports.appendSessionLog=$e,exports.getActiveSessionsFile=x,exports.saveActiveSession=I,exports.loadActiveSessions=we,exports.endSession=ne,exports.switchToSession=ve,exports.startNewSession=se,exports.processMessageQueue=b,exports.handleSessionMessage=Ce,exports.cleanCache=pe;const p=require("utils-ok"),r=N(require("fs")),te=N(require("os")),_=N(require("assert")),Q=N(require("crypto")),g=N(require("path")),ie=require("./commands"),S=require("./messaging"),k=require("./claude-process"),E=require("./platform");function $(){return p.dateUtil.mm(Date.now()).format("YYYY-MM-DD HH:mm:ss")}function F(){return te.default.homedir()}function U(e){return g.default.join(F(),".cc-ding",e.clientId)}function J(e,s){const n=g.default.join(F(),".cc-ding",e),t=g.default.join(n,"config.json");return r.default.mkdirSync(n,{recursive:!0}),r.default.writeFileSync(t,JSON.stringify(s,null,2),{encoding:"utf-8",mode:(0,E.isWindows)()?void 0:384}),(0,E.isWindows)()||r.default.chmodSync(t,384),t}function oe(e){const s=g.default.join(F(),".cc-ding",e),n=g.default.join(s,"config.json");if(r.default.existsSync(n))return;console.log(`[${$()}] \u5BA2\u6237\u7AEF\u76EE\u5F55\u672A\u521D\u59CB\u5316: ${s}`),console.log(`[${$()}] \u6B63\u5728\u81EA\u52A8\u521D\u59CB\u5316...`),J(e,{clientName:"cc\u52A9\u624B",owner:"<owner\u624B\u673A\u53F7>",whiteUserList:[],clientSecret:"<clientSecret-\u9489\u9489Stream\u8FDE\u63A5\u5BC6\u94A5>",defaultDingToken:"<\u515C\u5E95\u9489\u9489\u673A\u5668\u4EBAToken>",conversations:[]}),console.log(`[${$()}] \u5DF2\u751F\u6210\u9ED8\u8BA4\u914D\u7F6E\u6587\u4EF6: ${n}`),console.log(`[${$()}] \u8BF7\u7F16\u8F91 config.json \u586B\u5199\u5FC5\u8981\u7684\u914D\u7F6E\u9879\u540E\u91CD\u65B0\u542F\u52A8`),process.exit(1)}function re(e){const s=g.default.join(U(e),"config.json");(0,_.default)(r.default.existsSync(s),`Could not find client config file: ${s}`);const n=p.fileUtil.getJSON(s);return(0,_.default)(n.clientSecret,"config.json missing required field: clientSecret"),(0,_.default)(n.whiteUserList,"config.json missing required field: whiteUserList"),n}function T(e,s){return C(s)&&e.resolvedPhones[s]||s}function ce(e,s,n){if(H(e,s))return!0;if(n){const t=e.config.conversations.find(i=>i.conversationId===n);if(t?.freedomMode||t?.qaMode)return!0;if(t?.whiteUserList&&t.whiteUserList.length>0)return t.whiteUserList.some(i=>T(e,i)===s)}return e.config.whiteUserList.some(t=>T(e,t)===s)}function Y(e,s){const n=e.config.owner;if(!n)return!1;const t=e.resolvedPhones[n];return!!t&&t===s}function R(e,s){return e.config.adminUserList?.length?e.config.adminUserList.some(n=>T(e,n)===s):!1}function H(e,s){return Y(e,s)||R(e,s)}function B(e,s,...n){e.config.debug&&console.log(`[DEBUG] ${s}`,...n)}const ae=/^1\d{10}$/;function C(e){return ae.test(e)}function M(e){return!C(e)&&!e.includes("_")&&/^[A-Za-z0-9]+$/.test(e)}function W(e){return g.default.join(U(e),"user-map.json")}function z(e){const s=W(e);if(!r.default.existsSync(s))return{};try{const n=JSON.parse(r.default.readFileSync(s,"utf-8"));if(typeof n=="object"&&n!==null)return n}catch{}return{}}function L(e,s){const n=W(e);try{r.default.writeFileSync(n,JSON.stringify(s,null,2),"utf-8")}catch(t){console.error("\u4FDD\u5B58 user-map.json \u5931\u8D25:",t)}}function ue(e,s){for(const[n,t]of Object.entries(e.resolvedPhones))if(t===s)return n;return null}function q(e){return g.default.join(U(e),"user-id-name-map.json")}function G(e){const s=q(e);if(!r.default.existsSync(s))return{};try{const n=JSON.parse(r.default.readFileSync(s,"utf-8"));if(typeof n=="object"&&n!==null)return n}catch{}return{}}function K(e,s){const n=q(e);try{r.default.writeFileSync(n,JSON.stringify(s,null,2),"utf-8")}catch(t){console.error("\u4FDD\u5B58 user-id-name-map.json \u5931\u8D25:",t)}}async function de(e,s){if(!s)return null;const n=G(e);if(n[s])return n[s];const t=await(0,S.queryDingUser)(e,s);return t&&t.name?(n[s]=t.name,K(e,n),t.name):null}async function le(e,s){if(!s)return null;if(!C(s)&&!M(s))return s;if(e.resolvedPhones[s])return e.resolvedPhones[s];let n=null;return C(s)?n=await(0,S.queryUserIdByMobile)(e,s):M(s)&&(n=await(0,S.queryUserIdByJobNumber)(e,s)),n&&(e.resolvedPhones[s]=n,L(e,e.resolvedPhones)),n}async function fe(e){e.resolvedPhones=z(e);const s=[],n=async t=>{if(e.resolvedPhones[t])return;let i=null;C(t)?i=await(0,S.queryUserIdByMobile)(e,t):M(t)&&(i=await(0,S.queryUserIdByJobNumber)(e,t)),i&&(e.resolvedPhones[t]=i,s.push(t))};e.config.owner&&(C(e.config.owner)||M(e.config.owner)?(await n(e.config.owner),e.resolvedPhones[e.config.owner]||console.warn(`[WARN] \u65E0\u6CD5\u89E3\u6790 owner: ${e.config.owner}`)):console.warn(`[WARN] owner \u683C\u5F0F\u65E0\u6548(\u9700\u4E3A\u624B\u673A\u53F7\u6216\u5DE5\u53F7): ${e.config.owner}`));for(const t of e.config.whiteUserList)(C(t)||M(t))&&(await n(t),e.resolvedPhones[t]||console.warn(`[WARN] \u65E0\u6CD5\u89E3\u6790 whiteUserList: ${t}`));for(const t of e.config.conversations)if(t.whiteUserList)for(const i of t.whiteUserList)(C(i)||M(i))&&(await n(i),e.resolvedPhones[i]||console.warn(`[WARN] \u65E0\u6CD5\u89E3\u6790\u7FA4\u767D\u540D\u5355: ${i}`));s.length>0&&L(e,e.resolvedPhones),console.log(`[\u7528\u6237\u89E3\u6790] \u5DF2\u52A0\u8F7D ${Object.keys(e.resolvedPhones).length} \u6761\u8BB0\u5F55 (${s.length} \u6761\u65B0\u89E3\u6790)`)}function X(e,s){const t=O(e,s)?.linkConversationId||s;return Q.default.createHash("md5").update(t).digest("hex")}function ge(e){return e.currentWebhook||e.sessionWebhook}function Se(e){return e.currentConversationId||e.conversationId}function D(e,s){const n=e.activeSessions.get(s);if(n)return{key:s,session:n};const t=O(e,s);if(t?.linkConversationId){for(const i of e.activeSessions)if(O(e,i[0])?.linkConversationId===t.linkConversationId)return{key:i[0],session:i[1]}}}function O(e,s){return e.config.conversations.find(n=>n.conversationId===s)}function j(e,s){const n=X(e,s);return g.default.join(U(e),n)}function P(e,s){return g.default.join(j(e,s),".sessions")}function Z(e,s){return g.default.join(j(e,s),".tasks")}function V(e,s){return g.default.join(j(e,s),".images")}function w(e,s){const n=s.claudeSessionId||s.startTimeStr;return g.default.join(P(e,s.conversationId),n)}function v(e){return e.claudeSessionId||e.startTimeStr}function ye(e,s){const n=D(e,s);if(!n)return null;const{session:t,isProcessing:i,messageQueue:o}=n.session;return[`- **\u4F1A\u8BDDID:** ${v(t)}`,`- **\u53D1\u8D77\u8005:** ${t.startNickName}(${t.startStaffId})`,`- **\u5F00\u59CB\u65F6\u95F4:** ${t.startTimeStr}`,`- **\u6700\u540E\u53D1\u9001\u8005:** ${n.session.lastSenderStaffId}`,`- **\u5904\u7406\u4E2D:** ${i}`,`- **\u6392\u961F\u6D88\u606F:** ${o?.length||0} \u6761`].join(`
2
2
  `)}function he(e,s,n){const t=D(e,s);if(!t)return null;const i=t.session,o=`${w(e,i.session)}/session.log`;if(!r.default.existsSync(o))return null;try{return r.default.readFileSync(o,"utf-8").split(`
3
- `).filter(a=>a.length>0).slice(-n).join(`
4
- `)}catch{return null}}function ee(e,s,n){const t=P(e,s),i=`${t}/${n}/session.json`;try{return C.fileUtil.getJSON(i)}catch{}const o=parseInt(n,10);if(!isNaN(o)&&o>0){const d=C.dateUtil.mm(o).format("YYYY-MM-DD-HH-mm-ss"),u=`${t}/${d}/session.json`;try{return C.fileUtil.getJSON(u)}catch{}}return null}function me(e,s){const n=P(e,s);if(!r.default.existsSync(n))return null;const t=D(e,s),i=t?v(t.session.session):null;let o=null,d=0;try{const u=r.default.readdirSync(n,{withFileTypes:!0});for(const a of u){if(!a.isDirectory())continue;const f=g.default.join(n,a.name,"session.json");if(r.default.existsSync(f))try{const c=C.fileUtil.getJSON(f);if(i&&v(c)===i)continue;c.startTime>d&&(d=c.startTime,o=c)}catch{continue}}}catch{}return o}function q(e,s,n){if(n.claudeSessionId&&!s.claudeSessionId){const i=w(e,s);s.claudeSessionId=n.claudeSessionId;const o=w(e,s);i!==o&&r.default.existsSync(i)&&(r.default.renameSync(i,o),console.log(`[${$()}] \u4F1A\u8BDD\u76EE\u5F55\u91CD\u547D\u540D: ${g.default.basename(i)} -> ${g.default.basename(o)}`))}const t=`${w(e,s)}/session.json`;try{n.sessionWebhook&&(s.sessionWebhook=n.sessionWebhook),n.currentWebhook!==void 0&&(s.currentWebhook=n.currentWebhook||void 0),n.currentConversationId!==void 0&&(s.currentConversationId=n.currentConversationId||void 0),r.default.writeFileSync(t,JSON.stringify(s,null,2),"utf-8");const i=n.claudeSessionId?"claudeSessionId":n.currentWebhook!==void 0?"currentWebhook":"sessionWebhook";console.log(`[${$()}] \u4F1A\u8BDD\u6587\u4EF6\u5DF2\u4FDD\u5B58: ${i}`),I(e,s.conversationId)}catch(i){console.error("\u66F4\u65B0 session.json \u5931\u8D25:",i)}}function $e(e,s,n){const t=`${e}/session.log`,o=`[${$()}] [${s.toUpperCase()}]: ${n}
5
- `;try{r.default.appendFileSync(t,o,"utf-8")}catch{}}function x(e,s){return`${P(e,s)}/active.json`}function I(e,s){const n=e.activeSessions.get(s),t=x(e,s);try{if(!n){r.default.existsSync(t)&&r.default.unlinkSync(t);return}const i={session:n.session,lastSenderStaffId:n.lastSenderStaffId,conversationConfig:n.conversationConfig};r.default.mkdirSync(g.default.dirname(t),{recursive:!0}),r.default.writeFileSync(t,JSON.stringify(i,null,2),"utf-8"),B(e,`\u6D3B\u8DC3\u4F1A\u8BDD\u5DF2\u6301\u4E45\u5316: \u7FA4=${s}`)}catch(i){console.error(`\u6301\u4E45\u5316\u6D3B\u8DC3\u4F1A\u8BDD\u5931\u8D25: \u7FA4=${s}`,i)}}function we(e){for(const s of e.config.conversations){const n=x(e,s.conversationId);if(r.default.existsSync(n))try{const t=C.fileUtil.getJSON(n);if(!t?.session){console.log(`\u6D3B\u8DC3\u4F1A\u8BDD\u6587\u4EF6\u65E0\u6548\uFF0C\u8DF3\u8FC7: ${n}`);continue}const i=w(e,t.session);if(!r.default.existsSync(i)){console.log(`\u6D3B\u8DC3\u4F1A\u8BDD\u76EE\u5F55\u5DF2\u4E0D\u5B58\u5728\uFF0C\u6E05\u7406\u6301\u4E45\u5316\u6587\u4EF6: ${n}`),r.default.unlinkSync(n);continue}e.activeSessions.set(s.conversationId,{session:t.session,lastSenderStaffId:t.lastSenderStaffId||t.session.startStaffId,isProcessing:!1,messageQueue:[],conversationConfig:t.conversationConfig}),console.log(`\u6062\u590D\u6D3B\u8DC3\u4F1A\u8BDD: \u7FA4=${s.conversationId}, \u4F1A\u8BDDID=${v(t.session)}`)}catch(t){console.error(`\u52A0\u8F7D\u6D3B\u8DC3\u4F1A\u8BDD\u5931\u8D25: ${n}`,t)}}}async function ne(e,s,n){const t=D(e,s);if(!t){console.log(`\u7FA4 ${s} \u65E0\u6D3B\u8DC3\u4F1A\u8BDD`),await(0,S.sendDingMessage)(e,{conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u5F53\u524D\u6CA1\u6709\u6D3B\u8DC3\u7684\u4F1A\u8BDD\uFF0C\u65E0\u9700\u7ED3\u675F\u3002
6
- \u53EF\u4EE5\u901A\u8FC7 /new \u5F00\u59CB\u65B0\u4F1A\u8BDD\u3002`});return}const{key:i,session:o}=t,{session:d}=o,u=w(e,d),a=v(d);console.log(`\u7ED3\u675F\u4F1A\u8BDD: \u7FA4=${s}, \u4F1A\u8BDDID=${a}`),(0,k.interruptClaudeProcess)(o,"\u7ED3\u675F\u4F1A\u8BDD\u65F6\u4E2D\u65AD\u6B63\u5728\u6267\u884C\u7684 Claude \u8FDB\u7A0B")&&r.default.appendFileSync(`${u}/session.log`,`[${$()}] [SYSTEM]: \u7ED3\u675F\u4F1A\u8BDD\u65F6\u4E2D\u65AD Claude \u8FDB\u7A0B
3
+ `).filter(u=>u.length>0).slice(-n).join(`
4
+ `)}catch{return null}}function ee(e,s,n){const t=P(e,s),i=`${t}/${n}/session.json`;try{return p.fileUtil.getJSON(i)}catch{}const o=parseInt(n,10);if(!isNaN(o)&&o>0){const d=p.dateUtil.mm(o).format("YYYY-MM-DD-HH-mm-ss"),a=`${t}/${d}/session.json`;try{return p.fileUtil.getJSON(a)}catch{}}return null}function me(e,s){const n=P(e,s);if(!r.default.existsSync(n))return null;const t=D(e,s),i=t?v(t.session.session):null;let o=null,d=0;try{const a=r.default.readdirSync(n,{withFileTypes:!0});for(const u of a){if(!u.isDirectory())continue;const f=g.default.join(n,u.name,"session.json");if(r.default.existsSync(f))try{const c=p.fileUtil.getJSON(f);if(i&&v(c)===i)continue;c.startTime>d&&(d=c.startTime,o=c)}catch{continue}}}catch{}return o}function A(e,s,n){if(n.claudeSessionId&&!s.claudeSessionId){const i=w(e,s);s.claudeSessionId=n.claudeSessionId;const o=w(e,s);i!==o&&r.default.existsSync(i)&&(r.default.renameSync(i,o),console.log(`[${$()}] \u4F1A\u8BDD\u76EE\u5F55\u91CD\u547D\u540D: ${g.default.basename(i)} -> ${g.default.basename(o)}`))}const t=`${w(e,s)}/session.json`;try{n.sessionWebhook&&(s.sessionWebhook=n.sessionWebhook),n.currentWebhook!==void 0&&(s.currentWebhook=n.currentWebhook||void 0),n.currentConversationId!==void 0&&(s.currentConversationId=n.currentConversationId||void 0),r.default.writeFileSync(t,JSON.stringify(s,null,2),"utf-8");const i=n.claudeSessionId?"claudeSessionId":n.currentWebhook!==void 0?"currentWebhook":"sessionWebhook";console.log(`[${$()}] \u4F1A\u8BDD\u6587\u4EF6\u5DF2\u4FDD\u5B58: ${i}`),I(e,s.conversationId)}catch(i){console.error("\u66F4\u65B0 session.json \u5931\u8D25:",i)}}function $e(e,s,n){const t=`${e}/session.log`,o=`[${$()}] [${s.toUpperCase()}]: ${n}
5
+ `;try{r.default.appendFileSync(t,o,"utf-8")}catch{}}function x(e,s){return`${P(e,s)}/active.json`}function I(e,s){const n=e.activeSessions.get(s),t=x(e,s);try{if(!n){r.default.existsSync(t)&&r.default.unlinkSync(t);return}const i={session:n.session,lastSenderStaffId:n.lastSenderStaffId,conversationConfig:n.conversationConfig};r.default.mkdirSync(g.default.dirname(t),{recursive:!0}),r.default.writeFileSync(t,JSON.stringify(i,null,2),"utf-8"),B(e,`\u6D3B\u8DC3\u4F1A\u8BDD\u5DF2\u6301\u4E45\u5316: \u7FA4=${s}`)}catch(i){console.error(`\u6301\u4E45\u5316\u6D3B\u8DC3\u4F1A\u8BDD\u5931\u8D25: \u7FA4=${s}`,i)}}function we(e){for(const s of e.config.conversations){const n=x(e,s.conversationId);if(r.default.existsSync(n))try{const t=p.fileUtil.getJSON(n);if(!t?.session){console.log(`\u6D3B\u8DC3\u4F1A\u8BDD\u6587\u4EF6\u65E0\u6548\uFF0C\u8DF3\u8FC7: ${n}`);continue}const i=w(e,t.session);if(!r.default.existsSync(i)){console.log(`\u6D3B\u8DC3\u4F1A\u8BDD\u76EE\u5F55\u5DF2\u4E0D\u5B58\u5728\uFF0C\u6E05\u7406\u6301\u4E45\u5316\u6587\u4EF6: ${n}`),r.default.unlinkSync(n);continue}e.activeSessions.set(s.conversationId,{session:t.session,lastSenderStaffId:t.lastSenderStaffId||t.session.startStaffId,isProcessing:!1,messageQueue:[],conversationConfig:t.conversationConfig}),console.log(`\u6062\u590D\u6D3B\u8DC3\u4F1A\u8BDD: \u7FA4=${s.conversationId}, \u4F1A\u8BDDID=${v(t.session)}`)}catch(t){console.error(`\u52A0\u8F7D\u6D3B\u8DC3\u4F1A\u8BDD\u5931\u8D25: ${n}`,t)}}}async function ne(e,s,n){const t=D(e,s);if(!t){console.log(`\u7FA4 ${s} \u65E0\u6D3B\u8DC3\u4F1A\u8BDD`),await(0,S.sendDingMessage)(e,{conversationId:s,sessionWebhook:n,content:`\u26A0\uFE0F \u5F53\u524D\u6CA1\u6709\u6D3B\u8DC3\u7684\u4F1A\u8BDD\uFF0C\u65E0\u9700\u7ED3\u675F\u3002
6
+ \u53EF\u4EE5\u901A\u8FC7 /new \u5F00\u59CB\u65B0\u4F1A\u8BDD\u3002`});return}const{key:i,session:o}=t,{session:d}=o,a=w(e,d),u=v(d);console.log(`\u7ED3\u675F\u4F1A\u8BDD: \u7FA4=${s}, \u4F1A\u8BDDID=${u}`),(0,k.interruptClaudeProcess)(o,"\u7ED3\u675F\u4F1A\u8BDD\u65F6\u4E2D\u65AD\u6B63\u5728\u6267\u884C\u7684 Claude \u8FDB\u7A0B")&&r.default.appendFileSync(`${a}/session.log`,`[${$()}] [SYSTEM]: \u7ED3\u675F\u4F1A\u8BDD\u65F6\u4E2D\u65AD Claude \u8FDB\u7A0B
7
7
  `,"utf-8");const f=o.messageQueue?.length??0;f>0&&(o.messageQueue=[],console.log(`[${$()}] \u7ED3\u675F\u4F1A\u8BDD\u65F6\u6E05\u7A7A\u6D88\u606F\u961F\u5217: \u7FA4=${s}, \u6E05\u7A7A${f}\u6761\u6D88\u606F`)),await(0,S.sendDingMessage)(e,{conversationId:s,sessionWebhook:n,content:`\u{1F4AC} \u4F1A\u8BDD\u5DF2\u7ED3\u675F
8
- \u{1F194} ${a}${f>0?`
9
- \u{1F5D1}\uFE0F \u5DF2\u6E05\u7A7A\u6D88\u606F\u961F\u5217\uFF0C\u4E22\u5F03${f}\u6761\u5F85\u5904\u7406\u6D88\u606F`:""}`}),e.activeSessions.delete(i),I(e,i),r.default.appendFileSync(`${u}/session.log`,`[${$()}] [SYSTEM]: \u7528\u6237\u8BF7\u6C42\u7ED3\u675F\u4F1A\u8BDD
10
- `,"utf-8")}async function ve(e,s,n,t,i,o){const d=ee(e,s,t);if(!d)return await(0,S.sendDingMessage)(e,{conversationId:s,sessionWebhook:n,content:`\u274C \u672A\u627E\u5230\u4F1A\u8BDD ${t}\uFF0C\u8BE5\u4F1A\u8BDD\u53EF\u80FD\u5DF2\u88AB\u6E05\u7406\uFF0C\u8BF7\u53D1\u9001\u65B0\u6D88\u606F\u5F00\u59CB\u65B0\u4F1A\u8BDD`}),!1;const u=w(e,d);if(!r.default.existsSync(u))return await(0,S.sendDingMessage)(e,{conversationId:s,sessionWebhook:n,content:`\u274C \u4F1A\u8BDD ${t} \u7684\u6570\u636E\u5DF2\u88AB\u6E05\u7406\uFF0C\u65E0\u6CD5\u6062\u590D\uFF0C\u8BF7\u53D1\u9001\u65B0\u6D88\u606F\u5F00\u59CB\u65B0\u4F1A\u8BDD`}),!1;const a=D(e,s);a&&(console.log(`\u5207\u6362\u4F1A\u8BDD\uFF0C\u5148\u7ED3\u675F\u5F53\u524D\u4F1A\u8BDD: ${v(a.session.session)}`),(0,k.interruptClaudeProcess)(a.session,"\u5207\u6362\u4F1A\u8BDD\u65F6\u4E2D\u65AD\u6B63\u5728\u6267\u884C\u7684 Claude \u8FDB\u7A0B"),e.activeSessions.delete(a.key),I(e,a.key),r.default.appendFileSync(`${w(e,a.session.session)}/session.log`,`[${$()}] [SYSTEM]: \u4F1A\u8BDD\u88AB\u5207\u6362\u5230 ${t}\uFF0C\u7ED3\u675F\u5F53\u524D\u4F1A\u8BDD
8
+ \u{1F194} ${u}${f>0?`
9
+ \u{1F5D1}\uFE0F \u5DF2\u6E05\u7A7A\u6D88\u606F\u961F\u5217\uFF0C\u4E22\u5F03${f}\u6761\u5F85\u5904\u7406\u6D88\u606F`:""}`}),e.activeSessions.delete(i),I(e,i),r.default.appendFileSync(`${a}/session.log`,`[${$()}] [SYSTEM]: \u7528\u6237\u8BF7\u6C42\u7ED3\u675F\u4F1A\u8BDD
10
+ `,"utf-8")}async function ve(e,s,n,t,i,o){const d=ee(e,s,t);if(!d)return await(0,S.sendDingMessage)(e,{conversationId:s,sessionWebhook:n,content:`\u274C \u672A\u627E\u5230\u4F1A\u8BDD ${t}\uFF0C\u8BE5\u4F1A\u8BDD\u53EF\u80FD\u5DF2\u88AB\u6E05\u7406\uFF0C\u8BF7\u53D1\u9001\u65B0\u6D88\u606F\u5F00\u59CB\u65B0\u4F1A\u8BDD`}),!1;const a=w(e,d);if(!r.default.existsSync(a))return await(0,S.sendDingMessage)(e,{conversationId:s,sessionWebhook:n,content:`\u274C \u4F1A\u8BDD ${t} \u7684\u6570\u636E\u5DF2\u88AB\u6E05\u7406\uFF0C\u65E0\u6CD5\u6062\u590D\uFF0C\u8BF7\u53D1\u9001\u65B0\u6D88\u606F\u5F00\u59CB\u65B0\u4F1A\u8BDD`}),!1;const u=D(e,s);u&&(console.log(`\u5207\u6362\u4F1A\u8BDD\uFF0C\u5148\u7ED3\u675F\u5F53\u524D\u4F1A\u8BDD: ${v(u.session.session)}`),(0,k.interruptClaudeProcess)(u.session,"\u5207\u6362\u4F1A\u8BDD\u65F6\u4E2D\u65AD\u6B63\u5728\u6267\u884C\u7684 Claude \u8FDB\u7A0B"),e.activeSessions.delete(u.key),I(e,u.key),r.default.appendFileSync(`${w(e,u.session.session)}/session.log`,`[${$()}] [SYSTEM]: \u4F1A\u8BDD\u88AB\u5207\u6362\u5230 ${t}\uFF0C\u7ED3\u675F\u5F53\u524D\u4F1A\u8BDD
11
11
  `,"utf-8")),e.activeSessions.set(s,{session:d,lastSenderStaffId:i,isProcessing:!1,messageQueue:[],conversationConfig:o}),I(e,s);const f=!!d.claudeSessionId,c=v(d);return await(0,S.sendDingMessage)(e,{conversationId:s,sessionWebhook:n,content:`\u2705 \u5DF2\u5207\u6362\u5230\u5386\u53F2\u4F1A\u8BDD (\u{1F194} ${c})
12
12
  ${f?"\u{1F504} \u5DF2\u6062\u590D\u5BF9\u8BDD\u4E0A\u4E0B\u6587":"\u26A0\uFE0F \u8BE5\u4F1A\u8BDD\u65E0\u5386\u53F2\u4E0A\u4E0B\u6587\uFF0C\u5C06\u4ECE\u5934\u5F00\u59CB"}
13
- \u{1F4A1} \u56DE\u590D /end \u53EF\u7ED3\u675F\u672C\u8F6E\u5BF9\u8BDD`}),console.log(`\u5DF2\u5207\u6362\u5230\u5386\u53F2\u4F1A\u8BDD: \u7FA4=${s}, \u4F1A\u8BDDID=${c}, \u6709Claude\u4E0A\u4E0B\u6587=${f}`),!0}async function se(e,s){const{conversationId:n,sessionWebhook:t,senderStaffId:i,senderNick:o,message:d,conversationConfig:u}=s,a=e.config.sessionMaxConcurrency??e.DEFAULT_SESSION_MAX_CONCURRENCY;if(e.activeSessions.size>=a){console.log(`\u8FBE\u5230\u6700\u5927\u5E76\u53D1\u6570 (${a})\uFF0C\u62D2\u7EDD\u65B0\u4F1A\u8BDD: \u7FA4=${n}`),await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,content:"\u{1F92F} \u5F53\u524D\u7E41\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5..."});return}const f=Date.now(),c=Q.default.randomUUID(),l={conversationId:n,sessionWebhook:t,startTime:f,startTimeStr:C.dateUtil.mm(f).format("YYYY-MM-DD-HH-mm-ss"),startStaffId:i,startNickName:o};console.log(`\u521B\u5EFA\u65B0\u4F1A\u8BDD: \u7FA4=${n}, \u4F1A\u8BDDID=${c}, \u53D1\u8D77\u8005=${i}, \u5F53\u524D\u5E76\u53D1=${e.activeSessions.size+1}/${a}`);const m=w(e,l);r.default.mkdirSync(m,{recursive:!0}),r.default.writeFileSync(`${m}/session.json`,JSON.stringify(l,null,2),"utf-8"),e.activeSessions.set(n,{session:l,lastSenderStaffId:i,isProcessing:!0,messageQueue:[],conversationConfig:u}),I(e,n),u.receiveReply!==!1&&await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,content:`\u2705 \u6536\u5230\uFF0C\u6211\u6765\u5904\u7406...
14
- \u{1F194} ${c}`});try{await(0,k.executeClaudeQuery)(e,l,d,{skill:u.taskCfg?.skill,agent:u.agent,senderNick:o,senderStaffId:i,permissionMode:u.permissionMode,newSessionId:c})}catch(h){console.error("\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",h),await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:i,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${h instanceof Error?h.message:String(h)}`})}finally{const h=e.activeSessions.get(n);h&&(h.isProcessing=!1)}const y=e.activeSessions.get(n);y&&y.messageQueue.length>0&&await b(e,n)}async function b(e,s){const n=e.activeSessions.get(s);if(!n||n.messageQueue.length===0)return;const t=n.messageQueue.shift(),{message:i,senderStaffId:o,senderNick:d}=t,u=n.session.sessionWebhook;if(console.log(`\u5904\u7406\u961F\u5217\u6D88\u606F: \u7FA4=${s}, \u5269\u4F59 ${n.messageQueue.length} \u6761`),n.isProcessing=!0,n.lastSenderStaffId=o,I(e,s),n.conversationConfig.receiveReply!==!1){const a=i.length>50?i.substring(0,50)+"\u2026":i;await(0,S.sendDingMessage)(e,{conversationId:s,sessionWebhook:u,atUserId:o,content:`\u{1F680} \u5F00\u59CB\u5904\u7406\u6D88\u606F\u300C${a}\u300D`}).catch(()=>{})}try{await(0,k.executeClaudeQuery)(e,n.session,i,{skill:n.conversationConfig.taskCfg?.skill,agent:n.conversationConfig.agent,senderNick:d,senderStaffId:o,permissionMode:n.conversationConfig.permissionMode})}catch(a){console.error("\u6267\u884C\u961F\u5217 Claude \u67E5\u8BE2\u5931\u8D25:",a),await(0,S.sendDingMessage)(e,{conversationId:s,sessionWebhook:u,atUserId:o,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${a instanceof Error?a.message:String(a)}`})}finally{n.isProcessing=!1}if(n.goonPending){n.goonPending=!1,n.interrupted=!1,n.isProcessing=!0;try{await(0,k.executeClaudeQuery)(e,n.session,"\u7EE7\u7EED",{senderNick:n.session.startNickName,senderStaffId:n.lastSenderStaffId,permissionMode:n.conversationConfig.permissionMode})}catch(a){console.error("goonPending \u6062\u590D\u6267\u884C\u5931\u8D25:",a)}finally{n.isProcessing=!1}}n.messageQueue.length>0&&await b(e,s)}async function pe(e,s){const{conversationId:n,sessionWebhook:t,senderStaffId:i,senderNick:o,message:d,conversationConfig:u}=s,a=d.replace(/^\[提及用户: .+\]\n/,"");if((0,ie.parseEndCommand)(a)){await ne(e,n,t);return}const f=D(e,n),c=f?.session;if(c){const l=w(e,c.session);if(r.default.existsSync(l)||(r.default.mkdirSync(l,{recursive:!0}),r.default.writeFileSync(`${l}/session.json`,JSON.stringify(c.session,null,2),"utf-8"),console.log(`\u4F1A\u8BDD\u76EE\u5F55\u5DF2\u91CD\u5EFA: \u7FA4=${n}, \u8DEF\u5F84=${l}`)),c.isProcessing){const y={message:d,senderStaffId:i,senderNick:o};c.messageQueue.push(y);const h=c.messageQueue.length;console.log(`\u4F1A\u8BDD ${n} \u6D88\u606F\u5DF2\u5165\u961F\uFF0C\u6392\u961F\u7B2C ${h} \u6761`),await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,content:`\u23F3 \u6B63\u5728\u5904\u7406\u4E2D\uFF0C\u5DF2\u52A0\u5165\u961F\u5217\uFF08\u6392\u961F\u7B2C ${h} \u6761\uFF09`});return}const m=c.session.conversationId===n;console.log(`\u8FFD\u52A0\u6D88\u606F\u5230\u6D3B\u8DC3\u4F1A\u8BDD: \u7FA4=${n}, \u4F1A\u8BDDID=${v(c.session)}${m?"":`(\u5173\u8054\u7FA4,\u4F1A\u8BDD\u5F52\u5C5E=${c.session.conversationId})`}`),c.lastSenderStaffId=i,c.isProcessing=!0,I(e,f.key),m&&t!==c.session.sessionWebhook&&(c.session.sessionWebhook=t,q(e,c.session,{sessionWebhook:t})),c.session.currentWebhook=t,c.session.currentConversationId=n,q(e,c.session,{currentWebhook:t,currentConversationId:n}),u.receiveReply!==!1&&await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,content:"\u2705 \u6536\u5230\uFF0C\u6211\u6765\u5904\u7406..."});try{await(0,k.executeClaudeQuery)(e,c.session,d,{skill:u.taskCfg?.skill,agent:u.agent,senderNick:o,senderStaffId:i,permissionMode:u.permissionMode})}catch(y){if(c.session.claudeSessionId){console.log(`[\u4F1A\u8BDD\u6062\u590D\u5931\u8D25] \u6E05\u9664 claudeSessionId \u5E76\u91CD\u65B0\u53D1\u8D77: ${c.session.claudeSessionId}`),c.session.claudeSessionId=void 0,e.updateSessionFile(c.session,{});try{await(0,k.executeClaudeQuery)(e,c.session,d,{skill:u.taskCfg?.skill,agent:u.agent,senderNick:o,senderStaffId:i,permissionMode:u.permissionMode});return}catch(h){console.error("\u91CD\u8BD5\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",h),await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:i,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${h instanceof Error?h.message:String(h)}`}),c.isProcessing=!1,await b(e,n);return}}console.error("\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",y),await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:i,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${y instanceof Error?y.message:String(y)}`})}finally{c.isProcessing=!1}await b(e,n)}else await se(e,{conversationId:n,sessionWebhook:t,senderStaffId:i,senderNick:o,message:d,conversationConfig:u})}function Ce(e,s,n=!0){const t={sessionsDeleted:0,tasksDeleted:0,imagesDeleted:0,errors:[]},i=s?[s]:e.config.conversations.map(o=>o.conversationId);for(const o of i){let d=null;if(n){const l=D(e,o);l&&(d=v(l.session.session))}const u=P(e,o);if(r.default.existsSync(u))try{const l=r.default.readdirSync(u,{withFileTypes:!0});for(const m of l){if(!m.isDirectory()||d&&m.name===d)continue;const y=g.default.join(u,m.name);try{r.default.rmSync(y,{recursive:!0,force:!0}),t.sessionsDeleted++}catch{t.errors.push(`\u5220\u9664\u4F1A\u8BDD\u76EE\u5F55\u5931\u8D25: ${y}`)}}}catch{t.errors.push(`\u8BFB\u53D6sessions\u76EE\u5F55\u5931\u8D25: ${u}`)}const a=Z(e,o);if(r.default.existsSync(a))try{const l=r.default.readdirSync(a,{withFileTypes:!0});for(const m of l){if(!m.isDirectory())continue;const y=g.default.join(a,m.name);try{r.default.rmSync(y,{recursive:!0,force:!0}),t.tasksDeleted++}catch{t.errors.push(`\u5220\u9664\u4EFB\u52A1\u76EE\u5F55\u5931\u8D25: ${y}`)}}}catch{t.errors.push(`\u8BFB\u53D6tasks\u76EE\u5F55\u5931\u8D25: ${a}`)}const f=V(e,o);if(r.default.existsSync(f))try{const l=r.default.readdirSync(f,{withFileTypes:!0});for(const m of l){const y=g.default.join(f,m.name);try{r.default.unlinkSync(y),t.imagesDeleted++}catch{t.errors.push(`\u5220\u9664\u56FE\u7247\u5931\u8D25: ${y}`)}}}catch{t.errors.push(`\u8BFB\u53D6images\u76EE\u5F55\u5931\u8D25: ${f}`)}const c=g.default.join(j(e,o),".playwright-cli");if(r.default.existsSync(c))try{r.default.rmSync(c,{recursive:!0,force:!0})}catch{t.errors.push(`\u5220\u9664 playwright-cli \u7F13\u5B58\u5931\u8D25: ${c}`)}if(!n){const l=x(e,o);if(r.default.existsSync(l))try{r.default.unlinkSync(l)}catch{t.errors.push(`\u5220\u9664\u6D3B\u8DC3\u4F1A\u8BDD\u6587\u4EF6\u5931\u8D25: ${l}`)}e.activeSessions.has(o)&&e.activeSessions.delete(o)}}return t}
13
+ \u{1F4A1} \u56DE\u590D /end \u53EF\u7ED3\u675F\u672C\u8F6E\u5BF9\u8BDD`}),console.log(`\u5DF2\u5207\u6362\u5230\u5386\u53F2\u4F1A\u8BDD: \u7FA4=${s}, \u4F1A\u8BDDID=${c}, \u6709Claude\u4E0A\u4E0B\u6587=${f}`),!0}async function se(e,s){const{conversationId:n,sessionWebhook:t,senderStaffId:i,senderNick:o,message:d,conversationConfig:a}=s,u=e.config.sessionMaxConcurrency??e.DEFAULT_SESSION_MAX_CONCURRENCY;if(e.activeSessions.size>=u){console.log(`\u8FBE\u5230\u6700\u5927\u5E76\u53D1\u6570 (${u})\uFF0C\u62D2\u7EDD\u65B0\u4F1A\u8BDD: \u7FA4=${n}`),await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,content:"\u{1F92F} \u5F53\u524D\u7E41\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5..."});return}const f=Date.now(),c=Q.default.randomUUID(),l={conversationId:n,sessionWebhook:t,startTime:f,startTimeStr:p.dateUtil.mm(f).format("YYYY-MM-DD-HH-mm-ss"),startStaffId:i,startNickName:o};console.log(`\u521B\u5EFA\u65B0\u4F1A\u8BDD: \u7FA4=${n}, \u4F1A\u8BDDID=${c}, \u53D1\u8D77\u8005=${i}, \u5F53\u524D\u5E76\u53D1=${e.activeSessions.size+1}/${u}`);const m=w(e,l);r.default.mkdirSync(m,{recursive:!0}),r.default.writeFileSync(`${m}/session.json`,JSON.stringify(l,null,2),"utf-8"),e.activeSessions.set(n,{session:l,lastSenderStaffId:i,isProcessing:!0,messageQueue:[],conversationConfig:a}),I(e,n),a.receiveReply!==!1&&await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,content:`\u2705 \u6536\u5230\uFF0C\u6211\u6765\u5904\u7406...
14
+ \u{1F194} ${c}`});try{await(0,k.executeClaudeQuery)(e,l,d,{skill:a.taskCfg?.skill,agent:a.agent,senderNick:o,senderStaffId:i,permissionMode:a.permissionMode,newSessionId:c,conversationConfig:a})}catch(h){console.error("\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",h),await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:i,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${h instanceof Error?h.message:String(h)}`})}finally{const h=e.activeSessions.get(n);h&&(h.isProcessing=!1)}const y=e.activeSessions.get(n);y&&y.messageQueue.length>0&&await b(e,n)}async function b(e,s){const n=e.activeSessions.get(s);if(!n||n.messageQueue.length===0)return;const t=n.messageQueue.shift(),{message:i,senderStaffId:o,senderNick:d}=t,a=n.session.sessionWebhook;if(console.log(`\u5904\u7406\u961F\u5217\u6D88\u606F: \u7FA4=${s}, \u5269\u4F59 ${n.messageQueue.length} \u6761`),n.isProcessing=!0,n.lastSenderStaffId=o,I(e,s),n.conversationConfig.receiveReply!==!1){const u=i.length>50?i.substring(0,50)+"\u2026":i;await(0,S.sendDingMessage)(e,{conversationId:s,sessionWebhook:a,atUserId:o,content:`\u{1F680} \u5F00\u59CB\u5904\u7406\u6D88\u606F\u300C${u}\u300D`}).catch(()=>{})}try{await(0,k.executeClaudeQuery)(e,n.session,i,{skill:n.conversationConfig.taskCfg?.skill,agent:n.conversationConfig.agent,senderNick:d,senderStaffId:o,permissionMode:n.conversationConfig.permissionMode,conversationConfig:n.conversationConfig})}catch(u){console.error("\u6267\u884C\u961F\u5217 Claude \u67E5\u8BE2\u5931\u8D25:",u),await(0,S.sendDingMessage)(e,{conversationId:s,sessionWebhook:a,atUserId:o,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${u instanceof Error?u.message:String(u)}`})}finally{n.isProcessing=!1}if(n.goonPending){n.goonPending=!1,n.interrupted=!1,n.isProcessing=!0;try{await(0,k.executeClaudeQuery)(e,n.session,"\u7EE7\u7EED",{senderNick:n.session.startNickName,senderStaffId:n.lastSenderStaffId,permissionMode:n.conversationConfig.permissionMode,conversationConfig:n.conversationConfig})}catch(u){console.error("goonPending \u6062\u590D\u6267\u884C\u5931\u8D25:",u)}finally{n.isProcessing=!1}}n.messageQueue.length>0&&await b(e,s)}async function Ce(e,s){const{conversationId:n,sessionWebhook:t,senderStaffId:i,senderNick:o,message:d,conversationConfig:a}=s,u=d.replace(/^\[提及用户: .+\]\n/,"");if((0,ie.parseEndCommand)(u)){await ne(e,n,t);return}const f=D(e,n),c=f?.session;if(c){const l=w(e,c.session);if(r.default.existsSync(l)||(r.default.mkdirSync(l,{recursive:!0}),r.default.writeFileSync(`${l}/session.json`,JSON.stringify(c.session,null,2),"utf-8"),console.log(`\u4F1A\u8BDD\u76EE\u5F55\u5DF2\u91CD\u5EFA: \u7FA4=${n}, \u8DEF\u5F84=${l}`)),c.isProcessing){const y={message:d,senderStaffId:i,senderNick:o};c.messageQueue.push(y);const h=c.messageQueue.length;console.log(`\u4F1A\u8BDD ${n} \u6D88\u606F\u5DF2\u5165\u961F\uFF0C\u6392\u961F\u7B2C ${h} \u6761`),await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,content:`\u23F3 \u6B63\u5728\u5904\u7406\u4E2D\uFF0C\u5DF2\u52A0\u5165\u961F\u5217\uFF08\u6392\u961F\u7B2C ${h} \u6761\uFF09`});return}const m=c.session.conversationId===n;console.log(`\u8FFD\u52A0\u6D88\u606F\u5230\u6D3B\u8DC3\u4F1A\u8BDD: \u7FA4=${n}, \u4F1A\u8BDDID=${v(c.session)}${m?"":`(\u5173\u8054\u7FA4,\u4F1A\u8BDD\u5F52\u5C5E=${c.session.conversationId})`}`),c.lastSenderStaffId=i,c.isProcessing=!0,I(e,f.key),m&&t!==c.session.sessionWebhook&&(c.session.sessionWebhook=t,A(e,c.session,{sessionWebhook:t})),c.session.currentWebhook=t,c.session.currentConversationId=n,A(e,c.session,{currentWebhook:t,currentConversationId:n}),a.receiveReply!==!1&&await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,content:"\u2705 \u6536\u5230\uFF0C\u6211\u6765\u5904\u7406..."});try{await(0,k.executeClaudeQuery)(e,c.session,d,{skill:a.taskCfg?.skill,agent:a.agent,senderNick:o,senderStaffId:i,permissionMode:a.permissionMode,conversationConfig:a})}catch(y){if(c.session.claudeSessionId){console.log(`[\u4F1A\u8BDD\u6062\u590D\u5931\u8D25] \u6E05\u9664 claudeSessionId \u5E76\u91CD\u65B0\u53D1\u8D77: ${c.session.claudeSessionId}`),c.session.claudeSessionId=void 0,e.updateSessionFile(c.session,{});try{await(0,k.executeClaudeQuery)(e,c.session,d,{skill:a.taskCfg?.skill,agent:a.agent,senderNick:o,senderStaffId:i,permissionMode:a.permissionMode,conversationConfig:a});return}catch(h){console.error("\u91CD\u8BD5\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",h),await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:i,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${h instanceof Error?h.message:String(h)}`}),c.isProcessing=!1,await b(e,n);return}}console.error("\u6267\u884C Claude \u67E5\u8BE2\u5931\u8D25:",y),await(0,S.sendDingMessage)(e,{conversationId:n,sessionWebhook:t,atUserId:i,content:`\u274C \u5904\u7406\u6D88\u606F\u65F6\u53D1\u751F\u9519\u8BEF: ${y instanceof Error?y.message:String(y)}`})}finally{c.isProcessing=!1}await b(e,n)}else await se(e,{conversationId:n,sessionWebhook:t,senderStaffId:i,senderNick:o,message:d,conversationConfig:a})}function pe(e,s,n=!0){const t={sessionsDeleted:0,tasksDeleted:0,imagesDeleted:0,errors:[]},i=s?[s]:e.config.conversations.map(o=>o.conversationId);for(const o of i){let d=null;if(n){const l=D(e,o);l&&(d=v(l.session.session))}const a=P(e,o);if(r.default.existsSync(a))try{const l=r.default.readdirSync(a,{withFileTypes:!0});for(const m of l){if(!m.isDirectory()||d&&m.name===d)continue;const y=g.default.join(a,m.name);try{r.default.rmSync(y,{recursive:!0,force:!0}),t.sessionsDeleted++}catch{t.errors.push(`\u5220\u9664\u4F1A\u8BDD\u76EE\u5F55\u5931\u8D25: ${y}`)}}}catch{t.errors.push(`\u8BFB\u53D6sessions\u76EE\u5F55\u5931\u8D25: ${a}`)}const u=Z(e,o);if(r.default.existsSync(u))try{const l=r.default.readdirSync(u,{withFileTypes:!0});for(const m of l){if(!m.isDirectory())continue;const y=g.default.join(u,m.name);try{r.default.rmSync(y,{recursive:!0,force:!0}),t.tasksDeleted++}catch{t.errors.push(`\u5220\u9664\u4EFB\u52A1\u76EE\u5F55\u5931\u8D25: ${y}`)}}}catch{t.errors.push(`\u8BFB\u53D6tasks\u76EE\u5F55\u5931\u8D25: ${u}`)}const f=V(e,o);if(r.default.existsSync(f))try{const l=r.default.readdirSync(f,{withFileTypes:!0});for(const m of l){const y=g.default.join(f,m.name);try{r.default.unlinkSync(y),t.imagesDeleted++}catch{t.errors.push(`\u5220\u9664\u56FE\u7247\u5931\u8D25: ${y}`)}}}catch{t.errors.push(`\u8BFB\u53D6images\u76EE\u5F55\u5931\u8D25: ${f}`)}const c=g.default.join(j(e,o),".playwright-cli");if(r.default.existsSync(c))try{r.default.rmSync(c,{recursive:!0,force:!0})}catch{t.errors.push(`\u5220\u9664 playwright-cli \u7F13\u5B58\u5931\u8D25: ${c}`)}if(!n){const l=x(e,o);if(r.default.existsSync(l))try{r.default.unlinkSync(l)}catch{t.errors.push(`\u5220\u9664\u6D3B\u8DC3\u4F1A\u8BDD\u6587\u4EF6\u5931\u8D25: ${l}`)}e.activeSessions.has(o)&&e.activeSessions.delete(o)}}return t}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cc-ding",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "本地Claude对接钉钉机器人工具套件",
5
5
  "keywords": [
6
6
  "cli",