cc-ding 0.0.2 → 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,148 +1,138 @@
1
1
  # cc-ding
2
2
 
3
- 钉钉机器人对接本地 Claude Code 工具,支持群聊多轮对话、任务队列、定时任务等功能。
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
- ## 安装
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
25
  pnpm i cc-ding -g
9
26
  cc-ding --help
10
27
  ```
11
28
 
12
- ## 快速开始
13
-
14
29
  ### 1. 初始化配置
15
30
 
16
31
  ```bash
17
32
  cc-ding init -ci {clientId} -cs {clientSecret} -m {手机号}
18
33
  ```
19
34
 
20
- - `-ci, --clientId`: 钉钉应用的 ClientId
21
- - `-cs, --clientSecret`: 钉钉 Stream 连接密钥
22
- - `-m, --mobile`: 自己的手机号(自动加入白名单)
23
- - `-cn, --clientName`: 机器人名称(可选,默认 "cc助手")
35
+ | 参数 | 说明 |
36
+ |------|------|
37
+ | `-ci, --clientId` | 钉钉应用的 ClientId |
38
+ | `-cs, --clientSecret` | 钉钉 Stream 连接密钥 |
39
+ | `-m, --mobile` | 管理员手机号(自动加入白名单) |
40
+ | `-cn, --clientName` | 机器人名称(可选,默认 "cc助手") |
24
41
 
25
42
  ### 2. 编辑配置
26
43
 
27
- 配置文件位于 `~/.cc-ding/{clientId}/config.json`,需要添加 `conversations` 配置(群聊需配置 `dingToken`)。
44
+ 配置文件位于 `~/.cc-ding/{clientId}/config.json`,按 [配置文件示例](#配置文件示例) 补充 `conversations` 等字段。
28
45
 
29
- ### 3. 启动机器人
46
+ ### 3. 启动
30
47
 
31
48
  ```bash
32
49
  # 直接启动
33
50
  cc-ding run -ci {clientId}
34
51
 
35
- # 推荐:PM2 方式启动
52
+ # 推荐:PM2 守护进程方式
36
53
  pm2 start --name "cc-ding-{clientId}" npx -- -p cc-ding cc-ding run -ci {clientId}
37
54
  ```
38
55
 
39
- ## 数据存储路径
40
-
41
- | 数据类型 | 路径 |
42
- |---------|------|
43
- | 会话数据 | `~/.cc-ding/{clientId}/{MD5}/.sessions/{claudeSessionId}/session.{json\|log}` |
44
- | 任务数据 | `~/.cc-ding/{clientId}/{MD5}/.tasks/{时间戳}/task.{json\|log}` |
45
- | 定时任务 | `~/.cc-ding/{clientId}/cron.json` |
46
- | 图片缓存 | `~/.cc-ding/{clientId}/{MD5}/.images/` |
47
- | 手机号映射 | `~/.cc-ding/{clientId}/phone-map.json` |
48
-
49
- ## 功能特性
56
+ ## 使用指南
50
57
 
51
58
  ### 会话模式
52
59
 
53
- - **会话ID**: Claude 分配的 `claudeSessionId`
54
- - **结束会话**: `/end`
55
- - **新会话**: `/new [初始消息]` 强制结束当前会话并开启新会话
56
- - **恢复会话**: `/resume [会话ID]` 恢复指定历史会话,不指定则恢复最近一个
57
- - **会话持久化**: 活跃会话自动保存到 `active.json`,服务重启后自动恢复
58
- - **群内多用户**: 允许群内所有白名单用户参与对话
60
+ | 命令 | 说明 |
61
+ |------|------|
62
+ | `/help` | 查看所有可用命令 |
63
+ | `/log [行数]` | 查看最近会话日志 |
64
+ | `/new [初始消息]` | 开始新的对话 |
65
+ | `/resume [会话ID]` | 继续历史会话(不指定则恢复最近一个) |
66
+ | `/end` | 结束当前会话 |
67
+
68
+ - 会话自动持久化到 `active.json`,服务重启后自动恢复
69
+ - 群内所有白名单用户均可参与对话
59
70
 
60
71
  ### 任务模式
61
72
 
62
- - 使用 `/task <任务描述>` 提交任务到队列
63
- - 任务按队列顺序执行,完成后自动回复
64
- - 使用 `/task cancel` 取消任务
73
+ ```
74
+ /task <任务描述> # 提交任务到队列
75
+ /task cancel # 取消任务
76
+ ```
65
77
 
66
78
  ### 定时任务
67
79
 
68
- - `/cron <自然语言描述>` — Claude 自动分析并生成 cron 表达式
69
- - `/cron 0 9 * * * 任务描述` — 直接指定 cron 表达式
70
- - `/cron list` 查看定时任务列表
71
- - `/cron pause <id>` / `/cron resume <id>` — 暂停/恢复定时任务
72
- - `/cron delete <id>` 删除定时任务
80
+ ```
81
+ /cron <自然语言描述> # Claude 自动生成 cron 表达式
82
+ /cron 0 9 * * * <任务描述> # 直接指定 cron 表达式
83
+ /cron list # 查看列表
84
+ /cron pause <id> / resume <id> # 暂停 / 恢复
85
+ /cron delete <id> # 删除
86
+ ```
73
87
 
74
- ### 图片消息支持
88
+ ### 文件操作
75
89
 
76
- - 支持接收钉钉图片消息(`picture`)和富文本消息(`richText`,含内嵌图片)
77
- - 图片自动下载保存到会话目录下的 `.images/` 目录
78
- - `useLocalOcr`: 默认开启,使用本地 OCR 识别图片文字,同时传入原图路径供 Claude 自主查看
79
- - 配置方式:`conversations[].useLocalOcr = false` 可关闭 OCR(适用于支持图片识别的模型)
90
+ | 命令 | 说明 |
91
+ |------|------|
92
+ | `/pwd` | 显示工作目录绝对路径 |
93
+ | `/ls [目录] [层数]` | 查看目录结构 |
94
+ | `/mkdir <路径>` | 创建文件夹 |
95
+ | `/touch <路径>` | 创建空文件 |
96
+ | `/rm <路径>` | 删除文件或目录 |
80
97
 
81
- ### API Key 池化管理(可选)
98
+ ### 管理命令(仅 owner)
82
99
 
83
- 配置 `apiKeyCfg` 后启用:
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 <用户>]` | 管理群级白名单 |
84
109
 
