deeper-cli 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 +254 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +12067 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +415 -0
- package/dist/index.js +1599 -0
- package/dist/index.js.map +1 -0
- package/docs/superpowers/plans/2026-05-14-deepercode-implementation.md +24 -0
- package/docs/superpowers/plans/2026-05-14-deepercode-plan.md +1248 -0
- package/docs/superpowers/specs/2026-05-14-deepercode-design.md +560 -0
- package/package.json +60 -0
- package/src/cli/bootstrap.ts +69 -0
- package/src/cli/chat-repl.ts +932 -0
- package/src/cli/commands/chat.ts +39 -0
- package/src/cli/commands/chat.tsx +39 -0
- package/src/cli/commands/config.ts +133 -0
- package/src/cli/commands/mcp.ts +172 -0
- package/src/cli/commands/run.ts +147 -0
- package/src/cli/commands/skill.ts +152 -0
- package/src/cli/index.ts +184 -0
- package/src/core/bugscan.ts +145 -0
- package/src/core/config.ts +285 -0
- package/src/core/constants.ts +49 -0
- package/src/core/eventbus.ts +202 -0
- package/src/core/logger.ts +109 -0
- package/src/core/storage.ts +96 -0
- package/src/index.ts +26 -0
- package/src/mcp/ConfigLoader.ts +74 -0
- package/src/mcp/MCPClient.ts +326 -0
- package/src/mcp/ResourceAdapter.ts +58 -0
- package/src/mcp/SSETransport.ts +133 -0
- package/src/mcp/StdioTransport.ts +116 -0
- package/src/mcp/ToolAdapter.ts +71 -0
- package/src/mcp/types.ts +58 -0
- package/src/memory/xmemory.ts +275 -0
- package/src/model/DeepSeekClient.ts +292 -0
- package/src/model/MessageBuilder.ts +155 -0
- package/src/model/RetryManager.ts +82 -0
- package/src/model/StreamHandler.ts +158 -0
- package/src/model/types.ts +86 -0
- package/src/skills/SkillCreator.ts +153 -0
- package/src/skills/SkillEngine.ts +158 -0
- package/src/skills/SkillExecutor.ts +107 -0
- package/src/skills/SkillLoader.ts +182 -0
- package/src/skills/SkillRegistry.ts +73 -0
- package/src/skills/SkillTrigger.ts +82 -0
- package/src/skills/types.ts +28 -0
- package/src/tools/ToolExecutor.ts +103 -0
- package/src/tools/ToolRegistry.ts +71 -0
- package/src/tools/ToolValidator.ts +103 -0
- package/src/tools/builtin/ai/context_summarize.ts +76 -0
- package/src/tools/builtin/ai/memory_store.ts +86 -0
- package/src/tools/builtin/ai/prompt_template.ts +71 -0
- package/src/tools/builtin/ai/skill_create.ts +53 -0
- package/src/tools/builtin/ai/subagent.ts +39 -0
- package/src/tools/builtin/ai/todo_manager.ts +157 -0
- package/src/tools/builtin/ai/token_count.ts +196 -0
- package/src/tools/builtin/ai/tool_create.ts +52 -0
- package/src/tools/builtin/code/analyze_deps.ts +72 -0
- package/src/tools/builtin/code/bug_scan.ts +80 -0
- package/src/tools/builtin/code/code_metrics.ts +111 -0
- package/src/tools/builtin/code/extract_function.ts +86 -0
- package/src/tools/builtin/code/format_code.ts +57 -0
- package/src/tools/builtin/code/generate_code.ts +75 -0
- package/src/tools/builtin/code/import_organizer.ts +82 -0
- package/src/tools/builtin/code/lint_code.ts +48 -0
- package/src/tools/builtin/code/parse_ast.ts +86 -0
- package/src/tools/builtin/code/refactor_code.ts +63 -0
- package/src/tools/builtin/code/type_check.ts +48 -0
- package/src/tools/builtin/data/chart_generate.ts +62 -0
- package/src/tools/builtin/data/csv_parse.ts +56 -0
- package/src/tools/builtin/data/data_diff.ts +79 -0
- package/src/tools/builtin/data/data_transform.ts +74 -0
- package/src/tools/builtin/data/data_validate.ts +75 -0
- package/src/tools/builtin/data/json_parse.ts +71 -0
- package/src/tools/builtin/data/template_render.ts +58 -0
- package/src/tools/builtin/data/toml_parse.ts +42 -0
- package/src/tools/builtin/data/xml_parse.ts +79 -0
- package/src/tools/builtin/data/yaml_parse.ts +42 -0
- package/src/tools/builtin/database/db_backup.ts +53 -0
- package/src/tools/builtin/database/db_restore.ts +51 -0
- package/src/tools/builtin/database/db_schema.ts +66 -0
- package/src/tools/builtin/database/nosql_query.ts +50 -0
- package/src/tools/builtin/database/orm_generate.ts +66 -0
- package/src/tools/builtin/database/redis_command.ts +46 -0
- package/src/tools/builtin/database/sql_migrate.ts +55 -0
- package/src/tools/builtin/database/sql_query.ts +60 -0
- package/src/tools/builtin/filesystem/batch_read.ts +56 -0
- package/src/tools/builtin/filesystem/batch_write.ts +67 -0
- package/src/tools/builtin/filesystem/copy_file.ts +36 -0
- package/src/tools/builtin/filesystem/create_dir.ts +30 -0
- package/src/tools/builtin/filesystem/delete_file.ts +30 -0
- package/src/tools/builtin/filesystem/diff_files.ts +47 -0
- package/src/tools/builtin/filesystem/edit_file.ts +47 -0
- package/src/tools/builtin/filesystem/file_info.ts +52 -0
- package/src/tools/builtin/filesystem/glob_find.ts +44 -0
- package/src/tools/builtin/filesystem/list_dir.ts +51 -0
- package/src/tools/builtin/filesystem/merge_files.ts +44 -0
- package/src/tools/builtin/filesystem/move_file.ts +37 -0
- package/src/tools/builtin/filesystem/read_file.ts +55 -0
- package/src/tools/builtin/filesystem/watch_file.ts +33 -0
- package/src/tools/builtin/filesystem/write_file.ts +45 -0
- package/src/tools/builtin/index.ts +244 -0
- package/src/tools/builtin/network/api_call.ts +79 -0
- package/src/tools/builtin/network/browser_action.ts +54 -0
- package/src/tools/builtin/network/check_url.ts +59 -0
- package/src/tools/builtin/network/download_file.ts +64 -0
- package/src/tools/builtin/network/graphql_query.ts +46 -0
- package/src/tools/builtin/network/http_request.ts +61 -0
- package/src/tools/builtin/network/parse_html.ts +101 -0
- package/src/tools/builtin/network/proxy_request.ts +53 -0
- package/src/tools/builtin/network/screenshot_page.ts +58 -0
- package/src/tools/builtin/network/web_fetch.ts +70 -0
- package/src/tools/builtin/network/web_search.ts +128 -0
- package/src/tools/builtin/network/websocket_connect.ts +70 -0
- package/src/tools/builtin/project/build_project.ts +68 -0
- package/src/tools/builtin/project/config_manage.ts +99 -0
- package/src/tools/builtin/project/coverage_report.ts +59 -0
- package/src/tools/builtin/project/docker_manage.ts +90 -0
- package/src/tools/builtin/project/env_manage.ts +88 -0
- package/src/tools/builtin/project/npm_manage.ts +71 -0
- package/src/tools/builtin/project/project_init.ts +59 -0
- package/src/tools/builtin/project/run_test.ts +74 -0
- package/src/tools/builtin/search/codebase_search.ts +76 -0
- package/src/tools/builtin/search/find_definition.ts +84 -0
- package/src/tools/builtin/search/find_references.ts +75 -0
- package/src/tools/builtin/search/fuzzy_find.ts +75 -0
- package/src/tools/builtin/search/grep_search.ts +90 -0
- package/src/tools/builtin/search/regex_find.ts +91 -0
- package/src/tools/builtin/search/search_docs.ts +51 -0
- package/src/tools/builtin/search/search_package.ts +50 -0
- package/src/tools/builtin/search/symbol_search.ts +82 -0
- package/src/tools/builtin/search/text_search.ts +63 -0
- package/src/tools/builtin/security/decrypt_file.ts +54 -0
- package/src/tools/builtin/security/encrypt_file.ts +52 -0
- package/src/tools/builtin/security/hash_generate.ts +48 -0
- package/src/tools/builtin/security/jwt_decode.ts +53 -0
- package/src/tools/builtin/security/secret_scan.ts +82 -0
- package/src/tools/builtin/security/vulnerability_check.ts +71 -0
- package/src/tools/builtin/shell/background_terminal.ts +38 -0
- package/src/tools/builtin/shell/check_status.ts +48 -0
- package/src/tools/builtin/shell/interactive_terminal.ts +31 -0
- package/src/tools/builtin/shell/kill_terminal.ts +29 -0
- package/src/tools/builtin/shell/list_terminals.ts +61 -0
- package/src/tools/builtin/shell/pipe_commands.ts +55 -0
- package/src/tools/builtin/shell/process-pool.ts +150 -0
- package/src/tools/builtin/shell/run_async.ts +73 -0
- package/src/tools/builtin/shell/run_command.ts +60 -0
- package/src/tools/builtin/shell/send_ctrl_keys.ts +43 -0
- package/src/tools/builtin/shell/send_keys.ts +36 -0
- package/src/tools/builtin/shell/send_text.ts +35 -0
- package/src/tools/builtin/shell/shell_script.ts +65 -0
- package/src/tools/builtin/shell/stop_command.ts +40 -0
- package/src/tools/builtin/shell/terminal_resize.ts +31 -0
- package/src/tools/builtin/shell/terminal_screenshot.ts +28 -0
- package/src/tools/builtin/system/log_viewer.ts +89 -0
- package/src/tools/builtin/system/notify_user.ts +55 -0
- package/src/tools/builtin/system/process_list.ts +66 -0
- package/src/tools/builtin/system/resource_monitor.ts +66 -0
- package/src/tools/builtin/system/system_info.ts +41 -0
- package/src/tools/tool-types.ts +97 -0
- package/src/ui/AgentTree.tsx +98 -0
- package/src/ui/App.tsx +46 -0
- package/src/ui/ChatView.tsx +278 -0
- package/src/ui/ConfirmDialog.tsx +68 -0
- package/src/ui/DiffView.tsx +64 -0
- package/src/ui/FilePreview.tsx +59 -0
- package/src/ui/InputBox.tsx +267 -0
- package/src/ui/MessageBubble.tsx +30 -0
- package/src/ui/Spinner.tsx +35 -0
- package/src/ui/StatusBar.tsx +41 -0
- package/src/ui/ToolCallCard.tsx +73 -0
- package/src/ui/ansi.ts +50 -0
- package/src/ui/markdown.ts +238 -0
- package/src/ui/themes/dark.ts +4 -0
- package/src/ui/themes/default.ts +25 -0
- package/src/ui/themes/light.ts +14 -0
- package/tests/unit/BuiltinTools.test.ts +129 -0
- package/tests/unit/BuiltinToolsIntegration.test.ts +111 -0
- package/tests/unit/FilesystemTools.test.ts +211 -0
- package/tests/unit/SkillLoader.test.ts +141 -0
- package/tests/unit/SkillRegistry.test.ts +113 -0
- package/tests/unit/ToolExecutor.test.ts +160 -0
- package/tests/unit/ToolRegistry.test.ts +103 -0
- package/tests/unit/ToolValidator.test.ts +137 -0
- package/tsconfig.json +28 -0
- package/tsup.config.ts +17 -0
- package/vitest.config.ts +20 -0
|
@@ -0,0 +1,560 @@
|
|
|
1
|
+
# DeeperCode 设计规格文档
|
|
2
|
+
|
|
3
|
+
> 版本:1.0.0 | 日期:2026-05-14 | 状态:待审阅
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. 项目概述
|
|
8
|
+
|
|
9
|
+
**DeeperCode** 是一款终端 CLI 类型的 Agentic 编程工具,目标定位为"中文世界最强大的 AI 编程助手"。基于 DeepSeek-V4-Pro 模型,提供现代化的交互式 REPL 界面、强大的 Agent 系统、混合型 Skills 引擎、完整 MCP 协议支持以及 105 个内置工具。
|
|
10
|
+
|
|
11
|
+
### 1.1 核心目标
|
|
12
|
+
|
|
13
|
+
- 一句话生成完整项目
|
|
14
|
+
- 现代化 CLI 式 UI(Ink/React 渲染)
|
|
15
|
+
- 强大的 Agent 系统(树形委派 + 单 Agent 模式)
|
|
16
|
+
- 混合型 Skills 引擎(AI 可自创建 Skill)
|
|
17
|
+
- 完整 MCP 客户端支持(stdio + SSE/HTTP)
|
|
18
|
+
- 105 个内置 AI 可用工具
|
|
19
|
+
- AI 可自定义工具
|
|
20
|
+
|
|
21
|
+
### 1.2 非目标(明确排除)
|
|
22
|
+
|
|
23
|
+
- 不提供 Git 内置工具(用户使用系统 Git)
|
|
24
|
+
- 不提供 GUI 界面(纯终端 CLI)
|
|
25
|
+
- 不提供多租户 SaaS 平台
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 2. 技术栈
|
|
30
|
+
|
|
31
|
+
| 层 | 技术 | 版本要求 |
|
|
32
|
+
|----|------|----------|
|
|
33
|
+
| 语言 | TypeScript | 5.x |
|
|
34
|
+
| 运行时 | Node.js | 20+ LTS |
|
|
35
|
+
| CLI 框架 | Ink + React | Ink 5, React 18 |
|
|
36
|
+
| 构建工具 | tsup | latest |
|
|
37
|
+
| 测试框架 | Vitest | latest |
|
|
38
|
+
| 包管理器 | pnpm | latest |
|
|
39
|
+
| Markdown 渲染 | ink-markdown + marked | latest |
|
|
40
|
+
| MCP SDK | @modelcontextprotocol/sdk | latest |
|
|
41
|
+
| AST 解析 | tree-sitter | latest |
|
|
42
|
+
| 沙箱执行 | isolated-vm | latest |
|
|
43
|
+
| SSE 解析 | eventsource-parser | latest |
|
|
44
|
+
| 代码检查 | ESLint + Prettier | latest |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 3. AI 模型集成
|
|
49
|
+
|
|
50
|
+
### 3.1 模型配置
|
|
51
|
+
|
|
52
|
+
| 配置项 | 值 |
|
|
53
|
+
|--------|-----|
|
|
54
|
+
| Provider | DeepSeek |
|
|
55
|
+
| Model | `deepseek-v4-pro` |
|
|
56
|
+
| Base URL | `https://api.deepseek.com` |
|
|
57
|
+
| 上下文窗口 | 1,000,000 Token |
|
|
58
|
+
| 架构 | MoE 混合专家,万亿级参数 |
|
|
59
|
+
| 多模态 | 文本 + 图像 + 音视频 |
|
|
60
|
+
| API 兼容 | OpenAI ChatCompletions 接口 |
|
|
61
|
+
|
|
62
|
+
### 3.2 Think 模式
|
|
63
|
+
|
|
64
|
+
Think(思考推理)模式通过 API 参数控制,而非模型名后缀:
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"model": "deepseek-v4-pro",
|
|
69
|
+
"reasoning_effort": "high",
|
|
70
|
+
"thinking": { "type": "enabled", "budget_tokens": 32000 }
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 3.3 流式处理
|
|
75
|
+
|
|
76
|
+
- 使用 SSE(Server-Sent Events)协议接收流式响应
|
|
77
|
+
- 支持 `thinking` 块解析(推理过程独立展示)
|
|
78
|
+
- 支持工具调用增量解析(streaming tool calls)
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 4. 项目工程结构
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
deeper-code/
|
|
86
|
+
├── src/
|
|
87
|
+
│ ├── cli/ # CLI 入口层
|
|
88
|
+
│ │ ├── index.ts # 主入口,参数解析
|
|
89
|
+
│ │ ├── bootstrap.ts # 启动引导
|
|
90
|
+
│ │ └── commands/ # CLI 子命令
|
|
91
|
+
│ │ ├── chat.ts
|
|
92
|
+
│ │ ├── run.ts
|
|
93
|
+
│ │ ├── config.ts
|
|
94
|
+
│ │ ├── skill.ts
|
|
95
|
+
│ │ └── mcp.ts
|
|
96
|
+
│ │
|
|
97
|
+
│ ├── ui/ # Ink/React 终端 UI
|
|
98
|
+
│ │ ├── App.tsx
|
|
99
|
+
│ │ ├── ChatView.tsx
|
|
100
|
+
│ │ ├── MessageBubble.tsx
|
|
101
|
+
│ │ ├── DiffView.tsx
|
|
102
|
+
│ │ ├── FilePreview.tsx
|
|
103
|
+
│ │ ├── StatusBar.tsx
|
|
104
|
+
│ │ ├── InputBox.tsx
|
|
105
|
+
│ │ ├── ToolCallCard.tsx
|
|
106
|
+
│ │ ├── AgentTree.tsx
|
|
107
|
+
│ │ ├── Spinner.tsx
|
|
108
|
+
│ │ ├── ConfirmDialog.tsx
|
|
109
|
+
│ │ └── themes/
|
|
110
|
+
│ │ ├── default.ts
|
|
111
|
+
│ │ ├── dark.ts
|
|
112
|
+
│ │ └── light.ts
|
|
113
|
+
│ │
|
|
114
|
+
│ ├── agent/ # Agent 系统核心
|
|
115
|
+
│ │ ├── Agent.ts
|
|
116
|
+
│ │ ├── Orchestrator.ts
|
|
117
|
+
│ │ ├── SubAgent.ts
|
|
118
|
+
│ │ ├── AgentPool.ts
|
|
119
|
+
│ │ ├── AgentLoop.ts
|
|
120
|
+
│ │ ├── TaskDecomposer.ts
|
|
121
|
+
│ │ ├── ResultAggregator.ts
|
|
122
|
+
│ │ └── types.ts
|
|
123
|
+
│ │
|
|
124
|
+
│ ├── context/ # 上下文管理
|
|
125
|
+
│ │ ├── ContextManager.ts
|
|
126
|
+
│ │ ├── TokenCounter.ts
|
|
127
|
+
│ │ ├── HistoryManager.ts
|
|
128
|
+
│ │ ├── Summarizer.ts
|
|
129
|
+
│ │ ├── FileContext.ts
|
|
130
|
+
│ │ └── Prioritizer.ts
|
|
131
|
+
│ │
|
|
132
|
+
│ ├── tools/ # 105 工具系统
|
|
133
|
+
│ │ ├── ToolRegistry.ts
|
|
134
|
+
│ │ ├── ToolExecutor.ts
|
|
135
|
+
│ │ ├── ToolValidator.ts
|
|
136
|
+
│ │ ├── ToolSandbox.ts
|
|
137
|
+
│ │ ├── DynamicTool.ts
|
|
138
|
+
│ │ ├── tool-types.ts
|
|
139
|
+
│ │ └── builtin/
|
|
140
|
+
│ │ ├── filesystem/ # 15 工具
|
|
141
|
+
│ │ ├── search/ # 10 工具
|
|
142
|
+
│ │ ├── shell/ # 15 工具
|
|
143
|
+
│ │ ├── network/ # 12 工具
|
|
144
|
+
│ │ ├── code/ # 10 工具
|
|
145
|
+
│ │ ├── database/ # 8 工具
|
|
146
|
+
│ │ ├── data/ # 10 工具
|
|
147
|
+
│ │ ├── security/ # 6 工具
|
|
148
|
+
│ │ ├── project/ # 8 工具
|
|
149
|
+
│ │ ├── ai/ # 6 工具
|
|
150
|
+
│ │ └── system/ # 5 工具
|
|
151
|
+
│ │
|
|
152
|
+
│ ├── mcp/ # MCP 客户端
|
|
153
|
+
│ │ ├── MCPClient.ts
|
|
154
|
+
│ │ ├── StdioTransport.ts
|
|
155
|
+
│ │ ├── SSETransport.ts
|
|
156
|
+
│ │ ├── ConfigLoader.ts
|
|
157
|
+
│ │ ├── ToolAdapter.ts
|
|
158
|
+
│ │ ├── ResourceAdapter.ts
|
|
159
|
+
│ │ └── types.ts
|
|
160
|
+
│ │
|
|
161
|
+
│ ├── skills/ # Skills 引擎
|
|
162
|
+
│ │ ├── SkillEngine.ts
|
|
163
|
+
│ │ ├── SkillLoader.ts
|
|
164
|
+
│ │ ├── SkillExecutor.ts
|
|
165
|
+
│ │ ├── SkillCreator.ts
|
|
166
|
+
│ │ ├── SkillTrigger.ts
|
|
167
|
+
│ │ ├── SkillRegistry.ts
|
|
168
|
+
│ │ └── types.ts
|
|
169
|
+
│ │
|
|
170
|
+
│ ├── model/ # 模型 API 层
|
|
171
|
+
│ │ ├── DeepSeekClient.ts
|
|
172
|
+
│ │ ├── MessageBuilder.ts
|
|
173
|
+
│ │ ├── StreamHandler.ts
|
|
174
|
+
│ │ ├── ThinkMode.ts
|
|
175
|
+
│ │ ├── RetryManager.ts
|
|
176
|
+
│ │ └── types.ts
|
|
177
|
+
│ │
|
|
178
|
+
│ ├── core/ # 核心基础模块
|
|
179
|
+
│ │ ├── config.ts
|
|
180
|
+
│ │ ├── logger.ts
|
|
181
|
+
│ │ ├── eventbus.ts
|
|
182
|
+
│ │ ├── sandbox.ts
|
|
183
|
+
│ │ ├── process.ts
|
|
184
|
+
│ │ ├── storage.ts
|
|
185
|
+
│ │ ├── crypto.ts
|
|
186
|
+
│ │ └── constants.ts
|
|
187
|
+
│ │
|
|
188
|
+
│ └── index.ts
|
|
189
|
+
│
|
|
190
|
+
├── skills/ # 内置 Skills
|
|
191
|
+
├── tests/
|
|
192
|
+
│ ├── unit/
|
|
193
|
+
│ ├── integration/
|
|
194
|
+
│ └── e2e/
|
|
195
|
+
├── scripts/
|
|
196
|
+
├── package.json
|
|
197
|
+
├── tsconfig.json
|
|
198
|
+
└── tsconfig.build.json
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 5. Agent 系统设计
|
|
204
|
+
|
|
205
|
+
### 5.1 架构模式:树形委派
|
|
206
|
+
|
|
207
|
+
```
|
|
208
|
+
┌──────────────┐
|
|
209
|
+
│ User Input │
|
|
210
|
+
└──────┬───────┘
|
|
211
|
+
┌──────▼───────┐
|
|
212
|
+
│ Main Agent │ (Orchestrator)
|
|
213
|
+
└──────┬───────┘
|
|
214
|
+
┌────────────┼────────────┐
|
|
215
|
+
┌─────▼─────┐ ┌───▼────┐ ┌────▼─────┐
|
|
216
|
+
│ Sub-Agent │ │Sub-Agent│ │Sub-Agent │
|
|
217
|
+
│ #1 │ │ #2 │ │ #3 │
|
|
218
|
+
└───────────┘ └────────┘ └──────────┘
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### 5.2 Agent 生命周期状态机
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
CREATED → THINKING → EXECUTING → WAITING → COMPLETED
|
|
225
|
+
→ FAILED
|
|
226
|
+
→ CANCELLED
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### 5.3 关键约束
|
|
230
|
+
|
|
231
|
+
| 参数 | 默认值 | 说明 |
|
|
232
|
+
|------|--------|------|
|
|
233
|
+
| 最大子 Agent 数 | 5 | 并发 fork 上限 |
|
|
234
|
+
| 最大递归深度 | 2 | 子→孙,孙不能再 fork |
|
|
235
|
+
| 子 Agent 超时 | 120,000ms | 超时自动终止 |
|
|
236
|
+
| 每层 Token 预算 | 80,000 | 防止上下文失控 |
|
|
237
|
+
| 结果摘要上限 | 5,000 字符 | 子 Agent 回传摘要截断 |
|
|
238
|
+
|
|
239
|
+
### 5.4 单 Agent 模式
|
|
240
|
+
|
|
241
|
+
任务复杂度判定为"简单"时,不启动子 Agent,主 Agent 直接完成:
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
User → Main Agent → Tool Executor → Result
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
复杂度判定规则:
|
|
248
|
+
- 单文件操作:单 Agent
|
|
249
|
+
- 涉及 < 3 个独立子任务:单 Agent
|
|
250
|
+
- 超过 3 个独立子任务或跨多模块:树形委派
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## 6. 105 内置工具体系
|
|
255
|
+
|
|
256
|
+
### 6.1 工具接口定义
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
interface Tool {
|
|
260
|
+
name: string;
|
|
261
|
+
description: string;
|
|
262
|
+
category: ToolCategory;
|
|
263
|
+
parameters: JSONSchema;
|
|
264
|
+
execute(params: Record<string, unknown>): Promise<ToolResult>;
|
|
265
|
+
dangerous?: boolean;
|
|
266
|
+
requiresApproval?: boolean;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
interface ToolResult {
|
|
270
|
+
success: boolean;
|
|
271
|
+
output: string;
|
|
272
|
+
error?: string;
|
|
273
|
+
metadata?: Record<string, unknown>;
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### 6.2 工具分类清单
|
|
278
|
+
|
|
279
|
+
#### 文件系统操作(15)
|
|
280
|
+
`read_file`, `write_file`, `edit_file`, `delete_file`, `list_dir`, `glob_find`, `move_file`, `copy_file`, `create_dir`, `file_info`, `watch_file`, `batch_read`, `batch_write`, `diff_files`, `merge_files`
|
|
281
|
+
|
|
282
|
+
#### 搜索与代码检索(10)
|
|
283
|
+
`grep_search`, `codebase_search`, `symbol_search`, `find_references`, `find_definition`, `text_search`, `fuzzy_find`, `regex_find`, `search_package`, `search_docs`
|
|
284
|
+
|
|
285
|
+
#### Shell & 终端管理(15)
|
|
286
|
+
`run_command`, `run_async`, `check_status`, `stop_command`, `pipe_commands`, `shell_script`, `background_terminal`, `send_keys`, `send_ctrl_keys`, `send_text`, `terminal_screenshot`, `terminal_resize`, `list_terminals`, `kill_terminal`, `interactive_terminal`
|
|
287
|
+
|
|
288
|
+
#### 网络 & Web(12)
|
|
289
|
+
`web_fetch`, `web_search`, `http_request`, `download_file`, `api_call`, `graphql_query`, `websocket_connect`, `check_url`, `screenshot_page`, `parse_html`, `browser_action`, `proxy_request`
|
|
290
|
+
|
|
291
|
+
#### 代码解析与生成(10)
|
|
292
|
+
`parse_ast`, `format_code`, `lint_code`, `type_check`, `generate_code`, `refactor_code`, `extract_function`, `analyze_deps`, `import_organizer`, `code_metrics`
|
|
293
|
+
|
|
294
|
+
#### 数据库操作(8)
|
|
295
|
+
`sql_query`, `sql_migrate`, `nosql_query`, `db_schema`, `db_backup`, `db_restore`, `redis_command`, `orm_generate`
|
|
296
|
+
|
|
297
|
+
#### 数据处理(10)
|
|
298
|
+
`json_parse`, `csv_parse`, `xml_parse`, `yaml_parse`, `toml_parse`, `data_transform`, `data_validate`, `data_diff`, `template_render`, `chart_generate`
|
|
299
|
+
|
|
300
|
+
#### 安全与密钥(6)
|
|
301
|
+
`secret_scan`, `encrypt_file`, `decrypt_file`, `hash_generate`, `jwt_decode`, `vulnerability_check`
|
|
302
|
+
|
|
303
|
+
#### 项目工程(8)
|
|
304
|
+
`npm_manage`, `project_init`, `build_project`, `run_test`, `coverage_report`, `env_manage`, `config_manage`, `docker_manage`
|
|
305
|
+
|
|
306
|
+
#### AI 专用工具(6)
|
|
307
|
+
`token_count`, `context_summarize`, `prompt_template`, `skill_create`, `tool_create`, `memory_store`
|
|
308
|
+
|
|
309
|
+
#### 系统与监控(5)
|
|
310
|
+
`process_list`, `system_info`, `resource_monitor`, `notify_user`, `log_viewer`
|
|
311
|
+
|
|
312
|
+
### 6.3 工具安全分级
|
|
313
|
+
|
|
314
|
+
| 级别 | 工具示例 | 行为 |
|
|
315
|
+
|------|----------|------|
|
|
316
|
+
| **安全** | `read_file`, `list_dir`, `grep_search` | 自动批准,无需确认 |
|
|
317
|
+
| **需确认** | `write_file`, `delete_file`, `run_command` | 弹确认对话框 |
|
|
318
|
+
| **危险** | `sudo_command`, `kill_terminal` | 需用户显式授权 |
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## 7. Skills 引擎设计
|
|
323
|
+
|
|
324
|
+
### 7.1 Skill 文件格式
|
|
325
|
+
|
|
326
|
+
每个 Skill 由两个文件组成:
|
|
327
|
+
|
|
328
|
+
```
|
|
329
|
+
skills/<skill-name>/
|
|
330
|
+
├── skill.md # 指令文件(必需)
|
|
331
|
+
└── skill.js # 代码实现(可选)
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### 7.2 skill.md 结构
|
|
335
|
+
|
|
336
|
+
```markdown
|
|
337
|
+
---
|
|
338
|
+
name: pdf
|
|
339
|
+
description: PDF 文件的创建、解析、编辑、合并与导出
|
|
340
|
+
version: 1.0.0
|
|
341
|
+
author: deeper
|
|
342
|
+
triggers:
|
|
343
|
+
- pdf
|
|
344
|
+
- 合并pdf
|
|
345
|
+
- 提取pdf
|
|
346
|
+
- 转换pdf
|
|
347
|
+
tools:
|
|
348
|
+
- read_file
|
|
349
|
+
- write_file
|
|
350
|
+
- run_command
|
|
351
|
+
dependencies:
|
|
352
|
+
- pdf-lib
|
|
353
|
+
- pdf-parse
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
# PDF Skill
|
|
357
|
+
|
|
358
|
+
## 概述
|
|
359
|
+
处理所有 PDF 相关操作。
|
|
360
|
+
|
|
361
|
+
## 工作流程
|
|
362
|
+
1. 解析用户意图
|
|
363
|
+
2. 调用 skill.js 中的对应函数
|
|
364
|
+
3. 返回处理结果
|
|
365
|
+
|
|
366
|
+
## 最佳实践
|
|
367
|
+
- 大文件先分块处理
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### 7.3 Skill 引擎能力
|
|
371
|
+
|
|
372
|
+
| 能力 | 说明 |
|
|
373
|
+
|------|------|
|
|
374
|
+
| 自动发现 | 扫描 `~/.deeper/skills/` 和项目 `.deeper/skills/` |
|
|
375
|
+
| 触发匹配 | 根据用户输入关键词自动推荐 Skill |
|
|
376
|
+
| 热加载 | 文件变更自动重新加载 |
|
|
377
|
+
| 沙箱执行 | 代码型 Skill 在 isolated-vm 中运行 |
|
|
378
|
+
| 工具权限 | Skill 声明所需工具,超出需授权 |
|
|
379
|
+
| AI 自创建 | `skill_create` 工具生成新 Skill |
|
|
380
|
+
| 社区导入 | 支持从 URL/Git 导入外部 Skill |
|
|
381
|
+
|
|
382
|
+
### 7.4 AI 创建 Skill 流程
|
|
383
|
+
|
|
384
|
+
```
|
|
385
|
+
用户: "帮我创建一个自动生成 CHANGELOG 的 skill"
|
|
386
|
+
→ AI 理解需求 → 生成 skill.md → 生成 skill.js → 写入目录 → 注册引擎 → 反馈确认
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## 8. MCP 集成设计
|
|
392
|
+
|
|
393
|
+
### 8.1 传输协议支持
|
|
394
|
+
|
|
395
|
+
| 协议 | 状态 | 用途 |
|
|
396
|
+
|------|------|------|
|
|
397
|
+
| stdio | 支持 | 本地 MCP Server 进程 |
|
|
398
|
+
| SSE/HTTP | 支持 | 远程 MCP 服务 |
|
|
399
|
+
|
|
400
|
+
### 8.2 MCP 协议覆盖
|
|
401
|
+
|
|
402
|
+
| 能力 | 支持 | 说明 |
|
|
403
|
+
|------|------|------|
|
|
404
|
+
| Tools | 完全支持 | 注册为可用工具 |
|
|
405
|
+
| Resources | 完全支持 | 资源访问 |
|
|
406
|
+
| Prompts | 完全支持 | 预定义提示词 |
|
|
407
|
+
| Sampling | 完全支持 | Server 请求 LLM |
|
|
408
|
+
| Roots | 完全支持 | 工作目录声明 |
|
|
409
|
+
| Logging | 支持 | 服务端日志 |
|
|
410
|
+
|
|
411
|
+
### 8.3 配置文件
|
|
412
|
+
|
|
413
|
+
```jsonc
|
|
414
|
+
// ~/.deeper/mcp.json
|
|
415
|
+
{
|
|
416
|
+
"servers": {
|
|
417
|
+
"filesystem": {
|
|
418
|
+
"command": "npx",
|
|
419
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path"],
|
|
420
|
+
"type": "stdio"
|
|
421
|
+
},
|
|
422
|
+
"github": {
|
|
423
|
+
"url": "https://mcp.github.com/sse",
|
|
424
|
+
"type": "sse",
|
|
425
|
+
"headers": { "Authorization": "Bearer ${GITHUB_TOKEN}" }
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## 9. CLI UX 交互设计
|
|
434
|
+
|
|
435
|
+
### 9.1 REPL 界面布局
|
|
436
|
+
|
|
437
|
+
```
|
|
438
|
+
┌──────────────────────────────────────────────────┐
|
|
439
|
+
│ DeeperCode deepseek-v4-pro ⚡ │ ← 顶栏
|
|
440
|
+
├──────────────────────────────────────────────────┤
|
|
441
|
+
│ [对话区 - 可滚动] │
|
|
442
|
+
│ - Agent 分析卡片 │
|
|
443
|
+
│ - 工具调用卡片 │
|
|
444
|
+
│ - Diff 预览 │
|
|
445
|
+
│ - 消息气泡(Markdown 渲染) │
|
|
446
|
+
├──────────────────────────────────────────────────┤
|
|
447
|
+
│ > 输入区(多行,支持快捷键) │
|
|
448
|
+
├──────────────────────────────────────────────────┤
|
|
449
|
+
│ 📊 Tokens: 12,450/131,072 | 内存: 320MB │ ← 状态栏
|
|
450
|
+
└──────────────────────────────────────────────────┘
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
### 9.2 键盘快捷键
|
|
454
|
+
|
|
455
|
+
| 快捷键 | 功能 |
|
|
456
|
+
|--------|------|
|
|
457
|
+
| `Ctrl+Enter` | 发送消息 |
|
|
458
|
+
| `Ctrl+K` | 切换多行输入 |
|
|
459
|
+
| `Ctrl+C` | 中断/退出(需二次确认) |
|
|
460
|
+
| `Ctrl+L` | 清屏 |
|
|
461
|
+
| `Ctrl+R` | 搜索历史 |
|
|
462
|
+
| `↑/↓` | 浏览历史命令 |
|
|
463
|
+
| `Tab` | 智能补全 |
|
|
464
|
+
| `Esc` | 取消当前操作 |
|
|
465
|
+
|
|
466
|
+
### 9.3 斜杠命令
|
|
467
|
+
|
|
468
|
+
```
|
|
469
|
+
/help, /config, /model, /skill list, /skill create,
|
|
470
|
+
/mcp list, /mcp add, /mcp connect, /memory, /clear,
|
|
471
|
+
/export, /session new, /session list, /tools,
|
|
472
|
+
/theme, /debug, /quit
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
---
|
|
476
|
+
|
|
477
|
+
## 10. 配置系统
|
|
478
|
+
|
|
479
|
+
### 10.1 配置层级(优先级从高到低)
|
|
480
|
+
|
|
481
|
+
1. 命令行参数
|
|
482
|
+
2. 环境变量(`DEEPER_*` 前缀)
|
|
483
|
+
3. 项目级 `.deeper/config.json`
|
|
484
|
+
4. 用户级 `~/.deeper/config.json`
|
|
485
|
+
5. 默认配置
|
|
486
|
+
|
|
487
|
+
### 10.2 核心配置项
|
|
488
|
+
|
|
489
|
+
| 分类 | 配置项 | 默认值 |
|
|
490
|
+
|------|--------|--------|
|
|
491
|
+
| model | model | `deepseek-v4-pro` |
|
|
492
|
+
| model | base_url | `https://api.deepseek.com` |
|
|
493
|
+
| model | temperature | `0.7` |
|
|
494
|
+
| model | think.enabled | `true` |
|
|
495
|
+
| model | think.budget | `32000` |
|
|
496
|
+
| agent | max_sub_agents | `5` |
|
|
497
|
+
| agent | max_recursion_depth | `2` |
|
|
498
|
+
| agent | sub_agent_timeout_ms | `120000` |
|
|
499
|
+
| context | max_tokens | `100000` |
|
|
500
|
+
| context | auto_summarize_threshold | `80000` |
|
|
501
|
+
| ui | theme | `dark` |
|
|
502
|
+
| ui | show_token_count | `true` |
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
## 11. 核心数据流
|
|
507
|
+
|
|
508
|
+
```
|
|
509
|
+
用户输入 → CLI Entry → Orchestrator(任务分解)
|
|
510
|
+
→ Agent Loop(Think→Act→Observe)
|
|
511
|
+
→ Tool Executor(内置/MCP/Skill 工具)
|
|
512
|
+
→ DeepSeek API(流式响应)
|
|
513
|
+
→ Context Manager(更新上下文)
|
|
514
|
+
→ UI 渲染(流式输出)
|
|
515
|
+
→ 循环至 Orchestrator
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
## 12. 分发与安装
|
|
521
|
+
|
|
522
|
+
```bash
|
|
523
|
+
# 全局安装
|
|
524
|
+
npm install -g deeper
|
|
525
|
+
|
|
526
|
+
# 配置 API Key
|
|
527
|
+
deeper config set api_key "sk-xxx"
|
|
528
|
+
|
|
529
|
+
# 进入 REPL
|
|
530
|
+
deeper
|
|
531
|
+
|
|
532
|
+
# 单次执行
|
|
533
|
+
deeper run "帮我创建一个 React 项目"
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
---
|
|
537
|
+
|
|
538
|
+
## 13. 测试策略
|
|
539
|
+
|
|
540
|
+
| 层级 | 覆盖目标 | 框架 |
|
|
541
|
+
|------|----------|------|
|
|
542
|
+
| 单元测试 | 每个工具函数、Agent 状态机 | Vitest |
|
|
543
|
+
| 集成测试 | Agent 完整流程、Skill 执行 | Vitest |
|
|
544
|
+
| E2E 测试 | CLI 端到端交互 | Vitest + PTY |
|
|
545
|
+
| 手动测试 | UI 交互验证 | 人工 |
|
|
546
|
+
|
|
547
|
+
---
|
|
548
|
+
|
|
549
|
+
## 14. 成功标准
|
|
550
|
+
|
|
551
|
+
1. 用户可通过 `npm install -g deeper` 完成安装
|
|
552
|
+
2. 配置 API Key 后可立即进入 REPL 交互
|
|
553
|
+
3. 一句话描述需求后 AI 能完成完整项目生成
|
|
554
|
+
4. 105 个工具全部可被 AI 正确调用
|
|
555
|
+
5. Skill 系统可被 AI 自创建新 Skill
|
|
556
|
+
6. MCP 可连接外部 Server 并注册其工具
|
|
557
|
+
7. 子 Agent 能正确完成委派任务并回传结果
|
|
558
|
+
8. 终端 UI 渲染流畅无卡顿
|
|
559
|
+
9. 构建产物无 TypeScript 类型错误
|
|
560
|
+
10. 所有单元测试和集成测试通过
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "deeper-cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "DeeperCode - 一句话生成完整项目的 AI Agentic CLI 工具",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"deeper": "dist/cli/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"dev": "tsup --watch",
|
|
12
|
+
"build": "tsup",
|
|
13
|
+
"start": "node dist/cli/index.js",
|
|
14
|
+
"test": "vitest run",
|
|
15
|
+
"test:watch": "vitest",
|
|
16
|
+
"lint": "eslint src/",
|
|
17
|
+
"typecheck": "tsc --noEmit"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"ai",
|
|
21
|
+
"agent",
|
|
22
|
+
"cli",
|
|
23
|
+
"deepseek",
|
|
24
|
+
"coding-assistant"
|
|
25
|
+
],
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=20.0.0"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"cheerio": "^1.2.0",
|
|
32
|
+
"csv-parse": "^6.2.1",
|
|
33
|
+
"diff": "^9.0.0",
|
|
34
|
+
"fast-glob": "^3.3.3",
|
|
35
|
+
"glob": "^13.0.6",
|
|
36
|
+
"ink": "^5.2.1",
|
|
37
|
+
"mkdirp": "^3.0.1",
|
|
38
|
+
"open": "^11.0.0",
|
|
39
|
+
"react": "^18.3.1",
|
|
40
|
+
"toml": "^4.1.1",
|
|
41
|
+
"ws": "^8.20.1",
|
|
42
|
+
"yaml": "^2.9.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/diff": "^7.0.2",
|
|
46
|
+
"@types/node": "^25.7.0",
|
|
47
|
+
"@types/react": "^19.2.14",
|
|
48
|
+
"@types/ws": "^8.18.1",
|
|
49
|
+
"tsup": "^8.5.1",
|
|
50
|
+
"tsx": "^4.22.0",
|
|
51
|
+
"typescript": "^5.9.3",
|
|
52
|
+
"vitest": "^4.1.6"
|
|
53
|
+
},
|
|
54
|
+
"directories": {
|
|
55
|
+
"doc": "docs",
|
|
56
|
+
"test": "tests"
|
|
57
|
+
},
|
|
58
|
+
"author": "",
|
|
59
|
+
"types": "./dist/index.d.ts"
|
|
60
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { DEEPER_HOME, DEEPER_CONFIG_FILE, DEEPER_SKILLS_DIR, DEEPER_SESSIONS_DIR, DEEPER_LOGS_DIR, DEEPER_VERSION } from '../core/constants.ts';
|
|
3
|
+
import { loadConfig } from '../core/config.ts';
|
|
4
|
+
import { eventbus } from '../core/eventbus.ts';
|
|
5
|
+
|
|
6
|
+
export interface BootstrapResult {
|
|
7
|
+
success: boolean;
|
|
8
|
+
errors: string[];
|
|
9
|
+
warnings: string[];
|
|
10
|
+
config: ReturnType<typeof loadConfig>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export async function bootstrap(): Promise<BootstrapResult> {
|
|
14
|
+
const errors: string[] = [];
|
|
15
|
+
const warnings: string[] = [];
|
|
16
|
+
|
|
17
|
+
const nodeVersion = process.versions.node;
|
|
18
|
+
const majorVersion = parseInt(nodeVersion.split('.')[0], 10);
|
|
19
|
+
if (majorVersion < 20) {
|
|
20
|
+
errors.push(`Node.js 版本过低: ${nodeVersion},需要 >= 20.0.0`);
|
|
21
|
+
return { success: false, errors, warnings, config: loadConfig() };
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const dirs = [
|
|
25
|
+
DEEPER_HOME,
|
|
26
|
+
DEEPER_SKILLS_DIR,
|
|
27
|
+
DEEPER_SESSIONS_DIR,
|
|
28
|
+
DEEPER_LOGS_DIR,
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
for (const dir of dirs) {
|
|
32
|
+
try {
|
|
33
|
+
if (!existsSync(dir)) {
|
|
34
|
+
mkdirSync(dir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
} catch {
|
|
37
|
+
errors.push(`无法创建目录: ${dir}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
let config;
|
|
42
|
+
try {
|
|
43
|
+
config = loadConfig();
|
|
44
|
+
} catch (e) {
|
|
45
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
46
|
+
errors.push(`配置加载失败: ${msg}`);
|
|
47
|
+
config = loadConfig();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (!config.apiKey && !process.env.DEEPSEEK_API_KEY) {
|
|
51
|
+
warnings.push('未设置 API Key。请运行: deeper config set api_key "sk-你的密钥"');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (errors.length > 0) {
|
|
55
|
+
return { success: false, errors, warnings, config };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return { success: true, errors, warnings, config };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function checkNodeVersion(): boolean {
|
|
62
|
+
const nodeVersion = process.versions.node;
|
|
63
|
+
const majorVersion = parseInt(nodeVersion.split('.')[0], 10);
|
|
64
|
+
return majorVersion >= 20;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function getVersionInfo(): string {
|
|
68
|
+
return `DeeperCode v${DEEPER_VERSION} | Node.js ${process.versions.node} | ${process.platform} ${process.arch}`;
|
|
69
|
+
}
|