cc-ding 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 yhn
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,10 +1,195 @@
1
1
  # cc-ding
2
2
 
3
- 钉钉机器人对接本地Claude工具
3
+ [![npm version](https://img.shields.io/npm/v/cc-ding.svg?style=flat-square)](https://www.npmjs.com/package/cc-ding)
4
+ [![npm downloads](https://img.shields.io/npm/dm/cc-ding.svg?style=flat-square)](https://www.npmjs.com/package/cc-ding)
5
+ [![License](https://img.shields.io/npm/l/cc-ding.svg?style=flat-square)](LICENSE)
6
+ [![Node.js](https://img.shields.io/node/v/cc-ding.svg?style=flat-square)](https://nodejs.org)
4
7
 
5
- ## usage
8
+ 将钉钉机器人接入本地 [Claude Code](https://claude.ai/code),实现群聊多轮对话、任务队列、定时任务等能力。
9
+
10
+ ## 功能特性
11
+
12
+ - **多轮对话** — 支持私聊 / 群聊多轮会话,`/new` `/end` `/resume` 灵活切换
13
+ - **群内多用户** — 白名单内所有成员均可参与同一会话
14
+ - **任务队列** — `/task` 提交任务,按队列顺序执行,完成后自动回复
15
+ - **定时任务** — 自然语言创建 cron,支持暂停 / 恢复 / 删除
16
+ - **图片消息** — 自动接收钉钉图片 / 富文本内嵌图片,可选本地 OCR 识别
17
+ - **API Key 池化** — 429 自动切换、跨天重置,提升服务稳定性
18
+ - **关联群** — 多个群共享同一个 Claude 会话上下文
19
+
20
+ ## 快速开始
21
+
22
+ ### 安装
6
23
 
7
24
  ```bash
8
- npm i cc-ding -g
25
+ pnpm i cc-ding -g
9
26
  cc-ding --help
10
27
  ```
28
+
29
+ ### 1. 初始化配置
30
+
31
+ ```bash
32
+ cc-ding init -ci {clientId} -cs {clientSecret} -m {手机号}
33
+ ```
34
+
35
+ | 参数 | 说明 |
36
+ |------|------|
37
+ | `-ci, --clientId` | 钉钉应用的 ClientId |
38
+ | `-cs, --clientSecret` | 钉钉 Stream 连接密钥 |
39
+ | `-m, --mobile` | 管理员手机号(自动加入白名单) |
40
+ | `-cn, --clientName` | 机器人名称(可选,默认 "cc助手") |
41
+
42
+ ### 2. 编辑配置
43
+
44
+ 配置文件位于 `~/.cc-ding/{clientId}/config.json`,按 [配置文件示例](#配置文件示例) 补充 `conversations` 等字段。
45
+
46
+ ### 3. 启动
47
+
48
+ ```bash
49
+ # 直接启动
50
+ cc-ding run -ci {clientId}
51
+
52
+ # 推荐:PM2 守护进程方式
53
+ pm2 start --name "cc-ding-{clientId}" npx -- -p cc-ding cc-ding run -ci {clientId}
54
+ ```
55
+
56
+ ## 使用指南
57
+
58
+ ### 会话模式
59
+
60
+ | 命令 | 说明 |
61
+ |------|------|
62
+ | `/help` | 查看所有可用命令 |
63
+ | `/log [行数]` | 查看最近会话日志 |
64
+ | `/new [初始消息]` | 开始新的对话 |
65
+ | `/resume [会话ID]` | 继续历史会话(不指定则恢复最近一个) |
66
+ | `/end` | 结束当前会话 |
67
+
68
+ - 会话自动持久化到 `active.json`,服务重启后自动恢复
69
+ - 群内所有白名单用户均可参与对话
70
+
71
+ ### 任务模式
72
+
73
+ ```
74
+ /task <任务描述> # 提交任务到队列
75
+ /task cancel # 取消任务
76
+ ```
77
+
78
+ ### 定时任务
79
+
80
+ ```
81
+ /cron <自然语言描述> # Claude 自动生成 cron 表达式
82
+ /cron 0 9 * * * <任务描述> # 直接指定 cron 表达式
83
+ /cron list # 查看列表
84
+ /cron pause <id> / resume <id> # 暂停 / 恢复
85
+ /cron delete <id> # 删除
86
+ ```
87
+
88
+ ### 文件操作
89
+
90
+ | 命令 | 说明 |
91
+ |------|------|
92
+ | `/pwd` | 显示工作目录绝对路径 |
93
+ | `/ls [目录] [层数]` | 查看目录结构 |
94
+ | `/mkdir <路径>` | 创建文件夹 |
95
+ | `/touch <路径>` | 创建空文件 |
96
+ | `/rm <路径>` | 删除文件或目录 |
97
+
98
+ ### 管理命令(仅 owner)
99
+
100
+ | 命令 | 说明 |
101
+ |------|------|
102
+ | `/info [robot\|session\|task]` | 查看群配置、会话和任务信息 |
103
+ | `/version` | 查看版本信息 |
104
+ | `/open [shell]` | 在文件管理器或终端中打开工作目录 |
105
+ | `/clean [all]` | 清除历史会话和缓存 |
106
+ | `/reset-apikeycfg` | 重置 API Key 配置 |
107
+ | `/cfg` | 注册当前群到配置 |
108
+ | `/auth [add\|del <用户>]` | 管理群级白名单 |
109
+
110
+ ## 配置说明
111
+
112
+ ### 白名单
113
+
114
+ - **全局白名单**:`config.json` 中的 `whiteUserList`
115
+ - **群级白名单**:`conversations[].whiteUserList`(优先级高于全局)
116
+ - 支持手机号和 userId 两种格式,手机号自动解析为 userId
117
+
118
+ ### API Key 池化
119
+
120
+ 配置 `apiKeyCfg` 后启用:
121
+
122
+ - 429 错误自动切换到可用 Key
123
+ - 连续 TPM 不稳定时自动换 Key
124
+ - 每日 0 点自动重置 API Key 状态
125
+
126
+ ### 图片消息
127
+
128
+ - 支持 `picture` 和 `richText`(含内嵌图片)消息类型
129
+ - 图片自动下载到 `.images/` 目录
130
+ - `useLocalOcr: true`(默认)使用本地 OCR 识别,同时传入原图路径供 Claude 自主查看
131
+ - 设置 `useLocalOcr: false` 关闭 OCR(适用于支持图片识别的模型)
132
+
133
+ ### 关联群
134
+
135
+ 通过 `linkConversationId` 实现多个群共享同一个 Claude 会话上下文,消息自动路由到同一活跃会话。
136
+
137
+ ## 配置文件示例
138
+
139
+ ```json
140
+ {
141
+ "clientName": "cc助手",
142
+ "owner": "你的手机号",
143
+ "whiteUserList": ["你的手机号"],
144
+ "clientSecret": "钉钉Stream连接密钥",
145
+ "defaultDingToken": "兜底钉钉机器人Token",
146
+ "conversations": [
147
+ {
148
+ "conversationId": "群ID",
149
+ "conversationTitle": "群名称",
150
+ "dingToken": "群机器人Token",
151
+ "whiteUserList": ["工号1", "工号2"],
152
+ "agent": "指定agent(可选)",
153
+ "useLocalOcr": true,
154
+ "taskCfg": {
155
+ "skill": "指定技能(可选)"
156
+ }
157
+ }
158
+ ],
159
+ "taskQueueSize": 50,
160
+ "taskHandlerCount": 1,
161
+ "sessionMaxConcurrency": 20,
162
+ "includeThinking": false,
163
+ "resultOnly": true,
164
+ "debug": false
165
+ }
166
+ ```
167
+
168
+ ## 数据存储
169
+
170
+ 所有数据存储在 `~/.cc-ding/{clientId}/` 目录下:
171
+
172
+ | 类型 | 路径 |
173
+ |------|------|
174
+ | 会话数据 | `{MD5}/.sessions/{claudeSessionId}/session.{json,log}` |
175
+ | 任务数据 | `{MD5}/.tasks/{时间戳}/task.{json,log}` |
176
+ | 定时任务 | `cron.json` |
177
+ | 图片缓存 | `{MD5}/.images/` |
178
+ | 手机号映射 | `phone-map.json` |
179
+
180
+ ## 开发
181
+
182
+ ```bash
183
+ pnpm install
184
+ pnpm run lint # 代码检查
185
+ pnpm run test # 运行测试
186
+ pnpm run build # 构建
187
+ ```
188
+
189
+ ## 系统要求
190
+
191
+ - Node.js >= 24
192
+
193
+ ## License
194
+
195
+ MIT
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';const a0_0x959a85=a0_0x22da;function a0_0x22da(_0x291b82,_0x5cbb21){_0x291b82=_0x291b82-0x1a4;const _0x170085=a0_0x1700();let _0x22daa1=_0x170085[_0x291b82];return _0x22daa1;}(function(_0xab15a3,_0x2967ce){const _0x4d4d28=a0_0x22da,_0x1c009b=_0xab15a3();while(!![]){try{const _0x46d3ae=-parseInt(_0x4d4d28(0x1be))/0x1*(parseInt(_0x4d4d28(0x1db))/0x2)+parseInt(_0x4d4d28(0x1a6))/0x3*(-parseInt(_0x4d4d28(0x1d3))/0x4)+-parseInt(_0x4d4d28(0x1c9))/0x5*(parseInt(_0x4d4d28(0x1e4))/0x6)+-parseInt(_0x4d4d28(0x1b5))/0x7*(parseInt(_0x4d4d28(0x1a4))/0x8)+parseInt(_0x4d4d28(0x1b7))/0x9*(-parseInt(_0x4d4d28(0x1b6))/0xa)+-parseInt(_0x4d4d28(0x1c5))/0xb*(parseInt(_0x4d4d28(0x1e5))/0xc)+-parseInt(_0x4d4d28(0x1ec))/0xd*(-parseInt(_0x4d4d28(0x1d6))/0xe);if(_0x46d3ae===_0x2967ce)break;else _0x1c009b['push'](_0x1c009b['shift']());}catch(_0x4af118){_0x1c009b['push'](_0x1c009b['shift']());}}}(a0_0x1700,0x77413));var __importDefault=this&&this[a0_0x959a85(0x1ba)]||function(_0x4a3471){const _0x4cd8d3=a0_0x959a85;return _0x4a3471&&_0x4a3471[_0x4cd8d3(0x1cf)]?_0x4a3471:{'default':_0x4a3471};};function a0_0x1700(){const _0x15b9cf=['136080ANPHeS','20KEjBEe','1061946ckgvAm','clientSecret','exit','__importDefault','removeAllListeners','-ci,\x20--clientId\x20<value>','<兜底钉钉机器人Token-用于无dingToken群的消息接收>','3231aqwALx','initClientDir','DingClaude','<群成员工号2>','userId\x20(自己的工号,\x20自动加入白名单)','clientName\x20(机器人名称,\x20可选)','../src/biz/cc-ding-cli','7777JHdawN','\x20\x20当前版本:','单聊-个人助手(建议只给自己授权)','doctor','28010CTekBx','action','后续步骤:','defineProperty','option','run','__esModule','argv','warning','userId','68NxpmYD','../src/biz/doctor','setMaxListeners','145894Avvkov','\x20\x202.\x20启动机器人:\x20cc-ding\x20run\x20-ci','runDoctor','\x22\x20npx\x20--\x20-p\x20cc-ding\x20cc-ding\x20run\x20-ci\x20','-cn,\x20--clientName\x20<value>','478ZCSCss','clientSecret\x20(钉钉Stream连接密钥)','slice','工作群(AI提效)','acquirePidLock','path','\x0a💡\x20请升级\x20Node\x20版本后重新运行\x0a','<群聊机器人dingToken>','parse','234DHkqAD','1128fnTxoQ','version','description','init','loadEnv','-ds,\x20--dingSecret\x20<value>','command','3367HdcWrq','clientName','log','uncaughtException','\x20\x203.\x20推荐PM2启动:','\x0a\x20\x20\x20\x20cc-ding\x20for\x20connect\x20ClaudeCode\x20to\x20DingDingRobot\x0a\x20\x20','clientId','<单聊conversationId>','printDoctorResults','-uid,\x20--userId\x20<value>','default','join','\x20\x201.\x20编辑\x20config.json\x20添加更多工号到\x20whiteUserList','/.anycli/cc-ding/','\x20\x20\x20\x20\x20pm2\x20start\x20--name\x20\x22cc-ding-','after','272QolEEU','addHelpText','45261mgSxxV','dingSecret','projUtil','检查指定client的配置文件schema合法性和有效性','getPkgVersion','Command','../src/common','dingSecret\x20(钉钉签名密钥)','../src/biz/lock','<群聊conversationId>','getHomeDir','requiredOption','.cc-ding','配置文件已生成:','\x0a❌\x20Node\x20版本过低,无法执行\x20init\x20命令'];a0_0x1700=function(){return _0x15b9cf;};return a0_0x1700();}Object[a0_0x959a85(0x1cc)](exports,a0_0x959a85(0x1cf),{'value':!![]});const common_1=require(a0_0x959a85(0x1ac)),commander_1=require('commander'),session_1=require('../src/biz/session'),path_1=__importDefault(require(a0_0x959a85(0x1e0))),cc_ding_cli_1=require(a0_0x959a85(0x1c4)),lock_1=require(a0_0x959a85(0x1ae)),doctor_1=require(a0_0x959a85(0x1d4)),fs_1=__importDefault(require('fs'));(0x0,common_1[a0_0x959a85(0x1e9)])(),process[a0_0x959a85(0x1bb)](a0_0x959a85(0x1d1)),process[a0_0x959a85(0x1d5)](0x0),process['on'](a0_0x959a85(0x1ef),function(_0x41a1b3){const _0x5081dc=a0_0x959a85;console['log']('Caught\x20exception:\x20'+_0x41a1b3),process[_0x5081dc(0x1b9)](0x1);});const program=new commander_1[(a0_0x959a85(0x1ab))]();program[a0_0x959a85(0x1a5)]('before',a0_0x959a85(0x1f1))['addHelpText'](a0_0x959a85(0x1fb),'\x0aExamples:\x0a\x20\x20$\x20cc-ding\x20init\x20-ci\x20{clientId}\x0a\x20\x20$\x20cc-ding\x20run\x20-ci\x20{clientId}\x0a')['version']((0x0,common_1[a0_0x959a85(0x1a8)])()[a0_0x959a85(0x1aa)]()),program['command'](a0_0x959a85(0x1e8))[a0_0x959a85(0x1e7)]('初始化cc-ding配置文件,\x20生成最简config.json')[a0_0x959a85(0x1b1)](a0_0x959a85(0x1bc),a0_0x959a85(0x1f2))['requiredOption']('-cs,\x20--clientSecret\x20<value>',a0_0x959a85(0x1dc))[a0_0x959a85(0x1b1)](a0_0x959a85(0x1ea),a0_0x959a85(0x1ad))[a0_0x959a85(0x1b1)](a0_0x959a85(0x1f5),a0_0x959a85(0x1c2))[a0_0x959a85(0x1cd)](a0_0x959a85(0x1da),a0_0x959a85(0x1c3))[a0_0x959a85(0x1ca)](async _0x1f0b2a=>{const _0x354a9f=a0_0x959a85,_0x361e65=process[_0x354a9f(0x1e6)][_0x354a9f(0x1dd)](0x1),_0x575952=parseInt(_0x361e65['split']('.')[0x0],0xa);_0x575952<0x18&&(console[_0x354a9f(0x1ee)](_0x354a9f(0x1b4)),console['log'](_0x354a9f(0x1c6)+_0x361e65),console[_0x354a9f(0x1ee)]('\x20\x20要求:Node\x20>=\x2024'),console[_0x354a9f(0x1ee)](_0x354a9f(0x1e1)),process['exit'](0x1));const _0x4ca06f=(0x0,session_1[_0x354a9f(0x1b0)])()+_0x354a9f(0x1f9)+_0x1f0b2a[_0x354a9f(0x1f2)],_0x183f89=_0x4ca06f+'/config.json';fs_1[_0x354a9f(0x1f6)]['existsSync'](_0x183f89)&&(console[_0x354a9f(0x1ee)]('配置文件已存在:\x20'+_0x183f89),console[_0x354a9f(0x1ee)]('如需重新初始化,\x20请先删除已有配置文件'),process[_0x354a9f(0x1b9)](0x1));const _0x542bac={'clientName':_0x1f0b2a[_0x354a9f(0x1ed)]||'cc助手','whiteUserList':[_0x1f0b2a[_0x354a9f(0x1d2)]],'clientSecret':_0x1f0b2a[_0x354a9f(0x1b8)],'dingSecret':_0x1f0b2a[_0x354a9f(0x1a7)],'defaultDingToken':_0x354a9f(0x1bd),'conversations':[{'conversationTitle':_0x354a9f(0x1c7),'conversationId':_0x354a9f(0x1f3),'whiteUserList':[_0x1f0b2a['userId']],'sessionCfg':{},'useLocalOcr':!![]},{'conversationTitle':_0x354a9f(0x1de),'conversationId':_0x354a9f(0x1af),'dingToken':_0x354a9f(0x1e2),'whiteUserList':[_0x1f0b2a['userId'],_0x354a9f(0x1c1)],'sessionCfg':{}}],'includeThinking':![],'resultOnly':!![],'debug':![],'taskQueueSize':0xa,'taskHandlerCount':0x1,'sessionMaxConcurrency':0x14};(0x0,session_1[_0x354a9f(0x1bf)])(_0x1f0b2a['clientId'],_0x542bac),console[_0x354a9f(0x1ee)](_0x354a9f(0x1b3),_0x183f89),console[_0x354a9f(0x1ee)](''),console[_0x354a9f(0x1ee)](_0x354a9f(0x1cb)),console[_0x354a9f(0x1ee)](_0x354a9f(0x1f8)),console[_0x354a9f(0x1ee)](_0x354a9f(0x1d7),_0x1f0b2a[_0x354a9f(0x1f2)]),console[_0x354a9f(0x1ee)](_0x354a9f(0x1f0)),console[_0x354a9f(0x1ee)](_0x354a9f(0x1fa)+_0x1f0b2a[_0x354a9f(0x1f2)]+_0x354a9f(0x1d9)+_0x1f0b2a[_0x354a9f(0x1f2)]);}),program[a0_0x959a85(0x1eb)](a0_0x959a85(0x1ce))[a0_0x959a85(0x1e7)]('\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20功能:\x20钉钉机器人对接本地Claude,\x20支持会话模式和任务队列模式\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20会话数据路径:\x20~/.cc-ding/{clientId}/{MD5}/.sessions/{claudeSessionId}/session.{json|log}\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20任务数据路径:\x20~/.cc-ding/{clientId}/{MD5}/.tasks/{时间戳}/task.{json|log}\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20定时任务数据:\x20~/.cc-ding/{clientId}/cron.json\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20启动方式:\x20pm2\x20start\x20--name\x20\x22cc-ding-{clientId}\x22\x20npx\x20--\x20-p\x20cc-ding\x20run\x20-ci\x20{clientId}\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20会话模式说明\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20会话ID:\x20由\x20Claude\x20分配的\x20claudeSessionId\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20结束会话:\x20/end\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20新会话:\x20/new\x20[初始消息]\x20强制结束当前会话并开启新会话\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20恢复会话:\x20/resume\x20[会话ID]\x20恢复指定历史会话,\x20不指定则恢复最近一个\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20会话持久化:\x20活跃会话自动保存到\x20active.json,\x20服务重启后自动恢复\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20群内多用户:\x20允许群内所有白名单用户参与对话\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20/help:\x20查看所有可用命令(含版本、作者、文档链接);\x20/{命令}\x20--help\x20查看命令详细用法\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20图片消息支持\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20支持接收钉钉图片消息(picture)和富文本消息(richText,\x20含内嵌图片)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20图片自动下载保存到\x20<会话目录>/.images/\x20下\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20useLocalOcr:\x20默认开启,\x20使用本地OCR识别图片文字,\x20同时传入原图路径供Claude自主查看\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20配置方式:\x20conversations[].useLocalOcr\x20=\x20false\x20可关闭OCR(适用于支持图片识别的模型)\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20任务模式说明\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20任务ID:\x20任务接收时间戳\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20API\x20Key\x20池化管理(可选,\x20配置apiKeyCfg后启用)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20429自动切换:\x20自动切换到API\x20Key模式\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20Key轮换:\x20API\x20Key遇到429或连续TPM不稳定时自动换Key\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20跨天重置:\x20每日自动重置API\x20Key状态\x0a\x20\x20\x20\x20\x20\x20')[a0_0x959a85(0x1b1)]('-ci,\x20--clientId\x20<value>',a0_0x959a85(0x1f2))['action'](async _0x2d0ddd=>{const _0x1a3e2f=a0_0x959a85;(0x0,session_1['ensureClientDir'])(_0x2d0ddd[_0x1a3e2f(0x1f2)]);const _0x52c360=path_1[_0x1a3e2f(0x1f6)]['join']((0x0,session_1[_0x1a3e2f(0x1b0)])(),'.cc-ding',_0x2d0ddd[_0x1a3e2f(0x1f2)]);(0x0,lock_1[_0x1a3e2f(0x1df)])(_0x52c360,_0x2d0ddd['clientId']),await new cc_ding_cli_1[(_0x1a3e2f(0x1c0))](_0x2d0ddd['clientId'])[_0x1a3e2f(0x1ce)]();}),program[a0_0x959a85(0x1eb)](a0_0x959a85(0x1c8))['description'](a0_0x959a85(0x1a9))['requiredOption'](a0_0x959a85(0x1bc),a0_0x959a85(0x1f2))[a0_0x959a85(0x1ca)](async _0x41d7a6=>{const _0xd03060=a0_0x959a85,_0x24b89e=path_1[_0xd03060(0x1f6)][_0xd03060(0x1f7)]((0x0,session_1[_0xd03060(0x1b0)])(),_0xd03060(0x1b2),_0x41d7a6[_0xd03060(0x1f2)]),_0x2c8cfd=(0x0,doctor_1[_0xd03060(0x1d8)])(_0x24b89e);(0x0,doctor_1[_0xd03060(0x1f4)])(_0x2c8cfd);}),program[a0_0x959a85(0x1e3)](process[a0_0x959a85(0x1d0)]);
2
+ 'use strict';const a0_0x23fd17=a0_0xd65d;(function(_0x269c85,_0x133650){const _0x3e6d8a=a0_0xd65d,_0x3e6e36=_0x269c85();while(!![]){try{const _0x523ea9=-parseInt(_0x3e6d8a(0x20a))/0x1*(parseInt(_0x3e6d8a(0x1f3))/0x2)+-parseInt(_0x3e6d8a(0x207))/0x3*(parseInt(_0x3e6d8a(0x1f2))/0x4)+parseInt(_0x3e6d8a(0x1d0))/0x5*(parseInt(_0x3e6d8a(0x1e1))/0x6)+parseInt(_0x3e6d8a(0x1ef))/0x7*(-parseInt(_0x3e6d8a(0x1db))/0x8)+-parseInt(_0x3e6d8a(0x201))/0x9+-parseInt(_0x3e6d8a(0x1cb))/0xa+parseInt(_0x3e6d8a(0x1d5))/0xb;if(_0x523ea9===_0x133650)break;else _0x3e6e36['push'](_0x3e6e36['shift']());}catch(_0x40720c){_0x3e6e36['push'](_0x3e6e36['shift']());}}}(a0_0x5ad3,0xe4dd0));function a0_0x5ad3(){const _0x7d8f40=['runDoctor','\x0aExamples:\x0a\x20\x20$\x20cc-ding\x20init\x20-ci\x20{clientId}\x20-cs\x20{clientSecret}\x20-m\x20{mobile}\x0a\x20\x20$\x20cc-ding\x20run\x20-ci\x20{clientId}\x0a','428825rlgDVF','\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20功能:\x20钉钉机器人对接本地Claude,\x20支持会话模式和任务队列模式\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20会话数据路径:\x20~/.cc-ding/{clientId}/{MD5}/.sessions/{claudeSessionId}/session.{json|log}\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20任务数据路径:\x20~/.cc-ding/{clientId}/{MD5}/.tasks/{时间戳}/task.{json|log}\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20定时任务数据:\x20~/.cc-ding/{clientId}/cron.json\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20启动方式:\x20pm2\x20start\x20--name\x20\x22cc-ding-{clientId}\x22\x20npx\x20--\x20-p\x20cc-ding\x20run\x20-ci\x20{clientId}\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20会话模式说明\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20会话ID:\x20由\x20Claude\x20分配的\x20claudeSessionId\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20结束会话:\x20/end\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20新会话:\x20/new\x20[初始消息]\x20强制结束当前会话并开启新会话\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20恢复会话:\x20/resume\x20[会话ID]\x20恢复指定历史会话,\x20不指定则恢复最近一个\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20会话持久化:\x20活跃会话自动保存到\x20active.json,\x20服务重启后自动恢复\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20群内多用户:\x20允许群内所有白名单用户参与对话\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20/help:\x20查看所有可用命令(含版本、作者、文档链接);\x20/{命令}\x20--help\x20查看命令详细用法\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20图片消息支持\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20支持接收钉钉图片消息(picture)和富文本消息(richText,\x20含内嵌图片)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20图片自动下载保存到\x20<会话目录>/.images/\x20下\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20useLocalOcr:\x20默认开启,\x20使用本地OCR识别图片文字,\x20同时传入原图路径供Claude自主查看\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20配置方式:\x20conversations[].useLocalOcr\x20=\x20false\x20可关闭OCR(适用于支持图片识别的模型)\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20任务模式说明\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20任务ID:\x20任务接收时间戳\x0a\x20\x20\x20\x20\x20\x20\x20\x20-\x20API\x20Key\x20池化管理(可选,\x20配置apiKeyCfg后启用)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20429自动切换:\x20自动切换到API\x20Key模式\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20Key轮换:\x20API\x20Key遇到429或连续TPM不稳定时自动换Key\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20-\x20跨天重置:\x20每日自动重置API\x20Key状态\x0a\x20\x20\x20\x20\x20\x20','\x20\x201.\x20编辑\x20config.json\x20添加\x20conversations\x20配置(群聊需配置dingToken)','acquirePidLock','action','33801702lMOxct','path','-cs,\x20--clientSecret\x20<value>','getPkgVersion','/config.json','\x20\x20\x20\x20\x20pm2\x20start\x20--name\x20\x22cc-ding-','1039888EonpoZ','split','doctor','Caught\x20exception:\x20','printDoctorResults','log','90glMLKD','../src/biz/lock','slice','uncaughtException','\x0a❌\x20Node\x20版本过低,无法执行\x20init\x20命令','__esModule','run','cc助手','检查指定client的配置文件schema合法性和有效性','projUtil','requiredOption','clientId','option','\x20\x203.\x20推荐PM2启动:','7ohmxrH','getHomeDir','-ci,\x20--clientId\x20<value>','408248zBElSB','5996FDDMHF','defineProperty','\x20\x20要求:Node\x20>=\x2024','version','setMaxListeners','argv','clientSecret','commander','.cc-ding','配置文件已存在:\x20','-cn,\x20--clientName\x20<value>','如需重新初始化,\x20请先删除已有配置文件','clientSecret\x20(钉钉Stream连接密钥)','exit','9840888ymnBks','removeAllListeners','mobile\x20(自己的手机号,\x20自动加入白名单)','mobile','ensureClientDir','\x20\x20当前版本:','18jUnWte','\x0a\x20\x20\x20\x20cc-ding\x20for\x20connect\x20ClaudeCode\x20to\x20DingDingRobot\x0a\x20\x20','description','65GcMXJf','initClientDir','Command','join','clientName','../src/common','<兜底钉钉机器人Token-用于无dingToken群的消息接收>','\x20\x202.\x20启动机器人:\x20cc-ding\x20run\x20-ci','初始化cc-ding配置文件,\x20生成最简config.json','before','13912730WVcacQ','command','default'];a0_0x5ad3=function(){return _0x7d8f40;};return a0_0x5ad3();}var __importDefault=this&&this['__importDefault']||function(_0x4768d2){return _0x4768d2&&_0x4768d2['__esModule']?_0x4768d2:{'default':_0x4768d2};};function a0_0xd65d(_0x54b190,_0xc38ffb){_0x54b190=_0x54b190-0x1c2;const _0x5ad3be=a0_0x5ad3();let _0xd65d7d=_0x5ad3be[_0x54b190];return _0xd65d7d;}Object[a0_0x23fd17(0x1f4)](exports,a0_0x23fd17(0x1e6),{'value':!![]});const common_1=require(a0_0x23fd17(0x1c6)),commander_1=require(a0_0x23fd17(0x1fa)),session_1=require('../src/biz/session'),path_1=__importDefault(require(a0_0x23fd17(0x1d6))),cc_ding_cli_1=require('../src/biz/cc-ding-cli'),lock_1=require(a0_0x23fd17(0x1e2)),doctor_1=require('../src/biz/doctor'),fs_1=__importDefault(require('fs'));(0x0,common_1['loadEnv'])(),process[a0_0x23fd17(0x202)]('warning'),process[a0_0x23fd17(0x1f7)](0x0),process['on'](a0_0x23fd17(0x1e4),function(_0x4ffc9e){const _0x5d266a=a0_0x23fd17;console['log'](_0x5d266a(0x1de)+_0x4ffc9e),process[_0x5d266a(0x200)](0x1);});const program=new commander_1[(a0_0x23fd17(0x1c3))]();program['addHelpText'](a0_0x23fd17(0x1ca),a0_0x23fd17(0x208))['addHelpText']('after',a0_0x23fd17(0x1cf))['version']((0x0,common_1[a0_0x23fd17(0x1ea)])()[a0_0x23fd17(0x1d8)]()),program[a0_0x23fd17(0x1cc)]('init')[a0_0x23fd17(0x209)](a0_0x23fd17(0x1c9))[a0_0x23fd17(0x1eb)](a0_0x23fd17(0x1f1),a0_0x23fd17(0x1ec))[a0_0x23fd17(0x1eb)](a0_0x23fd17(0x1d7),a0_0x23fd17(0x1ff))[a0_0x23fd17(0x1eb)]('-m,\x20--mobile\x20<value>',a0_0x23fd17(0x203))[a0_0x23fd17(0x1ed)](a0_0x23fd17(0x1fd),'clientName\x20(机器人名称,\x20可选)')[a0_0x23fd17(0x1d4)](async _0xb4ce5d=>{const _0x1d2822=a0_0x23fd17,_0x23de6f=process[_0x1d2822(0x1f6)][_0x1d2822(0x1e3)](0x1),_0x1c89e1=parseInt(_0x23de6f[_0x1d2822(0x1dc)]('.')[0x0],0xa);_0x1c89e1<0x18&&(console[_0x1d2822(0x1e0)](_0x1d2822(0x1e5)),console[_0x1d2822(0x1e0)](_0x1d2822(0x206)+_0x23de6f),console['log'](_0x1d2822(0x1f5)),console[_0x1d2822(0x1e0)]('\x0a💡\x20请升级\x20Node\x20版本后重新运行\x0a'),process[_0x1d2822(0x200)](0x1));const _0x5de725=(0x0,session_1['getHomeDir'])()+'/.cc-ding/'+_0xb4ce5d['clientId'],_0x23bae9=_0x5de725+_0x1d2822(0x1d9);fs_1[_0x1d2822(0x1cd)]['existsSync'](_0x23bae9)&&(console['log'](_0x1d2822(0x1fc)+_0x23bae9),console[_0x1d2822(0x1e0)](_0x1d2822(0x1fe)),process[_0x1d2822(0x200)](0x1));const _0x762aa0={'clientName':_0xb4ce5d[_0x1d2822(0x1c5)]||_0x1d2822(0x1e8),'owner':_0xb4ce5d[_0x1d2822(0x204)],'whiteUserList':[_0xb4ce5d[_0x1d2822(0x204)]],'clientSecret':_0xb4ce5d[_0x1d2822(0x1f9)],'defaultDingToken':_0x1d2822(0x1c7),'conversations':[],'includeThinking':![],'resultOnly':!![],'debug':![],'taskQueueSize':0xa,'taskHandlerCount':0x1,'sessionMaxConcurrency':0x14};(0x0,session_1[_0x1d2822(0x1c2)])(_0xb4ce5d[_0x1d2822(0x1ec)],_0x762aa0),console[_0x1d2822(0x1e0)]('配置文件已生成:',_0x23bae9),console[_0x1d2822(0x1e0)](''),console[_0x1d2822(0x1e0)]('后续步骤:'),console['log'](_0x1d2822(0x1d2)),console['log'](_0x1d2822(0x1c8),_0xb4ce5d[_0x1d2822(0x1ec)]),console[_0x1d2822(0x1e0)](_0x1d2822(0x1ee)),console['log'](_0x1d2822(0x1da)+_0xb4ce5d[_0x1d2822(0x1ec)]+'\x22\x20npx\x20--\x20-p\x20cc-ding\x20cc-ding\x20run\x20-ci\x20'+_0xb4ce5d[_0x1d2822(0x1ec)]);}),program['command'](a0_0x23fd17(0x1e7))[a0_0x23fd17(0x209)](a0_0x23fd17(0x1d1))[a0_0x23fd17(0x1eb)](a0_0x23fd17(0x1f1),a0_0x23fd17(0x1ec))[a0_0x23fd17(0x1d4)](async _0x163be0=>{const _0x5730f3=a0_0x23fd17;(0x0,session_1[_0x5730f3(0x205)])(_0x163be0['clientId']);const _0x24f3a3=path_1[_0x5730f3(0x1cd)]['join']((0x0,session_1[_0x5730f3(0x1f0)])(),'.cc-ding',_0x163be0[_0x5730f3(0x1ec)]);(0x0,lock_1[_0x5730f3(0x1d3)])(_0x24f3a3,_0x163be0[_0x5730f3(0x1ec)]),await new cc_ding_cli_1['DingClaude'](_0x163be0['clientId'])['run']();}),program[a0_0x23fd17(0x1cc)](a0_0x23fd17(0x1dd))[a0_0x23fd17(0x209)](a0_0x23fd17(0x1e9))['requiredOption'](a0_0x23fd17(0x1f1),a0_0x23fd17(0x1ec))[a0_0x23fd17(0x1d4)](async _0x244eda=>{const _0x4a3697=a0_0x23fd17,_0x2d5cdf=path_1[_0x4a3697(0x1cd)][_0x4a3697(0x1c4)]((0x0,session_1['getHomeDir'])(),_0x4a3697(0x1fb),_0x244eda[_0x4a3697(0x1ec)]),_0x805e0=(0x0,doctor_1[_0x4a3697(0x1ce)])(_0x2d5cdf);(0x0,doctor_1[_0x4a3697(0x1df)])(_0x805e0);}),program['parse'](process[a0_0x23fd17(0x1f8)]);
@@ -1 +1 @@
1
- 'use strict';const a1_0x16c992=a1_0x47d2;(function(_0x54667e,_0x1950fc){const _0x1cdfd4=a1_0x47d2,_0x3bf4c5=_0x54667e();while(!![]){try{const _0x426a83=-parseInt(_0x1cdfd4(0x22c))/0x1*(parseInt(_0x1cdfd4(0x251))/0x2)+parseInt(_0x1cdfd4(0x220))/0x3*(parseInt(_0x1cdfd4(0x266))/0x4)+-parseInt(_0x1cdfd4(0x21f))/0x5+-parseInt(_0x1cdfd4(0x216))/0x6*(parseInt(_0x1cdfd4(0x243))/0x7)+-parseInt(_0x1cdfd4(0x206))/0x8*(parseInt(_0x1cdfd4(0x20c))/0x9)+parseInt(_0x1cdfd4(0x249))/0xa*(-parseInt(_0x1cdfd4(0x254))/0xb)+parseInt(_0x1cdfd4(0x1f3))/0xc;if(_0x426a83===_0x1950fc)break;else _0x3bf4c5['push'](_0x3bf4c5['shift']());}catch(_0x56e524){_0x3bf4c5['push'](_0x3bf4c5['shift']());}}}(a1_0x5085,0x719f9));var __importDefault=this&&this[a1_0x16c992(0x210)]||function(_0x45ea32){return _0x45ea32&&_0x45ea32['__esModule']?_0x45ea32:{'default':_0x45ea32};};Object[a1_0x16c992(0x20d)](exports,'__esModule',{'value':!![]}),exports[a1_0x16c992(0x261)]=saveClientConfig,exports[a1_0x16c992(0x23f)]=resetApiKeyCfg,exports[a1_0x16c992(0x271)]=scheduleApiKeyCfgDailyReset,exports['settingLabel']=settingLabel,exports[a1_0x16c992(0x276)]=rotateApiKey,exports['pickValidApiKey']=pickValidApiKey,exports['ensureSettingsWithApiKey']=ensureSettingsWithApiKey,exports[a1_0x16c992(0x221)]=isQuotaExhaustedError,exports['isAuthenticationError']=isAuthenticationError,exports[a1_0x16c992(0x26c)]=readApiKeyFromSettings,exports['getForceEnabledSettingsPath']=getForceEnabledSettingsPath,exports[a1_0x16c992(0x207)]=startupCheck;const fs_1=__importDefault(require('fs')),path_1=__importDefault(require(a1_0x16c992(0x265))),child_process_1=require(a1_0x16c992(0x234)),session_1=require(a1_0x16c992(0x205)),utils_ok_1=require(a1_0x16c992(0x20a));function saveClientConfig(_0x5db16c){const _0x1e1b40=a1_0x16c992,_0x583b4d=_0x5db16c[_0x1e1b40(0x22e)]()+'/config.json';try{fs_1['default'][_0x1e1b40(0x267)](_0x583b4d,JSON[_0x1e1b40(0x21e)](_0x5db16c[_0x1e1b40(0x24e)],null,0x2),'utf-8');}catch(_0x33d99b){console[_0x1e1b40(0x223)]('['+(0x0,session_1['timestamp'])()+']\x20保存\x20config.json\x20失败:',_0x33d99b);}}function a1_0x47d2(_0x1fba32,_0x1d5f82){_0x1fba32=_0x1fba32-0x1f1;const _0x508572=a1_0x5085();let _0x47d2fd=_0x508572[_0x1fba32];return _0x47d2fd;}function resetApiKeyCfg(_0x5e5ce3){const _0x389268=a1_0x16c992,_0x398c29=_0x5e5ce3[_0x389268(0x24e)]['apiKeyCfg'];if(!_0x398c29)return;const _0x4c5706=new Date();_0x398c29['resetTime']=utils_ok_1[_0x389268(0x239)]['mm'](_0x4c5706[_0x389268(0x24a)]())[_0x389268(0x277)](_0x389268(0x214));let _0x18aed3=0x0;for(const _0x121380 of _0x398c29[_0x389268(0x274)]){!_0x121380[_0x389268(0x24b)]&&(_0x121380[_0x389268(0x24b)]=!![],_0x18aed3++);}_0x18aed3>0x0&&console[_0x389268(0x1fa)]('['+(0x0,session_1['timestamp'])()+']\x20'+_0x18aed3+_0x389268(0x21b)),saveClientConfig(_0x5e5ce3),console[_0x389268(0x1fa)]('['+(0x0,session_1[_0x389268(0x26b)])()+_0x389268(0x241));}function scheduleApiKeyCfgDailyReset(_0x38c4a1){const _0x42d3c3=()=>{const _0x3eb0e4=a1_0x47d2,_0x39a44c=new Date(),_0x300bb8=new Date(_0x39a44c[_0x3eb0e4(0x1fe)](),_0x39a44c[_0x3eb0e4(0x208)](),_0x39a44c['getDate']()+0x1,0x0,0x0,0x0,0x0),_0x4b2f9c=_0x300bb8[_0x3eb0e4(0x24a)]()-_0x39a44c[_0x3eb0e4(0x24a)]();setTimeout(()=>{const _0x40da59=_0x3eb0e4;console[_0x40da59(0x1fa)]('['+(0x0,session_1['timestamp'])()+_0x40da59(0x257)),resetApiKeyCfg(_0x38c4a1),_0x42d3c3();},_0x4b2f9c),console[_0x3eb0e4(0x1fa)]('['+(0x0,session_1[_0x3eb0e4(0x26b)])()+_0x3eb0e4(0x219)+_0x300bb8['toISOString']());};_0x42d3c3();}function settingLabel(_0x2c96d0){const _0x2afad7=a1_0x16c992;return _0x2c96d0[_0x2afad7(0x215)]?_0x2c96d0[_0x2afad7(0x215)]:_0x2afad7(0x25b)+_0x2c96d0['apiKey']['slice'](-0x6);}function findSettingLabel(_0x1e7fd3,_0x1ce1f1){const _0x11df7d=a1_0x16c992,_0x36060e=_0x1e7fd3[_0x11df7d(0x25e)](_0x5e8f92=>_0x5e8f92[_0x11df7d(0x222)]===_0x1ce1f1);return _0x36060e?settingLabel(_0x36060e):_0x11df7d(0x25b)+_0x1ce1f1[_0x11df7d(0x231)](-0x6);}function rotateApiKey(_0x8f643b,_0x27405b){const _0x355f0a=a1_0x16c992,_0x5bb8b9=_0x8f643b['config'][_0x355f0a(0x225)];if(!_0x5bb8b9)return null;for(const _0x334b7c of _0x5bb8b9['claudeSettings']){if(_0x334b7c['apiKey']===_0x27405b&&_0x334b7c[_0x355f0a(0x24b)]){_0x334b7c[_0x355f0a(0x24b)]=![];break;}}const _0x70ceb3=_0x5bb8b9['claudeSettings'][_0x355f0a(0x21d)](_0x5e172f=>_0x5e172f['isValid'])[_0x355f0a(0x245)],_0xd4a4e=findSettingLabel(_0x5bb8b9[_0x355f0a(0x274)],_0x27405b);return console[_0x355f0a(0x1fa)]('['+(0x0,session_1[_0x355f0a(0x26b)])()+_0x355f0a(0x24d)+_0xd4a4e+',\x20剩余有效:\x20'+_0x70ceb3),saveClientConfig(_0x8f643b),pickValidApiKey(_0x8f643b);}function pickValidApiKey(_0x3bd97b){const _0x3e9347=a1_0x16c992,_0x364603=_0x3bd97b[_0x3e9347(0x24e)][_0x3e9347(0x225)];if(!_0x364603)return null;const _0x41a741=_0x364603['claudeSettings'][_0x3e9347(0x21d)](_0x26d6db=>_0x26d6db[_0x3e9347(0x24b)]);if(_0x41a741['length']===0x0)return null;return _0x41a741[Math['floor'](Math['random']()*_0x41a741['length'])];}function a1_0x5085(){const _0x1db872=['isArray','linkConversationId','baseUrl','YYYY-MM-DD\x20HH:mm:ss','memo','2790516rJVkqC','ANTHROPIC_AUTH_TOKEN','apiKeyCfg\x20上次重置时间:\x20',']\x20apiKeyCfg\x20每日重置已调度,下次重置:\x20',',创建\x20settings-ding.json\x20时将使用空模板','\x20个已失效\x20Claude\x20Setting\x20重新标记为有效','keys','filter','stringify','4095935DrOQVQ','390xDuOCr','isQuotaExhaustedError','apiKey','error','clientSecret\x20(钉钉\x20Stream\x20Client\x20密钥)','apiKeyCfg','settings-tpl.json','add','object','settings-ding.json','level',',强制使用该配置','68477wdoQVR','claude\x20命令不可用,请确认\x20Claude\x20Code\x20CLI\x20已安装','getClientDir',']\x20已写入\x20Claude\x20配置到\x20','\x20致命','slice','settings-tpl.json\x20不存在:\x20','conversationId','child_process','[WARN]\x20','mkdirSync','dingSecret\x20(钉钉加签密钥)','\x20—\x20','dateUtil',']\x20检测到\x20settings-ding.json\x20FORCE_ENABLE=',']\x20==========\x20启动自检\x20==========','conversations[','exit','getConversationDir','resetApiKeyCfg','parse',']\x20apiKeyCfg\x20已重置\x20(所有\x20Claude\x20Setting\x20isValid=true)','\x20缺少\x20baseUrl','7JbjgGz','dingSecret','length','conversations\x20(群配置列表)','conversations','test','70gqQDWa','getTime','isValid','\x20缺少\x20conversationId',']\x20Claude\x20Setting\x20已失效:\x20','config','FATAL','\x20linkConversationId\x20\x22','2muFZUB',',\x20smallModel:\x20','WARN','781671WngTlw','env','settings-tpl.json\x20有效,env\x20包含:\x20',']\x20定时重置\x20apiKeyCfg\x20(每天0点)','.healthcheck','join','.claude','...','some','\x20项,有效\x20','find','which\x20claude','utf-8','saveClientConfig','\x20通过,\x20','message','[FATAL]\x20','path','12568dxarLs','writeFileSync','config.json\x20','ANTHROPIC_MODEL','.anycli','timestamp','readApiKeyFromSettings','\x20isValid\x20类型异常:\x20','FORCE_ENABLE','push','\x20警告,\x20','scheduleApiKeyCfgDailyReset','claude\x20命令可用','\x20conversationId\x20重复:\x20','claudeSettings','readFileSync','rotateApiKey','format','settings-tpl.json\x20根元素不是对象','whiteUserList\x20(白名单用户)','24810492jLIYXQ','settings-tpl.json\x20缺少\x20env\x20字段,创建\x20settings-ding.json\x20时将不包含预配置环境变量','settings-tpl.json\x20解析失败:\x20','PASS','default','conversationTitle','unlinkSync','log','whiteUserList','\x20缺少\x20model','pipe','getFullYear',']\x20从模板创建\x20settings-ding.json:\x20','cc-ding','existsSync','apiKeyCfg.claudeSettings\x20共\x20','has','ANTHROPIC_BASE_URL','./session','1283384NCfKrV','startupCheck','getMonth','model','utils-ok','CLAUDE_SMALL_FAST_MODEL','9hfIkZM','defineProperty','resetTime',']\x20自检完成:\x20','__importDefault'];a1_0x5085=function(){return _0x1db872;};return a1_0x5085();}function ensureSettingsWithApiKey(_0x39def7,_0x15e853){const _0x4e3e13=a1_0x16c992,_0x2f68a8=path_1[_0x4e3e13(0x1f7)][_0x4e3e13(0x259)](_0x39def7,_0x4e3e13(0x25a)),_0x3daee1=path_1[_0x4e3e13(0x1f7)][_0x4e3e13(0x259)](_0x2f68a8,_0x4e3e13(0x229));let _0x43d398={};if(fs_1[_0x4e3e13(0x1f7)]['existsSync'](_0x3daee1))try{_0x43d398=JSON[_0x4e3e13(0x240)](fs_1[_0x4e3e13(0x1f7)][_0x4e3e13(0x275)](_0x3daee1,'utf-8'));}catch{_0x43d398={};}else{const _0x2843e2=path_1[_0x4e3e13(0x1f7)][_0x4e3e13(0x259)]((0x0,session_1['getHomeDir'])(),_0x4e3e13(0x26a),_0x4e3e13(0x200),_0x4e3e13(0x226));if(fs_1[_0x4e3e13(0x1f7)][_0x4e3e13(0x201)](_0x2843e2))try{_0x43d398=JSON['parse'](fs_1[_0x4e3e13(0x1f7)][_0x4e3e13(0x275)](_0x2843e2,_0x4e3e13(0x260))),console[_0x4e3e13(0x1fa)]('['+(0x0,session_1[_0x4e3e13(0x26b)])()+_0x4e3e13(0x1ff)+_0x2843e2);}catch{_0x43d398={};}}!_0x43d398[_0x4e3e13(0x255)]&&(_0x43d398['env']={});let _0x43f56f=![];_0x43d398['env'][_0x4e3e13(0x217)]!==_0x15e853['apiKey']&&(_0x43d398['env']['ANTHROPIC_AUTH_TOKEN']=_0x15e853[_0x4e3e13(0x222)],_0x43f56f=!![]);_0x15e853[_0x4e3e13(0x213)]&&_0x43d398[_0x4e3e13(0x255)][_0x4e3e13(0x204)]!==_0x15e853['baseUrl']&&(_0x43d398[_0x4e3e13(0x255)][_0x4e3e13(0x204)]=_0x15e853[_0x4e3e13(0x213)],_0x43f56f=!![]);_0x15e853[_0x4e3e13(0x209)]&&_0x43d398['env'][_0x4e3e13(0x269)]!==_0x15e853[_0x4e3e13(0x209)]&&(_0x43d398[_0x4e3e13(0x255)]['ANTHROPIC_MODEL']=_0x15e853[_0x4e3e13(0x209)],_0x43f56f=!![]);const _0xd9b4c=_0x15e853['smallModel']||_0x15e853['model'];return _0xd9b4c&&_0x43d398[_0x4e3e13(0x255)]['CLAUDE_SMALL_FAST_MODEL']!==_0xd9b4c&&(_0x43d398[_0x4e3e13(0x255)][_0x4e3e13(0x20b)]=_0xd9b4c,_0x43f56f=!![]),_0x43f56f&&(fs_1['default'][_0x4e3e13(0x236)](_0x2f68a8,{'recursive':!![]}),fs_1[_0x4e3e13(0x1f7)][_0x4e3e13(0x267)](_0x3daee1,JSON[_0x4e3e13(0x21e)](_0x43d398,null,0x2),_0x4e3e13(0x260)),console[_0x4e3e13(0x1fa)]('['+(0x0,session_1[_0x4e3e13(0x26b)])()+_0x4e3e13(0x22f)+_0x3daee1+'\x20('+settingLabel(_0x15e853)+',\x20model:\x20'+_0x15e853[_0x4e3e13(0x209)]+_0x4e3e13(0x252)+_0xd9b4c+')')),_0x3daee1;}function isQuotaExhaustedError(_0x5f4757){const _0x1c883a=a1_0x16c992;if(/Request\s+rejected.*429/i[_0x1c883a(0x248)](_0x5f4757))return!![];if(/429.*Request\s+rejected/i[_0x1c883a(0x248)](_0x5f4757))return!![];if(/429.*(?:超过.*上限|使用上限|配额|quota|capacity)/i[_0x1c883a(0x248)](_0x5f4757))return!![];if(/(?:超过.*上限|使用上限|配额|quota|capacity).*429/i[_0x1c883a(0x248)](_0x5f4757))return!![];return![];}function isAuthenticationError(_0x18f272){const _0x4a42b0=a1_0x16c992;if(/authentication_error/i[_0x4a42b0(0x248)](_0x18f272))return!![];if(/401.*(?:未授权|unauthorized|invalid\s*(?:key|token|api)|auth)/i[_0x4a42b0(0x248)](_0x18f272))return!![];if(/(?:未授权|unauthorized|invalid\s*(?:key|token|api)|auth).*401/i['test'](_0x18f272))return!![];return![];}function readApiKeyFromSettings(_0x1e8878){const _0x324dbd=a1_0x16c992,_0x30207f=path_1[_0x324dbd(0x1f7)][_0x324dbd(0x259)](_0x1e8878,_0x324dbd(0x25a),_0x324dbd(0x229));if(!fs_1[_0x324dbd(0x1f7)][_0x324dbd(0x201)](_0x30207f))return null;try{const _0x873d9a=JSON[_0x324dbd(0x240)](fs_1['default'][_0x324dbd(0x275)](_0x30207f,_0x324dbd(0x260)));return _0x873d9a[_0x324dbd(0x255)]?.[_0x324dbd(0x217)]||null;}catch{return null;}}function getForceEnabledSettingsPath(_0x376990){const _0x1a4c7f=a1_0x16c992,_0x19b8d1=path_1[_0x1a4c7f(0x1f7)][_0x1a4c7f(0x259)](_0x376990,'.claude',_0x1a4c7f(0x229));if(!fs_1['default']['existsSync'](_0x19b8d1))return null;try{const _0x268608=JSON[_0x1a4c7f(0x240)](fs_1[_0x1a4c7f(0x1f7)]['readFileSync'](_0x19b8d1,_0x1a4c7f(0x260))),_0x42ba32=_0x268608[_0x1a4c7f(0x255)]?.[_0x1a4c7f(0x26e)];if(_0x42ba32!==undefined&&_0x42ba32!==![]&&_0x42ba32!=='')return console[_0x1a4c7f(0x1fa)]('['+(0x0,session_1['timestamp'])()+_0x1a4c7f(0x23a)+_0x42ba32+_0x1a4c7f(0x22b)),_0x19b8d1;return null;}catch{return null;}}function startupCheck(_0x17df76){const _0xe9a65=a1_0x16c992,_0x555e63=[],_0x417142=_0x17df76[_0xe9a65(0x24e)],_0x44542a=_0x17df76['getClientDir'](),_0x468b22=[{'key':'clientSecret','label':_0xe9a65(0x224)},{'key':_0xe9a65(0x244),'label':_0xe9a65(0x237)},{'key':_0xe9a65(0x1fb),'label':_0xe9a65(0x1f2)},{'key':_0xe9a65(0x247),'label':_0xe9a65(0x246)}];for(const {key:_0x1df6b6,label:_0x16e4e2}of _0x468b22){const _0x1417b7=_0x417142[_0x1df6b6];_0x1417b7===undefined||_0x1417b7===null||_0x1417b7===''||Array['isArray'](_0x1417b7)&&_0x1417b7[_0xe9a65(0x245)]===0x0?_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x24f),'message':'config.json\x20缺少必填字段:\x20'+_0x16e4e2}):_0x555e63['push']({'level':'PASS','message':_0xe9a65(0x268)+_0x16e4e2+'\x20✓'});}if(Array[_0xe9a65(0x211)](_0x417142['conversations'])){const _0x3e3b3c=new Set();for(let _0xc450d0=0x0;_0xc450d0<_0x417142[_0xe9a65(0x247)]['length'];_0xc450d0++){const _0x5a7bca=_0x417142[_0xe9a65(0x247)][_0xc450d0],_0x3c5258=_0xe9a65(0x23c)+_0xc450d0+']';if(!_0x5a7bca[_0xe9a65(0x233)])_0x555e63['push']({'level':_0xe9a65(0x24f),'message':_0x3c5258+_0xe9a65(0x24c)});else _0x3e3b3c[_0xe9a65(0x203)](_0x5a7bca[_0xe9a65(0x233)])?_0x555e63[_0xe9a65(0x26f)]({'level':'WARN','message':_0x3c5258+_0xe9a65(0x273)+_0x5a7bca[_0xe9a65(0x233)]}):_0x3e3b3c[_0xe9a65(0x227)](_0x5a7bca[_0xe9a65(0x233)]);_0x5a7bca[_0xe9a65(0x212)]&&!_0x417142[_0xe9a65(0x247)][_0xe9a65(0x25c)](_0x2f0e18=>_0x2f0e18[_0xe9a65(0x233)]===_0x5a7bca[_0xe9a65(0x212)])&&_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x253),'message':_0x3c5258+_0xe9a65(0x250)+_0x5a7bca[_0xe9a65(0x212)]+'\x22\x20未在\x20conversations\x20中找到'});}_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x1f6),'message':'conversations\x20共\x20'+_0x417142[_0xe9a65(0x247)][_0xe9a65(0x245)]+'\x20个群配置'});}if(_0x417142[_0xe9a65(0x225)]){const _0x1af130=_0x417142['apiKeyCfg'];_0x1af130[_0xe9a65(0x20e)]&&_0x555e63[_0xe9a65(0x26f)]({'level':'PASS','message':_0xe9a65(0x218)+_0x1af130[_0xe9a65(0x20e)]});if(!Array['isArray'](_0x1af130[_0xe9a65(0x274)]))_0x555e63['push']({'level':_0xe9a65(0x253),'message':'apiKeyCfg.claudeSettings\x20不是数组,API\x20Key\x20轮换功能不可用'});else{if(_0x1af130[_0xe9a65(0x274)][_0xe9a65(0x245)]===0x0)_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x253),'message':'apiKeyCfg.claudeSettings\x20为空,无可用\x20Key'});else{const _0xea7282=new Set();for(let _0x381adf=0x0;_0x381adf<_0x1af130[_0xe9a65(0x274)][_0xe9a65(0x245)];_0x381adf++){const _0x3f9f45=_0x1af130[_0xe9a65(0x274)][_0x381adf],_0x379eb8='apiKeyCfg.claudeSettings['+_0x381adf+']';if(!_0x3f9f45[_0xe9a65(0x222)])_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x24f),'message':_0x379eb8+'\x20缺少\x20apiKey'});else _0xea7282[_0xe9a65(0x203)](_0x3f9f45[_0xe9a65(0x222)])?_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x253),'message':_0x379eb8+'\x20apiKey\x20重复:\x20'+settingLabel(_0x3f9f45)}):_0xea7282[_0xe9a65(0x227)](_0x3f9f45[_0xe9a65(0x222)]);!_0x3f9f45[_0xe9a65(0x213)]&&_0x555e63[_0xe9a65(0x26f)]({'level':'WARN','message':_0x379eb8+_0xe9a65(0x242)}),!_0x3f9f45[_0xe9a65(0x209)]&&_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x253),'message':_0x379eb8+_0xe9a65(0x1fc)}),typeof _0x3f9f45[_0xe9a65(0x24b)]!=='boolean'&&_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x253),'message':_0x379eb8+_0xe9a65(0x26d)+typeof _0x3f9f45['isValid']});}const _0x5229c8=_0x1af130[_0xe9a65(0x274)][_0xe9a65(0x21d)](_0x42410e=>_0x42410e['isValid'])[_0xe9a65(0x245)];_0x555e63['push']({'level':_0xe9a65(0x1f6),'message':_0xe9a65(0x202)+_0x1af130[_0xe9a65(0x274)][_0xe9a65(0x245)]+_0xe9a65(0x25d)+_0x5229c8});}}}const _0x194071=path_1[_0xe9a65(0x1f7)][_0xe9a65(0x259)]((0x0,session_1['getHomeDir'])(),_0xe9a65(0x26a),_0xe9a65(0x200),'settings-tpl.json');if(fs_1[_0xe9a65(0x1f7)][_0xe9a65(0x201)](_0x194071))try{const _0x881b21=JSON[_0xe9a65(0x240)](fs_1[_0xe9a65(0x1f7)]['readFileSync'](_0x194071,'utf-8'));if(typeof _0x881b21!==_0xe9a65(0x228)||_0x881b21===null)_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x253),'message':_0xe9a65(0x1f1)});else{if(!_0x881b21['env']||typeof _0x881b21['env']!==_0xe9a65(0x228))_0x555e63['push']({'level':_0xe9a65(0x253),'message':_0xe9a65(0x1f4)});else{const _0x158c58=Object[_0xe9a65(0x21c)](_0x881b21['env']);_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x1f6),'message':_0xe9a65(0x256)+(_0x158c58['join'](',\x20')||'(空)')});}}}catch(_0x45dc1c){_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x253),'message':_0xe9a65(0x1f5)+(_0x45dc1c instanceof Error?_0x45dc1c[_0xe9a65(0x263)]:_0x45dc1c)});}else _0x555e63['push']({'level':_0xe9a65(0x253),'message':_0xe9a65(0x232)+_0x194071+_0xe9a65(0x21a)});try{(0x0,child_process_1['execSync'])(_0xe9a65(0x25f),{'stdio':_0xe9a65(0x1fd)}),_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x1f6),'message':_0xe9a65(0x272)});}catch{_0x555e63[_0xe9a65(0x26f)]({'level':'FATAL','message':_0xe9a65(0x22d)});}try{const _0x265871=path_1['default'][_0xe9a65(0x259)](_0x44542a,_0xe9a65(0x258));fs_1['default']['writeFileSync'](_0x265871,'ok',_0xe9a65(0x260)),fs_1['default'][_0xe9a65(0x1f9)](_0x265871),_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x1f6),'message':'工作目录可写:\x20'+_0x44542a});}catch(_0x18e292){_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x24f),'message':'工作目录不可写:\x20'+_0x44542a+'\x20—\x20'+(_0x18e292 instanceof Error?_0x18e292['message']:_0x18e292)});}if(Array[_0xe9a65(0x211)](_0x417142[_0xe9a65(0x247)]))for(const _0x12ba0e of _0x417142['conversations']){const _0x357e14=_0x17df76[_0xe9a65(0x23e)](_0x12ba0e[_0xe9a65(0x233)]);try{fs_1['default'][_0xe9a65(0x236)](_0x357e14,{'recursive':!![]}),_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x1f6),'message':'群工作目录已就绪:\x20'+(_0x12ba0e[_0xe9a65(0x1f8)]||_0x12ba0e[_0xe9a65(0x233)])});}catch(_0x3e55d6){_0x555e63[_0xe9a65(0x26f)]({'level':_0xe9a65(0x253),'message':'群工作目录创建失败:\x20'+_0x357e14+_0xe9a65(0x238)+(_0x3e55d6 instanceof Error?_0x3e55d6[_0xe9a65(0x263)]:_0x3e55d6)});}}console[_0xe9a65(0x1fa)]('\x0a['+(0x0,session_1[_0xe9a65(0x26b)])()+_0xe9a65(0x23b));const _0x4b969a=_0x555e63[_0xe9a65(0x25c)](_0x53e7d2=>_0x53e7d2[_0xe9a65(0x22a)]==='FATAL');for(const _0x2e52f4 of _0x555e63){const _0x332278=_0x2e52f4[_0xe9a65(0x22a)]===_0xe9a65(0x1f6)?'✓':_0x2e52f4[_0xe9a65(0x22a)]===_0xe9a65(0x24f)?'✗':'⚠',_0x3daa0b=_0x2e52f4['level']===_0xe9a65(0x1f6)?_0x2e52f4[_0xe9a65(0x263)]:_0x2e52f4[_0xe9a65(0x22a)]===_0xe9a65(0x24f)?_0xe9a65(0x264)+_0x2e52f4[_0xe9a65(0x263)]:_0xe9a65(0x235)+_0x2e52f4[_0xe9a65(0x263)];console[_0xe9a65(0x1fa)]('\x20\x20'+_0x332278+'\x20'+_0x3daa0b);}const _0x210d35=_0x555e63[_0xe9a65(0x21d)](_0x21b058=>_0x21b058[_0xe9a65(0x22a)]==='PASS')['length'],_0x17c7e8=_0x555e63[_0xe9a65(0x21d)](_0x38f40f=>_0x38f40f[_0xe9a65(0x22a)]==='WARN')['length'],_0x36075c=_0x555e63[_0xe9a65(0x21d)](_0x1659ab=>_0x1659ab['level']===_0xe9a65(0x24f))[_0xe9a65(0x245)];console[_0xe9a65(0x1fa)]('['+(0x0,session_1['timestamp'])()+_0xe9a65(0x20f)+_0x210d35+_0xe9a65(0x262)+_0x17c7e8+_0xe9a65(0x270)+_0x36075c+_0xe9a65(0x230)),console['log']('['+(0x0,session_1[_0xe9a65(0x26b)])()+']\x20==============================\x0a'),_0x4b969a&&(console[_0xe9a65(0x223)]('['+(0x0,session_1[_0xe9a65(0x26b)])()+']\x20启动自检发现致命错误,进程退出'),process[_0xe9a65(0x23d)](0x1));}
1
+ 'use strict';const a1_0x2b6750=a1_0x15c9;(function(_0x522308,_0x33ff2a){const _0x16b360=a1_0x15c9,_0x4451d0=_0x522308();while(!![]){try{const _0x45a4d4=parseInt(_0x16b360(0x136))/0x1+parseInt(_0x16b360(0x12f))/0x2+-parseInt(_0x16b360(0x148))/0x3+-parseInt(_0x16b360(0x129))/0x4+-parseInt(_0x16b360(0x120))/0x5+parseInt(_0x16b360(0x13d))/0x6+-parseInt(_0x16b360(0x15c))/0x7*(-parseInt(_0x16b360(0x155))/0x8);if(_0x45a4d4===_0x33ff2a)break;else _0x4451d0['push'](_0x4451d0['shift']());}catch(_0x52a38){_0x4451d0['push'](_0x4451d0['shift']());}}}(a1_0x4cad,0x3bf34));var __importDefault=this&&this[a1_0x2b6750(0x18b)]||function(_0x50d1c3){const _0x3edf1e=a1_0x2b6750;return _0x50d1c3&&_0x50d1c3[_0x3edf1e(0xff)]?_0x50d1c3:{'default':_0x50d1c3};};Object[a1_0x2b6750(0x128)](exports,a1_0x2b6750(0xff),{'value':!![]}),exports[a1_0x2b6750(0xf7)]=saveClientConfig,exports[a1_0x2b6750(0x121)]=resetApiKeyCfg,exports['scheduleApiKeyCfgDailyReset']=scheduleApiKeyCfgDailyReset,exports[a1_0x2b6750(0x189)]=settingLabel,exports[a1_0x2b6750(0x146)]=rotateApiKey,exports[a1_0x2b6750(0x17c)]=pickValidApiKey,exports[a1_0x2b6750(0x176)]=ensureSettingsWithApiKey,exports['isQuotaExhaustedError']=isQuotaExhaustedError,exports[a1_0x2b6750(0x13c)]=isAuthenticationError,exports[a1_0x2b6750(0x135)]=readApiKeyFromSettings,exports[a1_0x2b6750(0x186)]=getForceEnabledSettingsPath,exports[a1_0x2b6750(0x15e)]=startupCheck;function a1_0x15c9(_0x2fe1cf,_0x2e7c9b){_0x2fe1cf=_0x2fe1cf-0xf7;const _0x4cad92=a1_0x4cad();let _0x15c9c9=_0x4cad92[_0x2fe1cf];return _0x15c9c9;}const fs_1=__importDefault(require('fs')),path_1=__importDefault(require(a1_0x2b6750(0xfd))),child_process_1=require(a1_0x2b6750(0x126)),session_1=require(a1_0x2b6750(0x185)),utils_ok_1=require(a1_0x2b6750(0x18a));function saveClientConfig(_0x51d212){const _0x53c60f=a1_0x2b6750,_0x2cde8e=_0x51d212[_0x53c60f(0x159)]()+_0x53c60f(0x11a);try{fs_1[_0x53c60f(0x154)][_0x53c60f(0x17f)](_0x2cde8e,JSON[_0x53c60f(0x17d)](_0x51d212[_0x53c60f(0x104)],null,0x2),_0x53c60f(0x11d));}catch(_0x1ea28e){console[_0x53c60f(0x163)]('['+(0x0,session_1[_0x53c60f(0x167)])()+_0x53c60f(0x114),_0x1ea28e);}}function resetApiKeyCfg(_0x24e8fa){const _0x125f80=a1_0x2b6750,_0xadf80e=_0x24e8fa['config'][_0x125f80(0xfc)];if(!_0xadf80e)return;const _0x337395=new Date();_0xadf80e['resetTime']=utils_ok_1[_0x125f80(0x169)]['mm'](_0x337395[_0x125f80(0x14c)]())['format'](_0x125f80(0x170));let _0x549918=0x0;for(const _0x1914cc of _0xadf80e[_0x125f80(0x12d)]){!_0x1914cc[_0x125f80(0x125)]&&(_0x1914cc[_0x125f80(0x125)]=!![],_0x549918++);}_0x549918>0x0&&console[_0x125f80(0x131)]('['+(0x0,session_1[_0x125f80(0x167)])()+']\x20'+_0x549918+_0x125f80(0x102)),saveClientConfig(_0x24e8fa),console[_0x125f80(0x131)]('['+(0x0,session_1[_0x125f80(0x167)])()+_0x125f80(0x12c));}function a1_0x4cad(){const _0x1cfd13=['apiKeyCfg.claudeSettings\x20共\x20','getTime','linkConversationId','\x20致命','clientSecret\x20(钉钉\x20Stream\x20Client\x20密钥)','which\x20claude',',\x20smallModel:\x20','push','apiKeyCfg.claudeSettings[','default','20904mrsvnE','FATAL',']\x20==========\x20启动自检\x20==========','settings-ding.json','getClientDir','isArray','find','525HNHqIe','model','startupCheck','apiKey','level','settings-tpl.json','boolean','error','floor','conversationTitle','has','timestamp','.cc-ding','dateUtil','[WARN]\x20','\x20isValid\x20类型异常:\x20','settings-tpl.json\x20有效,env\x20包含:\x20','filter','pipe',']\x20自检完成:\x20','YYYY-MM-DD\x20HH:mm:ss',',创建\x20settings-ding.json\x20时将使用空模板','PASS','FORCE_ENABLE','...','memo','ensureSettingsWithApiKey','\x20警告,\x20','claude\x20命令不可用,请确认\x20Claude\x20Code\x20CLI\x20已安装','\x22\x20未在\x20conversations\x20中找到','slice','claude\x20命令可用','pickValidApiKey','stringify','\x20apiKey\x20重复:\x20','writeFileSync','whiteUserList\x20(白名单用户)','ANTHROPIC_AUTH_TOKEN','\x20linkConversationId\x20\x22','object','message','./session','getForceEnabledSettingsPath','execSync','add','settingLabel','utils-ok','__importDefault','saveClientConfig','parse','\x20通过,\x20','conversationId','工作目录不可写:\x20','apiKeyCfg','path','conversations','__esModule',']\x20检测到\x20settings-ding.json\x20FORCE_ENABLE=','join','\x20个已失效\x20Claude\x20Setting\x20重新标记为有效','getFullYear','config','.claude','\x20缺少\x20apiKey','getHomeDir',']\x20启动自检发现致命错误,进程退出','settings-tpl.json\x20缺少\x20env\x20字段,创建\x20settings-ding.json\x20时将不包含预配置环境变量','existsSync','WARN','\x20缺少\x20conversationId',',\x20model:\x20','\x20—\x20','readFileSync','apiKeyCfg\x20上次重置时间:\x20','conversations\x20应为数组或已配置','getConversationDir','conversations[',']\x20保存\x20config.json\x20失败:','test','settings-tpl.json\x20不存在:\x20','conversations\x20为空数组,可通过\x20/reg\x20命令动态注册','群工作目录已就绪:\x20','random','/config.json','getMonth','resetTime','utf-8','mkdirSync','ANTHROPIC_BASE_URL','1943250NPSIVT','resetApiKeyCfg','工作目录可写:\x20','length','env','isValid','child_process','群工作目录创建失败:\x20','defineProperty','27452lcfSjv','some','exit',']\x20apiKeyCfg\x20已重置\x20(所有\x20Claude\x20Setting\x20isValid=true)','claudeSettings',']\x20Claude\x20Setting\x20已失效:\x20','176352jSNHLp','whiteUserList','log','apiKeyCfg.claudeSettings\x20为空,无可用\x20Key','\x20个群配置','(空)','readApiKeyFromSettings','298680SOpOim','clientSecret','ANTHROPIC_MODEL',',\x20剩余有效:\x20','config.json\x20缺少必填字段:\x20','\x20conversationId\x20重复:\x20','isAuthenticationError','1022484iZJpju','smallModel','baseUrl','conversations\x20共\x20','\x20缺少\x20baseUrl',']\x20定时重置\x20apiKeyCfg\x20(每天0点)','toISOString','owner','.healthcheck','rotateApiKey','keys','336528NUYtjD','CLAUDE_SMALL_FAST_MODEL','apiKeyCfg.claudeSettings\x20不是数组,API\x20Key\x20轮换功能不可用'];a1_0x4cad=function(){return _0x1cfd13;};return a1_0x4cad();}function scheduleApiKeyCfgDailyReset(_0x5a2746){const _0x3741f3=()=>{const _0x2be77e=a1_0x15c9,_0x28dea7=new Date(),_0x2c1859=new Date(_0x28dea7[_0x2be77e(0x103)](),_0x28dea7[_0x2be77e(0x11b)](),_0x28dea7['getDate']()+0x1,0x0,0x0,0x0,0x0),_0x1a98dc=_0x2c1859[_0x2be77e(0x14c)]()-_0x28dea7[_0x2be77e(0x14c)]();setTimeout(()=>{const _0x15e604=_0x2be77e;console['log']('['+(0x0,session_1[_0x15e604(0x167)])()+_0x15e604(0x142)),resetApiKeyCfg(_0x5a2746),_0x3741f3();},_0x1a98dc),console[_0x2be77e(0x131)]('['+(0x0,session_1[_0x2be77e(0x167)])()+']\x20apiKeyCfg\x20每日重置已调度,下次重置:\x20'+_0x2c1859[_0x2be77e(0x143)]());};_0x3741f3();}function settingLabel(_0xc6e115){const _0x227de6=a1_0x2b6750;return _0xc6e115[_0x227de6(0x175)]?_0xc6e115['memo']:_0x227de6(0x174)+_0xc6e115[_0x227de6(0x15f)][_0x227de6(0x17a)](-0x6);}function findSettingLabel(_0x115d10,_0x59e5bc){const _0x190e73=a1_0x2b6750,_0x33cfab=_0x115d10[_0x190e73(0x15b)](_0x2df110=>_0x2df110[_0x190e73(0x15f)]===_0x59e5bc);return _0x33cfab?settingLabel(_0x33cfab):_0x190e73(0x174)+_0x59e5bc[_0x190e73(0x17a)](-0x6);}function rotateApiKey(_0x77ffcd,_0x22b505){const _0x309296=a1_0x2b6750,_0x96c7c3=_0x77ffcd[_0x309296(0x104)][_0x309296(0xfc)];if(!_0x96c7c3)return null;for(const _0x399415 of _0x96c7c3['claudeSettings']){if(_0x399415['apiKey']===_0x22b505&&_0x399415['isValid']){_0x399415['isValid']=![];break;}}const _0x2120ab=_0x96c7c3[_0x309296(0x12d)]['filter'](_0x57116f=>_0x57116f[_0x309296(0x125)])[_0x309296(0x123)],_0x52e4c7=findSettingLabel(_0x96c7c3['claudeSettings'],_0x22b505);return console[_0x309296(0x131)]('['+(0x0,session_1[_0x309296(0x167)])()+_0x309296(0x12e)+_0x52e4c7+_0x309296(0x139)+_0x2120ab),saveClientConfig(_0x77ffcd),pickValidApiKey(_0x77ffcd);}function pickValidApiKey(_0x26dff7){const _0x16132c=a1_0x2b6750,_0x4bed6f=_0x26dff7[_0x16132c(0x104)][_0x16132c(0xfc)];if(!_0x4bed6f)return null;const _0x397256=_0x4bed6f[_0x16132c(0x12d)][_0x16132c(0x16d)](_0x2ed890=>_0x2ed890[_0x16132c(0x125)]);if(_0x397256[_0x16132c(0x123)]===0x0)return null;return _0x397256[Math[_0x16132c(0x164)](Math[_0x16132c(0x119)]()*_0x397256[_0x16132c(0x123)])];}function ensureSettingsWithApiKey(_0x2b5a64,_0x16a498){const _0x341e3d=a1_0x2b6750,_0x43e8e3=path_1['default'][_0x341e3d(0x101)](_0x2b5a64,'.claude'),_0x154a7=path_1[_0x341e3d(0x154)][_0x341e3d(0x101)](_0x43e8e3,_0x341e3d(0x158));let _0x49c328={};if(fs_1[_0x341e3d(0x154)][_0x341e3d(0x10a)](_0x154a7))try{_0x49c328=JSON[_0x341e3d(0xf8)](fs_1[_0x341e3d(0x154)][_0x341e3d(0x10f)](_0x154a7,'utf-8'));}catch{_0x49c328={};}else{const _0x57c0be=path_1[_0x341e3d(0x154)][_0x341e3d(0x101)]((0x0,session_1[_0x341e3d(0x107)])(),_0x341e3d(0x168),_0x341e3d(0x161));if(fs_1['default'][_0x341e3d(0x10a)](_0x57c0be))try{_0x49c328=JSON['parse'](fs_1[_0x341e3d(0x154)][_0x341e3d(0x10f)](_0x57c0be,_0x341e3d(0x11d))),console[_0x341e3d(0x131)]('['+(0x0,session_1[_0x341e3d(0x167)])()+']\x20从模板创建\x20settings-ding.json:\x20'+_0x57c0be);}catch{_0x49c328={};}}!_0x49c328[_0x341e3d(0x124)]&&(_0x49c328['env']={});let _0x1f5c4c=![];_0x49c328['env']['ANTHROPIC_AUTH_TOKEN']!==_0x16a498[_0x341e3d(0x15f)]&&(_0x49c328[_0x341e3d(0x124)][_0x341e3d(0x181)]=_0x16a498[_0x341e3d(0x15f)],_0x1f5c4c=!![]);_0x16a498['baseUrl']&&_0x49c328[_0x341e3d(0x124)]['ANTHROPIC_BASE_URL']!==_0x16a498[_0x341e3d(0x13f)]&&(_0x49c328[_0x341e3d(0x124)][_0x341e3d(0x11f)]=_0x16a498['baseUrl'],_0x1f5c4c=!![]);_0x16a498[_0x341e3d(0x15d)]&&_0x49c328[_0x341e3d(0x124)][_0x341e3d(0x138)]!==_0x16a498[_0x341e3d(0x15d)]&&(_0x49c328[_0x341e3d(0x124)][_0x341e3d(0x138)]=_0x16a498[_0x341e3d(0x15d)],_0x1f5c4c=!![]);const _0x5e63d6=_0x16a498[_0x341e3d(0x13e)]||_0x16a498[_0x341e3d(0x15d)];return _0x5e63d6&&_0x49c328[_0x341e3d(0x124)][_0x341e3d(0x149)]!==_0x5e63d6&&(_0x49c328['env'][_0x341e3d(0x149)]=_0x5e63d6,_0x1f5c4c=!![]),_0x1f5c4c&&(fs_1[_0x341e3d(0x154)]['mkdirSync'](_0x43e8e3,{'recursive':!![]}),fs_1[_0x341e3d(0x154)][_0x341e3d(0x17f)](_0x154a7,JSON['stringify'](_0x49c328,null,0x2),_0x341e3d(0x11d)),console[_0x341e3d(0x131)]('['+(0x0,session_1[_0x341e3d(0x167)])()+']\x20已写入\x20Claude\x20配置到\x20'+_0x154a7+'\x20('+settingLabel(_0x16a498)+_0x341e3d(0x10d)+_0x16a498['model']+_0x341e3d(0x151)+_0x5e63d6+')')),_0x154a7;}function isQuotaExhaustedError(_0x2058eb){const _0x3853e7=a1_0x2b6750;if(/Request\s+rejected.*429/i[_0x3853e7(0x115)](_0x2058eb))return!![];if(/429.*Request\s+rejected/i[_0x3853e7(0x115)](_0x2058eb))return!![];if(/429.*(?:超过.*上限|使用上限|配额|quota|capacity)/i[_0x3853e7(0x115)](_0x2058eb))return!![];if(/(?:超过.*上限|使用上限|配额|quota|capacity).*429/i[_0x3853e7(0x115)](_0x2058eb))return!![];return![];}function isAuthenticationError(_0x2dc64a){const _0x23d3e7=a1_0x2b6750;if(/authentication_error/i[_0x23d3e7(0x115)](_0x2dc64a))return!![];if(/401.*(?:未授权|unauthorized|invalid\s*(?:key|token|api)|auth)/i[_0x23d3e7(0x115)](_0x2dc64a))return!![];if(/(?:未授权|unauthorized|invalid\s*(?:key|token|api)|auth).*401/i[_0x23d3e7(0x115)](_0x2dc64a))return!![];return![];}function readApiKeyFromSettings(_0x316da1){const _0x394893=a1_0x2b6750,_0x52be39=path_1['default'][_0x394893(0x101)](_0x316da1,_0x394893(0x105),_0x394893(0x158));if(!fs_1[_0x394893(0x154)][_0x394893(0x10a)](_0x52be39))return null;try{const _0x14c72a=JSON[_0x394893(0xf8)](fs_1[_0x394893(0x154)][_0x394893(0x10f)](_0x52be39,'utf-8'));return _0x14c72a[_0x394893(0x124)]?.['ANTHROPIC_AUTH_TOKEN']||null;}catch{return null;}}function getForceEnabledSettingsPath(_0x47d0a7){const _0x2989f6=a1_0x2b6750,_0x36c62d=path_1['default'][_0x2989f6(0x101)](_0x47d0a7,_0x2989f6(0x105),'settings-ding.json');if(!fs_1[_0x2989f6(0x154)]['existsSync'](_0x36c62d))return null;try{const _0x326485=JSON[_0x2989f6(0xf8)](fs_1[_0x2989f6(0x154)][_0x2989f6(0x10f)](_0x36c62d,_0x2989f6(0x11d))),_0x3986c5=_0x326485[_0x2989f6(0x124)]?.[_0x2989f6(0x173)];if(_0x3986c5!==undefined&&_0x3986c5!==![]&&_0x3986c5!=='')return console[_0x2989f6(0x131)]('['+(0x0,session_1[_0x2989f6(0x167)])()+_0x2989f6(0x100)+_0x3986c5+',强制使用该配置'),_0x36c62d;return null;}catch{return null;}}function startupCheck(_0x12e4a2){const _0x269a3b=a1_0x2b6750,_0x2167eb=[],_0x913cba=_0x12e4a2[_0x269a3b(0x104)],_0x4220bc=_0x12e4a2[_0x269a3b(0x159)](),_0x5c5697=[{'key':_0x269a3b(0x137),'label':_0x269a3b(0x14f)},{'key':_0x269a3b(0x130),'label':_0x269a3b(0x180)},{'key':_0x269a3b(0x144),'label':'owner\x20(机器人\x20owner)'}];for(const {key:_0x2ddf62,label:_0x2f8f9a}of _0x5c5697){const _0x10777a=_0x913cba[_0x2ddf62];_0x10777a===undefined||_0x10777a===null||_0x10777a===''||Array[_0x269a3b(0x15a)](_0x10777a)&&_0x10777a[_0x269a3b(0x123)]===0x0?_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x156),'message':_0x269a3b(0x13a)+_0x2f8f9a}):_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x172),'message':'config.json\x20'+_0x2f8f9a+'\x20✓'});}if(!Array[_0x269a3b(0x15a)](_0x913cba[_0x269a3b(0xfe)]))_0x2167eb[_0x269a3b(0x152)]({'level':'FATAL','message':_0x269a3b(0x111)});else{if(_0x913cba[_0x269a3b(0xfe)]['length']===0x0)_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x172),'message':_0x269a3b(0x117)});else{const _0x1a427a=new Set();for(let _0x3c8163=0x0;_0x3c8163<_0x913cba[_0x269a3b(0xfe)][_0x269a3b(0x123)];_0x3c8163++){const _0x2c5b5c=_0x913cba[_0x269a3b(0xfe)][_0x3c8163],_0x327c9b=_0x269a3b(0x113)+_0x3c8163+']';if(!_0x2c5b5c[_0x269a3b(0xfa)])_0x2167eb['push']({'level':_0x269a3b(0x156),'message':_0x327c9b+_0x269a3b(0x10c)});else _0x1a427a['has'](_0x2c5b5c[_0x269a3b(0xfa)])?_0x2167eb['push']({'level':_0x269a3b(0x10b),'message':_0x327c9b+_0x269a3b(0x13b)+_0x2c5b5c[_0x269a3b(0xfa)]}):_0x1a427a[_0x269a3b(0x188)](_0x2c5b5c['conversationId']);_0x2c5b5c[_0x269a3b(0x14d)]&&!_0x913cba[_0x269a3b(0xfe)][_0x269a3b(0x12a)](_0x20b835=>_0x20b835['conversationId']===_0x2c5b5c[_0x269a3b(0x14d)])&&_0x2167eb[_0x269a3b(0x152)]({'level':'WARN','message':_0x327c9b+_0x269a3b(0x182)+_0x2c5b5c[_0x269a3b(0x14d)]+_0x269a3b(0x179)});}_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x172),'message':_0x269a3b(0x140)+_0x913cba[_0x269a3b(0xfe)][_0x269a3b(0x123)]+_0x269a3b(0x133)});}}if(_0x913cba['apiKeyCfg']){const _0x2ec498=_0x913cba[_0x269a3b(0xfc)];_0x2ec498[_0x269a3b(0x11c)]&&_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x172),'message':_0x269a3b(0x110)+_0x2ec498[_0x269a3b(0x11c)]});if(!Array['isArray'](_0x2ec498[_0x269a3b(0x12d)]))_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x10b),'message':_0x269a3b(0x14a)});else{if(_0x2ec498[_0x269a3b(0x12d)]['length']===0x0)_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x10b),'message':_0x269a3b(0x132)});else{const _0x57b305=new Set();for(let _0x25fe6f=0x0;_0x25fe6f<_0x2ec498[_0x269a3b(0x12d)][_0x269a3b(0x123)];_0x25fe6f++){const _0x52f67e=_0x2ec498[_0x269a3b(0x12d)][_0x25fe6f],_0x415bcc=_0x269a3b(0x153)+_0x25fe6f+']';if(!_0x52f67e[_0x269a3b(0x15f)])_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x156),'message':_0x415bcc+_0x269a3b(0x106)});else _0x57b305[_0x269a3b(0x166)](_0x52f67e[_0x269a3b(0x15f)])?_0x2167eb[_0x269a3b(0x152)]({'level':'WARN','message':_0x415bcc+_0x269a3b(0x17e)+settingLabel(_0x52f67e)}):_0x57b305['add'](_0x52f67e[_0x269a3b(0x15f)]);!_0x52f67e[_0x269a3b(0x13f)]&&_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x10b),'message':_0x415bcc+_0x269a3b(0x141)}),!_0x52f67e['model']&&_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x10b),'message':_0x415bcc+'\x20缺少\x20model'}),typeof _0x52f67e[_0x269a3b(0x125)]!==_0x269a3b(0x162)&&_0x2167eb['push']({'level':_0x269a3b(0x10b),'message':_0x415bcc+_0x269a3b(0x16b)+typeof _0x52f67e[_0x269a3b(0x125)]});}const _0x159e89=_0x2ec498[_0x269a3b(0x12d)][_0x269a3b(0x16d)](_0x20b4a6=>_0x20b4a6[_0x269a3b(0x125)])[_0x269a3b(0x123)];_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x172),'message':_0x269a3b(0x14b)+_0x2ec498['claudeSettings']['length']+'\x20项,有效\x20'+_0x159e89});}}}const _0x25615e=path_1[_0x269a3b(0x154)][_0x269a3b(0x101)]((0x0,session_1[_0x269a3b(0x107)])(),_0x269a3b(0x168),'settings-tpl.json');if(fs_1['default'][_0x269a3b(0x10a)](_0x25615e))try{const _0x48ba25=JSON[_0x269a3b(0xf8)](fs_1[_0x269a3b(0x154)][_0x269a3b(0x10f)](_0x25615e,_0x269a3b(0x11d)));if(typeof _0x48ba25!==_0x269a3b(0x183)||_0x48ba25===null)_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x10b),'message':'settings-tpl.json\x20根元素不是对象'});else{if(!_0x48ba25[_0x269a3b(0x124)]||typeof _0x48ba25['env']!=='object')_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x10b),'message':_0x269a3b(0x109)});else{const _0x4363ef=Object[_0x269a3b(0x147)](_0x48ba25[_0x269a3b(0x124)]);_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x172),'message':_0x269a3b(0x16c)+(_0x4363ef[_0x269a3b(0x101)](',\x20')||_0x269a3b(0x134))});}}}catch(_0x21d7e2){_0x2167eb[_0x269a3b(0x152)]({'level':'WARN','message':'settings-tpl.json\x20解析失败:\x20'+(_0x21d7e2 instanceof Error?_0x21d7e2['message']:_0x21d7e2)});}else _0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x10b),'message':_0x269a3b(0x116)+_0x25615e+_0x269a3b(0x171)});try{(0x0,child_process_1[_0x269a3b(0x187)])(_0x269a3b(0x150),{'stdio':_0x269a3b(0x16e)}),_0x2167eb['push']({'level':_0x269a3b(0x172),'message':_0x269a3b(0x17b)});}catch{_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x156),'message':_0x269a3b(0x178)});}try{const _0x3fc086=path_1[_0x269a3b(0x154)][_0x269a3b(0x101)](_0x4220bc,_0x269a3b(0x145));fs_1[_0x269a3b(0x154)][_0x269a3b(0x17f)](_0x3fc086,'ok',_0x269a3b(0x11d)),fs_1[_0x269a3b(0x154)]['unlinkSync'](_0x3fc086),_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x172),'message':_0x269a3b(0x122)+_0x4220bc});}catch(_0x3f8176){_0x2167eb['push']({'level':_0x269a3b(0x156),'message':_0x269a3b(0xfb)+_0x4220bc+_0x269a3b(0x10e)+(_0x3f8176 instanceof Error?_0x3f8176['message']:_0x3f8176)});}if(Array[_0x269a3b(0x15a)](_0x913cba[_0x269a3b(0xfe)]))for(const _0x4428d3 of _0x913cba[_0x269a3b(0xfe)]){const _0x15188c=_0x12e4a2[_0x269a3b(0x112)](_0x4428d3[_0x269a3b(0xfa)]);try{fs_1[_0x269a3b(0x154)][_0x269a3b(0x11e)](_0x15188c,{'recursive':!![]}),_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x172),'message':_0x269a3b(0x118)+(_0x4428d3[_0x269a3b(0x165)]||_0x4428d3[_0x269a3b(0xfa)])});}catch(_0x4ec318){_0x2167eb[_0x269a3b(0x152)]({'level':_0x269a3b(0x10b),'message':_0x269a3b(0x127)+_0x15188c+_0x269a3b(0x10e)+(_0x4ec318 instanceof Error?_0x4ec318[_0x269a3b(0x184)]:_0x4ec318)});}}console[_0x269a3b(0x131)]('\x0a['+(0x0,session_1[_0x269a3b(0x167)])()+_0x269a3b(0x157));const _0xd447c0=_0x2167eb[_0x269a3b(0x12a)](_0x284943=>_0x284943['level']===_0x269a3b(0x156));for(const _0x29f980 of _0x2167eb){const _0x538e55=_0x29f980['level']==='PASS'?'✓':_0x29f980['level']===_0x269a3b(0x156)?'✗':'⚠',_0x117b45=_0x29f980[_0x269a3b(0x160)]===_0x269a3b(0x172)?_0x29f980[_0x269a3b(0x184)]:_0x29f980[_0x269a3b(0x160)]===_0x269a3b(0x156)?'[FATAL]\x20'+_0x29f980['message']:_0x269a3b(0x16a)+_0x29f980[_0x269a3b(0x184)];console['log']('\x20\x20'+_0x538e55+'\x20'+_0x117b45);}const _0x111463=_0x2167eb[_0x269a3b(0x16d)](_0x3b7996=>_0x3b7996['level']==='PASS')[_0x269a3b(0x123)],_0x4c4333=_0x2167eb[_0x269a3b(0x16d)](_0x428648=>_0x428648[_0x269a3b(0x160)]===_0x269a3b(0x10b))[_0x269a3b(0x123)],_0x1dc98d=_0x2167eb[_0x269a3b(0x16d)](_0x1587cf=>_0x1587cf[_0x269a3b(0x160)]===_0x269a3b(0x156))[_0x269a3b(0x123)];console[_0x269a3b(0x131)]('['+(0x0,session_1['timestamp'])()+_0x269a3b(0x16f)+_0x111463+_0x269a3b(0xf9)+_0x4c4333+_0x269a3b(0x177)+_0x1dc98d+_0x269a3b(0x14e)),console[_0x269a3b(0x131)]('['+(0x0,session_1[_0x269a3b(0x167)])()+']\x20==============================\x0a'),_0xd447c0&&(console['error']('['+(0x0,session_1['timestamp'])()+_0x269a3b(0x108)),process[_0x269a3b(0x12b)](0x1));}