linco-connect 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +426 -0
- package/bin/linco.js +465 -0
- package/package.json +25 -0
- package/public/index.html +1457 -0
- package/server.js +17 -0
- package/src/agentRunner.js +37 -0
- package/src/agents/claude.js +1 -0
- package/src/agents/codex.js +869 -0
- package/src/attachmentHandler.js +258 -0
- package/src/claudeRunner.js +564 -0
- package/src/config.js +371 -0
- package/src/danger.js +21 -0
- package/src/httpStatic.js +166 -0
- package/src/imConnector.js +488 -0
- package/src/imageHandler.js +38 -0
- package/src/lincoProtocol.js +209 -0
- package/src/localAuth.js +46 -0
- package/src/logger.js +137 -0
- package/src/outgoingAttachmentHandler.js +204 -0
- package/src/protocol.js +17 -0
- package/src/serverApp.js +61 -0
- package/src/session.js +359 -0
- package/src/slashCommands.js +349 -0
- package/src/streamBuffer.js +73 -0
- package/src/wsServer.js +293 -0
package/README.md
ADDED
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
# linco
|
|
2
|
+
|
|
3
|
+
Linco / Linco 对接 Claude Code 和 Codex 的本机 Agent 连接器。
|
|
4
|
+
|
|
5
|
+
它运行在用户自己的电脑上,负责把 Linco IM 服务端的消息转发给本机 Agent CLI,并把 Agent 的回复、工具调用、权限确认、附件和生成文件回传给 IM。仓库内置的 Web 页面只是本地自测页面,不是正式 IM 前端。
|
|
6
|
+
|
|
7
|
+
## 定位
|
|
8
|
+
|
|
9
|
+
- 本插件是**本机 Agent 连接器**,不是鉴权服务,也不是托管式多租户服务。
|
|
10
|
+
- Linco IM 服务端负责校验连接 query 中的 `token=appId:appSecret`。
|
|
11
|
+
- 插件连接 IM 时会把本机配置的 `appId/appSecret` 拼成单个 `token` 查询参数传给服务端。
|
|
12
|
+
- IM WebSocket 地址由代码内置,并按 Agent 类型区分:
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
Claude Code: wss://chat.ddjf.info/socket/ai/claude
|
|
16
|
+
Codex: wss://chat.ddjf.info/socket/ai/codex
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
普通用户初始化时不需要填写 `wsUrl`,私有化部署可在 `.linco/config.json` 中覆盖。
|
|
20
|
+
|
|
21
|
+
## 功能特性
|
|
22
|
+
|
|
23
|
+
- npm CLI 安装和启动:支持 `linco init/start/stop/doctor`,可用 `start --daemon` 后台运行。
|
|
24
|
+
- 远端 IM 默认按配置连接,用户只需配置 `appId/appSecret`。
|
|
25
|
+
- 本地测试页的模拟前端 IM 默认不连接:需要本地页面联调时需显式添加 `--local-im` 或 `--mock-im`。
|
|
26
|
+
- 内置 Linco IM WebSocket 地址:用户只需配置 `appId/appSecret`,插件会在连接时拼成 `token=appId:appSecret`。
|
|
27
|
+
- 多 Agent 连接:一个进程可同时连接 Claude Code 和 Codex 对应的 Linco 端点。
|
|
28
|
+
- 本地自测页面:用于调试本机 Agent 桥接能力。
|
|
29
|
+
- 本地访问 token:首次启动自动生成 `localToken`,保护本地测试页和本地 WebSocket。
|
|
30
|
+
- Claude Code 流式桥接:使用 `stream-json` 输入/输出格式实时推送回复。
|
|
31
|
+
- Codex 桥接:第一版使用系统安装的 `codex exec --json`,沿用系统 Codex 登录和配置。
|
|
32
|
+
- 会话隔离:每个 Agent 和远端 session 都创建独立 session、workspace、attachments、outbox。
|
|
33
|
+
- Markdown 展示:支持 GFM Markdown、代码块、表格、引用和安全链接。
|
|
34
|
+
- 工具调用展示:Agent 工具输入、输出和错误以可折叠卡片展示。
|
|
35
|
+
- 权限确认:Agent 请求工具权限时可在前端批准或拒绝。
|
|
36
|
+
- 附件上传:支持普通文件和图片;图片作为多模态内容发送,普通文件保存为本地路径引用。
|
|
37
|
+
- 图片粘贴:支持从剪贴板粘贴图片。
|
|
38
|
+
- 文件下发:Agent 生成文件放入 outbox 后,前端自动展示下载/预览卡片。
|
|
39
|
+
- 斜杠命令:内置 `/help`、`/pwd`、`/cd`、`/new`、`/stop`、`/base`、`/status`、`/list`。
|
|
40
|
+
- Windows Git Bash 检测:Windows 下自动查找 Git Bash,也可手动指定。
|
|
41
|
+
|
|
42
|
+
## 前置条件
|
|
43
|
+
|
|
44
|
+
- Node.js 18+
|
|
45
|
+
- 已安装 Claude Code CLI,终端可执行 `claude`
|
|
46
|
+
- Claude Code 已完成登录或 API Key 配置
|
|
47
|
+
- 如需启用 Codex:已安装 Codex CLI,终端可执行 `codex`,并已完成系统 Codex 登录或配置
|
|
48
|
+
- Windows 用户建议安装 Git for Windows
|
|
49
|
+
|
|
50
|
+
## 安装
|
|
51
|
+
|
|
52
|
+
开发源码运行:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm install
|
|
56
|
+
npm start
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
作为 npm CLI 使用时:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npm install -g linco
|
|
63
|
+
linco init --token "appId:appSecret" --agent claude
|
|
64
|
+
linco doctor
|
|
65
|
+
linco start
|
|
66
|
+
# 后台运行
|
|
67
|
+
linco start --daemon
|
|
68
|
+
# 停止后台服务
|
|
69
|
+
linco stop
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
本地开发也可以用:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
node bin/linco.js init --token "appId:appSecret" --agent claude
|
|
76
|
+
node bin/linco.js doctor
|
|
77
|
+
node bin/linco.js start
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## 初始化配置
|
|
81
|
+
|
|
82
|
+
推荐方式:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
linco init --token "appId:appSecret" --agent claude
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
可选参数:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
linco init \
|
|
92
|
+
--token "appId:appSecret" \
|
|
93
|
+
--agent claude \
|
|
94
|
+
--account default \
|
|
95
|
+
--force
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
说明:
|
|
99
|
+
|
|
100
|
+
- `--token` 格式为 `appId:appSecret`。
|
|
101
|
+
- `--agent` 必填,指定 Agent 类型(如 `claude` 或 `codex`)。
|
|
102
|
+
- token 按第一个冒号切分,所以 `appSecret` 内部可以包含冒号。
|
|
103
|
+
- `--force` 用于覆盖已有账号配置。
|
|
104
|
+
- 初始化不会询问或写入 `wsUrl`。
|
|
105
|
+
- 多次执行 `init` 并传入不同 `--agent` 可在同一账号下启用多个 Agent。
|
|
106
|
+
|
|
107
|
+
## 配置文件
|
|
108
|
+
|
|
109
|
+
配置统一保存在用户主目录下的 `.linco` 根目录:
|
|
110
|
+
|
|
111
|
+
```text
|
|
112
|
+
~/.linco/config.json
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Windows 示例:
|
|
116
|
+
|
|
117
|
+
```text
|
|
118
|
+
C:\Users\<用户名>\.linco\config.json
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
示例结构:
|
|
122
|
+
|
|
123
|
+
```json
|
|
124
|
+
{
|
|
125
|
+
"localWeb": {
|
|
126
|
+
"token": "auto-generated-local-token"
|
|
127
|
+
},
|
|
128
|
+
"defaultChannel": "linco",
|
|
129
|
+
"defaultAccount": "default",
|
|
130
|
+
"channels": {
|
|
131
|
+
"linco": {
|
|
132
|
+
"accounts": {
|
|
133
|
+
"default": {
|
|
134
|
+
"appId": "your-app-id",
|
|
135
|
+
"appSecret": "your-app-secret"
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
配置含义:
|
|
144
|
+
|
|
145
|
+
- `localWeb.token`:本地测试页访问 token,首次启动或初始化时自动生成。
|
|
146
|
+
- `defaultAccount`:默认账号名。
|
|
147
|
+
- `appId/appSecret`:本机保存的 Linco 应用凭证;插件连接 Linco IM 时会拼成 query 参数 `token=appId:appSecret`。
|
|
148
|
+
- `agents.claude` / `agents.codex`:按 Agent 配置启用状态、CLI 命令和可选私有化 `wsUrl` 覆盖。
|
|
149
|
+
|
|
150
|
+
默认不需要把内置 `wsUrl` 写入配置文件。启用 Codex 的最小配置示例:
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"agents": {
|
|
155
|
+
"codex": {
|
|
156
|
+
"enabled": true,
|
|
157
|
+
"bin": "codex"
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
私有化部署可覆盖某个 Agent 的连接地址:
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"agents": {
|
|
168
|
+
"codex": {
|
|
169
|
+
"enabled": true,
|
|
170
|
+
"bin": "codex",
|
|
171
|
+
"wsUrl": "wss://example.internal/socket/ai/codex"
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## 启动
|
|
178
|
+
|
|
179
|
+
默认启动本地服务,并按配置连接远端 IM;本地测试页不会自动连接模拟前端 IM:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
linco start
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
需要使用本地测试页模拟前端 IM 时,显式启用:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
linco start --local-im
|
|
189
|
+
# 等价写法
|
|
190
|
+
linco start --mock-im
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
后台启动:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
linco start --daemon
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
后台启动并启用本地模拟前端 IM:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
linco start --daemon --local-im
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
停止后台服务:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
linco stop
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
后台模式会把 PID 和日志写入:
|
|
212
|
+
|
|
213
|
+
```text
|
|
214
|
+
~/.linco/linco.pid
|
|
215
|
+
~/.linco/logs/daemon.out.log
|
|
216
|
+
~/.linco/logs/daemon.err.log
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
启动后终端会输出本地测试页地址,例如:
|
|
220
|
+
|
|
221
|
+
```text
|
|
222
|
+
本地测试页: http://127.0.0.1:3000/?localToken=xxxx
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
请使用这条带 `localToken` 的地址打开测试页面。直接访问 `http://127.0.0.1:3000` 会被拒绝。
|
|
226
|
+
|
|
227
|
+
源码开发时也可以继续使用:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
npm start
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
源码开发后台运行:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
npm start -- --daemon
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## 环境检查
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
linco doctor
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
会检查:
|
|
246
|
+
|
|
247
|
+
- Node.js 版本
|
|
248
|
+
- 配置文件是否存在
|
|
249
|
+
- `appId/appSecret` 是否已配置为 Linco token 来源
|
|
250
|
+
- 本地测试 token 是否已生成
|
|
251
|
+
- 已启用 Agent 的 CLI 是否可用
|
|
252
|
+
- Windows Git Bash 是否可用
|
|
253
|
+
- `Linco Home`、sessions 目录是否可写
|
|
254
|
+
|
|
255
|
+
`doctor` 不会请求真实 IM 服务端做鉴权;`token=appId:appSecret` 的鉴权由 Linco IM 服务端负责。
|
|
256
|
+
|
|
257
|
+
## 本地自测页面
|
|
258
|
+
|
|
259
|
+
本地页面仅用于开发和自测:
|
|
260
|
+
|
|
261
|
+
- 页面通过本机 WebSocket 连接当前插件服务。
|
|
262
|
+
- 页面不会直接连接供应商 IM WebSocket。
|
|
263
|
+
- 页面需要 `localToken` 才能访问。
|
|
264
|
+
- 页面可测试消息、附件、工具调用、权限确认和 outbox 文件下发。
|
|
265
|
+
|
|
266
|
+
## 附件上传
|
|
267
|
+
|
|
268
|
+
默认限制:
|
|
269
|
+
|
|
270
|
+
- 单次最多 50 个附件
|
|
271
|
+
- 单文件最大 50 MB
|
|
272
|
+
- 单次附件总大小最大 250 MB
|
|
273
|
+
- 默认拦截可执行文件和高风险脚本扩展名,例如 `.exe`、`.bat`、`.cmd`、`.ps1`、`.dll`
|
|
274
|
+
|
|
275
|
+
图片附件会直接作为当前 Agent 的多模态图片输入;Codex 当前会降级为文本占位提示。普通文件会保存到当前 session 的附件目录,并把本地路径附加给 Agent。
|
|
276
|
+
|
|
277
|
+
## Agent 生成文件下发
|
|
278
|
+
|
|
279
|
+
每个 session 都有独立 outbox 目录。Agent 如果需要把文件发给用户,应保存或复制到该目录。服务端会自动扫描新文件并推送到前端显示。
|
|
280
|
+
|
|
281
|
+
可通过本地命令查看路径:
|
|
282
|
+
|
|
283
|
+
```text
|
|
284
|
+
/base
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
输出中会包含:
|
|
288
|
+
|
|
289
|
+
```text
|
|
290
|
+
附件目录: .../attachments
|
|
291
|
+
outbox 目录: .../outbox
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
## 斜杠命令
|
|
295
|
+
|
|
296
|
+
| 命令 | 说明 |
|
|
297
|
+
| --- | --- |
|
|
298
|
+
| `/help` | 显示可用命令和附件说明 |
|
|
299
|
+
| `/commands` | 显示本地命令和当前 Agent 原生命令说明 |
|
|
300
|
+
| `/status` | 显示当前会话状态 |
|
|
301
|
+
| `/pwd` | 显示当前工作目录 |
|
|
302
|
+
| `/cd` | 列出当前目录内容 |
|
|
303
|
+
| `/cd <路径>` | 切换工作目录,并开启新的 Agent 会话 |
|
|
304
|
+
| `/new` | 开启新 Agent 会话,清除上下文 |
|
|
305
|
+
| `/stop` | 停止当前 Agent 进程,下次消息尝试恢复当前会话 |
|
|
306
|
+
| `/base` | 显示 Linco 运行目录、附件目录和 outbox 目录 |
|
|
307
|
+
| `/list` | 列出当前 IM 会话最近 10 条 Agent Session 历史 |
|
|
308
|
+
| `/list <条数>` | 按指定条数列出最近的 Agent Session 历史 |
|
|
309
|
+
|
|
310
|
+
除上述本地命令外,其他 `/xxx` 会透传给当前 Agent CLI。
|
|
311
|
+
|
|
312
|
+
## 常用环境变量
|
|
313
|
+
|
|
314
|
+
| 变量 | 默认值 | 说明 |
|
|
315
|
+
| --- | --- | --- |
|
|
316
|
+
| `PORT` | `3000` | 本地 HTTP 服务端口 |
|
|
317
|
+
| `HOST` | `127.0.0.1` | 本地 HTTP 服务监听地址 |
|
|
318
|
+
| `CLAUDE_BIN` | `claude` | Claude Code CLI 命令或路径 |
|
|
319
|
+
| `CODEX_BIN` | `codex` | Codex CLI 命令或路径 |
|
|
320
|
+
| `LINCO_CLAUDE_ENABLED` | 无配置文件时为启用 | 是否启用 Claude 连接器 |
|
|
321
|
+
| `LINCO_CODEX_ENABLED` | `false` | 是否启用 Codex 连接器 |
|
|
322
|
+
| `LINCO_CLAUDE_WS_URL` | `wss://chat.ddjf.info/socket/ai/claude` | Claude 端点覆盖 |
|
|
323
|
+
| `LINCO_CODEX_WS_URL` | `wss://chat.ddjf.info/socket/ai/codex` | Codex 端点覆盖 |
|
|
324
|
+
| `LINCO_LOCAL_AGENT` | `claude` | 本地测试页默认使用的 Agent |
|
|
325
|
+
| `CLAUDE_SYSTEM_PROMPT` | 内置中文 Markdown 输出提示词 | 附加给 Claude 的系统提示词 |
|
|
326
|
+
| `CLAUDE_CODE_GIT_BASH_PATH` | 自动检测 | Windows 下 Git Bash 路径 |
|
|
327
|
+
| `MAX_WS_PAYLOAD_BYTES` | `367001600` | WebSocket 最大消息体大小 |
|
|
328
|
+
| `MAX_ATTACHMENT_COUNT` | `50` | 单次最大附件数量 |
|
|
329
|
+
| `MAX_ATTACHMENT_BYTES` | `52428800` | 单附件大小限制 |
|
|
330
|
+
| `MAX_TOTAL_ATTACHMENT_BYTES` | `262144000` | 单次附件总大小限制 |
|
|
331
|
+
| `MAX_OUTGOING_ATTACHMENT_BYTES` | `52428800` | outbox 单文件下发大小限制 |
|
|
332
|
+
| `MAX_MESSAGE_QUEUE` | `10` | Claude 忙碌时的最大排队消息数 |
|
|
333
|
+
| `ATTACHMENTS_DIR_NAME` | `attachments` | session 运行目录下的附件目录名 |
|
|
334
|
+
| `OUTBOX_DIR_NAME` | `outbox` | session 运行目录下的下发目录名 |
|
|
335
|
+
| `ALLOW_UNSAFE_ATTACHMENTS` | `0` | 设置为 `1` 时允许上传默认拦截的高风险扩展名 |
|
|
336
|
+
| `UNSAFE_ATTACHMENT_EXTENSIONS` | 内置扩展名列表 | 逗号分隔的高风险扩展名列表 |
|
|
337
|
+
| `LINCO_CHANNEL` | `linco` | 选择配置文件中的 IM 渠道 |
|
|
338
|
+
| `LINCO_ACCOUNT` | `default` | 选择配置文件中的 IM 账号 |
|
|
339
|
+
| `LINCO_TOKEN` | 空 | `appId:appSecret` 简写形式;连接 Linco 时作为 query 参数 `token` 发送 |
|
|
340
|
+
| `LINCO_APP_ID` | 配置文件值 | Linco IM 应用 ID |
|
|
341
|
+
| `LINCO_APP_SECRET` | 配置文件值 | Linco IM 应用密钥 |
|
|
342
|
+
| `LINCO_AGENT_ID` | `main` | Linco 连接器标识,可由配置文件或环境变量指定 |
|
|
343
|
+
| `LINCO_WS_URL` | `wss://chat.ddjf.info/socket/ai/claude` | Claude 旧版端点覆盖,普通用户不需要配置 |
|
|
344
|
+
| `LINCO_HOME` | `~/.linco` | 运行数据根目录 |
|
|
345
|
+
| `LINCO_SESSIONS_DIR` | `~/.linco/sessions` | session 数据目录 |
|
|
346
|
+
| `CLAUDE_GRACEFUL_SHUTDOWN_MS` | `3000` | Claude 进程优雅关闭时间 |
|
|
347
|
+
|
|
348
|
+
## 运行目录
|
|
349
|
+
|
|
350
|
+
默认目录结构:
|
|
351
|
+
|
|
352
|
+
```text
|
|
353
|
+
~/.linco/
|
|
354
|
+
├── config.json
|
|
355
|
+
├── claude/
|
|
356
|
+
│ └── sessions/
|
|
357
|
+
│ └── sid_xxxxxxxx/
|
|
358
|
+
│ ├── session.json
|
|
359
|
+
│ ├── workspace/
|
|
360
|
+
│ ├── attachments/
|
|
361
|
+
│ └── outbox/
|
|
362
|
+
└── codex/
|
|
363
|
+
└── sessions/
|
|
364
|
+
└── sid_xxxxxxxx/
|
|
365
|
+
├── session.json
|
|
366
|
+
├── workspace/
|
|
367
|
+
├── attachments/
|
|
368
|
+
└── outbox/
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
说明:
|
|
372
|
+
|
|
373
|
+
- `config.json` 保存用户配置和本地测试 token。
|
|
374
|
+
- `claude/sessions/` 和 `codex/sessions/` 分别保存对应 Agent 的会话元数据、工作目录、上传附件和下发文件。
|
|
375
|
+
- `attachments/` 保存用户上传的普通文件。
|
|
376
|
+
- `outbox/` 用于 Agent 生成文件并自动下发给前端。
|
|
377
|
+
- Codex 默认使用系统安装时的认证和配置,不会创建项目托管的 `codex-home`。
|
|
378
|
+
|
|
379
|
+
## 安全注意事项
|
|
380
|
+
|
|
381
|
+
- 默认只监听 `127.0.0.1`,不建议直接暴露到公网。
|
|
382
|
+
- 本地测试页受 `localToken` 保护,请不要把带 token 的 URL 发给不可信的人。
|
|
383
|
+
- `appSecret` 保存在本机 `~/.linco/config.json`,请保护好用户电脑和配置文件。
|
|
384
|
+
- 插件不负责校验 `token=appId:appSecret`;真实鉴权由 Linco IM 服务端完成。
|
|
385
|
+
- Agent 的工具权限请求会转发给前端确认,但最终权限边界仍取决于本机 Agent 配置和用户批准。
|
|
386
|
+
- 危险命令检测只是基础提示,不应视为完整沙箱或安全隔离机制。
|
|
387
|
+
- 上传附件会落盘到本机,请不要上传或下发不应保存在本机的敏感文件。
|
|
388
|
+
|
|
389
|
+
## 项目结构
|
|
390
|
+
|
|
391
|
+
```text
|
|
392
|
+
.
|
|
393
|
+
├── bin/
|
|
394
|
+
│ └── linco.js # npm CLI 入口
|
|
395
|
+
├── public/
|
|
396
|
+
│ └── index.html # 本地自测页面
|
|
397
|
+
├── src/
|
|
398
|
+
│ ├── agentRunner.js # Agent 运行器门面
|
|
399
|
+
│ ├── agents/ # Claude/Codex Provider
|
|
400
|
+
│ ├── attachmentHandler.js # 上传附件保存、校验和 Agent 输入构造
|
|
401
|
+
│ ├── claudeRunner.js # Claude Code 子进程、stream-json 解析、权限处理
|
|
402
|
+
│ ├── config.js # 配置文件、环境变量和 Git Bash 检测
|
|
403
|
+
│ ├── danger.js # 高风险命令文本检测
|
|
404
|
+
│ ├── httpStatic.js # 静态文件、本地 client config 和 outbox 下载接口
|
|
405
|
+
│ ├── localAuth.js # 本地测试 token 生成和校验
|
|
406
|
+
│ ├── outgoingAttachmentHandler.js # outbox 扫描和附件下发
|
|
407
|
+
│ ├── protocol.js # WebSocket 消息封装
|
|
408
|
+
│ ├── serverApp.js # 可复用服务启动入口
|
|
409
|
+
│ ├── session.js # session 状态和 Agent 进程清理
|
|
410
|
+
│ ├── slashCommands.js # /help、/cd、/new 等斜杠命令
|
|
411
|
+
│ └── wsServer.js # WebSocket 连接、消息分发和 session 生命周期
|
|
412
|
+
├── server.js # 兼容 npm start 的入口
|
|
413
|
+
├── package.json
|
|
414
|
+
└── package-lock.json
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
## 开发命令
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
npm install
|
|
421
|
+
npm start
|
|
422
|
+
node bin/linco.js --help
|
|
423
|
+
node bin/linco.js doctor
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
当前项目没有配置测试、lint 或构建脚本。
|