stigmergy 1.2.13 → 1.3.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.
Files changed (88) hide show
  1. package/README.md +39 -3
  2. package/STIGMERGY.md +3 -0
  3. package/config/builtin-skills.json +43 -0
  4. package/config/enhanced-cli-config.json +438 -0
  5. package/docs/CLI_TOOLS_AGENT_SKILL_ANALYSIS.md +463 -0
  6. package/docs/DESIGN_CLI_HELP_ANALYZER_REFACTOR.md +726 -0
  7. package/docs/ENHANCED_CLI_AGENT_SKILL_CONFIG.md +285 -0
  8. package/docs/IMPLEMENTATION_CHECKLIST_CLI_HELP_ANALYZER_REFACTOR.md +1268 -0
  9. package/docs/INSTALLER_ARCHITECTURE.md +257 -0
  10. package/docs/LESSONS_LEARNED.md +252 -0
  11. package/docs/SPECS_CLI_HELP_ANALYZER_REFACTOR.md +287 -0
  12. package/docs/SUDO_PROBLEM_AND_SOLUTION.md +529 -0
  13. package/docs/correct-skillsio-implementation.md +368 -0
  14. package/docs/development_guidelines.md +276 -0
  15. package/docs/independent-resume-implementation.md +198 -0
  16. package/docs/resumesession-final-implementation.md +195 -0
  17. package/docs/resumesession-usage.md +87 -0
  18. package/package.json +146 -136
  19. package/scripts/analyze-router.js +168 -0
  20. package/scripts/run-comprehensive-tests.js +230 -0
  21. package/scripts/run-quick-tests.js +90 -0
  22. package/scripts/test-runner.js +344 -0
  23. package/skills/resumesession/INDEPENDENT_SKILL.md +403 -0
  24. package/skills/resumesession/README.md +381 -0
  25. package/skills/resumesession/SKILL.md +211 -0
  26. package/skills/resumesession/__init__.py +33 -0
  27. package/skills/resumesession/implementations/simple-resume.js +13 -0
  28. package/skills/resumesession/independent-resume.js +750 -0
  29. package/skills/resumesession/package.json +1 -0
  30. package/skills/resumesession/skill.json +1 -0
  31. package/src/adapters/claude/install_claude_integration.js +9 -1
  32. package/src/adapters/codebuddy/install_codebuddy_integration.js +3 -1
  33. package/src/adapters/codex/install_codex_integration.js +15 -5
  34. package/src/adapters/gemini/install_gemini_integration.js +3 -1
  35. package/src/adapters/qwen/install_qwen_integration.js +3 -1
  36. package/src/cli/commands/autoinstall.js +65 -0
  37. package/src/cli/commands/errors.js +190 -0
  38. package/src/cli/commands/independent-resume.js +395 -0
  39. package/src/cli/commands/install.js +179 -0
  40. package/src/cli/commands/permissions.js +108 -0
  41. package/src/cli/commands/project.js +485 -0
  42. package/src/cli/commands/scan.js +97 -0
  43. package/src/cli/commands/simple-resume.js +377 -0
  44. package/src/cli/commands/skills.js +158 -0
  45. package/src/cli/commands/status.js +113 -0
  46. package/src/cli/commands/stigmergy-resume.js +775 -0
  47. package/src/cli/commands/system.js +301 -0
  48. package/src/cli/commands/universal-resume.js +394 -0
  49. package/src/cli/router-beta.js +471 -0
  50. package/src/cli/utils/environment.js +75 -0
  51. package/src/cli/utils/formatters.js +47 -0
  52. package/src/cli/utils/skills_cache.js +92 -0
  53. package/src/core/cache_cleaner.js +1 -0
  54. package/src/core/cli_adapters.js +345 -0
  55. package/src/core/cli_help_analyzer.js +1236 -680
  56. package/src/core/cli_path_detector.js +702 -709
  57. package/src/core/cli_tools.js +515 -160
  58. package/src/core/coordination/nodejs/CLIIntegrationManager.js +18 -0
  59. package/src/core/coordination/nodejs/HookDeploymentManager.js +242 -412
  60. package/src/core/coordination/nodejs/HookDeploymentManager.refactored.js +323 -0
  61. package/src/core/coordination/nodejs/generators/CLIAdapterGenerator.js +363 -0
  62. package/src/core/coordination/nodejs/generators/ResumeSessionGenerator.js +932 -0
  63. package/src/core/coordination/nodejs/generators/SkillsIntegrationGenerator.js +1395 -0
  64. package/src/core/coordination/nodejs/generators/index.js +12 -0
  65. package/src/core/enhanced_cli_installer.js +1208 -608
  66. package/src/core/enhanced_cli_parameter_handler.js +402 -0
  67. package/src/core/execution_mode_detector.js +222 -0
  68. package/src/core/installer.js +151 -106
  69. package/src/core/local_skill_scanner.js +732 -0
  70. package/src/core/multilingual/language-pattern-manager.js +1 -1
  71. package/src/core/skills/BuiltinSkillsDeployer.js +188 -0
  72. package/src/core/skills/StigmergySkillManager.js +123 -16
  73. package/src/core/skills/embedded-openskills/SkillParser.js +7 -3
  74. package/src/core/smart_router.js +550 -261
  75. package/src/index.js +10 -4
  76. package/src/utils.js +66 -7
  77. package/test/cli-integration.test.js +304 -0
  78. package/test/direct_smart_router_test.js +88 -0
  79. package/test/enhanced-cli-agent-skill-test.js +485 -0
  80. package/test/simple_test.js +82 -0
  81. package/test/smart_router_test_runner.js +123 -0
  82. package/test/smart_routing_edge_cases.test.js +284 -0
  83. package/test/smart_routing_simple_verification.js +139 -0
  84. package/test/smart_routing_verification.test.js +346 -0
  85. package/test/specific-cli-agent-skill-analysis.js +385 -0
  86. package/test/unit/smart_router.test.js +295 -0
  87. package/test/very_simple_test.js +54 -0
  88. package/src/cli/router.js +0 -1783