85
- - **429 自动切换**: 自动切换到可用的 API Key
86
- - **Key 轮换**: 遇到 429 或连续 TPM 不稳定时自动换 Key
87
- - **跨天重置**: 每日 0 点自动重置 API Key 状态
110
+ ## 配置说明
88
111
 
89
- ### 白名单管理
112
+ ### 白名单
90
113
 
91
- - 全局白名单:`config.json` 中的 `whiteUserList`
92
- - 群级白名单:`conversations[].whiteUserList`(优先级高于全局)
114
+ - **全局白名单**:`config.json` 中的 `whiteUserList`
115
+ - **群级白名单**:`conversations[].whiteUserList`(优先级高于全局)
93
116
  - 支持手机号和 userId 两种格式,手机号自动解析为 userId
94
- - `/auth` 命令管理群级白名单(`/auth` 查看、`/auth add <手机号>`、`/auth del <手机号>`)
95
-
96
- ### 关联群功能
97
-
98
- - 通过 `linkConversationId` 实现多个群共享同一个 Claude 会话上下文
99
- - 关联群的消息会自动路由到同一个活跃会话
100
-
101
- ## 命令列表
102
117
 
103
- ### 💬 会话
118
+ ### API Key 池化
104
119
 
105
- | 命令 | 描述 |
106
- |------|------|
107
- | `/help` | 查看所有可用命令 |
108
- | `/log [行数]` | 查看最近会话日志 |
109
- | `/new [初始消息]` | 开始新的对话会话 |
110
- | `/resume [会话ID]` | 继续指定的历史会话 |
111
- | `/end` | 结束当前会话 |
120
+ 配置 `apiKeyCfg` 后启用:
112
121
 
113
- ### 📋 任务
122
+ - 429 错误自动切换到可用 Key
123
+ - 连续 TPM 不稳定时自动换 Key
124
+ - 每日 0 点自动重置 API Key 状态
114
125
 
115
- | 命令 | 描述 |
116
- |------|------|
117
- | `/task <描述>` | 提交任务到队列 |
118
- | `/cron <描述>` | 创建和管理定时任务 |
126
+ ### 图片消息
119
127
 
120
- ### 📂 文件
128
+ - 支持 `picture` 和 `richText`(含内嵌图片)消息类型
129
+ - 图片自动下载到 `.images/` 目录
130
+ - `useLocalOcr: true`(默认)使用本地 OCR 识别,同时传入原图路径供 Claude 自主查看
131
+ - 设置 `useLocalOcr: false` 关闭 OCR(适用于支持图片识别的模型)
121
132
 
122
- | 命令 | 描述 |
123
- |------|------|
124
- | `/pwd` | 显示当前工作目录的绝对路径 |
125
- | `/ls [目录] [层数]` | 查看工作目录结构 |
126
- | `/mkdir <路径>` | 创建文件夹 |
127
- | `/touch <路径>` | 创建空文件 |
128
- | `/rm <路径>` | 删除文件或目录 |
133
+ ### 关联群
129
134
 
130
- ### ⚙️ 系统
131
-
132
- | 命令 | 描述 |
133
- |------|------|
134
- | `/info [robot\|session\|task]` | 查看群配置、会话和任务信息 |
135
- | `/version` | 查看工具版本信息 |
136
-
137
- ### 🔧 管理(仅 owner)
138
-
139
- | 命令 | 描述 |
140
- |------|------|
141
- | `/open [shell]` | 在文件管理器或终端中打开工作目录 |
142
- | `/clean [all]` | 清除历史会话和缓存 |
143
- | `/reset-apikeycfg` | 重置 API Key 配置 |
144
- | `/reg` | 注册当前群到配置 |
145
- | `/auth [add\|del <用户>]` | 管理当前群白名单 |
135
+ 通过 `linkConversationId` 实现多个群共享同一个 Claude 会话上下文,消息自动路由到同一活跃会话。
146
136
 
147
137
  ## 配置文件示例
148
138
 
@@ -175,15 +165,31 @@ pm2 start --name "cc-ding-{clientId}" npx -- -p cc-ding cc-ding run -ci {clientI
175
165
  }
176
166
  ```
177
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
+
178
180
  ## 开发
179
181
 
180
182
  ```bash
181
183
  pnpm install
