autosnippet 2.6.0 → 2.7.1
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 +137 -65
- package/bin/api-server.js +5 -0
- package/bin/cli.js +6 -1
- package/dashboard/dist/assets/{icons-rnn04CvH.js → icons-B_Xg4B-s.js} +148 -88
- package/dashboard/dist/assets/index-BjfUm8p9.js +197 -0
- package/dashboard/dist/assets/index-CkIih2CC.css +1 -0
- package/dashboard/dist/assets/{react-markdown-CWxUbOf4.js → react-markdown-BA6FB2NP.js} +1 -1
- package/dashboard/dist/assets/{syntax-highlighter-CJ2drQQb.js → syntax-highlighter-CVLHn9O5.js} +1 -1
- package/dashboard/dist/assets/{vendor-f83ah6cm.js → vendor-BotF760a.js} +61 -61
- package/dashboard/dist/index.html +6 -6
- package/lib/bootstrap.js +18 -1
- package/lib/cli/SetupService.js +86 -8
- package/lib/cli/UpgradeService.js +139 -2
- package/lib/core/ast/ProjectGraph.js +599 -0
- package/lib/core/gateway/GatewayActionRegistry.js +2 -2
- package/lib/domain/recipe/Recipe.js +3 -0
- package/lib/external/ai/AiProvider.js +83 -20
- package/lib/external/ai/providers/ClaudeProvider.js +208 -0
- package/lib/external/ai/providers/GoogleGeminiProvider.js +247 -1
- package/lib/external/ai/providers/OpenAiProvider.js +141 -0
- package/lib/external/mcp/McpServer.js +6 -1
- package/lib/external/mcp/handlers/bootstrap/pipeline/dimension-context.js +216 -0
- package/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +657 -0
- package/lib/external/mcp/handlers/bootstrap/pipeline/tier-scheduler.js +160 -0
- package/lib/external/mcp/handlers/bootstrap/skills.js +225 -0
- package/lib/external/mcp/handlers/bootstrap.js +159 -1634
- package/lib/external/mcp/handlers/browse.js +1 -1
- package/lib/external/mcp/handlers/candidate.js +1 -33
- package/lib/external/mcp/handlers/skill.js +58 -17
- package/lib/external/mcp/tools.js +4 -3
- package/lib/http/middleware/requestLogger.js +23 -4
- package/lib/http/routes/ai.js +158 -2
- package/lib/http/routes/auth.js +3 -2
- package/lib/http/routes/candidates.js +49 -25
- package/lib/http/routes/commands.js +0 -8
- package/lib/http/routes/guardRules.js +1 -16
- package/lib/http/routes/recipes.js +4 -17
- package/lib/http/routes/search.js +11 -19
- package/lib/http/routes/skills.js +2 -0
- package/lib/http/routes/snippets.js +0 -33
- package/lib/http/routes/spm.js +37 -63
- package/lib/http/utils/routeHelpers.js +31 -0
- package/lib/infrastructure/config/Paths.js +12 -0
- package/lib/infrastructure/database/DatabaseConnection.js +6 -1
- package/lib/infrastructure/logging/Logger.js +86 -3
- package/lib/infrastructure/realtime/RealtimeService.js +2 -5
- package/lib/infrastructure/vector/JsonVectorAdapter.js +26 -1
- package/lib/injection/ServiceContainer.js +55 -2
- package/lib/service/bootstrap/BootstrapTaskManager.js +400 -0
- package/lib/service/candidate/CandidateFileWriter.js +72 -27
- package/lib/service/candidate/CandidateService.js +156 -10
- package/lib/service/chat/AnalystAgent.js +245 -0
- package/lib/service/chat/CandidateGuardrail.js +134 -0
- package/lib/service/chat/ChatAgent.js +1055 -167
- package/lib/service/chat/ContextWindow.js +730 -0
- package/lib/service/chat/ConversationStore.js +3 -0
- package/lib/service/chat/HandoffProtocol.js +181 -0
- package/lib/service/chat/Memory.js +3 -0
- package/lib/service/chat/ProducerAgent.js +293 -0
- package/lib/service/chat/ToolRegistry.js +149 -5
- package/lib/service/chat/tools.js +1404 -61
- package/lib/service/guard/ExclusionManager.js +2 -0
- package/lib/service/guard/RuleLearner.js +2 -0
- package/lib/service/quality/FeedbackCollector.js +2 -0
- package/lib/service/recipe/RecipeFileWriter.js +16 -1
- package/lib/service/recipe/RecipeStatsTracker.js +2 -0
- package/lib/service/skills/SignalCollector.js +33 -6
- package/lib/service/skills/SkillAdvisor.js +2 -1
- package/lib/service/skills/SkillHooks.js +13 -5
- package/lib/service/spm/SpmService.js +2 -2
- package/lib/shared/PathGuard.js +314 -0
- package/package.json +1 -1
- package/resources/native-ui/combined-window.swift +494 -0
- package/templates/copilot-instructions.md +20 -3
- package/templates/cursor-rules/autosnippet-conventions.mdc +21 -4
- package/templates/cursor-rules/autosnippet-skills.mdc +45 -0
- package/dashboard/dist/assets/index-BBKa3Dgi.js +0 -195
- package/dashboard/dist/assets/index-DLsECfzW.css +0 -1
package/README.md
CHANGED
|
@@ -31,11 +31,13 @@ AI 编码助手生成的代码往往脱离项目上下文——不知道团队
|
|
|
31
31
|
|
|
32
32
|
| 概念 | 说明 |
|
|
33
33
|
|------|------|
|
|
34
|
-
| **Recipe** | 知识库的基本单元——一段代码模式 + 使用说明 +
|
|
35
|
-
| **Candidate** | 待审核的候选知识——来自 AI
|
|
36
|
-
| **Dashboard** | Web 管理后台(`asd ui
|
|
37
|
-
| **Guard** |
|
|
38
|
-
| **Skills** | Cursor Agent
|
|
34
|
+
| **Recipe** | 知识库的基本单元——一段代码模式 + 使用说明 + 元数据,存储在 SQLite 中,可导出为 Markdown 到 `AutoSnippet/recipes/` |
|
|
35
|
+
| **Candidate** | 待审核的候选知识——来自 AI 扫描、手动提交、剪贴板或 Bootstrap 冷启动,经 Dashboard 人工审核后晋升为 Recipe |
|
|
36
|
+
| **Dashboard** | Web 管理后台(`asd ui`),10 个功能视图:Recipes / Candidates / AI Chat / SPM Explorer / 知识图谱 / 依赖图 / Guard / Skills / Xcode 模拟器 / Help |
|
|
37
|
+
| **Guard** | 代码审查引擎——基于知识库中的规则对代码做合规检查,支持文件 / Target / 项目三级范围 |
|
|
38
|
+
| **Skills** | 13 个 Cursor Agent 技能包——覆盖候选生成、冷启动、Guard 审计、意图路由、生命周期管理等场景 |
|
|
39
|
+
| **Bootstrap** | 冷启动引擎——自动扫描 SPM Target + AST 分析,9 维度启发式提取代码模式,AI 精炼后生成 Candidate |
|
|
40
|
+
| **ChatAgent** | Dual-Agent 对话系统(Analyst + Producer),支持项目感知、信心信号、组合工具链和跨对话轻量记忆 |
|
|
39
41
|
|
|
40
42
|
## 快速开始
|
|
41
43
|
|
|
@@ -52,6 +54,9 @@ asd install:full
|
|
|
52
54
|
|
|
53
55
|
# 4. 启动 Dashboard
|
|
54
56
|
asd ui # 启动 Web 后台 + 文件监听 + 语义索引
|
|
57
|
+
|
|
58
|
+
# 5. 检查环境状态
|
|
59
|
+
asd status # 自检项目根、AI Provider、索引、Dashboard
|
|
55
60
|
```
|
|
56
61
|
|
|
57
62
|
> **注意**:始终在**你的项目目录**中执行 `asd` 命令,而非 AutoSnippet 源码仓库。
|
|
@@ -66,7 +71,7 @@ asd ui # 启动 Web 后台 + 文件监听 + 语义索引
|
|
|
66
71
|
│ ① 扫描提取 ② 人工审核 │
|
|
67
72
|
│ Cursor AI 扫描 Target ──→ Candidates ──→ Recipe 入库 │
|
|
68
73
|
│ asd ais <Target> Dashboard │
|
|
69
|
-
│
|
|
74
|
+
│ Bootstrap 冷启动 / 剪贴板 │
|
|
70
75
|
│ │
|
|
71
76
|
│ ③ AI 按规范生成 ④ 持续沉淀 │
|
|
72
77
|
│ Cursor/Copilot 检索 Recipe ──→ 生成代码 ──→ 好代码再入库 │
|
|
@@ -77,7 +82,7 @@ asd ui # 启动 Web 后台 + 文件监听 + 语义索引
|
|
|
77
82
|
|
|
78
83
|
### 三种使用方式
|
|
79
84
|
|
|
80
|
-
**① Cursor AI(推荐)**:自然语言驱动,Cursor 通过 13 个 Skills +
|
|
85
|
+
**① Cursor AI(推荐)**:自然语言驱动,Cursor 通过 13 个 Skills + 36 个 MCP 工具与知识库交互。
|
|
81
86
|
|
|
82
87
|
```
|
|
83
88
|
用户:「扫描 NetworkModule 这个 Target,提取最佳实践」
|
|
@@ -85,24 +90,32 @@ Cursor → autosnippet_get_targets → autosnippet_get_target_files → 逐文
|
|
|
85
90
|
→ Dashboard Candidates 页面审核 → 保存为 Recipe
|
|
86
91
|
```
|
|
87
92
|
|
|
88
|
-
**② Dashboard Web UI**:可视化管理一切——Recipe
|
|
93
|
+
**② Dashboard Web UI**:可视化管理一切——Recipe 编辑、Candidate 审核、AI Chat 对话、知识图谱、SPM 探索、Guard 审查、冷启动向导。
|
|
89
94
|
|
|
90
95
|
**③ 命令行 CLI**:`asd` 命令覆盖全部操作,适合自动化和脚本集成。
|
|
91
96
|
|
|
92
97
|
## Dashboard
|
|
93
98
|
|
|
94
|
-
`asd ui` 启动后访问 Web
|
|
99
|
+
`asd ui` 启动后访问 Web 管理后台(默认 http://127.0.0.1:3000):
|
|
95
100
|
|
|
96
101
|

|
|
97
102
|
|
|
98
|
-
|
|
103
|
+
**10 个功能视图**:
|
|
99
104
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
105
|
+
| 视图 | 说明 |
|
|
106
|
+
|------|------|
|
|
107
|
+
| **Recipes** | 浏览、编辑、发布、弃用知识条目;详情抽屉支持 Markdown 编辑与关联关系管理 |
|
|
108
|
+
| **Candidates** | 审核 AI / 手动提交的候选,一键入库或批量操作,支持 AI 润色 |
|
|
109
|
+
| **AI Chat** | Dual-Agent 智能对话(Analyst 分析 + Producer 生产),项目感知 + 跨对话记忆 |
|
|
110
|
+
| **SPM Explorer** | SPM Target 浏览与扫描,候选 vs Recipe 对比抽屉,头文件编辑 |
|
|
111
|
+
| **Dep Graph** | 依赖关系图可视化 |
|
|
112
|
+
| **Knowledge Graph** | Recipe 关联关系的知识图谱可视化(依赖 / 扩展 / 冲突等),AI 自动发现关系,按 category 分组 |
|
|
113
|
+
| **Guard** | 代码合规审查,查看违规记录与修复建议 |
|
|
114
|
+
| **Skills** | 浏览与管理 Agent Skill 文档 |
|
|
115
|
+
| **Xcode Simulator** | 在浏览器中模拟 `as:search` / `as:create` / `as:audit` 指令 |
|
|
116
|
+
| **Help** | 使用帮助与快捷键参考 |
|
|
117
|
+
|
|
118
|
+
**辅助功能**:全局搜索面板、LLM 配置弹窗、Bootstrap 进度视图、实时 WebSocket 更新。
|
|
106
119
|
|
|
107
120
|
## IDE 集成
|
|
108
121
|
|
|
@@ -110,9 +123,9 @@ Cursor → autosnippet_get_targets → autosnippet_get_target_files → 逐文
|
|
|
110
123
|
|
|
111
124
|
AutoSnippet 为 Cursor 提供完整的 MCP + Skills 集成:
|
|
112
125
|
|
|
113
|
-
- **
|
|
114
|
-
- **13 个 Agent Skills**:`autosnippet-candidates`、`autosnippet-guard`、`autosnippet-coldstart` 等,引导 AI 正确使用工具
|
|
115
|
-
- **写操作 Gateway 保护**:
|
|
126
|
+
- **36 个 MCP 工具**:搜索(4 种模式)、Guard 检查、候选提交 / 校验 / 查重、知识图谱查询、Bootstrap 冷启动、Skills 管理等
|
|
127
|
+
- **13 个 Agent Skills**:`autosnippet-candidates`、`autosnippet-guard`、`autosnippet-coldstart`、`autosnippet-intent` 等,引导 AI 正确使用工具
|
|
128
|
+
- **写操作 Gateway 保护**:9 个写操作经过权限 / 宪法 / 审计三重检查
|
|
116
129
|
|
|
117
130
|
```bash
|
|
118
131
|
asd install:cursor-skill --mcp # 安装 Skills + MCP 配置
|
|
@@ -138,20 +151,36 @@ asd install:vscode-copilot # 配置 MCP 和 Copilot 指令
|
|
|
138
151
|
|
|
139
152
|
## CLI 命令参考
|
|
140
153
|
|
|
141
|
-
| 命令 | 说明 |
|
|
154
|
+
| 命令 | 说明 | 常用选项 |
|
|
155
|
+
|------|------|----------|
|
|
156
|
+
| `asd setup` | 初始化项目(创建 AutoSnippet/ 目录和配置) | `--force`、`--seed` |
|
|
157
|
+
| `asd ui` | 启动 Dashboard + API 服务 | `-p <port>`、`-b`(浏览器)、`--api-only` |
|
|
158
|
+
| `asd status` | 环境自检(项目根、AI、索引、Dashboard 状态) | — |
|
|
159
|
+
| `asd ais [target]` | AI 扫描 Target → 生成 Candidates | `-m <max-files>`、`--dry-run`、`--json` |
|
|
160
|
+
| `asd search <query>` | 搜索知识库 | `-t <type>`、`-m <mode>`(keyword/bm25/semantic)、`-l <limit>` |
|
|
161
|
+
| `asd guard <file>` | 对文件运行 Guard 规则检查 | `-s <scope>`(file/target/project)、`--json` |
|
|
162
|
+
| `asd watch` | 启动文件监控(`as:c` / `as:s` / `as:a` 指令) | `-e <exts>`、`--guard` |
|
|
163
|
+
| `asd server` | 单独启动 API 服务器 | `-p <port>`、`-H <host>` |
|
|
164
|
+
| `asd sync` | 增量同步 `recipes/*.md` → DB(Markdown = Source of Truth) | `--dry-run`、`--force` |
|
|
165
|
+
| `asd upgrade` | 升级 IDE 集成(MCP / Skills / Cursor Rules) | `--skills-only`、`--mcp-only` |
|
|
166
|
+
| `asd install:full` | 全量安装(Skills + MCP + Native UI + Cursor Rules) | — |
|
|
167
|
+
|
|
168
|
+
## MCP 工具一览
|
|
169
|
+
|
|
170
|
+
36 个 MCP 工具按功能分组:
|
|
171
|
+
|
|
172
|
+
| 分类 | 工具 |
|
|
142
173
|
|------|------|
|
|
143
|
-
|
|
|
144
|
-
|
|
|
145
|
-
|
|
|
146
|
-
|
|
|
147
|
-
|
|
|
148
|
-
|
|
|
149
|
-
|
|
|
150
|
-
|
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
| `asd upgrade` | 升级 IDE 集成文件 |
|
|
154
|
-
| `asd install:full` | 全量安装(Skills + MCP + Native UI) |
|
|
174
|
+
| **系统** | `autosnippet_health`、`autosnippet_capabilities` |
|
|
175
|
+
| **搜索** | `autosnippet_search`(统合入口)、`autosnippet_context_search`(4 层漏斗)、`autosnippet_keyword_search`、`autosnippet_semantic_search` |
|
|
176
|
+
| **Recipe 浏览** | `autosnippet_list_recipes`、`autosnippet_get_recipe`、`autosnippet_list_rules`、`autosnippet_list_patterns`、`autosnippet_list_facts`、`autosnippet_recipe_insights`、`autosnippet_confirm_usage` |
|
|
177
|
+
| **候选管理** | `autosnippet_validate_candidate`、`autosnippet_check_duplicate`、`autosnippet_submit_candidate`、`autosnippet_submit_candidates`、`autosnippet_submit_draft_recipes`、`autosnippet_enrich_candidates` |
|
|
178
|
+
| **知识图谱** | `autosnippet_graph_query`、`autosnippet_graph_impact`、`autosnippet_graph_path`、`autosnippet_graph_stats` |
|
|
179
|
+
| **项目结构** | `autosnippet_get_targets`、`autosnippet_get_target_files`、`autosnippet_get_target_metadata` |
|
|
180
|
+
| **Guard** | `autosnippet_guard_check`、`autosnippet_guard_audit_files`、`autosnippet_scan_project` |
|
|
181
|
+
| **冷启动** | `autosnippet_bootstrap_knowledge`、`autosnippet_bootstrap_refine` |
|
|
182
|
+
| **Skills** | `autosnippet_list_skills`、`autosnippet_load_skill`、`autosnippet_create_skill`、`autosnippet_suggest_skills` |
|
|
183
|
+
| **治理** | `autosnippet_compliance_report` |
|
|
155
184
|
|
|
156
185
|
## 配置
|
|
157
186
|
|
|
@@ -162,22 +191,27 @@ asd install:vscode-copilot # 配置 MCP 和 Copilot 指令
|
|
|
162
191
|
```env
|
|
163
192
|
ASD_AI_PROVIDER=gemini # gemini / openai / anthropic
|
|
164
193
|
ASD_GOOGLE_API_KEY=your-key # Gemini API Key
|
|
194
|
+
# ASD_OPENAI_API_KEY=your-key # OpenAI API Key
|
|
195
|
+
# ASD_ANTHROPIC_API_KEY=your-key # Claude API Key
|
|
165
196
|
```
|
|
166
197
|
|
|
198
|
+
支持的 AI Provider:**Gemini**(推荐)、**OpenAI**、**Claude (Anthropic)**。
|
|
199
|
+
|
|
167
200
|
### 项目目录结构
|
|
168
201
|
|
|
169
202
|
```
|
|
170
203
|
your-project/
|
|
171
204
|
├── AutoSnippet/ # 知识库目录(建议整体作为 Git 子仓库)
|
|
172
|
-
│ ├── recipes/ # Recipe Markdown
|
|
205
|
+
│ ├── recipes/ # Recipe Markdown 导出(Source of Truth)
|
|
206
|
+
│ ├── skills/ # 项目级 Agent Skills
|
|
173
207
|
│ └── .autosnippet/ # 数据库、索引、Guard 配置等
|
|
174
208
|
├── .cursor/
|
|
175
|
-
│ ├── mcp.json
|
|
176
|
-
│ ├── rules/
|
|
177
|
-
│ └── skills/
|
|
209
|
+
│ ├── mcp.json # MCP 配置(asd setup 自动生成)
|
|
210
|
+
│ ├── rules/ # Cursor Rules(asd install 生成)
|
|
211
|
+
│ └── skills/ # Agent Skills(asd install 生成)
|
|
178
212
|
├── .vscode/
|
|
179
|
-
│ └── settings.json
|
|
180
|
-
└── .env
|
|
213
|
+
│ └── settings.json # VSCode MCP 配置
|
|
214
|
+
└── .env # AI Provider 配置
|
|
181
215
|
```
|
|
182
216
|
|
|
183
217
|
### Git 策略建议
|
|
@@ -190,37 +224,49 @@ your-project/
|
|
|
190
224
|
## 架构概览
|
|
191
225
|
|
|
192
226
|
```
|
|
193
|
-
|
|
194
|
-
│ IDE Layer
|
|
195
|
-
│ Cursor (Skills + MCP) │ VSCode (Copilot) │ Xcode
|
|
196
|
-
|
|
197
|
-
│ MCP (stdio)
|
|
198
|
-
|
|
199
|
-
│ AutoSnippet Core
|
|
200
|
-
│ ┌──────────┐ ┌──────────┐ ┌──────────┐
|
|
201
|
-
│ │ Gateway │ │ ChatAgent│ │ Bootstrap│ │
|
|
202
|
-
│ │ (权限/ │ │ (
|
|
203
|
-
│ │ 宪法/ │ │
|
|
204
|
-
│ │ 审计) │ │
|
|
205
|
-
│ └──────────┘ └──────────┘ └──────────┘
|
|
206
|
-
│
|
|
207
|
-
│ │ Services: Recipe │ Candidate │ Guard │ Search │
|
|
208
|
-
│ │ Knowledge Graph │ SPM │
|
|
209
|
-
│
|
|
210
|
-
│
|
|
211
|
-
│ │
|
|
212
|
-
│
|
|
213
|
-
|
|
227
|
+
┌──────────────────────────────────────────────────────────┐
|
|
228
|
+
│ IDE Layer │
|
|
229
|
+
│ Cursor (Skills + MCP) │ VSCode (Copilot) │ Xcode │
|
|
230
|
+
└────────────┬────────────────────┬─────────────────────────┘
|
|
231
|
+
│ MCP (stdio) │ HTTP API
|
|
232
|
+
┌────────────┴────────────────────┴─────────────────────────┐
|
|
233
|
+
│ AutoSnippet Core │
|
|
234
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
|
|
235
|
+
│ │ Gateway │ │ ChatAgent│ │ Bootstrap│ │ Dashboard │ │
|
|
236
|
+
│ │ (权限/ │ │ (Dual │ │ (SPM + │ │ (React 19 +│ │
|
|
237
|
+
│ │ 宪法/ │ │ Agent + │ │ AST + │ │ Vite 6 + │ │
|
|
238
|
+
│ │ 审计) │ │ Memory) │ │ AI) │ │ Tailwind) │ │
|
|
239
|
+
│ └──────────┘ └──────────┘ └──────────┘ └─────────────┘ │
|
|
240
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
241
|
+
│ │ 13 Services: Recipe │ Candidate │ Guard │ Search │ │
|
|
242
|
+
│ │ Knowledge Graph │ SPM │ Bootstrap │ Chat │ Skills │ │
|
|
243
|
+
│ │ Quality │ Context │ Automation │ Snippet │ │
|
|
244
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
245
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
246
|
+
│ │ Core: Gateway │ Constitution │ Permission │ AST │ │
|
|
247
|
+
│ │ Session │ Capability │ │
|
|
248
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
249
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
250
|
+
│ │ Storage: SQLite (better-sqlite3) + 向量索引 │ │
|
|
251
|
+
│ │ Search: InvertedIndex → CoarseRanker → │ │
|
|
252
|
+
│ │ MultiSignalRanker → RetrievalFunnel │ │
|
|
253
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
254
|
+
└───────────────────────────────────────────────────────────┘
|
|
214
255
|
```
|
|
215
256
|
|
|
216
257
|
## 技术栈
|
|
217
258
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
-
|
|
222
|
-
|
|
223
|
-
|
|
259
|
+
| 层级 | 技术 |
|
|
260
|
+
|------|------|
|
|
261
|
+
| **Runtime** | Node.js ≥ 20,ESM |
|
|
262
|
+
| **后端** | Express + better-sqlite3 + MCP SDK + Socket.IO |
|
|
263
|
+
| **前端** | React 19 + TypeScript 5 + Vite 6 + Tailwind CSS 4 |
|
|
264
|
+
| **AI** | Gemini / OpenAI / Claude(通过 AiProvider 抽象层) |
|
|
265
|
+
| **AST** | Tree-sitter(Swift / ObjC) |
|
|
266
|
+
| **搜索** | 4 层检索管线:InvertedIndex → CoarseRanker → MultiSignalRanker → RetrievalFunnel |
|
|
267
|
+
| **实时通信** | WebSocket(Socket.IO),Dashboard 实时更新 |
|
|
268
|
+
| **动画** | Framer Motion |
|
|
269
|
+
| **代码高亮** | Prism.js + react-syntax-highlighter |
|
|
224
270
|
|
|
225
271
|
## Xcode 深度集成
|
|
226
272
|
|
|
@@ -235,6 +281,32 @@ AutoSnippet 不依赖 Xcode 插件,通过 **AppleScript + FileWatcher + 原生
|
|
|
235
281
|
| **三层防误触** | Self-write 冷却 + 内容哈希去重 + Xcode 焦点检测,区分手动保存与自动保存 |
|
|
236
282
|
| **Code Snippet** | `ass`(搜索插入)、`asc`(创建候选)、`asa`(代码审查),`asd setup` 注册后重启 Xcode 生效 |
|
|
237
283
|
|
|
284
|
+
## 开发
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
# 克隆仓库
|
|
288
|
+
git clone https://github.com/GxFn/AutoSnippet.git
|
|
289
|
+
cd AutoSnippet
|
|
290
|
+
npm install
|
|
291
|
+
|
|
292
|
+
# 链接开发版到全局
|
|
293
|
+
npm run dev:link
|
|
294
|
+
|
|
295
|
+
# 运行测试
|
|
296
|
+
npm test # 全部测试
|
|
297
|
+
npm run test:unit # 单元测试
|
|
298
|
+
npm run test:integration # 集成测试
|
|
299
|
+
npm run test:e2e # 端到端测试
|
|
300
|
+
npm run test:coverage # 覆盖率报告
|
|
301
|
+
|
|
302
|
+
# 构建 Dashboard
|
|
303
|
+
npm run build:dashboard
|
|
304
|
+
|
|
305
|
+
# 发布
|
|
306
|
+
npm run release:check # 发布前检查
|
|
307
|
+
npm run release:patch # 补丁版本
|
|
308
|
+
```
|
|
309
|
+
|
|
238
310
|
## 贡献
|
|
239
311
|
|
|
240
312
|
欢迎 [Issue](https://github.com/GxFn/AutoSnippet/issues) 与 [PR](https://github.com/GxFn/AutoSnippet/pulls)。
|
package/bin/api-server.js
CHANGED
|
@@ -22,6 +22,10 @@ async function main() {
|
|
|
22
22
|
timestamp: new Date().toISOString(),
|
|
23
23
|
});
|
|
24
24
|
|
|
25
|
+
// 配置路径安全守卫 — 阻止写操作逃逸到项目外
|
|
26
|
+
const projectRoot = process.env.ASD_PROJECT_DIR || process.cwd();
|
|
27
|
+
Bootstrap.configurePathGuard(projectRoot);
|
|
28
|
+
|
|
25
29
|
// 初始化应用程序引导
|
|
26
30
|
const bootstrap = new Bootstrap({ env: process.env.NODE_ENV || 'development' });
|
|
27
31
|
const components = await bootstrap.initialize();
|
|
@@ -34,6 +38,7 @@ async function main() {
|
|
|
34
38
|
auditLogger: components.auditLogger,
|
|
35
39
|
gateway: components.gateway,
|
|
36
40
|
constitution: components.constitution,
|
|
41
|
+
projectRoot,
|
|
37
42
|
});
|
|
38
43
|
logger.info('Service container initialized successfully');
|
|
39
44
|
|
package/bin/cli.js
CHANGED
|
@@ -321,7 +321,7 @@ program
|
|
|
321
321
|
projectRoot,
|
|
322
322
|
database: db,
|
|
323
323
|
chatAgent,
|
|
324
|
-
mode: process.env.ASD_SIGNAL_MODE || '
|
|
324
|
+
mode: process.env.ASD_SIGNAL_MODE || 'auto',
|
|
325
325
|
intervalMs: parseInt(process.env.ASD_SIGNAL_INTERVAL || '3600000', 10),
|
|
326
326
|
onSuggestions: (suggestions) => {
|
|
327
327
|
try {
|
|
@@ -583,6 +583,11 @@ async function initBootstrap() {
|
|
|
583
583
|
*/
|
|
584
584
|
async function initContainer(opts = {}) {
|
|
585
585
|
const projectRoot = opts.projectRoot || process.cwd();
|
|
586
|
+
|
|
587
|
+
// 配置路径安全守卫 — 阻止写操作逃逸到项目外
|
|
588
|
+
const { default: Bootstrap } = await import('../lib/bootstrap.js');
|
|
589
|
+
Bootstrap.configurePathGuard(projectRoot);
|
|
590
|
+
|
|
586
591
|
const bootstrap = await initBootstrap();
|
|
587
592
|
const { getServiceContainer } = await import('../lib/injection/ServiceContainer.js');
|
|
588
593
|
const container = getServiceContainer();
|