@@ -0,0 +1,257 @@
1
+ # Stigmergy CLI 安装器架构文档
2
+
3
+ ## 📋 概述
4
+
5
+ 本文档定义了 Stigmergy CLI 中各个安装器类的职责边界和使用场景,帮助开发者理解何时使用哪个安装器类。
6
+
7
+ ## 🏗️ 安装器架构概览
8
+
9
+ ```
10
+ Stigmergy CLI 安装器体系
11
+ ├── StigmergyInstaller (完整安装器)
12
+ │ ├── 继承 EnhancedCLIInstaller 的所有功能
13
+ │ ├── 扫描和检测功能
14
+ │ ├── 基础安装功能
15
+ │ ├── 项目管理功能
16
+ │ └── Cross-CLI Hooks 生成
17
+ ├── EnhancedCLIInstaller (增强安装器)
18
+ │ ├── 权限处理
19
+ │ ├── 批量安装
20
+ │ ├── 升级功能
21
+ │ └── 错误重试
22
+ ├── BaseInstaller (抽象基类)
23
+ │ └── 定义标准接口
24
+ └── EnhancedInstaller (已弃用)
25
+ └── 功能已整合到 EnhancedCLIInstaller
26
+ ```
27
+
28
+ ## 📊 详细职责对比
29
+
30
+ | 功能/类 | StigmergyInstaller | EnhancedCLIInstaller | BaseInstaller | EnhancedInstaller |
31
+ |---------|-------------------|---------------------|---------------|-------------------|
32
+ | **继承关系** | 继承 EnhancedCLIInstaller | 独立实现 | 抽象基类 | 继承 BaseInstaller |
33
+ | **扫描 CLI 工具** | ✅ `scanCLI()` | ❌ | ✅ 抽象方法 | ❌ |
34
+ | **检测 CLI 工具** | ✅ `checkCLI()` | ❌ | ✅ 抽象方法 | ❌ |
35
+ | **基础安装** | ✅ 调用父类 `installTools()` | ✅ `installTools()` | ✅ 抽象方法 | ❌ |
36
+ | **权限处理** | ✅ 继承自父类 | ✅ `setupPermissions()` | ❌ | ❌ |
37
+ | **批量安装** | ✅ 继承自父类 | ✅ `installTools()` | ❌ | ❌ |
38
+ | **升级功能** | ✅ 继承自父类 | ✅ `upgradeTools()` | ❌ | ❌ |
39
+ | **重试机制** | ✅ 继承自父类 | ✅ 自动重试 | ❌ | ❌ |
40
+ | **部署 hooks** | ✅ `deployHooks()` | ❌ | ✅ 抽象方法 | ❌ |
41
+ | **项目文件创建** | ✅ `createProjectFiles()` | ❌ | ❌ | ❌ |
42
+ | **Cross-CLI Hooks** | ✅ `generateToolHook()` | ❌ | ❌ | ❌ |
43
+ | **工具集成配置** | ✅ `installToolIntegration()` | ❌ | ❌ | ❌ |
44
+ | **错误处理** | 高级 (继承权限感知) | 高级 (权限感知) | 抽象 | 基础 |
45
+ | **推荐使用场景** | 完整功能和向后兼容 | 高级功能和权限处理 | 接口定义 | 不推荐使用 |
46
+
47
+ ## 🎯 职责详细说明
48
+
49
+ ### 1. StigmergyInstaller (完整安装器)
50
+
51
+ **文件位置:** `src/core/installer.js`
52
+
53
+ **继承关系:** 继承自 `EnhancedCLIInstaller`
54
+
55
+ **主要职责:**
56
+ - **继承自 EnhancedCLIInstaller**:所有高级功能(权限处理、批量安装、升级、重试)
57
+ - **CLI 工具扫描和检测**:`scanCLI()` 和 `checkCLI()`
58
+ - **Cross-CLI Hooks 生成**:`generateToolHook()` 和 `createToolHooks()`
59
+ - **项目管理和配置**:`createProjectFiles()` 和 `deployHooks()`
60
+ - **工具集成配置**:`installToolIntegration()` 和各种工具特定配置方法
61
+ - **向后兼容性**:保持所有原有功能不变
62
+
63
+ **推荐使用场景:**
64
+ - 需要完整功能的 CLI 工具管理
65
+ - 需要保持向后兼容的项目
66
+ - 需要项目管理、配置和 Hooks 部署的复杂场景
67
+ - 工具集成配置
68
+
69
+ **使用场景:**
70
+ - 扫描已安装的 CLI 工具
71
+ - 创建项目文件
72
+ - 部署集成 hooks
73
+ - 基础安装需求
74
+
75
+ **核心方法:**
76
+ ```javascript
77
+ - scanCLI() // 扫描所有 CLI 工具
78
+ - checkCLI(toolName) // 检查单个 CLI 工具
79
+ - installTools() // 基础安装 (无权限处理)
80
+ - deployHooks() // 部署 hooks
81
+ - createProjectFiles() // 创建项目文件
82
+ - installToolIntegration() // 工具集成配置
83
+ ```
84
+
85
+ ### 2. EnhancedCLIInstaller (增强安装器)
86
+
87
+ **文件位置:** `src/core/enhanced_cli_installer.js`
88
+
89
+ **主要职责:**
90
+ - 高级权限处理
91
+ - 批量安装优化
92
+ - 工具升级功能
93
+ - 自动重试机制
94
+ - 跨平台权限提升
95
+
96
+ **使用场景:**
97
+ - 需要权限处理的安装
98
+ - 批量安装多个工具
99
+ - 升级现有工具
100
+ - 权限受限环境下的安装
101
+
102
+ **核心方法:**
103
+ ```javascript
104
+ - setupPermissions() // 权限设置和检测
105
+ - installTools() // 批量安装 (有权限处理)
106
+ - upgradeTools() // 批量升级
107
+ - installTool() // 单工具安装
108
+ - executeElevatedInstallation() // 权限提升安装
109
+ - isPermissionError() // 权限错误检测
110
+ ```
111
+
112
+ ### 3. BaseInstaller (抽象基类)
113
+
114
+ **文件位置:** `src/core/base_installer.js`
115
+
116
+ **主要职责:**
117
+ - 定义安装器标准接口
118
+ - 提供基础实现
119
+ - 确保继承类实现必需方法
120
+
121
+ **使用场景:**
122
+ - 作为其他安装器的基础
123
+ - 定义统一接口
124
+ - 代码复用
125
+
126
+ ## 🚀 使用指南
127
+
128
+ ### 何时使用 StigmergyInstaller?
129
+
130
+ ```javascript
131
+ // 场景 1: 扫描和检测
132
+ const installer = new StigmergyInstaller();
133
+ const { available, missing } = await installer.scanCLI();
134
+
135
+ // 场景 2: 部署 hooks
136
+ await installer.deployHooks(availableTools);
137
+
138
+ // 场景 3: 创建项目文件
139
+ await installer.createProjectFiles();
140
+ ```
141
+
142
+ ### 何时使用 EnhancedCLIInstaller?
143
+
144
+ ```javascript
145
+ // 场景 1: 需要权限处理的安装
146
+ const enhancedInstaller = new EnhancedCLIInstaller({
147
+ verbose: true,
148
+ autoRetry: true,
149
+ maxRetries: 2
150
+ });
151
+
152
+ // 场景 2: 批量安装
153
+ const result = await enhancedInstaller.installTools(toolNames, toolInfos);
154
+
155
+ // 场景 3: 升级工具
156
+ const upgradeResult = await enhancedInstaller.upgradeTools(toolNames, toolInfos);
157
+ ```
158
+
159
+ ## 🔄 集成模式
160
+
161
+ ### 模式 1: 分离式使用
162
+ ```javascript
163
+ // 扫描使用基础安装器
164
+ const baseInstaller = new StigmergyInstaller();
165
+ const scanResult = await baseInstaller.scanCLI();
166
+
167
+ // 安装使用增强安装器
168
+ const enhancedInstaller = new EnhancedCLIInstaller();
169
+ await enhancedInstaller.installTools(missingTools);
170
+ ```
171
+
172
+ ### 模式 2: 根据需求选择
173
+ ```javascript
174
+ function createInstaller(options) {
175
+ if (options.needPermissions) {
176
+ return new EnhancedCLIInstaller(options);
177
+ } else {
178
+ return new StigmergyInstaller();
179
+ }
180
+ }
181
+ ```
182
+
183
+ ## ⚠️ 注意事项
184
+
185
+ ### 避免的陷阱
186
+
187
+ 1. **不要混淆 installTools 方法**
188
+ - `StigmergyInstaller.installTools()`: 基础安装
189
+ - `EnhancedCLIInstaller.installTools()`: 权限感知的安装
190
+
191
+ 2. **不要在权限受限环境使用 StigmergyInstaller**
192
+ - 在系统目录中使用可能失败
193
+ - 应该使用 EnhancedCLIInstaller
194
+
195
+ 3. **不要混合使用安装器方法**
196
+ - 每个安装器都有完整的功能
197
+ - 不需要从一个调用另一个的方法
198
+
199
+ ### 性能考虑
200
+
201
+ - **扫描操作**: 使用 StigmergyInstaller (更轻量)
202
+ - **安装操作**: 使用 EnhancedCLIInstaller (功能更完整)
203
+ - **批量操作**: 优先使用 EnhancedCLIInstaller
204
+
205
+ ## 🔧 配置建议
206
+
207
+ ### 开发环境
208
+ ```javascript
209
+ const installer = new StigmergyInstaller({
210
+ verbose: true // 开发时需要详细日志
211
+ });
212
+ ```
213
+
214
+ ### 生产环境
215
+ ```javascript
216
+ const installer = new EnhancedCLIInstaller({
217
+ verbose: false,
218
+ autoRetry: true,
219
+ maxRetries: 2
220
+ });
221
+ ```
222
+
223
+ ### 权限受限环境
224
+ ```javascript
225
+ const installer = new EnhancedCLIInstaller({
226
+ autoRetry: true,
227
+ maxRetries: 3,
228
+ timeout: 600000 // 增加超时时间
229
+ });
230
+ ```
231
+
232
+ ## 📈 未来改进计划
233
+
234
+ ### 短期 (1-2 个月)
235
+ - [ ] 统一 installTools 接口
236
+ - [ ] 消除功能重复
237
+ - [ ] 添加安装器工厂模式
238
+
239
+ ### 中期 (3-6 个月)
240
+ - [ ] 插件化安装器系统
241
+ - [ ] 配置文件驱动的安装器选择
242
+ - [ ] 安装器性能监控
243
+
244
+ ### 长期 (6+ 个月)
245
+ - [ ] 动态安装器加载
246
+ - [ ] 云端安装器配置
247
+ - [ ] 智能安装器选择算法
248
+
249
+ ## 📝 总结
250
+
251
+ Stigmergy CLI 的安装器架构设计遵循单一职责原则:
252
+
253
+ - **StigmergyInstaller**: 负责扫描、检测、基础安装、项目管理
254
+ - **EnhancedCLIInstaller**: 负责权限处理、批量操作、升级、重试
255
+ - **BaseInstaller**: 提供统一接口和基础实现
256
+
257
+ 选择合适的安装器类可以确保最佳的性能和用户体验。
@@ -0,0 +1,252 @@
1
+ # 错误教训记录 (LESSONS LEARNED)
2
+
3
+ 本文档记录 Stigmergy 项目开发过程中遇到的重大错误和经验教训,**必须仔细阅读并避免重复犯错**。
4
+
5
+ ---
6
+
7
+ ## 🔴 致命错误 #1: 模板字符串中的正则表达式转义
8
+
9
+ **日期**: 2025-12-25
10
+ **影响**: 生产环境语法错误,所有 CLI 工具的 ResumeSession 集成失效
11
+ **修复版本**: v1.3.2-beta.3
12
+ **调试时间**: 约 2 小时
13
+ **失败尝试**: 3 次
14
+
15
+ ### 问题描述
16
+
17
+ 生成的 `resumesession-history.js` 文件包含语法错误:
18
+
19
+ ```javascript
20
+ SyntaxError: Invalid or unexpected token
21
+ at resumesession-history.js:515
22
+ const cleanInput = input.replace(/^\\/?stigmergy-resume\s*/i, '').trim();
23
+ ^^^^^^^
24
+ ```
25
+
26
+ ### 错误代码
27
+
28
+ **文件**: `src/core/coordination/nodejs/generators/ResumeSessionGenerator.js`
29
+ **位置**: Line 537, 627
30
+
31
+ ```javascript
32
+ // ❌ 错误写法
33
+ const cleanInput = input.replace(/^\\\\/?\${commandName}\\s*/i, '').trim();
34
+ const parts = cleanInput.split(/\\\\s+/).filter(p => p.length > 0);
35
+ ```
36
+
37
+ ### 根本原因分析
38
+
39
+ #### 错误 #1: 阻止了模板插值
40
+
41
+ ```javascript
42
+ \${commandName} // ❌ 这会生成字面量 "${commandName}",而不是插值后的值!
43
+ ${commandName} // ✅ 这才会插值生成 "/stigmergy-resume"
44
+ ```
45
+
46
+ **错误后果**:生成的代码中包含 `${commandName}` 字面量,导致语法错误。
47
+
48
+ #### 错误 #2: 正则字面量中的 `/` 冲突
49
+
50
+ ```javascript
51
+ // 当 commandName = "/stigmergy-resume" 时
52
+ // 生成的代码:
53
+ const cleanInput = input.replace(/^\\/?\/stigmergy-resume\s*/i, '').trim();
54
+ // ↑ 第一个 / 关闭了正则字面量
55
+ // stigmergy-resume\s*/i ← 这部分变成了无关代码
56
+ ```
57
+
58
+ **错误后果**:正则表达式被提前关闭,后续代码变成语法错误。
59
+
60
+ #### 错误 #3: 反斜杠转义计算错误
61
+
62
+ ```
63
+ 模板字符串转义层级:
64
+ 源文件 → 模板字符串 → 生成代码 → 正则表达式
65
+
66
+ 错误的计算:
67
+ 源文件写:/^\\\\/?\${commandName}\\s*/i
68
+ 期望生成:/^\\/?stigmergy-resume\s*/i
69
+ 实际生成:/^\\/?${commandName}\s*/i ← 未插值 + 正则破坏
70
+ ```
71
+
72
+ ### 正确的解决方案
73
+
74
+ ```javascript
75
+ // ✅ 正确写法
76
+ const cleanInput = input.replace(
77
+ new RegExp('^\\\\\\\\/?' + '${commandName}' + '\\\\\s*', 'i'),
78
+ ''
79
+ ).trim();
80
+ const parts = cleanInput.split(/\\\s+/).filter(p => p.length > 0);
81
+ ```
82
+
83
+ ### 转义计算公式
84
+
85
+ ```
86
+ 源文件中的反斜杠数 = 目标反斜杠数 × 2^(嵌套层数)
87
+ ```
88
+
89
+ **实际应用**:
90
+
91
+ | 目标 | 在模板字符串中写 | 生成后 | 解释 |
92
+ |------|------------------|--------|------|
93
+ | `\s` | `\\s` | `\s` | 模板转义 1 次 |
94
+ | `\\s` | `\\\\s` | `\\s` | 模板转义 1 次 |
95
+ | `\\\s` | `\\\\\\s` | `\\s` | 字符串内容为 `\\s` |
96
+
97
+ ### 为什么使用 RegExp 构造函数?
98
+
99
+ ```javascript
100
+ // ❌ 危险:正则字面量
101
+ /^\\\\/?\/stigmergy-resume\s*/i
102
+ // ↑ 与命令名中的 / 冲突
103
+
104
+ // ✅ 安全:RegExp 构造函数
105
+ new RegExp('^\\\\\\\\/?' + '/stigmergy-resume' + '\\\\\s*', 'i')
106
+ // ↑ 通过字符串拼接避免 / 冲突
107
+ ```
108
+
109
+ ### 经验教训
110
+
111
+ #### 1. 永远记住的规则
112
+
113
+ > **在模板字符串中生成包含正则的代码时,使用 RegExp 构造函数 + 字符串拼接,永远比尝试计算正确的正则字面量转义更安全!**
114
+
115
+ ```javascript
116
+ // ✅ 安全、清晰、可维护
117
+ new RegExp('pattern' + variable + 'pattern', 'flags')
118
+
119
+ // ❌ 危险、复杂、易出错
120
+ /pattern${variable}pattern/flags
121
+ ```
122
+
123
+ #### 2. 必须遵守的规则
124
+
125
+ - [ ] **永远不要阻止插值**:使用 `${variable}`,而不是 `\${variable}`
126
+ - [ ] **动态模式 → RegExp 构造函数**:避免正则字面量中的 `/` 冲突
127
+ - [ ] **反斜杠数量必须计算**:使用公式,不能猜测
128
+ - [ ] **必须添加语法验证**:生成代码后立即测试语法
129
+ - [ ] **必须注释说明转义**:让其他人理解你的计算
130
+
131
+ #### 3. 代码审查检查清单
132
+
133
+ 涉及 **模板字符串 + 正则表达式** 的代码必须检查:
134
+
135
+ ```javascript
136
+ // ✅ 检查项
137
+ - [ ] 所有 ${variable} 是否真的需要插值(不是 \${variable})
138
+ - [ ] 如果模式包含动态的 /,是否使用了 RegExp 构造函数
139
+ - [ ] 反斜杠数量是否经过计算(而非猜测)
140
+ - [ ] 是否有语法验证测试
141
+ - [ ] 是否注释说明了转义的计算过程
142
+ ```
143
+
144
+ ### 验证工具
145
+
146
+ ```javascript
147
+ /**
148
+ * 验证生成的代码是否有语法错误
149
+ */
150
+ function validateGeneratedCode(code) {
151
+ try {
152
+ new Function(code);
153
+ return true;
154
+ } catch (e) {
155
+ console.error('❌ 语法错误:', e.message);
156
+ console.error('代码:', code);
157
+ return false;
158
+ }
159
+ }
160
+
161
+ /**
162
+ * 计算需要的反斜杠数量
163
+ */
164
+ function calculateBackslashes(targetCount, nestingDepth = 1) {
165
+ return '\\'.repeat(targetCount * Math.pow(2, nestingDepth));
166
+ }
167
+
168
+ // 使用示例
169
+ const generatedCode = generator.generateForCLI('claude');
170
+ if (!validateGeneratedCode(generatedCode)) {
171
+ throw new Error('生成的代码有语法错误!');
172
+ }
173
+ ```
174
+
175
+ ### 相关文档
176
+
177
+ - [开发规范 - 代码生成规范](./development_guidelines.md#10-代码生成规范)
178
+ - [ResumeSessionGenerator 源代码](../src/core/coordination/nodejs/generators/ResumeSessionGenerator.js)
179
+ - [修复提交](https://github.com/your-repo/commit/6a2ee2c6)
180
+
181
+ ---
182
+
183
+ ## 📋 错误教训快速参考
184
+
185
+ ### 正则表达式生成
186
+
187
+ | 场景 | ✅ 正确 | ❌ 错误 |
188
+ |------|--------|--------|
189
+ | 动态模式 | `new RegExp(pattern + var)` | `/pattern${var}/` |
190
+ | 模板插值 | `${variable}` | `\${variable}` |
191
+ | 反斜杠转义 | 通过公式计算 | 猜测数量 |
192
+ | 语法验证 | 必须添加 | 跳过测试 |
193
+
194
+ ### 转义速查表
195
+
196
+ | 生成目标 | 模板字符串中写 | 说明 |
197
+ |----------|----------------|------|
198
+ | `\s` | `\\s` | 匹配空白字符 |
199
+ | `\\s` | `\\\\s` | 字符串 `"\s"` |
200
+ | `\\\s` | `\\\\\\s` | 字符串 `"\\s"` |
201
+ | `/stigmergy-resume` | `${commandName}` | 插值命令名 |
202
+ | `RegExp('/stigmergy-resume')` | `new RegExp('${commandName}')` | 动态正则 |
203
+
204
+ ---
205
+
206
+ ## 🔄 如何添加新的错误教训
207
+
208
+ 当遇到重大错误时,请按照以下格式记录:
209
+
210
+ ```markdown
211
+ ## 🔴 致命错误 #N: [错误标题]
212
+
213
+ **日期**: YYYY-MM-DD
214
+ **影响**: [影响范围]
215
+ **修复版本**: vX.X.X
216
+ **调试时间**: 约 X 小时
217
+ **失败尝试**: X 次
218
+
219
+ ### 问题描述
220
+ [描述问题的现象和错误信息]
221
+
222
+ ### 错误代码
223
+ **文件**: [文件路径]
224
+ **位置**: Line XXX
225
+
226
+ ```javascript
227
+ // ❌ 错误写法
228
+ [错误代码]
229
+ ```
230
+
231
+ ### 根本原因分析
232
+ [分析为什么会出现这个错误]
233
+
234
+ ### 正确的解决方案
235
+ ```javascript
236
+ // ✅ 正确写法
237
+ [正确代码]
238
+ ```
239
+
240
+ ### 经验教训
241
+ [总结规则和检查清单]
242
+
243
+ ### 验证工具
244
+ [提供验证和测试方法]
245
+ ```
246
+
247
+ ---
248
+
249
+ **最后更新**: 2025-12-25
250
+ **维护者**: Stigmergy 开发团队
251
+
252
+ **记住这些教训,避免重复犯错!**