182
- pnpm run lint
183
- pnpm run test
184
- pnpm run build
184
+ pnpm run lint # 代码检查
185
+ pnpm run test # 运行测试
186
+ pnpm run build # 构建
185
187
  ```
186
188
 
187
189
  ## 系统要求
188
190
 
189
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_0x4cc741=a0_0x5569;(function(_0xc13db6,_0x5bd255){const _0x20599a=a0_0x5569,_0x473481=_0xc13db6();while(!![]){try{const _0x2e52bb=parseInt(_0x20599a(0x221))/0x1+-parseInt(_0x20599a(0x1dc))/0x2*(-parseInt(_0x20599a(0x1f8))/0x3)+parseInt(_0x20599a(0x1de))/0x4+parseInt(_0x20599a(0x1da))/0x5*(-parseInt(_0x20599a(0x1d8))/0x6)+parseInt(_0x20599a(0x1fb))/0x7*(parseInt(_0x20599a(0x1fc))/0x8)+parseInt(_0x20599a(0x211))/0x9+-parseInt(_0x20599a(0x200))/0xa*(parseInt(_0x20599a(0x1db))/0xb);if(_0x2e52bb===_0x5bd255)break;else _0x473481['push'](_0x473481['shift']());}catch(_0x2d38f0){_0x473481['push'](_0x473481['shift']());}}}(a0_0x4f0a,0x719a4));function a0_0x5569(_0x3594a3,_0x30436d){_0x3594a3=_0x3594a3-0x1d8;const _0x4f0af2=a0_0x4f0a();let _0x5569c7=_0x4f0af2[_0x3594a3];return _0x5569c7;}var __importDefault=this&&this[a0_0x4cc741(0x1f1)]||function(_0x4e7e90){const _0x3dae7f=a0_0x4cc741;return _0x4e7e90&&_0x4e7e90[_0x3dae7f(0x219)]?_0x4e7e90:{'default':_0x4e7e90};};Object[a0_0x4cc741(0x20a)](exports,a0_0x4cc741(0x219),{'value':!![]});function a0_0x4f0a(){const _0x560e0b=['1199ZiGbuO','1765166jtlvgn','../src/biz/doctor','1579836FkKmnv','doctor','Caught\x20exception:\x20','../src/common','如需重新初始化,\x20请先删除已有配置文件','配置文件已存在:\x20','version','printDoctorResults','\x20\x202.\x20启动机器人:\x20cc-ding\x20run\x20-ci','/config.json','run','after','clientId','../src/biz/cc-ding-cli','addHelpText','loadEnv','default','ensureClientDir','before','__importDefault','\x20\x20\x20\x20\x20pm2\x20start\x20--name\x20\x22cc-ding-','\x22\x20npx\x20--\x20-p\x20cc-ding\x20cc-ding\x20run\x20-ci\x20','split','action','mobile\x20(自己的手机号,\x20自动加入白名单)','\x0a💡\x20请升级\x20Node\x20版本后重新运行\x0a','3qzfqed','-ci,\x20--clientId\x20<value>','path','7VffFks','2529832bfDslf','mobile','\x0a\x20\x20\x20\x20cc-ding\x20for\x20connect\x20ClaudeCode\x20to\x20DingDingRobot\x0a\x20\x20','join','203470lWSKkC','acquirePidLock','初始化cc-ding配置文件,\x20生成最简config.json','requiredOption','slice','<兜底钉钉机器人Token-用于无dingToken群的消息接收>','-cs,\x20--clientSecret\x20<value>','runDoctor','option','setMaxListeners','defineProperty','Command','/.cc-ding/','command','argv','clientSecret\x20(钉钉Stream连接密钥)','projUtil','5281938XuZDpx','exit','检查指定client的配置文件schema合法性和有效性','existsSync','\x20\x201.\x20编辑\x20config.json\x20添加\x20conversations\x20配置(群聊需配置dingToken)','description','\x20\x203.\x20推荐PM2启动:','clientName\x20(机器人名称,\x20可选)','__esModule','initClientDir','getHomeDir','../src/biz/lock','log','.cc-ding','配置文件已生成:','\x20\x20要求:Node\x20>=\x2024','547634WaDmpC','135444WzVmZx','-cn,\x20--clientName\x20<value>','10oMpRYM'];a0_0x4f0a=function(){return _0x560e0b;};return a0_0x4f0a();}const common_1=require(a0_0x4cc741(0x1e1)),commander_1=require('commander'),session_1=require('../src/biz/session'),path_1=__importDefault(require(a0_0x4cc741(0x1fa))),cc_ding_cli_1=require(a0_0x4cc741(0x1eb)),lock_1=require(a0_0x4cc741(0x21c)),doctor_1=require(a0_0x4cc741(0x1dd)),fs_1=__importDefault(require('fs'));(0x0,common_1[a0_0x4cc741(0x1ed)])(),process['removeAllListeners']('warning'),process[a0_0x4cc741(0x209)](0x0),process['on']('uncaughtException',function(_0x51abac){const _0x1eece2=a0_0x4cc741;console[_0x1eece2(0x21d)](_0x1eece2(0x1e0)+_0x51abac),process['exit'](0x1);});const program=new commander_1[(a0_0x4cc741(0x20b))]();program[a0_0x4cc741(0x1ec)](a0_0x4cc741(0x1f0),a0_0x4cc741(0x1fe))[a0_0x4cc741(0x1ec)](a0_0x4cc741(0x1e9),'\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')[a0_0x4cc741(0x1e4)]((0x0,common_1[a0_0x4cc741(0x210)])()['getPkgVersion']()),program['command']('init')[a0_0x4cc741(0x216)](a0_0x4cc741(0x202))[a0_0x4cc741(0x203)](a0_0x4cc741(0x1f9),'clientId')['requiredOption'](a0_0x4cc741(0x206),a0_0x4cc741(0x20f))[a0_0x4cc741(0x203)]('-m,\x20--mobile\x20<value>',a0_0x4cc741(0x1f6))[a0_0x4cc741(0x208)](a0_0x4cc741(0x1d9),a0_0x4cc741(0x218))[a0_0x4cc741(0x1f5)](async _0x1ca0e6=>{const _0x38923d=a0_0x4cc741,_0x2d6fd6=process[_0x38923d(0x1e4)][_0x38923d(0x204)](0x1),_0x3871e0=parseInt(_0x2d6fd6[_0x38923d(0x1f4)]('.')[0x0],0xa);_0x3871e0<0x18&&(console['log']('\x0a❌\x20Node\x20版本过低,无法执行\x20init\x20命令'),console['log']('\x20\x20当前版本:'+_0x2d6fd6),console[_0x38923d(0x21d)](_0x38923d(0x220)),console[_0x38923d(0x21d)](_0x38923d(0x1f7)),process[_0x38923d(0x212)](0x1));const _0x3e81d1=(0x0,session_1[_0x38923d(0x21b)])()+_0x38923d(0x20c)+_0x1ca0e6[_0x38923d(0x1ea)],_0x56ab74=_0x3e81d1+_0x38923d(0x1e7);fs_1['default'][_0x38923d(0x214)](_0x56ab74)&&(console[_0x38923d(0x21d)](_0x38923d(0x1e3)+_0x56ab74),console[_0x38923d(0x21d)](_0x38923d(0x1e2)),process[_0x38923d(0x212)](0x1));const _0x5542ab={'clientName':_0x1ca0e6['clientName']||'cc助手','owner':_0x1ca0e6['mobile'],'whiteUserList':[_0x1ca0e6[_0x38923d(0x1fd)]],'clientSecret':_0x1ca0e6['clientSecret'],'defaultDingToken':_0x38923d(0x205),'conversations':[],'includeThinking':![],'resultOnly':!![],'debug':![],'taskQueueSize':0xa,'taskHandlerCount':0x1,'sessionMaxConcurrency':0x14};(0x0,session_1[_0x38923d(0x21a)])(_0x1ca0e6['clientId'],_0x5542ab),console[_0x38923d(0x21d)](_0x38923d(0x21f),_0x56ab74),console[_0x38923d(0x21d)](''),console[_0x38923d(0x21d)]('后续步骤:'),console[_0x38923d(0x21d)](_0x38923d(0x215)),console['log'](_0x38923d(0x1e6),_0x1ca0e6[_0x38923d(0x1ea)]),console['log'](_0x38923d(0x217)),console[_0x38923d(0x21d)](_0x38923d(0x1f2)+_0x1ca0e6['clientId']+_0x38923d(0x1f3)+_0x1ca0e6['clientId']);}),program[a0_0x4cc741(0x20d)](a0_0x4cc741(0x1e8))['description']('\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_0x4cc741(0x203)](a0_0x4cc741(0x1f9),a0_0x4cc741(0x1ea))[a0_0x4cc741(0x1f5)](async _0x5ce423=>{const _0x6fab84=a0_0x4cc741;(0x0,session_1[_0x6fab84(0x1ef)])(_0x5ce423['clientId']);const _0x405f2e=path_1['default'][_0x6fab84(0x1ff)]((0x0,session_1[_0x6fab84(0x21b)])(),'.cc-ding',_0x5ce423[_0x6fab84(0x1ea)]);(0x0,lock_1[_0x6fab84(0x201)])(_0x405f2e,_0x5ce423[_0x6fab84(0x1ea)]),await new cc_ding_cli_1['DingClaude'](_0x5ce423[_0x6fab84(0x1ea)])['run']();}),program['command'](a0_0x4cc741(0x1df))[a0_0x4cc741(0x216)](a0_0x4cc741(0x213))['requiredOption']('-ci,\x20--clientId\x20<value>',a0_0x4cc741(0x1ea))['action'](async _0x391673=>{const _0x50d982=a0_0x4cc741,_0x3ee462=path_1[_0x50d982(0x1ee)][_0x50d982(0x1ff)]((0x0,session_1['getHomeDir'])(),_0x50d982(0x21e),_0x391673['clientId']),_0x204b37=(0x0,doctor_1[_0x50d982(0x207)])(_0x3ee462);(0x0,doctor_1[_0x50d982(0x1e5)])(_0x204b37);}),program['parse'](process[a0_0x4cc741(0x20e)]);
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_0x48dc7e=a1_0x101a;(function(_0xac9a72,_0xe16059){const _0x293af1=a1_0x101a,_0x4d4f0a=_0xac9a72();while(!![]){try{const _0x5e8833=-parseInt(_0x293af1(0x17e))/0x1*(-parseInt(_0x293af1(0x153))/0x2)+-parseInt(_0x293af1(0x10b))/0x3*(parseInt(_0x293af1(0x111))/0x4)+-parseInt(_0x293af1(0x16c))/0x5+-parseInt(_0x293af1(0x11f))/0x6+-parseInt(_0x293af1(0x145))/0x7*(-parseInt(_0x293af1(0x166))/0x8)+-parseInt(_0x293af1(0x11d))/0x9*(-parseInt(_0x293af1(0x137))/0xa)+parseInt(_0x293af1(0x132))/0xb*(parseInt(_0x293af1(0x17c))/0xc);if(_0x5e8833===_0xe16059)break;else _0x4d4f0a['push'](_0x4d4f0a['shift']());}catch(_0x265299){_0x4d4f0a['push'](_0x4d4f0a['shift']());}}}(a1_0x61fd,0x7a5fa));var __importDefault=this&&this[a1_0x48dc7e(0x172)]||function(_0x282587){const _0x5adcde=a1_0x48dc7e;return _0x282587&&_0x282587[_0x5adcde(0x12c)]?_0x282587:{'default':_0x282587};};Object[a1_0x48dc7e(0x162)](exports,a1_0x48dc7e(0x12c),{'value':!![]}),exports[a1_0x48dc7e(0x142)]=saveClientConfig,exports[a1_0x48dc7e(0x18e)]=resetApiKeyCfg,exports[a1_0x48dc7e(0x118)]=scheduleApiKeyCfgDailyReset,exports[a1_0x48dc7e(0x175)]=settingLabel,exports[a1_0x48dc7e(0x184)]=rotateApiKey,exports['pickValidApiKey']=pickValidApiKey,exports[a1_0x48dc7e(0x18f)]=ensureSettingsWithApiKey,exports[a1_0x48dc7e(0x160)]=isQuotaExhaustedError,exports['isAuthenticationError']=isAuthenticationError,exports[a1_0x48dc7e(0x152)]=readApiKeyFromSettings,exports['getForceEnabledSettingsPath']=getForceEnabledSettingsPath,exports[a1_0x48dc7e(0x169)]=startupCheck;const fs_1=__importDefault(require('fs')),path_1=__importDefault(require('path')),child_process_1=require(a1_0x48dc7e(0x119)),session_1=require(a1_0x48dc7e(0x13b)),utils_ok_1=require(a1_0x48dc7e(0x146));function a1_0x101a(_0x599749,_0x26671e){_0x599749=_0x599749-0x106;const _0x61fdc2=a1_0x61fd();let _0x101a41=_0x61fdc2[_0x599749];return _0x101a41;}function a1_0x61fd(){const _0x15a6e4=['工作目录不可写:\x20','existsSync','...','\x20conversationId\x20重复:\x20','writeFileSync','__esModule','getTime','push','getFullYear','boolean','(空)','2440922JfiFmw','which\x20claude','apiKeyCfg.claudeSettings\x20共\x20','apiKeyCfg','length','10LINWIP','ANTHROPIC_AUTH_TOKEN','some','\x20个已失效\x20Claude\x20Setting\x20重新标记为有效','./session','clientSecret\x20(钉钉\x20Stream\x20Client\x20密钥)','.claude','apiKeyCfg.claudeSettings\x20不是数组,API\x20Key\x20轮换功能不可用',']\x20apiKeyCfg\x20已重置\x20(所有\x20Claude\x20Setting\x20isValid=true)','settings-tpl.json\x20缺少\x20env\x20字段,创建\x20settings-ding.json\x20时将不包含预配置环境变量','conversations','saveClientConfig','settings-ding.json','toISOString','1799USgowN','utils-ok','level','env','join','\x20linkConversationId\x20\x22','owner\x20(机器人\x20owner)','getClientDir',',\x20剩余有效:\x20','claudeSettings','\x20警告,\x20','群工作目录创建失败:\x20','keys','readApiKeyFromSettings','8mYCwUw',']\x20==========\x20启动自检\x20==========','ANTHROPIC_MODEL','message','object','mkdirSync','conversations\x20共\x20','whiteUserList\x20(白名单用户)','getDate','add','.cc-ding','\x20个群配置','\x20缺少\x20conversationId','isQuotaExhaustedError','owner','defineProperty',',\x20model:\x20','find',']\x20保存\x20config.json\x20失败:','26608VYslbj','\x20缺少\x20model','isArray','startupCheck','stringify','filter','4234615gkYadE',']\x20定时重置\x20apiKeyCfg\x20(每天0点)','settings-tpl.json\x20有效,env\x20包含:\x20','\x20apiKey\x20重复:\x20','\x20通过,\x20','execSync','__importDefault','resetTime','default','settingLabel','PASS','apiKeyCfg.claudeSettings\x20为空,无可用\x20Key','unlinkSync','apiKey','\x20缺少\x20baseUrl','conversationTitle','12LHlTuS','whiteUserList','204924CNgsOJ',']\x20已写入\x20Claude\x20配置到\x20','linkConversationId','test','getHomeDir','isValid','rotateApiKey','conversations[','config','settings-tpl.json\x20根元素不是对象','[FATAL]\x20','工作目录可写:\x20','conversations\x20应为数组或已配置',']\x20启动自检发现致命错误,进程退出','error','getConversationDir','resetApiKeyCfg','ensureSettingsWithApiKey','FATAL','claude\x20命令可用','readFileSync',']\x20检测到\x20settings-ding.json\x20FORCE_ENABLE=','\x20项,有效\x20','config.json\x20缺少必填字段:\x20','settings-tpl.json\x20解析失败:\x20','settings-tpl.json\x20不存在:\x20',']\x20apiKeyCfg\x20每日重置已调度,下次重置:\x20','21399dSBUIq','log','baseUrl','[WARN]\x20','getMonth','model','108Dnecak','parse',']\x20自检完成:\x20',']\x20Claude\x20Setting\x20已失效:\x20','conversationId','utf-8','\x20—\x20','scheduleApiKeyCfgDailyReset','child_process','apiKeyCfg\x20上次重置时间:\x20','has','\x20缺少\x20apiKey','2231622RabJHJ','claude\x20命令不可用,请确认\x20Claude\x20Code\x20CLI\x20已安装','3621492UDZSeb','ANTHROPIC_BASE_URL','memo','WARN','timestamp','settings-tpl.json','format','CLAUDE_SMALL_FAST_MODEL'];a1_0x61fd=function(){return _0x15a6e4;};return a1_0x61fd();}function saveClientConfig(_0x4c555d){const _0x21c293=a1_0x48dc7e,_0x10d71a=_0x4c555d[_0x21c293(0x14c)]()+'/config.json';try{fs_1[_0x21c293(0x174)][_0x21c293(0x12b)](_0x10d71a,JSON[_0x21c293(0x16a)](_0x4c555d['config'],null,0x2),_0x21c293(0x116));}catch(_0x46422c){console[_0x21c293(0x18c)]('['+(0x0,session_1[_0x21c293(0x123)])()+_0x21c293(0x165),_0x46422c);}}function resetApiKeyCfg(_0x199ba4){const _0x3051ed=a1_0x48dc7e,_0x1c07ef=_0x199ba4[_0x3051ed(0x186)][_0x3051ed(0x135)];if(!_0x1c07ef)return;const _0x26a1bd=new Date();_0x1c07ef[_0x3051ed(0x173)]=utils_ok_1['dateUtil']['mm'](_0x26a1bd[_0x3051ed(0x12d)]())[_0x3051ed(0x125)]('YYYY-MM-DD\x20HH:mm:ss');let _0x48e1aa=0x0;for(const _0x32dc2b of _0x1c07ef[_0x3051ed(0x14e)]){!_0x32dc2b['isValid']&&(_0x32dc2b[_0x3051ed(0x183)]=!![],_0x48e1aa++);}_0x48e1aa>0x0&&console['log']('['+(0x0,session_1[_0x3051ed(0x123)])()+']\x20'+_0x48e1aa+_0x3051ed(0x13a)),saveClientConfig(_0x199ba4),console[_0x3051ed(0x10c)]('['+(0x0,session_1[_0x3051ed(0x123)])()+_0x3051ed(0x13f));}function scheduleApiKeyCfgDailyReset(_0x59ad01){const _0x4a36f2=()=>{const _0xf1ac5b=a1_0x101a,_0x250cd9=new Date(),_0x5d995c=new Date(_0x250cd9[_0xf1ac5b(0x12f)](),_0x250cd9[_0xf1ac5b(0x10f)](),_0x250cd9[_0xf1ac5b(0x15b)]()+0x1,0x0,0x0,0x0,0x0),_0x2d60bc=_0x5d995c['getTime']()-_0x250cd9['getTime']();setTimeout(()=>{const _0x492302=_0xf1ac5b;console[_0x492302(0x10c)]('['+(0x0,session_1[_0x492302(0x123)])()+_0x492302(0x16d)),resetApiKeyCfg(_0x59ad01),_0x4a36f2();},_0x2d60bc),console['log']('['+(0x0,session_1[_0xf1ac5b(0x123)])()+_0xf1ac5b(0x10a)+_0x5d995c[_0xf1ac5b(0x144)]());};_0x4a36f2();}function settingLabel(_0x1b33ec){const _0x39013a=a1_0x48dc7e;return _0x1b33ec['memo']?_0x1b33ec[_0x39013a(0x121)]:_0x39013a(0x129)+_0x1b33ec['apiKey']['slice'](-0x6);}function findSettingLabel(_0x1eeaa3,_0x39fd76){const _0x305e34=a1_0x48dc7e,_0x128050=_0x1eeaa3[_0x305e34(0x164)](_0xb94dfb=>_0xb94dfb['apiKey']===_0x39fd76);return _0x128050?settingLabel(_0x128050):_0x305e34(0x129)+_0x39fd76['slice'](-0x6);}function rotateApiKey(_0x117590,_0x3a7335){const _0x451276=a1_0x48dc7e,_0x25224c=_0x117590[_0x451276(0x186)][_0x451276(0x135)];if(!_0x25224c)return null;for(const _0x335119 of _0x25224c[_0x451276(0x14e)]){if(_0x335119[_0x451276(0x179)]===_0x3a7335&&_0x335119[_0x451276(0x183)]){_0x335119[_0x451276(0x183)]=![];break;}}const _0x1ed5ed=_0x25224c[_0x451276(0x14e)][_0x451276(0x16b)](_0x14545f=>_0x14545f[_0x451276(0x183)])[_0x451276(0x136)],_0x1af8ab=findSettingLabel(_0x25224c[_0x451276(0x14e)],_0x3a7335);return console['log']('['+(0x0,session_1['timestamp'])()+_0x451276(0x114)+_0x1af8ab+_0x451276(0x14d)+_0x1ed5ed),saveClientConfig(_0x117590),pickValidApiKey(_0x117590);}function pickValidApiKey(_0x50e906){const _0x2a8d4d=a1_0x48dc7e,_0x2b69f6=_0x50e906[_0x2a8d4d(0x186)][_0x2a8d4d(0x135)];if(!_0x2b69f6)return null;const _0x488fa7=_0x2b69f6['claudeSettings']['filter'](_0x37dc8f=>_0x37dc8f['isValid']);if(_0x488fa7['length']===0x0)return null;return _0x488fa7[Math['floor'](Math['random']()*_0x488fa7[_0x2a8d4d(0x136)])];}function ensureSettingsWithApiKey(_0x2a6169,_0x18f44e){const _0x4b74cf=a1_0x48dc7e,_0x51253b=path_1[_0x4b74cf(0x174)][_0x4b74cf(0x149)](_0x2a6169,_0x4b74cf(0x13d)),_0x3ca777=path_1[_0x4b74cf(0x174)][_0x4b74cf(0x149)](_0x51253b,_0x4b74cf(0x143));let _0x25891f={};if(fs_1['default'][_0x4b74cf(0x128)](_0x3ca777))try{_0x25891f=JSON[_0x4b74cf(0x112)](fs_1[_0x4b74cf(0x174)][_0x4b74cf(0x192)](_0x3ca777,'utf-8'));}catch{_0x25891f={};}else{const _0xf0e1e0=path_1[_0x4b74cf(0x174)]['join']((0x0,session_1[_0x4b74cf(0x182)])(),_0x4b74cf(0x15d),'settings-tpl.json');if(fs_1[_0x4b74cf(0x174)][_0x4b74cf(0x128)](_0xf0e1e0))try{_0x25891f=JSON[_0x4b74cf(0x112)](fs_1[_0x4b74cf(0x174)][_0x4b74cf(0x192)](_0xf0e1e0,_0x4b74cf(0x116))),console[_0x4b74cf(0x10c)]('['+(0x0,session_1[_0x4b74cf(0x123)])()+']\x20从模板创建\x20settings-ding.json:\x20'+_0xf0e1e0);}catch{_0x25891f={};}}!_0x25891f[_0x4b74cf(0x148)]&&(_0x25891f['env']={});let _0x27ab7a=![];_0x25891f['env']['ANTHROPIC_AUTH_TOKEN']!==_0x18f44e['apiKey']&&(_0x25891f['env'][_0x4b74cf(0x138)]=_0x18f44e[_0x4b74cf(0x179)],_0x27ab7a=!![]);_0x18f44e[_0x4b74cf(0x10d)]&&_0x25891f[_0x4b74cf(0x148)][_0x4b74cf(0x120)]!==_0x18f44e['baseUrl']&&(_0x25891f[_0x4b74cf(0x148)][_0x4b74cf(0x120)]=_0x18f44e[_0x4b74cf(0x10d)],_0x27ab7a=!![]);_0x18f44e[_0x4b74cf(0x110)]&&_0x25891f[_0x4b74cf(0x148)][_0x4b74cf(0x155)]!==_0x18f44e[_0x4b74cf(0x110)]&&(_0x25891f[_0x4b74cf(0x148)]['ANTHROPIC_MODEL']=_0x18f44e[_0x4b74cf(0x110)],_0x27ab7a=!![]);const _0x1784f7=_0x18f44e['smallModel']||_0x18f44e[_0x4b74cf(0x110)];return _0x1784f7&&_0x25891f[_0x4b74cf(0x148)][_0x4b74cf(0x126)]!==_0x1784f7&&(_0x25891f[_0x4b74cf(0x148)]['CLAUDE_SMALL_FAST_MODEL']=_0x1784f7,_0x27ab7a=!![]),_0x27ab7a&&(fs_1[_0x4b74cf(0x174)][_0x4b74cf(0x158)](_0x51253b,{'recursive':!![]}),fs_1[_0x4b74cf(0x174)][_0x4b74cf(0x12b)](_0x3ca777,JSON['stringify'](_0x25891f,null,0x2),'utf-8'),console[_0x4b74cf(0x10c)]('['+(0x0,session_1[_0x4b74cf(0x123)])()+_0x4b74cf(0x17f)+_0x3ca777+'\x20('+settingLabel(_0x18f44e)+_0x4b74cf(0x163)+_0x18f44e[_0x4b74cf(0x110)]+',\x20smallModel:\x20'+_0x1784f7+')')),_0x3ca777;}function isQuotaExhaustedError(_0x55218c){const _0x1dc1d1=a1_0x48dc7e;if(/Request\s+rejected.*429/i['test'](_0x55218c))return!![];if(/429.*Request\s+rejected/i[_0x1dc1d1(0x181)](_0x55218c))return!![];if(/429.*(?:超过.*上限|使用上限|配额|quota|capacity)/i[_0x1dc1d1(0x181)](_0x55218c))return!![];if(/(?:超过.*上限|使用上限|配额|quota|capacity).*429/i['test'](_0x55218c))return!![];return![];}function isAuthenticationError(_0x176a6b){const _0x2525e9=a1_0x48dc7e;if(/authentication_error/i[_0x2525e9(0x181)](_0x176a6b))return!![];if(/401.*(?:未授权|unauthorized|invalid\s*(?:key|token|api)|auth)/i[_0x2525e9(0x181)](_0x176a6b))return!![];if(/(?:未授权|unauthorized|invalid\s*(?:key|token|api)|auth).*401/i[_0x2525e9(0x181)](_0x176a6b))return!![];return![];}function readApiKeyFromSettings(_0x10d801){const _0x96f79e=a1_0x48dc7e,_0x86c03=path_1[_0x96f79e(0x174)]['join'](_0x10d801,_0x96f79e(0x13d),_0x96f79e(0x143));if(!fs_1[_0x96f79e(0x174)][_0x96f79e(0x128)](_0x86c03))return null;try{const _0x3ecb45=JSON[_0x96f79e(0x112)](fs_1[_0x96f79e(0x174)][_0x96f79e(0x192)](_0x86c03,'utf-8'));return _0x3ecb45[_0x96f79e(0x148)]?.[_0x96f79e(0x138)]||null;}catch{return null;}}function getForceEnabledSettingsPath(_0x4dc818){const _0x19365=a1_0x48dc7e,_0x18462f=path_1[_0x19365(0x174)]['join'](_0x4dc818,_0x19365(0x13d),'settings-ding.json');if(!fs_1[_0x19365(0x174)][_0x19365(0x128)](_0x18462f))return null;try{const _0x469525=JSON['parse'](fs_1[_0x19365(0x174)][_0x19365(0x192)](_0x18462f,_0x19365(0x116))),_0x3c793c=_0x469525[_0x19365(0x148)]?.['FORCE_ENABLE'];if(_0x3c793c!==undefined&&_0x3c793c!==![]&&_0x3c793c!=='')return console[_0x19365(0x10c)]('['+(0x0,session_1[_0x19365(0x123)])()+_0x19365(0x193)+_0x3c793c+',强制使用该配置'),_0x18462f;return null;}catch{return null;}}function startupCheck(_0x512d5c){const _0x2f334f=a1_0x48dc7e,_0x2d46d8=[],_0x671bc0=_0x512d5c['config'],_0x27c17b=_0x512d5c['getClientDir'](),_0x554038=[{'key':'clientSecret','label':_0x2f334f(0x13c)},{'key':_0x2f334f(0x17d),'label':_0x2f334f(0x15a)},{'key':_0x2f334f(0x161),'label':_0x2f334f(0x14b)}];for(const {key:_0x136085,label:_0x120451}of _0x554038){const _0xf08fdb=_0x671bc0[_0x136085];_0xf08fdb===undefined||_0xf08fdb===null||_0xf08fdb===''||Array[_0x2f334f(0x168)](_0xf08fdb)&&_0xf08fdb[_0x2f334f(0x136)]===0x0?_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x190),'message':_0x2f334f(0x107)+_0x120451}):_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x176),'message':'config.json\x20'+_0x120451+'\x20✓'});}if(!Array['isArray'](_0x671bc0['conversations']))_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x190),'message':_0x2f334f(0x18a)});else{if(_0x671bc0[_0x2f334f(0x141)][_0x2f334f(0x136)]===0x0)_0x2d46d8[_0x2f334f(0x12e)]({'level':'PASS','message':'conversations\x20为空数组,可通过\x20/reg\x20命令动态注册'});else{const _0x71ff7=new Set();for(let _0x2a47f4=0x0;_0x2a47f4<_0x671bc0[_0x2f334f(0x141)][_0x2f334f(0x136)];_0x2a47f4++){const _0x1832ca=_0x671bc0[_0x2f334f(0x141)][_0x2a47f4],_0x4241a1=_0x2f334f(0x185)+_0x2a47f4+']';if(!_0x1832ca[_0x2f334f(0x115)])_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x190),'message':_0x4241a1+_0x2f334f(0x15f)});else _0x71ff7[_0x2f334f(0x11b)](_0x1832ca[_0x2f334f(0x115)])?_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x122),'message':_0x4241a1+_0x2f334f(0x12a)+_0x1832ca[_0x2f334f(0x115)]}):_0x71ff7[_0x2f334f(0x15c)](_0x1832ca[_0x2f334f(0x115)]);_0x1832ca[_0x2f334f(0x180)]&&!_0x671bc0[_0x2f334f(0x141)][_0x2f334f(0x139)](_0xaf9ebd=>_0xaf9ebd[_0x2f334f(0x115)]===_0x1832ca[_0x2f334f(0x180)])&&_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x122),'message':_0x4241a1+_0x2f334f(0x14a)+_0x1832ca[_0x2f334f(0x180)]+'\x22\x20未在\x20conversations\x20中找到'});}_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x176),'message':_0x2f334f(0x159)+_0x671bc0['conversations'][_0x2f334f(0x136)]+_0x2f334f(0x15e)});}}if(_0x671bc0[_0x2f334f(0x135)]){const _0x531ca9=_0x671bc0[_0x2f334f(0x135)];_0x531ca9[_0x2f334f(0x173)]&&_0x2d46d8[_0x2f334f(0x12e)]({'level':'PASS','message':_0x2f334f(0x11a)+_0x531ca9[_0x2f334f(0x173)]});if(!Array[_0x2f334f(0x168)](_0x531ca9[_0x2f334f(0x14e)]))_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x122),'message':_0x2f334f(0x13e)});else{if(_0x531ca9['claudeSettings'][_0x2f334f(0x136)]===0x0)_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x122),'message':_0x2f334f(0x177)});else{const _0x6a3082=new Set();for(let _0x253815=0x0;_0x253815<_0x531ca9['claudeSettings'][_0x2f334f(0x136)];_0x253815++){const _0x5d9003=_0x531ca9[_0x2f334f(0x14e)][_0x253815],_0x3e45df='apiKeyCfg.claudeSettings['+_0x253815+']';if(!_0x5d9003[_0x2f334f(0x179)])_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x190),'message':_0x3e45df+_0x2f334f(0x11c)});else _0x6a3082[_0x2f334f(0x11b)](_0x5d9003[_0x2f334f(0x179)])?_0x2d46d8[_0x2f334f(0x12e)]({'level':'WARN','message':_0x3e45df+_0x2f334f(0x16f)+settingLabel(_0x5d9003)}):_0x6a3082[_0x2f334f(0x15c)](_0x5d9003[_0x2f334f(0x179)]);!_0x5d9003[_0x2f334f(0x10d)]&&_0x2d46d8['push']({'level':_0x2f334f(0x122),'message':_0x3e45df+_0x2f334f(0x17a)}),!_0x5d9003[_0x2f334f(0x110)]&&_0x2d46d8['push']({'level':_0x2f334f(0x122),'message':_0x3e45df+_0x2f334f(0x167)}),typeof _0x5d9003[_0x2f334f(0x183)]!==_0x2f334f(0x130)&&_0x2d46d8['push']({'level':_0x2f334f(0x122),'message':_0x3e45df+'\x20isValid\x20类型异常:\x20'+typeof _0x5d9003[_0x2f334f(0x183)]});}const _0x1b6c51=_0x531ca9[_0x2f334f(0x14e)][_0x2f334f(0x16b)](_0x29c2b5=>_0x29c2b5[_0x2f334f(0x183)])['length'];_0x2d46d8['push']({'level':'PASS','message':_0x2f334f(0x134)+_0x531ca9[_0x2f334f(0x14e)][_0x2f334f(0x136)]+_0x2f334f(0x106)+_0x1b6c51});}}}const _0x5eaec3=path_1[_0x2f334f(0x174)]['join']((0x0,session_1[_0x2f334f(0x182)])(),_0x2f334f(0x15d),_0x2f334f(0x124));if(fs_1['default']['existsSync'](_0x5eaec3))try{const _0x4f2216=JSON['parse'](fs_1[_0x2f334f(0x174)]['readFileSync'](_0x5eaec3,'utf-8'));if(typeof _0x4f2216!==_0x2f334f(0x157)||_0x4f2216===null)_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x122),'message':_0x2f334f(0x187)});else{if(!_0x4f2216[_0x2f334f(0x148)]||typeof _0x4f2216[_0x2f334f(0x148)]!==_0x2f334f(0x157))_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x122),'message':_0x2f334f(0x140)});else{const _0x166ff9=Object[_0x2f334f(0x151)](_0x4f2216[_0x2f334f(0x148)]);_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x176),'message':_0x2f334f(0x16e)+(_0x166ff9['join'](',\x20')||_0x2f334f(0x131))});}}}catch(_0x488e71){_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x122),'message':_0x2f334f(0x108)+(_0x488e71 instanceof Error?_0x488e71[_0x2f334f(0x156)]:_0x488e71)});}else _0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x122),'message':_0x2f334f(0x109)+_0x5eaec3+',创建\x20settings-ding.json\x20时将使用空模板'});try{(0x0,child_process_1[_0x2f334f(0x171)])(_0x2f334f(0x133),{'stdio':'pipe'}),_0x2d46d8['push']({'level':_0x2f334f(0x176),'message':_0x2f334f(0x191)});}catch{_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x190),'message':_0x2f334f(0x11e)});}try{const _0x4730e3=path_1[_0x2f334f(0x174)][_0x2f334f(0x149)](_0x27c17b,'.healthcheck');fs_1['default'][_0x2f334f(0x12b)](_0x4730e3,'ok',_0x2f334f(0x116)),fs_1[_0x2f334f(0x174)][_0x2f334f(0x178)](_0x4730e3),_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x176),'message':_0x2f334f(0x189)+_0x27c17b});}catch(_0x286b9c){_0x2d46d8['push']({'level':_0x2f334f(0x190),'message':_0x2f334f(0x127)+_0x27c17b+'\x20—\x20'+(_0x286b9c instanceof Error?_0x286b9c['message']:_0x286b9c)});}if(Array[_0x2f334f(0x168)](_0x671bc0['conversations']))for(const _0x23e77b of _0x671bc0[_0x2f334f(0x141)]){const _0x581a76=_0x512d5c[_0x2f334f(0x18d)](_0x23e77b[_0x2f334f(0x115)]);try{fs_1[_0x2f334f(0x174)]['mkdirSync'](_0x581a76,{'recursive':!![]}),_0x2d46d8[_0x2f334f(0x12e)]({'level':_0x2f334f(0x176),'message':'群工作目录已就绪:\x20'+(_0x23e77b[_0x2f334f(0x17b)]||_0x23e77b[_0x2f334f(0x115)])});}catch(_0x4f64ab){_0x2d46d8[_0x2f334f(0x12e)]({'level':'WARN','message':_0x2f334f(0x150)+_0x581a76+_0x2f334f(0x117)+(_0x4f64ab instanceof Error?_0x4f64ab['message']:_0x4f64ab)});}}console[_0x2f334f(0x10c)]('\x0a['+(0x0,session_1[_0x2f334f(0x123)])()+_0x2f334f(0x154));const _0x1ad3b9=_0x2d46d8[_0x2f334f(0x139)](_0x1057de=>_0x1057de[_0x2f334f(0x147)]===_0x2f334f(0x190));for(const _0x58487f of _0x2d46d8){const _0x14c330=_0x58487f[_0x2f334f(0x147)]===_0x2f334f(0x176)?'✓':_0x58487f[_0x2f334f(0x147)]===_0x2f334f(0x190)?'✗':'⚠',_0x332944=_0x58487f[_0x2f334f(0x147)]===_0x2f334f(0x176)?_0x58487f['message']:_0x58487f[_0x2f334f(0x147)]===_0x2f334f(0x190)?_0x2f334f(0x188)+_0x58487f['message']:_0x2f334f(0x10e)+_0x58487f[_0x2f334f(0x156)];console['log']('\x20\x20'+_0x14c330+'\x20'+_0x332944);}const _0x2d4c5b=_0x2d46d8[_0x2f334f(0x16b)](_0x2049c6=>_0x2049c6[_0x2f334f(0x147)]===_0x2f334f(0x176))[_0x2f334f(0x136)],_0x24f0dc=_0x2d46d8[_0x2f334f(0x16b)](_0x20afd1=>_0x20afd1[_0x2f334f(0x147)]===_0x2f334f(0x122))[_0x2f334f(0x136)],_0x363c26=_0x2d46d8['filter'](_0x195620=>_0x195620['level']===_0x2f334f(0x190))[_0x2f334f(0x136)];console[_0x2f334f(0x10c)]('['+(0x0,session_1[_0x2f334f(0x123)])()+_0x2f334f(0x113)+_0x2d4c5b+_0x2f334f(0x170)+_0x24f0dc+_0x2f334f(0x14f)+_0x363c26+'\x20致命'),console[_0x2f334f(0x10c)]('['+(0x0,session_1['timestamp'])()+']\x20==============================\x0a'),_0x1ad3b9&&(console[_0x2f334f(0x18c)]('['+(0x0,session_1[_0x2f334f(0x123)])()+_0x2f334f(0x18b)),process['exit'](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));}